esp-nimble-cpp  1.3.2
NimBLERemoteDescriptor.h
1 /*
2  * NimBLERemoteDescriptor.h
3  *
4  * Created: on Jan 27 2020
5  * Author H2zero
6  *
7  * Originally:
8  *
9  * BLERemoteDescriptor.h
10  *
11  * Created on: Jul 8, 2017
12  * Author: kolban
13  */
14 
15 #ifndef COMPONENTS_NIMBLEREMOTEDESCRIPTOR_H_
16 #define COMPONENTS_NIMBLEREMOTEDESCRIPTOR_H_
17 
18 #include "nimconfig.h"
19 #if defined(CONFIG_BT_ENABLED) && defined(CONFIG_BT_NIMBLE_ROLE_CENTRAL)
20 
21 #include "NimBLERemoteCharacteristic.h"
22 
28 public:
29  uint16_t getHandle();
32  std::string readValue();
33 
42  template<typename T>
43  T readValue(bool skipSizeCheck = false) {
44  std::string value = readValue();
45  if(!skipSizeCheck && value.size() < sizeof(T)) return T();
46  const char *pData = value.data();
47  return *((T *)pData);
48  }
49 
50  uint8_t readUInt8() __attribute__ ((deprecated("Use template readValue<uint8_t>()")));
51  uint16_t readUInt16() __attribute__ ((deprecated("Use template readValue<uint16_t>()")));
52  uint32_t readUInt32() __attribute__ ((deprecated("Use template readValue<uint32_t>()")));
53  std::string toString(void);
54  bool writeValue(const uint8_t* data, size_t length, bool response = false);
55  bool writeValue(const std::string &newValue, bool response = false);
56 
62  template<typename T>
63  bool writeValue(const T &s, bool response = false) {
64  return writeValue((uint8_t*)&s, sizeof(T), response);
65  }
66 
67 private:
68  friend class NimBLERemoteCharacteristic;
69 
70  NimBLERemoteDescriptor (NimBLERemoteCharacteristic* pRemoteCharacteristic,
71  const struct ble_gatt_dsc *dsc);
72  static int onWriteCB(uint16_t conn_handle, const struct ble_gatt_error *error,
73  struct ble_gatt_attr *attr, void *arg);
74  static int onReadCB(uint16_t conn_handle, const struct ble_gatt_error *error,
75  struct ble_gatt_attr *attr, void *arg);
76 
77  uint16_t m_handle;
78  NimBLEUUID m_uuid;
79  NimBLERemoteCharacteristic* m_pRemoteCharacteristic;
80 };
81 
82 #endif /* CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_CENTRAL */
83 #endif /* COMPONENTS_NIMBLEREMOTEDESCRIPTOR_H_ */
A model of a remote BLE characteristic.
Definition: NimBLERemoteCharacteristic.h:43
A model of remote BLE descriptor.
Definition: NimBLERemoteDescriptor.h:27
std::string toString(void)
Return a string representation of this Remote Descriptor.
Definition: NimBLERemoteDescriptor.cpp:234
bool writeValue(const uint8_t *data, size_t length, bool response=false)
Write data to the BLE Remote Descriptor.
Definition: NimBLERemoteDescriptor.cpp:276
uint16_t readUInt16() __attribute__((deprecated("Use template readValue<uint16_t>()")))
Read an unsigned 16 bit value.
Definition: NimBLERemoteDescriptor.cpp:102
uint32_t readUInt32() __attribute__((deprecated("Use template readValue<uint32_t>()")))
Read an unsigned 32 bit value.
Definition: NimBLERemoteDescriptor.cpp:116
std::string readValue()
Read the value of the remote descriptor.
Definition: NimBLERemoteDescriptor.cpp:129
NimBLERemoteCharacteristic * getRemoteCharacteristic()
Get the characteristic that owns this descriptor.
Definition: NimBLERemoteDescriptor.cpp:69
uint8_t readUInt8() __attribute__((deprecated("Use template readValue<uint8_t>()")))
Read a byte value.
Definition: NimBLERemoteDescriptor.cpp:88
uint16_t getHandle()
Retrieve the handle associated with this remote descriptor.
Definition: NimBLERemoteDescriptor.cpp:60
T readValue(bool skipSizeCheck=false)
A template to convert the remote descriptor data to <type>.
Definition: NimBLERemoteDescriptor.h:43
NimBLEUUID getUUID()
Retrieve the UUID associated this remote descriptor.
Definition: NimBLERemoteDescriptor.cpp:78
A model of a BLE UUID.
Definition: NimBLEUUID.h:37