diff options
| author | JF <jf@codingfield.com> | 2020-09-27 20:59:06 +0200 |
|---|---|---|
| committer | JF <jf@codingfield.com> | 2020-09-27 20:59:06 +0200 |
| commit | f3728c41bb311f3838dc9c10a2157a16196b4420 (patch) | |
| tree | 71df3ce7cd9ba620bdc982c48b823335addf5510 /src/Components/Ble/ImmediateAlertService.h | |
| parent | efd0c9eff7000c71825221d3094e7bb709465fc2 (diff) | |
Add Immediate Alert Service, needed by the "Find Me" profile from BLE spec.
Diffstat (limited to 'src/Components/Ble/ImmediateAlertService.h')
| -rw-r--r-- | src/Components/Ble/ImmediateAlertService.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/Components/Ble/ImmediateAlertService.h b/src/Components/Ble/ImmediateAlertService.h new file mode 100644 index 00000000..c42846c4 --- /dev/null +++ b/src/Components/Ble/ImmediateAlertService.h @@ -0,0 +1,46 @@ +#pragma once +#include <host/ble_gap.h> + +namespace Pinetime { + namespace System { + class SystemTask; + } + namespace Controllers { + class NotificationManager; + class ImmediateAlertService { + public: + enum class Levels : uint8_t { + NoAlert = 0, + MildAlert = 1, + HighAlert = 2 + }; + + ImmediateAlertService(Pinetime::System::SystemTask &systemTask, + Pinetime::Controllers::NotificationManager ¬ificationManager); + void Init(); + int OnAlertLevelChanged(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt *context); + + private: + Pinetime::System::SystemTask& systemTask; + NotificationManager& notificationManager; + + static constexpr uint16_t immediateAlertServiceId {0x1802}; + static constexpr uint16_t alertLevelId {0x2A06}; + + static constexpr ble_uuid16_t immediateAlertServiceUuid { + .u {.type = BLE_UUID_TYPE_16}, + .value = immediateAlertServiceId + }; + + static constexpr ble_uuid16_t alertLevelUuid { + .u {.type = BLE_UUID_TYPE_16}, + .value = alertLevelId + }; + + struct ble_gatt_chr_def characteristicDefinition[3]; + struct ble_gatt_svc_def serviceDefinition[2]; + + uint16_t alertLevelHandle; + }; + } +} |
