Skip to content

Commit 041bddd

Browse files
committed
Fix: Service and characteristic reversed uuid128 for ESPHome 2021.9.x and older, connecting state and characteristic handle initialization
1 parent 9164cad commit 041bddd

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

components/myhomeiot_ble_client/__init__.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import esphome.codegen as cg
22
import esphome.config_validation as cv
33
from esphome.components import myhomeiot_ble_host, esp32_ble_tracker
4-
from esphome import automation
4+
from esphome import const, automation
55
from esphome.const import (
66
CONF_ID,
77
CONF_MAC_ADDRESS,
@@ -47,23 +47,27 @@
4747
.extend(myhomeiot_ble_host.BLE_CLIENT_SCHEMA)
4848
)
4949

50+
def versiontuple(v):
51+
return tuple(map(int, (v.split("."))))
52+
5053
def to_code(config):
5154
var = cg.new_Pvariable(config[CONF_ID])
5255

56+
reversed = versiontuple(const.__version__) >= versiontuple("2021.9.0")
5357
if len(config[CONF_SERVICE_UUID]) == len(esp32_ble_tracker.bt_uuid16_format):
5458
cg.add(var.set_service_uuid16(esp32_ble_tracker.as_hex(config[CONF_SERVICE_UUID])))
5559
elif len(config[CONF_SERVICE_UUID]) == len(esp32_ble_tracker.bt_uuid32_format):
5660
cg.add(var.set_service_uuid32(esp32_ble_tracker.as_hex(config[CONF_SERVICE_UUID])))
5761
elif len(config[CONF_SERVICE_UUID]) == len(esp32_ble_tracker.bt_uuid128_format):
58-
uuid128 = esp32_ble_tracker.as_hex_array(config[CONF_SERVICE_UUID])
62+
uuid128 = esp32_ble_tracker.as_reversed_hex_array(config[CONF_SERVICE_UUID]) if reversed else esp32_ble_tracker.as_hex_array(config[CONF_SERVICE_UUID])
5963
cg.add(var.set_service_uuid128(uuid128))
6064

6165
if len(config[CONF_CHARACTERISTIC_UUID]) == len(esp32_ble_tracker.bt_uuid16_format):
6266
cg.add(var.set_char_uuid16(esp32_ble_tracker.as_hex(config[CONF_CHARACTERISTIC_UUID])))
6367
elif len(config[CONF_CHARACTERISTIC_UUID]) == len(esp32_ble_tracker.bt_uuid32_format):
6468
cg.add(var.set_char_uuid32(esp32_ble_tracker.as_hex(config[CONF_CHARACTERISTIC_UUID])))
6569
elif len(config[CONF_CHARACTERISTIC_UUID]) == len(esp32_ble_tracker.bt_uuid128_format):
66-
uuid128 = esp32_ble_tracker.as_hex_array(config[CONF_CHARACTERISTIC_UUID])
70+
uuid128 = esp32_ble_tracker.as_reversed_hex_array(config[CONF_CHARACTERISTIC_UUID]) if reversed else esp32_ble_tracker.as_hex_array(config[CONF_CHARACTERISTIC_UUID])
6771
cg.add(var.set_char_uuid128(uuid128))
6872

6973
yield cg.register_component(var, config)

components/myhomeiot_ble_client/myhomeiot_ble_client.cpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,12 @@ void MyHomeIOT_BLEClient::loop() {
3131

3232
void MyHomeIOT_BLEClient::connect() {
3333
ESP_LOGI(TAG, "[%s] Connecting", to_string(this->address).c_str());
34+
this->state_ = esp32_ble_tracker::ClientState::Connecting;
3435
if (auto status = esp_ble_gattc_open(ble_host_->gattc_if, this->remote_bda, BLE_ADDR_TYPE_PUBLIC, true))
3536
{
3637
ESP_LOGW(TAG, "[%s] open error, status (%d)", to_string(this->address).c_str(), status);
3738
report_error(esp32_ble_tracker::ClientState::Idle);
3839
}
39-
else
40-
this->state_ = esp32_ble_tracker::ClientState::Connecting;
4140
}
4241

4342
void MyHomeIOT_BLEClient::disconnect() {
@@ -108,7 +107,7 @@ void MyHomeIOT_BLEClient::gattc_event_handler(esp_gattc_cb_event_t event, esp_ga
108107
break;
109108
}
110109
ESP_LOGV(TAG, "[%s] CFG_MTU_EVT, MTU (%d)", to_string(this->address).c_str(), param->cfg_mtu.mtu);
111-
if (auto status = esp_ble_gattc_search_service(esp_gattc_if, param->cfg_mtu.conn_id, NULL)) {
110+
if (auto status = esp_ble_gattc_search_service(esp_gattc_if, param->cfg_mtu.conn_id, nullptr)) {
112111
ESP_LOGW(TAG, "[%s] search_service failed, status (%d)", to_string(this->address).c_str(), status);
113112
report_error();
114113
}
@@ -173,7 +172,7 @@ void MyHomeIOT_BLEClient::gattc_event_handler(esp_gattc_cb_event_t event, esp_ga
173172
this->char_handle, ESP_GATT_AUTH_REQ_NONE) != ESP_GATT_OK) {
174173
ESP_LOGW(TAG, "[%s] read_char error sending read request, status (%d)",
175174
to_string(this->address).c_str(), status);
176-
this->char_handle = 0;
175+
this->char_handle = ESP_GATT_ILLEGAL_HANDLE;
177176
}
178177
break;
179178
}

0 commit comments

Comments
 (0)