BLE_API_Tiny_BLE
Fork of BLE_API by
Revision 296:931da9973b89, committed 2015-03-02
- Comitter:
- rgrover1
- Date:
- Mon Mar 02 11:50:47 2015 +0000
- Parent:
- 295:4883b219983a
- Child:
- 297:7036ac0bd496
- Commit message:
- Synchronized with git rev 3b4e8110
Author: Rohit Grover
Merge branch 'readcallback' of https://github.com/jeremybrodt/BLE_API into jeremybrodt-readcallback
Changed in this revision
--- a/public/BLEDevice.h Mon Mar 02 11:50:47 2015 +0000 +++ b/public/BLEDevice.h Mon Mar 02 11:50:47 2015 +0000 @@ -250,6 +250,20 @@ void onDataWritten(void (*callback)(const GattCharacteristicWriteCBParams *eventDataP)); template <typename T> void onDataWritten(T * objPtr, void (T::*memberPtr)(const GattCharacteristicWriteCBParams *context)); + /** + * Setup a callback for when a characteristic is being read by a client. + * + * @Note: it is possible to chain together multiple onDataRead callbacks + * (potentially from different modules of an application) to receive updates + * to characteristics. Services may add their own onDataRead callbacks + * behind the scenes to trap interesting events. + * + * @Note: it is also possible to setup a callback into a member function of + * some object. + */ + ble_error_t onDataRead(void (*callback)(const GattCharacteristicReadCBParams *eventDataP)); + template <typename T> ble_error_t onDataRead(T * objPtr, void (T::*memberPtr)(const GattCharacteristicReadCBParams *context)); + void onUpdatesEnabled(GattServer::EventCallback_t callback); void onUpdatesDisabled(GattServer::EventCallback_t callback); void onConfirmationReceived(GattServer::EventCallback_t callback); @@ -551,6 +565,16 @@ transport->getGattServer().setOnDataWritten(objPtr, memberPtr); } +inline ble_error_t +BLEDevice::onDataRead(void (*callback)(const GattCharacteristicReadCBParams *eventDataP)) { + return transport->getGattServer().setOnDataRead(callback); +} + +template <typename T> inline ble_error_t +BLEDevice::onDataRead(T *objPtr, void (T::*memberPtr)(const GattCharacteristicReadCBParams *context)) { + return transport->getGattServer().setOnDataRead(objPtr, memberPtr); +} + inline void BLEDevice::onUpdatesEnabled(GattServer::EventCallback_t callback) {
--- a/public/GattCharacteristicCallbackParams.h Mon Mar 02 11:50:47 2015 +0000 +++ b/public/GattCharacteristicCallbackParams.h Mon Mar 02 11:50:47 2015 +0000 @@ -33,6 +33,17 @@ const uint8_t *data; /**< Incoming data, variable length. */ }; +struct GattCharacteristicReadCBParams { + GattAttribute::Handle_t charHandle; + enum Type { + GATTS_CHAR_OP_INVALID = 0x00, /**< Invalid Operation. */ + GATTS_CHAR_OP_READ_REQ = 0x0A, /**< Read Request. */ + } op; /**< Type of write operation, */ + uint16_t offset; /**< Offset for the read operation. */ + uint16_t *len; /**< Length of the outgoing data. */ + uint8_t *data; /**< Outgoing data, variable length. */ +}; + struct GattCharacteristicWriteAuthCBParams { GattAttribute::Handle_t charHandle; uint16_t offset; /**< Offset for the write operation. */
--- a/public/GattServer.h Mon Mar 02 11:50:47 2015 +0000 +++ b/public/GattServer.h Mon Mar 02 11:50:47 2015 +0000 @@ -34,6 +34,7 @@ characteristicCount(0), onDataSent(), onDataWritten(), + onDataRead(), onUpdatesEnabled(NULL), onUpdatesDisabled(NULL), onConfirmationReceived(NULL) { @@ -63,6 +64,15 @@ void setOnDataWritten(T *objPtr, void (T::*memberPtr)(const GattCharacteristicWriteCBParams *context)) { onDataWritten.add(objPtr, memberPtr); } + ble_error_t setOnDataRead(void (*callback)(const GattCharacteristicReadCBParams *eventDataP)) { + onDataRead.add(callback); + return BLE_ERROR_NONE; + } + template <typename T> + ble_error_t setOnDataRead(T *objPtr, void (T::*memberPtr)(const GattCharacteristicReadCBParams *context)) { + onDataRead.add(objPtr, memberPtr); + return BLE_ERROR_NONE; + } void setOnUpdatesEnabled(EventCallback_t callback) {onUpdatesEnabled = callback;} void setOnUpdatesDisabled(EventCallback_t callback) {onUpdatesDisabled = callback;} void setOnConfirmationReceived(EventCallback_t callback) {onConfirmationReceived = callback;} @@ -74,6 +84,12 @@ } } + void handleDataReadEvent(const GattCharacteristicReadCBParams *params) { + if (onDataRead.hasCallbacksAttached()) { + onDataRead.call(params); + } + } + void handleEvent(GattServerEvents::gattEvent_e type, uint16_t charHandle) { switch (type) { case GattServerEvents::GATT_EVENT_UPDATES_ENABLED: @@ -109,6 +125,7 @@ private: CallChainOfFunctionPointersWithContext<unsigned> onDataSent; CallChainOfFunctionPointersWithContext<const GattCharacteristicWriteCBParams *> onDataWritten; + CallChainOfFunctionPointersWithContext<const GattCharacteristicReadCBParams *> onDataRead; EventCallback_t onUpdatesEnabled; EventCallback_t onUpdatesDisabled; EventCallback_t onConfirmationReceived;