What’s new in Pigweed#
Talk to the team at Pigweed Live#
Our next Pigweed Live is Mon Nov 18, 2024 1PM (PST). Please join us to discuss what’s new in Pigweed and anything else Pigweed-related that’s on your mind. Join our mailing list to receive an invite to the next meeting.
Oct 31, 2024#
Highlights (Oct 18, 2024 to Oct 31, 2024):
The new
PW_TEST_EXPECT_OK
,PW_TEST_ASSERT_OK
, andPW_TEST_ASSERT_OK_AND_ASSIGN
macros provide test matchers for pw_status and pw_result values.The Sense tutorial has expanded guidance around handling crashes and viewing snapshots.
The new
pw::LinkerSymbol
class represents a symbol provided by a linker.The new
extra_frame_handlers
parameter lets you add custom HDLC frame handlers when using the Python-based pw_system console.
Modules#
pw_allocator#
New features:
The new
PW_ALLOCATOR_ENABLE_PMR
macro lets you disable the ability to use an allocator with the polymorphic versions of standard library containers. Commit: Make pw::Allocator::as_pmr optional.
Changes:
Multiple methods were renamed or removed in preparation for upcoming work to split up
pw::allocator::Block
. Commit: Streamline Block API.
pw_assert#
Changes:
pw_assert
now verifies whetherPW_CHECK
message arguments are valid, regardless of whatpw_assert
backend is being used. Commit: Verify PW_CHECK message arguments in the API.
pw_assert_tokenized#
New features:
pw_assert_HandleFailure
is now supported. Commit: Support pw_assert_HandleFailure.
pw_async2#
New features:
pw::async2::Join
lets you join several separate pendable values. Commit: Add Join combinator.
The new
pw::async2::TimeFuture::Reset()
method resets aTimeFuture
instance to expire at a specified time. Commit: Add TimerFuture::Reset.
Changes:
Waker storage has moved to a macro-based API. See
PW_ASYNC_STORE_WAKER
andPW_ASYNC_CLONE_WAKER
. Commit: Move to macro-based Waker API. Bug: b/376123061.
pw_bluetooth_proxy#
New features:
Bazel builds are now supported. Commit: Add bazel build support.
pw_build#
New features:
The new
pw::LinkerSymbol
class represents a symbol provided by a linker. Commit: Add LinkerSymbol.
pw_channel#
Changes:
pw::channel::AnyChannel::Write
was renamed topw::channel::AnyChannel::StageWrite()
andpw::channel::AnyChannel::PendFlush
was renamed topw::channel::AnyChannel::PendWrite()
. Commit: Rename {Write->StageWrite, PendFlush->PendWrite}.
pw_containers#
New features:
pw::IntrusiveSet
is a new class likestd::set<Key, Compare>
that uses intrusive items as keys andpw::IntrusiveMultiSet
is a new class likestd::multiset<Key, Compare>
that uses intrusive items. Commit: Add IntrusiveSet and IntrusiveMultiSet.
Changes:
The
erase
methods ofpw::containers::future::IntrusiveList
,pw::IntrusiveMap
, andpw::IntrusiveMultiMap
have been overloaded to make them easier to use. Commit: Add methods to erase by item.
pw_log#
Changes:
The signature for
PW_LOG
macro changed. Averbosity
level must now always be passed as the second argument when invokingPW_LOG
. Commit: Explicitly pass verbosity to PW_LOG.
pw_multibuf#
New features:
The new
pw::multibuf::FromSpan()
function creates a multibuf from an existing span and adeleter
callback. Commit: Add FromSpan. Bug: b/373725545.
pw_multisink#
New features:
The new
pw::multisink::UnsafeDumpMultiSinkLogsFromEnd()
utilitiy function dumps contents as a series of log entries. Commit: Add UnsafeForEachEntryFromEnd(). Bug: b/375653884.
pw_polyfill#
Changes:
PW_CONSTINIT
now fails when used without compiler support. Commit: Make PW_CONSTINIT support mandatory.
pw_protobuf#
Bug fixes:
pw_protobuf
now fails when themax_count
orfixed_count
options ofpwpb
are used on unsupported field types. Commit: Fail when a max count is set with an unsupported type.
Changes:
Code generator options can now be specified in files ending with
.pwpb_options
. This is useful for projects that wish to strictly separate Nanopb andpw_protobuf
options. Commit: Allow .pwpb_options as an options file extension.
pw_ring_buffer#
New features:
pw_ring_buffer
readers now support the--
decrement operator. Commit: Add a decrement operator. Bug: b/375653884.
pw_system#
New features:
The new
extra_frame_handlers
parameter lets you add custom HDLC frame handlers when using the Python-basedpw_system
console. Commit: Make console support extra hdlc frame handlers.
Bug fixes:
A bug was fixed where the latest logs were not being captured in crash snapshots. Commit: Ensure latest logs are captured in crash snapshot. Bug: b/375653884.
The
pw_system
crash dump now includes a main stack thread backtrace. Commit: Add main stack thread backtrace capture to crash dump. Bug: b/354767156.
The
pw_system
crash dump now includes FreeRTOS thread backtraces. Commit: Add freertos thread backtrace capture to crash dump. Bug: b/354767156.
pw_thread#
Changes:
The legacy
thread::Id
alias has been migrated topw::Thread::id
. Commit: Migrate to Thread::id. Bug: b/373524945.
pw_tokenizer#
New features:
PW_APPLY
is a new general macro that supports macro expansion and makes tokenizing enums easier. Commit: Create generic macro for tokenizing enums. Bug: b/3627557773.
pw_toolchain#
New features:
pw_toolchain
now supports the Arm Cortex-M55F GCC toolchain. Commit: Add ARM Cortex-M55F GCC toolchain. Bug: b/375562597.
pw_unit_test#
New features:
The new
PW_TEST_EXPECT_OK
,PW_TEST_ASSERT_OK
, andPW_TEST_ASSERT_OK_AND_ASSIGN
macros provide test matchers for pw_status and pw_result values. Commit: Define pw::Status matchers. Bugs: b/338094795, b/315370328.
Changes:
RUN_ALL_TESTS()
is now a function. Previously it was a macro. Commit: Use a function for RUN_ALL_TESTS().
pw_watch#
New features:
pw_watch
can now be invoked throughbazelisk
. Commit: Bazel run support. Bug: b/360140397.
Docs#
New features:
The Sense tutorial has expanded guidance around handling crashes and viewing snapshots. Commit: Add crash handler section to sense tutorial. Bug: b/354767156.
Targets#
RP2350#
New features:
MemManage
,BusFault
, andUsageFault
exception handlers are now enabled on the RP2350 target. Commit: Add MemManage, BusFault & UsageFault exception handler. Bug: b/354767156.
Oct 17, 2024#
Highlights (Oct 04, 2024 to Oct 17, 2024):
Math module: The new pw_numeric module is a collection of mathematical utilities optimized for embedded systems.
C++ Coroutines: The new Pigweed Eng Blog #5: C++20 coroutines without heap allocation blog post discusses the nuances of using coroutines in embedded systems.
New SEEDs: SEEDs 0103: pw_protobuf: Past, present, and future and 0128: Abstracting Thread Creation were accepted.
Modules#
pw_allocator#
New features:
The new
pw::Allocator::MakeUniqueArray()
template function allows aUniquePtr
to hold an array of elements. Commit: Add UniquePtr::MakeUniqueArray.
The new
pw::allocator::BlockResult
class communicates the results and side effects of allocation requests. Commit: Add BlockResult.
Bug fixes:
A data race was fixed. Commit: Fix data race. Bug: b/372446436.
pw_async2#
New features:
The new
pw::async2::EnqueueHeapFunc()
function heap-allocates space for a function and enqueues it to run on a dispatcher. Commit: Add EnqueueHeapFunc.
Changes:
pw::async2::PendFuncTask
now has a default template type ofpw::Function
. Commit: Provide default template type for PendFuncTask.
pw_build#
New features:
The newly relanded
pw_copy_and_patch_file
feature provides the ability to patch a file during a Bazel or GN build. Commit: Add pw_copy_and_patch_file.
pw_cli_analytics#
New features:
The new pw_cli_analytics module collects and transmits analytics on usage of the
pw
command line interface. Commit: Initial commit. Bug: b/319320838.
pw_console#
Bug fixes:
A divide-by-zero error in the
pw_console
progress bar was fixed. Commit: Fix progress bar division by zero.
pw_env_setup#
Changes:
//pw_env_setup/py/pw_env_setup/cipd_setup/black.json
has been removed. Commit: Remove black.json.
Python 2 support has been removed from
pw_env_setup
. Commit: Drop Python 2 support. Bug: b/373905972.
pw_numeric#
New features:
The new pw_numeric module is a collection of mathematical utilities optimized for embedded systems. Commit: New module for mathematical utilities.
The new
pw::IntegerDivisionRoundNearest()
function performs integer division and rounds to the nearest integer. It gives the same result asstd::round(static_cast<double>(dividend) / static_cast<double>(divisor))
but requires no floating point operations and isconstexpr
. Commit: Rounded integer division.
pw_protobuf#
Changes:
oneof
protobuf fields can’t be inlined within a message structure. They must be encoded and decoded using callbacks. See Per-Field Writers and Readers. Commit: Force use of callbacks for oneof. Bug: b/373693434.
The
import_prefix
parameter in thepw_protobuf.options.load_options
Python function was replaced with anoptions_files
parameter that lets you directly specify the location of.options
files. Commit: Support directly specifying options file locations. Bug: b/253068333.
pw_rpc#
Bug fixes:
A bug was fixed where previously
Call
objects were not getting reinitialized correctly. Commit: Fix Call not getting reset on default constructor assignment. Bug: b/371211198.
pw_spi#
Changes:
pw::spi::Initiator
now uses a non-virtual interface (NVI) pattern. Commit: Use non-virtual interface (NVI) pattern on pw::spi::Initiator. Bug: b/308479791.
pw_stream_uart_mcuxpresso#
Changes:
pw_stream_uart_mcuxpresso is being merged into pw_uart_mcuxpresso. Commit: Remove dma_stream. Bug: b/331617914.
pw_system#
New features:
The new
--debugger-listen
and--debugger-wait-for-client
options make it easier to debug thepw_system
console. Commit: Add `debugger-listen` and `debugger-wait-for-client` options.
pw_tokenizer#
New features:
All domains from ELF files are now loaded by default. Commit: Load all domains from ELF files by default. Bugs: b/364955916, b/265334753.
CSV databases now include the token’s domain as the third column. Commit: Include the domain in CSV databases. Bug: b/364955916.
Tokenizing enums is now supported. Commit: Add support for tokenizing enums. Bug: b/362753838.
Changes:
When a domain is specified, any whitespace will be ignored in domain names and removed from the database. Commit: Ignore whitespace in domain values. Bug: b/362753840.
pw_toolchain#
New features:
The new Compiler-specific build logic documentation provides guidance on how to handle logic that differs between compilers. Commit: Add Bazel mechansim for clang/gcc-specific flags. Bug: b/361229275.
pw_uart#
New features:
The new
pw::uart::UartStream
class implements thepw::stream::NonSeekableReaderWriter
interface on top of a UART device. Commit: Add pw::uart::UartStream. Bug: b/331603164.
The new
pw::uart::UartBlockingAdapter
class provides a blocking UART interface on top of apw::uart::UartNonBlocking
device. Commit: Add UartBlockingAdapter. Bug: b/369679732.
The new
pw::uart::UartNonBlocking::FlushOutput()
function ensures that all enqueued data has been transmitted. Commit: Add UartNonBlocking::FlushOutput(). Bug: b/370051726.
pw_web#
Changes:
The
device
RPC APIs now support creating request messages for RPCs and calling thedevice
API with those request messages. Commit: Improvements to `device` RPC APIs.
Docs#
New features:
The new Pigweed Eng Blog #5: C++20 coroutines without heap allocation blog post discusses the nuances of using coroutines in embedded systems. Commit: Add coroutine blog post.
Changes:
Guides for contributing
pigweed.dev
documentation have been consolidated into Docs contributor guides. Commit: Consolidate content for pigweed.dev contributors.
SEEDs#
New features:
SEED 0103: pw_protobuf: Past, present, and future was accepted. Commit: (SEED-0103) pw_protobuf: Past, present, and future.
0128: Abstracting Thread Creation was accepted. Commit: (SEED-0128) Abstracting thread creation.
Targets#
RP2040#
New features:
A new helper,
flash_rp2350
, was added to//targets/rp2040/flash.bzl
. Commit: Update `flash_rp2040` helper with –chip argument.
Oct 3, 2024#
Highlights (Sep 20, 2024 to Oct 3, 2024):
The pw_async2 and pw_containers docs now contain code examples that are built and tested alongside the rest of Pigweed, minimizing the chance that they bit rot over time.
The new
pw::async2::Dispatcher
class is a single- threaded, cooperatively scheduled runtime for async tasks.The new
pw::uart::UartBase
class provides a common abstract base class for UART interfaces.pw::rpc::RawServerReaderWriter
andpw::rpc::RawClientReaderWriter
have new methods that let you directly serialize RPC payloads to the RPC system’s encoding buffer instead of requiring a copy from an externally managed buffer.
Modules#
pw_allocator#
New features:
The new
pw::allocator::CalculateFragmentation()
method calculates a fragmentation metric. This should not be invoked on-device unless the device has robust floating-point support. Commit: Add MeasureFragmentation.
pw_async2#
New features:
The new
pw::async2::Dispatcher
class is a single- threaded, cooperatively scheduled runtime for async tasks. Commit: Refactor Dispatcher to raise top-level API out of CRTP. Bug: b/342000726.
The pw_async2 docs now have examples. Commit: Expand docs with examples.
pw_boot#
Changes:
The
main()
function forward declaration has been moved out of an explicitextern C
block to prevent pedantic warnings in newer Clang toolchains. Commit: Move main forward declaration out of extern “C” block. Bug: b/366374135.
pw_build#
Changes:
The rules that previously existed in
//pw_build/pigweed.bzl
have been split into separate files. If you relied on//pw_build/pigweed.bzl
you may need to update someload()
statements in your Bazel files. Commit: Break apart pigweed.bzl. Bug: b/370792896.
pw_chrono#
New features:
The new
--stamp
Bazel flag ensures that Bazel builds properly record the actual build time as opposed to a cached value. Commit: Properly stamp build time in Bazel. Bug: b/367739962.
pw_containers#
New features:
The
pw_containers
docs now provides examples on how to add intrusive items to multiple containers. See Example. Commit: Multiple container example.
The pw_containers docs now have code examples that are built and tested as part of the normal upstream Pigweed build, which helps ensure that they don’t bit rot. Commit: Add examples.
Bug fixes:
A bug was fixed where nodes in an
AATreeItem
could become orphaned. Commit: Fix tree rebalancing.
pw_log#
Changes:
The
PW_MODULE_LOG_NAME_DEFINED
macro has been removed. Commit: Remove unused macro PW_MODULE_LOG_NAME_DEFINED.
pw_metric#
Bug fixes:
A bug causing
pw::metric::Metric::Dump()
andpw::metric::Group::Dump()
to log invalid JSON objects was fixed. Commit: Emit valid JSON from Metric::Dump.
pw_preprocessor#
Changes:
PW_MACRO_ARG_COUNT
now supports up to 256 arguments. Commit: Expand PW_MACRO_ARG_COUNT to 256 arguments.
pw_presubmit#
Bug fixes:
A bug was fixed that was causing Pigweed’s auto-generated
rustdoc
API references to not be built.rustdoc
documentation atpigweed.dev/rustdoc/*
should be working again. Commit: Have docs_build check rust docs. Bug: b/369864378.
pw_rpc#
New features:
pw::rpc::RawServerReaderWriter
andpw::rpc::RawClientReaderWriter
have new methods that let you directly serialize RPC payloads to the RPC system’s encoding buffer instead of requiring a copy from an externally managed buffer. Commit: Add callback writes to raw RPC call objects.
pw_spi#
New features:
operator!=
is now implemented. Commit: Minor enhancements to pw::spi::Config.
Changes:
operator()
,operator==
, andoperator!=
are now markedconstexpr
to enable compile-time equality checking. Commit: Minor enhancements to pw::spi::Config.
pw_spi_rp2040#
Changes:
spi_init()
from the Pico SDK must be called before using thepw_spi
initiator. Commit: Minor cleanup.
pw_thread#
Changes:
The old
pw::Thread
constructor that takesvoid(void*)
has been removed from the public API. This is a breaking change. Constructor usage should be migrated to the new constructor that takespw::Function<void()>
. Commit: Make the deprecated Thread constructor private. Bug: b/367786892.
The
pw::thread::Thread
class was renamed topw::Thread
. Commit: Migrate from pw::thread::Thread to pw::Thread.
pw::thread::Id
has been renamed topw::Thread::id
. Commit: Introduce pw::Thread and pw::Thread::id.
pw_tokenizer#
New features:
The new
PW_TOKENIZER_DEFINE_TOKEN
macro makes it easier to support tokenized enums and domains. Commit: Expose API to define new token entry. Bug: b/369881416.
Changes:
CSV databases now have 4 columns: token, date removed, domain, and string. The domain column was added as part of 0105: Nested Tokens and Tokenized Log Arguments. Legacy databases that only support the other 3 columns continue to be supported. Tokens in legacy databases are always in the default domain
""
. Commit: Support CSV databases with the domain. Bug: b/364955916.
pw_toolchain#
Changes:
The
pw_toolchain
docs were refactored. Bazel-specific guidance is now in Bazel build system integrations and GN-specific guidance is now in GN build system integrations. Commit: Split out build-system specific docs.
The Bazel rules at
//pw_toolchain/args/BUILD.bazel
moved to//pw_toolchain/cc/args/BUILD.bazel
. If you rely on these rules you may need to update yourload()
statements. Commit: Move pw_toolchain/args to pw_toolchain/cc/args.
pw_transfer#
Bug fixes:
A bug was fixed where resumed transfers would send a window of
0
repeatedly. Commit: Fix offset receive transfer startup. Bug: b/368620868.
pw_uart#
New features:
The new
pw::uart::UartBase
class provides a common abstract base class for UART interfaces. Commit: Add UartBase class. Bug: b/369678735.
The new
pw::uart::Uart::ReadAtLeast()
method reads data from the UART and blocks until at least the specified number of bytes have been received. The newpw::uart::Uart::ReadExactly()
method reads data from the UART and blocks until the entire buffer has been filled. Commit: Add ReadAtLeast and ReadExactly methods. Bug: b/368149122.
The new
pw::uart::UartNonBlocking
class provides a callback-based interface for performing non-blocking UART communication. It defines the interface that concrete UART implementations must adhere to. Commit: Add uart_non_blocking.h API. Bugs: b/341356437, b/331617095.
The new
pw::uart::Uart::SetFlowControl()
method lets applications configure hardware flow control on UART devices. Commit: Add method to set flow control.
Changes:
pw::uart::Uart::ConservativeReadAvailable()
was moved topw::uart::UartBase::ConservativeReadAvailable()
andpw::uart::Uart::ClearPendingReceiveBytes()
was moved topw::uart::UartBase::ClearPendingReceiveBytes()
. Commit: Move non-blocking methods from Uart to UartBase. Bug: b/369679732.
pw_uart_mcuxpresso#
Bug fixes:
A bug was fixed where the
pw::uart::DmaUartMcuxpresso::Deinit()
method didn’t clear an initialization flag, which caused thepw::uart::DmaUartMcuxpresso::Init()
method to be skipped on subsequent enables. Commit: Fix disable bug.
Docs#
New features:
The Pigweed blog now has an RSS feed. Commit: Create RSS feed for blog. Bug: b/345857642.
The new blog post Pigweed Blog #4: Fixed-point arithmetic as a replacement for soft floats outlines how replacing soft floats with fixed-point arithmetic can result in speed improvements and binary size reductions without sacrificing correctness. Commit: Add fixed point blog.
Bug fixes:
When a Pigweed module is listed as supporting Rust in
//docs/module_metadata.json
, a link to that module’srustdoc
API reference is now auto-generated in thepigweed.dev
site nav. Commit: Auto-link to Rust API references. Bug: b/328503976.
SEEDs#
Changes:
SEED-0123 was rejected because Pigweed ended up upstreaming the relevant APIs to
rules_cc
instead of sprouting them into a separate repo. Commit: (SEED-123) Reject the SEED.
Targets#
The
main()
forward declaration foremcraft_sf2_som
,host_device_simulator
, andstm32f429i_disc1_stm32cube
are no longer explicitly markedextern C
to prevent pedantic warnings in newer Clang toolchains. Commit: Remove implicit extern C. Bug: b/366374135.
Sep 19, 2024#
Highlights (Sep 06, 2024 to Sep 19, 2024):
New container classes: The new
pw::IntrusiveMap
andpw::IntrusiveMultiMap
classes can be used for associative dictionaries, sorted lists, and more.Protobuf Editions: Initial support for Protobuf Editions was added for GN-based and CMake-based projects.
Token domains: The Detokenizer now supports token domains.
Modules#
pw_allocator#
New features:
The new
PW_ALLOCATOR_STRICT_VALIDATION
option lets you enable more expensive checks to aggressively enforce invariants when testing. The newPW_ALLOCATOR_BLOCK_POISON_INTERVAL
option allows setting the poisoning rate more easily from the build rather than in code via template parameters. See Module configuration. Commit: Add module config.
Bug fixes:
A bug was fixed where
pw_allocator
always split the first block even if there was not enough room for the first block to be split into two, which could cause heap corruption and crashes. Commit: Check for room to split the first block. Bug: b/366175024.
pw_assert#
Changes:
PW_CHECK_OK
now accepts any expression that’s convertible topw::Status
. Commit: Update PW_CHECK_OK() to handle any expr convertible to Status. Bugs: b/357682413, b/365592494.
pw_async2#
New features:
The new
pw::async2::SimulatedTimeProvider::AdvanceUntilNextExpiration()
utility method is useful for advancing test time without random periods or endless iterations. Commit: Add more SimulatedTimeProvider utilities.
Changes:
Coroutines now log the requested size when an allocation fails. Commit: Log size of failed coroutine allocations.
pw_build#
Bug fixes:
An issue was fixed where bootstrap failed when
pw_rust_static_library
was used. Commit: Fix Undefined identifier.
pw_bytes#
New features:
The new
pw::PackedPtr
template class provides a way to store extra data in the otherwise unused least significant bits of a pointer. Commit: Add PackedPtr.
pw_containers#
New features:
pw::IntrusiveList
now has a size report. Commit: Add IntrusiveForwardList size report to the docs.
The new
pw::IntrusiveMap
andpw::IntrusiveMultiMap
classes can be used for associative dictionaries, sorted lists, and more. Commit: Add IntrusiveMap and IntrusiveMultiMap.
Changes:
pw::IntrusiveList<T>
was renamed topw::IntrusiveForwardList<T>
and a new doubly-linked intrusive list was added aspw::containers::future::IntrusiveList<T>
. An alias,pw::IntrusiveList<T>
, was added to maintain compatibility with existing code and will be removed in the future. The original implementation can still be temporarily enabled by settingPW_CONTAINERS_USE_LEGACY_INTRUSIVE_LIST
. Commit: Add doubly linked list. Bug: b/362348318.
pw_env_setup#
Changes:
The Git submodule check is now skipped when no
.git
file or directory is detected. Commit: Add check for git in _check_submodule_presence. Bug: b/365557573.
pw_ide#
Bug fixes:
When
clangd
is not found,pw ide sync
now cleanly handles the lack ofclangd
and successfully completes the rest of the sync. Commit: Don’t fail sync on missing clangd. Bug: b/349189723.
pw_protobuf#
New features:
Initial support for Protobuf Editions was added for GN-based and CMake-based projects. Commit: Basic edition support.
pw_spi_linux#
Bug fixes:
A performance issue was fixed where
Configure()
was being called on eachpw::spi::Device::WriteRead()
call. Commit: Avoid unnecessary ioctl()s in Configure(). Bug: b/366541694.
pw_spi_mcuxpresso#
Changes:
pw::spi::McuxpressoInitiator::DoConfigure()
was renamed topw::spi::McuxpressoInitiator::DoConfigureLocked()
. Commit: Rename DoConfigure() to DoConfigureLocked().
pw_sys_io_stm32cube#
Bug fixes:
A bug was fixed where the GPIO mode of the UART RX GPIO pin on STM32F1XX devices was not being correctly set. Commit: Fix UART RX GPIO mode for f1xx family.
pw_system#
New features:
The console’s new
timestamp_decoder
constructor parameter lets applications provide custom timestamp parsers. Commit: Support timestamp parser as an argument. Bug: b/344606797.
Changes:
The log library header (
pw_system/log.h
) ofpw_system
is now public and can be used outside ofpw_system
. Commit: Make log library header public.
pw_thread#
Changes:
pw::thread::Thread
now takespw::Function<void()>
, which should be used in place of thevoid(void*)
function pointer andvoid*
argument. Commit: Mark legacy function* / void* constructor as deprecated. Bug: b/367786892.
pw_tokenizer#
New features:
The Detokenizer now supports token domains. Commit: Add token domain support to Detokenizer. Bug: b/362752722.
pw_tokenizer.tokens.Database
now supports token domains. Commit: Use domains in the Python tokens.Database class.
pw_toolchain#
New features:
WORKSPACE
toolchain registration is now configurable so that downstream projects can manually control which toolchains get registered. Commit: Make toolchain registration configurable. Bug: b/346388161.
pw_transfer#
Bug fixes:
A bug was fixed where a handshake timeout was not set after
START_ACK
is processed. Commit: Bugfix for start handshake, and rate limit logs. Bug: b/361281209.
Changes:
When a receiver receives a chunk of data it already has the receiver now sends a
PARAMETERS_CONTINUE
chunk instead of requesting retransmission. Commit: Send continue parameters for already received chunks.
TX data chunk logs have been rate-limited to only send once every 3 seconds. Commit: Bugfix for start handshake, and rate limit logs. Bug: b/361281209.
pw_uart_mcuxpresso#
New features:
Flow control can now be configured. Commit: Add support for configuring flow control. Bug: b/368150004.
Changes:
Flow control, parity mode, and stop bits now have default values. Commit: Add support for configuring flow control. Bug: b/368150004.
Build systems#
Bazel#
New features:
The new
do_not_build
tag specifies targets that should be excluded from wildcard builds. The newdo_not_run_test
tag specifies test targets that should be built but not executed. Commit: Introduce do_not_build, do_no_run_test tags. Bug: b/353531487.
Platform-based flags have been re-enabled. Commit: Re-enable platform-based flags. Bug: b/301334234.
Miscellaneous#
Bug fixes:
An issue was fixed where the Fuchsia SDK was always fetched during Bazel workspace initialization and caused unnecessary downloads. Commit: Use @fuchsia_clang as a cipd repository. Bug: b/346416385.
Sep 5, 2024#
Note
This changelog update is shorter than previous ones because we’re experimenting with only showing user-facing new features, changes, and bug fixes. I.e. we’re omitting commits that don’t affect downstream Pigweed projects.
Highlights (Aug 24, 2024 to Sep 5, 2024):
New backends: pw_async_fuchsia (a
pw_async
backend for Fuchsia that implementsTask
andFakeDispatcher
), pw_log_fuchsia (apw_log
backend for Fuchsia that uses thefuchsia.logger.LogSink
FIDL API to send logs), pw_random_fuchsia (apw_random
backend for Fuchsia that implementspw::random::RandomGenerator
) and pw_uart_mcuxpresso (apw_uart
backend for NXP MCUXpresso devices).New theme: The underlying Sphinx theme powering
pigweed.dev
is now PyData. In addition to improving website usability, this theme should also reduce thepigweed.dev
maintenance workload over time. See 0130: Update Sphinx theme for more information.Arm Cortex-M55 support:
pw_toolchain
andpw_system
now support Arm Cortex-M55 cores.Bazel cloud demo: The new Bazel cloud features page in the Sense tutorial shows you how to use BuildBuddy to share logs and speed up builds with remote caching.
Modules#
pw_async2#
The new
pw::async2::TimeProvider
class can be used to create timers in a dependency-injection-friendly way. Commit: Add TimeProvider
pw_async_fuchsia#
pw_async_fuchsia is a new
pw_async
backend for Fuchsia that implementsTask
andFakeDispatcher
. Commit: Create pw_async Fuchsia backend
pw_chrono#
pw::chrono::VirtualClock
is a new virtual base class for timers that enables writing timing-sensitive code that can be tested using simulated clocks such aspw::chrono::SimulatedSystemClock
. Commit: Add VirtualClock
pw_cli#
The new
pw_cli.git_repo.GitRepo.commit_date()
method returns the datetime of a specified commit. Commit: Add in option to retrieve commit date
pw_digital_io_mcuxpresso#
The GPIO clock is now enabled even when GPIO is disabled. Commit: Enable gpio clock even when disabling gpio (issue #356689514)
pw_log_fuchsia#
pw_log_fuchsia is a new
pw_log
backend that uses thefuchsia.logger.LogSink
FIDL API to send logs. Commit: Create pw_log Fuchsia backend
pw_log_rpc#
pw_log_rpc.LogStreamHandler.listen_to_logs()
was renamed topw_log_rpc.LogStreamHandler.start_logging()
. Commit: Invoke pw.log.Logs.Listen() to restore prior behavior (issue #364421706)
pw_log_zephyr#
Use of shell
printf
macros withinif
blocks that don’t use braces no longer causes compile errors. Commit: Make shell printf macros safe for use in if/else blocks
pw_package#
picotool
installation on macOS was fixed. Commit: Fix pictotool install on mac
pw_random_fuchsia#
pw_random_fuchsia provides an implementation of
pw::random::RandomGenerator
that uses Zircon. Commit: Create Fuchsia backend for pw_random
pw_rpc#
New documentation (Falling back to raw methods) was added that explains how to define a raw method within a non-raw service. Commit: Provide examples of raw methods in docs
Many RPC-related classes were moved out of
pw_hdlc
and intopw_rpc
orpw_stream
. Commit: Relocate RPC classes from pw_hdlc (issues #330177657, #360178854)
pw_spi_mcuxpresso#
The new
pw::spi::FifoErrorCheck
enum lets you configure whetherpw::spi::McuxpressoResponder
instances should log FIFO errors. Commit: Add check_fifo_error to responder config
pw_stream_uart_linux#
The new
pw::stream::UartStreamLinux::Config
struct lets you configure baud rate and control flow. Commit: Add Config struct (issue #331871421)
pw_sync#
pw::sync::InterruptSpinLock::try_lock()
and similar functions have been annotated with[[nodiscard]]
which means that ignoring their return values will result in compiler warnings. Commit: [[nodiscard]] for try_lock() and similar functions
pw_system#
pw_system now supports Arm Cortex-M55 systems. Commit: Support ARM Cortex M55 system (issue #361691368)
pw_thread#
pw::thread::Options
has moved to its own header (pw_thread/options.h
) to make it possible to work with the class without relying on the thread facade. Commit: Move pw::thread::Options to its own header
pw_tokenizer#
In Python the detokenizer prefix is now set in the
pw_tokenizer.detokenize.Detokenizer
constructor. Commit: Set prefix in Detokenizer; fix typing issues
pw_toolchain#
Arm Cortex-M55 toolchain support was added. Commit: Add ARM Cortex-M55 toolchain (issue #361691368)
pw_uart_mcuxpresso#
The new pw_uart_mcuxpresso module is a pw_uart backend for NXP MCUXpresso devices. Commit: Introduce DMA UART backend for NXP devices
Docs#
New documentation (Logging) about logging best practices was added. Commit: Add logging recommendations
The new Bazel cloud features page in the Sense tutorial shows you how to use BuildBuddy to share logs and speed up builds with remote caching. Commit: Add cloud build section to Sense tutorial (issue #363070027)
Contributing now links to good first issues for people who want to contribute to upstream Pigweed. Commit: Add link to good first issue list
pigweed.dev/live
now links to the Pigweed Live meeting notes. Commit: Add shortlink for Pigweed Live notes
Targets#
RP2350#
RP2350 crash snapshots now show the correct architecture. Commit: Fix architecture in crash snapshot (issue #362506213)
Aug 23, 2024#
Highlights (Aug 8, 2024 to Aug 23, 2024):
RP2350 Support: Pigweed now supports the new Raspberry Pi RP2350 MCU. Check out Google Pigweed comes to our new RP2350 on the Raspberry Pi blog for the full story and Sense: An interactive tour though Pigweed to try it out.
Build systems#
Bazel#
Modules#
pw_allocator#
pw_async2#
The new pw::async2::MakeOnceSenderAndReceiver()
function template makes it
easier to simultaneously create a sender and receiver for asynchronously
sending values. The new pw::async2::MakeOnceSenderAndReceiver()
function
template works similarly but is used for references.
pw_bloat#
The pw bloat
CLI command now supports a --custom-config
option to
specify a custom Bloaty config file so that non-memory regions can be
analyzed.
pw_bluetooth#
pw_bluetooth_proxy#
pw_bluetooth_sapphire#
pw_build#
The new glob_dirs()
Starlark helper returns a list of directories matching
the provided glob pattern. The new match_dir()
Starlark helper returns a
single directory that matches the provided glob pattern and fails if there’s
more than one match.
pw_channel#
pw_cpu_exception_cortex_m#
pw_display#
The new pw_display experimental module provides graphic display support and framebuffer management.
pw_env_setup#
pw_grpc#
When a frame with a payload has a stream-reset error, the payload is now skipped.
pw_i2c_rp2040#
The clock_frequency
field in pw::i2c::Rp2040Initiator::Config
has been
renamed to clock_frequency_hz
.
pw_ide#
pw_ide
now searches all parent directories for the presence of a
pigweed.json
file to determine the root directory. The workspace
root can be programmatically configured via the new
pw_ide.settings.PigweedIdeSettings.workspace_root
property. The
pigweed.activateBazeliskInNewTerminals
option in VS Code now defaults
to false
.
pw_kvs#
References to pw::kvs::Key
must be replaced with std::string_view
.
pw_module#
pw_multibuf#
The pw::multibuf::MultiBuf::Chunks()
method and
pw::multibuf::MultiBuf::ChunkIterable
class have been removed; use the
new pw::multibuf::MultiBufChunks
class instead.
pw_package#
pw_preprocessor#
The new PW_MODIFY_DIAGNOSTIC_CLANG
define lets you handle Clang-only
warnings separately from other compilers.
pw_rpc#
Java client: The new PacketByteFactory
Java class is a helper for creating
request and response packets during testing.
Python client: The pw_rpc.console_tools.watchdog.Watchdog
Python class has a
new stop()
method to stop the watchdog. The
pw_rpc.callback_client.call.Call
Python class now accepts a
max_responses
argument that lets you limit how many responses should be
received after a streaming RPC call. The ignore_errors
,
cancel_duplicate_calls
, and override_pending_options
arguments
previously available in some Python client methods have been removed.
TypeScript client: The invoke()
method in the TypeScript client now accepts
a maxResponses
argument which lets you limit how many responses to a
streaming RPC call should be stored.
pw_spi_linux#
pw_status#
The StatusWithSize::size_or()
method has been removed.
pw_stream#
pw_system#
The pw_system.device.Device
class constructor now accepts an Iterable
of proto libraries rather than a list
.
pw_thread#
pw_tokenizer#
pw_trace_tokenized#
pw_transfer#
Transfer handler registration and unregistration functions now return a boolean indicating success or failure. The C++ client now always includes a protocol version in the final chunk.
pw_unit_test#
Docs#
Fix Pigweed Live CTA link (issue #357957451)
Targets#
rp2350#
Pigweed now supports the new Raspberry Pi RP2350 MCU.
Add support for RP2350 (issue #354942782)
rp2040#
Third-party software#
Emboss#
Fuchsia#
Rolls#
Miscellaneous#
Owners#
Aug 7, 2024#
Highlights (Jul 26, 2024 to Aug 7, 2024):
Tour of Pigweed: The new Tour of Pigweed is a hands-on, guided walkthrough of many key Pigweed features working together in a medium-complexity application.
Easier pw_digital_io testing: The new
pw::digital_io::DigitalInOutMock
class is a mock implementation ofpw:digital_io::DigitalInOut
that can be used for testing.Code intelligence in VS Code: The new Code intelligence document provides guides on using the code intelligence features of the
pw_ide
extension for VS Code.
Build systems#
Bazel#
Modules#
pw_allocator#
Add missing include (issue #356667663)
pw_bluetooth#
ReadLocalSupportedCommandsCommandCompleteEvent
now provides both a raw bytes
field (supported_commands_bytes
) and a sub-struct (supported_commands
)
for easier access to command bits. You can use either SupportedCommandsOctet
or SupportedCommands
to parse a saved uint8_t[64]
.
pw_bluetooth_proxy#
pw_bluetooth_sapphire#
Write Variable PIN Type for Legacy Pairing (issues #42173830, # b/342151162)
Add LegacyPairingState to BrEdrConnectionRequest (issue #42173830)
Create and implement LegacyPairingState class (issues #342150626, #42173830)
Translate information & additional attributes (issue #327758656)
Return registered services after bredr.Advertise (issue #327758656)
Switch over to pw::utf8 (issue #337305285)
Fix statement expression extension warnings (issue #355511476)
Remove CommandPacketVariant (issue #42167863)
Clean up some type sizes (issue #354057871)
pw_build#
pw_chrono_stl#
System clock and timer interfaces have been moved to separate directories so that you can pick up the backend of one of these without bringing in the other. This makes it possible to use a custom system timer with the STL system clock, for example.
pw_clock_tree_mcuxpresso#
The new pw::clock_tree::ClockMcuxpressoClockIp
class lets you manage
clock_ip_name_t
clocks with the clock tree to save power when
FSL_SDK_DISABLE_DRIVE_CLOCK_CONTROL
is set.
pw_console#
pw_digital_io#
The new pw::digital_io::DigitalInOutMock
class is a mock implementation
of pw:digital_io::DigitalInOut
that can be used for testing.
pw_digital_io_linux#
The default pw_log
logging level changed from DEBUG
to INFO
.
pw_digital_io_rp2040#
pw_env_setup#
pw_hex_dump#
pw_ide#
The Pigweed extension for VS Code will now immediately update the code analysis
target if the pigweed.codeAnalysisTarget
setting in settings.json
is
changed. The new pigweed.activateBazeliskInNewTerminals
setting lets you
specify whether the path to Bazelisk should be added when a VS Code terminal is
launched. The new Code intelligence document
provides guides on using the VS Code extension’s code intelligence features.
pw_multibuf#
Add missing includes (issue #356667663)
pw_multisink#
The new pw::multisink::Drain::GetUnreadEntriesCount()
method is a
thread-safe way to return the number of unread entries in a drain’s sink.
pw_presubmit#
pw_router#
Add missing includes (issue #356667663)
pw_rpc#
pw_rust#
The new pw_rust_USE_STD
toolchain configuration option lets you control
whether the “std” feature should be used when building executables.
pw_spi_mcuxpresso#
pw_status#
PW_STATUS_CFG_CHECK_IF_USED
now defaults to true
in Bazel projects,
meaning that pw::Status
objects returned from function calls must be used or
else a compilation error is raised. See Unused result warnings.
pw_symbolizer#
pw_system#
The pw_system
console now lets you control host log and device log levels
separately via the new --host-log-level
and --device-log-level
arguments. The new echo()
, reboot()
, and crash()
methods of
pw_system.device.Device
make it easier to access these common
operations. Crash snapshots are now saved to /tmp
(C:\\TEMP
on Windows)
by default. Crash detection logs are now printed across multiple lines to make
them easier to spot.
pw_tokenizer#
pw_toolchain#
pw_transfer#
pw_web#
The log viewer now defaults to using line wrapping in table cells. The new
logViews
property makes it easier to customize each individual log view.
The severity
field for controlling what types of logs to display has
been renamed to level
.
Docs#
The new Tour of Pigweed is a hands-on, guided walkthrough of many key Pigweed features working together in a medium-complexity application.
Rolls#
Third-party software#
Emboss#
ICU#
STM32Cube#
bzlmod-friendly changes (issue #258836641)
Miscellaneous#
Jul 25, 2024#
Highlights (Jul 12, 2024 to Jul 25, 2024):
Extensive Bazel support in the Pigweed extension for VS Code: See pw_ide for the full story.
Bazel module support: Upstream Pigweed is now usable as a Bazel module dependency.
Trapping backend for pw_assert: pw_assert_trap is a new backend for pw_assert that calls
__builtin_trap()
when an assert is triggered.Crash handling in async pw_system: Crash snapshots can be downloaded from
pw_console
by callingdevice.get_crash_snapshots()
in the REPL.
Build systems#
Bazel#
Toolchain registration moved from WORKSPACE
to MODULE.bazel
, making
it possible for downstream projects to use upstream Pigweed’s toolchains
directly. Pigweed is now usable as a Bazel module dependency. Pigweed now
provides an example .bazelrc
at //pw_build/pigweed.bazelrc
that
downstream users can copy into their own projects.
Move toolchain registration to MODULE.bazel (issue #258836641)
Enable bzlmod (issue #258836641)
Modernize pip deps style (issue #258836641)
Run tests with asan in CQ (issue #301487567)
Docs#
The fonts on pigweed.dev
have been updated.
Modules#
pw_assert_trap#
pw_assert_trap is a new backend for pw_assert
that calls __builtin_trap()
when an assert is triggered.
pw_async2#
The new pw::async2::CoroOrElseTask
class lets you run a coroutine
in a task and invokes a handler function on error. The new
pw::async2::Task::IsRegistered()
method checks if a task is
currently registered with a dispatcher. The new
pw::async2::Coro::Empty()
method creates an empty, invalid
coroutine object. The new pw::async2::Task::Deregister()
method
unlinks a task from a dispatcher and any associated waker values.
pw_async2_epoll#
pw_bluetooth#
pw_bluetooth_proxy#
pw_bluetooth_sapphire#
The latest pw_bluetooth_sapphire
commits were brought
into Pigweed from the Fuchsia repository.
Remove unused method (issue #42167863)
Remove CommandPacketVariant (issue #42167863)
Create IsoDataChannel (issue #311639040)
Check legacy adv for rand addr in FakeController (issue #42161900)
Implement AcceptCis() (issue #311639432)
Remove unneeded #include (issue #313665184)
Implement IsoStreamServer (issue #311639275)
Modernize fuchsia.hardware.bluetooth.Peer API (issue #330591131)
Create and use PairingStateManager class (issues #342150626, #42173830)
Refactor ScoConnection (issue #330590954)
Clean up legacy advertising report parsing API (issue #308500308)
Add Emboss support to SendCommand completion (issue #311639690)
Improve naming of android namespace aliases (issue #335491380)
Add tests for LE Read Max. Adv. Data Length (issue #338058140)
Ensure command is supported before issuing it (issue #338058140)
Implement extended adv. pdus with fragmentation (issue #312898345, #309013696)
Update semantics of `bredr.Advertise` (issues #330590954, #327758656)
Migrate LEAdvertisingReportSubevent to Emboss (issue #86811)
Lenient LEGetVendorCapabilitiesCommandComplete (issues #337947318, #332924521, #332924195)
Migrate FIDL to bt::testing::TestLoopFixture (issue #324105856)
Update LowEnergyAdvertiser to use std::vector (issue #312898345, #309013696)
Pass extended_pdu booleans through the stack (issue #312898345, #309013696)
Update AdvertisingHandleMap for extended PDUs (issue #312898345, #309013696)
Update missing header (issue #331673100)
Fix conversions from iterators to raw pointers (issue #328282937)
Add bt-host Bazel tests (issue #324105856)
Add Bazel build files (issue #324105856)
pw_build#
pw_py_binary
is a new wrapper for py_binary
that provides some
defaults, such as marking all Python binaries as incompatible with MCUs.
pw_channel#
The new pw::channel::StreamChannel
adapter makes it easier for
a channel to interact with an underlying reader and writer stream.
pw_chrono_freertos#
pw_chrono_stl#
pw_console#
Typing out RPCs to invoke from the web console REPL should now autocomplete
as expected. The web console log viewer now has a default config, defined
at //pw_console/py/pw_console/html/defaultconfig.json
. A new boolean
config option, recolor_log_lines_to_match_level
, has been added to
allow users to control whether log messages should be restyled to match
their severity level.
pw_cpu_exception_cortex_m#
The new PW_CPU_EXCEPTION_CORTEX_M_CRASH_ANALYSIS_INCLUDE_PC_LR
option lets you control whether PC and LR register values are included
in the AnalyzeCpuStateAndCrash()
analysis.
pw_crypto#
Don’t build micro-ecc (issue #261603269)
pw_env_setup#
pw_grpc#
pw_ide#
General updates: pw_ide
now detects Bazel projects based on the presence
of MODULE.bazel
files. The pw_ide docs have been revamped.
Shared VS Code settings can now be stored in .vscode/settings.shared.json
.
The extension no longer attempts to infer the working directory if a project
root isn’t explicitly provided; instead it prompts users to manually specify
the project root. The VS Code extension now has better support for Fish
terminals.
VS Code extension updates related to code intelligence in Bazel-based projects:
The new Pigweed: Select Code Analysis Target
command controls which Bazel
target in your project to use for code intelligence. The new Pigweed: Refresh
Compile Commands
command lets you manually refresh code intelligence data.
There’s also a Pigweed: Refresh Compile Commands and Select Code Analysis
Target
that combines these two steps. In the VS Code status bar there’s a new
icon to indicate whether clangd
code intelligence is on or off. Code
intelligence data compilation output is now streamed so that you can monitor
the progress of the tool in real-time. The easiest way to access these logs is
by running the new Pigweed: Open Output Panel
command. The extension now
supports a .clangd.shared
file that can be used to control project-wide
clangd
settings.
VS Code extension updates related to other Bazel tools: The extension now
bundles Bazelisk and Buildifier. These bundled versions get updated when the
extension itself updates. The extension recommends users to use these bundled
versions by default. You can use the new Activate Bazelisk in Terminal
command to manually specify which Bazelisk version to use.
pw_kvs#
pw_libcxx#
pw_libcxx
now has support for the new
operator.
pw_log#
pw_multibuf#
pw_presubmit#
pw_presubmit.inclusive_language.check_file
now accepts an optional
check_path
argument which controls whether to check the path for
non-inclusive language.
pw_result#
pw_rpc#
Soong proto building is now more flexible; genrules can now have protos from
different sources. .option
files can now be used in Soong genrules sources.
pw_rpc_transport#
pw_sensor#
pw_stream#
pw_stream_uart_mcuxpresso#
pw_string#
The new pw::utf8::ReadCodePoint()
,
pw::utf8::EncodeCodePoint()
, and
pw::utf8::WriteCodePoint()
methods provide basic UTF-8 decoding
and encoding.
Add utf_codecs (issue #337305285)
pw_sync#
The condition variable interface has been deprecated. See Condition Variables.
pw_system#
Async pw_system
now supports a crash handling service. When a crash
snapshot is available, pw_system
now logs instructions on how to download
it. The pw_system
console API now accepts an optional
device_connection
object, allowing for more flexible connection
management. Device class creation has been refactored to make it easier for
Python scripts to setup connections to devices in the same way that the
pw_system
console does. As part of this refactor the --output
and --proto-globs
flags were removed from the pw_system
console.
pw_target_runner#
pw_thread#
The new pw::thread::TestThreadContext()
interface makes it easier to
create threads for unit tests.
pw_tokenizer#
Missing <string> includes (issue #298822102)
pw_toolchain#
The new minimum_cxx_20()
Bazel helper can be used with
target_compatible_with
attributes to express that a target
requires C++20 or newer.
Select Bazel C++ version with config_setting (issue #352379527)
Add linux_sysroot.bzl (issue #258836641)
Pico Bazel build (issue #261603269)
pw_trace_tokenized#
Fix bazel build (issues #260641850, #258071921)
pw_transfer#
The new PW_TRANSFER_EVENT_PROCESSING_TIMEOUT_MS
lets you control how
long incoming transfer events should block on the previous event being
processed before dropping the new event.
pw_unit_test#
pw_web#
The REPL in the web console now provides a welcome message that lists commonly used keyboard shortcuts. The log viewer UI is now more dense. The REPL is now positioned on the left by default. Pressing Shift+Enter in the REPL now goes to a new line rather than evaluating.
Third-party software#
Emboss#
Emboss was updated to v2024.0718.173957. Emboss build steps that involve Python now use an optimized version of Python, resulting in a 15% speedup.
Go#
Miscellaneous#
Rolls#
FreeRTOS was updated to version 10.5.1.bcr.2
. CMake was bumped to version
3@3.30.1.chromium.8
. Rust was updated to Git revision
73a228116ae8c8ce73e309eee8c730ce90feac78
.
FreeRTOS for upstream (issue #355203454)
rules_python (issue #258836641)
Fuchsia SDK (issues #258836641, #353749536)
Targets#
RP2040#
Jul 11, 2024#
Highlights (Jun 28, 2024 to Jul 11, 2024):
Bazel 8 pre-release: Upstream Pigweed is now using a pre-release version of Bazel 8, the first version to include platform-based flags.
ARMv6-M support: pw_cpu_exception_cortex_m now supports ARMv6-M cores.
Browser-based pw_system console: The new
--browser
option lets you start apw_system
console in a web browser rather than the default Python-based terminal console.Updated pw_rpc docs: The pw_rpc docs have been revamped to make getting started easier and to provide more Bazel guidance.
Build systems#
Bazel#
Pigweed is now using version 8.0.0-pre.20240618.2 of Bazel, the first version
to include platform-based flags. Some backend collection targets are now being
provided as dictionaries to enable downstream projects to use the pattern
described in Provide default backend collections as dicts. The
incompatible_with_mcu
Bazel helper has been introduced to help express
whether a target is only compatible with platforms that have a full-featured
OS.
Docs#
Modules#
pw_allocator#
A bug was fixed that caused builds to break when
-Wmissing-template-arg-list-after-template-kw
is turned on.
pw_assert#
Downstream projects using Bazel now need to set the new backend label flags
@pigweed//pw_assert:check_backend
and
@pigweed//pw_assert:check_backend_impl
and include them in their link
deps.
pw_async2#
pw_async2_epoll#
pw_async_basic#
pw_bluetooth#
pw_bluetooth_proxy#
pw::bluetooth::proxy::sendGattNotify()
(lowercase first letter) has been
removed; use pw::bluetooth::proxy::SendGattNotify()
(uppercase first
letter) instead. The new
pw::bluetooth::proxy::GetNumSimultaneousAclSendsSupported()
function
returns the max number of LE ACL sends that can be in-flight at one time.
The new pw::bluetooth::proxy::AclDataChannel::Reset()
and
pw::bluetooth::proxy::ProxyHost::Reset()
methods let you reset the internal
state of those classes.
Delete “sendGattNotify” (issue #350106534)
ProxyHost supports multiple sends (issues #348680331, #326499764)
Remove unneeded PW_EXCLUSIVE_LOCKS_REQUIRED (issue #350106534)
Adjust const for pw::span (issue #326497489)
Remove use of <mutex> (issue #350009505)
pw_bluetooth_sapphire#
Enable bt-host component (issues #303116559, # b/324109634, #326079781, # b/325142183)
Support ISO Channel FIDL Protocol in Drivers (issue #328457492, issue # b/328459391)
Tag integration test (issue #344654806)
Update LEAdvertisers to use EmbossCommandPacket (issue #312896684)
Use Emboss for android vendor exts multi advert (issue #312896673)
Fix LowEnergyScanner crash (issue #323098126)
pw_build#
The new macros in //pw_build:merge_flags.bzl
help with using
platform-based flags.
Add flags_from_dict (issue #301334234)
pw_cli#
pw_cli
has increased support for letting users select from interactive
prompts. The RP2040 flasher utility uses the new interactive prompting
features to let users select which detected device to flash.
pw_console#
pw_cpu_exception#
Remove multiplexers (issue #347998044)
pw_cpu_exception_cortex_m#
pw_cpu_exception_cortex_m
now supports ARMv6-M cores.
Add armv6-m support (issues #350747553, #350747562)
pw_digital_io_rp2040#
The new enable_pull_up
and enable_pull_down
fields in the
pw::digital_io::Rp2040Config
struct let you configure whether resistors
should be pulled up or down.
pw_env_setup#
pw_function#
pw_log_string#
pw_malloc_freertos#
Fix typo (issue #351945325)
pw_presubmit#
pw_rpc#
The pw_rpc docs have been revamped to make getting started easier and to provide more Bazel guidance.
pw_stream_uart_mcuxpresso#
pw_sys_io#
pw_sys_io_baremetal_stm32f429#
Bazel projects should now set the --@pigweed//pw_sys_io:backend
label flag to @pigweed//pw_sys_io_baremetal_stm32f429
and add the
@pigweed//pw_sys_io_baremetal_stm32f429:compatible
constraint to their
platform to indicate that the platform is compatible with
pw_sys_io_baremetal_stm32f429
.
Add constraint (issue #347998044)
pw_sys_io_stm32cube#
pw_system#
The new --browser
option lets you start a browser-based pw_system
console instead of a terminal-based one.Thread stack sizes for the new
async version of pw_system
can now be configured with
PW_SYSTEM_ASYNC_LOG_THREAD_STACK_SIZE_BYTES
,
PW_SYSTEM_ASYNC_RPC_THREAD_STACK_SIZE_BYTES
,
PW_SYSTEM_ASYNC_TRANSFER_THREAD_STACK_SIZE_BYTES
, and
PW_SYSTEM_ASYNC_DISPATCHER_THREAD_STACK_SIZE_BYTES
. The new
pw::system::AsyncCore::RunOnce()
method provides a way to run a function
once on a separate thread. The --ipython
option has been removed from the
pw_system
console. See Embeddeding other interpreters for
guidance on how to embed IPython.
pw_thread#
pw_thread_stl#
The pw::thread::Thread::native_handle()
method now returns a pointer to
the underlying thread object instead of a reference and the docs have been
updated to make it clear that using this is inherently non-portable.
pw_toolchain#
Go binaries have been updated to no longer link with position-independent executables (PIE) on Linux.
Disable PIE for Golang (issue #347708308)
pw_toolchain_bazel#
pw_trace#
Remove backend multiplexer (issue #347998044)
pw_transfer#
pw_unit_test#
pw_web#
Upstream Pigweed protos are now provided alongside downstream project protos.
Rolls#
Pigweed is now using version 8.0.0-pre.20240618.2 of Bazel, the first version
to include platform-based flags. Go was updated to version 3@1.22.5
. CMake
was updated to version 3@3.30.0.chromium.8
.
Targets#
RP2040#
The RP2040 flasher now provides more feedback when a board has been successfully flashed.
Third-party software#
Emboss#
Emboss was updated to version 2024.0702.215418
.
FreeRTOS#
GoogleTest#
Fix the docs (issue #352584464)
ICU#
Mbed TLS#
Miscellaneous#
GitHub#
Add copyright notice (issue #347062591)
dotfiles#
Add copyright notice (issue #347062591)
Jun 27, 2024#
Highlights (Jun 14, 2024 to Jun 27, 2024):
RP2040 implementation for pw_channel:
pw::channel::Rp2StdioChannelInit()
is a new pw_channel implementation that reads from and writes to RP2040’sstdio
.Bazel compatibility patterns guide: The new Bazel build compatibility patterns guide describes the Bazel patterns that Pigweed uses to express that a build target is compatible with a platform.
Hex dump helper: The new
pw::dump::LogBytes()
helper makes it easier to log binary data as human-readable hex dumps. The number of input bytes to display per line can be configured via thekBytesPerLine
template parameter.
Build systems#
Bazel#
The obsolete testonly_freertos
platform has been removed.
Docs#
The new Bazel installation guide provides Pigweed’s recommendations on how to install Bazel. The Set up GitHub Actions for a Pigweed project guide was updated. The new Bazel build compatibility patterns guide describes the Bazel patterns that Pigweed uses to express that a build target is compatible with a platform.
Modules#
pw_allocator#
The //pw_allocator:block_allocator
target has been removed. Consumers
are now expected to depend on and include individual block allocator targets.
pw_assert#
Remove backend multiplexer (issue #347998044)
pw_bluetooth#
New Emboss structs added: NumberOfCompletedPacketsEvent
,
WritePinTypeCommandCompleteEvent
, PinCodeRequestNegativeReplyCommandCompleteEvent
,
ReadPinTypeCommandCompleteEvent
, PinCodeRequestEvent
,
PinCodeRequestReplyCommandCompleteEvent
, WritePinTypeCommand
,
ReadPinTypeCommand
, PinCodeRequestNegativeReplyCommand
,
PinCodeRequestReplyCommand
.
Add PinCodeRequestEvent (issue #342151162)
Add ACL & L2CAP B-frame Emboss definitions (issue #326499764)
Add att.emb (issue #326499764)
Add WritePinTypeCommandCompleteEvent Emboss struct (issue #342151162)
Add ReadPinTypeCommandCompleteEvent Emboss struct (issue #342151162)
Add PinCodeRequestNegativeReplyCommandCompleteEvent Emboss (issue #342151162)
Add PinCodeRequestReplyCommandCompleteEvent Emboss struct (issue #342151162)
Add PinCodeRequestNegativeReplyCommand Emboss struct (issue #342151162)
Add PinCodeRequestReplyCommand Emboss struct (issue #342151162)
Add PinType enum (issue #342151162)
pw_bluetooth_proxy#
The new pw::bluetooth::proxy::AclDataChannel::ProcessDisconnectionCompleteEvent()
method frees up resources when a connection is removed. The new
pw::bluetooth::proxy::AclDataChannel::ProcessNumberOfCompletedPacketsEvent()
method
removes completed packets as necessary to reclaim LE ACL credits. The new
pw::bluetooth::proxy::ProxyHost::sendGattNotify()
method is a simple
implementation of sending a GATT notification to a connected peer.
Implement sendGattNotify (issue #326499764)
Add GetH4Span (issue #326499764)
Move to-controller flow to using h4-based packets (issue #326499764)
Fix naming of SetH4Type (issue #326499764)
Move to using H4Packet wrapper classes (issues #326499764, #326497489)
pw_bluetooth_sapphire#
pw_boot#
Remove backend multiplexer (issue #347998044)
pw_build#
The BuildCommand
Python class now has an optional working_dir
argument
that allows you to specify the working directory in which a build command
should be executed. The new boolean_constraint_value
syntactic sugar macro
makes it easier to declare a constraint setting with just two possible
constraint values.
pw_build_android#
Dynamic allocation for pw::Function
is now always enabled in Android
builds to allow pw::Function
to exceed the inline size limit.
pw_build_info#
The new //pw_build_info:git_build_info
Bazel rule lets you embed which
Git commit your binary was built from.
pw_build_mcuxpresso#
The type for the include
parameter in the
pw_build_mcuxpresso.components.Project
Python class constructor changed
from list[str]
to Collection[str]
and the type for the exclude
parameter changed from list[str]
to Container[str]
.
pw_build_mcuxpresso.bazel.bazel_output()
now accepts an optional
extra_args
argument, which is a dictionary of additional arguments to be
added to the generated Bazel target.
pw_channel#
pw::channel::Rp2StdioChannelInit()
is a new
pw_channel implementation that reads from and writes
to RP2040’s stdio
.
pw_chrono#
The new pw_targets_FREERTOS_BACKEND_GROUP
GN rule sets FreeRTOS
backends for pw_chrono
, pw_sync
, and pw_thread
in one go. Each
backend can be individually overridden if needed.
pw_cli#
pw_clock_tree#
The new pw::clock_tree::ClockTree::AcquireWith()
method lets
you acquire a clock tree element while enabling another one.
pw_clock_tree_mcuxpresso#
AcquireWith()
should now be used when enabling clock tree
elements that are sourced from the audio PLL or SYS PLL.
pw_cpu_exception_cortex_m#
rm backend multiplexer (issue #347998044)
pw_docgen#
pw_emu#
pw_emu
now supports Bazel.
pw_env_setup#
The version of cffi
that pw_env_setup
uses was updated to
1.16.0
to fix Windows failures. The “fatal error” that
pw_env_setup
used to log when running from a directory that’s
outside of a Git repo has been suppressed.
pw_format#
pw_grpc#
The C++ module now handles corrupt frames more gracefully.
pw_hex_dump#
The pw_log_bytes
target has been renamed to log_bytes
. The new
pw::dump::LogBytes()
helper makes it easier to log binary data
as human-readable hex dumps. The number of input bytes to display per line
can be configured via the kBytesPerLine
template parameter.
pw_i2c#
pw_ide#
A --process-files
(-P
) flag was added to pw ide cpp
to process
compilation databases at the provided paths. Bazel support for pw_ide
has
started. pw_ide
now explicitly runs all commands from the PW_PROJECT_ROOT
directory.
pw_log#
Remove backend multiplexer (issue #347998044)
pw_malloc#
pw_multibuf#
pw_preprocessor#
pw_presubmit#
pw_rpc#
pw_rust#
pw_spi_mcuxpresso#
pw_sync#
The new pw_targets_FREERTOS_BACKEND_GROUP
GN rule sets FreeRTOS
backends for pw_chrono
, pw_sync
, and pw_thread
in one go. Each
backend can be individually overridden if needed.
pw_system#
pw_system:async
is a new version of pw_system
based on
pw_async2. The pw_system
console now has a
--device-tracing
flag to turn device tracing on or off.
pw_target_runner#
The pw_target_runner
client in Go now supports a server_suggestion
flag, which allows specifying a command to suggest to the user if the server
is unavailable. The Go client’s RunBinary
method can now accept a binary
as a byte array instead of a file path.
pw_thread#
The new pw_targets_FREERTOS_BACKEND_GROUP
GN rule sets FreeRTOS
backends for pw_chrono
, pw_sync
, and pw_thread
in one go. Each
backend can be individually overridden if needed.
pw_toolchain#
Compiler diagnostics colors are now enabled in Bazel.
pw_transfer#
pw_watch#
pw_watch
now ignores bazel-*
directories.
pw_web#
The function signature for createLogViewer
changed to
createLogViewer(logSource, root, { columnOrder })
. The columnOrder
field in the optional third parameter lets you control the ordering of
columns in the log viewer.The new useShoelaceFeatures
boolean lets you
control whether the log viewer uses Shoelace components. The log viewer’s
toolbar is now responsive.
Languages#
Python#
Rust#
Miscellaneous#
OWNERS#
Targets#
References to configGENERATE_RUN_TIME_STATS
have been removed because
the implementations are incomplete.
RP2040#
The new flash_rp2040
rule makes it easier to flash Raspberry Pi RP2040s
in Bazel.The new flash
Bazel rule makes it easier to flash RP2040s from
a Python script.
Third-party#
FreeRTOS#
configUSE_MALLOC_FAILED_HOOK
can now be enabled to detect out-of-memory
errors when using FreeRTOS’s heap implementation.
Nanopb#
Pico SDK#
Jun 13, 2024#
Highlights (May 30, 2024 to Jun 13, 2024):
pw_allocator support in pw_mallc:
pw_malloc
now supports pw_allocator-based backends.New pw_build Bazel rules:
pw_py_test
rule wrapspy_test
, pw_elf_to_dump takes a binary executable and produces a text file containing the full binary layout, and pw_elf_to_bin rule takes a binary executable and produces a file with all ELF headers removed.Improved Fish shell support: The
pw
andpw build
commands now support Fish shell completion. The new bootstrap.fish script demonstrates how to bootstrap a Pigweed project from a Fish shell and makes it easier for Fish users to contribute to upstream Pigweed.More informative modules index: The modules index now shoes useful metadata for each module, such as a summary of the module’s purpose and the programming languages that the module supports.
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::Layout
constructor is now marked explicit
to
ensure that functions that take Layout
instances as arguments don’t
silently accept and convert other types. The pw::allocator::FreeList
and
pw::allocator::FreeListHeap
interfaces have been removed.
pw_analog#
Add module metadata (issue #339741960)
pw_android_toolchain#
Add module metadata (issue #339741960)
pw_arduino_build#
Add module metadata (issue #339741960)
pw_assert#
Add module metadata (issue #339741960)
pw_async#
Add module metadata (issue #339741960)
pw_async2#
pw_base64#
Add module metadata (issue #339741960)
pw_bloat#
pw_blob_store#
Add module metadata (issue #339741960)
pw_bluetooth#
pw_bluetooth_hci#
Add module metadata (issue #339741960)
pw_bluetooth_profiles#
Add module metadata (issue #339741960)
pw_bluetooth_proxy#
The new pw::bluetooth::proxy::HasSendAclCapability()
function indicates
whether the proxy has the capability to send ACL packets.
pw_boot_cortex_m#
pw_build#
The new pw_py_test
rule wraps py_test
and defaults to setting
target_compatible_with
to host
only. The new
pw_elf_to_dump rule takes a
binary executable and produces a text file containing the full binary layout.
The new pw_elf_to_bin rule takes
a binary executable and produces a file with all ELF headers removed.
Add module metadata (issue #339741960)
Update intro (issue #339741960)
pw_build_info#
pw_build_mcuxpresso#
Add module metadata (issue #339741960)
pw_bytes#
Add module metadata (issue #339741960)
pw_channel#
pw_checksum#
Add module metadata (issue #339741960)
pw_chre#
Add module metadata (issue #339741960)
pw_chrono#
libc time wrappers are now
provided to improve compatibility with software not written for embedded
systems that depends on gettimeofday
and time
from POSIX.
pw_cli#
The pw
and pw build
commands now support Fish shell completion.
pw_clock_tree#
The new pw::clock_tree::ClockSourceNoOp
class can be used to satisfy
the dependency of a source clock tree element for other clock source classes.
The new pw::clock_tree::ElementController
class provides easier integration
of optional clock tree logic into existing drivers.
pw_clock_tree_mcuxpresso#
Comment clean up (issue #331672574)
Remove unnecessary pw:: (issue #331672574)
pw_console#
Theme colors are now correctly applied when running pw console
with the
--config-file
option.
pw_containers#
The pw::Vector::at()
function signature was changed to take size_t
instead of size_type
. The new pw::InlineVarLenEntryQueue::try_push()
function is similar to pw::InlineVarLenEntryQueue::push_overwrite()
but it
drops entries instead of overwriting old ones. The new
pw::InlineVarLenEntryQueue::max_size()
function returns the maximum number
of empty entries.
pw_digital_io#
pw_digital_io_linux#
pw_digital_io_linux
now supports input interrupts. The new
watch command in the CLI
tool configures a GPIO line as an input and watches for interrupt events.
pw_docgen#
pw_env_setup#
The new bootstrap.fish script demonstrates how to bootstrap a Pigweed project from a Fish shell and makes it easier for Fish users to contribute to upstream Pigweed.
pw_grpc#
Remove send queue timeout (issue #345088816)
pw_ide#
pw_log#
Add module metadata (issue #339741960)
Cast log level to int32_t (issue #343518613)
pw_log_string#
pw_malloc#
pw_malloc
now supports pw_allocator-based
backends.
pw_multibuf#
The new pw::multibuf::MultiBuf::IsContiguous()
method checks if a multibuf
is contiguous and the new pw::multibuf::MultiBuf::ContiguousSpan()
method
provides a way to access contiguous data as a span. The new CopyTo()
,
CopyFrom()
, and CopyFromAndTruncate()
methods also simplify
interactions with contiguous byte spans.
pw_multisink#
The new pw::multisink::MultiSink::GetUnreadEntriesSize()
and
pw::multisink::MultiSink::UnsafeGetUnreadEntriesSize()
methods
implement 0124: Interfaces for Retrieving Size Information from Multisink. The new PW_MULTISINK_CONFIG_LOCK_TYPE
macro configures the underlying lock that’s used to guard multisink
reads or writes.
pw_presubmit#
pw_protobuf#
Add module metadata (issue #339741960)
pw_ring_buffer#
pw_router#
Add module metadata (issue #339741960)
pw_rpc#
The Python client API now uses positional-only arguments.
pw_sensor#
pw_spi#
pw_spi_rp2040#
Add module metadata (issue #339741960)
pw_stream#
pw_stream_uart_mcuxpresso#
Stream example (issue #343773769)
Use clock tree (issue #331672574)
DMA stream example (issue #343773769)
pw_sync#
The new pw_targets_FREERTOS_BACKEND_GROUP
GN rule sets up multiple
modules to use FreeRTOS backends.
pw_system#
pw-system-console
now connects to the first detected port if --device
isn’t provided and only one port is detected or it shows an interactive
prompt if multiple ports are detected. Building and running the demo
now shows how to run pw-system-console
with host_device_simulator
in
Bazel-based projects.
pw_target_runner#
pw_thread#
pw_thread_freertos#
pw_toolchain#
pw_toolchain_bazel#
Add cortex-a32 mcpu value (issue #342510882)
pw_transfer#
pw_uart#
Add module metadata (issue #339741960)
pw_varint#
Add module metadata (issue #339741960)
pw_watch#
Watching now works in directories other than PW_ROOT
.
pw_web#
Build systems#
Bazel#
Hardware targets#
host_device_simulator#
rp2040#
stm32f429i#
OS support#
Zephyr#
FreeRTOS#
FreeRTOS application function implementations like vApplicationStackOverflowHook()
are now shared between multiple hardware targets.
Docs#
The modules index now includes metadata for each
module such as a summary of each module and what languages each module
supports. The pigweed.dev
sitenav was simplified.
Pigweed Eng Blog #2: Feature flags in Bazel builds was published. A “skip to main
content” accessibility feature was added to pigweed.dev
.
Third-party software support#
mimxrt595#
GitHub#
io_bazel_rules_go#
pigweed.json#
May 30, 2024#
Highlights (May 17, 2024 to May 30, 2024):
Clock management: The new pw_clock_tree module manages generic clock tree elements such as clocks, clock selectors, and clock dividers.
GitHub Actions: The new Set up GitHub Actions for a Pigweed project guide shows you how to set up GitHub Actions to build and test a Bazel-based Pigweed project when a pull request is received.
pw_system and Bazel: pw_system usage in Bazel has been simplified by gathering all required
pw_system
components into one target and providing label flags that can set platform-dependent dependencies.Channels and Linux Epoll: The new
pw::channel::EpollChannel
class sends and receives data through a file descriptor, with read and write notifications backed by Linux’s epoll system.
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#
Reduce Block fragmentation (issue #328831791)
Fix Android build (issue #A)
pw_assert#
pw_build#
The new PW_MUST_PLACE
macro ensures that linker script inputs are
non-zero sized.
pw_channel#
The new pw::channel::EpollChannel
class sends and receives
data through a file descriptor, with read and write notifications backed
by Linux’s epoll system.
pw_chre#
Update CHRE revision (issue #341137451)
pw_clock_tree#
The new pw_clock_tree module manages generic clock tree elements such as clocks, clock selectors, and clock dividers.
pw_clock_tree_mcuxpresso#
The new pw_clock_tree_mcuxpresso module is an NXP MCUXPresso backend for pw_clock_tree.
Mcuxpresso module (issue #331672574)
pw_config_loader#
pw_cpu_exception_cortex_m#
The new crash analysis API provides data about CPU state during exceptions. See Crash Facade Setup.
pw_emu#
pw_env_setup#
pw_grpc#
pw_hex_dump#
pw_libcxx#
pw_log_basic#
pw_multisink#
pw_preprocessor#
Remove PW_HAVE_FEATURE (issue #341975367)
pw_rpc#
pw_spi_mcuxpresso#
pw_stream_uart_mcuxpresso#
pw_system#
pw_system usage in Bazel has been simplified by gathering
all required pw_system
components into one target and providing label
flags that can set platform-dependent dependencies.
pw_thread#
pw_toolchain#
pw_transfer#
pw_uart#
pw_unit_test#
pw_web#
Build#
Bazel#
Clang’s AddressSanitizer
is now supported. See
Clang sanitizers.
Targets#
rp2040#
Additional bazel build file coverage (issue #303255049, issue #305746219)
OS support#
freertos#
Docs#
The new Set up GitHub Actions for a Pigweed project guide shows you how to set up GitHub Actions to build and test a Pigweed project when a pull request is received.
Miscellaneous#
May 16, 2024#
Highlights (May 2, 2024 to May 16, 2024):
Coroutines: You can now create asynchronous tasks using C++20 coroutines.
Rust with Bazel: The Rust toolchain can now be used by downstream projects using Bazel.
More MCUXpresso support: Several modules have additional support for projects built using the NXP MCUXpresso SDK, including multiple core support in pw_build_mcuxpresso, a new initiator in pw_i2c_mcuxpresso, a new responder in pw_spi_mcuxpresso, and a new pw_dma_mcuxpresso module.
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_async2#
C++20 users can now define asynchronous tasks using Coroutines.
pw_bloat#
Padding is now included as part of utilization in code size reports. This allows developers to monitor changes in application size that smaller than the used space alignment defined in the linker script.
Add padding to utilization (issue #276370736)
pw_bluetooth#
pw_bluetooth_proxy#
Use LE read buffer event (issue #326499611)
Allow setting the # of credits to reserve (issue #326499611)
Add cmake build rules (issue #326499611)
pw_boot_cortex_m#
pw_build#
pw_cc_test.lib fixup (issue #307825072, issue #341109859)
Fix type hint (issue #338462905)
pw_build_mcuxpresso#
pw_build_mcuxpresso now can support multiple device cores.
pw_config_loader#
pw_cpu_exception_cortex_m#
pw_digital_io_linux#
pw_dma_mcuxpresso#
pw_dma_mcuxpresso is a new module for working with an MCUXpresso DMA controller.
pw_docs#
pw_env_setup#
pw_format#
pw_i2c#
pw_i2c_mcuxpresso#
The new I3cMcuxpressoInitiator
implements the pw_i2c
initiator interface
using the MCUXpresso I3C driver, allowing normal I2C API’s to work after setup.
pw_ide#
pw_libcxx#
Added initial support for using LLVM’s libcxx as a standard C++ library implementation.
pw_log#
Logging messages with untyped string arguments is now supported in the Rust implementation.
pw_multibuf#
pw_package#
pw_presubmit#
pw_proto#
pw_protobuf#
pw_protobuf_compiler#
pw_result#
pw_rpc#
pw_spi_mcuxpresso#
The pw_spi_mcuxpresso module now includes an
McuxpressoResponder
useing the SPI and DMA drivers from the NXP MCUXpresso
SDK.
pw_stm32cube_build#
pw_sys_io_rp2040#
Bazel build file update (issue #261603269, issue #300318025)
pw_sys_io_stdio#
pw_sys_io_stm32cube#
pw_tokenizer#
pw_toolchain#
Pigweed’s Rust toolchain can now be used by downstream projects.
pw_trace_tokenized#
pw_transfer#
The transfer service now ends active transfers when the underlying stream changes, avoiding a case where a transfer could become stuck.
pw_unit_test#
Build#
bazel#
Targets#
targets/rp2040#
Docs#
SEEDs#
SEED-0116#
Third party#
third_party/emboss#
third_party/freertos#
third_party/perfetto#
Miscellaneous#
May 1, 2024#
Highlights (Apr 19, 2024 to May 1, 2024):
Thread kickoff via pw::Function: Revamped the Thread API to use pw::Function. The original Thread API was created before pw::Function was stable; this change modernizes and increases usability of the Thread API.
Thread creation SEED: Creating threads in Pigweed is difficult due to our strict adherence to portability. We’re considering creating an additional API that is more usable but less portable than the current approach.
Transfer: Adaptive windowing got a Java implementation, and improvements to adaptive windowing in C++.
Bluetooth: Initial CLs towards a Bluetooth proxy.
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#
Added two new allocators: BuddyAlloctor and BumpAllocator (also known as an arena allocator). Various cleanups and fixes, including splitting the Block-based allocators to their own files.
pw_assert#
pw_async#
pw_bluetooth#
Continue filling out Bluetooth packet definitions; as well as some API extensions for e.g. RSSI control.
Add header alias in command complete events (issue #326499611)
Add Event Codes to emboss (issue #338068316)
Add opcode_enum to command and response event (issue #338068316)
Define Common Data Types (issue #336608891)
Add LoopbackCommandEvent (issue #336579564)
Comment why we include all emboss headers in emboss_test (issue #326499611)
pw_bluetooth_*#
pw_bluetooth_proxy#
Start building the Bluetooth proxy subsystem.
pw_build#
Add a `test_main param to pw_cc_test <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206851>`__ (issue #337277617)
pw_build_info#
pw_cli#
New SEED creation tool reduces the burden to create SEEDs. This will open the door to more contributors creating SEEDs for Pigweed changes and enhancements.
pw_containers#
pw_cpu_exception_cortex_m#
pw_digital_io_linux#
pw_env_setup#
pw_format#
pw_grpc#
pw_module#
pw_presubmit#
pw_protobuf#
pw_rpc#
Enhancements in pw_rpc to better integrate with pw_grpc.
pw_rust#
pw_sensors#
Sensors subsystem continues moving along; note that most of the discussion and development is happening in the SEEDs.
Add support for triggers (issue #293466822)
pw_snapshot#
pw_spi_mcuxpresso#
pw_stream_uart_mcuxpresso#
pw_string#
pw_thread#
API change to bring pw_thread up to date with pw::Function; see overview.
pw_thread_threadx#
pw_tls_client#
Add CMake facades (issue #335878898)
pw_tokenizer#
Enhance the C++ host-side decoder to better handle the full suite of capabilities, in particulaur, recursive decoding; also some build fixes.
pw_toolchain#
pw_transfer#
Adaptive windowing improvements, including C++ enhancementsn to better handle small window sizes, as well as adding a Java implementation.
pw_unit_test#
pw_web#
Docs#
docs#
SEEDs#
SEED-0124: Getting Used Size from Multisink (issue #326854807) landed
SEED-0128: Easier thread creation started
SEED-0129: Support PW_ASSERT with non-argument message started
Miscellaneous#
Replace `string_view& with string_view <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204591>`__
.bazelversion#
Add file (issue #336617748)
Third party#
boringssl: Add CMake integration (issue #335880025)
emboss: Update emboss repo to tag v2024.0419.155605 (issue #335724776)
emboss: Use COMPILE_LANGUAGE:CXX (issue #336267050)
fuchsia: Add defer.h to Bazel build defs (issue #337275846)
Apr 18, 2024#
Highlights (Apr 4, 2024 to Apr 18, 2024):
The Python and C++ interfaces of
pw_transfer
now support adaptive windowing.SEED 0117: I3C was accepted.
The new Zephyr quickstart shows you how to set up a C++-based Zephyr project that’s ready to use Pigweed.
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
.
Iterators (issue #333448202)
Change CIPD upload path (issue #321267610)
Bump @fuchsia_sdk (issue #329933586, issue #321267476)
pw_build#
Disable deprecated pragma warnings (issue #333448202, issue #333448202)
Iterators (issue #333448202, issue #335024633, issue #335021928)
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#
Iterators (issue #335021928)
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#
clang (issue #333448202)
pw_hdlc#
Iterators (issue #335021928)
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#
Use remote cache in infra (issue #312215590)
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#
(SEED-0117) pw_i3c
Miscellaneous#
(clang) Fix `std::array` iterators (issue #333448202)
(emboss) Loosen Emboss cmake dependency tracking (issue #333735460)
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 forpw_async2
, pw_spi_linux is a Linux backend forpw_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 tohttps://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#
Follow Soong guidelines (issue #328503970)
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.
Define LEReadMaximumAdvertisingDataLengthCommandComplete (issue #312898345)
Emboss formatting tweak (issue #331195584)
Add cmake to usage guide (issue #326499587)
Add opcode_full field to emboss HCI headers (issue #326499650)
Add enum for opcodes (issue #326499650)
Add emboss contributing section to docs.rst (issue #331195584)
protocol.h comments tweak (issue #326499650)
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.
Initiator implementation (issue #303255049)
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#
Include strncpy (issue #316936782)
pw_log#
Follow Soong guidelines (issue #328503970)
pw_log_basic#
Fix Soong definitions (issue #328503970)
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#
Support full java protos (issue #329445249)
pw_python#
pw_result#
pw_router#
pw_rpc#
List dependencies directly (issue #331226283)
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#
Follow Soong guidelines (issue #328503970)
pw_sys_io#
pw_thread#
Follow Soong guidance (issue #328503970)
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#
(SEED-0117) Update status to Last Call
(SEED-0126) Claim SEED number
(SEED-0127) Reading sensor data
Third party#
(Emboss) Assume newer emboss version 2/2 (issue #329872338)
(FreeRTOS) Fix typo in docs
(Fuchsia) Copybara import (issue #331281133)
Miscellaneous#
(Soong) Remove _headers from lib names (issue #328503970)
(mbedtls) Avoid the use of unsupported libc functions (issue #316936782)
(nanopb) Fix nanopb_pb2.py generation
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 tofalse
in your project’s.gn
file turns off testing and linting of transitive dependencies inpw_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
andPW_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.
Remove metrics.cc (issue #277108894)
Refactor docs (issue #328076428)
Make metrics configurable (issue #326509341)
pw_assert#
pw_assert_basic#
Fix BUILD.bazel file (issue #328679085)
pw_bluetooth#
pw_bluetooth_sapphire#
Use amd64 SDK (issue #330214852)
Fuchsia SDK example (issue #42178254)
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.
Add new utils module (issue #328503970)
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.
Use amd64 SDK (issue #330214852)
Fuchsia SDK example (issue #42178254)
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#
Add backend label flags (issue #329441699)
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#
Add backend label flags (issue #329441699)
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.
Use pw_facade (issue #328679085)
Introduce pw_facade (issue #328679085)
Language support#
Python#
OS support#
Zephyr#
Docs#
The new CLI style guide outlines how CLI utilities in upstream Pigweed should behave.
Third party#
(Emboss) Assume newer emboss version 1/2 (issue #329872338)
(STM32Cube) Fix bazel hal driver build
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 allocatingpw::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#
Remove README.md check (issue #328265397)
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.
Implement DoRead DMA (issue #325514698)
Implement DoWrite DMA (issue #325514698)
Implement init / deinit (issue #325514698)
USART DMA scaffolding (issue #325514698)
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#
(Emboss) Add CMake support for emboss (issue #326500136)
(FreeRTOS) Tidy up Bazel build (issue #326625641)
(FreeRTOS) Create Bazel build template (issue #326625641)
(STM32Cube) Build template formatting fixes
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 newpw::spi::Rp2040Initiator
class which is a Pico SDK userspace implementation of Pigweed’s SPIInitiator
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.
Config with polarity (issue #303255049)
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#
Fix Bazel build (issue #258078909)
pw_module#
pw_multibuf#
Fix soong support (issue #325320103)
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.
Add Android.bp (issue #316067629)
DigitalOutChipSelector (issue #303255049)
Correct full-duplex behavior of linux_spi (issue #316067628)
pw_spi_rp2040#
The new pw::spi::Rp2040Initiator
class is a Pico SDK userspace
implementation of Pigweed’s SPI Initiator
class.
Initiator implementation (issue #303255049)
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).
Fix link breakage on linux (issue #321306079)
Proto migration stage 5/5 (issue #322850978)
Proto migration stage 3/5 (issue #322850978)
Proto migration stage 1/5 (issue #322850978)
pw_toolchain#
Rename `action_config_flag_sets to flag_sets <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192911>`__
Add missing macOS cxx_builtin_include_directories (issue #324652164)
pw_toolchain_bazel#
pw_transfer#
pw_watch#
pw_web#
The log viewer now supports multiple log sources.
Build#
Bazel#
Targets#
(rp2040) Custom libusb backend
OS support#
(Zephyr) Change the pinned Zephyr commit
(Zephyr) Add zephyr’s west CLI
Docs#
Breadcrumbs are now shown at the top of all docs pages except the homepage.
SEEDs#
(SEED-0125) Claim SEED number
Third party#
Miscellaneous#
(pigweed.json) Disallow Rosetta (issue #315998985)
(renode) Update renode to latest daily build
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, allowingpw_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#
Handle ARM v8.1 case (issue #311766664)
pw_digital_io#
pw_env_setup#
Roll cipd (issue #315378787)
Make npm actions more robust (issues #323378974, #322437881, #323378974)
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.
Remove support for *_files (issue #323448214)
Add support for setting environment variables (issue #322872628)
Implement per-action files (issue #322872628)
Migrate to PwToolInfo (issue #322872628)
Implement pw_cc_provides (issue #320177248)
Create temporary variable (issue #322872628)
Add custom PwFlagSetInfo (issue #322872628)
Replace bazel_tools providers with PW providers (issue #322872628)
pw_transfer#
pw_transfer
now supports resumable transfers.
pw_unit_test#
Build#
(Bazel) Update clang version
OS support#
(Zephyr) Fix default logging in chromium CQ
Docs#
SEEDs#
Miscellaneous#
Jan 26, 2024#
Highlights (Jan 12, 2024 to Jan 26, 2024):
The new Using a Pigweed module in an existing Bazel project guide shows you how to integrate a single Pigweed module into an existing Bazel project.
Initial support for
pw_cc_feature
has been added, which completes the initial set of rules required for building toolchains with pw_toolchain_bazel.A longstanding GCC bug that caused tokenized logging within a function template to not work has been fixed.
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#
Upgrade to ptpython 3.0.25 (issue #320509105)
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#
Retrieve qemu on ARM Macs (issue #315998985)
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#
(SEED-0123) Claim SEED number
(SEED-0124) Claim SEED number
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-nativecc_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#
Remove psutil dependency (issue #316080297)
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#
(SEED-0001) Fix typo and formatting
(SEED-0114) Fix Compiler Explorer link
(SEED-0122) Claim SEED number
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 thepw_tokenizer
Rust crate now supports concatenation of format strings via thePW_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#
Adjust alarm_timer_test (issue #317990451)
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#
Add state UI unit tests (issue #316218222)
SEEDs#
Dec 15, 2023#
Highlights (Dec 1, 2023 to Dec 15, 2023):
We started implementing our new async API, pw_async2.
We deprecated the use of
gtest/gtest.h
header paths for tests intended to build againstpw_unit_test
. See pw_unit_test for details.Note
All the commits titled
Use unit test framework
in theDec 15, 2023
update are related to this change.The pw_alignment and pw_emu docs have been updated to follow our latest Module docs contributor guidelines.
pw_system
now supports an extra logging channel.pw_toolchain_bazel
has a new get started guide.
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#
Fix symbolizer_test (issue #315190328)
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#
(stm32f429i_disc1) Fix test runner
Language support#
OS support#
Docs#
SEEDs#
(SEED-0001) Add section about SEEDs & code changes
(SEED-0001) Update number selection guidance
SEED-0117) Open for comments
(SEED-0121) Claim SEED number
Miscellaneous#
Dec 1, 2023#
Highlights (Nov 17, 2023 to Dec 1, 2023):
We now have an auto-generated SEED Index that shows you the current status of all SEEDs.
We’ve started implementing a Rust API for pw_log.
The pw_alignment, pw_perf_test, and pw_status docs were refactored 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_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.
Use pw_fuzzer_group (issue #307951383)
Remove now unnecessary use of std::optional (issue #311256496)
Move LegacyLowEnergyScanner impl to base class (issue #305975969)
Create new LowEnergyScanner polymorphic methods (issue #305975969)
Extended scanning support, Fake(Controller|Peer) (issue #305975969)
Delete unused build file (issue #307951383)
Fix pragma_once lint (issue #307951383)
Fix linter errors (issue #307951383)
Fix bazel formatting (issue #307951383)
Refactor pw_bluetooth_sapphire & fix errors (issue #42051324)
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#
Add ICU package (issue #311449154)
pw_perf_test#
The docs have been refactored.
pw_presubmit#
pw_protobuf#
Add common_py_pb2 target (issue #309351244)
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#
Reduce binary size (issue #254541584)
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
.
Remove deprecated API (issue #309533028)
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.
(SEED-0114) Update status; format header in table
(SEED-0114) Channels
(SEED-0118) Claim SEED number
(SEED-0118) Claim SEED number
Third party#
Add GN rules for ICU (issue #311449154)
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’sASSERT_OK_AND_ASSIGN
,StatusIs
, andIsOkAndHolds
.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.
Remove httpwatcher support (issue #304603192)
pw_web#
The log viewer has been polished and testing has been enhanced.
Build#
Bazel#
Targets#
(
stm32f429i_disc1_stm32cube
) Update TODO
Language support#
(Python) Update constraint.list
(Python) Upgrade parameterized package
Docs#
A document about Pigweed’s Mission & philosophies was added. The style guide was split into multiple pages.
SEEDs#
(SEED-0110) Correct status
(SEED-0110) Memory Allocation Interfaces
(SEED-0113) Add modular Bazel C/C++ toolchain API
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.
(
host
) Change pw_assert_BACKEND
OS support#
(
zephyr
) Update checkout to v3.5
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#
(SEED-0107) Update SEED references; fix typo
(SEED-0112) Async Poll Model
(SEED-0115) Fix link
(SEED-0116) Claim SEED number
Third party#
(nanopb) Detect protoc updates
Oct 20, 2023#
Highlights (Oct 5, 2023 to Oct 20, 2023):
pw_emu
has launched! Check out pw_emu to get started. See 0108: Emulators Frontend for background.Tokenized log arguments are now supported. See 0105: Nested Tokens and Tokenized Log Arguments for background.
The new
pw::allocator::UniquePtr
class offers a safer, simpler RAII API for allocating individual values within an allocator.A few SEEDs were accepted: 0105: Nested Tokens and Tokenized Log Arguments, 0109: Communication Buffers, and 0111: Make Bazel Pigweed’s Primary Build System.
Lots of new docs, including a guide for getting started with Bazel, a conceptual explanation of facades and backends, and an eng blog post detailing Kudzu, an electronic badge that the Pigweed team made for Maker Faire 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#
Start the API reference (issue #299147635)
pw_web#
Build#
Bazel#
Targets#
(rp2040_pw_system) Enable time slicing
OS support#
(zephyr) Allow direct CMake inclusions
Docs#
Fix link (issue #302680656)
SEEDs#
A few SEEDs were accepted and a few more started.
(SEED-0105) Add nested tokens to pw_tokenizer and pw_log
(SEED-0109) Communication Buffers
(SEED-0111) Update status, add link to SEED-0113
(SEED-0111) Make Bazel Pigweed’s Primary Build System
(SEED-0113) Claim SEED number (Modular Bazel C/C++ Toolchain API)
(SEED-0114) Claim SEED number (Channels)
(SEED-0115) Clain SEED number (Sensors)
Third party#
(boringssl) Remove crypto_sysrand.cc
(fuchsia) Copybara import
(fuchsia) Update copybara with fit/defer.h
Miscellaneous#
Oct 6, 2023#
Highlights (Sep 21, 2023 to Oct 6, 2023):
We expanded our RP2040 support. See the new pw_chrono_rp2040 and pw_digital_io_rp2040 modules.
The new CancellableReader class in pw_hdlc is an interface for receiving RPC packets that guarantees its read process can be stopped.
pw_rpc
now automatically generates a new DynamicClient interface when dynamic allocation is enabled.The Python backend for
pw_tokenizer
now supports tokenizing strings as arguments.The
pigweed_config
mechanism in Bazel is now officially retired.
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
.
Implementation (issue #303255049)
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.
Add CancellableReader (issue #294858483)
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#
Start the API reference (issue #299147635)
Remove old test server (issue #234875234)
pw_unit_test#
pw_watch#
pw_web#
Build#
Fix extended default group (issue #279161371)
Bazel#
Docs#
We started a glossary and added new docs about rollers and CI/CQ.
Add docs on rollers (issue #302680656)
Reformat CI/CQ Intro (issue #302680656)
Move CI/CQ Intro to infra/ (issue #302680656)
Add CI/CQ Intro (issue #302680656)
Update changelog (issue #292247409)
SEEDs#
(SEED-0112) Fix link
Miscellaneous#
pigweed.json#
Sep 22, 2023#
Highlights (Sep 07, 2023 to Sep 22, 2023):
pw_tokenizer
has new C++ methods for detokenizing Base64-encoded strings and new C functions for manually encoding tokenized messages that contain integers.pw::rpc::SynchronousCall
now supports the use of custom response message classes.The C API for
pw_varint
got lots of ergonomic improvements.The new Code review guidelines document outlines the upstream Pigweed code review process.
Active SEEDs#
Help shape the future of Pigweed! Please leave feedback on the following active RFCs (SEEDs):
Modules#
pw function#
Sign conversion fixes (issue #301079199)
pw perf_test#
Sign conversion fixes (issue #301079199)
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#
Sign conversion fixes (issue #301079199)
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#
Arm gcc configuration (issue #297239780)
Targets#
Docs#
The new Code review guidelines document outlines the upstream Pigweed code review process.
SEEDs#
(SEED-0104) Display Support
(SEED-0109) Make link externally accessible
(SEED-0110) Claim SEED number
(SEED-0111) Claim SEED number
(SEED-0112) Claim SEED number
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.
bazel build support (issue #242183021)
pw_crypto#
The complete pw_crypto
API reference is now documented on pw_crypto.
Add API reference (issue #299147635)
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.
Refactor OSS-Fuzz support (issue #56955)
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#
Fix broken links (issue #299181944)
Fix main content scrolling (issue #297384789)
Update changelog (issue #292247409)
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 ofpw_unit_test
now returns a newTestRecord
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.
Add Linux host toolchain (issue #269204725)
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 Visual Studio Code.
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.
Add ifndef/define check (issue #287529705)
pw_protobuf_compiler#
We continued work to ensure that the Python environment in Bazel is hermetic.
Use hermetic protoc (issue #294284927)
Make nanopb hermetic (issue #293792686)
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 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#
3.3.0 compatibility (issue #293612945)
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.