summaryrefslogtreecommitdiff
path: root/src/BLEService.cpp
diff options
context:
space:
mode:
authorNeil Kolban <kolban1@kolban.com>2018-06-23 11:05:49 -0500
committerNeil Kolban <kolban1@kolban.com>2018-06-23 11:05:49 -0500
commitb2ab7c5873e67eb9c3271ee8539bb0f5a1168bdb (patch)
tree08fe9abcb03d109cd3bb7ab88ee14e05f5661839 /src/BLEService.cpp
parent0.4.13 (diff)
downloadthermostat-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.cpp78
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