Skip to content

Commit 925813f

Browse files
committed
ble_gatts: fix desc val read error
1 parent 31e51fe commit 925813f

File tree

1 file changed

+53
-29
lines changed

1 file changed

+53
-29
lines changed

main/src/user/ble_gatts.c

Lines changed: 53 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
#define GATTS_CHAR_UUID_FAN 0x5301
3434
#define GATTS_NUM_HANDLE_FAN 4
3535

36+
static uint16_t desc_val_ota = 0x0000;
37+
static uint16_t desc_val_fan = 0x0000;
38+
3639
static const char *s_gatts_conn_state_str[] = {"disconnected", "connected"};
3740

3841
static void profile_ota_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param);
@@ -68,19 +71,29 @@ static void profile_ota_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t
6871

6972
memset(&rsp, 0, sizeof(esp_gatt_rsp_t));
7073
rsp.attr_value.handle = param->read.handle;
71-
rsp.attr_value.len = strlen(app_get_version()) < (ESP_GATT_DEF_BLE_MTU_SIZE - 3) ?
72-
strlen(app_get_version()) : (ESP_GATT_DEF_BLE_MTU_SIZE - 3);
73-
memcpy(rsp.attr_value.value, app_get_version(), rsp.attr_value.len);
74+
75+
if (param->read.handle == gatts_profile_tbl[PROFILE_IDX_OTA].descr_handle) {
76+
rsp.attr_value.len = 2;
77+
memcpy(rsp.attr_value.value, &desc_val_ota, sizeof(desc_val_ota));
78+
} else {
79+
rsp.attr_value.len = strlen(app_get_version()) < (ESP_GATT_DEF_BLE_MTU_SIZE - 3) ?
80+
strlen(app_get_version()) : (ESP_GATT_DEF_BLE_MTU_SIZE - 3);
81+
memcpy(rsp.attr_value.value, app_get_version(), rsp.attr_value.len);
82+
}
7483

7584
esp_ble_gatts_send_response(gatts_if, param->read.conn_id, param->read.trans_id, ESP_GATT_OK, &rsp);
7685
break;
7786
}
7887
case ESP_GATTS_WRITE_EVT: {
79-
if (!param->write.need_rsp) {
80-
if (!param->write.is_prep) {
88+
if (!param->write.is_prep) {
89+
if (param->write.handle == gatts_profile_tbl[PROFILE_IDX_OTA].descr_handle) {
90+
desc_val_ota = param->write.value[1] << 8 | param->write.value[0];
91+
} else {
8192
ota_exec((const char *)param->write.value, param->write.len);
8293
}
83-
} else {
94+
}
95+
96+
if (param->write.need_rsp) {
8497
esp_ble_gatts_send_response(gatts_if, param->write.conn_id, param->write.trans_id, ESP_GATT_OK, NULL);
8598
}
8699
break;
@@ -189,40 +202,51 @@ static void profile_fan_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t
189202

190203
memset(&rsp, 0, sizeof(esp_gatt_rsp_t));
191204
rsp.attr_value.handle = param->read.handle;
192-
rsp.attr_value.len = 8;
193205

194-
rsp.attr_value.value[0] = 0x02;
195-
rsp.attr_value.value[1] = 0x00;
196-
rsp.attr_value.value[2] = 0x00;
197-
rsp.attr_value.value[3] = 0x00;
198-
rsp.attr_value.value[4] = 0x00;
199-
rsp.attr_value.value[5] = 0x00;
200-
rsp.attr_value.value[6] = fan_get_duty();
201-
rsp.attr_value.value[7] = 0x00;
206+
if (param->read.handle == gatts_profile_tbl[PROFILE_IDX_FAN].descr_handle) {
207+
rsp.attr_value.len = 2;
208+
memcpy(rsp.attr_value.value, &desc_val_fan, sizeof(desc_val_fan));
209+
} else {
210+
rsp.attr_value.len = 8;
211+
rsp.attr_value.value[0] = 0x02;
212+
rsp.attr_value.value[1] = 0x00;
213+
rsp.attr_value.value[2] = 0x00;
214+
rsp.attr_value.value[3] = 0x00;
215+
rsp.attr_value.value[4] = 0x00;
216+
rsp.attr_value.value[5] = 0x00;
217+
rsp.attr_value.value[6] = fan_get_duty();
218+
rsp.attr_value.value[7] = 0x00;
219+
}
202220

203221
esp_ble_gatts_send_response(gatts_if, param->read.conn_id, param->read.trans_id, ESP_GATT_OK, &rsp);
204222
break;
205223
}
206224
case ESP_GATTS_WRITE_EVT: {
207225
if (!param->write.is_prep) {
208-
switch (param->write.value[0]) {
209-
case 0xEF: {
210-
if (param->write.len == 1) { // Restore Default Configuration
211-
fan_set_duty(DEFAULT_FAN_DUTY);
212-
} else if (param->write.len == 8) { // Update with New Configuration
213-
fan_set_duty(param->write.value[6]);
214-
} else {
215-
ESP_LOGE(GATTS_FAN_TAG, "command 0x%02X error", param->write.value[0]);
226+
if (param->write.handle == gatts_profile_tbl[PROFILE_IDX_FAN].descr_handle) {
227+
desc_val_fan = param->write.value[1] << 8 | param->write.value[0];
228+
} else {
229+
switch (param->write.value[0]) {
230+
case 0xEF: {
231+
if (param->write.len == 1) { // Restore Default Configuration
232+
fan_set_duty(DEFAULT_FAN_DUTY);
233+
} else if (param->write.len == 8) { // Update with New Configuration
234+
fan_set_duty(param->write.value[6]);
235+
} else {
236+
ESP_LOGE(GATTS_FAN_TAG, "command 0x%02X error", param->write.value[0]);
237+
}
238+
break;
239+
}
240+
default:
241+
ESP_LOGW(GATTS_FAN_TAG, "unknown command: 0x%02X", param->write.value[0]);
242+
break;
216243
}
217-
break;
218-
}
219-
default:
220-
ESP_LOGW(GATTS_FAN_TAG, "unknown command: 0x%02X", param->write.value[0]);
221-
break;
222244
}
223245
}
224246

225-
esp_ble_gatts_send_response(gatts_if, param->write.conn_id, param->write.trans_id, ESP_GATT_OK, NULL);
247+
if (param->write.need_rsp) {
248+
esp_ble_gatts_send_response(gatts_if, param->write.conn_id, param->write.trans_id, ESP_GATT_OK, NULL);
249+
}
226250
break;
227251
}
228252
case ESP_GATTS_EXEC_WRITE_EVT:

0 commit comments

Comments
 (0)