Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: microbit-dal microbit-dal microbit-ble-open microbit-dal ... more
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;
