mirror of
https://github.com/h2zero/esp-nimble-cpp.git
synced 2024-11-22 13:10:55 +01:00
Prioritize processing host reset events in disconnect event handler.
This commit is contained in:
parent
09ff0c3472
commit
765d5b1be7
1 changed files with 21 additions and 22 deletions
|
@ -762,9 +762,24 @@ uint16_t NimBLEClient::getMTU() {
|
||||||
switch(event->type) {
|
switch(event->type) {
|
||||||
|
|
||||||
case BLE_GAP_EVENT_DISCONNECT: {
|
case BLE_GAP_EVENT_DISCONNECT: {
|
||||||
|
rc = event->disconnect.reason;
|
||||||
|
// If Host reset tell the device now before returning to prevent
|
||||||
|
// any errors caused by calling host functions before resyncing.
|
||||||
|
switch(rc) {
|
||||||
|
case BLE_HS_ECONTROLLER:
|
||||||
|
case BLE_HS_ETIMEOUT_HCI:
|
||||||
|
case BLE_HS_ENOTSYNCED:
|
||||||
|
case BLE_HS_EOS:
|
||||||
|
NIMBLE_LOGC(LOG_TAG, "Disconnect - host reset, rc=%d", rc);
|
||||||
|
NimBLEDevice::onReset(rc);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
// Check that the event is for this client.
|
// Check that the event is for this client.
|
||||||
if(client->m_conn_id != event->disconnect.conn.conn_handle)
|
if(client->m_conn_id != event->disconnect.conn.conn_handle) {
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
client->m_conn_id = BLE_HS_CONN_HANDLE_NONE;
|
client->m_conn_id = BLE_HS_CONN_HANDLE_NONE;
|
||||||
|
|
||||||
|
@ -774,34 +789,18 @@ uint16_t NimBLEClient::getMTU() {
|
||||||
// Remove the device from ignore list so we will scan it again
|
// Remove the device from ignore list so we will scan it again
|
||||||
NimBLEDevice::removeIgnored(client->m_peerAddress);
|
NimBLEDevice::removeIgnored(client->m_peerAddress);
|
||||||
|
|
||||||
rc = event->disconnect.reason;
|
// If we received a connected event but did not get established (no PDU)
|
||||||
|
|
||||||
// If we got a connected event but did not get established (no PDU)
|
|
||||||
// then a disconnect event will be sent but we should not send it to the
|
// then a disconnect event will be sent but we should not send it to the
|
||||||
// app for processing. Instead we will ensure the task is released
|
// app for processing. Instead we will ensure the task is released
|
||||||
// and report the error.
|
// and report the error.
|
||||||
if(!client->m_connEstablished)
|
if(!client->m_connEstablished)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// If Host reset tell the device now before returning to prevent
|
|
||||||
// any errors caused by calling host functions before resyncing.
|
|
||||||
switch(rc) {
|
|
||||||
case BLE_HS_ETIMEOUT_HCI:
|
|
||||||
case BLE_HS_EOS:
|
|
||||||
case BLE_HS_ECONTROLLER:
|
|
||||||
case BLE_HS_ENOTSYNCED:
|
|
||||||
NIMBLE_LOGC(LOG_TAG, "Disconnect - host reset, rc=%d", rc);
|
|
||||||
NimBLEDevice::onReset(rc);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
NIMBLE_LOGI(LOG_TAG, "disconnect; reason=%d, %s",
|
NIMBLE_LOGI(LOG_TAG, "disconnect; reason=%d, %s",
|
||||||
rc, NimBLEUtils::returnCodeToString(rc));
|
rc, NimBLEUtils::returnCodeToString(rc));
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
client->m_connEstablished = false;
|
client->m_connEstablished = false;
|
||||||
client->m_pClientCallbacks->onDisconnect(client);
|
client->m_pClientCallbacks->onDisconnect(client);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
} // BLE_GAP_EVENT_DISCONNECT
|
} // BLE_GAP_EVENT_DISCONNECT
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue