@@ -435,6 +435,7 @@ GenericGap::GenericGap(
435
435
_peripheral_privacy_configuration(default_peripheral_privacy_configuration),
436
436
_central_privacy_configuration(default_central_privacy_configuration),
437
437
_random_address_rotating(false ),
438
+ _scan_enabled(false ),
438
439
_advertising_timeout(),
439
440
_scan_timeout(),
440
441
_connection_event_handler(NULL ),
@@ -564,14 +565,26 @@ ble_error_t GenericGap::stopAdvertising()
564
565
ble_error_t GenericGap::stopScan ()
565
566
{
566
567
ble_error_t err;
568
+
567
569
if (is_extended_advertising_available ()) {
570
+ if (!_scan_enabled) {
571
+ return BLE_ERROR_NONE;
572
+ }
573
+
574
+ _scan_enabled = false ;
575
+
568
576
err = _pal_gap.extended_scan_enable (false , pal::duplicates_filter_t ::DISABLE, 0 , 0 );
577
+
578
+ if (err) {
579
+ _scan_enabled = true ;
580
+ return err;
581
+ }
569
582
} else {
570
583
err = _pal_gap.scan_enable (false , false );
571
- }
572
584
573
- if (err) {
574
- return err;
585
+ if (err) {
586
+ return err;
587
+ }
575
588
}
576
589
577
590
// Stop address rotation if required
@@ -1465,6 +1478,12 @@ BLE_DEPRECATED_API_USE_END()
1465
1478
1466
1479
void GenericGap::on_scan_timeout ()
1467
1480
{
1481
+ if (!_scan_enabled) {
1482
+ return ;
1483
+ }
1484
+
1485
+ _scan_enabled = false ;
1486
+
1468
1487
if (!_eventHandler) {
1469
1488
return ;
1470
1489
}
@@ -2875,12 +2894,19 @@ ble_error_t GenericGap::startScan(
2875
2894
}
2876
2895
2877
2896
if (is_extended_advertising_available ()) {
2878
- return _pal_gap.extended_scan_enable (
2897
+ _scan_enabled = true ;
2898
+
2899
+ ble_error_t err = _pal_gap.extended_scan_enable (
2879
2900
/* enable */ true ,
2880
2901
filtering,
2881
2902
duration.value (),
2882
2903
period.value ()
2883
2904
);
2905
+
2906
+ if (err) {
2907
+ _scan_enabled = false ;
2908
+ return err;
2909
+ }
2884
2910
} else {
2885
2911
if (period.value () != 0 ) {
2886
2912
return BLE_ERROR_INVALID_PARAM;
@@ -2902,9 +2928,9 @@ ble_error_t GenericGap::startScan(
2902
2928
microsecond_t (duration).value ()
2903
2929
);
2904
2930
}
2905
-
2906
- return BLE_ERROR_NONE;
2907
2931
}
2932
+
2933
+ return BLE_ERROR_NONE;
2908
2934
}
2909
2935
2910
2936
ble_error_t GenericGap::createSync (
0 commit comments