2020-03-30 01:44:20 +02:00
|
|
|
/*
|
|
|
|
* NimBLEDescriptor.h
|
|
|
|
*
|
|
|
|
* Created: on March 10, 2020
|
|
|
|
* Author H2zero
|
2020-05-14 06:03:56 +02:00
|
|
|
*
|
2020-03-30 01:44:20 +02:00
|
|
|
* Originally:
|
|
|
|
*
|
|
|
|
* BLEDescriptor.h
|
|
|
|
*
|
|
|
|
* Created on: Jun 22, 2017
|
|
|
|
* Author: kolban
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef MAIN_NIMBLEDESCRIPTOR_H_
|
|
|
|
#define MAIN_NIMBLEDESCRIPTOR_H_
|
|
|
|
#include "sdkconfig.h"
|
|
|
|
#if defined(CONFIG_BT_ENABLED)
|
|
|
|
|
2020-05-14 06:03:56 +02:00
|
|
|
#include "nimconfig.h"
|
|
|
|
#if defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL)
|
|
|
|
|
2020-03-30 01:44:20 +02:00
|
|
|
#include "NimBLECharacteristic.h"
|
|
|
|
#include "NimBLEUUID.h"
|
|
|
|
#include "FreeRTOS.h"
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint16_t attr_max_len; /*!< attribute max value length */
|
|
|
|
uint16_t attr_len; /*!< attribute current value length */
|
|
|
|
uint8_t *attr_value; /*!< the pointer to attribute value */
|
|
|
|
} attr_value_t;
|
|
|
|
|
|
|
|
typedef attr_value_t esp_attr_value_t; /*!< compatibility for esp32 */
|
|
|
|
|
|
|
|
class NimBLEService;
|
|
|
|
class NimBLECharacteristic;
|
|
|
|
class NimBLEDescriptorCallbacks;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief A model of a %BLE descriptor.
|
|
|
|
*/
|
|
|
|
class NimBLEDescriptor {
|
|
|
|
public:
|
2020-05-14 06:03:56 +02:00
|
|
|
virtual ~NimBLEDescriptor();
|
|
|
|
uint16_t getHandle(); // Get the handle of the descriptor.
|
|
|
|
size_t getLength(); // Get the length of the value of the descriptor.
|
|
|
|
NimBLEUUID getUUID(); // Get the UUID of the descriptor.
|
|
|
|
uint8_t* getValue(); // Get a pointer to the value of the descriptor.
|
|
|
|
// void setAccessPermissions(uint8_t perm); // Set the permissions of the descriptor.
|
|
|
|
void setCallbacks(NimBLEDescriptorCallbacks* pCallbacks); // Set callbacks to be invoked for the descriptor.
|
|
|
|
void setValue(const uint8_t* data, size_t size); // Set the value of the descriptor as a pointer to data.
|
|
|
|
void setValue(const std::string &value); // Set the value of the descriptor as a data buffer.
|
|
|
|
|
|
|
|
std::string toString(); // Convert the descriptor to a string representation.
|
2020-03-30 01:44:20 +02:00
|
|
|
|
|
|
|
private:
|
2020-05-14 06:03:56 +02:00
|
|
|
friend class NimBLEDescriptorMap;
|
|
|
|
friend class NimBLECharacteristic;
|
2020-03-30 01:44:20 +02:00
|
|
|
friend class NimBLEService;
|
2020-05-14 06:03:56 +02:00
|
|
|
friend class NimBLE2902;
|
|
|
|
friend class NimBLE2904;
|
|
|
|
|
|
|
|
NimBLEDescriptor(const char* uuid, uint16_t properties,
|
|
|
|
uint16_t max_len,
|
|
|
|
NimBLECharacteristic* pCharacteristic);
|
|
|
|
|
|
|
|
NimBLEDescriptor(NimBLEUUID uuid, uint16_t properties,
|
|
|
|
uint16_t max_len,
|
|
|
|
NimBLECharacteristic* pCharacteristic);
|
|
|
|
|
|
|
|
NimBLEUUID m_uuid;
|
|
|
|
uint16_t m_handle;
|
|
|
|
NimBLEDescriptorCallbacks* m_pCallbacks;
|
|
|
|
NimBLECharacteristic* m_pCharacteristic;
|
|
|
|
uint8_t m_properties;
|
|
|
|
attr_value_t m_value;
|
|
|
|
|
|
|
|
static int handleGapEvent(uint16_t conn_handle, uint16_t attr_handle,
|
2020-03-30 01:44:20 +02:00
|
|
|
struct ble_gatt_access_ctxt *ctxt, void *arg);
|
2020-05-14 06:03:56 +02:00
|
|
|
|
|
|
|
void setHandle(uint16_t handle);
|
2020-03-30 01:44:20 +02:00
|
|
|
}; // BLEDescriptor
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Callbacks that can be associated with a %BLE descriptors to inform of events.
|
|
|
|
*
|
|
|
|
* When a server application creates a %BLE descriptor, we may wish to be informed when there is either
|
|
|
|
* a read or write request to the descriptors value. An application can register a
|
|
|
|
* sub-classed instance of this class and will be notified when such an event happens.
|
|
|
|
*/
|
|
|
|
class NimBLEDescriptorCallbacks {
|
|
|
|
public:
|
2020-05-14 06:03:56 +02:00
|
|
|
virtual ~NimBLEDescriptorCallbacks();
|
|
|
|
virtual void onRead(NimBLEDescriptor* pDescriptor);
|
|
|
|
virtual void onWrite(NimBLEDescriptor* pDescriptor);
|
2020-03-30 01:44:20 +02:00
|
|
|
};
|
2020-05-14 06:03:56 +02:00
|
|
|
|
|
|
|
#endif // #if defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL)
|
2020-03-30 01:44:20 +02:00
|
|
|
#endif /* CONFIG_BT_ENABLED */
|
2020-05-10 15:21:46 +02:00
|
|
|
#endif /* MAIN_NIMBLEDESCRIPTOR_H_ */
|