diff --git a/examples/platform/efr32/init_efrPlatform.cpp b/examples/platform/efr32/init_efrPlatform.cpp
index 0e81e5dcd74dad..d0fb913165c469 100644
--- a/examples/platform/efr32/init_efrPlatform.cpp
+++ b/examples/platform/efr32/init_efrPlatform.cpp
@@ -64,11 +64,7 @@ void initAntenna(void);
void init_efrPlatform(void)
{
-#if CHIP_ENABLE_OPENTHREAD
- otSysInit(0, NULL);
-#else
sl_system_init();
-#endif
sl_mbedtls_init();
#if DISPLAY_ENABLED
@@ -78,6 +74,10 @@ void init_efrPlatform(void)
#if EFR32_LOG_ENABLED
efr32InitLog();
#endif
+
+#if CHIP_ENABLE_OPENTHREAD
+ sl_ot_sys_init();
+#endif // CHIP_ENABLE_OPENTHREAD
}
#ifdef __cplusplus
diff --git a/src/platform/EFR32/BLEManagerImpl.cpp b/src/platform/EFR32/BLEManagerImpl.cpp
index 344d6c58a7d362..72d55817042c16 100644
--- a/src/platform/EFR32/BLEManagerImpl.cpp
+++ b/src/platform/EFR32/BLEManagerImpl.cpp
@@ -423,6 +423,12 @@ void BLEManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event)
}
break;
+ case DeviceEventType::kCHIPoBLENotifyConfirm: {
+ ChipLogProgress(DeviceLayer, "_OnPlatformEvent kCHIPoBLENotifyConfirm");
+ HandleTxConfirmationEvent(event->CHIPoBLENotifyConfirm.ConId);
+ }
+ break;
+
default:
ChipLogProgress(DeviceLayer, "_OnPlatformEvent default: event->Type = %d", event->Type);
break;
@@ -473,16 +479,24 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU
sl_status_t ret;
uint16_t cId = (UUIDsMatch(&ChipUUID_CHIPoBLEChar_RX, charId) ? gattdb_CHIPoBLEChar_Rx : gattdb_CHIPoBLEChar_Tx);
uint8_t timerHandle = GetTimerHandle(conId, true);
+ ChipDeviceEvent event;
VerifyOrExit(((conState != NULL) && (conState->subscribed != 0)), err = CHIP_ERROR_INVALID_ARGUMENT);
VerifyOrExit(timerHandle != kMaxConnections, err = CHIP_ERROR_NO_MEMORY);
- // start timer for light indication confirmation. Long delay for spake2 indication
+ // start timer for light notification confirmation. Long delay for spake2 indication
sl_bt_system_set_lazy_soft_timer(TIMER_S_2_TIMERTICK(6), 0, timerHandle, true);
- ret = sl_bt_gatt_server_send_indication(conId, cId, (data->DataLength()), data->Start());
+ ret = sl_bt_gatt_server_send_notification(conId, cId, (data->DataLength()), data->Start());
err = MapBLEError(ret);
+ if (err == CHIP_NO_ERROR)
+ {
+ event.Type = DeviceEventType::kCHIPoBLENotifyConfirm;
+ event.CHIPoBLENotifyConfirm.ConId = conId;
+ err = PlatformMgr().PostEvent(&event);
+ }
+
exit:
if (err != CHIP_NO_ERROR)
{
@@ -859,20 +873,20 @@ void BLEManagerImpl::HandleTXCharCCCDWrite(volatile sl_bt_msg_t * evt)
{
CHIP_ERROR err = CHIP_NO_ERROR;
CHIPoBLEConState * bleConnState;
- bool isIndicationEnabled = false;
+ bool isDisabled;
ChipDeviceEvent event;
bleConnState = GetConnectionState(evt->data.evt_gatt_server_user_write_request.connection);
VerifyOrExit(bleConnState != NULL, err = CHIP_ERROR_NO_MEMORY);
// Determine if the client is enabling or disabling notification/indication.
- isIndicationEnabled = (evt->data.evt_gatt_server_characteristic_status.client_config_flags == sl_bt_gatt_indication);
+ isDisabled = (evt->data.evt_gatt_server_characteristic_status.client_config_flags == sl_bt_gatt_disable);
ChipLogProgress(DeviceLayer, "HandleTXcharCCCDWrite - Config Flags value : %d",
evt->data.evt_gatt_server_characteristic_status.client_config_flags);
- ChipLogProgress(DeviceLayer, "CHIPoBLE %s received", isIndicationEnabled ? "subscribe" : "unsubscribe");
+ ChipLogProgress(DeviceLayer, "CHIPoBLE %s received", isDisabled ? "unsubscribe" : "subscribe");
- if (isIndicationEnabled)
+ if (!isDisabled)
{
// If indications are not already enabled for the connection...
if (!bleConnState->subscribed)
diff --git a/src/platform/EFR32/btconf/in_place_ota_dfu.xml b/src/platform/EFR32/btconf/in_place_ota_dfu.xml
deleted file mode 100644
index 28ca5930597228..00000000000000
--- a/src/platform/EFR32/btconf/in_place_ota_dfu.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- Abstract: The Silicon Labs OTA Service enables in-place over-the-air firmware update of the device.
-
- Abstract: Silicon Labs OTA Control.
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/platform/EFR32/btconf/gatt_configuration.btconf b/src/platform/EFR32/gatt_configuration.btconf
similarity index 98%
rename from src/platform/EFR32/btconf/gatt_configuration.btconf
rename to src/platform/EFR32/gatt_configuration.btconf
index 060af956d3893b..b6e4af590a8ae3 100644
--- a/src/platform/EFR32/btconf/gatt_configuration.btconf
+++ b/src/platform/EFR32/gatt_configuration.btconf
@@ -81,6 +81,7 @@
+
diff --git a/src/platform/EFR32/gatt_db.c b/src/platform/EFR32/gatt_db.c
index 110b069e2c23d7..aa10ec56fa920d 100644
--- a/src/platform/EFR32/gatt_db.c
+++ b/src/platform/EFR32/gatt_db.c
@@ -55,7 +55,7 @@ GATT_DATA(const sli_bt_gattdb_value_t gattdb_attribute_field_28) = { .len = 16,
0x1d,
} };
GATT_DATA(sli_bt_gattdb_attribute_chrvalue_t
- gattdb_attribute_field_24) = { .properties = 0x2e,
+ gattdb_attribute_field_24) = { .properties = 0x3e,
.max_len = 247,
.len = 1,
.data = {
@@ -353,7 +353,7 @@ GATT_DATA(const sli_bt_gattdb_attribute_t gattdb_attributes_map[]) = {
.caps = 0xffff,
.state = 0x00,
.datatype = 0x05,
- .characteristic = { .properties = 0x2e, .char_uuid = 0x8001 } },
+ .characteristic = { .properties = 0x3e, .char_uuid = 0x8001 } },
{ .handle = 0x19,
.uuid = 0x8001,
.permissions = 0x807,
@@ -367,7 +367,7 @@ GATT_DATA(const sli_bt_gattdb_attribute_t gattdb_attributes_map[]) = {
.caps = 0xffff,
.state = 0x00,
.datatype = 0x03,
- .configdata = { .flags = 0x02, .clientconfig_index = 0x01 } },
+ .configdata = { .flags = 0x03, .clientconfig_index = 0x01 } },
{ .handle = 0x1b,
.uuid = 0x0002,
.permissions = 0x801,