18#ifndef NIMBLE_CPP_REMOTE_VALUE_ATTRIBUTE_H_
19#define NIMBLE_CPP_REMOTE_VALUE_ATTRIBUTE_H_
22#if defined(CONFIG_BT_ENABLED) && defined(CONFIG_BT_NIMBLE_ROLE_CENTRAL)
24# if defined(CONFIG_NIMBLE_CPP_IDF)
25# include <host/ble_gatt.h>
27# include <nimble/nimble/host/include/host/ble_gatt.h>
35# include "NimBLEValueAttribute.h"
36# include "NimBLEAttValue.h"
40class NimBLERemoteValueAttribute :
public NimBLEValueAttribute,
public NimBLEAttribute {
61 bool writeValue(
const uint8_t* data,
size_t length,
bool response =
false)
const;
70 bool writeValue(
const char* str,
size_t length = 0,
bool response =
false)
const {
71 return writeValue(
reinterpret_cast<const uint8_t*
>(str), length ? length : strlen(str), response);
74# if __cplusplus < 201703L
86 typename std::enable_if<!std::is_pointer<T>::value && !Has_c_str_length<T>::value && !Has_data_size<T>::value,
bool>::type
88 writeValue(
const T& v,
bool response =
false)
const {
89 return writeValue(
reinterpret_cast<const uint8_t*
>(&v),
sizeof(T), response);
102 typename std::enable_if<Has_c_str_length<T>::value && !Has_data_size<T>::value,
bool>::type
104 writeValue(
const T& s,
bool response =
false)
const {
105 return writeValue(
reinterpret_cast<const uint8_t*
>(s.c_str()), s.length(), response);
114 template <
typename T>
118 typename std::enable_if<Has_data_size<T>::value,
bool>::type
120 writeValue(
const T& v,
bool response =
false)
const {
121 return writeValue(
reinterpret_cast<const uint8_t*
>(v.data()), v.size(), response);
131 template <
typename T>
132 typename std::enable_if<!std::is_pointer<T>::value,
bool>::type writeValue(
const T& v,
bool response =
false)
const {
133 if constexpr (Has_data_size<T>::value) {
134 return writeValue(
reinterpret_cast<const uint8_t*
>(v.data()), v.size(), response);
135 }
else if constexpr (Has_c_str_length<T>::value) {
136 return writeValue(
reinterpret_cast<const uint8_t*
>(v.c_str()), v.length(), response);
138 return writeValue(
reinterpret_cast<const uint8_t*
>(&v),
sizeof(v), response);
152 template <
typename T>
153 T readValue(time_t* timestamp =
nullptr,
bool skipSizeCheck =
false) {
155 return getValue<T>(timestamp, skipSizeCheck);
162 NimBLERemoteValueAttribute(
const ble_uuid_any_t& uuid, uint16_t handle) :
NimBLEAttribute{uuid, handle} {}
167 virtual ~NimBLERemoteValueAttribute() =
default;
169 static int onReadCB(uint16_t conn_handle,
const ble_gatt_error* error, ble_gatt_attr* attr,
void* arg);
170 static int onWriteCB(uint16_t conn_handle,
const ble_gatt_error* error, ble_gatt_attr* attr,
void* arg);
A specialized container class to hold BLE attribute values.
Definition NimBLEAttValue.h:71
A base class for BLE attributes.
Definition NimBLEAttribute.h:29
A model of a BLE client.
Definition NimBLEClient.h:49