mirror of
https://github.com/espressif/esp-idf.git
synced 2024-09-19 14:26:01 -04:00
fix(ble/bluedroid): Fixed BLE no data length change event
This commit is contained in:
parent
c0e0af03d1
commit
818644cf5a
@ -2363,6 +2363,7 @@ void btc_gap_ble_call_handler(btc_msg_t *msg)
|
|||||||
//register connection parameter update callback
|
//register connection parameter update callback
|
||||||
void btc_gap_callback_init(void)
|
void btc_gap_callback_init(void)
|
||||||
{
|
{
|
||||||
|
BTM_BleRegiseterPktLengthChangeCallback(btc_set_pkt_length_callback);
|
||||||
BTM_BleRegiseterConnParamCallback(btc_update_conn_param_callback);
|
BTM_BleRegiseterConnParamCallback(btc_update_conn_param_callback);
|
||||||
#if (BLE_50_FEATURE_SUPPORT == TRUE)
|
#if (BLE_50_FEATURE_SUPPORT == TRUE)
|
||||||
BTM_BleGapRegisterCallback(btc_ble_5_gap_callback);
|
BTM_BleGapRegisterCallback(btc_ble_5_gap_callback);
|
||||||
|
@ -312,6 +312,20 @@ void BTM_BleRegiseterConnParamCallback(tBTM_UPDATE_CONN_PARAM_CBACK *update_conn
|
|||||||
conn_param_update_cb.update_conn_param_cb = update_conn_param_cb;
|
conn_param_update_cb.update_conn_param_cb = update_conn_param_cb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
|
** Function BTM_BleRegiseterPktLengthChangeCallback
|
||||||
|
**
|
||||||
|
** Description Registers a callback function for packet length changes.
|
||||||
|
**
|
||||||
|
** Returns void
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
void BTM_BleRegiseterPktLengthChangeCallback(tBTM_SET_PKT_DATA_LENGTH_CBACK *ptk_len_chane_cb)
|
||||||
|
{
|
||||||
|
conn_param_update_cb.set_pkt_data_length_cb = ptk_len_chane_cb;
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
** Function BTM_BleUpdateAdvWhitelist
|
** Function BTM_BleUpdateAdvWhitelist
|
||||||
|
@ -959,6 +959,8 @@ typedef struct {
|
|||||||
typedef struct{
|
typedef struct{
|
||||||
//connection parameters update callback
|
//connection parameters update callback
|
||||||
tBTM_UPDATE_CONN_PARAM_CBACK *update_conn_param_cb;
|
tBTM_UPDATE_CONN_PARAM_CBACK *update_conn_param_cb;
|
||||||
|
// setting packet data length callback
|
||||||
|
tBTM_SET_PKT_DATA_LENGTH_CBACK *set_pkt_data_length_cb;
|
||||||
}tBTM_CallbackFunc;
|
}tBTM_CallbackFunc;
|
||||||
|
|
||||||
extern tBTM_CallbackFunc conn_param_update_cb;
|
extern tBTM_CallbackFunc conn_param_update_cb;
|
||||||
|
@ -1466,7 +1466,6 @@ static void btu_hcif_command_status_evt(uint8_t status, BT_HDR *command, void *c
|
|||||||
hack->context = context;
|
hack->context = context;
|
||||||
|
|
||||||
event->event = BTU_POST_TO_TASK_NO_GOOD_HORRIBLE_HACK;
|
event->event = BTU_POST_TO_TASK_NO_GOOD_HORRIBLE_HACK;
|
||||||
|
|
||||||
if (btu_task_post(SIG_BTU_HCI_MSG, event, OSI_THREAD_MAX_TIMEOUT) == false) {
|
if (btu_task_post(SIG_BTU_HCI_MSG, event, OSI_THREAD_MAX_TIMEOUT) == false) {
|
||||||
osi_free(event);
|
osi_free(event);
|
||||||
}
|
}
|
||||||
|
@ -1365,6 +1365,7 @@ extern "C" {
|
|||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
void BTM_BleRegiseterConnParamCallback(tBTM_UPDATE_CONN_PARAM_CBACK *update_conn_param_cb);
|
void BTM_BleRegiseterConnParamCallback(tBTM_UPDATE_CONN_PARAM_CBACK *update_conn_param_cb);
|
||||||
|
void BTM_BleRegiseterPktLengthChangeCallback(tBTM_SET_PKT_DATA_LENGTH_CBACK *ptk_len_chane_cb);
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
|
@ -287,7 +287,7 @@ UINT8 L2CA_GetBleConnRole (BD_ADDR bd_addr)
|
|||||||
**
|
**
|
||||||
** Function l2cble_notify_le_connection
|
** Function l2cble_notify_le_connection
|
||||||
**
|
**
|
||||||
** Description This function notifiy the l2cap connection to the app layer
|
** Description This function notify the l2cap connection to the app layer
|
||||||
**
|
**
|
||||||
** Returns none
|
** Returns none
|
||||||
**
|
**
|
||||||
@ -868,7 +868,7 @@ void l2cble_process_sig_cmd (tL2C_LCB *p_lcb, UINT8 *p, UINT16 pkt_len)
|
|||||||
**
|
**
|
||||||
** Function l2cble_init_direct_conn
|
** Function l2cble_init_direct_conn
|
||||||
**
|
**
|
||||||
** Description This function is to initate a direct connection
|
** Description This function is to initiate a direct connection
|
||||||
**
|
**
|
||||||
** Returns TRUE connection initiated, FALSE otherwise.
|
** Returns TRUE connection initiated, FALSE otherwise.
|
||||||
**
|
**
|
||||||
@ -894,7 +894,7 @@ BOOLEAN l2cble_init_direct_conn (tL2C_LCB *p_lcb)
|
|||||||
|
|
||||||
/* There can be only one BLE connection request outstanding at a time */
|
/* There can be only one BLE connection request outstanding at a time */
|
||||||
if (p_dev_rec == NULL) {
|
if (p_dev_rec == NULL) {
|
||||||
L2CAP_TRACE_WARNING ("unknown device, can not initate connection");
|
L2CAP_TRACE_WARNING ("unknown device, can not initiate connection");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -947,7 +947,7 @@ BOOLEAN l2cble_init_direct_conn (tL2C_LCB *p_lcb)
|
|||||||
|
|
||||||
if (!btm_ble_topology_check(BTM_BLE_STATE_INIT)) {
|
if (!btm_ble_topology_check(BTM_BLE_STATE_INIT)) {
|
||||||
l2cu_release_lcb (p_lcb);
|
l2cu_release_lcb (p_lcb);
|
||||||
L2CAP_TRACE_ERROR("initate direct connection fail, topology limitation");
|
L2CAP_TRACE_ERROR("initiate direct connection fail, topology limitation");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
uint32_t link_timeout = L2CAP_BLE_LINK_CONNECT_TOUT;
|
uint32_t link_timeout = L2CAP_BLE_LINK_CONNECT_TOUT;
|
||||||
@ -981,7 +981,7 @@ BOOLEAN l2cble_init_direct_conn (tL2C_LCB *p_lcb)
|
|||||||
BLE_CE_LEN_MIN, /* UINT16 min_len */
|
BLE_CE_LEN_MIN, /* UINT16 min_len */
|
||||||
BLE_CE_LEN_MIN)) { /* UINT16 max_len */
|
BLE_CE_LEN_MIN)) { /* UINT16 max_len */
|
||||||
l2cu_release_lcb (p_lcb);
|
l2cu_release_lcb (p_lcb);
|
||||||
L2CAP_TRACE_ERROR("initate direct connection fail, no resources");
|
L2CAP_TRACE_ERROR("initiate direct connection fail, no resources");
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
} else {
|
} else {
|
||||||
p_lcb->link_state = LST_CONNECTING;
|
p_lcb->link_state = LST_CONNECTING;
|
||||||
@ -1033,7 +1033,7 @@ BOOLEAN l2cble_init_direct_conn (tL2C_LCB *p_lcb)
|
|||||||
btm_ble_set_conn_st (BLE_DIR_CONN);
|
btm_ble_set_conn_st (BLE_DIR_CONN);
|
||||||
if(!btsnd_hcic_ble_create_ext_conn(&aux_conn)) {
|
if(!btsnd_hcic_ble_create_ext_conn(&aux_conn)) {
|
||||||
l2cu_release_lcb (p_lcb);
|
l2cu_release_lcb (p_lcb);
|
||||||
L2CAP_TRACE_ERROR("initate Aux connection failed, no resources");
|
L2CAP_TRACE_ERROR("initiate Aux connection failed, no resources");
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
L2CAP_TRACE_ERROR("BLE 5.0 not support!\n");
|
L2CAP_TRACE_ERROR("BLE 5.0 not support!\n");
|
||||||
@ -1324,15 +1324,18 @@ void l2cble_process_data_length_change_event(UINT16 handle, UINT16 tx_data_len,
|
|||||||
if(p_acl) {
|
if(p_acl) {
|
||||||
p_acl->data_length_params = data_length_params;
|
p_acl->data_length_params = data_length_params;
|
||||||
if (p_acl->p_set_pkt_data_cback) {
|
if (p_acl->p_set_pkt_data_cback) {
|
||||||
|
// Only when the corresponding API is called will the callback be registered
|
||||||
(*p_acl->p_set_pkt_data_cback)(BTM_SUCCESS, &data_length_params);
|
(*p_acl->p_set_pkt_data_cback)(BTM_SUCCESS, &data_length_params);
|
||||||
|
} else {
|
||||||
|
// If the callback is not registered,using global callback
|
||||||
|
(*conn_param_update_cb.set_pkt_data_length_cb)(BTM_SUCCESS, &data_length_params);
|
||||||
}
|
}
|
||||||
|
|
||||||
p_acl->data_len_updating = false;
|
p_acl->data_len_updating = false;
|
||||||
if(p_acl->data_len_waiting) {
|
if(p_acl->data_len_waiting) {
|
||||||
p_acl->data_len_waiting = false;
|
p_acl->data_len_waiting = false;
|
||||||
p_acl->p_set_pkt_data_cback = p_acl->p_set_data_len_cback_waiting;
|
p_acl->p_set_pkt_data_cback = p_acl->p_set_data_len_cback_waiting;
|
||||||
p_acl->p_set_data_len_cback_waiting = NULL;
|
p_acl->p_set_data_len_cback_waiting = NULL;
|
||||||
// if value is same, triger callback directly
|
// if value is same, trigger callback directly
|
||||||
if(p_acl->tx_len_waiting == p_acl->data_length_params.tx_len) {
|
if(p_acl->tx_len_waiting == p_acl->data_length_params.tx_len) {
|
||||||
if(p_acl->p_set_pkt_data_cback) {
|
if(p_acl->p_set_pkt_data_cback) {
|
||||||
(*p_acl->p_set_pkt_data_cback)(BTM_SUCCESS, &p_acl->data_length_params);
|
(*p_acl->p_set_pkt_data_cback)(BTM_SUCCESS, &p_acl->data_length_params);
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
This example code is in the Public Domain (or CC0 licensed, at your option.)
|
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
Unless required by applicable law or agreed to in writing, this
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
*/
|
||||||
CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -402,6 +400,12 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par
|
|||||||
param->update_conn_params.latency,
|
param->update_conn_params.latency,
|
||||||
param->update_conn_params.timeout);
|
param->update_conn_params.timeout);
|
||||||
break;
|
break;
|
||||||
|
case ESP_GAP_BLE_SET_PKT_LENGTH_COMPLETE_EVT:
|
||||||
|
ESP_LOGI(GATTC_TAG, "packet length updated: rx = %d, tx = %d, status = %d",
|
||||||
|
param->pkt_data_length_cmpl.params.rx_len,
|
||||||
|
param->pkt_data_length_cmpl.params.tx_len,
|
||||||
|
param->pkt_data_length_cmpl.status);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
*/
|
*/
|
||||||
@ -233,6 +233,12 @@ static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param
|
|||||||
param->update_conn_params.latency,
|
param->update_conn_params.latency,
|
||||||
param->update_conn_params.timeout);
|
param->update_conn_params.timeout);
|
||||||
break;
|
break;
|
||||||
|
case ESP_GAP_BLE_SET_PKT_LENGTH_COMPLETE_EVT:
|
||||||
|
ESP_LOGI(GATTS_TAG, "packet length updated: rx = %d, tx = %d, status = %d",
|
||||||
|
param->pkt_data_length_cmpl.params.rx_len,
|
||||||
|
param->pkt_data_length_cmpl.params.tx_len,
|
||||||
|
param->pkt_data_length_cmpl.status);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user