From f87e65dd7458fde76452bdd8976d2b019c8fc3a3 Mon Sep 17 00:00:00 2001 From: bhmanda Date: Tue, 18 Mar 2025 11:28:59 +0530 Subject: [PATCH 1/4] Added matter C3 service --- src/platform/silabs/BLEManagerImpl.h | 2 +- src/platform/silabs/rs911x/BLEManagerImpl.cpp | 23 ++++++++++++++++--- src/platform/silabs/rs911x/wfx_sl_ble_init.h | 11 +++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/platform/silabs/BLEManagerImpl.h b/src/platform/silabs/BLEManagerImpl.h index 67ea0411b4e362..ac66a3dd044fda 100644 --- a/src/platform/silabs/BLEManagerImpl.h +++ b/src/platform/silabs/BLEManagerImpl.h @@ -75,7 +75,7 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla #if CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING #if (SLI_SI91X_ENABLE_BLE || RSI_BLE_ENABLE) - static void HandleC3ReadRequest(SilabsBleWrapper::sl_wfx_msg_t * rsi_ble_read_req); + static void HandleC3ReadRequest(const SilabsBleWrapper::sl_wfx_msg_t & rsi_ble_read_req); #else #if CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING static void HandleC3ReadRequest(volatile sl_bt_msg_t * evt); diff --git a/src/platform/silabs/rs911x/BLEManagerImpl.cpp b/src/platform/silabs/rs911x/BLEManagerImpl.cpp index f9884fb458b424..0df302c175af08 100644 --- a/src/platform/silabs/rs911x/BLEManagerImpl.cpp +++ b/src/platform/silabs/rs911x/BLEManagerImpl.cpp @@ -163,6 +163,23 @@ void rsi_ble_add_matter_service(void) RSI_BLE_ATT_PROPERTY_READ | RSI_BLE_ATT_PROPERTY_NOTIFY | RSI_BLE_ATT_PROPERTY_INDICATE, // Set read, write, write without response data, sizeof(data), ATT_REC_MAINTAIN_IN_HOST); +#ifdef CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING + static const uuid_t custom_characteristic_C3 = { + .size = RSI_BLE_CUSTOM_CHARACTERISTIC_C3_SIZE, + .reserved = { RSI_BLE_CUSTOM_CHARACTERISTIC_C3_RESERVED }, + .val = { .val128 = { .data1 = RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_1, + .data2 = RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_2, + .data3 = RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_3, + .data4 = { RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_4 } } } + }; + + // Adding custom characteristic declaration to the custom service + SilabsBleWrapper::rsi_ble_add_char_serv_att( + new_serv_resp.serv_handler, new_serv_resp.start_handle + RSI_BLE_CHARACTERISTIC_C3_ATTRIBUTE_HANDLE_LOCATION, + RSI_BLE_ATT_PROPERTY_WRITE_NO_RESPONSE | RSI_BLE_ATT_PROPERTY_WRITE | RSI_BLE_ATT_PROPERTY_READ | + RSI_BLE_ATT_PROPERTY_NOTIFY | RSI_BLE_ATT_PROPERTY_INDICATE, // Set read, write, write without response + new_serv_resp.start_handle + RSI_BLE_CHARACTERISTIC_C3_MEASUREMENT_HANDLE_LOCATION, custom_characteristic_C3); +#endif // CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING } } // namespace @@ -1028,9 +1045,9 @@ CHIP_ERROR BLEManagerImpl::EncodeAdditionalDataTlv() additionalDataFields.Set(AdditionalDataFields::RotatingDeviceId); #endif /* CHIP_ENABLE_ROTATING_DEVICE_ID && defined(CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID) */ - err = AdditionalDataPayloadGenerator().generateAdditionalDataPayload(additionalDataPayloadParams, c3AdditionalDataBufferHandle, - additionalDataFields); - + err = AdditionalDataPayloadGenerator().generateAdditionalDataPayload( + additionalDataPayloadParams, sInstance.c3AdditionalDataBufferHandle, additionalDataFields); + SuccessOrExit(err); exit: if (err != CHIP_NO_ERROR) { diff --git a/src/platform/silabs/rs911x/wfx_sl_ble_init.h b/src/platform/silabs/rs911x/wfx_sl_ble_init.h index 4eaff9c0677444..a79fdec0f09903 100644 --- a/src/platform/silabs/rs911x/wfx_sl_ble_init.h +++ b/src/platform/silabs/rs911x/wfx_sl_ble_init.h @@ -71,6 +71,17 @@ extern "C" { #define RSI_BLE_CHARACTERISTIC_TX_MEASUREMENT_HANDLE_LOCATION (4) #define RSI_BLE_CHARACTERISTIC_TX_GATT_SERVER_CLIENT_HANDLE_LOCATION (5) +#if CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING +#define RSI_BLE_CUSTOM_CHARACTERISTIC_C3_SIZE (16) +#define RSI_BLE_CUSTOM_CHARACTERISTIC_C3_RESERVED 0x00, 0x00, 0x00 +#define RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_1 0x64630238 +#define RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_2 0x8772 +#define RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_3 0x45f2 +#define RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_4 0x7D, 0xB8, 0x8A, 0x74, 0x04, 0x8F, 0x21, 0x83 +#define RSI_BLE_CHARACTERISTIC_C3_ATTRIBUTE_HANDLE_LOCATION (6) +#define RSI_BLE_CHARACTERISTIC_C3_MEASUREMENT_HANDLE_LOCATION (7) +#define RSI_BLE_CHARACTERISTIC_C3_GATT_SERVER_CLIENT_HANDLE_LOCATION (8) +#endif namespace chip { namespace DeviceLayer { namespace Internal { From f32541ddc5c0b94b3d9bd08646e178253148ec6d Mon Sep 17 00:00:00 2001 From: bhmanda Date: Tue, 18 Mar 2025 20:06:13 +0530 Subject: [PATCH 2/4] Added C3 as READ characteristic --- src/platform/silabs/rs911x/BLEManagerImpl.cpp | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/platform/silabs/rs911x/BLEManagerImpl.cpp b/src/platform/silabs/rs911x/BLEManagerImpl.cpp index 0df302c175af08..8f64058a7ea1e2 100644 --- a/src/platform/silabs/rs911x/BLEManagerImpl.cpp +++ b/src/platform/silabs/rs911x/BLEManagerImpl.cpp @@ -164,21 +164,26 @@ void rsi_ble_add_matter_service(void) RSI_BLE_ATT_PROPERTY_INDICATE, // Set read, write, write without response data, sizeof(data), ATT_REC_MAINTAIN_IN_HOST); #ifdef CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING - static const uuid_t custom_characteristic_C3 = { - .size = RSI_BLE_CUSTOM_CHARACTERISTIC_C3_SIZE, - .reserved = { RSI_BLE_CUSTOM_CHARACTERISTIC_C3_RESERVED }, - .val = { .val128 = { .data1 = RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_1, - .data2 = RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_2, - .data3 = RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_3, - .data4 = { RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_4 } } } - }; + constexpr uuid_t custom_characteristic_C3 = { .size = RSI_BLE_CUSTOM_CHARACTERISTIC_C3_SIZE, + .reserved = { RSI_BLE_CUSTOM_CHARACTERISTIC_C3_RESERVED }, + .val = { .val128 = { + .data1 = RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_1, + .data2 = RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_2, + .data3 = RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_3, + .data4 = { RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_4 } } } }; // Adding custom characteristic declaration to the custom service SilabsBleWrapper::rsi_ble_add_char_serv_att( new_serv_resp.serv_handler, new_serv_resp.start_handle + RSI_BLE_CHARACTERISTIC_C3_ATTRIBUTE_HANDLE_LOCATION, - RSI_BLE_ATT_PROPERTY_WRITE_NO_RESPONSE | RSI_BLE_ATT_PROPERTY_WRITE | RSI_BLE_ATT_PROPERTY_READ | - RSI_BLE_ATT_PROPERTY_NOTIFY | RSI_BLE_ATT_PROPERTY_INDICATE, // Set read, write, write without response + RSI_BLE_ATT_PROPERTY_READ, // Set read new_serv_resp.start_handle + RSI_BLE_CHARACTERISTIC_C3_MEASUREMENT_HANDLE_LOCATION, custom_characteristic_C3); + + // Adding characteristic value attribute to the service + SilabsBleWrapper::rsi_ble_add_char_val_att(new_serv_resp.serv_handler, + new_serv_resp.start_handle + RSI_BLE_CHARACTERISTIC_C3_MEASUREMENT_HANDLE_LOCATION, + custom_characteristic_C3, + RSI_BLE_ATT_PROPERTY_READ, // Set read + data, sizeof(data), ATT_REC_IN_HOST); #endif // CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING } From d1992a475f8106e33ad0b246b90f1080b05c0c91 Mon Sep 17 00:00:00 2001 From: bhmanda Date: Tue, 18 Mar 2025 20:48:38 +0530 Subject: [PATCH 3/4] Fixed EFR build error by adding SuccessorExit in EncodeAdditionalDataTlv() --- src/platform/silabs/efr32/BLEManagerImpl.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/platform/silabs/efr32/BLEManagerImpl.cpp b/src/platform/silabs/efr32/BLEManagerImpl.cpp index c6307140cad98c..add673e08608ce 100644 --- a/src/platform/silabs/efr32/BLEManagerImpl.cpp +++ b/src/platform/silabs/efr32/BLEManagerImpl.cpp @@ -949,6 +949,7 @@ CHIP_ERROR BLEManagerImpl::EncodeAdditionalDataTlv() err = AdditionalDataPayloadGenerator().generateAdditionalDataPayload(additionalDataPayloadParams, c3AdditionalDataBufferHandle, additionalDataFields); + SuccessOrExit(err); exit: if (err != CHIP_NO_ERROR) From ab822800e1eb41800f13cee1c9d9c6aef58bd3c2 Mon Sep 17 00:00:00 2001 From: bhmanda Date: Wed, 19 Mar 2025 10:52:29 +0530 Subject: [PATCH 4/4] Added ifdef to resolve CI build error --- src/platform/silabs/rs911x/wfx_sl_ble_init.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/silabs/rs911x/wfx_sl_ble_init.h b/src/platform/silabs/rs911x/wfx_sl_ble_init.h index a79fdec0f09903..8133aef6b69089 100644 --- a/src/platform/silabs/rs911x/wfx_sl_ble_init.h +++ b/src/platform/silabs/rs911x/wfx_sl_ble_init.h @@ -71,7 +71,7 @@ extern "C" { #define RSI_BLE_CHARACTERISTIC_TX_MEASUREMENT_HANDLE_LOCATION (4) #define RSI_BLE_CHARACTERISTIC_TX_GATT_SERVER_CLIENT_HANDLE_LOCATION (5) -#if CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING +#ifdef CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING #define RSI_BLE_CUSTOM_CHARACTERISTIC_C3_SIZE (16) #define RSI_BLE_CUSTOM_CHARACTERISTIC_C3_RESERVED 0x00, 0x00, 0x00 #define RSI_BLE_CUSTOM_CHARACTERISTIC_C3_VALUE_128_DATA_1 0x64630238