BLE_API_Tiny_BLE

Dependents:   CSSE4011_BLE_IMU

Fork of BLE_API by Bluetooth Low Energy

Files at this revision

API Documentation at this revision

Comitter:
rgrover1
Date:
Mon May 18 09:54:27 2015 +0100
Parent:
405:8fc6e6855806
Child:
407:ca6b956b33d1
Commit message:
Synchronized with git rev aebfbce3
Author: Rohit Grover
redefine AdvertisementReportCallback_t in terms of AdvertisementCallbackParams_t.
This allows us to make use of FunctionPointerWithContext.

Changed in this revision

public/BLEDevice.h Show annotated file Show diff for this revision Revisions of this file
public/Gap.h Show annotated file Show diff for this revision Revisions of this file
--- a/public/BLEDevice.h	Mon May 18 09:54:27 2015 +0100
+++ b/public/BLEDevice.h	Mon May 18 09:54:27 2015 +0100
@@ -269,7 +269,7 @@
      *     every advertisement report. Can be passed in as NULL, in which case
      *     scanning may not be enabled at all.
      */
-    ble_error_t startScan(Gap::AdvertisementReportCallback_t callback);
+    ble_error_t startScan(void (*callback)(const Gap::AdvertisementCallbackParams_t *params));
 
     /**
      * Stop scanning. The current scanning parameters remain in effect.
@@ -783,7 +783,7 @@
 }
 
 inline ble_error_t
-BLEDevice::startScan(Gap::AdvertisementReportCallback_t callback) {
+BLEDevice::startScan(void (*callback)(const Gap::AdvertisementCallbackParams_t *params)) {
     return transport->getGap().startScan(scanningParams, callback);
 }
 
--- a/public/Gap.h	Mon May 18 09:54:27 2015 +0100
+++ b/public/Gap.h	Mon May 18 09:54:27 2015 +0100
@@ -21,6 +21,7 @@
 #include "GapAdvertisingParams.h"
 #include "GapEvents.h"
 #include "CallChain.h"
+#include "FunctionPointerWithContext.h"
 
 using namespace mbed;
 
@@ -152,12 +153,15 @@
     typedef void (*LinkSecuredCallback_t)(Handle_t handle, SecurityMode_t securityMode);
     typedef void (*PasskeyDisplayCallback_t)(Handle_t handle, const Passkey_t passkey);
 
-    typedef void (*AdvertisementReportCallback_t)(const address_t      peerAddr,
-                                                  int8_t               rssi,
-                                                  bool                 isScanResponse,
-                                                  AdvertisementType_t  type,
-                                                  uint8_t              advertisingDataLen,
-                                                  const uint8_t       *advertisingData);
+    struct AdvertisementCallbackParams_t {
+        Address_t            peerAddr;
+        int8_t               rssi;
+        bool                 isScanResponse;
+        AdvertisementType_t  type;
+        uint8_t              advertisingDataLen;
+        const uint8_t       *advertisingData;
+    };
+    typedef FunctionPointerWithContext<const AdvertisementCallbackParams_t *> AdvertisementReportCallback_t;
 
     friend class BLEDevice;
 
@@ -168,7 +172,7 @@
     virtual ble_error_t setAdvertisingData(const GapAdvertisingData &, const GapAdvertisingData &) = 0;
     virtual ble_error_t startAdvertising(const GapAdvertisingParams &)                             = 0;
     virtual ble_error_t stopAdvertising(void)                                                      = 0;
-    virtual ble_error_t startScan(const GapScanningParams &scanningParams, AdvertisementReportCallback_t callback) = 0;
+    virtual ble_error_t startScan(const GapScanningParams &scanningParams, void (*callback)(const AdvertisementCallbackParams_t *params)) = 0;
     virtual ble_error_t stopScan()                                                                 = 0;
     virtual uint16_t    getMinAdvertisingInterval(void) const                                      = 0;
     virtual uint16_t    getMinNonConnectableAdvertisingInterval(void) const                        = 0;
@@ -322,9 +326,14 @@
                                     AdvertisementType_t  type,
                                     uint8_t              advertisingDataLen,
                                     const uint8_t       *advertisingData) {
-        if (onAdvertisementReport) {
-            onAdvertisementReport(peerAddr, rssi, isScanResponse, type, advertisingDataLen, advertisingData);
-        }
+        AdvertisementCallbackParams_t params;
+        memcpy(params.peerAddr, peerAddr, ADDR_LEN);
+        params.rssi               = rssi;
+        params.isScanResponse     = isScanResponse;
+        params.type               = type;
+        params.advertisingDataLen = advertisingDataLen;
+        params.advertisingData    = advertisingData;
+        onAdvertisementReport.call(&params);
     }
 
     void processEvent(GapEvents::gapEvent_e type) {