Lightly modified version of the BLE stack, that doesn't bring up a DFUService by default... as we have our own.

Fork of BLE_API by Bluetooth Low Energy

Files at this revision

API Documentation at this revision

Comitter:
rgrover1
Date:
Wed Jan 21 09:32:48 2015 +0000
Parent:
258:85de85adfac7
Child:
260:ea7f9f14cc15
Commit message:
Synchronized with git rev 580f31d8
Author: marcuschang
Added chained callbacks for onDataSent.

Changed in this revision

public/BLEDevice.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/BLEDevice.h	Wed Jan 21 09:32:48 2015 +0000
+++ b/public/BLEDevice.h	Wed Jan 21 09:32:48 2015 +0000
@@ -225,8 +225,16 @@
 
     /**
      * Setup a callback for the GATT event DATA_SENT.
+     *
+     * @Note: it is possible to chain together multiple onDataSent callbacks
+     * (potentially from different modules of an application) to receive updates
+     * to characteristics. 
+     *
+     * @Note: it is also possible to setup a callback into a member function of
+     * some object.
      */
-    void onDataSent(GattServer::ServerEventCallbackWithCount_t callback);
+    void onDataSent(void (*callback)(unsigned count));
+    template <typename T> void onDataSent(T * objPtr, void (T::*memberPtr)(unsigned count));
 
     /**
      * Setup a callback for when a characteristic has its value updated by a
@@ -525,11 +533,15 @@
 }
 
 inline void
-BLEDevice::onDataSent(GattServer::ServerEventCallbackWithCount_t callback)
-{
+BLEDevice::onDataSent(void (*callback)(unsigned count)) {
     transport->getGattServer().setOnDataSent(callback);
 }
 
+template <typename T> inline void
+BLEDevice::onDataSent(T *objPtr, void (T::*memberPtr)(unsigned count)) {
+    transport->getGattServer().setOnDataSent(objPtr, memberPtr);
+}
+
 inline void
 BLEDevice::onDataWritten(void (*callback)(const GattCharacteristicWriteCBParams *eventDataP)) {
     transport->getGattServer().setOnDataWritten(callback);
--- a/public/GattServer.h	Wed Jan 21 09:32:48 2015 +0000
+++ b/public/GattServer.h	Wed Jan 21 09:32:48 2015 +0000
@@ -27,10 +27,9 @@
     /* Event callback handlers. */
     typedef void (*EventCallback_t)(uint16_t attributeHandle);
     typedef void (*ServerEventCallback_t)(void);                    /**< independent of any particular attribute */
-    typedef void (*ServerEventCallbackWithCount_t)(unsigned count); /**< independent of any particular attribute */
 
 protected:
-    GattServer() : serviceCount(0), characteristicCount(0), onDataSent(NULL), onDataWritten(), onUpdatesEnabled(NULL), onUpdatesDisabled(NULL), onConfirmationReceived(NULL) {
+    GattServer() : serviceCount(0), characteristicCount(0), onDataSent(), onDataWritten(), onUpdatesEnabled(NULL), onUpdatesDisabled(NULL), onConfirmationReceived(NULL) {
         /* empty */
     }
 
@@ -47,7 +46,11 @@
     // be sure to call sd_ble_gatts_hvx() twice with notify then indicate!
     // Strange use case, but valid and must be covered!
 
-    void setOnDataSent(ServerEventCallbackWithCount_t callback) {onDataSent = callback;}
+    void setOnDataSent(void (*callback)(unsigned count)) {onDataSent.add(callback);}
+    template <typename T>
+    void setOnDataSent(T *objPtr, void (T::*memberPtr)(unsigned count)) {
+        onDataSent.add(objPtr, memberPtr);
+    }
     void setOnDataWritten(void (*callback)(const GattCharacteristicWriteCBParams *eventDataP)) {onDataWritten.add(callback);}
     template <typename T>
     void setOnDataWritten(T *objPtr, void (T::*memberPtr)(const GattCharacteristicWriteCBParams *context)) {
@@ -85,8 +88,8 @@
     }
 
     void handleDataSentEvent(unsigned count) {
-        if (onDataSent) {
-            onDataSent(count);
+        if (onDataSent.hasCallbacksAttached()) {
+            onDataSent.call(count);
         }
     }
 
@@ -95,7 +98,7 @@
     uint8_t characteristicCount;
 
 private:
-    ServerEventCallbackWithCount_t onDataSent;
+    CallChainOfFunctionPointersWithContext<unsigned> onDataSent;
     CallChainOfFunctionPointersWithContext<const GattCharacteristicWriteCBParams *> onDataWritten;
     EventCallback_t                onUpdatesEnabled;
     EventCallback_t                onUpdatesDisabled;