Protocomm BLE: Make changes in handling BLE read/write requests

1. Remove unwanted malloc during BLE send response
2. Populate the missing parameters in the response - handle, offset, auth_req
This commit is contained in:
Hrishikesh Dhayagude 2019-03-08 12:18:40 +05:30
parent 62980ae995
commit 39d8a89c80

View file

@ -110,25 +110,22 @@ static void transport_simple_ble_read(esp_gatts_cb_event_t event, esp_gatt_if_t
ESP_LOGD(TAG, "Subsequent read request for attr value"); ESP_LOGD(TAG, "Subsequent read request for attr value");
} }
esp_gatt_rsp_t *gatt_rsp = (esp_gatt_rsp_t *) malloc(sizeof(esp_gatt_rsp_t)); esp_gatt_rsp_t gatt_rsp = {0};
if (gatt_rsp != NULL) { gatt_rsp.attr_value.len = MIN(read_len, (protoble_internal->gatt_mtu - 1));
gatt_rsp->attr_value.len = MIN(read_len, (protoble_internal->gatt_mtu - 1)); gatt_rsp.attr_value.handle = param->read.handle;
if (read_len && read_buf) { gatt_rsp.attr_value.offset = param->read.offset;
memcpy(gatt_rsp->attr_value.value, gatt_rsp.attr_value.auth_req = ESP_GATT_AUTH_REQ_NONE;
if (gatt_rsp.attr_value.len && read_buf) {
memcpy(gatt_rsp.attr_value.value,
read_buf + param->read.offset, read_buf + param->read.offset,
gatt_rsp->attr_value.len); gatt_rsp.attr_value.len);
}
read_len -= gatt_rsp->attr_value.len;
} else {
ESP_LOGE(TAG, "%s, malloc failed", __func__);
return;
} }
read_len -= gatt_rsp.attr_value.len;
esp_err_t err = esp_ble_gatts_send_response(gatts_if, param->read.conn_id, esp_err_t err = esp_ble_gatts_send_response(gatts_if, param->read.conn_id,
param->read.trans_id, status, gatt_rsp); param->read.trans_id, status, &gatt_rsp);
if (err != ESP_OK) { if (err != ESP_OK) {
ESP_LOGE(TAG, "Send response error in read"); ESP_LOGE(TAG, "Send response error in read");
} }
free(gatt_rsp);
} }
static esp_err_t prepare_write_event_env(esp_gatt_if_t gatts_if, static esp_err_t prepare_write_event_env(esp_gatt_if_t gatts_if,
@ -157,23 +154,20 @@ static esp_err_t prepare_write_event_env(esp_gatt_if_t gatts_if,
prepare_write_env.prepare_len += param->write.len; prepare_write_env.prepare_len += param->write.len;
prepare_write_env.handle = param->write.handle; prepare_write_env.handle = param->write.handle;
if (param->write.need_rsp) { if (param->write.need_rsp) {
esp_gatt_rsp_t *gatt_rsp = (esp_gatt_rsp_t *) malloc(sizeof(esp_gatt_rsp_t)); esp_gatt_rsp_t gatt_rsp = {0};
if (gatt_rsp != NULL) { gatt_rsp.attr_value.len = param->write.len;
gatt_rsp->attr_value.len = param->write.len; gatt_rsp.attr_value.handle = param->write.handle;
gatt_rsp->attr_value.handle = param->write.handle; gatt_rsp.attr_value.offset = param->write.offset;
gatt_rsp->attr_value.offset = param->write.offset; gatt_rsp.attr_value.auth_req = ESP_GATT_AUTH_REQ_NONE;
gatt_rsp->attr_value.auth_req = ESP_GATT_AUTH_REQ_NONE; if (gatt_rsp.attr_value.len && param->write.value) {
memcpy(gatt_rsp->attr_value.value, param->write.value, param->write.len); memcpy(gatt_rsp.attr_value.value, param->write.value, param->write.len);
}
esp_err_t response_err = esp_ble_gatts_send_response(gatts_if, param->write.conn_id, esp_err_t response_err = esp_ble_gatts_send_response(gatts_if, param->write.conn_id,
param->write.trans_id, status, param->write.trans_id, status,
gatt_rsp); &gatt_rsp);
if (response_err != ESP_OK) { if (response_err != ESP_OK) {
ESP_LOGE(TAG, "Send response error in prep write"); ESP_LOGE(TAG, "Send response error in prep write");
} }
free(gatt_rsp);
} else {
ESP_LOGE(TAG, "%s, malloc failed", __func__);
}
} }
if (status != ESP_GATT_OK) { if (status != ESP_GATT_OK) {
if (prepare_write_env.prepare_buf) { if (prepare_write_env.prepare_buf) {