18#ifndef NIMBLE_CPP_REMOTE_CHARACTERISTIC_H_
19#define NIMBLE_CPP_REMOTE_CHARACTERISTIC_H_
21#include "syscfg/syscfg.h"
22#if CONFIG_BT_NIMBLE_ENABLED && MYNEWT_VAL(BLE_ROLE_CENTRAL)
24# include "NimBLERemoteValueAttribute.h"
29class NimBLERemoteService;
30class NimBLERemoteDescriptor;
31struct NimBLEDescriptorFilter;
36class NimBLERemoteCharacteristic :
public NimBLERemoteValueAttribute {
38 std::string toString()
const;
39 const NimBLERemoteService* getRemoteService()
const;
40 void deleteDescriptors()
const;
41 size_t deleteDescriptor(
const NimBLEUUID& uuid)
const;
42 bool canBroadcast()
const;
44 bool canWriteNoResponse()
const;
45 bool canWrite()
const;
46 bool canNotify()
const;
47 bool canIndicate()
const;
48 bool canWriteSigned()
const;
49 bool hasExtendedProps()
const;
50 NimBLEClient* getClient()
const override;
52 typedef std::function<void(NimBLERemoteCharacteristic* pBLERemoteCharacteristic, uint8_t* pData,
size_t length,
bool isNotify)> notify_callback;
54 bool subscribe(
bool notifications =
true,
const notify_callback notifyCallback =
nullptr,
bool response =
true)
const;
55 bool unsubscribe(
bool response =
true)
const;
57 std::vector<NimBLERemoteDescriptor*>::iterator begin()
const;
58 std::vector<NimBLERemoteDescriptor*>::iterator end()
const;
59 NimBLERemoteDescriptor* getDescriptor(
const NimBLEUUID& uuid)
const;
60 const std::vector<NimBLERemoteDescriptor*>& getDescriptors(
bool refresh =
false)
const;
63 friend class NimBLEClient;
64 friend class NimBLERemoteService;
66 NimBLERemoteCharacteristic(
const NimBLERemoteService* pRemoteService,
const ble_gatt_chr* chr);
67 ~NimBLERemoteCharacteristic();
69 bool setNotify(uint16_t val, notify_callback notifyCallback =
nullptr,
bool response =
true)
const;
70 bool retrieveDescriptors(NimBLEDescriptorFilter* pFilter =
nullptr)
const;
72 static int descriptorDiscCB(
73 uint16_t connHandle,
const ble_gatt_error* error, uint16_t chrHandle,
const ble_gatt_dsc* dsc,
void* arg);
75 const NimBLERemoteService* m_pRemoteService{
nullptr};
76 uint8_t m_properties{0};
77 mutable notify_callback m_notifyCallback{
nullptr};
78 mutable std::vector<NimBLERemoteDescriptor*> m_vDescriptors{};
A model of a BLE UUID.
Definition NimBLEUUID.h:41