extend

Fork of BLE_API by Bluetooth Low Energy

Revision:
770:079b714e9c1a
Parent:
767:d6a79c77d1c3
Child:
772:b6d27ab66c94
--- a/ble/Gap.h	Fri Aug 07 15:55:21 2015 +0100
+++ b/ble/Gap.h	Fri Aug 07 15:55:21 2015 +0100
@@ -725,9 +725,22 @@
      *
      * Once the scanning parameters have been configured, scanning can be
      * enabled by using startScan().
+     *
+     * If scanning is already active, the updated value of scanWindow will be
+     * propagated to the underlying BLE stack.
      */
     ble_error_t setScanWindow(uint16_t window) {
-        return _scanningParams.setWindow(window);
+        ble_error_t rc;
+        if ((rc = _scanningParams.setWindow(window)) != BLE_ERROR_NONE) {
+            return rc;
+        }
+
+        /* If scanning is already active, propagate the new setting to the stack. */
+        if (scanningActive) {
+            return startRadioScan(_scanningParams);
+        }
+
+        return BLE_ERROR_NONE;
     }
 
     /**
@@ -737,9 +750,22 @@
      *
      * Once the scanning parameters have been configured, scanning can be
      * enabled by using startScan().
+     *
+     * If scanning is already active, the updated value of scanTimeout will be
+     * propagated to the underlying BLE stack.
      */
     ble_error_t setScanTimeout(uint16_t timeout) {
-        return _scanningParams.setTimeout(timeout);
+        ble_error_t rc;
+        if ((rc = _scanningParams.setTimeout(timeout)) != BLE_ERROR_NONE) {
+            return rc;
+        }
+
+        /* If scanning is already active, propagate the new settings to the stack. */
+        if (scanningActive) {
+            return startRadioScan(_scanningParams);
+        }
+
+        return BLE_ERROR_NONE;
     }
 
     /**
@@ -750,9 +776,19 @@
      *
      * Once the scanning parameters have been configured, scanning can be
      * enabled by using startScan().
+     *
+     * If scanning is already in progress, then active-scanning will be enabled
+     * for the underlying BLE stack.
      */
-    void setActiveScanning(bool activeScanning) {
+    ble_error_t setActiveScanning(bool activeScanning) {
         _scanningParams.setActiveScanning(activeScanning);
+
+        /* If scanning is already active, propagate the new settings to the stack. */
+        if (scanningActive) {
+            return startRadioScan(_scanningParams);
+        }
+
+        return BLE_ERROR_NONE;
     }
 
     /**
@@ -768,6 +804,7 @@
         ble_error_t err = BLE_ERROR_NONE;
         if (callback) {
             if ((err = startRadioScan(_scanningParams)) == BLE_ERROR_NONE) {
+                scanningActive = true;
                 onAdvertisementReport.attach(callback);
             }
         }
@@ -783,6 +820,7 @@
         ble_error_t err = BLE_ERROR_NONE;
         if (object && callbackMember) {
             if ((err = startRadioScan(_scanningParams)) == BLE_ERROR_NONE) {
+                scanningActive = true;
                 onAdvertisementReport.attach(object, callbackMember);
             }
         }
@@ -915,6 +953,7 @@
         _scanningParams(),
         _scanResponse(),
         state(),
+        scanningActive(false),
         timeoutCallback(NULL),
         connectionCallback(NULL),
         disconnectionCallback(NULL),
@@ -978,6 +1017,7 @@
     GapAdvertisingData               _scanResponse;
 
     GapState_t                       state;
+    bool                             scanningActive;
 
 protected:
     TimeoutEventCallback_t           timeoutCallback;