#pragma once #include #define min // workaround: nimble's min/max macros conflict with libstdc++ #define max #include #undef max #undef min #include "components/ble/BatteryInformationService.h" #include "components/ble/CurrentTimeClient.h" #include "components/ble/CurrentTimeService.h" #include "components/ble/DeviceInformationService.h" #include "components/ble/DfuService.h" #include "components/ble/ServiceDiscovery.h" namespace Pinetime { namespace Drivers { class SpiNorFlash; } namespace System { class SystemTask; } namespace Controllers { class Ble; class DateTime; class NotificationManager; class NimbleController { public: NimbleController(Pinetime::System::SystemTask& systemTask, Ble& bleController, DateTime& dateTimeController, NotificationManager& notificationManager, Battery& batteryController, Pinetime::Drivers::SpiNorFlash& spiNorFlash); void Init(); void StartAdvertising(); int OnGAPEvent(ble_gap_event* event); void StartDiscovery(); uint16_t connHandle(); void NotifyBatteryLevel(uint8_t level); void RestartFastAdv() { fastAdvCount = 0; }; private: static constexpr const char* deviceName = "InfiniTime"; Pinetime::System::SystemTask& systemTask; Ble& bleController; DateTime& dateTimeController; NotificationManager& notificationManager; Pinetime::Drivers::SpiNorFlash& spiNorFlash; DfuService dfuService; DeviceInformationService deviceInformationService; CurrentTimeClient currentTimeClient; CurrentTimeService currentTimeService; BatteryInformationService batteryInformationService; ServiceDiscovery serviceDiscovery; uint8_t addrType; uint16_t connectionHandle = BLE_HS_CONN_HANDLE_NONE; uint8_t fastAdvCount = 0; uint8_t bondId[16] = {0}; ble_uuid128_t dfuServiceUuid { .u {.type = BLE_UUID_TYPE_128}, .value = {0x23, 0xD1, 0xBC, 0xEA, 0x5F, 0x78, 0x23, 0x15, 0xDE, 0xEF, 0x12, 0x12, 0x30, 0x15, 0x00, 0x00}}; }; static NimbleController* nptr; } }