High level Bluetooth Low Energy API and radio abstraction layer
Fork of BLE_API by
Revision 548:623e4c0f0b6e, committed 2015-06-19
- Comitter:
- rgrover1
- Date:
- Fri Jun 19 15:52:09 2015 +0100
- Parent:
- 547:f84c514eee35
- Child:
- 549:0ade048a19a3
- Commit message:
- Synchronized with git rev 962533e3
Author: Rohit Grover
fix GattServer::onDataWritten()
Changed in this revision
public/BLE.h | Show annotated file Show diff for this revision Revisions of this file |
public/GattServer.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/public/BLE.h Fri Jun 19 15:52:09 2015 +0100 +++ b/public/BLE.h Fri Jun 19 15:52:09 2015 +0100 @@ -1145,8 +1145,11 @@ } /** - * 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 @@ * * @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 @@ /* 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);
--- a/public/GattServer.h Fri Jun 19 15:52:09 2015 +0100 +++ b/public/GattServer.h Fri Jun 19 15:52:09 2015 +0100 @@ -35,7 +35,7 @@ serviceCount(0), characteristicCount(0), dataSentCallChain(), - onDataWritten(), + dataWrittenCallChain(), onDataRead(), onUpdatesEnabled(NULL), onUpdatesDisabled(NULL), @@ -160,10 +160,25 @@ 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 @@ protected: void handleDataWrittenEvent(const GattWriteCallbackParams *params) { - if (onDataWritten.hasCallbacksAttached()) { - onDataWritten.call(params); + if (dataWrittenCallChain.hasCallbacksAttached()) { + dataWrittenCallChain.call(params); } } @@ -240,12 +255,12 @@ 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 */