Changelog#

Aug 25, 2023 to Sep 08, 2023#

Highlights (Aug 25, 2023 to Sep 08, 2023):

  • SEED 0107: Pigweed Communications has been approved! Pigweed will adopt a new sockets API as its primary networking abstraction. The sockets API will be backed by a new, lightweight embedded-focused network protocol stack inspired by TCP/IP.

  • SEED 0108: Emulators Frontend has also been approved! Coming soon, the new pw_emu module will make it easier to work with emulators.

Please join us at the next Pigweed Live on Mon, Sep 11 1PM PST to discuss All Things Pigweed. Go to the #pigweed-live channel to get a link to the video meeting.

Active SEEDs#

Help shape the future of Pigweed! Please leave feedback on the following active RFCs (SEEDs):

Modules#

pw_assert#

We fixed circular dependencies in Bazel.

pw_bluetooth#

We added Emboss definitions.

pw_build#

pw_build_mcuxpresso#

pw_cpu_exception#

We added Bazel support.

pw_crypto#

The complete pw_crypto API reference is now documented on pw_crypto.

pw_env_setup#

Banners should not print correctly on Windows.

pw_file#

pw_function#

The pw::bind_member() template is now exposed in the public API. bind_member() is useful for binding the this argument of a callable. We added a section to the docs explaining why pw::Function is not a literal.

pw_fuzzer#

We refactored pw_fuzzer logic to be more robust and expanded the pw_fuzzer: Using OSS-Fuzz doc.

pw_i2c#

pw_kvs#

We are discouraging the use of the shorter macros because they collide with Abseil’s logging API.

pw_libc#

snprintf() support was added.

pw_log_string#

We added more detail to pw_log_string.

pw_log_zephyr#

It’s now possible to define pw_log_tokenized_HandleLog() outside of Pigweed so that Zephyr projects have more flexibility around how they capture tokenized logs.

pw_package#

pw_persistent_ram#

pw_presubmit#

We added a reStructuredText formatter.

pw_protobuf#

max_size and max_count are now exposed in generated headers. The new proto_message_field_props() helper function makes it easier to iterate through a messages fields and properties.

pw_random#

We’re now auto-generating the XorShiftStarRng64 API reference via Doxygen.

pw_rpc#

The new request_completion() method in Python enables you to send a completion packet for server streaming calls.

pw_spi#

pw_symbolizer#

The LlvmSymbolizer Python class has a new close() method to deterministically close the background process.

pw_sync#

We added GenericBasicLockable.

pw_system#

pw_system now supports different channels for primary and logging RPC.

pw_thread_freertos#

pw_tokenizer#

We added PW_TOKENIZE_FORMAT_STRING_ANY_ARG_COUNT and PW_TOKENIZER_REPLACE_FORMAT_STRING. We refactored the docs so that you don’t have to jump around the docs as much when learning about key topics like tokenization and token databases. Database loads now happen in a separate thread to avoid blocking the main thread. Change detection for directory databases now works more as expected. The config API is now exposed in the API reference.

pw_unit_test#

We added testing::Test::HasFailure(), FRIEND_TEST, and << messages to improve gTest compatibility.

pw_varint#

pw_varint now has a C-only API.

pw_web#

Logs can now be downloaded as plaintext.

Build#

Bazel#

Docs#

SEEDs#

Third party#

Miscellaneous#

mimxrt595_evk_freertos#

Aug 11, 2023 to Aug 25, 2023#

Highlights (Aug 11, 2023 to Aug 25, 2023):

  • pw_tokenizer now has Rust support.

  • The pw_web log viewer now has advanced filtering and a jump-to-bottom button.

  • The run_tests() method of pw_unit_test now returns a new TestRecord dataclass which provides more detailed information about the test run.

  • A new Ambiq Apollo4 target that uses the Ambiq Suite SDK and FreeRTOS has been added.

Please join us at the next Pigweed Live on Monday, Aug 28 1PM PST to discuss these changes and anything else on your mind. Join our Discord and head over to the #pigweed-live channel to get a link to the video meeting.

Active SEEDs#

Help shape the future of Pigweed! Please leave feedback on the following active RFCs (SEEDs):

Modules#

pw_bloat#

pw_bluetooth#

The Emboss files were refactored.

pw_build#

The pw_build docs were split up so that each build system has its own page now. The new output_logs flag enables you to not output logs for pw_python_venv.

pw_cli#

pw_console#

pw_containers#

pw_docgen#

Docs builds should be faster now because Sphinx has been configured to use all available cores.

pw_env_setup#

Sphinx was updated from v5.3.0 to v7.1.2. We switched back to the upstream Furo theme and updated to v2023.8.19. The content of pigweed_environment.gni now gets logged. There was an update to ensure that arm-none-eabi-gdb errors propagate correctly. There is now a way to override Bazel build files for CIPD repos.

pw_function#

pw_fuzzer#

pw_hdlc#

A new close() method was added to HdlcRpcClient to signal to the thread to stop.

pw_ide#

A new --install-editable flag was added to install Pigweed Python modules in editable mode so that code changes are instantly realized.

pw_perf_test#

pw_presubmit#

pw_presubmit now has an ESLint check for linting and a Prettier check for formatting JavaScript and TypeScript files.

pw_rpc#

A request_completion() method was added to the ServerStreamingCall Python API. A bug was fixed related to encoding failures when dynamic buffers are enabled.

pw_rpc_transport#

pw_rust#

pw_stm32cube_build#

pw_stream#

Error codes were updated to be more accurate and descriptive.

pw_stream_uart_linux#

Common baud rates such as 9600, 19200, and so on are now supported.

pw_sync#

Tests were added to make sure that pw::sync::Borrowable works with lock annotations.

pw_system#

The pw_system.device.Device Python class can now be used as a context manager.

pw_tokenizer#

pw_tokenizer now has Rust support. The pw_tokenizer C++ config API is now documented at Configuration and the C++ token database API is now documented at Token databases. When creating a token database, parent directories are now automatically created if they don’t already exist. PrefixedMessageDecoder has been renamed to NestedMessageDecoder.

pw_toolchain#

A new Linux host toolchain built using pw_toolchain_bazel has been started. CIPD-provided Rust toolchains are now being used.

pw_unit_test#

run_tests() now returns the new TestRecord dataclass which provides more detailed information about the test run. SetUpTestSuit() and TearDownTestSuite() were added to improve GoogleTest compatibility.

pw_web#

Log viewers are now drawn every 100 milliseconds at most to prevent crashes when many logs arrive simultaneously. The log viewer now has a jump-to-bottom button. Advanced filtering has been added.

Targets#

targets#

A new Ambiq Apollo4 target that uses the Ambiq Suite SDK and FreeRTOS has been added.

Language support#

Python#

Docs#

Doxygen-generated function signatures now present each argument on a separate line. Tabbed content looks visually different than before.

SEEDs#

SEED-0107 (Pigweed Communications) was accepted and SEED-0109 (Communication Buffers) was started.

Miscellaneous#

Build#

soong#

Jul 27, 2023 to Aug 11, 2023#

Highlights (Jul 27, 2023 to Aug 11, 2023):

  • We’re prototyping a Pigweed extension for VS Code. Learn more at Code Editor Support.

  • We added pw_toolchain_bazel, a new LLVM toolchain for building with Bazel on macOS.

  • We are working on many docs improvements in parallel: auto-generating rustdocs for modules that support Rust (example), refactoring the pw_tokenizer docs, migrating API references to Doxygen, fixing longstanding docs site UI issues, and more.

Please join us at the next Pigweed Live on Monday, Aug 14 1PM PST to discuss these changes and anything else on your mind. Join our Discord and head over to the #pigweed-live channel to get a link to the video meeting.

Active SEEDs#

Help shape the future of Pigweed! Please leave feedback on the following active RFCs (SEEDs):

Modules#

pw_alignment#

pw_analog#

Long-term, all of our API references will be generated from header comments via Doxygen. Short-term, we are starting to show header files directly within the docs as a stopgap solution for helping Pigweed users get a sense of each module’s API. See pw_analog for an example.

pw_base64#

We finished migrating the pw_random API reference to Doxygen.

pw_boot_cortex_m#

pw_build#

We added a log_build_steps option to ProjectBuilder that enables you to log all build step lines to your screen and logfiles.

pw_cli#

We polished tab completion support.

pw_console#

We made copy-to-clipboard functionality more robust when running pw_console over SSH.

pw_containers#

We updated filteredview constructors and migrated the FilteredView API reference to Doxygen.

pw_docgen#

At the top of pages like pw_tokenizer there is a UI widget that provides information about the module. Previously, this UI widget had links to all the module’s docs. This is no longer needed now that the site nav automatically scrolls to the page you’re on, which allows you to see the module’s other docs.

pw_env_setup#

We made Python setup more flexible.

pw_ide#

We are prototyping a pw_ide extension for VS Code.

pw_interrupt#

We added a backend for Xtensa processors.

pw_log_zephyr#

We encoded tokenized messages to pw::InlineString so that the output is always null-terminated.

pw_presubmit#

We increased LUCI support and updated the #pragma once check to look for matching #ifndef and #define lines.

pw_protobuf_compiler#

We continued work to ensure that the Python environment in Bazel is hermetic.

pw_python#

We fixed bugs related to requirements.txt files not getting found.

pw_random#

We continued migrating the pw_random API reference to Doxygen.

pw_rpc#

We made the Java client more robust.

pw_spi#

We continued work on implementing a SPI responder interface.

pw_status#

We fixed the nesting on a documentation section.

pw_stream#

We added remaining(), len(), and position() methods to the Cursor wrapping in Rust.

pw_stream_shmem_mcuxpresso#

We added the pw_stream_shmem_mcuxpresso backend for pw_stream.

pw_sync_freertos#

pw_thread#

pw_tokenizer#

We added support for unaligned token databases and continued the 0102: Consistent Module Documentation update of the pw_tokenizer docs.

pw_toolchain#

We fixed a regression that made it harder to use Pigweed in an environment where pw_env_setup has not been run and fixed a bug related to incorrect Clang linking.

pw_toolchain_bazel#

We added a an LLVM toolchain for building with Bazel on macOS.

pw_trace_tokenized#

We made tracing more robust.

pw_transfer#

We made integration tests more robust.

pw_web#

We added support for storing user preferences in localStorage.

Build#

We made the Bazel system more hermetic and fixed an error related to not finding the Java runtime.

Docs#

We created a new doc (Code Editor Support) that explains how to improve Pigweed support in various IDEs. We standardized how we present call-to-action buttons on module homepages. See pw_tokenizer for an example. We fixed a longstanding UI issue around the site nav not scrolling to the page that you’re currently on.

SEEDs#

We created a UI widget to standardize how we present SEED status information. See the start of 0102: Consistent Module Documentation for an example.

Third party#

third_party/mbedtls#

Miscellaneous#

OWNERS#

Jul 13, 2023 to Jul 28, 2023#

Highlights (Jul 13, 2023 to Jul 28, 2023):

  • SEED-0107: Pigweed Communications, a proposal for an embedded-focused network protocol stack, is under discussion. Please review and provide your input!

  • pw_cli now supports tab completion!

  • A new UART Linux backend for pw_stream was added (pw_stream_uart_linux).

Active SEEDs#

Modules#

pw_allocator#

We started migrating the pw_allocator API reference to Doxygen.

pw_async#

We increased Bazel support.

pw_async_basic#

We reduced logging noisiness.

pw_base64#

We continued migrating the pw_base64 API reference to Doxygen.

pw_bloat#

We improved the performance of label creation. One benchmark moved from 120 seconds to 0.02 seconds!

pw_bluetooth#

Support for 3 events was added.

pw_build#

pw_build_mcuxpresso#

Some H3 elements in the pw_build_mcuxpresso docs were being incorrectly rendered as H2.

pw_chrono_freertos#

We investigated what appeared to be a race condition but turned out to be an unreliable FreeRTOS variable.

pw_cli#

pw_cli now supports tab completion!

pw_console#

Communication errors are now handled more gracefully.

pw_containers#

The flat map implementation and docs have been improved.

pw_digital_io#

We continued migrating the API reference to Doxygen. An RPC service was added.

pw_digital_io_mcuxpresso#

We continued migrating the API reference to Doxygen. Support for a new RPC service was added.

pw_docgen#

Support for auto-linking to Rust docs (when available) was added. We also explained how to debug Pigweed’s Sphinx extensions.

pw_env_setup#

There were lots of updates around how the Pigweed environment uses Python.

pw_fuzzer#

A fuzzer example was updated to more closely follow Pigweed code conventions.

pw_hdlc#

Communication errors are now handled more gracefully.

pw_i2c#

An RPC service was added. Docs and code comments were updated to use responder and initiator terminology consistently.

pw_i2c_mcuxpresso#

pw_ide#

pw_interrupt#

Work continued on how facade backend selection works in Bazel.

pw_log_rpc#

A docs section was added that explains how pw_log, pw_log_tokenized, and pw_log_rpc interact with each other.

pw_package#

Raspberry Pi Pico and Zephyr support improved.

pw_perf_test#

pw_presubmit#

pw_protobuf_compiler#

pw_ring_buffer#

pw_ring_buffer now builds with -Wconversion enabled.

pw_rpc#

pw_rpc_transport#

pw_rust#

We are preparing pigweed.dev to automatically link to auto-generated Rust module documentation when available.

pw_spi#

We updated docs and code comments to use initiator and responder terminology consistently.

pw_status#

pw_stream#

We continued work on Rust support.

pw_stream_uart_linux#

A new UART Linux backend for pw_stream was added.

pw_sync#

C++ lock traits were added and used.

pw_sync_freertos#

pw_sys_io#

pw_system#

pw_tokenizer#

We refactored the pw_tokenizer docs to adhere to 0102: Consistent Module Documentation.

pw_toolchain#

The build system was modified to use relative paths to avoid unintentionally relying on the path environment variable. Map file generation is now optional to avoid generating potentially large map files when they’re not needed.

pw_trace_tokenized#

pw_unit_test#

pw_varint#

pw_watch#

We fixed an issue where builds were getting triggered when files were opened or closed without modication.

pw_web#

Build#

bazel#

build#

Targets#

targets/rp2040_pw_system#

Some of the Pico docs incorrectly referred to another hardware platform.

Language support#

python#

rust#

OS support#

zephyr#

Docs#

We added a feature grid to the homepage and fixed outdated info in various docs.

SEEDs#

SEED-0107#

SEED-0108#

Third party#

third_party#

third_party/mbedtls#