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,