summaryrefslogtreecommitdiff
path: root/sensor/patchedBLE/src/BLEDescriptorMap.cpp
blob: 6b8458330c80798700cfbe35e9693a1ea6b0a889 (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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/*
 * BLEDescriptorMap.cpp
 *
 *  Created on: Jun 22, 2017
 *      Author: kolban
 */
#include "sdkconfig.h"
#if defined(CONFIG_BT_ENABLED)
#include <sstream>
#include <iomanip>
#include "BLECharacteristic.h"
#include "BLEDescriptor.h"
#include <esp_gatts_api.h>   // ESP32 BLE 
#ifdef ARDUINO_ARCH_ESP32
#include "esp32-hal-log.h"
#endif
 
/**
 * @brief Return the descriptor by UUID.
 * @param [in] UUID The UUID to look up the descriptor.
 * @return The descriptor.  If not present, then nullptr is returned.
 */
BLEDescriptor* BLEDescriptorMap::getByUUID(const char* uuid) {
return getByUUID(BLEUUID(uuid));
}
 
 
/**
 * @brief Return the descriptor by UUID.
 * @param [in] UUID The UUID to look up the descriptor.
 * @return The descriptor.  If not present, then nullptr is returned.
 */
BLEDescriptor* BLEDescriptorMap::getByUUID(BLEUUID uuid) {
for (auto &myPair : m_uuidMap) {
if (myPair.first->getUUID().equals(uuid)) {
return myPair.first;
}
}
//return m_uuidMap.at(uuid.toString()); 
return nullptr;
} // getByUUID 
 
 
/**
 * @brief Return the descriptor by handle.
 * @param [in] handle The handle to look up the descriptor.
 * @return The descriptor.
 */
BLEDescriptor* BLEDescriptorMap::getByHandle(uint16_t handle) {
return m_handleMap.at(handle);
} // getByHandle 
 
 
/**
 * @brief Set the descriptor by UUID.
 * @param [in] uuid The uuid of the descriptor.
 * @param [in] characteristic The descriptor to cache.
 * @return N/A.
 */
void BLEDescriptorMap::setByUUID(const char* uuid, BLEDescriptor* pDescriptor){
m_uuidMap.insert(std::pair<BLEDescriptor*, std::string>(pDescriptor, uuid));
} // setByUUID 
 
 
 
/**
 * @brief Set the descriptor by UUID.
 * @param [in] uuid The uuid of the descriptor.
 * @param [in] characteristic The descriptor to cache.
 * @return N/A.
 */
void BLEDescriptorMap::setByUUID(BLEUUID uuid, BLEDescriptor* pDescriptor) {
m_uuidMap.insert(std::pair<BLEDescriptor*, std::string>(pDescriptor, uuid.toString()));
} // setByUUID 
 
 
/**
 * @brief Set the descriptor by handle.
 * @param [in] handle The handle of the descriptor.
 * @param [in] descriptor The descriptor to cache.
 * @return N/A.
 */
void BLEDescriptorMap::setByHandle(uint16_t handle, BLEDescriptor* pDescriptor) {
m_handleMap.insert(std::pair<uint16_t, BLEDescriptor*>(handle, pDescriptor));
} // setByHandle 
 
 
/**
 * @brief Return a string representation of the descriptor map.
 * @return A string representation of the descriptor map.
 */
std::string BLEDescriptorMap::toString() {
std::stringstream stringStream;
stringStream << std::hex << std::setfill('0');
int count = 0;
for (auto &myPair : m_uuidMap) {
if (count > 0{
stringStream << "\n";
}
count++;
stringStream << "handle: 0x" << std::setw(2) << myPair.first->getHandle() << ", uuid: " + myPair.first->getUUID().toString();
}
return stringStream.str();
} // toString 
 
 
/**
 * @breif Pass the GATT server event onwards to each of the descriptors found in the mapping
 * @param [in] event
 * @param [in] gatts_if
 * @param [in] param
 */
void BLEDescriptorMap::handleGATTServerEvent(
esp_gatts_cb_event_t      event,
esp_gatt_if_t             gatts_if,
esp_ble_gatts_cb_param_t* param) {
// Invoke the handler for every descriptor we have. 
for (auto &myPair : m_uuidMap) {
myPair.first->handleGATTServerEvent(event, gatts_if, param);
}
} // handleGATTServerEvent 
 
 
/**
 * @brief Get the first descriptor in the map.
 * @return The first descriptor in the map.
 */
BLEDescriptor* BLEDescriptorMap::getFirst() {
m_iterator = m_uuidMap.begin();
if (m_iterator == m_uuidMap.end()) return nullptr;
BLEDescriptor* pRet = m_iterator->first;
m_iterator++;
return pRet;
} // getFirst 
 
 
/**
 * @brief Get the next descriptor in the map.
 * @return The next descriptor in the map.
 */
BLEDescriptor* BLEDescriptorMap::getNext() {
if (m_iterator == m_uuidMap.end()) return nullptr;
BLEDescriptor* pRet = m_iterator->first;
m_iterator++;
return pRet;
} // getNext 
#endif /* CONFIG_BT_ENABLED */