summaryrefslogtreecommitdiff
path: root/sensor/patchedBLE/src/BLEAdvertisedDevice.h
blob: aec83746ed8b6fdb606a5dd25306c5f078062216 (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
/*
 * BLEAdvertisedDevice.h
 *
 *  Created on: Jul 3, 2017
 *      Author: kolban
 */
 
#ifndef COMPONENTS_CPP_UTILS_BLEADVERTISEDDEVICE_H_
#define COMPONENTS_CPP_UTILS_BLEADVERTISEDDEVICE_H_
#include "sdkconfig.h"
#if defined(CONFIG_BT_ENABLED)
#include <esp_gattc_api.h>
 
#include <map>
 
#include "BLEAddress.h"
#include "BLEScan.h"
#include "BLEUUID.h"
 
 
class BLEScan;
/**
 * @brief A representation of a %BLE advertised device found by a scan.
 *
 * When we perform a %BLE scan, the result will be a set of devices that are advertising.  This
 * class provides a model of a detected device.
 */
class BLEAdvertisedDevice {
public:
BLEAdvertisedDevice();
 
BLEAddress  getAddress();
uint16_t    getAppearance();
std::string getManufacturerData();
std::string getName();
int         getRSSI();
BLEScan*    getScan();
std::string getServiceData();
BLEUUID     getServiceDataUUID();
BLEUUID     getServiceUUID();
int8_t      getTXPower();
uint8_t*  getPayload();
size_t getPayloadLength();
esp_ble_addr_type_t getAddressType();
void setAddressType(esp_ble_addr_type_t type);
 
 
bool isAdvertisingService(BLEUUID uuid);
bool        haveAppearance();
bool        haveManufacturerData();
bool        haveName();
bool        haveRSSI();
bool        haveServiceData();
bool        haveServiceUUID();
bool        haveTXPower();
 
std::string toString();
 
private:
friend class BLEScan;
 
void parseAdvertisement(uint8_t* payload, size_t total_len=62);
void setAddress(BLEAddress address);
void setAdFlag(uint8_t adFlag);
void setAdvertizementResult(uint8_t* payload);
void setAppearance(uint16_t appearance);
void setManufacturerData(std::string manufacturerData);
void setName(std::string name);
void setRSSI(int rssi);
void setScan(BLEScan* pScan);
void setServiceData(std::string data);
void setServiceDataUUID(BLEUUID uuid);
void setServiceUUID(const char* serviceUUID);
void setServiceUUID(BLEUUID serviceUUID);
void setTXPower(int8_t txPower);
 
bool m_haveAppearance;
bool m_haveManufacturerData;
bool m_haveName;
bool m_haveRSSI;
bool m_haveServiceData;
bool m_haveServiceUUID;
bool m_haveTXPower;
 
 
BLEAddress  m_address = BLEAddress((uint8_t*)"\0\0\0\0\0\0");
uint8_t     m_adFlag;
uint16_t    m_appearance;
int         m_deviceType;
std::string m_manufacturerData;
std::string m_name;
BLEScan*    m_pScan;
int         m_rssi;
std::vector<BLEUUID> m_serviceUUIDs;
int8_t      m_txPower;
std::string m_serviceData;
BLEUUID     m_serviceDataUUID;
uint8_t* m_payload;
size_t m_payloadLength = 0;
esp_ble_addr_type_t m_addressType;
};
 
/**
 * @brief A callback handler for callbacks associated device scanning.
 *
 * When we are performing a scan as a %BLE client, we may wish to know when a new device that is advertising
 * has been found.  This class can be sub-classed and registered such that when a scan is performed and
 * a new advertised device has been found, we will be called back to be notified.
 */
class BLEAdvertisedDeviceCallbacks {
public:
virtual ~BLEAdvertisedDeviceCallbacks() {}
/**
 * @brief Called when a new scan result is detected.
 *
 * As we are scanning, we will find new devices.  When found, this call back is invoked with a reference to the
 * device that was found.  During any individual scan, a device will only be detected one time.
 */
virtual void onResult(BLEAdvertisedDevice advertisedDevice) = 0;
};
 
#endif /* CONFIG_BT_ENABLED */
#endif /* COMPONENTS_CPP_UTILS_BLEADVERTISEDDEVICE_H_ */