InfiniTime.git

commit 686e826f4e656546523e989535c74f286a91855b

Author: Adam Pigg <adam@piggz.co.uk>

Rework characteristic handling

 src/Components/Ble/MusicService.cpp | 25 ++++++++++++++-----------
 src/Components/Ble/MusicService.h | 5 ++---
 src/DisplayApp/DisplayApp.cpp | 2 +-


diff --git a/src/Components/Ble/MusicService.cpp b/src/Components/Ble/MusicService.cpp
index 05754e4407c5b83a7725efdb32f76d2ce6f513f8..080a814cecdc42df08e02630e0d3ed967d33c80a 100644
--- a/src/Components/Ble/MusicService.cpp
+++ b/src/Components/Ble/MusicService.cpp
@@ -20,27 +20,28 @@     msArtistCharUuid.value[12] = msArtistCharId[1];
     msAlbumCharUuid.value[11] = msAlbumCharId[0];
     msAlbumCharUuid.value[12] = msAlbumCharId[1];
 
-    characteristicDefinition[0] = {(ble_uuid_t*)(&msEventCharUuid),
+    characteristicDefinition[0] = { .uuid = (ble_uuid_t*)(&msEventCharUuid),
                                     .access_cb = MSCallback,
                                     .arg = this,
-                                    .flags = BLE_GATT_CHR_F_NOTIFY | BLE_GATT_CHR_F_READ
+                                    .flags =  BLE_GATT_CHR_F_NOTIFY,
+                                    .val_handle = &m_eventHandle
     };
-    characteristicDefinition[1] = {(ble_uuid_t*)(&msStatusCharUuid),
+    characteristicDefinition[1] = { .uuid = (ble_uuid_t*)(&msStatusCharUuid),
                                     .access_cb = MSCallback,
                                     .arg = this,
                                     .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ
     };
-    characteristicDefinition[2] = {(ble_uuid_t*)(&msTrackCharUuid),
+    characteristicDefinition[2] = { .uuid = (ble_uuid_t*)(&msTrackCharUuid),
                                     .access_cb = MSCallback,
                                     .arg = this,
                                     .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ
     };
-    characteristicDefinition[3] = {(ble_uuid_t*)(&msArtistCharUuid),
+    characteristicDefinition[3] = { .uuid = (ble_uuid_t*)(&msArtistCharUuid),
                                     .access_cb = MSCallback,
                                     .arg = this,
                                     .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ
     };
-    characteristicDefinition[4] = {(ble_uuid_t*)(&msAlbumCharUuid),
+    characteristicDefinition[4] = { .uuid = (ble_uuid_t*)(&msAlbumCharUuid),
                                     .access_cb = MSCallback,
                                     .arg = this,
                                     .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ
@@ -72,8 +73,6 @@
 int Pinetime::Controllers::MusicService::OnCommand(uint16_t conn_handle, uint16_t attr_handle,
                                                     struct ble_gatt_access_ctxt *ctxt) {
 
-    connectionHandle = conn_handle;
-
   if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
         size_t notifSize = OS_MBUF_PKTLEN(ctxt->om);
         uint8_t data[notifSize + 1];
@@ -112,12 +111,16 @@ {
     struct os_mbuf *om;
     int ret;
 
+    uint16_t connectionHandle = 0;
+
     om = ble_hs_mbuf_from_flat(&event, 1);
 
-    ble_gatts_find_chr((ble_uuid_t *) &msUuid, (ble_uuid_t *) &msEventCharUuid, nullptr,
-                     &eventCharacteristicHandle);
+    ret = ble_gatts_find_svc((ble_uuid_t *) &msUuid, &connectionHandle);
 
-    ret = ble_gattc_notify_custom(connectionHandle, eventCharacteristicHandle, om);
+    if (connectionHandle == 0) {
+        return;
+    }
 
+    ret = ble_gattc_notify_custom(connectionHandle, m_eventHandle, om);
 }
 




diff --git a/src/Components/Ble/MusicService.h b/src/Components/Ble/MusicService.h
index 8139d96efa57bd115690059bbf31420b954a553d..ba872358c7dcdc13686045fa63b46fb85a2293b5 100644
--- a/src/Components/Ble/MusicService.h
+++ b/src/Components/Ble/MusicService.h
@@ -39,9 +39,6 @@         static constexpr uint8_t msArtistCharId[2] = {0x00, 0x04};
         static constexpr uint8_t msTrackCharId[2] = {0x00, 0x05};
         static constexpr uint8_t msAlbumCharId[2] = {0x00, 0x06};
 
-        uint16_t connectionHandle = 0;
-        uint16_t eventCharacteristicHandle = 0;
-
         ble_uuid128_t msUuid {
                 .u = { .type = BLE_UUID_TYPE_128 },
                 .value = MUSIC_SERVICE_UUID_BASE
@@ -70,6 +67,8 @@         };
 
         struct ble_gatt_chr_def characteristicDefinition[6];
         struct ble_gatt_svc_def serviceDefinition[2];
+        
+        uint16_t m_eventHandle;
 
         std::string m_artist;
         std::string m_album;




diff --git a/src/DisplayApp/DisplayApp.cpp b/src/DisplayApp/DisplayApp.cpp
index 7c822ee0a04ddd54cfc2d80fc0680582864e9e21..46a9638565f065f1b994772d2455f8e055f623b8 100644
--- a/src/DisplayApp/DisplayApp.cpp
+++ b/src/DisplayApp/DisplayApp.cpp
@@ -190,7 +190,7 @@       case Apps::SysInfo: currentScreen.reset(new Screens::ScreenList(this, dateTimeController, batteryController, brightnessController, bleController, watchdog)); break;
       case Apps::Meter: currentScreen.reset(new Screens::Meter(this)); break;
       case Apps::Gauge: currentScreen.reset(new Screens::Gauge(this)); break;
       case Apps::Brightness : currentScreen.reset(new Screens::Brightness(this, brightnessController)); break;
-      case Apps::Music : currentScreen.reset(new Screens::Music(this)); break;
+      case Apps::Music : currentScreen.reset(new Screens::Music(this, systemTask.nimble().music())); break;
     }
     nextApp = Apps::None;
   }