What’s New In Pigweed#

Talk to the team at Pigweed Live#

Our next Pigweed Live is Mon May 06, 2024 1PM (PDT). Please join us to discuss what’s new in Pigweed and anything else Pigweed-related.

Apr 18, 2024#

Highlights (Apr 4, 2024 to Apr 18, 2024):

Active SEEDs#

Help shape the future of Pigweed! Please visit SEED Index and leave feedback on the RFCs (i.e. SEEDs) marked Open for Comments.

Modules#

pw_allocator#

The new pw::allocator::TypedPool class is a slab allocator that can allocate a specific object with very low overhead. pw::allocator::TypedPool is implemented using the new pw::allocator::Pool interface. pw::allocator::TrackingAllocatorImpl was renamed to pw::allocator::TrackingAllocator.

pw_async2#

The new pw::async2::PendableAsTask class is a Task that delegates to a type with a Pend method.

pw_blob_store#

The pw_add_library() call for the pw_blob_store target now compiles as STATIC instead of INTERFACE to be more in line with the Bazel build.

pw_bluetooth#

pw_bluetooth_sapphire#

In CIPD bt-host artifacts are now uploaded to fuchsia/prebuilt/bt-host.

pw_build#

pw_build_android#

pw_build_info#

pw_cli#

The following interfaces were moved from pw_presubmit to pw_cli to make them more widely available: pw_cli.file_filter.FileFilter, pw_cli.git_repo, and pw_cli.tool_runner.ToolRunner. The new pw_cli.decorators.deprecated() decorator emits a deprecation warning when the annotated function is used.

pw_containers#

pw_cpu_exception_risc_v#

The new pw_cpu_exception_risc_v backend lays the foundation for RISC-V CPU exception handling.

pw_env_setup#

pw_hdlc#

pw_ide#

pw_kvs#

pw_log_zephyr#

pw_presubmit#

The following interfaces were moved from pw_presubmit to pw_cli to make them more widely available: pw_cli.file_filter.FileFilter, pw_cli.git_repo, and pw_cli.tool_runner.ToolRunner.

pw_protobuf#

pw_rpc#

The new pw::rpc::ChangeEncodedChannelId() function lets you rewrite an encoded packet’s channel ID in place. See Remapping channels.

pw_rpc_transport#

pw_sensor#

The new pw_sensor module is the start of the implementation of SEED 0119: Sensors.

pw_snapshot#

pw_spi_linux#

pw_spi_linux now has a basic Command-line interface that lets you read from and write to devices.

pw_thread_freertos#

pw_tls_client#

pw_transfer#

The Python and C++ interfaces now support adaptive windowing.

pw_web#

Build#

Bazel#

Docs#

The new Zephyr quickstart shows you how to set up a C++-based Zephyr project that’s ready to use Pigweed. The API references for all functions or methods that return a set of pw_status codes have been refactored for consistency. The Doxygen style guide has been revamped.

SEEDs#

Miscellaneous#

Apr 4, 2024#

Highlights (Mar 21, 2024 to Apr 4, 2024):

  • New modules: pw_i2c_rp2040 is a Pico SDK implementation of the pw_i2c interface, pw_async2_epoll is an epoll-based backend for pw_async2, pw_spi_linux is a Linux backend for pw_spi, pw_uart provides core methods for UART communication, and pw_bluetooth_proxy provides a lightweight proxy host that can be placed between a Bluetooth host and a Bluetooth controller to add functionality or inspection.

  • Docs updates: Pigweed’s main docs builder now builds the examples repo; the examples will be available at https://pigweed.dev/examples. An experimental complete Doxygen API reference is now being published to https://pigweed.dev/doxygen. The pw_i2c docs, reStructuredText style guide, and docs contributors homepage have been revamped.

  • Android platform updates: Many modules were refactored to follow the guidance in pw_build_android to make it easier to build them in Soong.

Active SEEDs#

Help shape the future of Pigweed! Please visit SEED Index and leave feedback on the RFCs (i.e. SEEDs) marked Open for Comments.

Modules#

pw_allocator#

The new Capabilities API lets derived allocators describe what optional features they support. pw::Allocator::GetLayout() has begun to be deprecated and replaced by pw::Allocator::GetRequestedLayout, pw::Allocator::GetUsableLayout(), and pw::Allocator::GetAllocatedLayout() to make it easier to distinguish between requested memory, usable memory, and already used memory. Methods that took Layout arguments, such as pw::Allocator::GetRequestedLayout(), have been deprecated.

pw_assert_log#

pw_async2#

The new pw::async2::PendFuncTask class delegates a task to a provided function.

pw_async2_epoll#

The new pw_async2_epoll module is an epoll-based backend for pw_async2.

pw_bluetooth#

The Usage section now shows CMake usage and the new Contributing section shows how to contribute Emboss code.

pw_bluetooth_proxy#

The new pw_bluetooth_proxy module provides a lightweight proxy host that can be placed between a Bluetooth host and a Bluetooth controller to add functionality or inspection.

pw_bluetooth_sapphire#

pw_bluetooth_sapphire now supports emulation, Fuchsia unit testing, and ARM64 build targets.

pw_build#

Modules can now be nested in subdirectories, which paves the way for refactoring how modules are organized in the upstream Pigweed repo. Project Builder is a new lightweight build command for projects that need to run multiple commands to perform a build.

pw_build_android#

pw_build_info#

The new pw::build_info::LogBuildId() function lets you print a GNU build ID as hex.

pw_bytes#

pw_channel#

The new pw::channel::LoopbackDatagramChannel and pw::channel::LoopbackByteChannel aliases provide channel implementations that read their own writes. The new pw::channel::ForwardingChannelPair class lets you connect two subsystems with datagram channels without implementing a custom channel.

pw_chrono#

pw_cli#

The new pw_cli.alias Python module lets you create pw subcommands that are effectively command line aliases. See Defining a simple alias.

pw_digital_io#

pw_emu#

pw_env_setup#

pw_function#

pw_hdlc#

The new pw::hdlc::Router class is an experimental async HDLC router that uses pw_channel.

pw_i2c#

The pw_i2c docs have been revamped.

pw_i2c_rp2040#

The new pw_i2c_rp2040 module implements the pw_i2c interface using the Raspberry Pi Pico SDK.

pw_ide#

pw_ide.settings.PigweedIdeSettings.compdb_searchpaths() now accepts globs. The new pw_ide.settings.PigweedIdeSettings.targets_exclude() method lets you specify a list of GN targets that code analysis should ignore.

pw_libc#

pw_log#

pw_log_basic#

pw_log_null#

pw_log_tokenized#

pw_minimal_cpp_stdlib#

pw_module#

pw_multibuf#

pw_polyfill#

pw_preprocessor#

pw_presubmit#

Pigweed’s main docs builder now builds the examples repo; the examples will be available at https://pigweed.dev/examples. An experimental complete Doxygen API reference is now being published to https://pigweed.dev/doxygen.

pw_protobuf#

pw_python#

pw_result#

pw_router#

pw_rpc#

pw_rpc_transport#

pw_span#

pw_spi#

pw_spi_linux#

Linux functionality that was previously in pw_spi has been moved to its own module, pw_spi_linux.

pw_status#

The new pw::StatusWithSize::size_or() convenience method lets you return a default size in place of pw::StatusWithSize::size() when the status is not OK.

pw_stream_shmem_mcuxpresso#

pw_sync#

pw_sys_io#

pw_thread#

pw_toolchain#

pw_trace_tokenized#

pw_transfer#

New pw_transfer macros: PW_TRANSFER_LOG_DEFAULT_CHUNKS_BEFORE_RATE_LIMIT, PW_TRANSFER_LOG_DEFAULT_RATE_PERIOD_MS, PW_TRANSFER_CONFIG_LOG_LEVEL, and PW_TRANSFER_CONFIG_DEBUG_DATA_CHUNKS.

pw_uart#

The new pw_uart module defines core methods for UART communication.

pw_unit_test#

pw_web#

Build#

Bazel#

Docs#

SEEDs#

Third party#

Miscellaneous#

Mar 22, 2024#

Highlights (Mar 7, 2024 to Mar 22, 2024):

  • Pigweed’s minimum supported Python version was changed to 3.10.

  • Setting the new pw_build_TEST_TRANSITIVE_PYTHON_DEPS flag to false in your project’s .gn file turns off testing and linting of transitive dependencies in pw_python_package rules, which can speed up build times significantly.

  • The new pw_log_android module is a pw_log backend for Android and the new pw_build_android module provides tools to help build Pigweed in Android platform applications.

  • 0120: Sensor Configuration introduces pw_sensor, a module that will handle Pigweed’s upcoming sensor framework.

  • The new PW_LOG_EVERY_N and PW_LOG_EVERY_N_DURATION macros provide rate-limited logging.

Active SEEDs#

Help shape the future of Pigweed! Please visit SEED Index and leave feedback on the RFCs (i.e. SEEDs) marked Open for Comments.

Modules#

pw_allocator#

The pw_allocator docs have been revamped. Code examples from the docs are now extracted from complete examples that are built and tested alongside the rest of the main Pigweed repo; see //pw_allocator/examples.

pw_assert#

pw_assert_basic#

pw_bluetooth#

pw_bluetooth_sapphire#

pw_build#

Setting the new pw_build_TEST_TRANSITIVE_PYTHON_DEPS flag to false in your project’s .gn file turns off testing and linting of transitive dependencies in pw_python_package rules, which can speed up build times significantly.

pw_build_android#

The new pw_build_android module provides tools to help build Pigweed in Android platform applications.

pw_bytes#

The new pw::bytes::ExtractBits() helper extracts bits between specified left bit and right bit positions. New Rust helpers were added; see Crate pw_bytes.

pw_channel#

Datagram-to-byte conversions must now be explicit.

pw_checksum#

pw_chre#

pw_containers#

pw_digital_io_linux#

The new pw_digital_io_linux CLI tool lets you configure a GPIO line as an input and gets its value, or configure a line as an output and set its value.

pw_docgen#

pw_env_setup#

Pigweed’s minimum supported Python version was changed to 3.10.

pw_format#

Initital support for untyped specifiers (%v) was added.

pw_hdlc#

The newly public pw::hdlc::Encoder class supports gradually encoding frames without ever holding an entire frame in memory at once.

pw_hex_dump#

CMake support was added.

pw_json#

pw_libc#

pw_log#

The new PW_LOG_EVERY_N and PW_LOG_EVERY_N_DURATION macros provide rate-limited logging.

pw_log_android#

The new pw_log_android module is a pw_log backend for Android.

pw_malloc#

pw_multibuf#

pw::multibuf::Stream is a new multibuf-backed pw_stream implementation that can read from and write to a multibuf. pw::multibuf::SimpleAllocator is a simple, first-fit variant of pw::multibuf::MultiBufAllocator.

pw_package#

pw_polyfill#

pw_presubmit#

pw_rpc#

pw_rust#

pw_sensor#

0120: Sensor Configuration introduces pw_sensor, a module that will handle Pigweed’s upcoming sensor framework.

pw_spi#

pw_stream_shmem_mcuxpresso#

pw_sync_stl#

pw_sys_io#

pw_sys_io_rp2040#

pw_sys_io_stm32cube#

pw_thread_zephyr#

pw_tokenizer#

The Rust library’s hashing code was updated to support multi-input hashing.

pw_transfer#

The TypeScript client now has an abort() method for ending a transfer without a completion chunk and a terminate() method for ending a transfer with a completion chunk.

pw_unit_test#

The new pw::unit_test::TestRecordEventHandler class is a predefined event handler that outputs a test summary in Chromium JSON Test Results format.

pw_watch#

Changes to Emboss files now trigger rebuilds.

pw_web#

Build#

Bazel#

The new pw_facade Bazel macro makes it easier to create a facade.

Language support#

Python#

OS support#

Zephyr#

Docs#

The new CLI style guide outlines how CLI utilities in upstream Pigweed should behave.

Third party#

Mar 7, 2024#

Highlights (Feb 22, 2024 to Mar 7, 2024):

  • The new pw_digital_io_linux module is a pw_digital_io backend for Linux userspace.

  • pw::multibuf::MultiBufAllocator class is a new interface for allocating pw::multibuf::MultiBuf objects.

  • The pw_web log viewer now captures browser console logs. It also now supports creating log stores and downloading logs from stores.

Active SEEDs#

Help shape the future of Pigweed! Please visit SEED Index and leave feedback on the RFCs (i.e. SEEDs) marked Open for Comments.

Modules#

pw_allocator#

pw_assert_log#

pw_async2#

pw_blob_store#

pw_bluetooth#

pw_build#

pw_config_loader#

pw_containers#

pw_digital_io_linux#

The new pw_digital_io_linux module is a pw_digital_io backend for Linux userspace.

pw_json#

pw_libc#

pw_log#

pw_module#

pw_multibuf#

The new pw::multibuf::MultiBufAllocator class is an interface for allocating pw::multibuf::MultiBuf objects.

pw_presubmit#

pw_proto_compiler#

pw_result#

pw_rpc#

The newly public pw::rpc::CloseAndWaitForCallbacks function abandons an RPC and blocks on the completion of any running callbacks.

pw_rpc_transport#

pw_rust#

pw_stream_uart_mcuxpresso#

pw_stream_uart_mcuxpresso now supports direct memory access reads and writes.

pw_string#

pw::InlineByteString is a new alias of pw::InlineBasicString<std::byte> that can be used as a simple and efficient byte container.

pw_sync#

pw_tokenizer#

pw_toolchain_bazel#

pw_transfer#

pw_unit_test#

The pw_unit_test docs have been revamped. Using the full upstream GoogleTest backend with simple_printing_main in Bazel has been fixed.

pw_watch#

pw_watch now rebuilds when Bazel files are changed.

pw_web#

The pw_web log viewer now captures browser console logs. It also now supports creating log stores and downloading logs from stores.

Bazel#

Docs#

The new protobuf style guide describes how protobufs should be styled throughout Pigweed.

Third party#

Miscellaneous#

Feb 23, 2024#

Highlights (Feb 9, 2024 to Feb 23, 2024):

  • The new pw_json module provides classes for serializing JSON.

  • Raspberry Pi RP2040 support was expanded, including a new pw::digital_io::Rp2040Config struct enables you to configure polarity for RP2040 GPIO pins, and a new pw::spi::Rp2040Initiator class which is a Pico SDK userspace implementation of Pigweed’s SPI Initiator class.

  • The new pw::spi::DigitalOutChipSelector class sets the state of a pw_digital_io output when activated.

  • The pw_kvs docs were overhauled.

Active SEEDs#

Help shape the future of Pigweed! Please visit SEED Index and leave feedback on the RFCs (i.e. SEEDs) marked Open for Comments.

Modules#

pw_allocator#

pw_assert#

pw_assert_log#

pw_bluetooth#

pw_build#

pw_bytes#

pw_chrono_rp2040#

pw_cli#

pw_config_loader#

The new skip_files__without_sections option enables you to just move on to the next file rather than raise an exception if a relevant section doesn’t exist in a config file.

pw_containers#

pw_digital_io_rp2040#

The new pw::digital_io::Rp2040Config struct enables you to configure polarity for RP2040 GPIO pins.

pw_env_setup#

pw_function#

The new //third_party/fuchsia:fit label flag enables Bazel-based projects to provide an alternate implementation for fit() when needed.

pw_fuzzer#

pw_grpc#

pw_hdlc#

pw_i2c#

The API reference for pw::i2c::RegisterDevice is now published on pigweed.dev.

pw_ide#

pw_json#

The new pw_json module provides classes for serializing JSON.

pw_kvs#

The pw_kvs docs were overhauled.

pw_log#

pw_log_android#

pw_metric#

pw_module#

pw_multibuf#

pw_package#

pw_preprocessor#

The pw_preprocessor reference is now being generated via Doxygen.

pw_presubmit#

pw_rpc#

pw_rpc clients will once again accept unsolicited responses from pw_rpc servers that were built prior to September 2022. Unsolicited responses, also known as “open” requests, let a server send a message to a client prior to the client sending a request. This change fixed an incompatibility in which pw_rpc clients built after September 2022 would not accept unsolicited responses from servers built before September 2022 (specifically, change #109077).

pw_software_update#

pw_spi#

The new pw::spi::DigitalOutChipSelector class is an implementation of pw::spi::ChipSelector that sets the state of a pw_digital_io output when activated.

pw_spi_rp2040#

The new pw::spi::Rp2040Initiator class is a Pico SDK userspace implementation of Pigweed’s SPI Initiator class.

pw_stream#

pw_string#

Debug error messages for assertions containing std::optional types have been improved.

pw_sync#

pw_tokenizer#

The pw_tokenizer and pw_snapshot Python libraries can now be used from Bazel as a result of the proto migration. See issue #322850978).

pw_toolchain#

pw_toolchain_bazel#

pw_transfer#

pw_watch#

pw_web#

The log viewer now supports multiple log sources.

Build#

Bazel#

Targets#

OS support#

Docs#

Breadcrumbs are now shown at the top of all docs pages except the homepage.

SEEDs#

Third party#

Miscellaneous#

Feb 9, 2024#

Highlights (Jan 26, 2024 to Feb 9, 2024):

  • The new pw_grpc module provides classes that map between pw_rpc packets and HTTP/2 gRPC frames, allowing pw_rpc services to be exposed as gRPC services.

  • A lot of the remaining pw_toolchain_bazel feature work from 0113: Add modular Bazel C/C++ toolchain API was finished and rough edges were polished up.

  • The new generic pw::allocator::BlockAllocator interface supported several derived types that enable fine-grained control over how a block satisfies an allocation request.

  • pw_transfer now supports resumable transfers.

Active SEEDs#

Help shape the future of Pigweed! Please visit SEED Index and leave feedback on the RFCs (i.e. SEEDs) marked Open for Comments.

Modules#

pw_alignment#

pw_allocator#

The new generic pw::allocator::BlockAllocator interface supports several derived types that enable fine-grained control over how a block satisfies an allocation request. The new pw::allocator::GetLayout() method retrieves the layout that was used to allocate a given pointer. The new pw::allocator::AllocatorSyncProxy interface synchronizes access to another allocator, allowing it to be used by multiple threads.

pw_assert#

pw_async_basic#

pw_bloat#

The new boolean argument ignore_unused_labels for pw_size_report() enables you to remove labels from the JSON size report that have a size of 0.

pw_bluetooth#

pw_boot#

pw_build#

The new PW_USE_COLOR, NO_COLOR, and CLICOLOR_FORCE OS environment variables enable you to control whether output in CI/CQ is color formatted.

pw_bytes#

pw_channel#

The initial pw::channel::Channel class from 0114: Channels has been introduced but it is experimental and should not be used yet.

pw_cli#

pw_compilation_testing#

pw_config_loader#

The code from pw_cli related to looking up user-specific configuration files has been moved to this separate module.

pw_cpu_exception_cortex_m#

pw_digital_io#

pw_env_setup#

pw_format#

pw_function#

pw_fuzzer#

pw_grpc#

The new pw_grpc module is an implementation of the gRPC HTTP/2 protocol. It provides classes that map between pw_rpc packets and pw_grpc HTTP/2 frames, allowing pw_rpc services to be exposed as gRPC services.

pw_ide#

pw_presubmit#

Color formatting in CI/CQ has been improved for readability.

pw_protobuf#

pw_random#

pw_result#

pw_rpc#

pw_stream#

pw_target_runner#

pw_thread#

pw_tokenizer#

Troubleshooting docs were added that explain how to workaround GCC’s template function tokenization bug in GCC releases prior to 14.

pw_toolchain#

pw_toolchain_bazel#

A lot of the remaining pw_toolchain_bazel feature work from 0113: Add modular Bazel C/C++ toolchain API was finished and rough edges were polished up.

pw_transfer#

pw_transfer now supports resumable transfers.

pw_unit_test#

Build#

OS support#

Docs#

SEEDs#

Miscellaneous#

Jan 26, 2024#

Highlights (Jan 12, 2024 to Jan 26, 2024):

Active SEEDs#

Help shape the future of Pigweed! Please visit SEED Index and leave feedback on the RFCs (i.e. SEEDs) marked Open for Comments.

Modules#

pw_allocator#

pw_bluetooth#

pw_build#

The new pw_cc_binary_with_map Bazel rule enables you to generate a .map file when building a binary.

pw_bytes#

The pw::ByteBuilder API reference is now being auto-generated via Doxygen. The new pw::bytes::SignExtend() template enables expanding the nth bit to the left up to the size of the destination type.

pw_compilation_testing#

pw_console#

pw_containers#

The destructors for pw::InlineQueue, pw::InlineDeque, and pw::Vector are now protected to prevent use with delete or std::unique_ptr and to prevent unusable declarations.

pw_digital_io#

The private virtual API requirements for pw::digital_io::DigitalIoOptional are now documented because they are needed when implementing concrete backends for pw_digital_io.

pw_doctor#

pw_env_setup#

pw_hdlc#

pw_ide#

pw_kvs#

The new pw::kvs::FlashMemory::EndOfWrittenData() method returns the first byte of erased flash that has no more written bytes.

pw_persistent_ram#

pw_polyfill#

pw_polyfill/static_assert.h now provides a C23-style static_assert(). See static_assert.

pw_preprocessor#

The new PW_ADD_OVERFLOW, PW_SUB_OVERFLOW, and PW_MUL_OVERFLOW macros can be used to check for integer overflows.

pw_presubmit#

pw_protobuf#

pw_thread#

pw_tokenizer#

A longstanding GCC bug that caused tokenized logging within a function template to not work has been fixed.

pw_tool#

This incomplete module has been deleted.

pw_toolchain_bazel#

The //pw_toolchain_bazel directory is now configured to be compiled as a standalone Bazel module. Initial support for pw_cc_feature has been added, which completes the initial set of rules required for building toolchains with pw_toolchain_bazel.

pw_transfer#

The C++ client for pw_transfer now uses handles for cancellation.

pw_web#

Build#

Targets#

host_device_simulator#

Docs#

SEEDs#

Miscellaneous#

Jan 12, 2024#

Highlights (Dec 29, 2023 to Jan 12, 2024):

  • pw_allocator added parameter to make it easier to work with allocation metadata in a block’s header and made it easier to omit flag-related code for blocks.

  • pw_cc_library has been replaced with the Bazel-native cc_library.

  • pw_thread_stl disallowed std::thread::detach() on Windows because it’s known to randomly hang indefinitely.

Active SEEDs#

Help shape the future of Pigweed! Please visit SEED Index and leave feedback on the RFCs (i.e. SEEDs) marked Open for Comments.

Modules#

pw_allocator#

A new template parameter, kNumExtraBytes, was added to Block. This parameter reserves space in the block’s header for storing and fetching allocation metadata.

The kMaxSize parameter was removed from Block and replaced by kNumFlags to make it easier to omit flag-related code when not needed and define fewer block types rather than one for each allocation pool size.

pw_bluetooth_sapphire#

pw_containers#

pw_doctor#

pw_emu#

pw_env_setup#

pw_ide#

The new pigweed.enforceExtensionRecommendations configuration option for VS Code makes extension recommendation enforcement optional. When you set this flag to true in your project’s extension.json, recommended extensions will need to be installed and non-recommended extensions will need to be disabled.

You can now submit Pigweed issues through VS Code. Open the Command Palette and type Pigweed: File Bug.

pw_log#

The Python API of the log decoder now accepts a logging.Logger or logging.LoggerAdapter instance as the default device logger. Previously it only accepted logging.Logger.

pw_log_zephyr#

pw_multibuf#

pw_protobuf#

pw_rpc#

The new PW_RPC_METHOD_STORES_TYPE config option provides a way at runtime to determine a method’s type. This is useful when implementing a translation layer from another RPC system. Most Pigweed projects won’t need this feature so it’s disabled by default.

pw_stream#

pw_system#

See pw_log.

pw_thread_stl#

Using std::thread::detach() on Windows has been disallowed. When compiling with MinGW on Windows, std::thread::detach() is known to randomly hang indefinitely.

pw_tokenizer#

pw_toolchain#

pw_toolchain now adds -fno-ms-compatibility to cflags on Windows. When building with clang on Windows targeting msvc, clang previously enabled a ms-compatibility mode that broke Pigweed’s macro magic.

pw_unit_test#

pw_web#

Build#

Bazel#

All modules now support the injection of module configuration via label_flags.

pw_cc_library has been replaced with the Bazel-native cc_library.

OS support#

Zephyr#

You can now enable the pw_thread/sleep.h library in your Zephyr project by setting CONFIG_PIGWEED_THREAD_SLEEP=Y in your Kconfig.

Docs#

SEEDs#

Dec 29, 2023#

Highlights (Dec 15, 2023 to Dec 29, 2023):

  • The new pw::allocator::MultiplexAllocator abstract class makes it easier to dispatch between allocators depending on an app-specific request type ID.

  • pw_base64 now has initial Rust support.

  • pw_malloc_freertos, a new FreeRTOS backend for pw_malloc, was added.

  • The new pw::digital_io::Polarity helper enum makes it easier for backends to map logical levels to physical levels.

  • The Rust macro tokenize_to_buffer! in the pw_tokenizer Rust crate now supports concatenation of format strings via the PW_FMT_CONCAT operator.

  • The pw_hdlc and pw_result docs were updated to follow our latest Module docs contributor guidelines.

Active SEEDs#

Help shape the future of Pigweed! Please visit SEED Index and leave feedback on the RFCs (i.e. SEEDs) marked Open for Comments.

Modules#

pw_allocator#

The new pw::allocator::MultiplexAllocator abstract class makes it easier to dispatch between allocators depending on an app-specific request type ID.

pw_base64#

pw_base64 now has initial Rust support. See Crate pw_base64.

pw_containers#

pw_digital_io#

pw::digital_io::Polarity was added to make it easier for backends to map logical levels to physical levels.

pw_emu#

pw_hdlc#

pw_malloc#

pw_malloc_freertos, a FreeRTOS backend for pw_malloc was added.

pw_presubmit#

pw_result#

pw_rpc#

pw_snapshot#

pw_thread_stl#

pw_tokenizer#

The Rust macro tokenize_to_buffer! now supports concatenation of format strings via the PW_FMT_CONCAT operator.

pw_toolchain#

The need to provide an unknown value for various pw_cc_toolchain fields has been removed.

pw_transfer#

pw_unit_test#

pw_watch#

pw_web#

SEEDs#

Dec 15, 2023#

Highlights (Dec 1, 2023 to Dec 15, 2023):

Active SEEDs#

Help shape the future of Pigweed! Please visit SEED Index and leave feedback on the RFCs (i.e. SEEDs) marked Open for Comments.

Modules#

pw_alignment#

pw_allocator#

pw_analog#

pw_async2#

We started implementing our new async API, pw_async2.

pw_base64#

pw_blob_store#

pw_bluetooth#

pw_bluetooth_sapphire#

pw_build#

pw_bytes#

pw_checksum#

pw_chrono#

pw_cli#

You can now disable the printing of the banner by setting PW_ENVSETUP_QUIET or PW_ENVSETUP_NO_BANNER.

pw_console#

pw_containers#

pw_digital_io#

pw_docgen#

We updated the docs server to use native hot reloading.

pw_emu#

We’re handling QEMU startup errors more gracefully now.

pw_env_setup#

The upstream Pigweed bootstrap script now runs npm install. We worked on native macOS support that doesn’t rely on Rosetta. Use the --disable-rosetta flag to try it out. Note that the work isn’t complete yet.

pw_file#

pw_format#

Format strings can now be built by macros at compile-time by specifying the format string as a set of string literals separated by the custom PW_FMT_CONCAT keyword.

pw_fuzzer#

pw_hdlc#

pw_hex_dump#

pw_i2c#

pw_ide#

pw_ide now handles additional clang toolchains if your project specifies one that’s different from the one provided by Pigweed. We also shipped several UX improvements to the Visual Studio Code extension.

pw_kvs#

pw_libc#

pw_log#

pw_malloc#

pw_metric#

pw_perf_test#

pw_presubmit#

pw_random#

pw_result#

pw_rust#

pw_snapshot#

pw_status#

pw_string#

pw_symbolizer#

pw_system#

We added an extra logging channel.

pw_thread#

pw_tls_client#

pw_tokenizer#

pw_toolchain#

The Arm GCC toolchain now uses pw_toolchain_bazel.

pw_toolchain_bazel#

Support for additional_files was added to reduce *_files boilerplate. We added a new get started guide.

pw_trace#

pw_transfer#

We added support for setting different timeouts for clients and servers. See PW_TRANSFER_DEFAULT_MAX_CLIENT_RETRIES and PW_TRANSFER_DEFAULT_MAX_SERVER_RETRIES in Module Configuration Options.

pw_unit_test#

We deprecated use of gtest/gtest.h header paths for tests intended to build against pw_unit_test. Historically, we supported using the gtest/gtest.h include path to support compiling a test as either a pw_unit_test or with the full GoogleTest on larger targets like desktop. However, this created a problem since pw_unit_test only implements a subset of the GoogleTest API. With the new approach, we require tests that are intended to compile on devices to directly include pw_unit_test/framework.h. In cases where GoogleTest is available, that header will redirect to GoogleTest.

pw_varint#

pw_web#

Build#

Targets#

Language support#

OS support#

Docs#

SEEDs#

Miscellaneous#

Dec 1, 2023#

Highlights (Nov 17, 2023 to Dec 1, 2023):

Active SEEDs#

Help shape the future of Pigweed! Please visit SEED Index and leave feedback on the RFCs (i.e. SEEDs) marked Open for Comments.

Modules#

pw_alignment#

The docs were updated to follow our new Module docs contributor guidelines.

pw_allocator#

Utilities were added that make it easier to write tests for custom allocator implementations. The metric collection API was refactored. CMake support for heap poisoning was added.

pw_bluetooth#

pw_bluetooth_sapphire#

Migration of pw_bluetooth_sapphire into Pigweed has begun.

pw_build_info#

pw_containers#

A warning was added about pw::Vector being unsafe with non-trivially-destructible, self-referencing types. See b/313899658.

pw_format#

A core::fmt macro helper was added.

pw_log#

An initial Rust API has been added.

pw_multibuf#

pw_package#

pw_perf_test#

The docs have been refactored.

pw_presubmit#

pw_protobuf#

pw_rpc#

pw_rpc_transport#

pw_sensor#

pw_status#

The docs have been refactored to follow our latest Module docs contributor guidelines.

pw_string#

pw_system#

pw_tokenizer#

pw_toolchain#

The Arm toolchain has been updated to use the new toolchain specified in 0113: Add modular Bazel C/C++ toolchain API. A helper for registering C/C++ toolchains in Bazel was added to enable upstream Pigweed to make changes without needing to manually update downstream projects. See Upstream Pigweed Toolchains.

pw_toolchain/arm_clang#

pw_toolchain_bazel#

Support for binding tools to toolchains was added. See pw_cc_tool and pw_cc_action_config. Support for featureless sysroots was added. See pw_cc_toolchain.builtin_sysroot and pw_cc_toolchain.cxx_builtin_include_directories.

pw_transfer#

Commands in the integration test docs were updated and docs were added that explain how to run more than one instance of tests in parallel.

pw_unit_test#

pw_web#

Build#

Bazel#

More Bazel information has been added to Module Structure.

Docs#

The tool that we use to semi-automate these changelog updates has been added to the main Pigweed repository. Try out the tool on Changelog updates and see //docs/_static/js/changelog.js to view its implementation.

SEEDs#

We now have an auto-generated SEED Index that shows you the current status of all SEEDs.

Third party#

Nov 15, 2023#

Highlights (Nov 02, 2023 to Nov 15, 2023):

  • The API for writing proc macros with pw_format was simplified.

  • pw_emu added a command for resuming the execution of paused emulators and now has limited support for inserting environment variables into configuration entries.

  • pw_ide can now output logs to files.

  • pw_unit_test added support for GoogleTest’s ASSERT_OK_AND_ASSIGN, StatusIs, and IsOkAndHolds.

  • Pigweed’s Mission & Philosophies are now documented.

Active SEEDs#

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

Modules#

pw_allocator#

The ...Unchecked methods have been removed from the pw::allocator::Allocator interface and the NVI-style Do... methods have been modified to take Layout parameters.

pw_analog#

pw_console#

SocketClient has been updated to support both IPv4 and IPv6 addresses in addition to Unix sockets.

pw_emu#

There is now limited supported for inserting environment variable values into configuration entries. A command for resuming the execution of a paused emulator was added.

pw_env_setup#

pw_format#

The API for writing proc macros that take format strings and arguments was simplified.

pw_fuzzer#

pw_i2c#

pw_ide#

Logs can now be output to files.

pw_perf_test#

pw_presubmit#

pw_stream#

pw_system#

pw_system_demo#

pw_tokenizer#

pw_toolchain#

pw_toolchain_bazel#

Core building blocks from the 0113: Add modular Bazel C/C++ toolchain API plan were implemented: pw_cc_flag_set and pw_cc_flag_group.

pw_trace_tokenized#

pw_transfer#

There’s been a concerted effort to reduce pw_transfer test flakiness.

pw_unit_test#

The Expectations and Assertions APIs were documented. Support for GoogleTest’s ASSERT_OK_AND_ASSIGN, StatusIs, and IsOkAndHolds was added.

pw_watch#

Support for httpwatcher was removed because it’s not supported on modern versions of Python.

pw_web#

The log viewer has been polished and testing has been enhanced.

Build#

Bazel#

Targets#

Language support#

Docs#

A document about Pigweed’s Mission & Philosophies was added. The style guide was split into multiple pages.

SEEDs#

Nov 3, 2023#

Highlights (Oct 19, 2023 to Nov 3, 2023):

  • A lot more of the pw::multibuf::Chunk API was implemented.

  • pw_format is a new module dedicated to Rust format string parsing.

  • The tokenizer prefix is now configurable via PW_TOKENIZER_NESTED_PREFIX_STR.

  • References to C++14 have been removed throughout the codebase. Pigweed no longer supports C++14; C++17 or newer is required.

  • The upstream Pigweed GN build is now more isolated so that downstream projects have less conflicts when importing Pigweed into their existing GN build.

  • Build configuration is moving away from Bazel macros like pw_cc_library and towards the toolchain configuration so that downstream projects can have full control over how Pigweed libraries are built.

  • New guidelines for authoring module docs have been published at Module docs contributor guidelines. pw_string is now an example of a “golden” module docs set that follows the new guidelines. Please leave feedback on the new guidelines (and module docs updated to follow the guidelines) in issue #309123039.

Active SEEDs#

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

Modules#

pw_allocator#

The docs now have an auto-generated size report. pw::allocator::SplitFreeListAllocator has a new blocks() method for getting the range of blocks being tracked. The class was also refactored to use the existing Block API. The Block API itself was refactored to encode offsets and flags into fields.

pw_arduino_build#

pw_assert#

pw_bluetooth#

More Emboss definitions were added.

pw_build#

Pigweed used to inject a selection of recommended configs into every pw_* C/C++ target in the GN build. These were previously only possible to remove with the remove_configs argument. These configs are now bundled with toolchains instead, and if you don’t use a Pigweed-style toolchain you’ll no longer need to find ways to strip the default configs from Pigweed build rules. More importantly, this changes makes Pigweed’s recommended configs behave identically to other toolchain configs, and they’re now more clearly part of GN toolchain definitions. This change is transparent to most projects, but some Pigweed customers have been asking for this for a while.

The empty_cc_library Bazel utility was added.

pw_bytes#

A new _b literal was added to make it easier to create bytes for tests and constants.

pw_containers#

The reference docs for the variable length entry queue API in C and Python were updated.

pw_digital_io_mcuxpresso#

pw_doctor#

pw_emu#

pw_env_setup#

pip has been pinned to 23.2.1 and pip-tools to 7.3.0 to prevent dependency resolution problems.

pw_format#

pw_format is a new module dedicated to Rust format string parsing.

pw_fuzzer#

pw_hdlc#

Using read callbacks in RpcClient is no longer accepted and the use of CancellableReader is now enforced because it provides a safe and clean shutdown process.

pw_libcxx#

pw_libcxx is a new module that provides libcxx symbols and will eventually facilitate pulling in headers as well.

pw_log#

A Bazel label flag was added to Bazel to avoid circular dependencies.

pw_multibuf#

A lot more of the pw::multibuf::Chunk API was implemented.

pw_package#

pw_presubmit#

A CSS formatter was added.

pw_protobuf#

pw_rpc#

pw::rpc::SynchronousCallFor() now supports DynamicClient.

pw_string#

The docs were updated to match the new Module docs contributor guidelines.

pw_sys_io#

Backends that depend on default_putget_bytes were updated to express the dependency.

pw_system#

See pw_hdlc for an explanation of the CancellableReader change.

pw_tls_client#

pw_tokenizer#

The tokenizer prefix is now configurable via PW_TOKENIZER_NESTED_PREFIX_STR.

pw_toolchain#

You can now set the dir_pw_third_party_builtins GN var to your compiler-rt/builtins checkout to enable buildings LLVM builtins from source instead of relying on a shipped libgcc.

pw_unit_test#

pw_web#

Build#

References to C++14 have been removed throughout the codebase. Pigweed no longer supports C++14; C++17 or newer is required.

Bazel#

Build configuration is moving away from Bazel macros like pw_cc_library and towards the toolchain configuration so that downstream projects can have full control over how Pigweed libraries are built.

Targets#

pw_assert_BACKEND for host was set to print_and_abort_check_backend to enable compatibility with GoogleTest death tests.

OS support#

Docs#

New guidelines for authoring module docs have been published at Module docs contributor guidelines. pw_string is now an example of a “golden” module docs set that follows the new guidelines. Please leave feedback on the new guidelines (and module docs updated to follow the guidelines) in issue #309123039.

There’s now a definition for Facade in the glossary.

SEEDs#

Third party#

Oct 20, 2023#

Highlights (Oct 5, 2023 to Oct 20, 2023):

Active SEEDs#

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

Modules#

pw_allocator#

The new pw::allocator::UniquePtr class offers a safer, simpler RAII API for allocating individual values within an allocator.

pw_async#

pw_async_basic#

pw_bluetooth#

pw_build#

pw_linker_script now describes how to work with linker scripts.

pw_chre#

pw_cli#

pw_digital_io#

pw_emu#

The module has launched! Check out pw_emu to get started.

pw_env_setup#

pw_function#

pw_hdlc#

RPC now has much more information on how to use pw_hdlc for RPC in Python.

pw_i2c#

pw_kvs#

The new FlashPartitionWithLogicalSectors variant of FlashPartition supports combining multiple physical FlashMemory sectors into a single logical FlashPartition sector.

pw_log_tokenized#

Tokenized log arguments are now supported. See 0105: Nested Tokens and Tokenized Log Arguments for background.

pw_log_zephyr#

pw_minimal_cpp_stdlib#

pw_package#

pw_presubmit#

Presubmit checks has more guidance on when to use --base and --full.

pw_snapshot#

pw_spi#

pw_sync_zephyr#

pw_system#

The Device class’s constructor now accepts a logger argument that enables you to specify which logger should be used.

pw_third_party_freertos#

pw_thread#

pw_thread_freertos#

pw_tokenizer#

Integrating with Bazel / GN / CMake projects has new guidance around configuring linker scripts in Bazel.

pw_toolchain#

pw_transfer#

pw_web#

Build#

Bazel#

Targets#

OS support#

Docs#

SEEDs#

A few SEEDs were accepted and a few more started.

Third party#

Miscellaneous#

Oct 6, 2023#

Highlights (Sep 21, 2023 to Oct 6, 2023):

Active SEEDs#

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

Modules#

pw_allocator#

We added a bunch of new allocator APIs! AllocatorMetricProxy is a wrapper for Allocator that tracks the number and total of current memory allocations as well as peak memory usage. LibCAllocator is an allocator that uses malloc() and free(). NullAllocator is an allocator that always fails which is useful for disallowing memory allocations under certain circumstances. SplitFreeListAllocator uses a free list to reduce fragmentation. FallbackAllocator enables you to specify primary and secondary allocators.

pw_analog#

pw_async#

pw_bloat#

pw_size_report() has a new json_key_prefix argument which is an optional prefix for key names in JSON size reports and a new full_json_summary argument which provides more control over how much detail is provided in a JSON size report.

pw_bluetooth#

pw_build#

pw_chre#

pw_chrono#

pw_chrono_rp2040#

This module is a new pw::chrono::SystemClock backend for RP2040.

pw_cli#

pw_containers#

There’s a new C implementation for VariableLengthEntryDeque which is a double-ended queue buffer that stores variable-length entries inline in a circular (ring) buffer. The old VariableLengthEntryDeque was renamed to VariableLengthEntryQueue.

pw_digital_io_rp2040#

This module is a new RP2040 backend for pw_digital_io.

pw_env_setup#

We made the Pigweed bootstrap process on Windows more robust.

pw_hdlc#

The new CancellableReader class is a new interface for receiving RPC packets that guarantees its read process can be stopped.

pw_i2c#

pw_kvs#

The new FlashPartitionWithLogicalSectors C++ class supports combining multiple physical FlashMemory sectors into a single logical FlashPartition sector.

pw_libc#

pw_metric#

pw_minimal_cpp_stdlib#

pw_perf_test#

pw_presubmit#

pw_ring_buffer#

pw_rpc#

If dynamic allocation is enabled via PW_RPC_DYNAMIC_ALLOCATION a new DynamicClient is now generated which dynamically allocates the call object with PW_RPC_MAKE_UNIQUE_PTR.

pw_rpc_transport#

pw_stream#

pw_stream now has initial support for winsock2.

pw_sys_io_rp2040#

pw_tokenizer#

The Python backend now supports nested hashing tokenization. See Tokenize nested arguments.

pw_toolchain#

pw_transfer#

pw_unit_test#

pw_watch#

pw_web#

Build#

Bazel#

Docs#

We started a glossary and added new docs about rollers and CI/CQ.

SEEDs#

Miscellaneous#

pigweed.json#

Sep 22, 2023#

Highlights (Sep 07, 2023 to Sep 22, 2023):

Active SEEDs#

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

Modules#

pw function#

pw perf_test#

pw_analog#

pw_async#

The Run*() methods of FakeDispatcher now return a boolean that indicates whether any tasks were invoked.

pw_async_basic#

release() is now only called outside of locked contexts to prevent an issue where the thread wakes up and then immediately goes back to sleep. An unnecessary 5-second wakeup has been removed from BasicDispatcher.

pw_base64#

The new pw::base64::IsValidChar() method can help you determine if a character is valid Base64.

pw_bluetooth#

More Emboss definitions were added.

pw_build#

pw_bytes#

The AlignDown(), AlignUp(), and Padding() methods of pw_kvs have moved to pw_bytes to enable pw_allocator to use them without taking a dependency on pw_kvs.

pw_checksum#

pw_chre#

The implementation of a module that will enable to work more seamlessly with Android’s Context Hub Runtime Environment has begun.

pw_console#

When invoking pw_console directly from Python, you can now provide arguments through an argparse.Namespace instead of messing with sys.argv or forking another process.

pw_containers#

MemorySanitizer has been disabled in some of the InlineDeque implementation to prevent some false positive detections of uninitialized memory reads.

pw_env_setup#

Work continues on making the Windows bootstrap process more robust.

pw_function#

The documentation has been updated for accuracy.

pw_fuzzer#

Conditional logic around fuzzing support has been refactored to allow for dedicated targets based on specific conditions and to make it clearer exactly what configurations and dependencies are being used.

pw_ide#

pw_libc#

The initial implementation work continues.

pw_log#

The implementation work continues to enable an Android component to read logs from a component running the pw_log_rpc service.

pw_log_string#

pw_package#

Mirrors are now being used for various third-party dependencies.

pw_polyfill#

pw_presubmit#

A new JSON formatting check has been added. The missing newline check has been made more robust.

pw_protobuf#

pw_rpc#

pw::rpc::SynchronousCall now supports the use of custom response message classes that set field callbacks in their constructor. See Client synchronous call wrappers.

pw_stream#

pw_string#

pw_system#

pw_thread#

pw_tokenizer#

pw::tokenizer::Detokenizer has new DetokenizeBase64Message() and DetokenizeBase64() methods for detokenizing Base64-encoded strings. The new pw_tokenizer_EncodeInt() and pw_tokenizer_EncodeInt64() functions in the C API make it easier to manually encode tokenized messages with integers from C.

pw_toolchain#

arm_gcc now supports Cortex-M33.

pw_toolchain_bazel#

pw_varint#

The C encoding functions now have an output size argument, making them much easier to use. There’s a new macro for calculating the encoded size of an integer in a C constant expression. Incremental versions of the encode and decode functions have been exposed to support in-place encoding and decoding with non-contiguous buffers.

pw_web#

The ProgressStats and ProgressCallback types are now exported. Styling and scrolling behavior in the log viewer has been improved.

pw_work_queue#

Build#

Bazel#

Targets#

Docs#

The new Code Reviews document outlines the upstream Pigweed code review process.

SEEDs#

Third party#

third_party/fuchsia#

third_party/pico_sdk#

Miscellaneous#

Sep 8, 2023#

Highlights (Aug 25, 2023 to Sep 8, 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.

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 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.

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#

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.

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 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#