summaryrefslogtreecommitdiff
path: root/sensor/patchedBLE/src/BLEService.h
blob: b42d57f2afbe7d983672a276554f58ae9d7998a3 (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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
 * BLEService.h
 *
 *  Created on: Mar 25, 2017
 *      Author: kolban
 */
 
#ifndef COMPONENTS_CPP_UTILS_BLESERVICE_H_
#define COMPONENTS_CPP_UTILS_BLESERVICE_H_
#include "sdkconfig.h"
#if defined(CONFIG_BT_ENABLED)
 
#include <esp_gatts_api.h>
 
#include "BLECharacteristic.h"
#include "BLEServer.h"
#include "BLEUUID.h"
#include "FreeRTOS.h"
 
class BLEServer;
 
/**
 * @brief A data mapping used to manage the set of %BLE characteristics known to the server.
 */
class BLECharacteristicMap {
public:
void setByUUID(BLECharacteristic* pCharacteristic, const char* uuid);
void setByUUID(BLECharacteristic* pCharacteristic, BLEUUID uuid);
void setByHandle(uint16_t handle, BLECharacteristic* pCharacteristic);
BLECharacteristic* getByUUID(const char* uuid);
BLECharacteristic* getByUUID(BLEUUID uuid);
BLECharacteristic* getByHandle(uint16_t handle);
BLECharacteristic* getFirst();
BLECharacteristic* getNext();
std::string toString();
void handleGATTServerEvent(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t* param);
 
private:
std::map<BLECharacteristic*, std::string> m_uuidMap;
std::map<uint16_t, BLECharacteristic*> m_handleMap;
std::map<BLECharacteristic*, std::string>::iterator m_iterator;
};
 
 
/**
 * @brief The model of a %BLE service.
 *
 */
class BLEService {
public:
void               addCharacteristic(BLECharacteristic* pCharacteristic);
BLECharacteristic* createCharacteristic(const char* uuid, uint32_t properties);
BLECharacteristic* createCharacteristic(BLEUUID uuid, uint32_t properties);
void               dump();
void               executeCreate(BLEServer* pServer);
void    executeDelete();
BLECharacteristic* getCharacteristic(const char* uuid);
BLECharacteristic* getCharacteristic(BLEUUID uuid);
BLEUUID            getUUID();
BLEServer*         getServer();
void               start();
void    stop();
std::string        toString();
uint16_t           getHandle();
uint8_t    m_instId = 0;
 
private:
BLEService(const char* uuid, uint16_t numHandles);
BLEService(BLEUUID uuid, uint16_t numHandles);
friend class BLEServer;
friend class BLEServiceMap;
friend class BLEDescriptor;
friend class BLECharacteristic;
friend class BLEDevice;
 
BLECharacteristicMap m_characteristicMap;
uint16_t             m_handle;
BLECharacteristic*   m_lastCreatedCharacteristic = nullptr;
BLEServer*           m_pServer = nullptr;
BLEUUID              m_uuid;
 
FreeRTOS::Semaphore  m_semaphoreCreateEvt = FreeRTOS::Semaphore("CreateEvt");
FreeRTOS::Semaphore  m_semaphoreDeleteEvt = FreeRTOS::Semaphore("DeleteEvt");
FreeRTOS::Semaphore  m_semaphoreStartEvt  = FreeRTOS::Semaphore("StartEvt");
FreeRTOS::Semaphore  m_semaphoreStopEvt   = FreeRTOS::Semaphore("StopEvt");
 
uint16_t             m_numHandles;
 
BLECharacteristic* getLastCreatedCharacteristic();
void handleGATTServerEvent(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t* param);
void               setHandle(uint16_t handle);
//void               setService(esp_gatt_srvc_id_t srvc_id); 
}; // BLEService 
 
 
#endif // CONFIG_BT_ENABLED 
#endif /* COMPONENTS_CPP_UTILS_BLESERVICE_H_ */