summaryrefslogtreecommitdiff
path: root/src/Components/Ble/MusicService.h
blob: 8139d96efa57bd115690059bbf31420b954a553d (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
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
#pragma once
#include <cstdint>
#include <array>
#include <host/ble_gap.h>
#include <host/ble_uuid.h>
#include <string>

//c7e50000-78fc-48fe-8e23-43b37a1942d0
#define MUSIC_SERVICE_UUID_BASE {0xd0, 0x42, 0x19, 0x3a, 0x3b, 0x43, 0x23, 0x8e, 0xfe, 0x48, 0xfc, 0x78, 0x00, 0x00, 0xe5, 0xc7}

namespace Pinetime {
  namespace Controllers {
    class MusicService {
      public:
        MusicService();
        void Init();
        int OnCommand(uint16_t conn_handle, uint16_t attr_handle,
                                    struct ble_gatt_access_ctxt *ctxt);

        std::string artist();
        std::string track();
        std::string album();
        void event(char event);

        static const char EVENT_MUSIC_OPEN = 0xe0;
        static const char EVENT_MUSIC_PLAY = 0x00;
        static const char EVENT_MUSIC_PAUSE = 0x01;
        static const char EVENT_MUSIC_NEXT = 0x03;
        static const char EVENT_MUSIC_PREV = 0x04;
        static const char EVENT_MUSIC_VOLUP = 0x05;
        static const char EVENT_MUSIC_VOLDOWN = 0x06;


      private:
        static constexpr uint8_t msId[2] = {0x00, 0x01};
        static constexpr uint8_t msEventCharId[2] = {0x00, 0x02};
        static constexpr uint8_t msStatusCharId[2] = {0x00, 0x03};
        static constexpr uint8_t msArtistCharId[2] = {0x00, 0x04};
        static constexpr uint8_t msTrackCharId[2] = {0x00, 0x05};
        static constexpr uint8_t msAlbumCharId[2] = {0x00, 0x06};

        uint16_t connectionHandle = 0;
        uint16_t eventCharacteristicHandle = 0;

        ble_uuid128_t msUuid {
                .u = { .type = BLE_UUID_TYPE_128 },
                .value = MUSIC_SERVICE_UUID_BASE
        };

        ble_uuid128_t msEventCharUuid {
                .u = { .type = BLE_UUID_TYPE_128 },
                .value = MUSIC_SERVICE_UUID_BASE
        };
        ble_uuid128_t msStatusCharUuid {
                .u = { .type = BLE_UUID_TYPE_128 },
                .value = MUSIC_SERVICE_UUID_BASE
        };
        ble_uuid128_t msArtistCharUuid {
                .u = { .type = BLE_UUID_TYPE_128 },
                .value = MUSIC_SERVICE_UUID_BASE
        };
        ble_uuid128_t msTrackCharUuid {
                .u = { .type = BLE_UUID_TYPE_128 },
                .value = MUSIC_SERVICE_UUID_BASE
        };
        ble_uuid128_t msAlbumCharUuid {
                .u = { .type = BLE_UUID_TYPE_128 },
                .value = MUSIC_SERVICE_UUID_BASE
        };

        struct ble_gatt_chr_def characteristicDefinition[6];
        struct ble_gatt_svc_def serviceDefinition[2];

        std::string m_artist;
        std::string m_album;
        std::string m_track;

    };
  }
}