From 0a2714c169a92766b5aabfaf2a91d89483ccd7de Mon Sep 17 00:00:00 2001 From: h2zero <32826625+h2zero@users.noreply.github.com> Date: Mon, 19 Jul 2021 21:47:59 -0600 Subject: [PATCH] [Server] Add callback for MTU change. (#55) onMTUChange callback added that is called when a connection MTU is updated. --- examples/Advanced/NimBLE_Server/main/main.cpp | 3 +++ src/NimBLEServer.cpp | 10 ++++++++++ src/NimBLEServer.h | 8 ++++++++ 3 files changed, 21 insertions(+) diff --git a/examples/Advanced/NimBLE_Server/main/main.cpp b/examples/Advanced/NimBLE_Server/main/main.cpp index 62bd2cd..b8c4bb6 100644 --- a/examples/Advanced/NimBLE_Server/main/main.cpp +++ b/examples/Advanced/NimBLE_Server/main/main.cpp @@ -41,6 +41,9 @@ class ServerCallbacks: public NimBLEServerCallbacks { printf("Client disconnected - start advertising\n"); NimBLEDevice::startAdvertising(); }; + void onMTUChange(uint16_t MTU, ble_gap_conn_desc* desc) { + printf("MTU updated: %u for connection ID: %u\n", MTU, desc->conn_handle); + }; /********************* Security handled here ********************** ****** Note: these are the same return values as defaults ********/ diff --git a/src/NimBLEServer.cpp b/src/NimBLEServer.cpp index ca4729d..41f15dc 100644 --- a/src/NimBLEServer.cpp +++ b/src/NimBLEServer.cpp @@ -416,6 +416,12 @@ NimBLEConnInfo NimBLEServer::getPeerIDInfo(uint16_t id) { NIMBLE_LOGI(LOG_TAG, "mtu update event; conn_handle=%d mtu=%d", event->mtu.conn_handle, event->mtu.value); + rc = ble_gap_conn_find(event->mtu.conn_handle, &desc); + if (rc != 0) { + return 0; + } + + server->m_pServerCallbacks->onMTUChange(event->mtu.value, &desc); return 0; } // BLE_GAP_EVENT_MTU @@ -809,6 +815,10 @@ void NimBLEServerCallbacks::onDisconnect(NimBLEServer* pServer, ble_gap_conn_des NIMBLE_LOGD("NimBLEServerCallbacks", "onDisconnect(): Default"); } // onDisconnect +void NimBLEServerCallbacks::onMTUChange(uint16_t MTU, ble_gap_conn_desc* desc) { + NIMBLE_LOGD("NimBLEServerCallbacks", "onMTUChange(): Default"); +} // onMTUChange + uint32_t NimBLEServerCallbacks::onPassKeyRequest(){ NIMBLE_LOGD("NimBLEServerCallbacks", "onPassKeyRequest: default: 123456"); return 123456; diff --git a/src/NimBLEServer.h b/src/NimBLEServer.h index 8259b8e..9fdf1bf 100644 --- a/src/NimBLEServer.h +++ b/src/NimBLEServer.h @@ -131,6 +131,14 @@ public: */ virtual void onDisconnect(NimBLEServer* pServer, ble_gap_conn_desc* desc); + /** + * @brief Called when the connection MTU changes. + * @param [in] MTU The new MTU value. + * @param [in] desc A pointer to the connection description structure containig information + * about the connection. + */ + virtual void onMTUChange(uint16_t MTU, ble_gap_conn_desc* desc); + /** * @brief Called when a client requests a passkey for pairing. * @return The passkey to be sent to the client.