Add adv change event to silabs platforms (#32987)
diff --git a/src/platform/silabs/efr32/BLEManagerImpl.cpp b/src/platform/silabs/efr32/BLEManagerImpl.cpp
index db99398..64bab16 100644
--- a/src/platform/silabs/efr32/BLEManagerImpl.cpp
+++ b/src/platform/silabs/efr32/BLEManagerImpl.cpp
@@ -532,11 +532,12 @@
CHIP_ERROR BLEManagerImpl::StartAdvertising(void)
{
- CHIP_ERROR err;
- sl_status_t ret;
- uint32_t interval_min;
- uint32_t interval_max;
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ sl_status_t ret = SL_STATUS_OK;
+ uint32_t interval_min = 0;
+ uint32_t interval_max = 0;
uint16_t numConnectionss = NumConnections();
+ bool postAdvChangeEvent = false;
uint8_t connectableAdv =
(numConnectionss < kMaxConnections) ? sl_bt_advertiser_connectable_scannable : sl_bt_advertiser_scannable_non_connectable;
@@ -548,6 +549,7 @@
else
{
ChipLogDetail(DeviceLayer, "Start BLE advertisement");
+ postAdvChangeEvent = true;
}
err = ConfigureAdvertisingData();
@@ -586,18 +588,26 @@
SuccessOrExit(err);
sl_bt_advertiser_configure(advertising_set_handle, 1);
+
ret = sl_bt_legacy_advertiser_start(advertising_set_handle, connectableAdv);
-
- if (SL_STATUS_OK == ret)
- {
- if (mFlags.Has(Flags::kFastAdvertisingEnabled))
- {
- StartBleAdvTimeoutTimer(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME);
- }
- mFlags.Set(Flags::kAdvertising);
- }
-
err = MapBLEError(ret);
+ SuccessOrExit(err);
+
+ if (mFlags.Has(Flags::kFastAdvertisingEnabled))
+ {
+ StartBleAdvTimeoutTimer(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME);
+ }
+ mFlags.Set(Flags::kAdvertising);
+
+ if (postAdvChangeEvent)
+ {
+ // Post CHIPoBLEAdvertisingChange event.
+ ChipDeviceEvent advChange;
+ advChange.Type = DeviceEventType::kCHIPoBLEAdvertisingChange;
+ advChange.CHIPoBLEAdvertisingChange.Result = kActivity_Started;
+
+ ReturnErrorOnFailure(PlatformMgr().PostEvent(&advChange));
+ }
exit:
return err;
@@ -606,10 +616,11 @@
CHIP_ERROR BLEManagerImpl::StopAdvertising(void)
{
CHIP_ERROR err = CHIP_NO_ERROR;
- sl_status_t ret;
if (mFlags.Has(Flags::kAdvertising))
{
+ sl_status_t ret = SL_STATUS_OK;
+
mFlags.Clear(Flags::kAdvertising).Clear(Flags::kRestartAdvertising);
mFlags.Set(Flags::kFastAdvertisingEnabled, true);
@@ -617,12 +628,17 @@
sl_bt_advertiser_delete_set(advertising_set_handle);
advertising_set_handle = 0xff;
err = MapBLEError(ret);
- SuccessOrExit(err);
+ VerifyOrReturnError(err == CHIP_NO_ERROR, err);
CancelBleAdvTimeoutTimer();
+
+ // Post CHIPoBLEAdvertisingChange event.
+ ChipDeviceEvent advChange;
+ advChange.Type = DeviceEventType::kCHIPoBLEAdvertisingChange;
+ advChange.CHIPoBLEAdvertisingChange.Result = kActivity_Stopped;
+ err = PlatformMgr().PostEvent(&advChange);
}
-exit:
return err;
}
diff --git a/src/platform/silabs/rs911x/BLEManagerImpl.cpp b/src/platform/silabs/rs911x/BLEManagerImpl.cpp
index 53fd807..4ce7ef6 100644
--- a/src/platform/silabs/rs911x/BLEManagerImpl.cpp
+++ b/src/platform/silabs/rs911x/BLEManagerImpl.cpp
@@ -678,8 +678,9 @@
CHIP_ERROR BLEManagerImpl::StartAdvertising(void)
{
- CHIP_ERROR err = CHIP_NO_ERROR;
- int32_t status = 0;
+ CHIP_ERROR err = CHIP_NO_ERROR;
+ int32_t status = 0;
+ bool postAdvChangeEvent = false;
ChipLogProgress(DeviceLayer, "StartAdvertising start");
@@ -695,6 +696,7 @@
else
{
ChipLogDetail(DeviceLayer, "Start BLE advertisement");
+ postAdvChangeEvent = true;
}
if (!(mFlags.Has(Flags::kAdvertising)))
@@ -719,6 +721,16 @@
StartBleAdvTimeoutTimer(CHIP_DEVICE_CONFIG_BLE_ADVERTISING_INTERVAL_CHANGE_TIME);
}
mFlags.Set(Flags::kAdvertising);
+
+ if (postAdvChangeEvent)
+ {
+ // Post CHIPoBLEAdvertisingChange event.
+ ChipDeviceEvent advChange;
+ advChange.Type = DeviceEventType::kCHIPoBLEAdvertisingChange;
+ advChange.CHIPoBLEAdvertisingChange.Result = kActivity_Started;
+
+ ReturnErrorOnFailure(PlatformMgr().PostEvent(&advChange));
+ }
}
else
{
@@ -726,8 +738,9 @@
}
exit:
+ // TODO: Add MapBLEError to return the correct error code
ChipLogError(DeviceLayer, "StartAdvertising() End error: %s", ErrorStr(err));
- return CHIP_NO_ERROR; // err;
+ return err;
}
int32_t BLEManagerImpl::SendBLEAdvertisementCommand(void)
@@ -756,7 +769,6 @@
return rsi_ble_start_advertising_with_values(&ble_adv);
}
-// TODO:: Implementation need to be done.
CHIP_ERROR BLEManagerImpl::StopAdvertising(void)
{
CHIP_ERROR err = CHIP_NO_ERROR;
@@ -772,12 +784,16 @@
mFlags.Set(Flags::kFastAdvertisingEnabled, true);
advertising_set_handle = 0xff;
CancelBleAdvTimeoutTimer();
- }
- else
- {
- ChipLogProgress(DeviceLayer, "advertising failed to stop, with status = 0x%lx", status);
+
+ // Post CHIPoBLEAdvertisingChange event.
+ ChipDeviceEvent advChange;
+ advChange.Type = DeviceEventType::kCHIPoBLEAdvertisingChange;
+ advChange.CHIPoBLEAdvertisingChange.Result = kActivity_Stopped;
+ err = PlatformMgr().PostEvent(&advChange);
}
}
+
+ // TODO: Add MapBLEError to return the correct error code
return err;
}