diff options
author | Neil Kolban <kolban1@kolban.com> | 2018-06-23 11:05:49 -0500 |
---|---|---|
committer | Neil Kolban <kolban1@kolban.com> | 2018-06-23 11:05:49 -0500 |
commit | b2ab7c5873e67eb9c3271ee8539bb0f5a1168bdb (patch) | |
tree | 08fe9abcb03d109cd3bb7ab88ee14e05f5661839 /src/BLEService.cpp | |
parent | 0.4.13 (diff) | |
download | thermostat-b2ab7c5873e67eb9c3271ee8539bb0f5a1168bdb.tar.gz thermostat-b2ab7c5873e67eb9c3271ee8539bb0f5a1168bdb.tar.bz2 thermostat-b2ab7c5873e67eb9c3271ee8539bb0f5a1168bdb.zip |
Commit of 0.4.14
Diffstat (limited to 'src/BLEService.cpp')
-rw-r--r-- | src/BLEService.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/BLEService.cpp b/src/BLEService.cpp index 6636ca5..340ea56 100644 --- a/src/BLEService.cpp +++ b/src/BLEService.cpp @@ -92,6 +92,28 @@ void BLEService::executeCreate(BLEServer *pServer) { /** + * @brief Delete the service. + * Delete the service. + * @return N/A. + */ + +void BLEService::executeDelete() { + ESP_LOGD(LOG_TAG, ">> executeDelete()"); + m_semaphoreDeleteEvt.take("executeDelete"); // Take the mutex and release at event ESP_GATTS_DELETE_EVT + + esp_err_t errRc = ::esp_ble_gatts_delete_service( getHandle() ); + + if (errRc != ESP_OK) { + ESP_LOGE(LOG_TAG, "esp_ble_gatts_delete_service: rc=%d %s", errRc, GeneralUtils::errorToString(errRc)); + return; + } + + m_semaphoreDeleteEvt.wait("executeDelete"); + ESP_LOGD(LOG_TAG, "<< executeDelete"); +} // executeDelete + + +/** * @brief Dump details of this BLE GATT service. * @return N/A. */ @@ -154,6 +176,34 @@ void BLEService::start() { /** + * @brief Stop the service. + * @return Stop the service. + */ +void BLEService::stop() { +// We ask the BLE runtime to start the service and then create each of the characteristics. +// We start the service through its local handle which was returned in the ESP_GATTS_CREATE_EVT event +// obtained as a result of calling esp_ble_gatts_create_service(). +// + ESP_LOGD(LOG_TAG, ">> stop(): Stopping service (esp_ble_gatts_stop_service): %s", toString().c_str()); + if (m_handle == NULL_HANDLE) { + ESP_LOGE(LOG_TAG, "<< !!! We attempted to stop a service but don't know its handle!"); + return; + } + + m_semaphoreStopEvt.take("stop"); + esp_err_t errRc = ::esp_ble_gatts_stop_service(m_handle); + + if (errRc != ESP_OK) { + ESP_LOGE(LOG_TAG, "<< esp_ble_gatts_stop_service: rc=%d %s", errRc, GeneralUtils::errorToString(errRc)); + return; + } + m_semaphoreStopEvt.wait("stop"); + + ESP_LOGD(LOG_TAG, "<< stop()"); +} // start + + +/** * @brief Set the handle associated with this service. * @param [in] handle The handle associated with the service. */ @@ -278,6 +328,19 @@ void BLEService::handleGATTServerEvent( break; } // ESP_GATTS_START_EVT + // ESP_GATTS_STOP_EVT + // + // stop: + // esp_gatt_status_t status + // uint16_t service_handle + // + case ESP_GATTS_STOP_EVT: { + if (param->stop.service_handle == getHandle()) { + m_semaphoreStopEvt.give(); + } + break; + } // ESP_GATTS_STOP_EVT + // ESP_GATTS_CREATE_EVT // Called when a new service is registered as having been created. @@ -299,6 +362,21 @@ void BLEService::handleGATTServerEvent( break; } // ESP_GATTS_CREATE_EVT + + // ESP_GATTS_DELETE_EVT + // Called when a service is deleted. + // + // delete: + // * esp_gatt_status_t status + // * uint16_t service_handle + // + case ESP_GATTS_DELETE_EVT: { + if (param->del.service_handle == getHandle()) { + m_semaphoreDeleteEvt.give(); + } + break; + } // ESP_GATTS_DELETE_EVT + default: { break; } // Default |