Add new getServer() method.

Previously we used createServer() to get a reference to the server instance.
This was problematic when using advertising only as it would create a server
when starting advertising. This prevents that and provides better semantics.
This commit is contained in:
h2zero 2020-05-14 12:59:35 -06:00
parent 03cb7b21d9
commit fc1022a46d
3 changed files with 22 additions and 8 deletions

View file

@ -193,12 +193,14 @@ void NimBLEAdvertising::start() {
} }
#if defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL) #if defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL)
NimBLEServer* pServer = NimBLEDevice::createServer(); NimBLEServer* pServer = NimBLEDevice::getServer();
if(!pServer->m_gattsStarted){ if(pServer != nullptr) {
pServer->start(); if(!pServer->m_gattsStarted){
} else if(pServer->getConnectedCount() >= NIMBLE_MAX_CONNECTIONS) { pServer->start();
NIMBLE_LOGW(LOG_TAG, "Max connections reached - not advertising"); } else if(pServer->getConnectedCount() >= NIMBLE_MAX_CONNECTIONS) {
return; NIMBLE_LOGW(LOG_TAG, "Max connections reached - not advertising");
return;
}
} }
#endif #endif
@ -358,10 +360,12 @@ void NimBLEAdvertising::start() {
#if defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL) #if defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL)
rc = ble_gap_adv_start(addressType, NULL, BLE_HS_FOREVER, rc = ble_gap_adv_start(addressType, NULL, BLE_HS_FOREVER,
&m_advParams, NimBLEServer::handleGapEvent, NimBLEDevice::createServer()); //get a reference to the server (does not create a new one) &m_advParams,
(pServer != nullptr) ? NimBLEServer::handleGapEvent : NULL,
pServer);
#else #else
rc = ble_gap_adv_start(addressType, NULL, BLE_HS_FOREVER, rc = ble_gap_adv_start(addressType, NULL, BLE_HS_FOREVER,
&m_advParams, NULL,NULL); &m_advParams, NULL,NULL);
#endif #endif
if (rc != 0) { if (rc != 0) {
NIMBLE_LOGC(LOG_TAG, "Error enabling advertising; rc=%d, %s", rc, NimBLEUtils::returnCodeToString(rc)); NIMBLE_LOGC(LOG_TAG, "Error enabling advertising; rc=%d, %s", rc, NimBLEUtils::returnCodeToString(rc));

View file

@ -77,6 +77,15 @@ NimBLESecurityCallbacks* NimBLEDevice::m_securityCallbacks = nullptr;
return m_pServer; return m_pServer;
} // createServer } // createServer
/**
* @brief Get the instance of the server.
* @return A pointer to the server instance.
*/
/* STATIC */ NimBLEServer* NimBLEDevice::getServer() {
return m_pServer;
} // getServer
#endif // #if defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL) #endif // #if defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL)

View file

@ -102,6 +102,7 @@ public:
#if defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL) #if defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL)
static NimBLEServer* createServer(); static NimBLEServer* createServer();
static NimBLEServer* getServer();
#endif #endif
static void setPower(esp_power_level_t powerLevel, esp_ble_power_type_t powerType=ESP_BLE_PWR_TYPE_DEFAULT); static void setPower(esp_power_level_t powerLevel, esp_ble_power_type_t powerType=ESP_BLE_PWR_TYPE_DEFAULT);