From 6cc4912fa1ec2bb6d32b6618e63268ef861f1de8 Mon Sep 17 00:00:00 2001 From: Rob Oliver Date: Tue, 9 Nov 2021 15:38:03 -0500 Subject: [PATCH] RPC: Add RPCs to EFR lock app --- examples/lock-app/efr32/BUILD.gn | 45 +++++++++++++++++++ examples/lock-app/efr32/src/main.cpp | 8 ++++ examples/lock-app/efr32/with_pw_rpc.gni | 5 ++- scripts/build/build/targets.py | 2 +- .../testdata/all_targets_except_host.txt | 1 + .../build/testdata/build_all_except_host.txt | 6 +++ .../glob_star_targets_except_host.txt | 1 + 7 files changed, 66 insertions(+), 2 deletions(-) diff --git a/examples/lock-app/efr32/BUILD.gn b/examples/lock-app/efr32/BUILD.gn index 805f0a963d6e09..eae91987d71832 100644 --- a/examples/lock-app/efr32/BUILD.gn +++ b/examples/lock-app/efr32/BUILD.gn @@ -20,6 +20,12 @@ import("${build_root}/config/defaults.gni") import("${efr32_sdk_build_root}/efr32_executable.gni") import("${efr32_sdk_build_root}/efr32_sdk.gni") +import("${chip_root}/examples/common/pigweed/pigweed_rpcs.gni") +if (chip_enable_pw_rpc) { + import("//build_overrides/pigweed.gni") + import("$dir_pw_build/target_types.gni") +} + assert(current_os == "freertos") efr32_project_dir = "${chip_root}/examples/lock-app/efr32" @@ -59,6 +65,10 @@ efr32_sdk("sdk") { "BOARD_ID=${efr32_board}", "CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE=${setupPinCode}", ] + + if (chip_enable_pw_rpc) { + defines += [ "HAL_VCOM_ENABLE=1" ] + } } efr32_executable("lock_app") { @@ -97,6 +107,41 @@ efr32_executable("lock_app") { defines += [ "DISPLAY_ENABLED" ] } + if (chip_enable_pw_rpc) { + defines += [ + "PW_RPC_ENABLED", + "PW_RPC_ATTRIBUTE_SERVICE=1", + "PW_RPC_BUTTON_SERVICE=1", + "PW_RPC_DEVICE_SERVICE=1", + "PW_RPC_LOCKING_SERVICE=1", + ] + + sources += [ + "${chip_root}/examples/common/pigweed/RpcService.cpp", + "${chip_root}/examples/common/pigweed/efr32/PigweedLoggerMutex.cpp", + "${examples_plat_dir}/PigweedLogger.cpp", + "${examples_plat_dir}/Rpc.cpp", + ] + + deps += [ + "$dir_pw_hdlc:rpc_channel_output", + "$dir_pw_stream:sys_io_stream", + "${chip_root}/config/efr32/lib/pw_rpc:pw_rpc", + "${chip_root}/examples/common/pigweed:attributes_service.nanopb_rpc", + "${chip_root}/examples/common/pigweed:button_service.nanopb_rpc", + "${chip_root}/examples/common/pigweed:device_service.nanopb_rpc", + "${chip_root}/examples/common/pigweed:locking_service.nanopb_rpc", + "${examples_plat_dir}/pw_sys_io:pw_sys_io_efr32", + ] + + deps += pw_build_LINK_DEPS + + include_dirs += [ + "${chip_root}/examples/common", + "${chip_root}/examples/common/pigweed/efr32", + ] + } + if (enable_heap_monitoring) { defines += [ "HEAP_MONITORING" ] sources += [ "${examples_plat_dir}/MemMonitoring.cpp" ] diff --git a/examples/lock-app/efr32/src/main.cpp b/examples/lock-app/efr32/src/main.cpp index 1e07cd63605644..012b1ddd63f162 100644 --- a/examples/lock-app/efr32/src/main.cpp +++ b/examples/lock-app/efr32/src/main.cpp @@ -48,6 +48,10 @@ #include "lcd.h" #endif +#if PW_RPC_ENABLED +#include "Rpc.h" +#endif + #if CHIP_ENABLE_OPENTHREAD #include #include @@ -104,6 +108,10 @@ int main(void) init_efrPlatform(); mbedtls_platform_set_calloc_free(CHIPPlatformMemoryCalloc, CHIPPlatformMemoryFree); +#if PW_RPC_ENABLED + chip::rpc::Init(); +#endif + EFR32_LOG("=================================================="); EFR32_LOG("chip-efr32-lock-example starting"); EFR32_LOG("=================================================="); diff --git a/examples/lock-app/efr32/with_pw_rpc.gni b/examples/lock-app/efr32/with_pw_rpc.gni index a64475b97e246e..f9f11473f56d43 100644 --- a/examples/lock-app/efr32/with_pw_rpc.gni +++ b/examples/lock-app/efr32/with_pw_rpc.gni @@ -18,8 +18,11 @@ import("//build_overrides/chip.gni") import("${chip_root}/config/efr32/lib/pw_rpc/pw_rpc.gni") -import("${chip_root}/src/platform/EFR32/args.gni") +import("${chip_root}/examples/platform/efr32/args.gni") efr32_sdk_target = get_label_info(":sdk", "label_no_toolchain") +chip_enable_pw_rpc = true +chip_enable_openthread = true + cpp_standard = "gnu++17" diff --git a/scripts/build/build/targets.py b/scripts/build/build/targets.py index 2806e811225dfc..247606bd26c3d9 100644 --- a/scripts/build/build/targets.py +++ b/scripts/build/build/targets.py @@ -148,11 +148,11 @@ def Efr32Targets(): board=Efr32Board.BRD4161A) yield efr_target.Extend('window-covering', app=Efr32App.WINDOW_COVERING) - yield efr_target.Extend('lock', app=Efr32App.LOCK) yield efr_target.Extend('unit-test', app=Efr32App.UNIT_TEST) rpc_aware_targets = [ efr_target.Extend('light', app=Efr32App.LIGHT), + efr_target.Extend('lock', app=Efr32App.LOCK) ] for target in rpc_aware_targets: diff --git a/scripts/build/testdata/all_targets_except_host.txt b/scripts/build/testdata/all_targets_except_host.txt index 62abd8211112f8..ba1c11063b90d2 100644 --- a/scripts/build/testdata/all_targets_except_host.txt +++ b/scripts/build/testdata/all_targets_except_host.txt @@ -12,6 +12,7 @@ android-x86-chip-tool efr32-brd4161a-light efr32-brd4161a-light-rpc efr32-brd4161a-lock +efr32-brd4161a-lock-rpc efr32-brd4161a-unit-test efr32-brd4161a-window-covering esp32-c3devkit-all-clusters diff --git a/scripts/build/testdata/build_all_except_host.txt b/scripts/build/testdata/build_all_except_host.txt index 36c1866eda665b..734f2b84915638 100644 --- a/scripts/build/testdata/build_all_except_host.txt +++ b/scripts/build/testdata/build_all_except_host.txt @@ -133,6 +133,9 @@ gn gen --check --fail-on-unused-args --root={root}/examples/lighting-app/efr32 ' # Generating efr32-brd4161a-lock gn gen --check --fail-on-unused-args --root={root}/examples/lock-app/efr32 '--args=efr32_board="BRD4161A"' {out}/efr32-brd4161a-lock +# Generating efr32-brd4161a-lock-rpc +gn gen --check --fail-on-unused-args --root={root}/examples/lock-app/efr32 '--args=efr32_board="BRD4161A" import("//with_pw_rpc.gni")' {out}/efr32-brd4161a-lock-rpc + # Generating efr32-brd4161a-unit-test gn gen --check --fail-on-unused-args --root={root}/src/test_driver/efr32 '--args=efr32_board="BRD4161A"' {out}/efr32-brd4161a-unit-test @@ -587,6 +590,9 @@ ninja -C {out}/efr32-brd4161a-light-rpc # Building efr32-brd4161a-lock ninja -C {out}/efr32-brd4161a-lock +# Building efr32-brd4161a-lock-rpc +ninja -C {out}/efr32-brd4161a-lock-rpc + # Building efr32-brd4161a-unit-test ninja -C {out}/efr32-brd4161a-unit-test diff --git a/scripts/build/testdata/glob_star_targets_except_host.txt b/scripts/build/testdata/glob_star_targets_except_host.txt index a78108879d08eb..fce80642e1562a 100644 --- a/scripts/build/testdata/glob_star_targets_except_host.txt +++ b/scripts/build/testdata/glob_star_targets_except_host.txt @@ -12,6 +12,7 @@ android-x86-chip-tool efr32-brd4161a-light efr32-brd4161a-light-rpc efr32-brd4161a-lock +efr32-brd4161a-lock-rpc efr32-brd4161a-unit-test efr32-brd4161a-window-covering esp32-c3devkit-all-clusters