summaryrefslogtreecommitdiff
path: root/src/Components/Ble/NimbleController.h
blob: f44f26d453458a65d80871fae0a42a0f8f690e74 (plain)
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
#pragma once

#include <cstdint>
#include <host/ble_gap.h>

namespace Pinetime {
  namespace Controllers {
    class DateTime;
    class NimbleController {
      public:
        NimbleController(DateTime& dateTimeController);
        void Init();
        void StartAdvertising();
        int OnGAPEvent(ble_gap_event *event);
        int OnDiscoveryEvent(uint16_t connectionHandle, const ble_gatt_error *error, const ble_gatt_svc *service);
        int
        OnCharacteristicDiscoveryEvent(uint16_t conn_handle, const ble_gatt_error *error,
                                       const ble_gatt_chr *characteristic);
        int OnCurrentTimeReadResult(uint16_t conn_handle, const ble_gatt_error *error, const ble_gatt_attr *attribute);
      private:
        static constexpr char* deviceName = "Pinetime-JF";
        static constexpr uint16_t BleGatServiceCts = 0x1805;

        typedef struct __attribute__((packed)) {
          uint16_t year;
          uint8_t month;
          uint8_t dayofmonth;
          uint8_t hour;
          uint8_t minute;
          uint8_t second;
          uint8_t millis;
          uint8_t reason;
        } CtsData;

        DateTime& dateTimeController;

        ble_uuid16_t ctsUuid;

        static constexpr uint16_t bleGattCharacteristicCurrentTime = 0x2a2b;
        ble_uuid16_t ctsCurrentTimeUuid;

        uint8_t addrType;
        uint16_t connectionHandle;
    };
  }
}