mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'feature/btdm_add_value_callback_when_send_notification_or_indicate_failed' into 'master'
component/bt: add value callback when send notification or indicate failed See merge request !1457
This commit is contained in:
commit
b13cd4adf8
@ -119,6 +119,8 @@ typedef union {
|
|||||||
struct gatts_conf_evt_param {
|
struct gatts_conf_evt_param {
|
||||||
esp_gatt_status_t status; /*!< Operation status */
|
esp_gatt_status_t status; /*!< Operation status */
|
||||||
uint16_t conn_id; /*!< Connection id */
|
uint16_t conn_id; /*!< Connection id */
|
||||||
|
uint16_t len; /*!< The indication or notification value length, len is valid when send notification or indication failed */
|
||||||
|
uint8_t *value; /*!< The indication or notification value , value is valid when send notification or indication failed */
|
||||||
} conf; /*!< Gatt server callback param of ESP_GATTS_CONF_EVT (confirm) */
|
} conf; /*!< Gatt server callback param of ESP_GATTS_CONF_EVT (confirm) */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -692,6 +692,15 @@ void bta_gatts_indicate_handle (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg)
|
|||||||
cb_data.req_data.status = status;
|
cb_data.req_data.status = status;
|
||||||
cb_data.req_data.conn_id = p_msg->api_indicate.hdr.layer_specific;
|
cb_data.req_data.conn_id = p_msg->api_indicate.hdr.layer_specific;
|
||||||
|
|
||||||
|
cb_data.req_data.value =(uint8_t *)osi_malloc(p_msg->api_indicate.len);
|
||||||
|
if (cb_data.req_data.value != NULL){
|
||||||
|
memset(cb_data.req_data.value, 0, p_msg->api_indicate.len);
|
||||||
|
cb_data.req_data.data_len = p_msg->api_indicate.len;
|
||||||
|
memcpy(cb_data.req_data.value, p_msg->api_indicate.value, p_msg->api_indicate.len);
|
||||||
|
}else{
|
||||||
|
cb_data.req_data.data_len = 0;
|
||||||
|
APPL_TRACE_ERROR("%s, malloc failed", __func__);
|
||||||
|
}
|
||||||
(*p_rcb->p_cback)(BTA_GATTS_CONF_EVT, &cb_data);
|
(*p_rcb->p_cback)(BTA_GATTS_CONF_EVT, &cb_data);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -522,6 +522,8 @@ typedef struct {
|
|||||||
UINT32 trans_id;
|
UINT32 trans_id;
|
||||||
UINT16 conn_id;
|
UINT16 conn_id;
|
||||||
tBTA_GATTS_REQ_DATA *p_data;
|
tBTA_GATTS_REQ_DATA *p_data;
|
||||||
|
UINT16 data_len;
|
||||||
|
UINT8 *value;
|
||||||
} tBTA_GATTS_REQ;
|
} tBTA_GATTS_REQ;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -527,6 +527,11 @@ static void btc_gatts_cb_param_copy_free(btc_msg_t *msg, tBTA_GATTS *p_data)
|
|||||||
osi_free(p_data->req_data.p_data);
|
osi_free(p_data->req_data.p_data);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case BTA_GATTS_CONF_EVT:
|
||||||
|
if (p_data && p_data->req_data.value){
|
||||||
|
osi_free(p_data->req_data.value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -787,6 +792,12 @@ void btc_gatts_cb_handler(btc_msg_t *msg)
|
|||||||
param.conf.conn_id = BTC_GATT_GET_CONN_ID(p_data->req_data.conn_id);
|
param.conf.conn_id = BTC_GATT_GET_CONN_ID(p_data->req_data.conn_id);
|
||||||
param.conf.status = p_data->req_data.status;
|
param.conf.status = p_data->req_data.status;
|
||||||
|
|
||||||
|
if (p_data->req_data.status != ESP_GATT_OK && p_data->req_data.value){
|
||||||
|
param.conf.len = p_data->req_data.data_len;
|
||||||
|
param.conf.value = p_data->req_data.value;
|
||||||
|
}else{
|
||||||
|
param.conf.len = 0;
|
||||||
|
}
|
||||||
btc_gatts_cb_to_app(ESP_GATTS_CONF_EVT, gatts_if, ¶m);
|
btc_gatts_cb_to_app(ESP_GATTS_CONF_EVT, gatts_if, ¶m);
|
||||||
break;
|
break;
|
||||||
case BTA_GATTS_CREATE_EVT:
|
case BTA_GATTS_CREATE_EVT:
|
||||||
|
@ -567,7 +567,6 @@ tGATT_STATUS GATTS_HandleValueIndication (UINT16 conn_id, UINT16 attr_handle, U
|
|||||||
|
|
||||||
tGATT_VALUE indication;
|
tGATT_VALUE indication;
|
||||||
BT_HDR *p_msg;
|
BT_HDR *p_msg;
|
||||||
tGATT_VALUE *p_buf;
|
|
||||||
tGATT_IF gatt_if = GATT_GET_GATT_IF(conn_id);
|
tGATT_IF gatt_if = GATT_GET_GATT_IF(conn_id);
|
||||||
UINT8 tcb_idx = GATT_GET_TCB_IDX(conn_id);
|
UINT8 tcb_idx = GATT_GET_TCB_IDX(conn_id);
|
||||||
tGATT_REG *p_reg = gatt_get_regcb(gatt_if);
|
tGATT_REG *p_reg = gatt_get_regcb(gatt_if);
|
||||||
@ -591,12 +590,16 @@ tGATT_STATUS GATTS_HandleValueIndication (UINT16 conn_id, UINT16 attr_handle, U
|
|||||||
indication.auth_req = GATT_AUTH_REQ_NONE;
|
indication.auth_req = GATT_AUTH_REQ_NONE;
|
||||||
|
|
||||||
if (GATT_HANDLE_IS_VALID(p_tcb->indicate_handle)) {
|
if (GATT_HANDLE_IS_VALID(p_tcb->indicate_handle)) {
|
||||||
|
/* TODO: need to further check whether deleting pending queue here cause reducing transport performance */
|
||||||
|
/*
|
||||||
GATT_TRACE_DEBUG ("Add a pending indication");
|
GATT_TRACE_DEBUG ("Add a pending indication");
|
||||||
if ((p_buf = gatt_add_pending_ind(p_tcb, &indication)) != NULL) {
|
if ((p_buf = gatt_add_pending_ind(p_tcb, &indication)) != NULL) {
|
||||||
cmd_status = GATT_SUCCESS;
|
cmd_status = GATT_SUCCESS;
|
||||||
} else {
|
} else {
|
||||||
cmd_status = GATT_NO_RESOURCES;
|
cmd_status = GATT_NO_RESOURCES;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
return GATT_BUSY;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if ( (p_msg = attp_build_sr_msg (p_tcb, GATT_HANDLE_VALUE_IND, (tGATT_SR_MSG *)&indication)) != NULL) {
|
if ( (p_msg = attp_build_sr_msg (p_tcb, GATT_HANDLE_VALUE_IND, (tGATT_SR_MSG *)&indication)) != NULL) {
|
||||||
|
@ -256,7 +256,11 @@ static void gattc_profile_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ESP_GATTC_NOTIFY_EVT:
|
case ESP_GATTC_NOTIFY_EVT:
|
||||||
ESP_LOGI(GATTC_TAG, "ESP_GATTC_NOTIFY_EVT, receive notify value:");
|
if (p_data->notify.is_notify){
|
||||||
|
ESP_LOGI(GATTC_TAG, "ESP_GATTC_NOTIFY_EVT, receive notify value:");
|
||||||
|
}else{
|
||||||
|
ESP_LOGI(GATTC_TAG, "ESP_GATTC_NOTIFY_EVT, receive indicate value:");
|
||||||
|
}
|
||||||
esp_log_buffer_hex(GATTC_TAG, p_data->notify.value, p_data->notify.value_len);
|
esp_log_buffer_hex(GATTC_TAG, p_data->notify.value, p_data->notify.value_len);
|
||||||
break;
|
break;
|
||||||
case ESP_GATTC_WRITE_DESCR_EVT:
|
case ESP_GATTC_WRITE_DESCR_EVT:
|
||||||
|
@ -411,7 +411,6 @@ static void gatts_profile_a_event_handler(esp_gatts_cb_event_t event, esp_gatt_i
|
|||||||
case ESP_GATTS_MTU_EVT:
|
case ESP_GATTS_MTU_EVT:
|
||||||
ESP_LOGI(GATTS_TAG, "ESP_GATTS_MTU_EVT, MTU %d", param->mtu.mtu);
|
ESP_LOGI(GATTS_TAG, "ESP_GATTS_MTU_EVT, MTU %d", param->mtu.mtu);
|
||||||
break;
|
break;
|
||||||
case ESP_GATTS_CONF_EVT:
|
|
||||||
case ESP_GATTS_UNREG_EVT:
|
case ESP_GATTS_UNREG_EVT:
|
||||||
break;
|
break;
|
||||||
case ESP_GATTS_CREATE_EVT:
|
case ESP_GATTS_CREATE_EVT:
|
||||||
@ -491,6 +490,12 @@ static void gatts_profile_a_event_handler(esp_gatts_cb_event_t event, esp_gatt_i
|
|||||||
ESP_LOGI(GATTS_TAG, "ESP_GATTS_DISCONNECT_EVT");
|
ESP_LOGI(GATTS_TAG, "ESP_GATTS_DISCONNECT_EVT");
|
||||||
esp_ble_gap_start_advertising(&adv_params);
|
esp_ble_gap_start_advertising(&adv_params);
|
||||||
break;
|
break;
|
||||||
|
case ESP_GATTS_CONF_EVT:
|
||||||
|
ESP_LOGI(GATTS_TAG, "ESP_GATTS_CONF_EVT, status %d", param->conf.status);
|
||||||
|
if (param->conf.status != ESP_GATT_OK){
|
||||||
|
esp_log_buffer_hex(GATTS_TAG, param->conf.value, param->conf.len);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ESP_GATTS_OPEN_EVT:
|
case ESP_GATTS_OPEN_EVT:
|
||||||
case ESP_GATTS_CANCEL_OPEN_EVT:
|
case ESP_GATTS_CANCEL_OPEN_EVT:
|
||||||
case ESP_GATTS_CLOSE_EVT:
|
case ESP_GATTS_CLOSE_EVT:
|
||||||
@ -577,7 +582,6 @@ static void gatts_profile_b_event_handler(esp_gatts_cb_event_t event, esp_gatt_i
|
|||||||
case ESP_GATTS_MTU_EVT:
|
case ESP_GATTS_MTU_EVT:
|
||||||
ESP_LOGI(GATTS_TAG, "ESP_GATTS_MTU_EVT, MTU %d", param->mtu.mtu);
|
ESP_LOGI(GATTS_TAG, "ESP_GATTS_MTU_EVT, MTU %d", param->mtu.mtu);
|
||||||
break;
|
break;
|
||||||
case ESP_GATTS_CONF_EVT:
|
|
||||||
case ESP_GATTS_UNREG_EVT:
|
case ESP_GATTS_UNREG_EVT:
|
||||||
break;
|
break;
|
||||||
case ESP_GATTS_CREATE_EVT:
|
case ESP_GATTS_CREATE_EVT:
|
||||||
@ -629,6 +633,12 @@ static void gatts_profile_b_event_handler(esp_gatts_cb_event_t event, esp_gatt_i
|
|||||||
param->connect.remote_bda[3], param->connect.remote_bda[4], param->connect.remote_bda[5]);
|
param->connect.remote_bda[3], param->connect.remote_bda[4], param->connect.remote_bda[5]);
|
||||||
gl_profile_tab[PROFILE_B_APP_ID].conn_id = param->connect.conn_id;
|
gl_profile_tab[PROFILE_B_APP_ID].conn_id = param->connect.conn_id;
|
||||||
break;
|
break;
|
||||||
|
case ESP_GATTS_CONF_EVT:
|
||||||
|
ESP_LOGI(GATTS_TAG, "ESP_GATTS_CONF_EVT status %d", param->conf.status);
|
||||||
|
if (param->conf.status != ESP_GATT_OK){
|
||||||
|
esp_log_buffer_hex(GATTS_TAG, param->conf.value, param->conf.len);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ESP_GATTS_DISCONNECT_EVT:
|
case ESP_GATTS_DISCONNECT_EVT:
|
||||||
case ESP_GATTS_OPEN_EVT:
|
case ESP_GATTS_OPEN_EVT:
|
||||||
case ESP_GATTS_CANCEL_OPEN_EVT:
|
case ESP_GATTS_CANCEL_OPEN_EVT:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user