ref: fdc89f1a20889c0295534f58dc2e82ce8c55a18b
src/components/ble/NimbleController.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
#pragma once #include <cstdint> #define min // workaround: nimble's min/max macros conflict with libstdc++ #define max #include <host/ble_gap.h> #undef max #undef min #include "components/ble/AlertNotificationClient.h" #include "components/ble/AlertNotificationService.h" #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/FSService.h" #include "components/ble/HeartRateService.h" #include "components/ble/ImmediateAlertService.h" #include "components/ble/MusicService.h" #include "components/ble/NavigationService.h" #include "components/ble/ServiceDiscovery.h" #include "components/ble/MotionService.h" #include "components/ble/weather/WeatherService.h" #include "components/fs/FS.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, HeartRateController& heartRateController, MotionController& motionController, FS& fs); void Init(); void StartAdvertising(); int OnGAPEvent(ble_gap_event* event); void StartDiscovery(); Pinetime::Controllers::MusicService& music() { return musicService; }; Pinetime::Controllers::NavigationService& navigation() { return navService; }; Pinetime::Controllers::AlertNotificationService& alertService() { return anService; }; Pinetime::Controllers::WeatherService& weather() { return weatherService; }; uint16_t connHandle(); void NotifyBatteryLevel(uint8_t level); void RestartFastAdv() { fastAdvCount = 0; }; void EnableRadio(); void DisableRadio(); private: void PersistBond(struct ble_gap_conn_desc& desc); void RestoreBond(); static constexpr const char* deviceName = "InfiniTime"; Pinetime::System::SystemTask& systemTask; Ble& bleController; DateTime& dateTimeController; Pinetime::Drivers::SpiNorFlash& spiNorFlash; FS& fs; DfuService dfuService; DeviceInformationService deviceInformationService; CurrentTimeClient currentTimeClient; AlertNotificationService anService; AlertNotificationClient alertNotificationClient; CurrentTimeService currentTimeService; MusicService musicService; WeatherService weatherService; NavigationService navService; BatteryInformationService batteryInformationService; ImmediateAlertService immediateAlertService; HeartRateService heartRateService; MotionService motionService; FSService fsService; 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; } } |