From 977aba0a8102fb2903e4d09af7b4aafbcafd5de8 Mon Sep 17 00:00:00 2001 From: yunhanw-google Date: Mon, 22 Aug 2022 06:53:08 -0700 Subject: [PATCH 01/12] follow-up for fabric-scoped event (#22014) --- src/app/EventLogging.h | 2 +- .../python/test/test_scripts/cluster_objects.py | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/app/EventLogging.h b/src/app/EventLogging.h index b2ce7667ab2364..f9fa56837f07e9 100644 --- a/src/app/EventLogging.h +++ b/src/app/EventLogging.h @@ -73,7 +73,7 @@ CHIP_ERROR LogEvent(const T & aEventData, EndpointId aEndpoint, EventNumber & aE eventOptions.mPriority = aEventData.GetPriorityLevel(); eventOptions.mFabricIndex = aEventData.GetFabricIndex(); // this skips logging the event if it's fabric-scoped but no fabric association exists yet. - VerifyOrReturnError(eventOptions.mFabricIndex != kUndefinedFabricIndex, CHIP_NO_ERROR); + VerifyOrReturnError(eventOptions.mFabricIndex != kUndefinedFabricIndex, CHIP_ERROR_INVALID_FABRIC_INDEX); // // Unlike attributes which have a different 'EncodeForRead' for fabric-scoped structs, diff --git a/src/controller/python/test/test_scripts/cluster_objects.py b/src/controller/python/test/test_scripts/cluster_objects.py index deae10c2cd6962..5a9db3dd6ba28c 100644 --- a/src/controller/python/test/test_scripts/cluster_objects.py +++ b/src/controller/python/test/test_scripts/cluster_objects.py @@ -313,8 +313,6 @@ async def _TriggerEvent(cls, devCtrl): await devCtrl.SendCommand(nodeid=NODE_ID, endpoint=1, payload=Clusters.TestCluster.Commands.TestEmitTestEventRequest()) await devCtrl.SendCommand(nodeid=NODE_ID, endpoint=1, payload=Clusters.TestCluster.Commands.TestEmitTestEventRequest()) await devCtrl.SendCommand(nodeid=NODE_ID, endpoint=1, payload=Clusters.TestCluster.Commands.TestEmitTestEventRequest()) - await devCtrl.SendCommand(nodeid=NODE_ID, endpoint=1, payload=Clusters.TestCluster.Commands.TestEmitTestFabricScopedEventRequest(arg1=0)) - await devCtrl.SendCommand(nodeid=NODE_ID, endpoint=1, payload=Clusters.TestCluster.Commands.TestEmitTestFabricScopedEventRequest(arg1=1)) @classmethod async def _RetryForContent(cls, request, until, retryCount=10, intervalSeconds=1): @@ -335,11 +333,19 @@ async def TriggerAndWaitForEvents(cls, devCtrl, req): @base.test_case async def TestGenerateUndefinedFabricScopedEventRequests(cls, devCtrl): logger.info("Running TestGenerateUndefinedFabricScopedEventRequests") - await devCtrl.SendCommand(nodeid=NODE_ID, endpoint=1, payload=Clusters.TestCluster.Commands.TestEmitTestFabricScopedEventRequest(arg1=0)) + try: + res = await devCtrl.SendCommand(nodeid=NODE_ID, endpoint=1, payload=Clusters.TestCluster.Commands.TestEmitTestFabricScopedEventRequest(arg1=0)) + raise ValueError(f"Unexpected Failure") + except chip.interaction_model.InteractionModelError as ex: + logger.info(f"Recevied {ex} from server.") res = await devCtrl.ReadEvent(nodeid=NODE_ID, events=[ - (1, Clusters.TestCluster.Events.TestEvent, 0), + (1, Clusters.TestCluster.Events.TestFabricScopedEvent, 0), ]) logger.info(f"return result is {res}") + if len(res) != 0: + raise AssertionError("failure: not expect to receive fabric-scoped event when fabric is undefined") + else: + logger.info("TestGenerateUndefinedFabricScopedEventRequests: Success") @classmethod @base.test_case From 9713e108ab731985fe8cf95d051cf640bdafb98a Mon Sep 17 00:00:00 2001 From: Yufeng Wang Date: Mon, 22 Aug 2022 06:57:07 -0700 Subject: [PATCH 02/12] Wrap all nlfaultinjection logic with build flag chip_with_nlfaultinjection (#22004) --- src/inet/BUILD.gn | 6 ++++-- src/inet/tests/BUILD.gn | 9 +++++++-- src/system/BUILD.gn | 6 ++++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/inet/BUILD.gn b/src/inet/BUILD.gn index 10852750646742..cb86a45780df9c 100644 --- a/src/inet/BUILD.gn +++ b/src/inet/BUILD.gn @@ -88,7 +88,6 @@ static_library("inet") { "InetArgParser.h", "InetError.cpp", "InetError.h", - "InetFaultInjection.h", "InetInterface.cpp", "InetInterface.h", "InetLayer.h", @@ -132,7 +131,10 @@ static_library("inet") { } if (chip_with_nlfaultinjection) { - sources += [ "InetFaultInjection.cpp" ] + sources += [ + "InetFaultInjection.cpp", + "InetFaultInjection.h", + ] public_deps += [ "${nlfaultinjection_root}:nlfaultinjection" ] } diff --git a/src/inet/tests/BUILD.gn b/src/inet/tests/BUILD.gn index 3946a798fa63c3..1788410bb6c6d3 100644 --- a/src/inet/tests/BUILD.gn +++ b/src/inet/tests/BUILD.gn @@ -35,8 +35,6 @@ static_library("helpers") { "TestInetCommonOptions.h", "TestInetCommonPosix.cpp", "TestInetLayerCommon.cpp", - "TestSetupFaultInjection.h", - "TestSetupFaultInjectionPosix.cpp", "TestSetupSignalling.h", "TestSetupSignallingPosix.cpp", ] @@ -45,6 +43,13 @@ static_library("helpers") { sources += [ "TestInetLayer.cpp" ] } + if (chip_with_nlfaultinjection) { + sources += [ + "TestSetupFaultInjection.h", + "TestSetupFaultInjectionPosix.cpp", + ] + } + cflags = [ "-Wconversion" ] public_deps = [ diff --git a/src/system/BUILD.gn b/src/system/BUILD.gn index f2f5172dbee3c6..a70b943e1d14d2 100644 --- a/src/system/BUILD.gn +++ b/src/system/BUILD.gn @@ -177,7 +177,6 @@ static_library("system") { "SystemError.cpp", "SystemError.h", "SystemEvent.h", - "SystemFaultInjection.h", "SystemLayer.cpp", "SystemLayer.h", "SystemLayerImpl.h", @@ -219,7 +218,10 @@ static_library("system") { } if (chip_with_nlfaultinjection) { - sources += [ "SystemFaultInjection.cpp" ] + sources += [ + "SystemFaultInjection.cpp", + "SystemFaultInjection.h", + ] public_deps += [ "${nlfaultinjection_root}:nlfaultinjection" ] } } From 7c53493814cb9b3d9a6f1d215f4b2ebec20bfb6b Mon Sep 17 00:00:00 2001 From: Jon Smirl Date: Mon, 22 Aug 2022 10:38:04 -0400 Subject: [PATCH 03/12] Remove the default constructor for ChipDeviceController(). It is required to set a vendor ID (#21980) so it must be passed during construction. Also fix typo in onCommissioningStatusUpdate JNI method description. --- .../main/java/com/google/chip/chiptool/ChipClient.kt | 5 ++++- .../java/AndroidDeviceControllerWrapper.cpp | 2 +- .../chip/devicecontroller/ChipDeviceController.java | 11 +++++------ .../src/chip/devicecontroller/ControllerParams.java | 3 ++- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/ChipClient.kt b/src/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/ChipClient.kt index 10d7c32e994a9e..6e3833820716a3 100644 --- a/src/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/ChipClient.kt +++ b/src/android/CHIPTool/app/src/main/java/com/google/chip/chiptool/ChipClient.kt @@ -20,6 +20,7 @@ package com.google.chip.chiptool import android.content.Context import android.util.Log import chip.devicecontroller.ChipDeviceController +import chip.devicecontroller.ControllerParams import chip.devicecontroller.GetConnectedDeviceCallbackJni.GetConnectedDeviceCallback import chip.platform.AndroidBleManager import chip.platform.AndroidChipPlatform @@ -38,12 +39,14 @@ object ChipClient { private const val TAG = "ChipClient" private lateinit var chipDeviceController: ChipDeviceController private lateinit var androidPlatform: AndroidChipPlatform + /* 0xFFF4 is a test vendor ID, replace with your assigned company ID */ + private const val VENDOR_ID = 0xFFF4 fun getDeviceController(context: Context): ChipDeviceController { getAndroidChipPlatform(context) if (!this::chipDeviceController.isInitialized) { - chipDeviceController = ChipDeviceController() + chipDeviceController = ChipDeviceController(ControllerParams.newBuilder().setControllerVendorId(VENDOR_ID).build()) } return chipDeviceController } diff --git a/src/controller/java/AndroidDeviceControllerWrapper.cpp b/src/controller/java/AndroidDeviceControllerWrapper.cpp index 8b28896a701d44..ada814133734fc 100644 --- a/src/controller/java/AndroidDeviceControllerWrapper.cpp +++ b/src/controller/java/AndroidDeviceControllerWrapper.cpp @@ -425,7 +425,7 @@ void AndroidDeviceControllerWrapper::OnCommissioningStatusUpdate(PeerId peerId, JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread(); jmethodID onCommissioningStatusUpdateMethod; CHIP_ERROR err = JniReferences::GetInstance().FindMethod(env, mJavaObjectRef, "onCommissioningStatusUpdate", - "(JLjava/lang/string;I)V", &onCommissioningStatusUpdateMethod); + "(JLjava/lang/String;I)V", &onCommissioningStatusUpdateMethod); VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Controller, "Error finding Java method: %" CHIP_ERROR_FORMAT, err.Format())); UtfString jStageCompleted(env, StageToString(stageCompleted)); diff --git a/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java b/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java index 97627b56c4ce1f..47c87b364143e3 100644 --- a/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java +++ b/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java @@ -44,12 +44,11 @@ public static void loadJni() { return; } - /** Returns a new {@link ChipDeviceController} with default parameters. */ - public ChipDeviceController() { - this(ControllerParams.newBuilder().build()); - } - - /** Returns a new {@link ChipDeviceController} with the specified parameters. */ + /** + * Returns a new {@link ChipDeviceController} with the specified parameters. you must set a vendor + * ID, ControllerParams.newBuilder().setControllerVendorId(0xFFF4).build() 0xFFF4 is a test vendor + * ID + */ public ChipDeviceController(ControllerParams params) { deviceControllerPtr = newDeviceController(params); } diff --git a/src/controller/java/src/chip/devicecontroller/ControllerParams.java b/src/controller/java/src/chip/devicecontroller/ControllerParams.java index 42fd04f42907de..b0413cf4a8abf0 100644 --- a/src/controller/java/src/chip/devicecontroller/ControllerParams.java +++ b/src/controller/java/src/chip/devicecontroller/ControllerParams.java @@ -86,7 +86,8 @@ public static Builder newBuilder() { /** * Returns parameters which uses the provided {@code operationalKeyConfig} as its operating - * credentials. + * credentials. You must set a vendor ID, 0xFFF4 is a test vendor ID + * ControllerParams.newBuilder().setControllerVendorId(0xFFF4).build() */ public static Builder newBuilder(OperationalKeyConfig operationalKeyConfig) { return newBuilder() From b85c5ec60a1f9b35bcbe37b5b18c04e1d695db1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damian=20Kr=C3=B3lik?= <66667989+Damian-Nordic@users.noreply.github.com> Date: Mon, 22 Aug 2022 16:40:44 +0200 Subject: [PATCH 04/12] [nrfconnect] Fix Light Switch Example build (#22036) The example was not built in CI, so we missed the build breakage. Signed-off-by: Damian Krolik Signed-off-by: Damian Krolik --- .github/workflows/examples-nrfconnect.yaml | 54 +++++++++---------- .../nrfconnect/CMakeLists.txt | 2 +- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/.github/workflows/examples-nrfconnect.yaml b/.github/workflows/examples-nrfconnect.yaml index 3c110ce1ccece7..5da513c70de6ba 100644 --- a/.github/workflows/examples-nrfconnect.yaml +++ b/.github/workflows/examples-nrfconnect.yaml @@ -95,15 +95,6 @@ jobs: nrfconnect nrf52840dk_nrf52840 lock-app \ examples/lock-app/nrfconnect/build/zephyr/zephyr.elf \ /tmp/bloat_reports/ - - name: Build example nRF Connect SDK Lighting App on nRF52840 DK - if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true' - timeout-minutes: 15 - run: | - scripts/examples/nrfconnect_example.sh lighting-app nrf52840dk_nrf52840 - .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ - nrfconnect nrf52840dk_nrf52840 lighting-app \ - examples/lighting-app/nrfconnect/build/zephyr/zephyr.elf \ - /tmp/bloat_reports/ - name: Build example nRF Connect SDK Lighting App on nRF52840 Dongle if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true' timeout-minutes: 15 @@ -122,6 +113,15 @@ jobs: nrfconnect nrf52840dk_nrf52840+rpc lighting-app \ examples/lighting-app/nrfconnect/build/zephyr/zephyr.elf \ /tmp/bloat_reports/ + - name: Build example nRF Connect SDK Light Switch App on nRF52840 DK + if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true' + timeout-minutes: 15 + run: | + scripts/examples/nrfconnect_example.sh light-switch-app nrf52840dk_nrf52840 + .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ + nrfconnect nrf52840dk_nrf52840 light-switch-app \ + examples/light-switch-app/nrfconnect/build/zephyr/zephyr.elf \ + /tmp/bloat_reports/ - name: Build example nRF Connect SDK Shell on nRF52840 DK if: github.event_name == 'push' || steps.changed_paths.outputs.shell == 'true' timeout-minutes: 15 @@ -140,24 +140,6 @@ jobs: nrfconnect nrf52840dk_nrf52840 pigweed-app \ examples/pigweed-app/nrfconnect/build/zephyr/zephyr.elf \ /tmp/bloat_reports/ - - name: Build example nRF Connect SDK Lock App on nRF5340 DK - if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true' - timeout-minutes: 15 - run: | - scripts/examples/nrfconnect_example.sh lock-app nrf5340dk_nrf5340_cpuapp - .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ - nrfconnect nrf5340dk_nrf5340_cpuapp lock-app \ - examples/lock-app/nrfconnect/build/zephyr/zephyr.elf \ - /tmp/bloat_reports/ - - name: Build example nRF Connect SDK Lighting App on nRF5340 DK - if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true' - timeout-minutes: 15 - run: | - scripts/examples/nrfconnect_example.sh lighting-app nrf5340dk_nrf5340_cpuapp - .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ - nrfconnect nrf5340dk_nrf5340_cpuapp lighting-app \ - examples/lighting-app/nrfconnect/build/zephyr/zephyr.elf \ - /tmp/bloat_reports/ - name: Build example nRF Connect SDK Pump App on nRF52840 DK if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true' timeout-minutes: 15 @@ -192,6 +174,24 @@ jobs: nrfconnect nrf52840dk_nrf52840 all-clusters-minimal-app \ examples/all-clusters-minimal-app/nrfconnect/build/zephyr/zephyr.elf \ /tmp/bloat_reports/ + - name: Build example nRF Connect SDK Lock App on nRF5340 DK + if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true' + timeout-minutes: 15 + run: | + scripts/examples/nrfconnect_example.sh lock-app nrf5340dk_nrf5340_cpuapp + .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ + nrfconnect nrf5340dk_nrf5340_cpuapp lock-app \ + examples/lock-app/nrfconnect/build/zephyr/zephyr.elf \ + /tmp/bloat_reports/ + - name: Build example nRF Connect SDK Lighting App on nRF5340 DK + if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true' + timeout-minutes: 15 + run: | + scripts/examples/nrfconnect_example.sh lighting-app nrf5340dk_nrf5340_cpuapp + .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \ + nrfconnect nrf5340dk_nrf5340_cpuapp lighting-app \ + examples/lighting-app/nrfconnect/build/zephyr/zephyr.elf \ + /tmp/bloat_reports/ - name: Run unit tests for Zephyr native_posix_64 platform if: github.event_name == 'push' || steps.changed_paths.outputs.tests == 'true' timeout-minutes: 15 diff --git a/examples/light-switch-app/nrfconnect/CMakeLists.txt b/examples/light-switch-app/nrfconnect/CMakeLists.txt index 865b8262749bb9..3a0084efa79c42 100644 --- a/examples/light-switch-app/nrfconnect/CMakeLists.txt +++ b/examples/light-switch-app/nrfconnect/CMakeLists.txt @@ -60,7 +60,7 @@ target_sources(app PRIVATE main/BindingHandler.cpp ${GEN_DIR}/light-switch-app/zap-generated/callback-stub.cpp ${GEN_DIR}/light-switch-app/zap-generated/IMClusterCommandHandler.cpp - ${NRFCONNECT_COMMON}/util/LEDWidget.cpp + ${NRFCONNECT_COMMON}/util/LEDWidget.cpp) if(CONFIG_CHIP_OTA_REQUESTOR) From e2c28dfd077f411342a5781abe71377cd98f9874 Mon Sep 17 00:00:00 2001 From: Andrei Litvin Date: Mon, 22 Aug 2022 13:11:51 -0400 Subject: [PATCH 05/12] Restrict esp32 build dependencies to x64 linux. Mac seems to fail on gevent which is brought by gdbgui (#22071) --- scripts/requirements.esp32.txt | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/scripts/requirements.esp32.txt b/scripts/requirements.esp32.txt index c870b03a23cd56..4bf5479986c5a2 100644 --- a/scripts/requirements.esp32.txt +++ b/scripts/requirements.esp32.txt @@ -1,12 +1,12 @@ -click>=7.0 -future>=0.15.2 -pyparsing>=2.0.3,<2.4.0 -idf-component-manager>=0.2.99-beta -gdbgui==0.13.2.0 -pygdbmi<=0.9.0.2 -reedsolo>=1.5.3,<=1.5.4 -bitstring>=3.1.6 -ecdsa>=0.16.0 -kconfiglib==13.7.1 -construct==2.10.54 -python-socketio<5 +click>=7.0 ; platform_machine != 'aarch64' and sys_platform == 'linux' +future>=0.15.2 ; platform_machine != 'aarch64' and sys_platform == 'linux' +pyparsing>=2.0.3,<2.4.0 ; platform_machine != 'aarch64' and sys_platform == 'linux' +idf-component-manager>=0.2.99-beta ; platform_machine != 'aarch64' and sys_platform == 'linux' +gdbgui==0.13.2.0 ; platform_machine != 'aarch64' and sys_platform == 'linux' +pygdbmi<=0.9.0.2 ; platform_machine != 'aarch64' and sys_platform == 'linux' +reedsolo>=1.5.3,<=1.5.4 ; platform_machine != 'aarch64' and sys_platform == 'linux' +bitstring>=3.1.6 ; platform_machine != 'aarch64' and sys_platform == 'linux' +ecdsa>=0.16.0 ; platform_machine != 'aarch64' and sys_platform == 'linux' +kconfiglib==13.7.1 ; platform_machine != 'aarch64' and sys_platform == 'linux' +construct==2.10.54 ; platform_machine != 'aarch64' and sys_platform == 'linux' +python-socketio<5 ; platform_machine != 'aarch64' and sys_platform == 'linux' From 585a53a96f51e3e593316fba85bb8d49e0d8bb7c Mon Sep 17 00:00:00 2001 From: Andrei Litvin Date: Mon, 22 Aug 2022 13:17:19 -0400 Subject: [PATCH 06/12] Disable imx docker CI check step because it always fails with no space left on device (#22050) --- .github/workflows/docker_img.yaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker_img.yaml b/.github/workflows/docker_img.yaml index b706dbcac39e42..73c45ee303a756 100644 --- a/.github/workflows/docker_img.yaml +++ b/.github/workflows/docker_img.yaml @@ -42,7 +42,12 @@ jobs: - "-esp32" - "-esp32-qemu" - "-infineon" - - "-imx" + # NOTE: imx image requires too much space for GitHub-hosted runners. It fails with: + # ``` + # .... + # ApplyLayer exit status 1 stdout: stderr: write /opt/fsl-imx-xwayland/5.15-kirkstone/sysroots/armv8a-poky-linux/opt/ltp/testcases/bin/fanotify15: no space left on device + # ``` + # - "-imx" - "-k32w" - "-mbed-os" - "-nrf-platform" From 3899b665418e2f79e229a5ba9498b59027de400d Mon Sep 17 00:00:00 2001 From: Sid Hsu Date: Tue, 23 Aug 2022 01:54:37 +0800 Subject: [PATCH 07/12] [Infineon] Fix CYW30739 KVS to pass the storage API audit. (#21995) * Support key length upto PersistentStorageDelegate::kKeyLengthMax. * _Get and _Put methods can handle zero-size data correctly. --- .../CYW30739/KeyValueStoreManagerImpl.cpp | 56 ++++++++++++------- .../CYW30739/KeyValueStoreManagerImpl.h | 18 +++++- 2 files changed, 50 insertions(+), 24 deletions(-) diff --git a/src/platform/Infineon/CYW30739/KeyValueStoreManagerImpl.cpp b/src/platform/Infineon/CYW30739/KeyValueStoreManagerImpl.cpp index 00e7a063614bb9..e61edab6ebfd18 100644 --- a/src/platform/Infineon/CYW30739/KeyValueStoreManagerImpl.cpp +++ b/src/platform/Infineon/CYW30739/KeyValueStoreManagerImpl.cpp @@ -44,15 +44,14 @@ CHIP_ERROR KeyValueStoreManagerImpl::Init(void) for (uint8_t configID = 0; configID < mMaxEntryCount; configID++) { - char key[CHIP_CONFIG_PERSISTED_STORAGE_MAX_KEY_LENGTH]; - memset(key, 0, sizeof(key)); - size_t keyLength; - err = CYW30739Config::ReadConfigValueStr(CYW30739ConfigKey(Config::kChipKvsKey_KeyBase, configID), key, sizeof(key), - keyLength); + KeyStorage keyStorage; + size_t keyStorageLength; + err = CYW30739Config::ReadConfigValueBin(CYW30739ConfigKey(Config::kChipKvsKey_KeyBase, configID), &keyStorage, + sizeof(keyStorage), keyStorageLength); if (err != CHIP_NO_ERROR) continue; - KeyConfigIdEntry * entry = Platform::New(configID, key, keyLength); + KeyConfigIdEntry * entry = Platform::New(configID, keyStorage); VerifyOrExit(entry != nullptr, err = CHIP_ERROR_NO_MEMORY); slist_add_tail(entry, &mKeyConfigIdList); @@ -75,14 +74,24 @@ CHIP_ERROR KeyValueStoreManagerImpl::_Get(const char * key, void * value, size_t VerifyOrReturnError(offset_bytes == 0, CHIP_ERROR_NOT_IMPLEMENTED); - const size_t keyLength = strnlen(key, CHIP_CONFIG_PERSISTED_STORAGE_MAX_KEY_LENGTH); - VerifyOrExit(keyLength != 0 && keyLength <= CHIP_CONFIG_PERSISTED_STORAGE_MAX_KEY_LENGTH && + const size_t keyLength = strnlen(key, PersistentStorageDelegate::kKeyLengthMax); + VerifyOrExit(keyLength != 0 && keyLength <= PersistentStorageDelegate::kKeyLengthMax && value_size <= kMaxPersistedValueLengthSupported, err = CHIP_ERROR_INVALID_ARGUMENT); entry = FindEntry(key); VerifyOrExit(entry != nullptr, err = CHIP_ERROR_PERSISTED_STORAGE_VALUE_NOT_FOUND); - VerifyOrExit(value_size != 0, err = CHIP_ERROR_BUFFER_TOO_SMALL); + + if (value_size == 0 || entry->GetValueSize() == 0) + { + if (read_bytes_size != nullptr) + *read_bytes_size = 0; + + if (value_size >= entry->GetValueSize()) + ExitNow(err = CHIP_NO_ERROR); + else + ExitNow(err = CHIP_ERROR_BUFFER_TOO_SMALL); + } size_t byte_count; err = CYW30739Config::ReadConfigValueBin(entry->GetValueConfigKey(), value, value_size, byte_count); @@ -94,6 +103,8 @@ CHIP_ERROR KeyValueStoreManagerImpl::_Get(const char * key, void * value, size_t *read_bytes_size = byte_count; } + VerifyOrExit(value_size >= entry->GetValueSize(), err = CHIP_ERROR_BUFFER_TOO_SMALL); + exit: return err; } @@ -101,10 +112,10 @@ CHIP_ERROR KeyValueStoreManagerImpl::_Get(const char * key, void * value, size_t CHIP_ERROR KeyValueStoreManagerImpl::_Put(const char * key, const void * value, size_t value_size) { CHIP_ERROR err = CHIP_NO_ERROR; - const KeyConfigIdEntry * entry; + KeyConfigIdEntry * entry; - const size_t keyLength = strnlen(key, CHIP_CONFIG_PERSISTED_STORAGE_MAX_KEY_LENGTH + 1); - VerifyOrExit(keyLength != 0 && keyLength <= CHIP_CONFIG_PERSISTED_STORAGE_MAX_KEY_LENGTH && + const size_t keyLength = strnlen(key, PersistentStorageDelegate::kKeyLengthMax + 1); + VerifyOrExit(keyLength != 0 && keyLength <= PersistentStorageDelegate::kKeyLengthMax && value_size <= kMaxPersistedValueLengthSupported, err = CHIP_ERROR_INVALID_ARGUMENT); @@ -112,9 +123,13 @@ CHIP_ERROR KeyValueStoreManagerImpl::_Put(const char * key, const void * value, VerifyOrExit(entry != nullptr, ChipLogError(DeviceLayer, "%s AllocateEntry %s", __func__, ErrorStr(err)); err = CHIP_ERROR_NO_MEMORY); - SuccessOrExit(err = CYW30739Config::WriteConfigValueBin(entry->GetValueConfigKey(), value, value_size)); + if (value_size != 0) + { + SuccessOrExit(err = CYW30739Config::WriteConfigValueBin(entry->GetValueConfigKey(), value, value_size)); + } - SuccessOrExit(err = CYW30739Config::WriteConfigValueStr(entry->GetKeyConfigKey(), key, keyLength)); + entry->SetValueSize(value_size); + SuccessOrExit(err = CYW30739Config::WriteConfigValueBin(entry->GetKeyConfigKey(), &entry->mStorage, sizeof(entry->mStorage))); exit: return err; @@ -125,8 +140,8 @@ CHIP_ERROR KeyValueStoreManagerImpl::_Delete(const char * key) CHIP_ERROR err; KeyConfigIdEntry * entry; - const size_t keyLength = strnlen(key, CHIP_CONFIG_PERSISTED_STORAGE_MAX_KEY_LENGTH); - VerifyOrExit(keyLength != 0 && keyLength <= CHIP_CONFIG_PERSISTED_STORAGE_MAX_KEY_LENGTH, err = CHIP_ERROR_INVALID_ARGUMENT); + const size_t keyLength = strnlen(key, PersistentStorageDelegate::kKeyLengthMax); + VerifyOrExit(keyLength != 0 && keyLength <= PersistentStorageDelegate::kKeyLengthMax, err = CHIP_ERROR_INVALID_ARGUMENT); entry = FindEntry(key); VerifyOrExit(entry != nullptr, err = CHIP_ERROR_PERSISTED_STORAGE_VALUE_NOT_FOUND); @@ -156,14 +171,13 @@ CHIP_ERROR KeyValueStoreManagerImpl::EraseAll(void) return CHIP_NO_ERROR; } -KeyValueStoreManagerImpl::KeyConfigIdEntry::KeyConfigIdEntry(uint8_t configID, const char * key, size_t keyLength) : - mConfigID(configID) +KeyValueStoreManagerImpl::KeyStorage::KeyStorage(const char * key, size_t keyLength) : mValueSize(0) { memset(mKey, 0, sizeof(mKey)); memcpy(mKey, key, keyLength); } -bool KeyValueStoreManagerImpl::KeyConfigIdEntry::IsMatchKey(const char * key) const +bool KeyValueStoreManagerImpl::KeyStorage::IsMatchKey(const char * key) const { return strncmp(mKey, key, sizeof(mKey)) == 0; } @@ -175,7 +189,7 @@ KeyValueStoreManagerImpl::KeyConfigIdEntry * KeyValueStoreManagerImpl::AllocateE ReturnErrorCodeIf(newEntry != nullptr, newEntry); ReturnErrorCodeIf(!freeConfigID.HasValue(), nullptr); - newEntry = Platform::New(freeConfigID.Value(), key, keyLength); + newEntry = Platform::New(freeConfigID.Value(), KeyStorage(key, keyLength)); ReturnErrorCodeIf(newEntry == nullptr, nullptr); KeyConfigIdEntry * entry = static_cast(slist_tail(&mKeyConfigIdList)); @@ -220,7 +234,7 @@ KeyValueStoreManagerImpl::KeyConfigIdEntry * KeyValueStoreManagerImpl::FindEntry { entry = entry->Next(); - if (entry->IsMatchKey(key)) + if (entry->mStorage.IsMatchKey(key)) return entry; if (freeConfigID != nullptr && !freeConfigID->HasValue() && entry != slist_tail(&mKeyConfigIdList)) diff --git a/src/platform/Infineon/CYW30739/KeyValueStoreManagerImpl.h b/src/platform/Infineon/CYW30739/KeyValueStoreManagerImpl.h index a719bc6c2af7ac..5938bd28a56c98 100644 --- a/src/platform/Infineon/CYW30739/KeyValueStoreManagerImpl.h +++ b/src/platform/Infineon/CYW30739/KeyValueStoreManagerImpl.h @@ -23,6 +23,7 @@ #pragma once +#include #include #include @@ -56,11 +57,20 @@ class KeyValueStoreManagerImpl final : public KeyValueStoreManager static constexpr uint8_t mMaxEntryCount = 128; - struct KeyConfigIdEntry : public slist_node_t + struct KeyStorage { - KeyConfigIdEntry(uint8_t configID, const char * key, size_t keyLength); + KeyStorage(const char * key = nullptr, size_t keyLength = 0); bool IsMatchKey(const char * key) const; + + size_t mValueSize; + char mKey[PersistentStorageDelegate::kKeyLengthMax]; + }; + + struct KeyConfigIdEntry : public slist_node_t + { + KeyConfigIdEntry(uint8_t configID, const KeyStorage & keyStorage) : mConfigID(configID), mStorage(keyStorage) {} + constexpr Config::Key GetValueConfigKey() const { return Internal::CYW30739ConfigKey(Config::kChipKvsValue_KeyBase, mConfigID); @@ -71,9 +81,11 @@ class KeyValueStoreManagerImpl final : public KeyValueStoreManager } constexpr KeyConfigIdEntry * Next() const { return static_cast(next); } constexpr uint8_t NextConfigID() const { return mConfigID + 1; } + constexpr size_t GetValueSize() const { return mStorage.mValueSize; } + constexpr void SetValueSize(size_t valueSize) { mStorage.mValueSize = valueSize; } uint8_t mConfigID; - char mKey[CHIP_CONFIG_PERSISTED_STORAGE_MAX_KEY_LENGTH]; + KeyStorage mStorage; }; KeyConfigIdEntry * AllocateEntry(const char * key, size_t keyLength); From 15ec1792a4a6e47fa62fc127d5f9463ecb1ee99c Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Mon, 22 Aug 2022 13:55:44 -0400 Subject: [PATCH 08/12] [Docs] Update building guide for Ubuntu 2022.04 (#21636) --- docs/guides/BUILDING.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/guides/BUILDING.md b/docs/guides/BUILDING.md index 5bcd865ca5db1b..00bf6d97a581f9 100644 --- a/docs/guides/BUILDING.md +++ b/docs/guides/BUILDING.md @@ -8,7 +8,7 @@ Tested on: - macOS 10.15 - Debian 11 -- Ubuntu 20.04 LTS +- Ubuntu 22.04 LTS Build system features: @@ -81,9 +81,8 @@ dependency. ### Installing prerequisites on Raspberry Pi 4 -Using `rpi-imager`, install the Ubuntu _21.04_ 64-bit _server_ OS for arm64 -architectures on a micro SD card. This release will have bluez 5.55 or newer -which is required for BLE functionality. +Using `rpi-imager`, install the Ubuntu _22.04_ 64-bit _server_ OS for arm64 +architectures on a micro SD card. Boot the SD card, login with the default user account "ubuntu" and password "ubuntu", then proceed with From a71a002e5377f267a57cf112980e4a49f010e5f7 Mon Sep 17 00:00:00 2001 From: jmartinez-silabs <67972863+jmartinez-silabs@users.noreply.github.com> Date: Mon, 22 Aug 2022 14:05:00 -0400 Subject: [PATCH 09/12] More cleanup for the openthread build targets and EFR32 (#22049) --- examples/chef/efr32/BUILD.gn | 1 + examples/light-switch-app/efr32/BUILD.gn | 1 + examples/lighting-app/efr32/BUILD.gn | 1 + examples/lock-app/efr32/BUILD.gn | 1 + examples/shell/shell_common/BUILD.gn | 15 ++--- examples/thermostat/efr32/BUILD.gn | 1 + examples/window-app/efr32/BUILD.gn | 1 + src/inet/BUILD.gn | 2 +- src/platform/EFR32/BUILD.gn | 4 +- src/test_driver/efr32/BUILD.gn | 1 + third_party/openthread/BUILD.gn | 21 ++++++- third_party/openthread/ot-efr32 | 2 +- third_party/silabs/BUILD.gn | 78 ++++++++++-------------- 13 files changed, 67 insertions(+), 62 deletions(-) diff --git a/examples/chef/efr32/BUILD.gn b/examples/chef/efr32/BUILD.gn index 662933081bc331..c567ae9d8f1cbf 100644 --- a/examples/chef/efr32/BUILD.gn +++ b/examples/chef/efr32/BUILD.gn @@ -207,6 +207,7 @@ efr32_executable("chef_app") { if (chip_enable_openthread) { deps += [ "${chip_root}/third_party/openthread:openthread", + "${chip_root}/third_party/openthread:openthread_device", "${examples_plat_dir}:efr-matter-shell", ] } diff --git a/examples/light-switch-app/efr32/BUILD.gn b/examples/light-switch-app/efr32/BUILD.gn index 3118b7a6dadc18..e2705abdedcb65 100644 --- a/examples/light-switch-app/efr32/BUILD.gn +++ b/examples/light-switch-app/efr32/BUILD.gn @@ -200,6 +200,7 @@ efr32_executable("light_switch_app") { if (chip_enable_openthread) { deps += [ "${chip_root}/third_party/openthread:openthread", + "${chip_root}/third_party/openthread:openthread_device", "${examples_plat_dir}:efr-matter-shell", ] } diff --git a/examples/lighting-app/efr32/BUILD.gn b/examples/lighting-app/efr32/BUILD.gn index 76430e8586e8d3..060b9f67343aa0 100644 --- a/examples/lighting-app/efr32/BUILD.gn +++ b/examples/lighting-app/efr32/BUILD.gn @@ -205,6 +205,7 @@ efr32_executable("lighting_app") { if (chip_enable_openthread) { deps += [ "${chip_root}/third_party/openthread:openthread", + "${chip_root}/third_party/openthread:openthread_device", "${examples_plat_dir}:efr-matter-shell", ] } diff --git a/examples/lock-app/efr32/BUILD.gn b/examples/lock-app/efr32/BUILD.gn index bb6530f56e5313..2f8f2dc6bf67b4 100644 --- a/examples/lock-app/efr32/BUILD.gn +++ b/examples/lock-app/efr32/BUILD.gn @@ -202,6 +202,7 @@ efr32_executable("lock_app") { if (chip_enable_openthread) { deps += [ "${chip_root}/third_party/openthread:openthread", + "${chip_root}/third_party/openthread:openthread_device", "${examples_plat_dir}:efr-matter-shell", ] } diff --git a/examples/shell/shell_common/BUILD.gn b/examples/shell/shell_common/BUILD.gn index d4b57df2f969ee..0217eb057fdff4 100644 --- a/examples/shell/shell_common/BUILD.gn +++ b/examples/shell/shell_common/BUILD.gn @@ -52,17 +52,10 @@ static_library("shell_common") { if (chip_enable_openthread && (current_os == "freertos" || current_os == "zephyr")) { - if (chip_openthread_ftd) { - public_deps += [ - "${chip_root}/third_party/openthread/repo:libopenthread-cli-ftd", - "${chip_root}/third_party/openthread/repo:libopenthread-ftd", - ] - } else { - public_deps += [ - "${chip_root}/third_party/openthread/repo:libopenthread-cli-mtd", - "${chip_root}/third_party/openthread/repo:libopenthread-mtd", - ] - } + public_deps += [ + "${chip_root}/third_party/openthread:openthread_cli", + "${chip_root}/third_party/openthread:openthread_device", + ] } if (chip_shell_cmd_server) { diff --git a/examples/thermostat/efr32/BUILD.gn b/examples/thermostat/efr32/BUILD.gn index fe2be76adf88a8..edb03073686e3e 100644 --- a/examples/thermostat/efr32/BUILD.gn +++ b/examples/thermostat/efr32/BUILD.gn @@ -196,6 +196,7 @@ efr32_executable("thermostat_app") { if (chip_enable_openthread) { deps += [ "${chip_root}/third_party/openthread:openthread", + "${chip_root}/third_party/openthread:openthread_device", "${examples_plat_dir}:efr-matter-shell", ] } diff --git a/examples/window-app/efr32/BUILD.gn b/examples/window-app/efr32/BUILD.gn index 7d2bfbec6dca1f..c7a3f57e4b9ff8 100644 --- a/examples/window-app/efr32/BUILD.gn +++ b/examples/window-app/efr32/BUILD.gn @@ -188,6 +188,7 @@ efr32_executable("window_app") { if (chip_enable_openthread) { deps += [ "${chip_root}/third_party/openthread:openthread", + "${chip_root}/third_party/openthread:openthread_device", "${examples_plat_dir}:efr-matter-shell", ] } diff --git a/src/inet/BUILD.gn b/src/inet/BUILD.gn index cb86a45780df9c..a042007d02c5a3 100644 --- a/src/inet/BUILD.gn +++ b/src/inet/BUILD.gn @@ -107,7 +107,7 @@ static_library("inet") { } if (chip_system_config_use_open_thread_inet_endpoints) { - public_deps += [ "${chip_root}/third_party/openthread:openthread" ] + public_deps += [ "${chip_root}/third_party/openthread:openthread_device" ] } if (chip_inet_config_enable_tcp_endpoint) { diff --git a/src/platform/EFR32/BUILD.gn b/src/platform/EFR32/BUILD.gn index e406ce994eedee..eb73a6f80f85cf 100644 --- a/src/platform/EFR32/BUILD.gn +++ b/src/platform/EFR32/BUILD.gn @@ -98,9 +98,9 @@ static_library("EFR32") { "$dir_pw_kvs", ] if (chip_enable_openthread) { - public_deps += [ "${chip_root}/third_party/openthread:openthread" ] + public_deps += [ "${chip_root}/third_party/openthread:openthread_device" ] - deps += [ "${chip_root}/third_party/silabs:openthread_cli" ] + deps += [ "${chip_root}/third_party/openthread:openthread_cli" ] sources += [ "../OpenThread/OpenThreadUtils.cpp", diff --git a/src/test_driver/efr32/BUILD.gn b/src/test_driver/efr32/BUILD.gn index 45e4aff6fe40a7..8ee3c4f3e59c69 100644 --- a/src/test_driver/efr32/BUILD.gn +++ b/src/test_driver/efr32/BUILD.gn @@ -96,6 +96,7 @@ efr32_executable("efr32_device_tests") { if (chip_enable_openthread) { deps += [ "${chip_root}/third_party/openthread:openthread", + "${chip_root}/third_party/openthread:openthread_device", "${examples_plat_dir}:efr-matter-shell", ] } diff --git a/third_party/openthread/BUILD.gn b/third_party/openthread/BUILD.gn index 752f245738a750..9ee8e905551837 100644 --- a/third_party/openthread/BUILD.gn +++ b/third_party/openthread/BUILD.gn @@ -16,10 +16,27 @@ group("openthread") { "${chip_root}/third_party/openthread/platforms:libopenthread-platform", "${chip_root}/third_party/openthread/platforms:libopenthread-platform-utils", ] + } +} + +group("openthread_device") { + if (chip_openthread_target != "") { + public_deps = [ chip_openthread_target ] + } else { + if (chip_openthread_ftd) { + public_deps = [ "${openthread_root}:libopenthread-ftd" ] + } else { + public_deps = [ "${openthread_root}:libopenthread-mtd" ] + } + } +} + +group("openthread_cli") { + if (chip_openthread_target == "") { if (chip_openthread_ftd) { - public_deps += [ "${openthread_root}:libopenthread-ftd" ] + public_deps = [ "${openthread_root}:libopenthread-cli-ftd" ] } else { - public_deps += [ "${openthread_root}:libopenthread-mtd" ] + public_deps = [ "${openthread_root}:libopenthread-cli-mtd" ] } } } diff --git a/third_party/openthread/ot-efr32 b/third_party/openthread/ot-efr32 index fd77faf7a3443f..1e10a32228c96f 160000 --- a/third_party/openthread/ot-efr32 +++ b/third_party/openthread/ot-efr32 @@ -1 +1 @@ -Subproject commit fd77faf7a3443f7941dfd9e9713aea09eb08e9b9 +Subproject commit 1e10a32228c96f273603612ef7d5ce693ecdf887 diff --git a/third_party/silabs/BUILD.gn b/third_party/silabs/BUILD.gn index c4f96d18d339f5..1589f72e7865ae 100644 --- a/third_party/silabs/BUILD.gn +++ b/third_party/silabs/BUILD.gn @@ -31,18 +31,6 @@ group("efr32_sdk") { public_deps = [ efr32_sdk_target ] } -if (chip_enable_openthread) { - group("openthread_cli") { - if (!use_silabs_thread_lib) { - if (chip_openthread_ftd) { - public_deps = [ "${sl_openthread_root}:libopenthread-cli-ftd" ] - } else { - public_deps = [ "${sl_openthread_root}:libopenthread-cli-mtd" ] - } - } - } -} - if (use_silabs_thread_lib) { config("libopenthread-platform_config") { include_dirs = [ "${sl_openthread_root}/examples/platforms" ] @@ -74,7 +62,6 @@ if (use_silabs_thread_lib) { "RADIO_CONFIG_DMP_SUPPORT=1", "${efr32_board}=1", "${efr32_mcu}", - "USE_SL_THREAD_CERT_LIB", "OPENTHREAD_CORE_CONFIG_PLATFORM_CHECK_FILE=\"openthread-core-efr32-config-check.h\"", ] @@ -88,7 +75,6 @@ if (use_silabs_thread_lib) { source_set("openthread_core_config_efr32") { sources = [ - "${sl_openthread_root}/src/cli/cli_config.h", "${sl_ot_efr32_root}/src/src/openthread-core-efr32-config-check.h", "${sl_ot_efr32_root}/src/src/openthread-core-efr32-config.h", ] @@ -102,37 +88,39 @@ if (use_silabs_thread_lib) { } source_set("ot-efr32-cert") { - sources = [ - "${sl_openthread_root}/examples/apps/cli/cli_uart.cpp", - "${sl_openthread_root}/src/cli/cli.cpp", - "${sl_openthread_root}/src/cli/cli.hpp", - "${sl_openthread_root}/src/cli/cli_coap.cpp", - "${sl_openthread_root}/src/cli/cli_coap.hpp", - "${sl_openthread_root}/src/cli/cli_coap_secure.cpp", - "${sl_openthread_root}/src/cli/cli_coap_secure.hpp", - "${sl_openthread_root}/src/cli/cli_commissioner.cpp", - "${sl_openthread_root}/src/cli/cli_commissioner.hpp", - "${sl_openthread_root}/src/cli/cli_config.h", - "${sl_openthread_root}/src/cli/cli_dataset.cpp", - "${sl_openthread_root}/src/cli/cli_dataset.hpp", - "${sl_openthread_root}/src/cli/cli_history.cpp", - "${sl_openthread_root}/src/cli/cli_history.hpp", - "${sl_openthread_root}/src/cli/cli_joiner.cpp", - "${sl_openthread_root}/src/cli/cli_joiner.hpp", - "${sl_openthread_root}/src/cli/cli_network_data.cpp", - "${sl_openthread_root}/src/cli/cli_network_data.hpp", - "${sl_openthread_root}/src/cli/cli_output.cpp", - "${sl_openthread_root}/src/cli/cli_output.hpp", - "${sl_openthread_root}/src/cli/cli_srp_client.cpp", - "${sl_openthread_root}/src/cli/cli_srp_client.hpp", - "${sl_openthread_root}/src/cli/cli_srp_server.cpp", - "${sl_openthread_root}/src/cli/cli_srp_server.hpp", - "${sl_openthread_root}/src/cli/cli_tcp.cpp", - "${sl_openthread_root}/src/cli/cli_tcp.hpp", - "${sl_openthread_root}/src/cli/cli_udp.cpp", - "${sl_openthread_root}/src/cli/cli_udp.hpp", - "${sl_openthread_root}/src/cli/x509_cert_key.hpp", - ] + if (enable_openthread_cli) { + sources = [ + "${sl_openthread_root}/examples/apps/cli/cli_uart.cpp", + "${sl_openthread_root}/src/cli/cli.cpp", + "${sl_openthread_root}/src/cli/cli.hpp", + "${sl_openthread_root}/src/cli/cli_coap.cpp", + "${sl_openthread_root}/src/cli/cli_coap.hpp", + "${sl_openthread_root}/src/cli/cli_coap_secure.cpp", + "${sl_openthread_root}/src/cli/cli_coap_secure.hpp", + "${sl_openthread_root}/src/cli/cli_commissioner.cpp", + "${sl_openthread_root}/src/cli/cli_commissioner.hpp", + "${sl_openthread_root}/src/cli/cli_config.h", + "${sl_openthread_root}/src/cli/cli_dataset.cpp", + "${sl_openthread_root}/src/cli/cli_dataset.hpp", + "${sl_openthread_root}/src/cli/cli_history.cpp", + "${sl_openthread_root}/src/cli/cli_history.hpp", + "${sl_openthread_root}/src/cli/cli_joiner.cpp", + "${sl_openthread_root}/src/cli/cli_joiner.hpp", + "${sl_openthread_root}/src/cli/cli_network_data.cpp", + "${sl_openthread_root}/src/cli/cli_network_data.hpp", + "${sl_openthread_root}/src/cli/cli_output.cpp", + "${sl_openthread_root}/src/cli/cli_output.hpp", + "${sl_openthread_root}/src/cli/cli_srp_client.cpp", + "${sl_openthread_root}/src/cli/cli_srp_client.hpp", + "${sl_openthread_root}/src/cli/cli_srp_server.cpp", + "${sl_openthread_root}/src/cli/cli_srp_server.hpp", + "${sl_openthread_root}/src/cli/cli_tcp.cpp", + "${sl_openthread_root}/src/cli/cli_tcp.hpp", + "${sl_openthread_root}/src/cli/cli_udp.cpp", + "${sl_openthread_root}/src/cli/cli_udp.hpp", + "${sl_openthread_root}/src/cli/x509_cert_key.hpp", + ] + } public_configs = [ ":openthread_efr32_config", From f68b948bd78986ed85b1ee326e05da5361e83eff Mon Sep 17 00:00:00 2001 From: jmartinez-silabs <67972863+jmartinez-silabs@users.noreply.github.com> Date: Mon, 22 Aug 2022 15:23:22 -0400 Subject: [PATCH 10/12] Fix GetBootReason prototype so it overrides the generic one, Replace sl_ot_sys_init by manual call. OT efr32MiscInit was 'stealing' the reboot cause from the matter stack (#22077) --- examples/platform/efr32/init_efrPlatform.cpp | 3 ++- src/platform/EFR32/ConfigurationManagerImpl.cpp | 5 +++-- src/platform/EFR32/ConfigurationManagerImpl.h | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/platform/efr32/init_efrPlatform.cpp b/examples/platform/efr32/init_efrPlatform.cpp index a0e33702b40e68..36ee0018e8a814 100644 --- a/examples/platform/efr32/init_efrPlatform.cpp +++ b/examples/platform/efr32/init_efrPlatform.cpp @@ -68,7 +68,8 @@ void init_efrPlatform(void) #endif #if CHIP_ENABLE_OPENTHREAD - sl_ot_sys_init(); + efr32RadioInit(); + efr32AlarmInit(); #endif // CHIP_ENABLE_OPENTHREAD } diff --git a/src/platform/EFR32/ConfigurationManagerImpl.cpp b/src/platform/EFR32/ConfigurationManagerImpl.cpp index 64a66be824f61a..0dd8170da5d3b5 100644 --- a/src/platform/EFR32/ConfigurationManagerImpl.cpp +++ b/src/platform/EFR32/ConfigurationManagerImpl.cpp @@ -97,7 +97,7 @@ CHIP_ERROR ConfigurationManagerImpl::IncreaseBootCount(void) return EFR32Config::WriteConfigValue(EFR32Config::kConfigKey_BootCount, bootCount + 1); } -uint32_t ConfigurationManagerImpl::GetBootReason(void) +CHIP_ERROR ConfigurationManagerImpl::GetBootReason(uint32_t & bootReason) { // rebootCause is obtained at bootup. BootReasonType matterBootCause; @@ -150,7 +150,8 @@ uint32_t ConfigurationManagerImpl::GetBootReason(void) matterBootCause = BootReasonType::kUnspecified; #endif - return to_underlying(matterBootCause); + bootReason = to_underlying(matterBootCause); + return CHIP_NO_ERROR; } CHIP_ERROR ConfigurationManagerImpl::GetTotalOperationalHours(uint32_t & totalOperationalHours) diff --git a/src/platform/EFR32/ConfigurationManagerImpl.h b/src/platform/EFR32/ConfigurationManagerImpl.h index aaebd3ea65ac91..2f40d8d260a363 100644 --- a/src/platform/EFR32/ConfigurationManagerImpl.h +++ b/src/platform/EFR32/ConfigurationManagerImpl.h @@ -40,7 +40,7 @@ class ConfigurationManagerImpl : public Internal::GenericConfigurationManagerImp // This returns an instance of this class. static ConfigurationManagerImpl & GetDefaultInstance(); - uint32_t GetBootReason(void); + CHIP_ERROR GetBootReason(uint32_t & bootReason); CHIP_ERROR GetRebootCount(uint32_t & rebootCount); CHIP_ERROR IncreaseBootCount(void); CHIP_ERROR GetTotalOperationalHours(uint32_t & totalOperationalHours); From 6681060d7d44832bac7534464a84cab72bec62b1 Mon Sep 17 00:00:00 2001 From: Ricardo Casallas <77841255+rcasallas-silabs@users.noreply.github.com> Date: Mon, 22 Aug 2022 16:41:58 -0400 Subject: [PATCH 11/12] [EFR32] Fix CSR length. (#22080) --- src/platform/EFR32/CHIPCryptoPALPsaEfr32.cpp | 4 +++- src/platform/EFR32/Efr32PsaOpaqueKeypair.cpp | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/platform/EFR32/CHIPCryptoPALPsaEfr32.cpp b/src/platform/EFR32/CHIPCryptoPALPsaEfr32.cpp index 6077681f19eb57..72c4706501f851 100644 --- a/src/platform/EFR32/CHIPCryptoPALPsaEfr32.cpp +++ b/src/platform/EFR32/CHIPCryptoPALPsaEfr32.cpp @@ -894,7 +894,9 @@ P256Keypair::~P256Keypair() CHIP_ERROR P256Keypair::NewCertificateSigningRequest(uint8_t * out_csr, size_t & csr_length) const { MutableByteSpan csr(out_csr, csr_length); - return GenerateCertificateSigningRequest(this, csr); + CHIP_ERROR err = GenerateCertificateSigningRequest(this, csr); + csr_length = (CHIP_NO_ERROR == err) ? csr.size() : 0; + return err; } CHIP_ERROR VerifyCertificateSigningRequest(const uint8_t * csr_buf, size_t csr_length, P256PublicKey & pubkey) diff --git a/src/platform/EFR32/Efr32PsaOpaqueKeypair.cpp b/src/platform/EFR32/Efr32PsaOpaqueKeypair.cpp index b1c32dc028471d..da72af848bab51 100644 --- a/src/platform/EFR32/Efr32PsaOpaqueKeypair.cpp +++ b/src/platform/EFR32/Efr32PsaOpaqueKeypair.cpp @@ -407,7 +407,9 @@ CHIP_ERROR EFR32OpaqueP256Keypair::Deserialize(P256SerializedKeypair & input) CHIP_ERROR EFR32OpaqueP256Keypair::NewCertificateSigningRequest(uint8_t * out_csr, size_t & csr_length) const { MutableByteSpan csr(out_csr, csr_length); - return GenerateCertificateSigningRequest(this, csr); + CHIP_ERROR err = GenerateCertificateSigningRequest(this, csr); + csr_length = (CHIP_NO_ERROR == err) ? csr.size() : 0; + return err; } CHIP_ERROR EFR32OpaqueP256Keypair::ECDSA_sign_msg(const uint8_t * msg, size_t msg_length, P256ECDSASignature & out_signature) const From f6929bb913bca7f5d5d7b770788e8d6f3c74ed29 Mon Sep 17 00:00:00 2001 From: jmartinez-silabs <67972863+jmartinez-silabs@users.noreply.github.com> Date: Mon, 22 Aug 2022 18:12:16 -0400 Subject: [PATCH 12/12] Set MAX_EXCHANGE_CONTEXT and NUM_UDP_ENDPOINT to match minimal requirements of matter spec (#22078) --- src/platform/EFR32/CHIPPlatformConfig.h | 2 +- src/platform/EFR32/InetPlatformConfig.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform/EFR32/CHIPPlatformConfig.h b/src/platform/EFR32/CHIPPlatformConfig.h index decc6c59602779..cffeb4645ec29d 100644 --- a/src/platform/EFR32/CHIPPlatformConfig.h +++ b/src/platform/EFR32/CHIPPlatformConfig.h @@ -57,7 +57,7 @@ #endif // CHIP_CONFIG_MAX_UNSOLICITED_MESSAGE_HANDLERS #ifndef CHIP_CONFIG_MAX_EXCHANGE_CONTEXTS -#define CHIP_CONFIG_MAX_EXCHANGE_CONTEXTS 8 +#define CHIP_CONFIG_MAX_EXCHANGE_CONTEXTS 20 #endif // CHIP_CONFIG_MAX_EXCHANGE_CONTEXTS #ifndef CHIP_LOG_FILTERING diff --git a/src/platform/EFR32/InetPlatformConfig.h b/src/platform/EFR32/InetPlatformConfig.h index 3e8bb9a2f6d229..fe3304fa5d9915 100644 --- a/src/platform/EFR32/InetPlatformConfig.h +++ b/src/platform/EFR32/InetPlatformConfig.h @@ -49,5 +49,5 @@ #endif // INET_CONFIG_NUM_TCP_ENDPOINTS #ifndef INET_CONFIG_NUM_UDP_ENDPOINTS -#define INET_CONFIG_NUM_UDP_ENDPOINTS 6 +#define INET_CONFIG_NUM_UDP_ENDPOINTS 20 #endif // INET_CONFIG_NUM_UDP_ENDPOINTS