Skip to content

Commit

Permalink
[Telink] Add chef app example (#28701)
Browse files Browse the repository at this point in the history
* Restyled by autopep8

* [Telink] add telink support to chef.py

* [Telink] addtelink platform compatibility with chef example

* [Telink] remove README

* Restyled by whitespace

* Restyled by clang-format

* Restyled by autopep8

* [Telink] fix code style

---------

Co-authored-by: Restyled.io <commits@restyled.io>
Co-authored-by: UR6LAL <ur6lal@gmail.com>
  • Loading branch information
3 people authored Aug 29, 2023
1 parent a6dae2c commit 0ff8f19
Show file tree
Hide file tree
Showing 8 changed files with 581 additions and 4 deletions.
40 changes: 36 additions & 4 deletions examples/chef/chef.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ def load_config() -> None:
config["esp32"] = dict()
config["silabs-thread"] = dict()
config["ameba"] = dict()
config["telink"] = dict()
configFile = f"{_CHEF_SCRIPT_PATH}/config.yaml"
if (os.path.exists(configFile)):
configStream = open(configFile, 'r')
Expand All @@ -88,6 +89,8 @@ def load_config() -> None:
config["ameba"]["MATTER_SDK"] = None
config["ameba"]["MODEL"] = 'D'
config["ameba"]["TTY"] = None
config["telink"]["ZEPHYR_BASE"] = os.environ.get('ZEPHYR_BASE')
config["telink"]["TTY"] = None

flush_print(yaml.dump(config))
yaml.dump(config, configStream)
Expand Down Expand Up @@ -275,6 +278,7 @@ def main() -> int:
linux
silabs-thread
ameba
telink
Device Types:
{deviceTypes}
Expand Down Expand Up @@ -312,7 +316,7 @@ def main() -> int:
dest="build_target",
help="specifies target platform. See info below for currently supported target platforms",
choices=['nrfconnect', 'esp32',
'linux', 'silabs-thread', 'ameba'],
'linux', 'silabs-thread', 'ameba', 'telink'],
metavar="TARGET",
default="linux")
parser.add_option("-r", "--rpc",
Expand Down Expand Up @@ -514,6 +518,16 @@ def main() -> int:
if (config['ameba']['MODEL'] != 'D' and config['ameba']['MODEL'] != 'Z2'):
flush_print("Ameba Model is not recognized, please input D or Z2")
exit(1)
elif options.build_target == "telink":
if config['telink']['ZEPHYR_BASE'] is None:
flush_print(
'Path for Telink SDK was not found. Make sure Telink_SDK is set on your config.yaml file')
exit(1)
shell.run_cmd("export ZEPHYR_TOOLCHAIN_VARIANT=zephyr")
shell.run_cmd(
f"export ZEPHYR_BASE={config['telink']['ZEPHYR_BASE']}")
shell.run_cmd(
f'source {config["telink"]["ZEPHYR_BASE"]}/zephyr-env.sh')
else:
flush_print(f"Target {options.build_target} not supported")

Expand All @@ -536,7 +550,8 @@ def main() -> int:
flush_print("Linux toolchain update not supported. Skipping")
elif options.build_target == "Ameba":
flush_print("Ameba toolchain update not supported. Skipping")

elif options.build_target == "telink":
flush_print("Telink toolchain update not supported. Skipping")
#
# Clean environment
#
Expand Down Expand Up @@ -606,6 +621,8 @@ def main() -> int:
flush_print("Menuconfig not available on Linux target. Skipping")
elif options.build_target == "Ameba":
flush_print("Menuconfig not available on Ameba target. Skipping")
elif options.build_target == "telink":
flush_print("Menuconfig not available on Telink target. Skipping")

#
# Build
Expand Down Expand Up @@ -639,7 +656,7 @@ def main() -> int:

shell.run_cmd(f"cd {_CHEF_SCRIPT_PATH}")

if (options.build_target == "esp32") or (options.build_target == "nrfconnect") or (options.build_target == "ameba"):
if options.build_target in "esp32 nrfconnect ameba telink".split():
with open("project_include.cmake", "w") as f:
f.write(textwrap.dedent(f"""\
set(CONFIG_DEVICE_VENDOR_ID {options.vid})
Expand Down Expand Up @@ -725,6 +742,14 @@ def main() -> int:
shell.run_cmd("make clean")
shell.run_cmd("make chef")
shell.run_cmd("make is")
elif options.build_target == "telink":
shell.run_cmd(f"cd {_CHEF_SCRIPT_PATH}/telink")
telink_build_cmds = ["west build"]
if options.do_clean:
telink_build_cmds.append("-p always")
if options.do_rpc:
telink_build_cmds.append("-- -DOVERLAY_CONFIG=rpc.overlay")
shell.run_cmd(" ".join(telink_build_cmds))

elif options.build_target == "linux":
shell.run_cmd(f"cd {_CHEF_SCRIPT_PATH}/linux")
Expand Down Expand Up @@ -900,7 +925,14 @@ def main() -> int:
shell.run_cmd(f"screen {config['ameba']['TTY']} 115200")
else:
flush_print("Ameba Z2 image has not been flashed yet")

elif options.build_target == "telink":
if config['telink']['TTY'] is None:
flush_print(
'The path for the serial enumeration for telink is not set. '
'Make sure telink.TTY is set on your config.yaml file')
exit(1)
shell.run_cmd("killall screen")
shell.run_cmd(f"screen {config['telink']['TTY']} 115200")
#
# RPC Console
#
Expand Down
1 change: 1 addition & 0 deletions examples/chef/telink/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build/
44 changes: 44 additions & 0 deletions examples/chef/telink/CHIPProjectConfig.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
*
* Copyright (c) 2023 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/**
* @file
* Example project configuration file for CHIP.
*
* This is a place to put application or project-specific overrides
* to the default configuration values for general CHIP features.
*
*/

#pragma once

// Use a default pairing code if one hasn't been provisioned in flash.
#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE 20202021
#define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR 0xF00

/**
* CHIP_SYSTEM_CONFIG_PACKETBUFFER_POOL_SIZE
*
* Reduce packet buffer pool size to 8 (default 15) to reduce ram consumption
*/
#define CHIP_SYSTEM_CONFIG_PACKETBUFFER_POOL_SIZE 8

// Enable support functions for parsing command-line arguments
#define CHIP_CONFIG_ENABLE_ARG_PARSER 1

#define CHIP_DEVICE_CONFIG_DISABLE_SHELL_PING 1
232 changes: 232 additions & 0 deletions examples/chef/telink/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
#
# Copyright (c) 2023 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
cmake_minimum_required(VERSION 3.13.1)

set(BOARD tlsr9518adk80d)

get_filename_component(CHIP_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/third_party/connectedhomeip REALPATH)
get_filename_component(TELINK_COMMON ${CHIP_ROOT}/examples/platform/telink REALPATH)
get_filename_component(GEN_DIR ${CHIP_ROOT}/zzz_generated/ REALPATH)
get_filename_component(CHEF ${CMAKE_CURRENT_SOURCE_DIR}/../ REALPATH)

include(${CHEF}/project_include.cmake)

get_filename_component(GEN_DIR ${CHEF}/out/${SAMPLE_NAME}/zap-generated REALPATH)

if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/boards/${BOARD}.overlay")
set(LOCAL_DTC_OVERLAY_FILE "${CMAKE_CURRENT_SOURCE_DIR}/boards/${BOARD}.overlay")
else()
unset(LOCAL_DTC_OVERLAY_FILE)
endif()

if(EXISTS "${CHIP_ROOT}/src/platform/telink/${BOARD}.overlay")
set(GLOBAL_DTC_OVERLAY_FILE "${CHIP_ROOT}/src/platform/telink/${BOARD}.overlay")
else()
unset(GLOBAL_DTC_OVERLAY_FILE)
endif()

if(DTC_OVERLAY_FILE)
set(DTC_OVERLAY_FILE
"${DTC_OVERLAY_FILE} ${GLOBAL_DTC_OVERLAY_FILE} ${LOCAL_DTC_OVERLAY_FILE}"
CACHE STRING "" FORCE
)
else()
set(DTC_OVERLAY_FILE ${GLOBAL_DTC_OVERLAY_FILE} ${LOCAL_DTC_OVERLAY_FILE})
endif()

set(CONF_FILE ${CHIP_ROOT}/config/telink/app/zephyr.conf prj.conf)

# Load NCS/Zephyr build system
list(APPEND ZEPHYR_EXTRA_MODULES ${CHIP_ROOT}/config/telink/chip-module)
find_package(Zephyr HINTS $ENV{ZEPHYR_BASE})

project(chip-telink-chef-example)

include(${CHIP_ROOT}/config/telink/app/enable-gnu-std.cmake)
include(${CHIP_ROOT}/src/app/chip_data_model.cmake)

target_compile_options(app PRIVATE -fpermissive)

target_include_directories(app PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${GEN_DIR}/app-common
${GEN_DIR}
${CHEF}
${GEN_DIR}/../
${CHIP_ROOT}/src
${CHEF}/shell_common/include
${TELINK_COMMON}/common/include
${TELINK_COMMON}/util/include
)

if (CONFIG_CHIP_LIB_SHELL)
target_sources(app PRIVATE
${CHEF}/shell_common/globals.cpp
${CHEF}/shell_common/cmd_misc.cpp
${CHEF}/shell_common/cmd_otcli.cpp
)

target_include_directories(app PRIVATE
${CHEF}/shell_common/include
)
endif()

add_definitions(
"-DCHIP_ADDRESS_RESOLVE_IMPL_INCLUDE_HEADER=<lib/address_resolve/AddressResolve_DefaultImpl.h>"
)

target_sources(app PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
${CHEF}/common/stubs.cpp
)

message(STATUS ${CHEF}/devices/${SAMPLE_NAME}.zap)

chip_configure_data_model(app
INCLUDE_SERVER
ZAP_FILE ${CHEF}/devices/${SAMPLE_NAME}.zap
)


if(CONFIG_CHIP_OTA_REQUESTOR)
target_sources(app PRIVATE ${TELINK_COMMON}/util/src/OTAUtil.cpp)
endif()

if (CONFIG_CHIP_PW_RPC)

# Make all targets created below depend on zephyr_interface to inherit MCU-related compilation flags
link_libraries($<BUILD_INTERFACE:zephyr_interface>)

set(PIGWEED_ROOT "${CHIP_ROOT}/third_party/pigweed/repo")
include(${PIGWEED_ROOT}/pw_build/pigweed.cmake)
include(${PIGWEED_ROOT}/pw_protobuf_compiler/proto.cmake)

include($ENV{PW_ROOT}/pw_assert/backend.cmake)
include($ENV{PW_ROOT}/pw_log/backend.cmake)
include($ENV{PW_ROOT}/pw_sys_io/backend.cmake)

pw_set_module_config(pw_rpc_CONFIG pw_rpc.disable_global_mutex_config)
pw_set_backend(pw_log pw_log_basic)
pw_set_backend(pw_assert.check pw_assert_log.check_backend)
pw_set_backend(pw_assert.assert pw_assert.assert_compatibility_backend)
pw_set_backend(pw_sys_io pw_sys_io.telink)

set(dir_pw_third_party_nanopb "${CHIP_ROOT}/third_party/nanopb/repo" CACHE STRING "" FORCE)

add_subdirectory(third_party/connectedhomeip/third_party/pigweed/repo)
add_subdirectory(third_party/connectedhomeip/third_party/nanopb/repo)
add_subdirectory(third_party/connectedhomeip/examples/platform/telink/pw_sys_io)

pw_proto_library(attributes_service
SOURCES
${CHIP_ROOT}/examples/common/pigweed/protos/attributes_service.proto
INPUTS
${CHIP_ROOT}/examples/common/pigweed/protos/attributes_service.options
PREFIX
attributes_service
STRIP_PREFIX
${CHIP_ROOT}/examples/common/pigweed/protos
DEPS
pw_protobuf.common_proto
)

pw_proto_library(descriptor_service
SOURCES
${CHIP_ROOT}/examples/common/pigweed/protos/descriptor_service.proto
PREFIX
descriptor_service
STRIP_PREFIX
${CHIP_ROOT}/examples/common/pigweed/protos
DEPS
pw_protobuf.common_proto
)

pw_proto_library(device_service
SOURCES
${CHIP_ROOT}/examples/common/pigweed/protos/device_service.proto
INPUTS
${CHIP_ROOT}/examples/common/pigweed/protos/device_service.options
PREFIX
device_service
STRIP_PREFIX
${CHIP_ROOT}/examples/common/pigweed/protos
DEPS
pw_protobuf.common_proto
)

pw_proto_library(ot_cli_service
SOURCES
${CHIP_ROOT}/examples/common/pigweed/protos/ot_cli_service.proto
INPUTS
${CHIP_ROOT}/examples/common/pigweed/protos/ot_cli_service.options
STRIP_PREFIX
${CHIP_ROOT}/examples/common/pigweed/protos
PREFIX
ot_cli_service
DEPS
pw_protobuf.common_proto
)

pw_proto_library(thread_service
SOURCES
${CHIP_ROOT}/examples/common/pigweed/protos/thread_service.proto
INPUTS
${CHIP_ROOT}/examples/common/pigweed/protos/thread_service.options
STRIP_PREFIX
${CHIP_ROOT}/examples/common/pigweed/protos
PREFIX
thread_service
DEPS
pw_protobuf.common_proto
)

target_sources(app PRIVATE
../../common/pigweed/RpcService.cpp
../../common/pigweed/telink/PigweedLoggerMutex.cpp
${TELINK_COMMON}/Rpc.cpp
${TELINK_COMMON}/util/src/PigweedLogger.cpp
)

target_include_directories(app PRIVATE
${PIGWEED_ROOT}/pw_sys_io/public
${CHIP_ROOT}/src/lib/support
${CHIP_ROOT}/src/system
${TELINK_COMMON}
../../common
../../common/pigweed
../../common/pigweed/telink)

target_compile_options(app PRIVATE
"-DPW_RPC_ATTRIBUTE_SERVICE=1"
"-DPW_RPC_DESCRIPTOR_SERVICE=1"
"-DPW_RPC_DEVICE_SERVICE=1"
"-DPW_RPC_THREAD_SERVICE=1"
)

target_link_libraries(app PRIVATE
attributes_service.nanopb_rpc
descriptor_service.nanopb_rpc
device_service.nanopb_rpc
thread_service.nanopb_rpc
pw_checksum
pw_hdlc
pw_hdlc.pw_rpc
pw_log
pw_rpc.server
pw_sys_io
)

endif(CONFIG_CHIP_PW_RPC)
Loading

0 comments on commit 0ff8f19

Please sign in to comment.