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 |
Lists | |
Maps | |
►Queues | |
C API | |
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 |