Skip to content

Commit 5100414

Browse files
Merge branch 'master' into bugfix/add_dimmer_switch
2 parents d8d964d + 6cef5da commit 5100414

27 files changed

+712
-220
lines changed

examples/lighting-app/realtek_bee/data_model/lighting-app.matter

+8-10
Original file line numberDiff line numberDiff line change
@@ -2201,7 +2201,7 @@ provisional cluster ScenesManagement = 98 {
22012201
optional int64s valueSigned64 = 8;
22022202
}
22032203

2204-
struct ExtensionFieldSet {
2204+
struct ExtensionFieldSetStruct {
22052205
cluster_id clusterID = 0;
22062206
AttributeValuePairStruct attributeValueList[] = 1;
22072207
}
@@ -2215,7 +2215,6 @@ provisional cluster ScenesManagement = 98 {
22152215
fabric_idx fabricIndex = 254;
22162216
}
22172217

2218-
readonly attribute optional nullable node_id lastConfiguredBy = 0;
22192218
readonly attribute int16u sceneTableSize = 1;
22202219
readonly attribute SceneInfoStruct fabricSceneInfo[] = 2;
22212220
readonly attribute command_id generatedCommandList[] = 65528;
@@ -2229,8 +2228,8 @@ provisional cluster ScenesManagement = 98 {
22292228
group_id groupID = 0;
22302229
int8u sceneID = 1;
22312230
int32u transitionTime = 2;
2232-
char_string sceneName = 3;
2233-
ExtensionFieldSet extensionFieldSets[] = 4;
2231+
char_string<16> sceneName = 3;
2232+
ExtensionFieldSetStruct extensionFieldSetStructs[] = 4;
22342233
}
22352234

22362235
response struct AddSceneResponse = 0 {
@@ -2249,8 +2248,8 @@ provisional cluster ScenesManagement = 98 {
22492248
group_id groupID = 1;
22502249
int8u sceneID = 2;
22512250
optional int32u transitionTime = 3;
2252-
optional char_string sceneName = 4;
2253-
optional ExtensionFieldSet extensionFieldSets[] = 5;
2251+
optional char_string<16> sceneName = 4;
2252+
optional ExtensionFieldSetStruct extensionFieldSetStructs[] = 5;
22542253
}
22552254

22562255
request struct RemoveSceneRequest {
@@ -2315,7 +2314,7 @@ provisional cluster ScenesManagement = 98 {
23152314
int8u sceneIdentifierFrom = 2;
23162315
}
23172316

2318-
/** Add a scene to the scene table. Extension field sets are supported, and are inputed as '{"ClusterID": VALUE, "AttributeValueList":[{"AttributeID": VALUE, "Value*": VALUE}]}' */
2317+
/** Add a scene to the scene table. Extension field sets are input as '{"ClusterID": VALUE, "AttributeValueList":[{"AttributeID": VALUE, "Value*": VALUE}]}'. */
23192318
fabric command access(invoke: manage) AddScene(AddSceneRequest): AddSceneResponse = 0;
23202319
/** Retrieves the requested scene entry from its Scene table. */
23212320
fabric command ViewScene(ViewSceneRequest): ViewSceneResponse = 1;
@@ -2327,9 +2326,9 @@ provisional cluster ScenesManagement = 98 {
23272326
fabric command access(invoke: manage) StoreScene(StoreSceneRequest): StoreSceneResponse = 4;
23282327
/** Set the attributes and corresponding state for each other cluster implemented on the endpoint accordingly to the resquested scene entry in the Scene Table */
23292328
fabric command RecallScene(RecallSceneRequest): DefaultSuccess = 5;
2330-
/** Get an unused scene identifier when no commissioning tool is in the network, or for a commissioning tool to get the used scene identifiers within a certain group */
2329+
/** This command can be used to get the used scene identifiers within a certain group, for the endpoint that implements this cluster. */
23312330
fabric command GetSceneMembership(GetSceneMembershipRequest): GetSceneMembershipResponse = 6;
2332-
/** Allows a client to efficiently copy scenes from one group/scene identifier pair to another group/scene identifier pair. */
2331+
/** This command allows a client to efficiently copy scenes from one group/scene identifier pair to another group/scene identifier pair. */
23332332
fabric command access(invoke: manage) CopyScene(CopySceneRequest): CopySceneResponse = 64;
23342333
}
23352334

@@ -3154,7 +3153,6 @@ endpoint 1 {
31543153
}
31553154

31563155
server cluster ScenesManagement {
3157-
ram attribute lastConfiguredBy;
31583156
ram attribute sceneTableSize default = 16;
31593157
callback attribute fabricSceneInfo;
31603158
callback attribute generatedCommandList;

examples/lighting-app/realtek_bee/data_model/lighting-app.zap

-16
Original file line numberDiff line numberDiff line change
@@ -5097,22 +5097,6 @@
50975097
}
50985098
],
50995099
"attributes": [
5100-
{
5101-
"name": "LastConfiguredBy",
5102-
"code": 0,
5103-
"mfgCode": null,
5104-
"side": "server",
5105-
"type": "node_id",
5106-
"included": 1,
5107-
"storageOption": "RAM",
5108-
"singleton": 0,
5109-
"bounded": 0,
5110-
"defaultValue": "",
5111-
"reportable": 1,
5112-
"minInterval": 1,
5113-
"maxInterval": 65534,
5114-
"reportableChange": 0
5115-
},
51165100
{
51175101
"name": "SceneTableSize",
51185102
"code": 1,

examples/platform/silabs/BaseApplication.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@
6969
#include <platform/silabs/wifi/WifiInterface.h>
7070

7171
#if CHIP_CONFIG_ENABLE_ICD_SERVER
72-
#include <platform/silabs/wifi/icd/WifiSleepManager.h>
72+
#include <platform/silabs/wifi/icd/WifiSleepManager.h> // nogncheck
73+
7374
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
7475
#endif // SL_WIFI
7576

examples/platform/silabs/MatterConfig.cpp

+6-4
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
#include <platform/silabs/wifi/WifiInterface.h>
2929

3030
#if CHIP_CONFIG_ENABLE_ICD_SERVER
31-
#include <platform/silabs/wifi/icd/WifiSleepManager.h>
32-
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
31+
#include <platform/silabs/wifi/icd/WifiSleepManager.h> // nogncheck
32+
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
3333

3434
// TODO: We shouldn't need any platform specific includes in this file
3535
#if (defined(SLI_SI91X_MCU_INTERFACE) && SLI_SI91X_MCU_INTERFACE == 1)
@@ -203,6 +203,8 @@ void SilabsMatterConfig::AppInit()
203203

204204
CHIP_ERROR SilabsMatterConfig::InitMatter(const char * appName)
205205
{
206+
using namespace chip::DeviceLayer::Silabs;
207+
206208
CHIP_ERROR err;
207209
#ifdef SL_WIFI
208210
// Because OpenThread needs to use memory allocation during its Key operations, we initialize the memory management for thread
@@ -234,9 +236,9 @@ CHIP_ERROR SilabsMatterConfig::InitMatter(const char * appName)
234236
ReturnErrorOnFailure(InitWiFi());
235237

236238
#if CHIP_CONFIG_ENABLE_ICD_SERVER
237-
ReturnErrorOnFailure(DeviceLayer::Silabs::WifiSleepManager::GetInstance().Init());
239+
ReturnErrorOnFailure(WifiSleepManager::GetInstance().Init(&WifiInterface::GetInstance(), &WifiInterface::GetInstance()));
238240
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
239-
#endif
241+
#endif // SL_WIFI
240242

241243
ReturnErrorOnFailure(PlatformMgr().InitChipStack());
242244

src/platform/silabs/SiWx917/OTAImageProcessorImpl.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
#include <platform/silabs/wifi/WifiInterface.h>
2525

2626
#if CHIP_CONFIG_ENABLE_ICD_SERVER
27-
#include <platform/silabs/wifi/icd/WifiSleepManager.h>
28-
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
27+
#include <platform/silabs/wifi/icd/WifiSleepManager.h> // nogncheck
28+
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
2929

3030
#ifdef __cplusplus
3131
extern "C" {
@@ -165,7 +165,7 @@ void OTAImageProcessorImpl::HandlePrepareDownload(intptr_t context)
165165

166166
#if CHIP_CONFIG_ENABLE_ICD_SERVER
167167
// Setting the device in high performance - no-sleep mode during OTA tranfer
168-
DeviceLayer::Silabs::WifiSleepManager::GetInstance().RequestHighPerformance();
168+
DeviceLayer::Silabs::WifiSleepManager::GetInstance().RequestHighPerformanceWithTransition();
169169
#endif /* CHIP_CONFIG_ENABLE_ICD_SERVER*/
170170

171171
imageProcessor->mDownloader->OnPreparedForDownload(CHIP_NO_ERROR);
@@ -223,7 +223,7 @@ void OTAImageProcessorImpl::HandleApply(intptr_t context)
223223

224224
#if CHIP_CONFIG_ENABLE_ICD_SERVER
225225
// Setting the device is in high performace - no-sleepy mode before soft reset as soft reset is not happening in sleep mode
226-
DeviceLayer::Silabs::WifiSleepManager::GetInstance().RequestHighPerformance();
226+
DeviceLayer::Silabs::WifiSleepManager::GetInstance().RequestHighPerformanceWithTransition();
227227
#endif /* CHIP_CONFIG_ENABLE_ICD_SERVER*/
228228

229229
if (mReset)

src/platform/silabs/tests/BUILD.gn

+4-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ chip_test_group("silabs_platform_tests") {
2323
tests = []
2424

2525
if (sl_build_unit_tests) {
26-
tests += [ "${chip_root}/examples/platform/silabs/tests:examples_tests" ]
26+
tests += [
27+
"${chip_root}/examples/platform/silabs/tests:examples_tests",
28+
"${chip_root}/src/platform/silabs/wifi/icd/tests:wifi_icd_tests",
29+
]
2730
}
2831
}

src/platform/silabs/tests/args.gni

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
import("//build/chip/tests.gni")
15+
import("//build_overrides/chip.gni")
16+
import("${chip_root}/build/chip/tests.gni")
1617

1718
declare_args() {
1819
# Build argument to enable Silabs specific unit tests

src/platform/silabs/wifi/BUILD.gn

+14-8
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import("//build_overrides/chip.gni")
1616
import("//build_overrides/lwip.gni")
1717
import("${chip_root}/src/platform/device.gni")
18+
import("${chip_root}/src/platform/silabs/tests/args.gni")
1819
import("${chip_root}/third_party/silabs/efr32_sdk.gni")
1920
import("${chip_root}/third_party/silabs/silabs_board.gni")
2021

@@ -35,7 +36,8 @@ declare_args() {
3536
sl_enable_wifi_debug = false
3637
}
3738

38-
if (chip_enable_wifi && !wifi_soc) {
39+
# Workaround to prevent the assert when we are building the unit tests
40+
if (chip_enable_wifi && !wifi_soc && !sl_build_unit_tests) {
3941
assert(use_rs9116 || use_wf200 || use_SiWx917)
4042
import("${chip_root}/src/platform/silabs/wifi/args.gni")
4143

@@ -100,6 +102,12 @@ config("wifi-platform-config") {
100102
}
101103
}
102104

105+
source_set("state-provider") {
106+
sources = [ "${silabs_platform_dir}/wifi/WifiStateProvider.h" ]
107+
108+
public_configs = [ ":wifi-platform-config" ]
109+
}
110+
103111
source_set("wifi-platform") {
104112
sources = [
105113
"${silabs_platform_dir}/wifi/WifiInterface.cpp",
@@ -110,10 +118,12 @@ source_set("wifi-platform") {
110118
public_configs = [ ":wifi-platform-config" ]
111119

112120
public_deps = [
121+
":state-provider",
113122
"${chip_root}/src/app/icd/server:icd-server-config",
114123
"${chip_root}/src/inet",
115124
"${chip_root}/src/lib/support",
116125
"${chip_root}/src/platform:platform_base",
126+
"${silabs_platform_dir}/wifi/icd:power-save-interface",
117127
]
118128

119129
if (use_rs9116) {
@@ -152,14 +162,10 @@ source_set("wifi-platform") {
152162
"${silabs_platform_dir}/wifi/lwip-support/lwip_netif.h",
153163
]
154164
}
155-
156-
# TODO: Once the WifiInterface refactor is done and becomes a class, we will inject an interface instead of having them in same source_set
157165
if (chip_enable_icd_server) {
158-
public_deps += [ "${chip_root}/src/app/icd/server:configuration-data" ]
159-
160-
sources += [
161-
"${silabs_platform_dir}/wifi/icd/WifiSleepManager.cpp",
162-
"${silabs_platform_dir}/wifi/icd/WifiSleepManager.h",
166+
public_deps += [
167+
"${chip_root}/src/app/icd/server:configuration-data",
168+
"${silabs_platform_dir}/wifi/icd:wifi-sleep-manager",
163169
]
164170
}
165171
}

src/platform/silabs/wifi/SiWx/WifiInterfaceImpl.cpp

+50-7
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ extern "C" {
5656
#endif
5757

5858
#if CHIP_CONFIG_ENABLE_ICD_SERVER
59-
#include <app/icd/server/ICDConfigurationData.h> // nogncheck
60-
#include <platform/silabs/wifi/icd/WifiSleepManager.h>
59+
#include <app/icd/server/ICDConfigurationData.h> // nogncheck
60+
#include <platform/silabs/wifi/icd/WifiSleepManager.h> // nogncheck
6161

6262
#if SLI_SI91X_MCU_INTERFACE // SoC Only
6363
#include "rsi_rom_power_save.h"
@@ -434,6 +434,40 @@ sl_status_t SetWifiConfigurations()
434434
return status;
435435
}
436436

437+
#if CHIP_CONFIG_ENABLE_ICD_SERVER
438+
/**
439+
* @brief Converts the Matter Power Save Configuration to the SiWx Power Save Configuration
440+
*
441+
* @param configuration Matter Power Save Configuration
442+
*
443+
* @return sl_si91x_performance_profile_t SiWx Power Save Configuration; Default value is High Performance
444+
* kHighPerformance: HIGH_PERFORMANCE
445+
* kConnectedSleep: ASSOCIATED_POWER_SAVE
446+
* kDeepSleep: DEEP_SLEEP_WITH_RAM_RETENTION
447+
*/
448+
sl_si91x_performance_profile_t ConvertPowerSaveConfiguration(PowerSaveInterface::PowerSaveConfiguration configuration)
449+
{
450+
sl_si91x_performance_profile_t profile = HIGH_PERFORMANCE;
451+
452+
switch (configuration)
453+
{
454+
case PowerSaveInterface::PowerSaveConfiguration::kHighPerformance:
455+
profile = HIGH_PERFORMANCE;
456+
break;
457+
case PowerSaveInterface::PowerSaveConfiguration::kConnectedSleep:
458+
profile = ASSOCIATED_POWER_SAVE;
459+
break;
460+
case PowerSaveInterface::PowerSaveConfiguration::kDeepSleep:
461+
profile = DEEP_SLEEP_WITH_RAM_RETENTION;
462+
break;
463+
default:
464+
break;
465+
}
466+
467+
return profile;
468+
}
469+
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
470+
437471
} // namespace
438472

439473
namespace chip {
@@ -462,6 +496,11 @@ void WiseconnectWifiInterface::MatterWifiTask(void * arg)
462496
VerifyOrReturn(status == SL_STATUS_OK,
463497
ChipLogError(DeviceLayer, "MatterWifiTask: SiWxPlatformInit failed: 0x%lx", static_cast<uint32_t>(status)));
464498

499+
#if CHIP_CONFIG_ENABLE_ICD_SERVER
500+
// Remove High performance request after the device is initialized
501+
chip::DeviceLayer::Silabs::WifiSleepManager::GetInstance().RemoveHighPerformanceRequest();
502+
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
503+
465504
WifiInterfaceImpl::GetInstance().NotifyWifiTaskInitialized();
466505

467506
ChipLogDetail(DeviceLayer, "MatterWifiTask: starting event loop");
@@ -482,6 +521,11 @@ CHIP_ERROR WifiInterfaceImpl::InitWiFiStack(void)
482521
{
483522
sl_status_t status = SL_STATUS_OK;
484523

524+
#if CHIP_CONFIG_ENABLE_ICD_SERVER
525+
// Force the device to high performance mode during the init sequence.
526+
chip::DeviceLayer::Silabs::WifiSleepManager::GetInstance().RequestHighPerformanceWithoutTransition();
527+
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
528+
485529
status = sl_net_init(SL_NET_WIFI_CLIENT_INTERFACE, &config, &wifi_client_context, nullptr);
486530
VerifyOrReturnError(status == SL_STATUS_OK, CHIP_ERROR_INTERNAL, ChipLogError(DeviceLayer, "sl_net_init failed: %lx", status));
487531

@@ -641,7 +685,7 @@ sl_status_t WifiInterfaceImpl::JoinWifiNetwork(void)
641685
// To avoid IOP issues, it is recommended to enable high-performance mode before joining the network.
642686
// TODO: Remove this once the IOP issue related to power save mode switching is fixed in the Wi-Fi SDK.
643687
#if CHIP_CONFIG_ENABLE_ICD_SERVER
644-
chip::DeviceLayer::Silabs::WifiSleepManager::GetInstance().RequestHighPerformance();
688+
chip::DeviceLayer::Silabs::WifiSleepManager::GetInstance().RequestHighPerformanceWithTransition();
645689
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
646690

647691
status = sl_net_up(SL_NET_WIFI_CLIENT_INTERFACE, SL_NET_DEFAULT_WIFI_CLIENT_PROFILE_ID);
@@ -760,14 +804,13 @@ sl_status_t WifiInterfaceImpl::TriggerPlatformWifiDisconnection()
760804
}
761805

762806
#if CHIP_CONFIG_ENABLE_ICD_SERVER
763-
CHIP_ERROR WifiInterfaceImpl::ConfigurePowerSave(rsi_power_save_profile_mode_t sl_si91x_ble_state,
764-
sl_si91x_performance_profile_t sl_si91x_wifi_state, uint32_t listenInterval)
807+
CHIP_ERROR WifiInterfaceImpl::ConfigurePowerSave(PowerSaveInterface::PowerSaveConfiguration configuration, uint32_t listenInterval)
765808
{
766-
int32_t error = rsi_bt_power_save_profile(sl_si91x_ble_state, RSI_MAX_PSP);
809+
int32_t error = rsi_bt_power_save_profile(RSI_SLEEP_MODE_2, RSI_MAX_PSP);
767810
VerifyOrReturnError(error == RSI_SUCCESS, CHIP_ERROR_INTERNAL,
768811
ChipLogError(DeviceLayer, "rsi_bt_power_save_profile failed: %ld", error));
769812

770-
sl_wifi_performance_profile_t wifi_profile = { .profile = sl_si91x_wifi_state,
813+
sl_wifi_performance_profile_t wifi_profile = { .profile = ConvertPowerSaveConfiguration(configuration),
771814
// TODO: Performance profile fails if not alligned with DTIM
772815
.dtim_aligned_type = SL_SI91X_ALIGN_WITH_DTIM_BEACON,
773816
// TODO: Different types need to be fixed in the Wi-Fi SDK

src/platform/silabs/wifi/SiWx/WifiInterfaceImpl.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ class WifiInterfaceImpl final : public WiseconnectWifiInterface
4141
CHIP_ERROR GetAccessPointInfo(wfx_wifi_scan_result_t & info) override;
4242
CHIP_ERROR GetAccessPointExtendedInfo(wfx_wifi_scan_ext_t & info) override;
4343
CHIP_ERROR ResetCounters() override;
44+
4445
#if CHIP_CONFIG_ENABLE_ICD_SERVER
4546
CHIP_ERROR ConfigureBroadcastFilter(bool enableBroadcastFilter) override;
46-
CHIP_ERROR ConfigurePowerSave(rsi_power_save_profile_mode_t sl_si91x_ble_state,
47-
sl_si91x_performance_profile_t sl_si91x_wifi_state, uint32_t listenInterval) override;
47+
CHIP_ERROR ConfigurePowerSave(PowerSaveInterface::PowerSaveConfiguration configuration, uint32_t listenInterval) override;
4848
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
4949

5050
/**

src/platform/silabs/wifi/WifiInterface.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
#include <lib/support/logging/CHIPLogging.h>
2323
#include <platform/silabs/wifi/WifiInterface.h>
2424
#if CHIP_CONFIG_ENABLE_ICD_SERVER
25-
#include <platform/silabs/wifi/icd/WifiSleepManager.h>
26-
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
25+
#include <platform/silabs/wifi/icd/WifiSleepManager.h> // nogncheck
26+
#endif // CHIP_CONFIG_ENABLE_ICD_SERVER
2727

2828
using namespace chip;
2929
using namespace chip::DeviceLayer;

0 commit comments

Comments
 (0)