diff --git a/libraries/BLE/src/BLE2902.cpp b/libraries/BLE/src/BLE2902.cpp index 0b695c268d6c8930e2dfe7d4755e66e34c41335b..880e73e2f79ae2a340b3fb7f7969c24d66d2880a 100644 --- a/libraries/BLE/src/BLE2902.cpp +++ b/libraries/BLE/src/BLE2902.cpp @@ -46,6 +46,7 @@ void BLE2902::setIndications(bool flag) { uint8_t *pValue = getValue(); if (flag) pValue[0] |= 1 << 1; else pValue[0] &= ~(1 << 1); + setValue(pValue, 2); } // setIndications @@ -57,6 +58,7 @@ void BLE2902::setNotifications(bool flag) { uint8_t *pValue = getValue(); if (flag) pValue[0] |= 1 << 0; else pValue[0] &= ~(1 << 0); + setValue(pValue, 2); } // setNotifications #endif diff --git a/libraries/BLE/src/BLEDescriptor.cpp b/libraries/BLE/src/BLEDescriptor.cpp index ef96dbe73b4cdc7befee51a8205f76e34285b4a5..f9bd0626d4ed1400c04f58fa1c366e2cbb62469a 100644 --- a/libraries/BLE/src/BLEDescriptor.cpp +++ b/libraries/BLE/src/BLEDescriptor.cpp @@ -32,7 +32,7 @@ BLEDescriptor::BLEDescriptor(const char* uuid, uint16_t len) : BLEDescriptor(BLE BLEDescriptor::BLEDescriptor(BLEUUID uuid, uint16_t max_len) { m_bleUUID = uuid; m_value.attr_len = 0; // Initial length is 0. - m_value.attr_max_len = max_len; // Maximum length of the data. + m_value.attr_max_len = max_len; // Maximum length of the data. m_handle = NULL_HANDLE; // Handle is initially unknown. m_pCharacteristic = nullptr; // No initial characteristic. m_pCallback = nullptr; // No initial callback. @@ -235,6 +235,10 @@ void BLEDescriptor::setValue(uint8_t* data, size_t length) { } m_value.attr_len = length; memcpy(m_value.attr_value, data, length); + if (m_handle != NULL_HANDLE) { + esp_ble_gatts_set_attr_value(m_handle, length, (const uint8_t *)data); + log_d("Set the value in the GATTS database using handle 0x%x", m_handle); + } } // setValue diff --git a/libraries/BLE/src/BLEDescriptor.h b/libraries/BLE/src/BLEDescriptor.h index e3ccc57bdb988efd75a2b7cb9baa335d09acf14a..cc501e85a2feef40a212397d14815e04cfbb5b18 100644 --- a/libraries/BLE/src/BLEDescriptor.h +++ b/libraries/BLE/src/BLEDescriptor.h @@ -51,7 +51,7 @@ private: uint16_t m_handle; BLEDescriptorCallbacks* m_pCallback; BLECharacteristic* m_pCharacteristic; - esp_gatt_perm_t m_permissions = ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE; + esp_gatt_perm_t m_permissions = ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE; FreeRTOS::Semaphore m_semaphoreCreateEvt = FreeRTOS::Semaphore("CreateEvt"); esp_attr_value_t m_value;