Skip to content

Commit d25ead7

Browse files
committed
fix(nimble): Fix connected count
1 parent a27d027 commit d25ead7

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

libraries/BLE/src/BLEServer.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,10 @@ void BLEServerCallbacks::onMtuChanged(BLEServer *pServer, esp_ble_gatts_cb_param
551551

552552
#if defined(CONFIG_NIMBLE_ENABLED)
553553

554+
uint16_t BLEServer::getHandle() {
555+
return getConnId();
556+
}
557+
554558
/**
555559
* @brief Resets the GATT server, used when services are added/removed after initialization.
556560
*/
@@ -604,6 +608,7 @@ int BLEServer::handleGATTServerEvent(struct ble_gap_event *event, void *arg) {
604608
log_e("Connection failed");
605609
BLEDevice::startAdvertising();
606610
} else {
611+
server->m_connId = event->connect.conn_handle;
607612
server->addPeerDevice((void *)server, false, event->connect.conn_handle);
608613
rc = ble_gap_conn_find(event->connect.conn_handle, &desc);
609614
if (rc != 0) {
@@ -614,6 +619,8 @@ int BLEServer::handleGATTServerEvent(struct ble_gap_event *event, void *arg) {
614619
server->m_pServerCallbacks->onConnect(server);
615620
server->m_pServerCallbacks->onConnect(server, &desc);
616621
}
622+
623+
server->m_connectedCount++;
617624
}
618625

619626
return 0;
@@ -634,7 +641,9 @@ int BLEServer::handleGATTServerEvent(struct ble_gap_event *event, void *arg) {
634641
default: break;
635642
}
636643

637-
server->removePeerDevice(event->disconnect.conn.conn_handle, false);
644+
if (server->removePeerDevice(event->disconnect.conn.conn_handle, false)) {
645+
server->m_connectedCount--;
646+
}
638647

639648
if (server->m_svcChanged) {
640649
server->resetGATT();
@@ -654,8 +663,8 @@ int BLEServer::handleGATTServerEvent(struct ble_gap_event *event, void *arg) {
654663

655664
for (auto &it : server->m_notifyChrVec) {
656665
if (it->getHandle() == event->subscribe.attr_handle) {
657-
if ((it->getProperties() & BLE_GATT_CHR_F_READ_AUTHEN) || (it->getProperties() & BLE_GATT_CHR_F_READ_AUTHOR)
658-
|| (it->getProperties() & BLE_GATT_CHR_F_READ_ENC)) {
666+
uint16_t properties = it->getProperties();
667+
if ((properties & BLE_GATT_CHR_F_READ_AUTHEN) || (properties & BLE_GATT_CHR_F_READ_AUTHOR) || (properties & BLE_GATT_CHR_F_READ_ENC)) {
659668
rc = ble_gap_conn_find(event->subscribe.conn_handle, &desc);
660669
if (rc != 0) {
661670
break;

libraries/BLE/src/BLEServer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ class BLEServer {
154154
***************************************************************************/
155155

156156
#if defined(CONFIG_NIMBLE_ENABLED)
157+
uint16_t getHandle();
157158
void updateConnParams(uint16_t conn_handle, uint16_t minInterval, uint16_t maxInterval, uint16_t latency, uint16_t timeout);
158159
int disconnect(uint16_t connId, uint8_t reason = BLE_ERR_REM_USER_CONN_TERM);
159160
#endif

0 commit comments

Comments
 (0)