mirror of
https://github.com/espressif/esp-nimble.git
synced 2026-09-11 11:40:01 +00:00
fix(nimble): Reset data length global variables upon disconnection
This commit is contained in:
+19
-12
@@ -293,8 +293,10 @@ static int ble_gap_conn_cancel_tx(void);
|
||||
static int ble_gap_disc_enable_tx(int enable, int filter_duplicates);
|
||||
#endif
|
||||
|
||||
uint16_t g_max_tx_time, g_max_rx_time;
|
||||
uint16_t g_max_tx_octets, g_max_rx_octets;
|
||||
uint16_t g_max_tx_time[MYNEWT_VAL(BLE_MAX_CONNECTIONS) + 1];
|
||||
uint16_t g_max_rx_time[MYNEWT_VAL(BLE_MAX_CONNECTIONS) + 1 ];
|
||||
uint16_t g_max_tx_octets[MYNEWT_VAL(BLE_MAX_CONNECTIONS) + 1];
|
||||
uint16_t g_max_rx_octets[MYNEWT_VAL(BLE_MAX_CONNECTIONS) + 1];
|
||||
|
||||
STATS_SECT_DECL(ble_gap_stats) ble_gap_stats;
|
||||
STATS_NAME_START(ble_gap_stats)
|
||||
@@ -1464,6 +1466,11 @@ ble_gap_conn_broken(uint16_t conn_handle, int reason)
|
||||
|
||||
ble_hs_atomic_conn_delete(conn_handle);
|
||||
|
||||
g_max_tx_time[conn_handle] = 0;
|
||||
g_max_rx_time[conn_handle] = 0;
|
||||
g_max_tx_octets[conn_handle] = 0;
|
||||
g_max_rx_octets[conn_handle] = 0;
|
||||
|
||||
event.type = BLE_GAP_EVENT_DISCONNECT;
|
||||
event.disconnect.reason = reason;
|
||||
|
||||
@@ -2557,13 +2564,13 @@ ble_gap_rx_data_len_change(const struct ble_hci_ev_le_subev_data_len_chg *ev)
|
||||
event.data_len_chg.max_tx_time = le16toh(ev->max_tx_time);
|
||||
event.data_len_chg.max_rx_time = le16toh(ev->max_rx_time);
|
||||
|
||||
g_max_tx_octets[conn_handle] = event.data_len_chg.max_tx_octets;
|
||||
g_max_rx_octets[conn_handle] = event.data_len_chg.max_rx_octets;
|
||||
g_max_tx_time[conn_handle] = event.data_len_chg.max_tx_time;
|
||||
g_max_rx_time[conn_handle] = event.data_len_chg.max_rx_time;
|
||||
|
||||
ble_gap_event_listener_call(&event);
|
||||
ble_gap_call_conn_event_cb(&event, conn_handle);
|
||||
|
||||
g_max_tx_octets = event.data_len_chg.max_tx_octets;
|
||||
g_max_rx_octets = event.data_len_chg.max_rx_octets;
|
||||
g_max_tx_time = event.data_len_chg.max_tx_time;
|
||||
g_max_rx_time = event.data_len_chg.max_rx_time;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -7154,16 +7161,16 @@ int ble_gap_set_data_len(uint16_t conn_handle, uint16_t tx_octets, uint16_t tx_t
|
||||
* If yes, then just return event to host indicating success
|
||||
* since controller will not send any event in this scenario
|
||||
*/
|
||||
if (g_max_tx_time == tx_time && g_max_tx_octets == tx_octets) {
|
||||
if (g_max_tx_time[conn_handle] == tx_time && g_max_tx_octets[conn_handle] == tx_octets) {
|
||||
|
||||
struct ble_gap_event event;
|
||||
|
||||
memset(&event, 0, sizeof event);
|
||||
event.type = BLE_GAP_EVENT_DATA_LEN_CHG;
|
||||
event.data_len_chg.max_tx_octets = g_max_tx_octets;
|
||||
event.data_len_chg.max_rx_octets = g_max_rx_octets;
|
||||
event.data_len_chg.max_tx_time = g_max_tx_time;
|
||||
event.data_len_chg.max_rx_time = g_max_rx_time;
|
||||
event.data_len_chg.max_tx_octets = g_max_tx_octets[conn_handle];
|
||||
event.data_len_chg.max_rx_octets = g_max_rx_octets[conn_handle];
|
||||
event.data_len_chg.max_tx_time = g_max_tx_time[conn_handle];
|
||||
event.data_len_chg.max_rx_time = g_max_rx_time[conn_handle];
|
||||
event.data_len_chg.conn_handle = conn_handle;
|
||||
|
||||
ble_gap_event_listener_call(&event);
|
||||
|
||||
Reference in New Issue
Block a user