InfiniTime.git

commit 47851fb3b476268d967738f09f9da812e0fc575f

Author: JF <jf@codingfield.com>

Display BLE MAC address in sysinfo Screen.

 src/Components/Ble/BleController.h | 9 +++++++++
 src/Components/Ble/NimbleController.cpp | 7 ++++++-
 src/Components/Ble/NimbleController.h | 2 +-
 src/DisplayApp/DisplayApp.cpp | 2 +-
 src/DisplayApp/Screens/ScreenList.cpp | 18 +++++++++++++-----
 src/DisplayApp/Screens/ScreenList.h | 8 ++++++--


diff --git a/src/Components/Ble/BleController.h b/src/Components/Ble/BleController.h
index c47e65b64fab09b3e5f9865e482a155b8827668a..3f52ea258ae766453d150a91de3d0912899a4d56 100644
--- a/src/Components/Ble/BleController.h
+++ b/src/Components/Ble/BleController.h
@@ -2,12 +2,15 @@ #pragma once
 
 #include <FreeRTOS.h>
 #include <queue.h>
+#include <array>
 
 namespace Pinetime {
   namespace Controllers {
     class Ble {
       public:
+        using BleAddress = std::array<uint8_t, 6>;
         enum class FirmwareUpdateStates {Idle, Running, Validated, Error};
+        enum class AddressTypes { Public, Random };
 
         Ble() = default;
         bool IsConnected() const {return isConnected;}
@@ -24,12 +27,18 @@         bool IsFirmwareUpdating() const { return isFirmwareUpdating; }
         uint32_t FirmwareUpdateTotalBytes() const { return firmwareUpdateTotalBytes; }
         uint32_t FirmwareUpdateCurrentBytes() const { return firmwareUpdateCurrentBytes; }
         FirmwareUpdateStates State() const { return firmwareUpdateState; }
+
+        void Address(BleAddress&& addr) { address = addr; }
+        const BleAddress& Address() const { return address; }
+        void AddressType(AddressTypes t) { addressType = t;}
       private:
         bool isConnected = false;
         bool isFirmwareUpdating = false;
         uint32_t firmwareUpdateTotalBytes = 0;
         uint32_t firmwareUpdateCurrentBytes = 0;
         FirmwareUpdateStates firmwareUpdateState = FirmwareUpdateStates::Idle;
+        BleAddress address;
+        AddressTypes addressType;
 
     };
   }




diff --git a/src/Components/Ble/NimbleController.cpp b/src/Components/Ble/NimbleController.cpp
index 4c8035b7fb452c401b8ac6e1d51dccd741da901a..561dbce4b38a3363cf60fe9afc6a6cbc8d639c8a 100644
--- a/src/Components/Ble/NimbleController.cpp
+++ b/src/Components/Ble/NimbleController.cpp
@@ -90,8 +90,13 @@   ASSERT(res == 0);
   res = ble_hs_id_infer_auto(0, &addrType);
   ASSERT(res == 0);
   res = ble_svc_gap_device_name_set(deviceName);
+  ASSERT(res == 0);
+  Pinetime::Controllers::Ble::BleAddress address;
+  res = ble_hs_id_copy_addr(addrType, address.data(), nullptr);
+  ASSERT(res == 0);
+  bleController.AddressType((addrType == 0) ? Ble::AddressTypes::Public : Ble::AddressTypes::Random);
+  bleController.Address(std::move(address));
 
-  ASSERT(res == 0);
   res = ble_gatts_start();
   ASSERT(res == 0);
 }




diff --git a/src/Components/Ble/NimbleController.h b/src/Components/Ble/NimbleController.h
index 7e6806075bd8f8662cf638540436a9a496c5f2d6..cf50d78deaad9bf0b63dcef0dc6dd326ceeaa112 100644
--- a/src/Components/Ble/NimbleController.h
+++ b/src/Components/Ble/NimbleController.h
@@ -50,7 +50,7 @@         AlertNotificationService anService;
         AlertNotificationClient alertNotificationClient;
         CurrentTimeService currentTimeService;
 
-        uint8_t addrType;
+        uint8_t addrType; // 1 = Random, 0 = PUBLIC
         uint16_t connectionHandle;
 
         ble_uuid128_t dfuServiceUuid {




diff --git a/src/DisplayApp/DisplayApp.cpp b/src/DisplayApp/DisplayApp.cpp
index 01c3aa96369e943f81c68c24b7e9ed6ed1e69762..8e35ef551de8692983266b9055fddc0a795854ff 100644
--- a/src/DisplayApp/DisplayApp.cpp
+++ b/src/DisplayApp/DisplayApp.cpp
@@ -185,7 +185,7 @@         currentScreen.reset(new Screens::Clock(this, dateTimeController, batteryController, bleController));
         onClockApp = true;
         break;
 //      case Apps::Test: currentScreen.reset(new Screens::Message(this)); break;
-      case Apps::SysInfo: currentScreen.reset(new Screens::ScreenList(this, dateTimeController, batteryController, brightnessController, watchdog)); break;
+      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;




diff --git a/src/DisplayApp/Screens/ScreenList.cpp b/src/DisplayApp/Screens/ScreenList.cpp
index 4599a3840e6e9cf0b8538eb7b617d19506af9418..48f71649f3621c05e4adb7a40d5d56010aa6f73c 100644
--- a/src/DisplayApp/Screens/ScreenList.cpp
+++ b/src/DisplayApp/Screens/ScreenList.cpp
@@ -8,10 +8,15 @@ // TODO this class must be improved to receive the list of "sub screens" via pointer or
 // move operation.
 // It should accept many type of "sub screen" (it only supports Label for now).
 // The number of sub screen it supports must be dynamic.
-ScreenList::ScreenList(Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::DateTime &dateTimeController,
-        Pinetime::Controllers::Battery& batteryController, Pinetime::Controllers::BrightnessController& brightnessController, Pinetime::Drivers::WatchdogView& watchdog) :
+ScreenList::ScreenList(Pinetime::Applications::DisplayApp *app,
+        Pinetime::Controllers::DateTime &dateTimeController,
+        Pinetime::Controllers::Battery& batteryController,
+        Pinetime::Controllers::BrightnessController& brightnessController,
+                       Pinetime::Controllers::Ble& bleController,
+        Pinetime::Drivers::WatchdogView& watchdog) :
         Screen(app),
-        dateTimeController{dateTimeController}, batteryController{batteryController}, brightnessController{brightnessController}, watchdog{watchdog} {
+        dateTimeController{dateTimeController}, batteryController{batteryController},
+        brightnessController{brightnessController}, bleController{bleController}, watchdog{watchdog} {
   screens.reserve(3);
 
   // TODO all of this is far too heavy (string processing). This should be improved.
@@ -75,10 +80,13 @@               batteryPercent, brightness, resetReason);
 
   screens.emplace_back(t1);
 
-  strncpy(t2, "Hello from\nthe developper!", 27);
+  auto& bleAddr = bleController.Address();
+  sprintf(t2, "BLE MAC: \n  %2x:%2x:%2x:%2x:%2x:%2x",
+          bleAddr[5], bleAddr[4], bleAddr[3], bleAddr[2], bleAddr[1], bleAddr[0]);
   screens.emplace_back(t2);
 
-  strncpy(t3, "Place holder\nin case we need\nmore room!", 40);
+  strncpy(t3, "Hello from\nthe developper!", 27);
+
   screens.emplace_back(t3);
 
   auto &screen = screens[screenIndex];




diff --git a/src/DisplayApp/Screens/ScreenList.h b/src/DisplayApp/Screens/ScreenList.h
index ad093d3591ea844f19a432f30769add2608ddcbc..b0ee016b2ea03433d270c7dbd1000c6e5e9f9e91 100644
--- a/src/DisplayApp/Screens/ScreenList.h
+++ b/src/DisplayApp/Screens/ScreenList.h
@@ -1,6 +1,7 @@
 #pragma once
 
 #include <vector>
+#include <Components/Ble/NimbleController.h>
 #include "Screen.h"
 #include "Label.h"
 
@@ -13,6 +14,7 @@           explicit ScreenList(DisplayApp* app,
                               Pinetime::Controllers::DateTime& dateTimeController,
                               Pinetime::Controllers::Battery& batteryController,
                               Pinetime::Controllers::BrightnessController& brightnessController,
+                              Pinetime::Controllers::Ble& bleController,
                               Pinetime::Drivers::WatchdogView& watchdog);
           ~ScreenList() override;
           bool Refresh() override;
@@ -27,11 +29,13 @@           std::vector screens;
           Pinetime::Controllers::DateTime& dateTimeController;
           Pinetime::Controllers::Battery& batteryController;
           Pinetime::Controllers::BrightnessController& brightnessController;
+          Pinetime::Controllers::Ble& bleController;
           Pinetime::Drivers::WatchdogView& watchdog;
+
 
           char t1[200];
-          char t2[30];
-          char t3[42];
+          char t2[200];
+          char t3[30];
       };
     }
   }