From 30c9ac7fafa0dfebb2da45fcc8d708f04b896da7 Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Mon, 27 Jun 2022 11:29:52 -0700 Subject: [PATCH] Stop duplicating advertisement timeout handling. The commissioning window manager handles advertisement start/stop. We don't need per-advertisement-mechanism duplication of timeout timers. Specific changes: 1) Remove the "stop advertisement" timing from the (few) platform BLE managers that did it. 2) Remove CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT altogether. 3) Remove commissioning advertisement timing from Dnssd.cpp. 4) Remove the Linux shell command for setting the "discovery timeout", because it's really not clear what it's supposed to do and how it should work. Fixes https://github.com/project-chip/connectedhomeip/issues/16693 --- examples/all-clusters-app/nxp/mw320/main.cpp | 3 -- .../k32w/k32w0/include/CHIPProjectConfig.h | 10 ---- .../k32w/k32w0/include/CHIPProjectConfig.h | 10 ---- .../efr32/include/CHIPProjectConfig.h | 10 ---- .../linux/CommissioneeShellCommands.cpp | 14 ++++- .../k32w/k32w0/include/CHIPProjectConfig.h | 10 ---- .../efr32/include/CHIPProjectConfig.h | 10 ---- src/app/server/Dnssd.cpp | 54 ------------------- src/app/server/Dnssd.h | 12 ----- src/include/platform/CHIPDeviceConfig.h | 12 ----- src/platform/Ameba/BLEManagerImpl.cpp | 19 ------- src/platform/Ameba/BLEManagerImpl.h | 2 - src/platform/EFR32/BLEManagerImpl.cpp | 22 +++----- src/platform/ESP32/BLEManagerImpl.h | 4 -- .../ESP32/bluedroid/BLEManagerImpl.cpp | 18 ------- src/platform/ESP32/nimble/BLEManagerImpl.cpp | 18 ------- src/platform/P6/cycfg_gap.h | 2 +- src/platform/Zephyr/BLEManagerImpl.cpp | 17 ------ src/platform/Zephyr/BLEManagerImpl.h | 1 - .../bouffalolab/BL602/BLEManagerImpl.cpp | 19 +------ .../bouffalolab/BL602/BLEManagerImpl.h | 1 - .../nxp/k32w/k32w0/BLEManagerImpl.cpp | 17 +----- src/platform/qpg/BLEManagerImpl.cpp | 22 +++----- .../efr32/include/CHIPProjectConfig.h | 10 ---- 24 files changed, 33 insertions(+), 284 deletions(-) diff --git a/examples/all-clusters-app/nxp/mw320/main.cpp b/examples/all-clusters-app/nxp/mw320/main.cpp index 4d30f9582eca91..bf7f1fc454fd4a 100644 --- a/examples/all-clusters-app/nxp/mw320/main.cpp +++ b/examples/all-clusters-app/nxp/mw320/main.cpp @@ -974,9 +974,6 @@ static void run_chip_srv(System::Layer * aSystemLayer, void * aAppState) // uint16_t unsecurePort = CHIP_UDC_PORT; // PRINTF("==> call chip::Server() \r\n"); - // PRINTF("Orig DNSS Discovery Timeout: %d sec \r\n", chip::app::DnssdServer::Instance().GetDiscoveryTimeoutSecs()); - // chip::app::DnssdServer::Instance().SetDiscoveryTimeoutSecs(60); - // chip::app::DnssdServer::Instance().SetDiscoveryTimeoutSecs(30); // chip::Server::GetInstance().Init(nullptr, securePort, unsecurePort); static chip::CommonCaseDeviceServerInitParams initParams; diff --git a/examples/lighting-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h b/examples/lighting-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h index 70233ed5396f29..e0b01be6a7a421 100644 --- a/examples/lighting-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h +++ b/examples/lighting-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h @@ -118,16 +118,6 @@ */ #define CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_TIMEOUT (30 * 1000) -/** - * CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT - * - * The amount of time in miliseconds after which BLE advertisement should be disabled, counting - * from the moment of slow advertisement commencement. - * - * Defaults to 9000000 (15 minutes). - */ -#define CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT (15 * 60 * 1000) - /** * @def CHIP_CONFIG_MAX_FABRICS * diff --git a/examples/lock-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h b/examples/lock-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h index e353245107691c..26b42ea1acd871 100644 --- a/examples/lock-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h +++ b/examples/lock-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h @@ -118,16 +118,6 @@ */ #define CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_TIMEOUT (30 * 1000) -/** - * CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT - * - * The amount of time in miliseconds after which BLE advertisement should be disabled, counting - * from the moment of slow advertisement commencement. - * - * Defaults to 9000000 (15 minutes). - */ -#define CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT (15 * 60 * 1000) - /** * @def CHIP_CONFIG_MAX_FABRICS * diff --git a/examples/pigweed-app/efr32/include/CHIPProjectConfig.h b/examples/pigweed-app/efr32/include/CHIPProjectConfig.h index 31021c1723ddf8..4bf2b06020dc06 100644 --- a/examples/pigweed-app/efr32/include/CHIPProjectConfig.h +++ b/examples/pigweed-app/efr32/include/CHIPProjectConfig.h @@ -150,13 +150,3 @@ * 30000 (30 secondes). */ #define CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_TIMEOUT (30 * 1000) - -/** - * CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT - * - * The amount of time in miliseconds after which BLE advertisement should be disabled, counting - * from the moment of slow advertisement commencement. - * - * Defaults to 9000000 (15 minutes). - */ -#define CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT (15 * 60 * 1000) diff --git a/examples/platform/linux/CommissioneeShellCommands.cpp b/examples/platform/linux/CommissioneeShellCommands.cpp index 73cc376bd8db7e..bef012defbedeb 100644 --- a/examples/platform/linux/CommissioneeShellCommands.cpp +++ b/examples/platform/linux/CommissioneeShellCommands.cpp @@ -61,8 +61,14 @@ static CHIP_ERROR PrintAllCommands() #if CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY_CLIENT streamer_printf(sout, " sendudc
Send UDC message to address. Usage: commissionee sendudc ::1 5543\r\n"); #endif // CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY_CLIENT + // TODO: Figure out whether setdiscoverytimeout is a reasonable thing to do + // at all, and if so what semantics it should have. Presumably it should + // affect BLE discovery too, not just DNS-SD. How should it interact with + // explicit timeouts specified in OpenCommissioningWindow? +#if 0 streamer_printf( sout, " setdiscoverytimeout Set discovery timeout in seconds. Usage: commissionee setdiscoverytimeout 30\r\n"); +#endif #if CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY streamer_printf(sout, " setextendeddiscoverytimeout Set extendeddiscovery timeout in seconds. Usage: commissionee " @@ -94,6 +100,11 @@ static CHIP_ERROR CommissioneeHandler(int argc, char ** argv) return SendUDC(true, chip::Transport::PeerAddress::UDP(commissioner, port)); } #endif // CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY_CLIENT + // TODO: Figure out whether setdiscoverytimeout is a reasonable thing to do + // at all, and if so what semantics it should have. Presumably it should + // affect BLE discovery too, not just DNS-SD. How should it interact with + // explicit timeouts specified in OpenCommissioningWindow? +#if 0 if (strcmp(argv[0], "setdiscoverytimeout") == 0) { char * eptr; @@ -101,8 +112,9 @@ static CHIP_ERROR CommissioneeHandler(int argc, char ** argv) chip::app::DnssdServer::Instance().SetDiscoveryTimeoutSecs(timeout); return CHIP_NO_ERROR; } +#endif #if CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY - else if (strcmp(argv[0], "setextendeddiscoverytimeout") == 0) + if (strcmp(argv[0], "setextendeddiscoverytimeout") == 0) { char * eptr; int16_t timeout = (int16_t) strtol(argv[1], &eptr, 10); diff --git a/examples/shell/nxp/k32w/k32w0/include/CHIPProjectConfig.h b/examples/shell/nxp/k32w/k32w0/include/CHIPProjectConfig.h index cf249979512c0c..0d36467b3c07b9 100644 --- a/examples/shell/nxp/k32w/k32w0/include/CHIPProjectConfig.h +++ b/examples/shell/nxp/k32w/k32w0/include/CHIPProjectConfig.h @@ -125,16 +125,6 @@ */ #define CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_TIMEOUT (30 * 1000) -/** - * CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT - * - * The amount of time in miliseconds after which BLE advertisement should be disabled, counting - * from the moment of slow advertisement commencement. - * - * Defaults to 9000000 (15 minutes). - */ -#define CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT (15 * 60 * 1000) - /** * @def CHIP_CONFIG_MAX_FABRICS * diff --git a/examples/window-app/efr32/include/CHIPProjectConfig.h b/examples/window-app/efr32/include/CHIPProjectConfig.h index 14ebab2b3009e8..4f69721d3d971e 100644 --- a/examples/window-app/efr32/include/CHIPProjectConfig.h +++ b/examples/window-app/efr32/include/CHIPProjectConfig.h @@ -154,16 +154,6 @@ */ #define CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_TIMEOUT (30 * 1000) -/** - * CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT - * - * The amount of time in miliseconds after which BLE advertisement should be disabled, counting - * from the moment of slow advertisement commencement. - * - * Defaults to 9000000 (15 minutes). - */ -#define CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT (15 * 60 * 1000) - /** * @def CHIP_CONFIG_MRP_LOCAL_ACTIVE_RETRY_INTERVAL * diff --git a/src/app/server/Dnssd.cpp b/src/app/server/Dnssd.cpp index f9d466f92e0270..3b1d7d7c9f0042 100644 --- a/src/app/server/Dnssd.cpp +++ b/src/app/server/Dnssd.cpp @@ -107,12 +107,6 @@ void DnssdServer::OnExtendedDiscoveryExpiration(System::Layer * aSystemLayer, vo } #endif // CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY -/// Callback from Discovery Expiration timer -void HandleDiscoveryExpiration(System::Layer * aSystemLayer, void * aAppState) -{ - DnssdServer::Instance().OnDiscoveryExpiration(aSystemLayer, aAppState); -} - bool DnssdServer::OnExpiration(System::Clock::Timestamp expirationMs) { if (expirationMs == kTimeoutCleared) @@ -166,47 +160,6 @@ bool DnssdServer::OnExpiration(System::Clock::Timestamp expirationMs) return true; } -void DnssdServer::OnDiscoveryExpiration(System::Layer * aSystemLayer, void * aAppState) -{ - if (!DnssdServer::OnExpiration(mDiscoveryExpiration)) - { - ChipLogDetail(Discovery, "OnDiscoveryExpiration callback for cleared session"); - return; - } - - ChipLogDetail(Discovery, "OnDiscoveryExpiration callback for valid session"); - -#if CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY - int32_t extTimeout = GetExtendedDiscoveryTimeoutSecs(); - if (extTimeout != CHIP_DEVICE_CONFIG_DISCOVERY_DISABLED) - { - CHIP_ERROR err = AdvertiseCommissionableNode(chip::Dnssd::CommissioningMode::kDisabled); - if (err != CHIP_NO_ERROR) - { - ChipLogError(Discovery, "Failed to advertise extended commissionable node: %" CHIP_ERROR_FORMAT, err.Format()); - } - // set timeout - ScheduleExtendedDiscoveryExpiration(); - } -#endif // CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY - - mDiscoveryExpiration = kTimeoutCleared; -} - -CHIP_ERROR DnssdServer::ScheduleDiscoveryExpiration() -{ - if (mDiscoveryTimeoutSecs == CHIP_DEVICE_CONFIG_DISCOVERY_NO_TIMEOUT) - { - return CHIP_NO_ERROR; - } - ChipLogDetail(Discovery, "Scheduling discovery timeout in %ds", mDiscoveryTimeoutSecs); - - mDiscoveryExpiration = mTimeSource.GetMonotonicTimestamp() + System::Clock::Seconds16(mDiscoveryTimeoutSecs); - - return DeviceLayer::SystemLayer().StartTimer(System::Clock::Seconds16(mDiscoveryTimeoutSecs), HandleDiscoveryExpiration, - nullptr); -} - #if CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY CHIP_ERROR DnssdServer::ScheduleExtendedDiscoveryExpiration() { @@ -455,13 +408,6 @@ void DnssdServer::StartServer(Dnssd::CommissioningMode mode) { ChipLogError(Discovery, "Failed to advertise commissionable node: %" CHIP_ERROR_FORMAT, err.Format()); } - - // If any fabrics exist, the commissioning window must have been opened by the administrator - // commissioning cluster commands which take care of the timeout. - if (!HaveOperationalCredentials()) - { - ScheduleDiscoveryExpiration(); - } } #if CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY else if (GetExtendedDiscoveryTimeoutSecs() != CHIP_DEVICE_CONFIG_DISCOVERY_DISABLED) diff --git a/src/app/server/Dnssd.h b/src/app/server/Dnssd.h index 86eab1f85d0d5a..af9cfaf6122e04 100644 --- a/src/app/server/Dnssd.h +++ b/src/app/server/Dnssd.h @@ -59,12 +59,6 @@ class DLL_EXPORT DnssdServer /// Gets the interface id used for advertising Inet::InterfaceId GetInterfaceId() { return mInterfaceId; } - /// Sets the factory-new state commissionable node discovery timeout - void SetDiscoveryTimeoutSecs(int16_t secs) { mDiscoveryTimeoutSecs = secs; } - - /// Gets the factory-new state commissionable node discovery timeout - int16_t GetDiscoveryTimeoutSecs() const { return mDiscoveryTimeoutSecs; } - // // Override the referenced fabric table from the default that is present // in Server::GetInstance().GetFabricTable() to something else. @@ -147,7 +141,6 @@ class DLL_EXPORT DnssdServer void ClearTimeouts() { - mDiscoveryExpiration = kTimeoutCleared; #if CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY mExtendedDiscoveryExpiration = kTimeoutCleared; #endif // CHIP_DEVICE_CONFIG_ENABLE_EXTENDED_DISCOVERY @@ -163,11 +156,6 @@ class DLL_EXPORT DnssdServer // Ephemeral discriminator to use instead of the default if set Optional mEphemeralDiscriminator; - /// schedule next discovery expiration - CHIP_ERROR ScheduleDiscoveryExpiration(); - int16_t mDiscoveryTimeoutSecs = CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS; - System::Clock::Timestamp mDiscoveryExpiration = kTimeoutCleared; - Optional mExtendedDiscoveryTimeoutSecs = NullOptional; /// return true if expirationMs is valid (not cleared and not in the future) diff --git a/src/include/platform/CHIPDeviceConfig.h b/src/include/platform/CHIPDeviceConfig.h index 510d89f371e135..0a35aca535a85f 100644 --- a/src/include/platform/CHIPDeviceConfig.h +++ b/src/include/platform/CHIPDeviceConfig.h @@ -584,18 +584,6 @@ #define CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME 30000 #endif -/** - * CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT - * - * The amount of time in miliseconds after which BLE advertisement should be disabled, counting - * from the moment of advertisement commencement. - * - * Defaults to 9000000 (15 minutes). - */ -#ifndef CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT -#define CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT (15 * 60 * 1000) -#endif - // -------------------- Time Sync Configuration -------------------- /** diff --git a/src/platform/Ameba/BLEManagerImpl.cpp b/src/platform/Ameba/BLEManagerImpl.cpp index 129f4ccd43dbca..5b81a1797de54d 100644 --- a/src/platform/Ameba/BLEManagerImpl.cpp +++ b/src/platform/Ameba/BLEManagerImpl.cpp @@ -127,8 +127,6 @@ const ChipBleUUID ChipUUID_CHIPoBLEChar_RX = { { 0x18, 0xEE, 0x2E, 0xF5, 0x26, 0 const ChipBleUUID ChipUUID_CHIPoBLEChar_TX = { { 0x18, 0xEE, 0x2E, 0xF5, 0x26, 0x3D, 0x45, 0x59, 0x95, 0x9F, 0x4F, 0x9C, 0x42, 0x9F, 0x9D, 0x12 } }; -static constexpr System::Clock::Timeout kAdvertiseTimeout = - System::Clock::Milliseconds32(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT); static constexpr System::Clock::Timeout kFastAdvertiseTimeout = System::Clock::Milliseconds32(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME); System::Clock::Timestamp mAdvertiseStartTime; @@ -380,7 +378,6 @@ CHIP_ERROR BLEManagerImpl::_SetAdvertisingEnabled(bool val) if (val) { mAdvertiseStartTime = System::SystemClock().GetMonotonicTimestamp(); - ReturnErrorOnFailure(DeviceLayer::SystemLayer().StartTimer(kAdvertiseTimeout, HandleAdvertisementTimer, this)); ReturnErrorOnFailure(DeviceLayer::SystemLayer().StartTimer(kFastAdvertiseTimeout, HandleFastAdvertisementTimer, this)); } @@ -396,22 +393,6 @@ CHIP_ERROR BLEManagerImpl::_SetAdvertisingEnabled(bool val) return err; } -void BLEManagerImpl::HandleAdvertisementTimer(System::Layer * systemLayer, void * context) -{ - static_cast(context)->HandleAdvertisementTimer(); -} - -void BLEManagerImpl::HandleAdvertisementTimer() -{ - System::Clock::Timestamp currentTimestamp = System::SystemClock().GetMonotonicTimestamp(); - - if (currentTimestamp - mAdvertiseStartTime >= kAdvertiseTimeout) - { - mFlags.Set(Flags::kAdvertisingEnabled, 0); - PlatformMgr().ScheduleWork(DriveBLEState, 0); - } -} - void BLEManagerImpl::HandleFastAdvertisementTimer(System::Layer * systemLayer, void * context) { static_cast(context)->HandleFastAdvertisementTimer(); diff --git a/src/platform/Ameba/BLEManagerImpl.h b/src/platform/Ameba/BLEManagerImpl.h index 734597e72150a1..1886a941da557d 100755 --- a/src/platform/Ameba/BLEManagerImpl.h +++ b/src/platform/Ameba/BLEManagerImpl.h @@ -144,8 +144,6 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla static void HandleFastAdvertisementTimer(System::Layer * systemLayer, void * context); void HandleFastAdvertisementTimer(); - static void HandleAdvertisementTimer(System::Layer * systemLayer, void * context); - void HandleAdvertisementTimer(); void HandleRXCharWrite(uint8_t *, uint16_t, uint8_t); void HandleTXCharRead(void * param); diff --git a/src/platform/EFR32/BLEManagerImpl.cpp b/src/platform/EFR32/BLEManagerImpl.cpp index 795b8404237e58..1d59f76d725bbc 100644 --- a/src/platform/EFR32/BLEManagerImpl.cpp +++ b/src/platform/EFR32/BLEManagerImpl.cpp @@ -691,7 +691,6 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising(void) sl_status_t ret; uint32_t interval_min; uint32_t interval_max; - uint32_t BleAdvTimeoutMs; uint16_t numConnectionss = NumConnections(); uint8_t connectableAdv = (numConnectionss < kMaxConnections) ? sl_bt_advertiser_connectable_scannable : sl_bt_advertiser_scannable_non_connectable; @@ -718,15 +717,13 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising(void) if (mFlags.Has(Flags::kFastAdvertisingEnabled)) { - interval_min = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MIN; - interval_max = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MAX; - BleAdvTimeoutMs = CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME; + interval_min = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MIN; + interval_max = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MAX; } else { - interval_min = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MIN; - interval_max = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MAX; - BleAdvTimeoutMs = CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT; + interval_min = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MIN; + interval_max = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MAX; } ret = sl_bt_advertiser_set_timing(advertising_set_handle, interval_min, interval_max, 0, 0); @@ -738,7 +735,10 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising(void) if (SL_STATUS_OK == ret) { - StartBleAdvTimeoutTimer(BleAdvTimeoutMs); + if (mFlags.Has(Flags::kFastAdvertisingEnabled)) + { + StartBleAdvTimeoutTimer(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME); + } mFlags.Set(Flags::kAdvertising); } @@ -1076,12 +1076,6 @@ void BLEManagerImpl::BleAdvTimeoutHandler(TimerHandle_t xTimer) ChipLogDetail(DeviceLayer, "bleAdv Timeout : Start slow advertissment"); BLEMgr().SetAdvertisingMode(BLEAdvertisingMode::kSlowAdvertising); } - else if (BLEMgrImpl().mFlags.Has(Flags::kAdvertising)) - { - // Advertisement time expired. Stop advertising - ChipLogDetail(DeviceLayer, "bleAdv Timeout : Stop advertissement"); - BLEMgr().SetAdvertisingEnabled(false); - } } void BLEManagerImpl::CancelBleAdvTimeoutTimer(void) diff --git a/src/platform/ESP32/BLEManagerImpl.h b/src/platform/ESP32/BLEManagerImpl.h index 62ba2b79ba9097..b62fde05104e85 100644 --- a/src/platform/ESP32/BLEManagerImpl.h +++ b/src/platform/ESP32/BLEManagerImpl.h @@ -202,16 +202,12 @@ class BLEManagerImpl final : public BLEManager, CHIP_ERROR ConfigureAdvertisingData(void); CHIP_ERROR StartAdvertising(void); - static constexpr System::Clock::Timeout kAdvertiseTimeout = - System::Clock::Milliseconds32(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT); static constexpr System::Clock::Timeout kFastAdvertiseTimeout = System::Clock::Milliseconds32(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME); System::Clock::Timestamp mAdvertiseStartTime; static void HandleFastAdvertisementTimer(System::Layer * systemLayer, void * context); void HandleFastAdvertisementTimer(); - static void HandleAdvertisementTimer(System::Layer * systemLayer, void * context); - void HandleAdvertisementTimer(); #if CONFIG_BT_BLUEDROID_ENABLED void HandleGATTControlEvent(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t * param); diff --git a/src/platform/ESP32/bluedroid/BLEManagerImpl.cpp b/src/platform/ESP32/bluedroid/BLEManagerImpl.cpp index 783ae9f8d5405d..9242ea1d2fd86c 100644 --- a/src/platform/ESP32/bluedroid/BLEManagerImpl.cpp +++ b/src/platform/ESP32/bluedroid/BLEManagerImpl.cpp @@ -125,7 +125,6 @@ const uint16_t CHIPoBLEGATTAttrCount = sizeof(CHIPoBLEGATTAttrs) / sizeof(CHIPoB } // unnamed namespace BLEManagerImpl BLEManagerImpl::sInstance; -constexpr System::Clock::Timeout BLEManagerImpl::kAdvertiseTimeout; constexpr System::Clock::Timeout BLEManagerImpl::kFastAdvertiseTimeout; CHIP_ERROR BLEManagerImpl::_Init() @@ -179,7 +178,6 @@ CHIP_ERROR BLEManagerImpl::_SetAdvertisingEnabled(bool val) if (val) { mAdvertiseStartTime = System::SystemClock().GetMonotonicTimestamp(); - ReturnErrorOnFailure(DeviceLayer::SystemLayer().StartTimer(kAdvertiseTimeout, HandleAdvertisementTimer, this)); ReturnErrorOnFailure(DeviceLayer::SystemLayer().StartTimer(kFastAdvertiseTimeout, HandleFastAdvertisementTimer, this)); } mFlags.Set(Flags::kFastAdvertisingEnabled, val); @@ -190,22 +188,6 @@ CHIP_ERROR BLEManagerImpl::_SetAdvertisingEnabled(bool val) return err; } -void BLEManagerImpl::HandleAdvertisementTimer(System::Layer * systemLayer, void * context) -{ - static_cast(context)->HandleAdvertisementTimer(); -} - -void BLEManagerImpl::HandleAdvertisementTimer() -{ - System::Clock::Timestamp currentTimestamp = System::SystemClock().GetMonotonicTimestamp(); - - if (currentTimestamp - mAdvertiseStartTime >= kAdvertiseTimeout) - { - mFlags.Clear(Flags::kAdvertisingEnabled); - PlatformMgr().ScheduleWork(DriveBLEState, 0); - } -} - void BLEManagerImpl::HandleFastAdvertisementTimer(System::Layer * systemLayer, void * context) { static_cast(context)->HandleFastAdvertisementTimer(); diff --git a/src/platform/ESP32/nimble/BLEManagerImpl.cpp b/src/platform/ESP32/nimble/BLEManagerImpl.cpp index 45f2c8af849916..ae99c64299e9fe 100644 --- a/src/platform/ESP32/nimble/BLEManagerImpl.cpp +++ b/src/platform/ESP32/nimble/BLEManagerImpl.cpp @@ -95,7 +95,6 @@ SemaphoreHandle_t semaphoreHandle = NULL; } // unnamed namespace BLEManagerImpl BLEManagerImpl::sInstance; -constexpr System::Clock::Timeout BLEManagerImpl::kAdvertiseTimeout; constexpr System::Clock::Timeout BLEManagerImpl::kFastAdvertiseTimeout; const struct ble_gatt_svc_def BLEManagerImpl::CHIPoBLEGATTAttrs[] = { @@ -185,7 +184,6 @@ CHIP_ERROR BLEManagerImpl::_SetAdvertisingEnabled(bool val) if (val) { mAdvertiseStartTime = System::SystemClock().GetMonotonicTimestamp(); - ReturnErrorOnFailure(DeviceLayer::SystemLayer().StartTimer(kAdvertiseTimeout, HandleAdvertisementTimer, this)); ReturnErrorOnFailure(DeviceLayer::SystemLayer().StartTimer(kFastAdvertiseTimeout, HandleFastAdvertisementTimer, this)); } @@ -198,22 +196,6 @@ CHIP_ERROR BLEManagerImpl::_SetAdvertisingEnabled(bool val) return err; } -void BLEManagerImpl::HandleAdvertisementTimer(System::Layer * systemLayer, void * context) -{ - static_cast(context)->HandleAdvertisementTimer(); -} - -void BLEManagerImpl::HandleAdvertisementTimer() -{ - System::Clock::Timestamp currentTimestamp = System::SystemClock().GetMonotonicTimestamp(); - - if (currentTimestamp - mAdvertiseStartTime >= kAdvertiseTimeout) - { - mFlags.Set(Flags::kAdvertisingEnabled, 0); - PlatformMgr().ScheduleWork(DriveBLEState, 0); - } -} - void BLEManagerImpl::HandleFastAdvertisementTimer(System::Layer * systemLayer, void * context) { static_cast(context)->HandleFastAdvertisementTimer(); diff --git a/src/platform/P6/cycfg_gap.h b/src/platform/P6/cycfg_gap.h index d6d0c59530e252..6243c64d8fb68d 100644 --- a/src/platform/P6/cycfg_gap.h +++ b/src/platform/P6/cycfg_gap.h @@ -73,7 +73,7 @@ #define CY_BT_LOW_DUTY_ADV_MIN_INTERVAL CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MIN #define CY_BT_LOW_DUTY_ADV_MAX_INTERVAL CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MAX #define CY_BT_LOW_DUTY_ADV_DURATION \ - (CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT - CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME) / 1000 + (CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS * 1000 - CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME) / 1000 #define CY_BT_HIGH_DUTY_DIRECTED_ADV_MIN_INTERVAL 400 #define CY_BT_HIGH_DUTY_DIRECTED_ADV_MAX_INTERVAL 800 diff --git a/src/platform/Zephyr/BLEManagerImpl.cpp b/src/platform/Zephyr/BLEManagerImpl.cpp index 2e7f44e50fe88f..6eaa2b611ea952 100644 --- a/src/platform/Zephyr/BLEManagerImpl.cpp +++ b/src/platform/Zephyr/BLEManagerImpl.cpp @@ -324,14 +324,6 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising(void) System::Clock::Milliseconds32(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME), HandleBLEAdvertisementIntervalChange, this); } - - // Start timer to disable CHIPoBLE advertisement after timeout expiration only if it isn't advertising rerun (in that case - // timer is already running). - if (!isAdvertisingRerun) - { - DeviceLayer::SystemLayer().StartTimer(System::Clock::Milliseconds32(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT), - HandleBLEAdvertisementTimeout, this); - } } return CHIP_NO_ERROR; @@ -358,9 +350,6 @@ CHIP_ERROR BLEManagerImpl::StopAdvertising(void) ReturnErrorOnFailure(PlatformMgr().PostEvent(&advChange)); } - // Cancel timer event disabling CHIPoBLE advertisement after timeout expiration - DeviceLayer::SystemLayer().CancelTimer(HandleBLEAdvertisementTimeout, this); - // Cancel timer event changing CHIPoBLE advertisement interval DeviceLayer::SystemLayer().CancelTimer(HandleBLEAdvertisementIntervalChange, this); } @@ -605,12 +594,6 @@ CHIP_ERROR BLEManagerImpl::PrepareC3CharData() } #endif -void BLEManagerImpl::HandleBLEAdvertisementTimeout(System::Layer * layer, void * param) -{ - BLEMgr().SetAdvertisingEnabled(false); - ChipLogProgress(DeviceLayer, "CHIPoBLE advertising disabled because of timeout expired"); -} - void BLEManagerImpl::HandleBLEAdvertisementIntervalChange(System::Layer * layer, void * param) { BLEMgr().SetAdvertisingMode(BLEAdvertisingMode::kSlowAdvertising); diff --git a/src/platform/Zephyr/BLEManagerImpl.h b/src/platform/Zephyr/BLEManagerImpl.h index 5a6d69d40fdbc2..238d563b5582dc 100644 --- a/src/platform/Zephyr/BLEManagerImpl.h +++ b/src/platform/Zephyr/BLEManagerImpl.h @@ -139,7 +139,6 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla static void HandleTXIndicated(bt_conn * conn, IndicationAttrType attr, uint8_t err); static void HandleConnect(bt_conn * conn, uint8_t err); static void HandleDisconnect(bt_conn * conn, uint8_t reason); - static void HandleBLEAdvertisementTimeout(System::Layer * layer, void * param); static void HandleBLEAdvertisementIntervalChange(System::Layer * layer, void * param); // ===== Members for internal use by the following friends. diff --git a/src/platform/bouffalolab/BL602/BLEManagerImpl.cpp b/src/platform/bouffalolab/BL602/BLEManagerImpl.cpp index 8c577f1741dfb2..4ed04876557915 100644 --- a/src/platform/bouffalolab/BL602/BLEManagerImpl.cpp +++ b/src/platform/bouffalolab/BL602/BLEManagerImpl.cpp @@ -292,7 +292,7 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising(void) if (!isAdvertisingRerun) { #if CONFIG_BT_PRIVACY - static_assert((CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT / 1000) <= CONFIG_BT_RPA_TIMEOUT, + static_assert(CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS <= CONFIG_BT_RPA_TIMEOUT, "BLE advertising timeout is too long relative to RPA timeout"); // Generate new private BLE address bt_le_oob bleOobInfo; @@ -330,14 +330,6 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising(void) System::Clock::Milliseconds32(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME), HandleBLEAdvertisementIntervalChange, this); } - - // Start timer to disable CHIPoBLE advertisement after timeout expiration only if it isn't advertising rerun (in that case - // timer is already running). - if (!isAdvertisingRerun) - { - DeviceLayer::SystemLayer().StartTimer(System::Clock::Milliseconds32(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT), - HandleBLEAdvertisementTimeout, this); - } } return CHIP_NO_ERROR; @@ -364,9 +356,6 @@ CHIP_ERROR BLEManagerImpl::StopAdvertising(void) PlatformMgr().PostEvent(&advChange); } - // Cancel timer event disabling CHIPoBLE advertisement after timeout expiration - DeviceLayer::SystemLayer().CancelTimer(HandleBLEAdvertisementTimeout, this); - // Cancel timer event changing CHIPoBLE advertisement interval DeviceLayer::SystemLayer().CancelTimer(HandleBLEAdvertisementIntervalChange, this); } @@ -577,12 +566,6 @@ CHIP_ERROR BLEManagerImpl::HandleTXCharComplete(const ChipDeviceEvent * event) return CHIP_NO_ERROR; } -void BLEManagerImpl::HandleBLEAdvertisementTimeout(System::Layer * layer, void * param) -{ - BLEMgr().SetAdvertisingEnabled(false); - ChipLogProgress(DeviceLayer, "CHIPoBLE advertising disabled because of timeout expired"); -} - void BLEManagerImpl::HandleBLEAdvertisementIntervalChange(System::Layer * layer, void * param) { BLEMgr().SetAdvertisingMode(BLEAdvertisingMode::kSlowAdvertising); diff --git a/src/platform/bouffalolab/BL602/BLEManagerImpl.h b/src/platform/bouffalolab/BL602/BLEManagerImpl.h index 44d65d503a78b4..e4c8e64341a8db 100644 --- a/src/platform/bouffalolab/BL602/BLEManagerImpl.h +++ b/src/platform/bouffalolab/BL602/BLEManagerImpl.h @@ -123,7 +123,6 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla static void HandleTXCompleted(bt_conn * conn, void * param); static void HandleConnect(bt_conn * conn, uint8_t err); static void HandleDisconnect(bt_conn * conn, uint8_t reason); - static void HandleBLEAdvertisementTimeout(System::Layer * layer, void * param); static void HandleBLEAdvertisementIntervalChange(System::Layer * layer, void * param); // ===== Members for internal use by the following friends. diff --git a/src/platform/nxp/k32w/k32w0/BLEManagerImpl.cpp b/src/platform/nxp/k32w/k32w0/BLEManagerImpl.cpp index cc46ea6602a4b8..44a9c0c7890d46 100644 --- a/src/platform/nxp/k32w/k32w0/BLEManagerImpl.cpp +++ b/src/platform/nxp/k32w/k32w0/BLEManagerImpl.cpp @@ -885,21 +885,15 @@ CHIP_ERROR BLEManagerImpl::ConfigureAdvertisingData(void) CHIP_ERROR BLEManagerImpl::StartAdvertising(void) { - CHIP_ERROR err = CHIP_NO_ERROR; - uint32_t bleAdvTimeoutMs = 0; + CHIP_ERROR err = CHIP_NO_ERROR; mFlags.Set(Flags::kAdvertising); mFlags.Clear(Flags::kRestartAdvertising); if (mFlags.Has(Flags::kFastAdvertisingEnabled)) { - bleAdvTimeoutMs = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_TIMEOUT; - } - else - { - bleAdvTimeoutMs = CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT; + StartBleAdvTimeoutTimer(CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_TIMEOUT); } - StartBleAdvTimeoutTimer(bleAdvTimeoutMs); err = ConfigureAdvertisingData(); @@ -1557,13 +1551,6 @@ void BLEManagerImpl::BleAdvTimeoutHandler(TimerHandle_t xTimer) // stop advertiser, change interval and restart it; sInstance.StopAdvertising(); sInstance.StartAdvertising(); - sInstance.StartBleAdvTimeoutTimer(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT); // Slow advertise for 15 Minutes - } - else if (sInstance._IsAdvertisingEnabled()) - { - // advertisement expired. we stop advertissing - ChipLogDetail(DeviceLayer, "bleAdv Timeout : Stop advertisement"); - sInstance.StopAdvertising(); } return; diff --git a/src/platform/qpg/BLEManagerImpl.cpp b/src/platform/qpg/BLEManagerImpl.cpp index 0a0288c2381850..b9eb7f831f3124 100644 --- a/src/platform/qpg/BLEManagerImpl.cpp +++ b/src/platform/qpg/BLEManagerImpl.cpp @@ -515,7 +515,6 @@ CHIP_ERROR BLEManagerImpl::ConfigureAdvertisingData(void) CHIP_ERROR BLEManagerImpl::StartAdvertising(void) { CHIP_ERROR err; - uint32_t bleAdvTimeout; uint16_t intervalMin; uint16_t intervalMax; @@ -537,15 +536,13 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising(void) if (mFlags.Has(Flags::kFastAdvertisingEnabled)) { - intervalMin = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MIN; - intervalMax = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MAX; - bleAdvTimeout = CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME; + intervalMin = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MIN; + intervalMax = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MAX; } else { - intervalMin = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MIN; - intervalMax = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MAX; - bleAdvTimeout = CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT - CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME; + intervalMin = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MIN; + intervalMax = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MAX; } qvCHIP_BleSetAdvInterval(intervalMin, intervalMax); @@ -554,7 +551,10 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising(void) SuccessOrExit(err); mFlags.Set(Flags::kAdvertising); - StartBleAdvTimeoutTimer(bleAdvTimeout); + if (mFlags.Has(Flags::kFastAdvertisingEnabled)) + { + StartBleAdvTimeoutTimer(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME); + } exit: return err; @@ -936,12 +936,6 @@ void BLEManagerImpl::BleAdvTimeoutHandler(TimerHandle_t xTimer) sInstance.mFlags.Set(Flags::kRestartAdvertising); sInstance.StopAdvertising(); } - else if (BLEMgrImpl().mFlags.Has(Flags::kAdvertising)) - { - // Advertisement time expired. Stop advertising - ChipLogDetail(DeviceLayer, "bleAdv Timeout : Stop advertissement"); - BLEMgr().SetAdvertisingEnabled(false); - } } void BLEManagerImpl::CancelBleAdvTimeoutTimer(void) diff --git a/src/test_driver/efr32/include/CHIPProjectConfig.h b/src/test_driver/efr32/include/CHIPProjectConfig.h index a444e6f97d967a..032c45ce5b2e4b 100644 --- a/src/test_driver/efr32/include/CHIPProjectConfig.h +++ b/src/test_driver/efr32/include/CHIPProjectConfig.h @@ -141,13 +141,3 @@ * 30000 (30 secondes). */ #define CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_TIMEOUT (30 * 1000) - -/** - * CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT - * - * The amount of time in miliseconds after which BLE advertisement should be disabled, counting - * from the moment of slow advertisement commencement. - * - * Defaults to 9000000 (15 minutes). - */ -#define CHIP_DEVICE_CONFIG_BLE_ADVERTISING_TIMEOUT (15 * 60 * 1000)