@@ -161,7 +161,7 @@ BLEManagerImpl BLEManagerImpl::sInstance;
161
161
CHIP_ERROR BLEManagerImpl::_Init ()
162
162
{
163
163
int err = 0 ;
164
- int id = 0 ;
164
+ int id = 0 ;
165
165
166
166
mServiceMode = ConnectivityManager::kCHIPoBLEServiceMode_Enabled ;
167
167
mFlags .ClearAll ().Set (Flags::kAdvertisingEnabled , CHIP_DEVICE_CONFIG_CHIPOBLE_ENABLE_ADVERTISING_AUTOSTART);
@@ -293,18 +293,39 @@ inline CHIP_ERROR BLEManagerImpl::PrepareAdvertisingRequest()
293
293
Encoding::LittleEndian::Put16 (serviceData.uuid , UUID16_CHIPoBLEService.val );
294
294
ReturnErrorOnFailure (ConfigurationMgr ().GetBLEDeviceIdentificationInfo (serviceData.deviceIdInfo ));
295
295
296
+ #if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
297
+ if (mFlags .Has (Flags::kExtendedAdvertisingEnabled ))
298
+ {
299
+ serviceData.deviceIdInfo .SetVendorId (DEVICE_HANDLE_NULL);
300
+ serviceData.deviceIdInfo .SetProductId (DEVICE_HANDLE_NULL);
301
+ serviceData.deviceIdInfo .SetExtendedAnnouncementFlag (true );
302
+ }
303
+ #endif
304
+
296
305
advertisingData[0 ] = BT_DATA (BT_DATA_FLAGS, &kAdvertisingFlags , sizeof (kAdvertisingFlags ));
297
306
advertisingData[1 ] = BT_DATA (BT_DATA_SVC_DATA16, &serviceData, sizeof (serviceData));
298
307
scanResponseData[0 ] = BT_DATA (BT_DATA_NAME_COMPLETE, name, nameSize);
299
308
300
- mAdvertisingRequest .priority = CHIP_DEVICE_BLE_ADVERTISING_PRIORITY;
301
- mAdvertisingRequest .options = kAdvertisingOptions ;
302
- mAdvertisingRequest .minInterval = mFlags .Has (Flags::kFastAdvertisingEnabled )
303
- ? CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MIN
304
- : CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MIN;
305
- mAdvertisingRequest .maxInterval = mFlags .Has (Flags::kFastAdvertisingEnabled )
306
- ? CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MAX
307
- : CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MAX;
309
+ mAdvertisingRequest .priority = CHIP_DEVICE_BLE_ADVERTISING_PRIORITY;
310
+ mAdvertisingRequest .options = kAdvertisingOptions ;
311
+
312
+ if (mFlags .Has (Flags::kFastAdvertisingEnabled ))
313
+ {
314
+ mAdvertisingRequest .minInterval = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MIN;
315
+ mAdvertisingRequest .maxInterval = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MAX;
316
+ }
317
+ #if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
318
+ else if (mFlags .Has (Flags::kExtendedAdvertisingEnabled ))
319
+ {
320
+ mAdvertisingRequest .minInterval = CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_MIN;
321
+ mAdvertisingRequest .maxInterval = CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_MAX;
322
+ }
323
+ #endif
324
+ else
325
+ {
326
+ mAdvertisingRequest .minInterval = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MIN;
327
+ mAdvertisingRequest .maxInterval = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MAX;
328
+ }
308
329
mAdvertisingRequest .advertisingData = Span<bt_data>(advertisingData);
309
330
mAdvertisingRequest .scanResponseData = nameSize ? Span<bt_data>(scanResponseData) : Span<bt_data>{};
310
331
@@ -363,10 +384,17 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising()
363
384
364
385
if (mFlags .Has (Flags::kFastAdvertisingEnabled ))
365
386
{
366
- // Start timer to change advertising interval.
387
+ // Start timer to change advertising interval from fast to slow .
367
388
DeviceLayer::SystemLayer ().StartTimer (
368
389
System::Clock::Milliseconds32 (CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME),
369
- HandleBLEAdvertisementIntervalChange, this );
390
+ HandleSlowBLEAdvertisementInterval, this );
391
+
392
+ #if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
393
+ // Start timer to change advertising interval from slow to extended.
394
+ DeviceLayer::SystemLayer ().StartTimer (
395
+ System::Clock::Milliseconds32 (CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_CHANGE_TIME_MS),
396
+ HandleExtendedBLEAdvertisementInterval, this );
397
+ #endif
370
398
}
371
399
}
372
400
@@ -383,6 +411,10 @@ CHIP_ERROR BLEManagerImpl::StopAdvertising()
383
411
mFlags .Clear (Flags::kAdvertising );
384
412
mFlags .Set (Flags::kFastAdvertisingEnabled , true );
385
413
414
+ #if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
415
+ mFlags .Clear (Flags::kExtendedAdvertisingEnabled );
416
+ #endif
417
+
386
418
ChipLogProgress (DeviceLayer, " CHIPoBLE advertising stopped" );
387
419
388
420
// Post a CHIPoBLEAdvertisingChange(Stopped) event.
@@ -394,7 +426,8 @@ CHIP_ERROR BLEManagerImpl::StopAdvertising()
394
426
}
395
427
396
428
// Cancel timer event changing CHIPoBLE advertisement interval
397
- DeviceLayer::SystemLayer ().CancelTimer (HandleBLEAdvertisementIntervalChange, this );
429
+ DeviceLayer::SystemLayer ().CancelTimer (HandleSlowBLEAdvertisementInterval, this );
430
+ DeviceLayer::SystemLayer ().CancelTimer (HandleExtendedBLEAdvertisementInterval, this );
398
431
}
399
432
400
433
return CHIP_NO_ERROR;
@@ -419,8 +452,14 @@ CHIP_ERROR BLEManagerImpl::_SetAdvertisingMode(BLEAdvertisingMode mode)
419
452
{
420
453
case BLEAdvertisingMode::kFastAdvertising :
421
454
mFlags .Set (Flags::kFastAdvertisingEnabled , true );
455
+ mFlags .Set (Flags::kExtendedAdvertisingEnabled , false );
422
456
break ;
423
457
case BLEAdvertisingMode::kSlowAdvertising :
458
+ mFlags .Set (Flags::kFastAdvertisingEnabled , false );
459
+ mFlags .Set (Flags::kExtendedAdvertisingEnabled , false );
460
+ break ;
461
+ case BLEAdvertisingMode::kExtendedAdvertising :
462
+ mFlags .Set (Flags::kExtendedAdvertisingEnabled , true );
424
463
mFlags .Set (Flags::kFastAdvertisingEnabled , false );
425
464
break ;
426
465
default :
@@ -607,12 +646,18 @@ CHIP_ERROR BLEManagerImpl::PrepareC3CharData()
607
646
}
608
647
#endif
609
648
610
- void BLEManagerImpl::HandleBLEAdvertisementIntervalChange (System::Layer * layer, void * param)
649
+ void BLEManagerImpl::HandleSlowBLEAdvertisementInterval (System::Layer * layer, void * param)
611
650
{
612
651
BLEMgr ().SetAdvertisingMode (BLEAdvertisingMode::kSlowAdvertising );
613
652
ChipLogProgress (DeviceLayer, " CHIPoBLE advertising mode changed to slow" );
614
653
}
615
654
655
+ void BLEManagerImpl::HandleExtendedBLEAdvertisementInterval (System::Layer * layer, void * param)
656
+ {
657
+ BLEMgr ().SetAdvertisingMode (BLEAdvertisingMode::kExtendedAdvertising );
658
+ ChipLogProgress (DeviceLayer, " CHIPoBLE advertising mode changed to extended" );
659
+ }
660
+
616
661
void BLEManagerImpl::_OnPlatformEvent (const ChipDeviceEvent * event)
617
662
{
618
663
CHIP_ERROR err = CHIP_NO_ERROR;
0 commit comments