fix GattServer::onDataWritten()
This commit is contained in:
parent
0553e6f440
commit
962533e39f
2 changed files with 42 additions and 25 deletions
30
public/BLE.h
30
public/BLE.h
|
@ -1145,8 +1145,11 @@ public:
|
|||
}
|
||||
|
||||
/**
|
||||
* Setup a callback for when a characteristic has its value updated by a
|
||||
* client.
|
||||
* Setup a callback for when an attribute has its value updated by or at the
|
||||
* connected peer. For a peripheral, this callback triggered when the local
|
||||
* GATT server has an attribute updated by a write command from the peer.
|
||||
* For a Central, this callback is triggered when a response is received for
|
||||
* a write request.
|
||||
*
|
||||
* @Note: it is possible to chain together multiple onDataWritten callbacks
|
||||
* (potentially from different modules of an application) to receive updates
|
||||
|
@ -1155,9 +1158,18 @@ public:
|
|||
*
|
||||
* @Note: it is also possible to setup a callback into a member function of
|
||||
* some object.
|
||||
*
|
||||
* @note: This API is now *deprecated* and will be dropped in the future.
|
||||
* You should use the parallel API from GattServer directly. A former call
|
||||
* to ble.onDataWritten(...) should be replaced with
|
||||
* ble.gap().onDataWritten(...).
|
||||
*/
|
||||
void onDataWritten(void (*callback)(const GattWriteCallbackParams *eventDataP));
|
||||
template <typename T> void onDataWritten(T * objPtr, void (T::*memberPtr)(const GattWriteCallbackParams *context));
|
||||
void onDataWritten(void (*callback)(const GattWriteCallbackParams *eventDataP)) {
|
||||
gattServer().onDataWritten(callback);
|
||||
}
|
||||
template <typename T> void onDataWritten(T * objPtr, void (T::*memberPtr)(const GattWriteCallbackParams *context)) {
|
||||
gattServer().onDataWritten(objPtr, memberPtr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup a callback for when a characteristic is being read by a client.
|
||||
|
@ -1276,16 +1288,6 @@ typedef BLE BLEDevice; /* DEPRECATED. This type alias is retained for the sake o
|
|||
/* BLE methods. Most of these simply forward the calls to the underlying
|
||||
* transport.*/
|
||||
|
||||
inline void
|
||||
BLE::onDataWritten(void (*callback)(const GattWriteCallbackParams *eventDataP)) {
|
||||
transport->getGattServer().setOnDataWritten(callback);
|
||||
}
|
||||
|
||||
template <typename T> inline void
|
||||
BLE::onDataWritten(T *objPtr, void (T::*memberPtr)(const GattWriteCallbackParams *context)) {
|
||||
transport->getGattServer().setOnDataWritten(objPtr, memberPtr);
|
||||
}
|
||||
|
||||
inline ble_error_t
|
||||
BLE::onDataRead(void (*callback)(const GattReadCallbackParams *eventDataP)) {
|
||||
return transport->getGattServer().setOnDataRead(callback);
|
||||
|
|
|
@ -35,7 +35,7 @@ protected:
|
|||
serviceCount(0),
|
||||
characteristicCount(0),
|
||||
dataSentCallChain(),
|
||||
onDataWritten(),
|
||||
dataWrittenCallChain(),
|
||||
onDataRead(),
|
||||
onUpdatesEnabled(NULL),
|
||||
onUpdatesDisabled(NULL),
|
||||
|
@ -160,10 +160,25 @@ public:
|
|||
dataSentCallChain.add(objPtr, memberPtr);
|
||||
}
|
||||
|
||||
void setOnDataWritten(void (*callback)(const GattWriteCallbackParams *eventDataP)) {onDataWritten.add(callback);}
|
||||
/**
|
||||
* Setup a callback for when an attribute has its value updated by or at the
|
||||
* connected peer. For a peripheral, this callback triggered when the local
|
||||
* GATT server has an attribute updated by a write command from the peer.
|
||||
* For a Central, this callback is triggered when a response is received for
|
||||
* a write request.
|
||||
*
|
||||
* @Note: it is possible to chain together multiple onDataWritten callbacks
|
||||
* (potentially from different modules of an application) to receive updates
|
||||
* to characteristics. Many services, such as DFU and UART add their own
|
||||
* onDataWritten callbacks behind the scenes to trap interesting events.
|
||||
*
|
||||
* @Note: it is also possible to setup a callback into a member function of
|
||||
* some object.
|
||||
*/
|
||||
void onDataWritten(void (*callback)(const GattWriteCallbackParams *eventDataP)) {dataWrittenCallChain.add(callback);}
|
||||
template <typename T>
|
||||
void setOnDataWritten(T *objPtr, void (T::*memberPtr)(const GattWriteCallbackParams *context)) {
|
||||
onDataWritten.add(objPtr, memberPtr);
|
||||
void onDataWritten(T *objPtr, void (T::*memberPtr)(const GattWriteCallbackParams *context)) {
|
||||
dataWrittenCallChain.add(objPtr, memberPtr);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -196,8 +211,8 @@ public:
|
|||
|
||||
protected:
|
||||
void handleDataWrittenEvent(const GattWriteCallbackParams *params) {
|
||||
if (onDataWritten.hasCallbacksAttached()) {
|
||||
onDataWritten.call(params);
|
||||
if (dataWrittenCallChain.hasCallbacksAttached()) {
|
||||
dataWrittenCallChain.call(params);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -240,12 +255,12 @@ protected:
|
|||
uint8_t characteristicCount;
|
||||
|
||||
private:
|
||||
CallChainOfFunctionPointersWithContext<unsigned> dataSentCallChain;
|
||||
CallChainOfFunctionPointersWithContext<const GattWriteCallbackParams *> onDataWritten;
|
||||
CallChainOfFunctionPointersWithContext<unsigned> dataSentCallChain;
|
||||
CallChainOfFunctionPointersWithContext<const GattWriteCallbackParams *> dataWrittenCallChain;
|
||||
CallChainOfFunctionPointersWithContext<const GattReadCallbackParams *> onDataRead;
|
||||
EventCallback_t onUpdatesEnabled;
|
||||
EventCallback_t onUpdatesDisabled;
|
||||
EventCallback_t onConfirmationReceived;
|
||||
EventCallback_t onUpdatesEnabled;
|
||||
EventCallback_t onUpdatesDisabled;
|
||||
EventCallback_t onConfirmationReceived;
|
||||
|
||||
private:
|
||||
/* disallow copy and assignment */
|
||||
|
|
Loading…
Reference in a new issue