Update test scripts Change-Id: I77ff10400cd37ede41db6b3f2de6ae196d994d35 Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/zephyr-integration/+/150914 Reviewed-by: Rob Mohr <mohrr@google.com> Commit-Queue: Yuval Peress <peress@google.com>
diff --git a/.gitignore b/.gitignore index ada8ad6..b4ca886 100644 --- a/.gitignore +++ b/.gitignore
@@ -2,14 +2,6 @@ build/ twister-out*/ -# West modules and install directories -bootloader/ -modules/ -pigweed/ -tools/ -zephyr/ -.west - # IDE specific directories .idea/
diff --git a/.gitmodules b/.gitmodules index e69de29..e6ebcb2 100644 --- a/.gitmodules +++ b/.gitmodules
@@ -0,0 +1,8 @@ +[submodule "zephyr"] + path = zephyr + url = git@github.com:zephyrproject-rtos/zephyr.git + branch = main +[submodule "pigweed"] + path = pigweed + url = https://pigweed.googlesource.com/pigweed/pigweed/ + branch = main
diff --git a/config/zephyr_integration.json b/config/zephyr_integration.json index d38bb68..5e57a3a 100644 --- a/config/zephyr_integration.json +++ b/config/zephyr_integration.json
@@ -27,6 +27,15 @@ "tags": [ "version:2@21.7" ] + }, + { + "path": "infra/3pp/tools/zephyr_sdk/${platform}", + "platforms": [ + "linux-amd64" + ], + "tags": [ + "version:2@0.16.1" + ] } ] }
diff --git a/manifest/west.yml b/manifest/west.yml deleted file mode 100644 index d095313..0000000 --- a/manifest/west.yml +++ /dev/null
@@ -1,34 +0,0 @@ -# Copyright 2022 The Pigweed 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 -# -# https://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. - -manifest: - self: - path: zephyr-integration - - remotes: - - name: zephyrproject-rtos - url-base: https://github.com/zephyrproject-rtos - - name: pigweed - url-base: https://pigweed.googlesource.com/pigweed - - projects: - - name: zephyr - remote: zephyrproject-rtos - revision: main - clone-depth: 50 - import: true - - name: pigweed - remote: pigweed - revision: main - clone-depth: 50
diff --git a/pigweed b/pigweed new file mode 160000 index 0000000..e4754e7 --- /dev/null +++ b/pigweed
@@ -0,0 +1 @@ +Subproject commit e4754e73b724bcbc82336003a43bdd87f162b8b8
diff --git a/run_tests.sh b/run_tests.sh new file mode 100755 index 0000000..091b2d5 --- /dev/null +++ b/run_tests.sh
@@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +git config --global --add safe.directory '*' + +#mkdir -p build_overrides +#touch build_overrides/pigweed_environment.gni + +# Set up Pigweed's environment. +. ./bootstrap.sh +pip install -r zephyr/scripts/requirements.txt + +# Use python protobuf +export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python +export PW_ROOT=$(pwd)/pigweed + +./zephyr/scripts/twister -v -c -i \ + -p native_posix \ + --ninja \ + -x=ZEPHYR_MODULES=${PW_ROOT} \ + -x=ZEPHYR_BASE=$(pwd)/zephyr \ + -T pigweed/
diff --git a/samples/pw_rpc/CMakeLists.txt b/samples/pw_rpc/CMakeLists.txt deleted file mode 100644 index 184248f..0000000 --- a/samples/pw_rpc/CMakeLists.txt +++ /dev/null
@@ -1,60 +0,0 @@ -# Copyright 2022 The Pigweed 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 -# -# https://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.20) - -set(BOARD native_posix) -set(NO_BUILD_TYPE_WARNING ON) -set(CMAKE_VERBOSE_MAKEFILE ON) - -# Use this copy of Pigweed -get_filename_component(PW_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../pigweed" ABSOLUTE) -set(ENV{PW_ROOT} ${PW_ROOT}) - -set(pw_third_party_nanopb_ADD_SUBDIRECTORY ON CACHE BOOL "" FORCE) - -list(APPEND ZEPHYR_EXTRA_MODULES - ${PW_ROOT} -) - -find_package(Zephyr REQUIRED PATHS $ENV{ZEPHYR_BASE}) -project(rpc_demo) - -add_definitions(-DVERSION=5) -add_definitions(-DCONFIG_RPC_BUFFER_SIZE=1024) -add_definitions(-DPW_LOG_LEVEL=PW_LOG_LEVEL_INFO) -add_definitions(-DPW_LOG_SHOW_MODULE=1) - -# Define the proto library -include($ENV{PW_ROOT}/pw_protobuf_compiler/proto.cmake) -pw_proto_library( - rpc_demo.protos - SOURCES proto/demo.proto -) - -file(GLOB app_sources src/*.cc) -target_sources(app - PRIVATE - ${app_sources} -) -zephyr_include_directories(include) -zephyr_link_libraries( - rpc_demo.protos.nanopb - rpc_demo.protos.nanopb_rpc -) -target_link_libraries(app - PRIVATE - rpc_demo.protos.nanopb - rpc_demo.protos.nanopb_rpc -)
diff --git a/samples/pw_rpc/include/rpc_demo/client/client_reader.h b/samples/pw_rpc/include/rpc_demo/client/client_reader.h deleted file mode 100644 index b9b9b64..0000000 --- a/samples/pw_rpc/include/rpc_demo/client/client_reader.h +++ /dev/null
@@ -1,38 +0,0 @@ -// Copyright 2022 The Pigweed 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 -// -// https://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. -#pragma once - -#include <pw_hdlc/rpc_channel.h> -#include <pw_hdlc/rpc_packets.h> -#include <pw_rpc/client.h> -#include <pw_stream/stream.h> - -#include <array> -#include <atomic> - -namespace rpc_demo { - -class ClientReader { - public: - ClientReader(pw::stream::Reader& rx, pw::rpc::Client* rpc_client); - bool ParsePacket(); - - private: - pw::stream::Reader& rx_; - pw::rpc::Client* rpc_client_; - std::array<std::byte, CONFIG_RPC_BUFFER_SIZE> decode_buffer_; - pw::hdlc::Decoder decoder_; -}; - -} // namespace rpc_demo
diff --git a/samples/pw_rpc/include/rpc_demo/deque_stream.h b/samples/pw_rpc/include/rpc_demo/deque_stream.h deleted file mode 100644 index f34d07c..0000000 --- a/samples/pw_rpc/include/rpc_demo/deque_stream.h +++ /dev/null
@@ -1,32 +0,0 @@ -// Copyright 2022 The Pigweed 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 -// -// https://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. -#pragma once - -#include <pw_stream/stream.h> -#include <pw_sync/mutex.h> - -#include <deque> - -class DequeReadWriter : public pw::stream::NonSeekableReaderWriter { - public: - DequeReadWriter() = default; - - protected: - pw::StatusWithSize DoRead(pw::ByteSpan destination) override; - pw::Status DoWrite(pw::ConstByteSpan data) override; - - private: - std::deque<std::byte> buff_; - pw::sync::Mutex mutex_; -};
diff --git a/samples/pw_rpc/include/rpc_demo/rxtx.h b/samples/pw_rpc/include/rpc_demo/rxtx.h deleted file mode 100644 index f20db35..0000000 --- a/samples/pw_rpc/include/rpc_demo/rxtx.h +++ /dev/null
@@ -1,26 +0,0 @@ -// Copyright 2022 The Pigweed 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 -// -// https://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. -#pragma once - -#include <pw_stream/stream.h> - -/** - * @return The ReaderWriter stream used for client-to-service communication. - */ -pw::stream::ReaderWriter& ClientToServiceStream(); - -/** - * @return The ReaderWriter stream used for service-to-client communication. - */ -pw::stream::ReaderWriter& ServiceToClientStream();
diff --git a/samples/pw_rpc/include/rpc_demo/service/demo_service.h b/samples/pw_rpc/include/rpc_demo/service/demo_service.h deleted file mode 100644 index 377981d..0000000 --- a/samples/pw_rpc/include/rpc_demo/service/demo_service.h +++ /dev/null
@@ -1,37 +0,0 @@ -// Copyright 2022 The Pigweed 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 -// -// https://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. -#pragma once - -#include "proto/demo.rpc.pb.h" - -namespace rpc_demo { - -class DemoService : public pw_rpc::nanopb::DemoService::Service<DemoService> { - public: - ::pw::Status GetVersion(const ::rpc_demo_Empty& request, - ::rpc_demo_GetVersionResponse& response); - - ::pw::Status GetSensorList(const ::rpc_demo_Empty& request, - ::rpc_demo_GetSensorListResponse& response); - - ::pw::Status UpdateSensorFrequency( - const ::rpc_demo_UpdateSensorFrequencyRequest& request, - ::rpc_demo_UpdateSensorFrequencyResponse& response); - - ::pw::Status GetSensorSamples( - const ::rpc_demo_GetSensorSamplesRequest& request, - ::rpc_demo_GetSensorSamplesResponse& response); -}; - -} // namespace rpc_demo \ No newline at end of file
diff --git a/samples/pw_rpc/include/rpc_demo/service/service_reader.h b/samples/pw_rpc/include/rpc_demo/service/service_reader.h deleted file mode 100644 index 2f9835b..0000000 --- a/samples/pw_rpc/include/rpc_demo/service/service_reader.h +++ /dev/null
@@ -1,43 +0,0 @@ -// Copyright 2022 The Pigweed 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 -// -// https://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. -#pragma once - -#include <pw_hdlc/rpc_channel.h> -#include <pw_span/span.h> -#include <pw_stream/stream.h> - -#include <atomic> -#include <thread> - -#include "rpc_demo/service/demo_service.h" - -namespace rpc_demo { - -class ServiceReader { - public: - ServiceReader(pw::stream::Reader* reader, - pw::stream::Writer* writer, - pw::hdlc::RpcChannelOutput* output, - pw::span<pw::rpc::Channel> channels); - - bool ParsePacket(); - - private: - pw::stream::Reader* reader_; - pw::stream::Writer* writer_; - pw::hdlc::RpcChannelOutput* output_; - pw::span<pw::rpc::Channel> channels_; -}; - -} // namespace rpc_demo
diff --git a/samples/pw_rpc/prj.conf b/samples/pw_rpc/prj.conf deleted file mode 100644 index eb7abab..0000000 --- a/samples/pw_rpc/prj.conf +++ /dev/null
@@ -1,47 +0,0 @@ -# Copyright 2022 The Pigweed 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 -# -# https://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. - -CONFIG_ASSERT=y -CONFIG_NANOPB=y -CONFIG_BOARD_NATIVE_POSIX_64BIT=y -CONFIG_LOG=y -CONFIG_LOG_DEFAULT_LEVEL=4 - -CONFIG_PIGWEED_ASSERT=y -CONFIG_PIGWEED_BYTES=y -CONFIG_PIGWEED_CHECKSUM=y -CONFIG_PIGWEED_CHRONO_SYSTEM_CLOCK=y -CONFIG_PIGWEED_CONTAINERS=y -CONFIG_PIGWEED_FUNCTION=y -CONFIG_PIGWEED_HDLC_RPC=y -CONFIG_PIGWEED_INTERRUPT_CONTEXT=y -CONFIG_PIGWEED_LOG=y -CONFIG_PIGWEED_POLYFILL=y -CONFIG_PIGWEED_POLYFILL_OVERRIDES=y -CONFIG_PIGWEED_PREPROCESSOR=y -CONFIG_PIGWEED_RESULT=y -CONFIG_PIGWEED_ROUTER_PACKET_PARSER=y -CONFIG_PIGWEED_RPC_COMMON=y -CONFIG_PIGWEED_SPAN=y -CONFIG_PIGWEED_STATUS=y -CONFIG_PIGWEED_STREAM=y -CONFIG_PIGWEED_STRING=y -CONFIG_PIGWEED_SYNC_MUTEX=y -CONFIG_PIGWEED_SYS_IO=y -CONFIG_PIGWEED_VARINT=y - -CONFIG_CPLUSPLUS=y -CONFIG_STD_CPP17=y -CONFIG_LIB_CPLUSPLUS=y -CONFIG_CPP_MAIN=y
diff --git a/samples/pw_rpc/proto/demo.proto b/samples/pw_rpc/proto/demo.proto deleted file mode 100644 index 122427f..0000000 --- a/samples/pw_rpc/proto/demo.proto +++ /dev/null
@@ -1,74 +0,0 @@ -// Copyright 2022 The Pigweed 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 -// -// https://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. -syntax = "proto3"; - -package rpc_demo; - -message GetVersionResponse { - uint32 version_number = 1; -} - -message ThreeAxisData { - float x = 1; - float y = 2; - float z = 3; -} - -message SensorInfo { - string name = 1; - enum Type { - ACCEL = 0; - GYRO = 1; - MAG = 2; - } - Type type = 2; - uint32 sample_frequency_hz = 3; -} - -message GetSensorListResponse { - repeated SensorInfo sensors = 1; -} - -message UpdateSensorFrequencyRequest { - uint32 sensor_index = 1; - uint32 sample_frequency_hz = 2; -} - -message UpdateSensorFrequencyResponse { - uint32 sample_frequency_hz = 1; -} - -message GetSensorSamplesRequest { - uint32 sensor_index = 1; -} - -message GetSensorSamplesResponse { - repeated ThreeAxisData data = 1; -} - -message Empty {} - -enum RpcClientChannelId { - UNASSIGNED = 0; - DEFAULT = 1; -} - -service DemoService { - rpc GetVersion(Empty) returns (GetVersionResponse) {} - rpc GetSensorList(Empty) returns (GetSensorListResponse) {} - rpc UpdateSensorFrequency(UpdateSensorFrequencyRequest) - returns (UpdateSensorFrequencyResponse) {} - rpc GetSensorSamples(GetSensorSamplesRequest) - returns (GetSensorSamplesResponse) {} -}
diff --git a/samples/pw_rpc/sample.yaml b/samples/pw_rpc/sample.yaml deleted file mode 100644 index acf3ad4..0000000 --- a/samples/pw_rpc/sample.yaml +++ /dev/null
@@ -1,20 +0,0 @@ -sample: - name: pw_rpc sample -tests: - sample.pw_rpc: - tags: pw_rpc - platform_allow: native_posix - timeout: 10 - harness: console - harness_config: - type: multi_line - ordered: true - regex: - - "(.*)Starting RPC demo(.*)" - - "(.*)Service waiting for data(.*)" - - "(.*)Starting pw_rpc service(.*)" - - "(.*)Service got packet!(.*)" - - "(.*)Client waiting for response(.*)" - - "(.*)Reading bytes(.*)" - - "(.*)Client got packet!(.*)" - - "(.*)Received version #5(.*)"
diff --git a/samples/pw_rpc/src/client_reader.cc b/samples/pw_rpc/src/client_reader.cc deleted file mode 100644 index 8e430a1..0000000 --- a/samples/pw_rpc/src/client_reader.cc +++ /dev/null
@@ -1,58 +0,0 @@ -// Copyright 2022 The Pigweed 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 -// -// https://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. -#define PW_LOG_MODULE_NAME "ClientReader" - -#include "rpc_demo/client/client_reader.h" - -#include <pw_hdlc/decoder.h> -#include <pw_hdlc/rpc_packets.h> -#include <pw_log/log.h> -#include <pw_status/status.h> - -namespace rpc_demo { - -ClientReader::ClientReader(pw::stream::Reader &rx, pw::rpc::Client *rpc_client) - : rx_(rx), rpc_client_(rpc_client), decode_buffer_(), - decoder_(decode_buffer_) {} - -bool ClientReader::ParsePacket() { - PW_LOG_INFO("Reading bytes..."); - while (true) { - std::byte data; - if (auto result = rx_.Read(&data, 1); !result.ok()) { - PW_LOG_ERROR("Failed to read data"); - continue; - } - PW_LOG_DEBUG("0x%02x", static_cast<uint8_t>(data)); - - pw::Result<pw::hdlc::Frame> result = decoder_.Process(data); - if (!result.ok()) { - continue; - } - - pw::hdlc::Frame &frame = result.value(); - if (frame.address() != pw::hdlc::kDefaultRpcAddress) { - return false; - } - - PW_LOG_INFO("Client got packet!"); - auto client_result = rpc_client_->ProcessPacket(frame.data()); - PW_LOG_DEBUG("Client ProcessPacket status (%s)", - pw_StatusString(client_result)); - decoder_.Clear(); - return true; - } -} - -} // namespace rpc_demo
diff --git a/samples/pw_rpc/src/demo_service.cc b/samples/pw_rpc/src/demo_service.cc deleted file mode 100644 index 1707965..0000000 --- a/samples/pw_rpc/src/demo_service.cc +++ /dev/null
@@ -1,55 +0,0 @@ -// Copyright 2022 The Pigweed 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 -// -// https://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. -#include "rpc_demo/service/demo_service.h" - -namespace rpc_demo { - -// Method definitions for pw_demo.DemoHostService. -::pw::Status DemoService::GetVersion(const rpc_demo_Empty& request, - rpc_demo_GetVersionResponse& response) { - static_cast<void>(request); - response.version_number = VERSION; - return ::pw::OkStatus(); -} - -::pw::Status DemoService::GetSensorList( - const rpc_demo_Empty& request, rpc_demo_GetSensorListResponse& response) { - // TODO: Read the request as appropriate for your application - static_cast<void>(request); - // TODO: Fill in the response as appropriate for your application - static_cast<void>(response); - return ::pw::Status::Unimplemented(); -} - -::pw::Status DemoService::UpdateSensorFrequency( - const rpc_demo_UpdateSensorFrequencyRequest& request, - rpc_demo_UpdateSensorFrequencyResponse& response) { - // TODO: Read the request as appropriate for your application - static_cast<void>(request); - // TODO: Fill in the response as appropriate for your application - static_cast<void>(response); - return ::pw::Status::Unimplemented(); -} - -::pw::Status DemoService::GetSensorSamples( - const rpc_demo_GetSensorSamplesRequest& request, - rpc_demo_GetSensorSamplesResponse& response) { - // TODO: Read the request as appropriate for your application - static_cast<void>(request); - // TODO: Fill in the response as appropriate for your application - static_cast<void>(response); - return ::pw::Status::Unimplemented(); -} - -} // namespace rpc_demo
diff --git a/samples/pw_rpc/src/deque_stream.cc b/samples/pw_rpc/src/deque_stream.cc deleted file mode 100644 index e05df96..0000000 --- a/samples/pw_rpc/src/deque_stream.cc +++ /dev/null
@@ -1,37 +0,0 @@ -// Copyright 2022 The Pigweed 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 -// -// https://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. -#include <mutex> -#include "rpc_demo/deque_stream.h" - -pw::StatusWithSize DequeReadWriter::DoRead(pw::ByteSpan destination) { - size_t count = 0; - std::lock_guard lock(mutex_); - - while (!buff_.empty() && count < destination.size_bytes()) { - destination[count++] = buff_.front(); - buff_.pop_front(); - } - - auto status = (count == 0) ? pw::Status::OutOfRange() : pw::OkStatus(); - return pw::StatusWithSize(status, count); -} - -pw::Status DequeReadWriter::DoWrite(pw::ConstByteSpan data) { - std::lock_guard lock(mutex_); - for (size_t i = 0; i < data.size_bytes(); ++i) { - buff_.push_back(data[i]); - } - - return pw::OkStatus(); -}
diff --git a/samples/pw_rpc/src/main.cc b/samples/pw_rpc/src/main.cc deleted file mode 100644 index 35964e2..0000000 --- a/samples/pw_rpc/src/main.cc +++ /dev/null
@@ -1,85 +0,0 @@ -// Copyright 2022 The Pigweed 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 -// -// https://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. -#define PW_LOG_MODULE_NAME "MAIN" - -#include <pw_hdlc/rpc_channel.h> -#include <pw_hdlc/rpc_packets.h> -#include <pw_log/log.h> -#include <pw_status/status.h> - -#include "proto/demo.pb.h" -#include "rpc_demo/client/client_reader.h" -#include "rpc_demo/service/service_reader.h" -#include "rpc_demo/rxtx.h" - - -namespace { -// Create the client channel output with a built-in buffer. -pw::hdlc::RpcChannelOutput - client_to_service_channel_output(ClientToServiceStream().as_writer(), - pw::hdlc::kDefaultRpcAddress, - "HDLC client output"); -pw::hdlc::RpcChannelOutput - service_to_client_channel_output(ServiceToClientStream().as_writer(), - pw::hdlc::kDefaultRpcAddress, - "HDLC service output"); - -// Configure the channel. Is this an output channel only? -pw::rpc::Channel client_channels[] = { - pw::rpc::Channel::Create<rpc_demo_RpcClientChannelId_DEFAULT, - rpc_demo_RpcClientChannelId>( - &client_to_service_channel_output), -}; -pw::rpc::Channel service_channels[] = { - pw::rpc::Channel::Create<rpc_demo_RpcClientChannelId_DEFAULT, - rpc_demo_RpcClientChannelId>( - &service_to_client_channel_output), -}; - -pw::rpc::Client rpc_client(client_channels); -rpc_demo::pw_rpc::nanopb::DemoService::Client - service_client(rpc_client, rpc_demo_RpcClientChannelId_DEFAULT); - -void GetVersionResponse(const rpc_demo_GetVersionResponse &response, - pw::Status status) { - if (status.ok()) { - PW_LOG_INFO("Received version #%u", response.version_number); - } else { - PW_LOG_ERROR("Failed to get version number, status: %s", - pw_StatusString(status)); - } -} - -} // namespace - -int main(void) { - PW_LOG_INFO("Starting RPC demo..."); - rpc_demo::ServiceReader ec_service( - &ClientToServiceStream().as_reader(), - &ServiceToClientStream().as_writer(), - reinterpret_cast<pw::hdlc::RpcChannelOutput*>( - &service_to_client_channel_output), - service_channels); - rpc_demo::ClientReader ap_client(ServiceToClientStream().as_reader(), &rpc_client); - - auto response = service_client.GetVersion(rpc_demo_Empty_init_default, - GetVersionResponse); - PW_ASSERT(response.active()); - PW_LOG_INFO("Service waiting for data..."); - PW_ASSERT(ec_service.ParsePacket()); - PW_LOG_INFO("Client waiting for response..."); - PW_ASSERT(ap_client.ParsePacket()); - - return 0; -}
diff --git a/samples/pw_rpc/src/rxtx.cc b/samples/pw_rpc/src/rxtx.cc deleted file mode 100644 index 52c1982..0000000 --- a/samples/pw_rpc/src/rxtx.cc +++ /dev/null
@@ -1,28 +0,0 @@ -// Copyright 2022 The Pigweed 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 -// -// https://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. - -#include "rpc_demo/rxtx.h" -#include "rpc_demo/deque_stream.h" - -namespace { -DequeReadWriter client_to_service_stream; -DequeReadWriter service_to_client_stream; -} // namespace - -pw::stream::ReaderWriter &ClientToServiceStream() { - return client_to_service_stream; -} -pw::stream::ReaderWriter &ServiceToClientStream() { - return service_to_client_stream; -}
diff --git a/samples/pw_rpc/src/service_reader.cc b/samples/pw_rpc/src/service_reader.cc deleted file mode 100644 index aaf888d..0000000 --- a/samples/pw_rpc/src/service_reader.cc +++ /dev/null
@@ -1,70 +0,0 @@ -// Copyright 2022 The Pigweed 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 -// -// https://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. -#define PW_LOG_MODULE_NAME "ServiceReader" - -#include "rpc_demo/service/service_reader.h" - -#include <pw_hdlc/rpc_channel.h> -#include <pw_hdlc/rpc_packets.h> -#include <pw_log/log.h> -#include <pw_span/span.h> - -namespace rpc_demo { - -ServiceReader::ServiceReader(pw::stream::Reader* reader, - pw::stream::Writer* writer, - pw::hdlc::RpcChannelOutput* output, - pw::span<pw::rpc::Channel> channels) - : reader_(reader), writer_(writer), output_(output), channels_(channels) {} - -bool ServiceReader::ParsePacket() { - std::array<std::byte, CONFIG_RPC_BUFFER_SIZE> decode_buffer{}; - pw::rpc::Server server(channels_); - pw::hdlc::Decoder decoder(decode_buffer); - DemoService service; - - server.RegisterService(service); - - // Input buffer - PW_LOG_INFO("Starting pw_rpc service..."); - while (true) { - std::byte data; - - if (auto result = reader_->Read(&data, 1); !result.ok()) { - std::this_thread::sleep_for(std::chrono::milliseconds(50)); - continue; - } - - PW_LOG_DEBUG("0x%02x", static_cast<uint8_t>(data)); - auto result = decoder.Process(data); - if (!result.ok()) { - continue; - } - - auto& frame = result.value(); - if (frame.address() != pw::hdlc::kDefaultRpcAddress) { - decoder.Clear(); - return false; - } - - PW_LOG_INFO("Service got packet!"); - auto server_result = server.ProcessPacket(frame.data()); - PW_LOG_DEBUG("Client ProcessPacket status (%s)", - pw_StatusString(server_result)); - decoder.Clear(); - return true; - } -} - -} // namespace rpc_demo
diff --git a/samples/pw_tokenizer/CMakeLists.txt b/samples/pw_tokenizer/CMakeLists.txt deleted file mode 100644 index e042dfd..0000000 --- a/samples/pw_tokenizer/CMakeLists.txt +++ /dev/null
@@ -1,52 +0,0 @@ -# Copyright 2022 The Pigweed 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 -# -# https://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.20) - -set(BOARD native_posix) -set(NO_BUILD_TYPE_WARNING ON) -set(CMAKE_VERBOSE_MAKEFILE ON) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - -# Use this copy of Pigweed -get_filename_component(PW_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../pigweed" ABSOLUTE) -set(ENV{PW_ROOT} ${PW_ROOT}) - -set(pw_third_party_nanopb_ADD_SUBDIRECTORY ON CACHE BOOL "" FORCE) - -list(APPEND ZEPHYR_EXTRA_MODULES ${PW_ROOT}) - -find_package(Zephyr REQUIRED PATHS $ENV{ZEPHYR_BASE}) -project(tokenizer_demo) - -target_sources(app PRIVATE src/main.cc) - -# Add custom logic to generate database.bin -# The application expects it to be in the binary dir. -add_custom_target(database_binary - DEPENDS - ${CMAKE_BINARY_DIR}/database.bin -) -add_custom_command( - OUTPUT ${CMAKE_BINARY_DIR}/database.bin - COMMAND - ${PYTHON_EXECUTABLE} - ${PW_ROOT}/pw_tokenizer/py/pw_tokenizer/database.py - create - --type binary - -d ${CMAKE_BINARY_DIR}/database.bin - ${CMAKE_BINARY_DIR}/zephyr/zephyr_pre0.elf - DEPENDS zephyr_pre0 -) -add_dependencies(${logical_target_for_zephyr_elf} database_binary)
diff --git a/samples/pw_tokenizer/prj.conf b/samples/pw_tokenizer/prj.conf deleted file mode 100644 index 4555b22..0000000 --- a/samples/pw_tokenizer/prj.conf +++ /dev/null
@@ -1,24 +0,0 @@ -# Copyright 2022 The Pigweed 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 -# -# https://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. - -CONFIG_ASSERT=y - -CONFIG_PIGWEED_ASSERT=y -CONFIG_PIGWEED_TOKENIZER=y -CONFIG_PIGWEED_DETOKENIZER=y - -CONFIG_CPLUSPLUS=y -CONFIG_STD_CPP17=y -CONFIG_LIB_CPLUSPLUS=y -CONFIG_CPP_MAIN=y
diff --git a/samples/pw_tokenizer/sample.yaml b/samples/pw_tokenizer/sample.yaml deleted file mode 100644 index e4ecca8..0000000 --- a/samples/pw_tokenizer/sample.yaml +++ /dev/null
@@ -1,14 +0,0 @@ -sample: - name: pw_tokenizer sample -tests: - sample.pw_tokenizer: - tags: pw_tokenizer - platform_allow: native_posix - timeout: 10 - harness: console - harness_config: - type: multi_line - regex: - - "token=\\d+" - - "tokenized buffer size is 9 bytes" - - "detokenized message size is 17 bytes"
diff --git a/samples/pw_tokenizer/src/main.cc b/samples/pw_tokenizer/src/main.cc deleted file mode 100644 index efe69af..0000000 --- a/samples/pw_tokenizer/src/main.cc +++ /dev/null
@@ -1,83 +0,0 @@ -// Copyright 2022 The Pigweed 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 -// -// https://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. - -#include <cstring> -#include <fstream> -#include <pw_assert/assert.h> -#include <pw_tokenizer/detokenize.h> -#include <pw_tokenizer/tokenize.h> -#include <string_view> -#include <vector> -#include <zephyr/kernel.h> - -static std::vector<uint8_t> ReadWholeFile(const char *path) { - // Open the file - std::ifstream file(path, std::ios::binary); - - // Stop eating new lines in binary mode - file.unsetf(std::ios::skipws); - - // Get the file size - std::streampos file_size; - - file.seekg(0, std::ios::end); - file_size = file.tellg(); - file.seekg(0, std::ios::beg); - - // Reserve capacity - std::vector<uint8_t> data; - data.reserve(file_size); - - // Read the data - data.insert(data.begin(), std::istream_iterator<uint8_t>(file), - std::istream_iterator<uint8_t>()); - - return data; -} - -pw::tokenizer::Detokenizer OpenDatabase(const char *path) { - std::vector<uint8_t> data = ReadWholeFile(path); - - pw::tokenizer::TokenDatabase database = - pw::tokenizer::TokenDatabase::Create(data); - - // This checks if the file contained a valid database. - PW_ASSERT(database.ok()); - return pw::tokenizer::Detokenizer(database); -} - -constexpr uint32_t kHelloWorldToken = PW_TOKENIZE_STRING("Hello tokenized world!"); - -int main(void) { - char expected_string[1024]; - uint8_t buffer[1024]; - size_t size_bytes = sizeof(buffer); - - pw::tokenizer::Detokenizer detokenizer = OpenDatabase("database.bin"); - - sprintf(expected_string, "token=%u\n", kHelloWorldToken); - printk(expected_string); - PW_TOKENIZE_TO_BUFFER(buffer, &size_bytes, "token=%u\n", kHelloWorldToken); - - printk("tokenized buffer size is %u bytes\n", size_bytes); - - auto detokenized_string = detokenizer.Detokenize(buffer, size_bytes); - PW_ASSERT(detokenized_string.ok()); - PW_ASSERT(strcmp(detokenized_string.BestString().c_str(), expected_string) == - 0); - printk("detokenized message size is %u bytes\n", - strlen(detokenized_string.BestString().c_str())); - - return 0; -}
diff --git a/test.sh b/test.sh index 63c181a..1a07938 100755 --- a/test.sh +++ b/test.sh
@@ -4,23 +4,28 @@ set -x set -o pipefail +#function cleanup { +# set +e +# docker kill zephyr +# docker rm zephyr +#} +# +#trap cleanup EXIT + cd $(dirname "$BASH_SOURCE") -# Set up Pigweed's environment. -. ./bootstrap.sh -pip install --upgrade pigweed +# Needed for docker to work +chmod a+w zephyr/scripts/pylib/twister +chmod a+w build_overrides -# Set up Zephyr's environment. -pip install west -west init -l manifest -west update -pip install -r zephyr/scripts/requirements.txt +docker run \ + --name zephyr \ + --rm \ + -v $(pwd):/workdir \ + -e ZEPHYR_TOOLCHAIN_VARIANT=zephyr \ + -e BSIM_COMPONENTS_PATH=/opt/bsim/components \ + -e BSIM_OUT_PATH=/opt/bsim \ + -w /workdir \ + ghcr.io/zephyrproject-rtos/zephyr-build:latest \ + ./run_tests.sh -# Use host toolchain -export ZEPHYR_TOOLCHAIN_VARIANT=host - -# Use python protobuf -export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python - -# Run Pigweed/Zephyr tests. -./zephyr/scripts/twister -v -c -i -T samples/
diff --git a/zephyr b/zephyr new file mode 160000 index 0000000..7b2034a --- /dev/null +++ b/zephyr
@@ -0,0 +1 @@ +Subproject commit 7b2034aaecc4cb2a261973b10b2fa608b29d398c