Skip to content

Commit ba9faf2

Browse files
Fix max timeout for open commissioning window (project-chip#35507)
Commissioning window can be opened using timeout exceeding the maximum value of 900 s defined by the spec. This can happen if selected transport is IP, but the device uses BLE extended announcement feature. Added checking if device is commissioned to be able to determine what max timeout should be used for the particular scenario. Renamed CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING to the CHIP_DEVICE_CONFIG_EXT_ADVERTISING, as config name sounds misleading and it seems it relates only to BLE. Fixes: project-chip#35505
1 parent a068855 commit ba9faf2

13 files changed

+48
-43
lines changed

src/app/server/CommissioningWindowManager.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,20 @@ CHIP_ERROR CommissioningWindowManager::AdvertiseAndListenForPASE()
302302
return CHIP_NO_ERROR;
303303
}
304304

305+
System::Clock::Seconds32 CommissioningWindowManager::MaxCommissioningTimeout() const
306+
{
307+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
308+
/* Allow for extended announcement only if the device is uncomissioned. */
309+
if (mServer->GetFabricTable().FabricCount() == 0)
310+
{
311+
// Specification section 2.3.1 - Extended Announcement Duration up to 48h
312+
return System::Clock::Seconds32(60 * 60 * 48);
313+
}
314+
#endif
315+
// Specification section 5.4.2.3. Announcement Duration says 15 minutes.
316+
return System::Clock::Seconds32(15 * 60);
317+
}
318+
305319
CHIP_ERROR CommissioningWindowManager::OpenBasicCommissioningWindow(Seconds32 commissioningTimeout,
306320
CommissioningWindowAdvertisement advertisementMode)
307321
{

src/app/server/CommissioningWindowManager.h

+1-10
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,7 @@ class CommissioningWindowManager : public Messaging::UnsolicitedMessageHandler,
5858
return CHIP_NO_ERROR;
5959
}
6060

61-
static constexpr System::Clock::Seconds32 MaxCommissioningTimeout()
62-
{
63-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
64-
// Specification section 2.3.1 - Extended Announcement Duration up to 48h
65-
return System::Clock::Seconds32(60 * 60 * 48);
66-
#else
67-
// Specification section 5.4.2.3. Announcement Duration says 15 minutes.
68-
return System::Clock::Seconds32(15 * 60);
69-
#endif
70-
}
61+
System::Clock::Seconds32 MaxCommissioningTimeout() const;
7162

7263
System::Clock::Seconds32 MinCommissioningTimeout() const
7364
{

src/include/platform/CHIPDeviceConfig.h

+7-7
Original file line numberDiff line numberDiff line change
@@ -640,18 +640,18 @@
640640
#endif
641641

642642
/**
643-
* CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
643+
* CHIP_DEVICE_CONFIG_EXT_ADVERTISING
644644
*
645645
* Optional configuration to enable Extended Announcement Duration up to 48h.
646646
* Should be used together with extending CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS past 15 minutes.
647647
* Disabled by default.
648648
*/
649649

650-
#ifndef CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
651-
#define CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING 0
650+
#ifndef CHIP_DEVICE_CONFIG_EXT_ADVERTISING
651+
#define CHIP_DEVICE_CONFIG_EXT_ADVERTISING 0
652652
#endif
653653

654-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
654+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
655655

656656
/**
657657
* CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_CHANGE_TIME_MS
@@ -735,18 +735,18 @@ static_assert(CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_MIN <= CHIP_DEVICE
735735
* Time in seconds that a factory new device will advertise commissionable node discovery.
736736
*/
737737
#ifndef CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS
738-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
738+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
739739
/**
740740
* By default, the extended announcement, when enabled, starts its extended advertising 15 mins
741741
* after the standard slow advertisement. Time at which the default discovery time would close the
742742
* commissioning window and stop the BLE.
743-
* Therefore, when CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING is enabled bump the default Discovery timeout
743+
* Therefore, when CHIP_DEVICE_CONFIG_EXT_ADVERTISING is enabled bump the default Discovery timeout
744744
* to the maximum allowed by the spec. 48h.
745745
*/
746746
#define CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS (60 * 60 * 48)
747747
#else
748748
#define CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS (15 * 60)
749-
#endif // CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
749+
#endif // CHIP_DEVICE_CONFIG_EXT_ADVERTISING
750750
#endif // CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS
751751

752752
/**

src/platform/ESP32/CHIPDevicePlatformConfig.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,9 @@
152152
#define CHIP_DEVICE_CONFIG_ENABLE_PAIRING_AUTOSTART CONFIG_CHIP_ENABLE_PAIRING_AUTOSTART
153153

154154
#ifdef CONFIG_ENABLE_BLE_EXT_ANNOUNCEMENT
155-
#define CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING CONFIG_ENABLE_BLE_EXT_ANNOUNCEMENT
155+
#define CHIP_DEVICE_CONFIG_EXT_ADVERTISING CONFIG_ENABLE_BLE_EXT_ANNOUNCEMENT
156156
#else
157-
#define CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING 0
157+
#define CHIP_DEVICE_CONFIG_EXT_ADVERTISING 0
158158
#endif
159159

160160
// Options for background chip task

src/platform/ESP32/nimble/BLEManagerImpl.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -281,12 +281,12 @@ void BLEManagerImpl::BleAdvTimeoutHandler(System::Layer *, void *)
281281
BLEMgrImpl().mFlags.Set(Flags::kFastAdvertisingEnabled, 0);
282282
BLEMgrImpl().mFlags.Set(Flags::kAdvertisingRefreshNeeded, 1);
283283

284-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
284+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
285285
BLEMgrImpl().mFlags.Clear(Flags::kExtAdvertisingEnabled);
286286
BLEMgrImpl().StartBleAdvTimeoutTimer(CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_CHANGE_TIME_MS);
287287
#endif
288288
}
289-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
289+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
290290
else
291291
{
292292
ChipLogProgress(DeviceLayer, "bleAdv Timeout : Start extended advertisement");
@@ -1066,7 +1066,7 @@ CHIP_ERROR BLEManagerImpl::ConfigureAdvertisingData(void)
10661066
ExitNow();
10671067
}
10681068

1069-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
1069+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
10701070
// Check for extended advertisement interval and redact VID/PID if past the initial period.
10711071
if (mFlags.Has(Flags::kExtAdvertisingEnabled))
10721072
{
@@ -1671,7 +1671,7 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising(void)
16711671
}
16721672
else
16731673
{
1674-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
1674+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
16751675
if (!mFlags.Has(Flags::kExtAdvertisingEnabled))
16761676
{
16771677
adv_params.itvl_min = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MIN;

src/platform/Linux/BLEManagerImpl.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ static constexpr System::Clock::Timeout kNewConnectionScanTimeout = System::Cloc
6161
static constexpr System::Clock::Timeout kConnectTimeout = System::Clock::Seconds16(20);
6262
static constexpr System::Clock::Timeout kFastAdvertiseTimeout =
6363
System::Clock::Milliseconds32(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME);
64-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
64+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
6565
// The CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_CHANGE_TIME_MS specifies the transition time
6666
// starting from advertisement commencement. Since the extended advertisement timer is started after
6767
// the fast-to-slow transition, we have to subtract the time spent in fast advertising.
@@ -584,7 +584,7 @@ void BLEManagerImpl::DriveBLEState()
584584

585585
// Setup service data for advertising.
586586
auto serviceDataFlags = BluezAdvertisement::kServiceDataNone;
587-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
587+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
588588
if (mFlags.Has(Flags::kExtAdvertisingEnabled))
589589
serviceDataFlags |= BluezAdvertisement::kServiceDataExtendedAnnouncement;
590590
#endif
@@ -667,7 +667,7 @@ BluezAdvertisement::AdvertisingIntervals BLEManagerImpl::GetAdvertisingIntervals
667667
{
668668
if (mFlags.Has(Flags::kFastAdvertisingEnabled))
669669
return { CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MIN, CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MAX };
670-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
670+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
671671
if (mFlags.Has(Flags::kExtAdvertisingEnabled))
672672
return { CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_MIN, CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_MAX };
673673
#endif
@@ -682,7 +682,7 @@ void BLEManagerImpl::HandleAdvertisingTimer(chip::System::Layer *, void * appSta
682682
{
683683
ChipLogDetail(DeviceLayer, "bleAdv Timeout : Start slow advertisement");
684684
self->_SetAdvertisingMode(BLEAdvertisingMode::kSlowAdvertising);
685-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
685+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
686686
self->mFlags.Clear(Flags::kExtAdvertisingEnabled);
687687
DeviceLayer::SystemLayer().StartTimer(kSlowAdvertiseTimeout, HandleAdvertisingTimer, self);
688688
}

src/platform/Linux/bluez/BluezAdvertisement.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ CHIP_ERROR BluezAdvertisement::SetupServiceData(ServiceDataFlags aFlags)
161161
deviceInfo.SetAdditionalDataFlag(true);
162162
#endif
163163

164-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
164+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
165165
if (aFlags & kServiceDataExtendedAnnouncement)
166166
{
167167
deviceInfo.SetExtendedAnnouncementFlag(true);

src/platform/NuttX/BLEManagerImpl.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ static constexpr System::Clock::Timeout kNewConnectionScanTimeout = System::Cloc
6060
static constexpr System::Clock::Timeout kConnectTimeout = System::Clock::Seconds16(20);
6161
static constexpr System::Clock::Timeout kFastAdvertiseTimeout =
6262
System::Clock::Milliseconds32(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME);
63-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
63+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
6464
// The CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_CHANGE_TIME_MS specifies the transition time
6565
// starting from advertisement commencement. Since the extended advertisement timer is started after
6666
// the fast-to-slow transition, we have to subtract the time spent in fast advertising.
@@ -593,7 +593,7 @@ void BLEManagerImpl::DriveBLEState()
593593

594594
// Setup service data for advertising.
595595
auto serviceDataFlags = BluezAdvertisement::kServiceDataNone;
596-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
596+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
597597
if (mFlags.Has(Flags::kExtAdvertisingEnabled))
598598
serviceDataFlags |= BluezAdvertisement::kServiceDataExtendedAnnouncement;
599599
#endif
@@ -662,7 +662,7 @@ BluezAdvertisement::AdvertisingIntervals BLEManagerImpl::GetAdvertisingIntervals
662662
{
663663
if (mFlags.Has(Flags::kFastAdvertisingEnabled))
664664
return { CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MIN, CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MAX };
665-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
665+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
666666
if (mFlags.Has(Flags::kExtAdvertisingEnabled))
667667
return { CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_MIN, CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_MAX };
668668
#endif
@@ -677,7 +677,7 @@ void BLEManagerImpl::HandleAdvertisingTimer(chip::System::Layer *, void * appSta
677677
{
678678
ChipLogDetail(DeviceLayer, "bleAdv Timeout : Start slow advertisement");
679679
self->_SetAdvertisingMode(BLEAdvertisingMode::kSlowAdvertising);
680-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
680+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
681681
self->mFlags.Clear(Flags::kExtAdvertisingEnabled);
682682
DeviceLayer::SystemLayer().StartTimer(kSlowAdvertiseTimeout, HandleAdvertisingTimer, self);
683683
}

src/platform/Zephyr/BLEManagerImpl.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ inline CHIP_ERROR BLEManagerImpl::PrepareAdvertisingRequest()
295295
Encoding::LittleEndian::Put16(serviceData.uuid, UUID16_CHIPoBLEService.val);
296296
ReturnErrorOnFailure(ConfigurationMgr().GetBLEDeviceIdentificationInfo(serviceData.deviceIdInfo));
297297

298-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
298+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
299299
if (mFlags.Has(Flags::kExtendedAdvertisingEnabled))
300300
{
301301
serviceData.deviceIdInfo.SetVendorId(DEVICE_HANDLE_NULL);
@@ -316,7 +316,7 @@ inline CHIP_ERROR BLEManagerImpl::PrepareAdvertisingRequest()
316316
mAdvertisingRequest.minInterval = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MIN;
317317
mAdvertisingRequest.maxInterval = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MAX;
318318
}
319-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
319+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
320320
else if (mFlags.Has(Flags::kExtendedAdvertisingEnabled))
321321
{
322322
mAdvertisingRequest.minInterval = CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_MIN;
@@ -421,7 +421,7 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising()
421421
System::Clock::Milliseconds32(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME),
422422
HandleSlowBLEAdvertisementInterval, this);
423423

424-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
424+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
425425
// Start timer to schedule start of the extended advertising
426426
DeviceLayer::SystemLayer().StartTimer(
427427
System::Clock::Milliseconds32(CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_CHANGE_TIME_MS),
@@ -443,7 +443,7 @@ CHIP_ERROR BLEManagerImpl::StopAdvertising()
443443
mFlags.Clear(Flags::kAdvertising);
444444
mFlags.Set(Flags::kFastAdvertisingEnabled, true);
445445

446-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
446+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
447447
mFlags.Clear(Flags::kExtendedAdvertisingEnabled);
448448
#endif
449449

src/platform/Zephyr/CHIPDevicePlatformConfig.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@
166166
#endif // CONFIG_CHIP_EXTENDED_DISCOVERY
167167

168168
#ifdef CONFIG_CHIP_BLE_EXT_ADVERTISING
169-
#define CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING 1
169+
#define CHIP_DEVICE_CONFIG_EXT_ADVERTISING 1
170170
#endif // CONFIG_CHIP_BLE_EXT_ADVERTISING
171171

172172
#define CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS (CONFIG_CHIP_BLE_ADVERTISING_DURATION * 60)

src/platform/nrfconnect/CHIPDevicePlatformConfig.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@
242242
#endif // CONFIG_CHIP_EXTENDED_DISCOVERY
243243

244244
#ifdef CONFIG_CHIP_BLE_EXT_ADVERTISING
245-
#define CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING 1
245+
#define CHIP_DEVICE_CONFIG_EXT_ADVERTISING 1
246246
#endif // CONFIG_CHIP_BLE_EXT_ADVERTISING
247247

248248
#define CHIP_DEVICE_CONFIG_DISCOVERY_TIMEOUT_SECS (CONFIG_CHIP_BLE_ADVERTISING_DURATION * 60)

src/platform/silabs/CHIPDevicePlatformConfig.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@
155155

156156
#define CHIP_DEVICE_CONFIG_MAX_EVENT_QUEUE_SIZE 25
157157

158-
#define CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING SL_MATTER_BLE_EXTENDED_ADV
158+
#define CHIP_DEVICE_CONFIG_EXT_ADVERTISING SL_MATTER_BLE_EXTENDED_ADV
159159

160160
/*
161161
ICD Configuration Defines

src/platform/silabs/efr32/BLEManagerImpl.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ CHIP_ERROR BLEManagerImpl::ConfigureAdvertisingData(void)
449449
advData[index++] = ShortUUID_CHIPoBLEService[0]; // AD value
450450
advData[index++] = ShortUUID_CHIPoBLEService[1];
451451

452-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
452+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
453453
// Check for extended advertisement interval and redact VID/PID if past the initial period.
454454
if (mFlags.Has(Flags::kExtAdvertisingEnabled))
455455
{
@@ -553,7 +553,7 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising(void)
553553
}
554554
else
555555
{
556-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
556+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
557557
if (!mFlags.Has(Flags::kExtAdvertisingEnabled))
558558
{
559559
interval_min = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MIN;
@@ -993,12 +993,12 @@ void BLEManagerImpl::BleAdvTimeoutHandler(void * arg)
993993
ChipLogDetail(DeviceLayer, "bleAdv Timeout : Start slow advertisement");
994994
BLEMgrImpl().mFlags.Set(Flags::kAdvertising);
995995
BLEMgr().SetAdvertisingMode(BLEAdvertisingMode::kSlowAdvertising);
996-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
996+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
997997
BLEMgrImpl().mFlags.Clear(Flags::kExtAdvertisingEnabled);
998998
BLEMgrImpl().StartBleAdvTimeoutTimer(CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_CHANGE_TIME_MS);
999999
#endif
10001000
}
1001-
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
1001+
#if CHIP_DEVICE_CONFIG_EXT_ADVERTISING
10021002
else
10031003
{
10041004
ChipLogDetail(DeviceLayer, "bleAdv Timeout : Start extended advertisement");

0 commit comments

Comments
 (0)