| Pw_spi | |
| Pw_trace_tokenzed | |
| pw_alignment | Natural object alignment, guaranteed |
| ►pw_allocator | Flexible, safe, and measurable memory allocation |
| ►Blocks | An allocatable region of memory |
| Block implementations | The following combine block mix-ins and provide both the methods they require as well as a concrete representation of the data those methods need |
| Block mix-ins | Blocks are defined using several stateless “mix-in” interface types |
| Buckets | Data structures that track free blocks |
| ►Concrete allocators | Concrete allocator implementations that provide memory dynamically |
| Block allocators | |
| Configuration | Options for controlling block poisoning intervals, validation checks, and deprecation warnings |
| Core interfaces | Generic allocator interfaces that can be injected into routines that need dynamic memory |
| Forwarding allocators | Allocator implementations that don’t allocate memory directly and instead rely on other allocators while providing additional behaviors |
| ►Implementation interfaces | Interfaces for allocator implementers |
| Size reports | Generate code size reports for allocator implementations |
| ►Testing and debugging | Test utilities for allocator implementers |
| FuzzTest support | |
| Utilities | Helpers for metrics, fragmentation, and buffer management |
| pw_analog | Analog-to-digital converter libraries and utilities |
| pw_async | Portable APIs for asynchronous code |
| ►pw_async2 | Cooperative async tasks for embedded |
| Built-in pendables | Async operations that can be polled for completion and suspended. Learn more: The pendable function interface |
| Combinators | Helpers for interacting with multiple pendables |
| Core | Core primitives such as tasks, dispatchers, polls, contexts, and wakers |
| Coroutines | C++20 coroutine support. Learn more: Coroutines |
| Dispatcher backends | Dispatcher implementation interfaces |
| Dynamic allocation | Heap allocate space for tasks or functions with pw::Allocator |
| Pendable adapters | Pendable wrappers and helpers |
| pw_async_basic | |
| pw_base64 | Base64 encoding, decoding, and validating |
| pw_bloat | Utilities for generating binary size reports |
| pw_bluetooth | Host-layer Bluetooth Low Energy APIs and utilities |
| pw_bluetooth_proxy | Lightweight proxy for augmenting Bluetooth functionality |
| pw_bluetooth_sapphire | Battle-tested Bluetooth with rock-solid reliability |
| pw_build | Integrations for Bazel, GN, and CMake |
| ►pw_bytes | Utilities for manipulating binary data |
| Alignment | Functions for memory alignment |
| Bit manipulation | C++20 <bit> features and extensions |
| Byte arrays | Compile-time construction of byte arrays |
| Byte builders | Dynamically build byte sequences in fixed-size buffers |
| Byte spans | Aliases for pw::span of bytes |
| Byte suffixes | Convenient literal for std::byte |
| Byte units | Constants and literals for byte sizes e.g. KiB |
| Endian conversion | Utilities for handling byte order |
| Packed pointers | Store data in unused pointer bits |
| ►pw_channel | Async, zero-copy API for sending and receiving bytes or datagrams |
| Forwarding | |
| Loopback | |
| Packets | |
| RP2 stdio | |
| Stream channel | |
| epoll | |
| pw_chre | Android Context Hub Runtime Environment backend |
| pw_chrono | Portable std::chrono for constrained embedded devices |
| pw_clock_tree | Clock tree management for embedded devices |
| pw_clock_tree_mcuxpresso | NXP MCUXpresso SDK implementation for pw_clock_tree |
| ►pw_containers | Generic collections of objects for embedded devices |
| C API | |
| Lists | |
| Maps | |
| ►Queues | |
| C++ API | |
| Sets | |
| Utilities | |
| Vectors | |
| pw_crypto | |
| pw_digital_io | Digital I/O interface |
| pw_digital_io_mcuxpresso | Digital I/O for NXP MCUXpresso |
| ►pw_display | Graphic display support and framebuffer management |
| Color | |
| pw_elf | ELF file support |
| pw_function | Embedded-friendly std::function |
| pw_hdlc | Simple, robust, and efficient serial communication |
| pw_hex_dump | Handy hexdump utilities |
| pw_i2c | Cross-platform I2C API with interactive debugging |
| pw_i2c_linux | Linux userspace implementation for pw_i2c |
| pw_i2c_zephyr | Zephyr implementation for pw_i2c |
| pw_interrupt | Interrupt handling utilities for embedded systems |
| ►pw_json | Simple, efficient C++ JSON serialization |
| Pw_json_builder_api | |
| pw_kvs | Lightweight, persistent key-value store |
| ►pw_log | Robust and portable logging for embedded projects |
| Global config | |
| Google Logging (glog) macros | |
| Module config | |
| Protobuf helpers | |
| Short macros | Optional shortened versions of the PW_LOG macros |
| Tokenized args | |
| pw_log_string | |
| pw_log_tokenized | |
| pw_malloc | Replacement interface for standard libc dynamic memory operations |
| ►pw_multibuf | A buffer API optimized for zero-copy messaging |
| Experimental v2 API | Experimental API that separates out the concern of memory allocation |
| ►Legacy v1 API | Interfaces that will eventually be deprecated |
| Allocator implementation API | |
| Test-only features | |
| pw_numeric | Efficient mathematical utilities for embedded |
| pw_perf_test | Micro-benchmarks that are easy to write and run |
| pw_persistent_ram | |
| pw_polyfill | |
| ►pw_preprocessor | Helpful preprocessor macros |
| ►Internal | |
| Compiler | |
| ►pw_protobuf | Expressive interface for encoding and decoding protocol buffers |
| Find APIs | |
| pw_random | |
| pw_result | Error propagation primitives: value-or-error |
| ►pw_rpc | Efficient, low-code-size RPC system for embedded devices |
| Benchmarking & testing | |
| Channels | |
| Configuration | |
| Synchronous API | |
| ►pw_span | Std::span for C++17 |
| Cast | |
| pw_status | Exception-free error propagation for embedded |
| ►pw_stream | A foundational interface for streaming data |
| Implementations | Concrete implementations of stream interfaces for general use |
| ►Interfaces | Generic stream interfaces that support a combination of reading, writing, and seeking |
| ReaderWriters | Streams that support both reading and writing |
| Readers | Streams that support reading but not writing |
| Writers | Streams that support writing but not reading |
| pw_stream_uart_linux | UART stream implementation for Linux |
| ►pw_string | Efficient, easy, and safe string manipulation |
| InlineString and InlineBasicString | Safer alternatives to std::string and std::basic_string |
| StringBuilder | The flexibility of std::ostringstream but with a small footprint |
| UTF-8 helpers | Basic helpers for reading and writing UTF-8-encoded strings |
| Utilities | Safer alternatives to C++ standard library string functions |
| pw_sync | |
| pw_sys_io | |
| pw_system | |
| pw_thread | |
| ►pw_tokenizer | Compress strings to shrink logs by +75% |
| Configuration | Tokenization customization options |
| Detokenization | Expand a token to the string it represents and decode its arguments |
| Token databases | Store a mapping of tokens to the strings they represent |
| Tokenization | Convert string literals to tokens |
| pw_toolchain | Embedded toolchains for GN-based Pigweed projects |
| pw_trace_tokenized | |
| pw_transfer | |
| pw_uart | Core interfaces for UART communication |
| ►pw_unit_test | GoogleTest for embedded |
| Assertions | |
| Configuration | |
| Constexpr tests | |
| Event handlers | |
| Expectations | |
| Helpers | |
| Test control | |
| Test declaration | |
| pw_uuid | 128-bit universally unique identifier (UUID) |
| pw_varint | Functions for encoding and decoding variable length integers |
| pw_work_queue | |
| ►third-party | API integrations with third-party software e.g. FreeRTOS |
| FreeRTOS | FreeRTOS application functions |