Skip to content

Commit 0f7381d

Browse files
authored
Merge pull request #9058 from pan-/fix-scan-timeout
BLE: suppress scan timeout if we disabled scanning
2 parents 070bf2f + 50d1818 commit 0f7381d

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

features/FEATURE_BLE/ble/generic/GenericGap.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -726,6 +726,7 @@ class GenericGap :
726726
ble::address_t _random_static_identity_address;
727727
bool _random_address_rotating;
728728

729+
bool _scan_enabled;
729730
mbed::Timeout _advertising_timeout;
730731
mbed::Timeout _scan_timeout;
731732
mbed::Ticker _address_rotation_ticker;

features/FEATURE_BLE/source/generic/GenericGap.cpp

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,7 @@ GenericGap::GenericGap(
435435
_peripheral_privacy_configuration(default_peripheral_privacy_configuration),
436436
_central_privacy_configuration(default_central_privacy_configuration),
437437
_random_address_rotating(false),
438+
_scan_enabled(false),
438439
_advertising_timeout(),
439440
_scan_timeout(),
440441
_connection_event_handler(NULL),
@@ -564,14 +565,26 @@ ble_error_t GenericGap::stopAdvertising()
564565
ble_error_t GenericGap::stopScan()
565566
{
566567
ble_error_t err;
568+
567569
if (is_extended_advertising_available()) {
570+
if (!_scan_enabled) {
571+
return BLE_ERROR_NONE;
572+
}
573+
574+
_scan_enabled = false;
575+
568576
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+
}
569582
} else {
570583
err = _pal_gap.scan_enable(false, false);
571-
}
572584

573-
if (err) {
574-
return err;
585+
if (err) {
586+
return err;
587+
}
575588
}
576589

577590
// Stop address rotation if required
@@ -1465,6 +1478,12 @@ BLE_DEPRECATED_API_USE_END()
14651478

14661479
void GenericGap::on_scan_timeout()
14671480
{
1481+
if (!_scan_enabled) {
1482+
return;
1483+
}
1484+
1485+
_scan_enabled = false;
1486+
14681487
if (!_eventHandler) {
14691488
return;
14701489
}
@@ -2875,12 +2894,19 @@ ble_error_t GenericGap::startScan(
28752894
}
28762895

28772896
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(
28792900
/* enable */true,
28802901
filtering,
28812902
duration.value(),
28822903
period.value()
28832904
);
2905+
2906+
if (err) {
2907+
_scan_enabled = false;
2908+
return err;
2909+
}
28842910
} else {
28852911
if (period.value() != 0) {
28862912
return BLE_ERROR_INVALID_PARAM;
@@ -2902,9 +2928,9 @@ ble_error_t GenericGap::startScan(
29022928
microsecond_t(duration).value()
29032929
);
29042930
}
2905-
2906-
return BLE_ERROR_NONE;
29072931
}
2932+
2933+
return BLE_ERROR_NONE;
29082934
}
29092935

29102936
ble_error_t GenericGap::createSync(

0 commit comments

Comments
 (0)