• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:tocdepth: 2
2
3.. _docs-changelog:
4
5=====================
6What's new in Pigweed
7=====================
8
9--------------------------------
10Talk to the team at Pigweed Live
11--------------------------------
12.. pigweed-live::
13
14.. _docs-changelog-latest:
15.. _docs-changelog-2025-02-06:
16
17-----------
18Feb 6, 2025
19-----------
20
21.. changelog_highlights_start
22
23.. note::
24
25   :ref:`docs-changelog` will be paused for 2 months.
26   It will resume in April 2025.
27
28Highlights (Jan 25, 2025 to Feb 6, 2025):
29
30* **Tokenization improvements in C++**: The new
31  :cpp:func:`pw::tokenizer::Detokenizer::FromCsv` C++ method constructs a
32  detokenizer from a CSV file. :ref:`Tokenization domains <seed-0105>` are now
33  supported in C++.
34
35* **New global variables wrapper** :cpp:class:`pw::RuntimeInitGlobal` declares
36  a global variable that is initialized at runtime. Its destructor is never
37  run.
38
39* **Bazel-based docs build**: ``pigweed.dev`` is now built with Bazel. See
40  :ref:`blog-08-bazel-docgen`.
41
42.. changelog_highlights_end
43
44.. _docs-changelog-2025-02-06-Modules:
45
46Modules
47=======
48
49.. _docs-changelog-2025-02-06-Modules-pw_allocator:
50
51pw_allocator
52------------
53New features:
54
55.. 9f0f4f8d888e7ebfd228efd622df996f3125f2f1
56
57* :cpp:class:`pw::Allocator` now has more overloads for customizing
58  allocated array alignment. Commit: `Add overloads to customize allocated
59  array alignment <https://pwrev.dev/260276>`__.
60
61Changes:
62
63.. c48adeb92ff36577a34f22cf7b2a0b8d0086a3b2
64
65* ``pw::allocator::test::SynchronizedAllocatorForTest`` was removed.
66  Commit: `Remove SynchronizedAllocatorForTest
67  <https://pwrev.dev/264698>`__.
68
69.. _docs-changelog-2025-02-06-Modules-pw_bluetooth:
70
71pw_bluetooth
72------------
73New features:
74
75.. 7bec9117b6f21884a5046ecabf351b671b167885
76
77* ``pw_bluetooth`` now supports a :ref:`snoop log
78  <module-pw_bluetooth-snoop-log>` for recording
79  HCI RX/TX traffic. Commit: `Add snoop log <https://pwrev.dev/226611>`__.
80  Bug: :bug:`389995204`.
81
82.. _docs-changelog-2025-02-06-Modules-pw_bluetooth_proxy:
83
84pw_bluetooth_proxy
85------------------
86New features:
87
88.. 89a3c9cab649585ebeb7b863035d28ff419829bc
89
90* The new :cpp:class:`pw::bluetooth::proxy::AcquireGattNotifyChannel`
91  method returns a GATT Notify channel that supports sending notifications
92  to a particular connection handle and attribute. Commit: `Support
93  acquire of gatt notify channels <https://pwrev.dev/264954>`__. Bugs:
94  :bug:`369709521`, :bug:`379337272`.
95
96.. _docs-changelog-2025-02-06-Modules-pw_bluetooth_sapphire:
97
98pw_bluetooth_sapphire
99---------------------
100New features:
101
102.. c6f84aa0c5a57695a4a57e3811c89135e9344f00
103
104* :ref:`module-pw_bluetooth_sapphire-fuchsia-zxdb` explains how to use
105  Fuchsia's kernel debugger. Commit: `Document how to use the Zxdb
106  Debugger <https://pwrev.dev/263812>`__.
107
108.. _docs-changelog-2025-02-06-Modules-pw_containers:
109
110pw_containers
111-------------
112New features:
113
114.. 16ddae866c80f3cee061f189cee149700f81d188
115
116* :cpp:class:`pw::Vector` now has an explicit ``constexpr`` constructor.
117  Using this constructor will place the entire object in ``.data`` by
118  default, which will increase ROM size. Commit: `Add explicit constexpr
119  constructor for Vector <https://pwrev.dev/263692>`__.
120
121Bug fixes:
122
123.. 852571bdf8b031b7ca89fff2ae9fdaa4f6cfe0a6
124
125* A bug was fixed where ``pw::Vector::insert`` was move assigning to
126  destroyed objects. Commit: `Do not move assign to destroyed objects in
127  Vector::insert <https://pwrev.dev/252452>`__. Bug: :bug:`381942905`.
128
129.. _docs-changelog-2025-02-06-Modules-pw_crypto:
130
131pw_crypto
132---------
133New features:
134
135.. a1eb87b67a72231755b7fd6671e99d7f7276ba20
136
137* :cpp:class:`pw::crypto::aes_cmac::Cmac` provides support for the
138  AES-CMAC algorithm. Commit: `Add Aes::Cmac <https://pwrev.dev/231913>`__.
139
140.. _docs-changelog-2025-02-06-Modules-pw_tokenizer:
141
142pw_tokenizer
143------------
144New features:
145
146.. 9b46aef8010f3c2edd87f2365d9ef6ee4656df56
147
148* The new :cpp:func:`pw::tokenizer::Detokenizer::FromCsv` C++ method
149  constructs a detokenizer from a CSV file. Commit: `Add support for CSV
150  parsing in C++ <https://pwrev.dev/256653>`__.
151
152.. 8fe4260fdbbf806a2470396d0d1da1bb6b15d522
153
154* :ref:`Tokenization domains <seed-0105>` are now supported in C++.
155  Commit: `Add support for domains in C++ <https://pwrev.dev/255173>`__.
156
157.. _docs-changelog-2025-02-06-Modules-pw_toolchain:
158
159pw_toolchain
160------------
161New features:
162
163.. 5f9420a551774235c883a621e639228525b13591
164
165* :cpp:class:`pw::RuntimeInitGlobal` is a new wrapper for global
166  variables. See :ref:`module-pw_toolchain-cpp-globals`. Commit:
167  `Introduce RuntimeInitGlobal <https://pwrev.dev/263875>`__.
168
169.. d2f7a36184d742e27761591a0dac13fa421e6b32
170
171* :ref:`module-pw_toolchain` has started to support a Zephyr toolchain.
172  Commit: `Add support for Zephyr toolchain <https://pwrev.dev/263836>`__.
173
174.. 51a7b5cc4bbdbb54d4eb0a9b0200a76c7c479c65
175
176* :ref:`module-pw_toolchain-bazel-clang-tidy` explains how to integrate
177  Pigweed's toolchain with ``clang-tidy``. Commit: `Document clang-tidy +
178  Bazel <https://pwrev.dev/262873>`__. Bug: :bug:`341723612`.
179
180.. _docs-changelog-2025-02-06-Modules-pw_transfer:
181
182pw_transfer
183-----------
184Bug fixes:
185
186.. d95bb9205b6826e7c35f06f2ae53e354a1d795e8
187
188* In proto3, when a retry config option is 0, ``pw_transfer`` no longer
189  attempts to set it. Commit: `Ignore 0 retry values from config proto
190  <https://pwrev.dev/265253>`__. Bug: :bug:`357145010`.
191
192.. _docs-changelog-2025-02-06-Build-systems:
193
194Build systems
195=============
196
197.. _docs-changelog-2025-02-06-Build-systems-Bazel:
198
199Bazel
200-----
201New features:
202
203.. 5f466288aea2a17142258a4ed0683b57aa59c711
204
205* The Pigweed Bazel build has started to support Zephyr's toolchain.
206  Commit: `Add Zephyr toolchain CIPD repo <https://pwrev.dev/263832>`__.
207
208.. _docs-changelog-2025-02-06-Docs:
209
210Docs
211====
212New features:
213
214.. 18076431f27790a69116ef91bb8f8c877eb6a479
215
216* `pigweed.dev/rustdoc <https://pigweed.dev/rustdoc>`__ now provides an
217  index of all Pigweed Rust crates. Previously, that page would 404.
218  Commit: `Add index page to Rust API docs <https://pwrev.dev/263838>`__.
219
220.. 55b363ba45eb871df096ca060c93a45f73b741a7
221
222* When viewing the docs on a staging site, there's now a banner at the
223  top of the docs site to make it clear that you're not viewing the
224  official Pigweed docs. Commit: `Present banner on staged docs
225  <https://pwrev.dev/263513>`__. Bug: :bug:`304835851`.
226
227.. 809d32b33e2dd368bc91704e7d70f7069d6cc7d9
228
229* ``pigweed.dev`` is now built with Bazel. See
230  :ref:`blog-08-bazel-docgen`. Commit: `Add Bazel migration blog post
231  <https://pwrev.dev/264515>`__.
232
233.. _docs-changelog-2025-01-24:
234
235------------
236Jan 24, 2025
237------------
238.. changelog_highlights_start
239
240Highlights (Jan 10, 2025 to Jan 24, 2025):
241
242* **Thread creation API**: The cross-platform thread creation API proposed
243  in :ref:`seed-0128` has been implemented.
244* **Layering check**: Upstream Pigweed toolchains now support
245  :ref:`layering check <module-pw_toolchain-bazel-layering-check>` in Bazel.
246  Including headers that aren't in the ``hdrs`` of a ``cc_library``
247  you directly depend on becomes a compile-time error.
248* **Cortex-A support**: pw_interrupt_cortex_a is a new
249  ``pw_interrupt`` backend for Arm Cortex-A processors. ``pw_toolchain``
250  now supports Arm Cortex-A35.
251* **Atomic API**: The new :ref:`module-pw_atomic` module provides software
252  implementations of atomic operations.
253
254.. changelog_highlights_end
255
256.. _docs-changelog-2025-01-24-Modules:
257
258Modules
259=======
260
261.. _docs-changelog-2025-01-24-Modules-pw_atomic:
262
263pw_atomic
264---------
265New features:
266
267.. 120f202e25b4c59111012e9568c74f4af2fdb09d
268
269* The new :ref:`module-pw_atomic` module provides software
270  implementations of atomic operations. Commit: `Add module for atomic
271  operations <https://pwrev.dev/239719>`__.
272
273.. _docs-changelog-2025-01-24-Modules-pw_bluetooth_proxy:
274
275pw_bluetooth_proxy
276------------------
277New features:
278
279.. c20f1e99713ae9959a223d8504690ccbf98f260f
280
281* Clients of ``pw_bluetooth_proxy`` can now register a callback function
282  for inspecting host-to-controller L2CAP basic channel packets. Commit:
283  `Add host to controller callback packet sniffing
284  <https://pwrev.dev/260553>`__. Bug: :bug:`390191420`.
285
286.. _docs-changelog-2025-01-24-Modules-pw_cli:
287
288pw_cli
289------
290New features:
291
292.. 69614fba8ccf19b2dcaf60f214353a733329fcaa
293
294* The new :py:class:`pw_cli.git_repo.GitRepoFinder` helper class
295  efficiently finds Git repo roots. Commit: `Add helper for efficiently
296  finding git repo roots <https://pwrev.dev/254024>`__. Bug:
297  :bug:`326309165`.
298
299.. _docs-changelog-2025-01-24-Modules-pw_digital_io_mcuxpresso:
300
301pw_digital_io_mcuxpresso
302------------------------
303New features:
304
305.. f282c15c48732f4c4e1e3da15c1cfddea2b9cb47
306
307* :cpp:class:`pw::digital_io::McuxpressoDigitalInOutInterrupt` now
308  supports interrupt triggers on both edges. Commit: `Emulate kBothEdges
309  trigger via level interrupt <https://pwrev.dev/260793>`__. Bug:
310  :bug:`390456846`.
311
312.. _docs-changelog-2025-01-24-Modules-pw_env_setup:
313
314pw_env_setup
315------------
316Changes:
317
318.. 537825f5f67281aee3764444de234e81722a2401
319
320* All transitive Python dependencies are now pinned. Commit: `Pin all
321  transitive Python package dependencies <https://pwrev.dev/261413>`__.
322  Bug: :bug:`390257072`.
323
324.. _docs-changelog-2025-01-24-Modules-pw_interrupt_cortex_a:
325
326pw_interrupt_cortex_a
327---------------------
328New features:
329
330.. e61919ca93f922bc67fc6bd2f005c00f858cdcbd
331
332* [Deprecated] pw_interrupt_cortex_a is a new ``pw_interrupt`` backend
333  for Arm Cortex-A processors. Commit: `Add pw_interrupt backend for
334  A-profile processors <https://pwrev.dev/261396>`__.
335
336.. _docs-changelog-2025-01-24-Modules-pw_protobuf:
337
338pw_protobuf
339-----------
340Changes:
341
342.. a3cd0bc42a929df218bbc3ed96944cacf5cead7a
343
344* The ``kMaxEncodedSizeBytes`` constant has been renamed to
345  ``kMaxEncodedSizeBytesWithoutValues`` to reflect the fact that it
346  sometimes doesn't represent a message's true maximum size. Commit:
347  `Disambiguate maximum size constants <https://pwrev.dev/259012>`__. Bug:
348  :bug:`379868242`.
349
350.. _docs-changelog-2025-01-24-Modules-pw_rpc:
351
352pw_rpc
353------
354Changes:
355
356.. 0afdf903105c46e8572591de16b7fd2964ad0874
357
358* Recent Java client call ID changes were reverted because they were
359  causing RPC timeouts. Commit: `Revert Java client call ID changes
360  <https://pwrev.dev/260892>`__.
361
362.. _docs-changelog-2025-01-24-Modules-pw_sync:
363
364pw_sync
365-------
366Changes:
367
368.. 86cb968d79207a634c196bc1d289aa1cf25591c7
369
370* Time-related methods previously in :cpp:class:`pw::sync::Borrowable`
371  were moved to a new :cpp:class:`pw::sync::TimedBorrowable` class so that
372  projects can use ``Borrowable`` without depending on :ref:`module-pw_chrono`.
373  Commit: `Split TimedBorrowable from Borrowable
374  <https://pwrev.dev/260313>`__.
375
376.. _docs-changelog-2025-01-24-Modules-pw_system:
377
378pw_system
379---------
380Changes:
381
382.. f1cb7ec19fca8dd7332d31d0ae81309e68601514
383
384* The ``//pw_system:config`` Bazel rule is now public to make it
385  possible to reuse the same configurations when creating custom RPC
386  servers or I/O backends outside of Pigweed. Commit: `Make config library
387  public in Bazel <https://pwrev.dev/261693>`__.
388
389.. _docs-changelog-2025-01-24-Modules-pw_tokenizer:
390
391pw_tokenizer
392------------
393New features:
394
395.. a90ad7872bd7f178d049264214ae3404c212fc4d
396
397* The new :c:macro:`PW_NESTED_TOKEN_FMT` macro is a format specifier for
398  doubly nested token arguments. Commit: `Create generic macro for a
399  nested token format <https://pwrev.dev/253267>`__.
400
401Changes:
402
403.. 1b8d5de1f136c9c46d62869554d1cf9672b8a815
404
405* Token domains have been limited to certain characters. Commit: `Limit
406  token domains to certain characters <https://pwrev.dev/253952>`__.
407
408.. _docs-changelog-2025-01-24-Modules-pw_toolchain:
409
410pw_toolchain
411------------
412New features:
413
414.. 1a98c3d9725b4178148a354b917f15d86fc374b5
415
416* ``pw_toolchain`` now supports Arm Cortex-A35. Commit: `Add toolchain
417  config for Cortex-A35 <https://pwrev.dev/261733>`__.
418
419.. 03e6941c72b91f2cb9550b1b1ba59fa9fe862ab2
420
421* Upstream Pigweed toolchains now support
422  :ref:`layering check <module-pw_toolchain-bazel-layering-check>`.
423  Commit: `Document layering check <https://pwrev.dev/261552>`__. Bug:
424  :bug:`219091175`.
425
426.. _docs-changelog-2025-01-24-Modules-pw_thread:
427
428pw_thread
429---------
430New features:
431
432.. e9d4e4d30b4a49b2ca4dba88656dc660b0a0bcaf
433
434* The cross-platform thread creation API proposed in :ref:`seed-0128`
435  has been implemented. Commit: `Generic thread creation
436  <https://pwrev.dev/255065>`__. Bug: :bug:`373524851`.
437
438.. _docs-changelog-2025-01-09:
439
440-----------
441Jan 9, 2025
442-----------
443Highlights (Dec 27, 2024 to Jan 9, 2025):
444
445* **Bazel 8**: Pigweed now :ref:`depends on Bazel 8
446  <docs-changelog-2025-01-09-Build-systems-Bazel>`.
447
448* **FuzzTest and CMake**: FuzzTest is now :ref:`supported in
449  CMake projects <docs-changelog-2025-01-09-Modules-pw_fuzzer>`.
450
451* **BoringSSL**: ``pw_crypto`` now :ref:`supports
452  BoringSLL <docs-changelog-2025-01-09-Modules-pw_crypto>`.
453
454* **pw_rpc Java improvements**: The ``pw_rpc`` Java client now
455  has better :ref:`concurrent RPC request support
456  <docs-changelog-2025-01-09-Modules-pw_rpc>`.
457
458.. _docs-changelog-2025-01-09-Modules:
459
460Modules
461=======
462
463.. _docs-changelog-2025-01-09-Modules-pw_containers:
464
465pw_containers
466-------------
467New features:
468
469.. 68e18edf9f1b3913c73b1a4332bbce6521609916
470
471* Intrusive lists now support move operations. Commit: `Support moving
472  intrusive lists <https://pwrev.dev/255894>`__.
473
474.. _docs-changelog-2025-01-09-Modules-pw_chrono:
475
476pw_chrono
477---------
478New features:
479
480.. e88f3c4397c5cafafda8635ac93d42483059a9f9
481
482* ``pw_chrono`` snapshots now support optional clock names. Commit: `Add
483  support for clock names <https://pwrev.dev/253753>`__.
484
485.. _docs-changelog-2025-01-09-Modules-pw_crypto:
486
487pw_crypto
488---------
489New features:
490
491.. 462b37b0820e284069b8e42f6e61438177b60cb7
492
493* ``pw_crypto`` now supports :ref:`BoringSSL <module-pw_crypto-boringssl>`.
494  Commit: `Add BoringSSL backend for AES <https://pwrev.dev/231914>`__.
495
496Changes:
497
498.. 483a24a69950b8be7ae924e28a7504150378c8ee
499
500* ``micro_ecc`` support has been removed. Commit: `Remove micro_ecc
501  support <https://pwrev.dev/229672>`__. Bug: :bug:`359924206`.
502
503.. _docs-changelog-2025-01-09-Modules-pw_digital_io_mcuxpresso:
504
505pw_digital_io_mcuxpresso
506------------------------
507New features:
508
509.. 8a5fc59a80af2fb2b11c2cd16ecc21a210fe1065
510
511* The new ``pw::digital_io::McuxpressoDigitalInOutInterrupt`` class
512  supports interrupts on the GPIO interrupt block which enables using
513  interrupts on more pins. Commit: `Add McuxpressoDigitalInOutInterrupt
514  support <https://pwrev.dev/247972>`__.
515
516Changes:
517
518.. 34521ea9d72066a02d4b562eb6d2dd628e424e58
519
520* ``pw::digital_io::McuxpressoDigitalInInterrupt`` has been deprecated.
521  ``pw::digital_io::McuxpressoPintInterrupt`` should be used instead.
522  Commit: `Introduce McuxpressoPintInterrupt
523  <https://pwrev.dev/258994>`__. Bug: :bug:`337927184`.
524
525.. _docs-changelog-2025-01-09-Modules-pw_fuzzer:
526
527pw_fuzzer
528---------
529New features:
530
531.. 736d6a39f5cdde223bfcbaf6f8c8fec7d512379a
532
533* :ref:`FuzzTest <module-pw_fuzzer-guides-using_fuzztest>` can now be
534  used in CMake projects. Commit: `Make FuzzTest usable be external CMake
535  projects <https://pwrev.dev/239049>`__. Bug: :bug:`384978398`.
536
537.. _docs-changelog-2025-01-09-Modules-pw_log_basic:
538
539pw_log_basic
540------------
541Changes:
542
543.. a542e417c4367b3b6c4fed88a172b9c2bdd2a837
544
545* The maximum length for the function name field has increased from 20
546  to 30 characters and is now left-aligned. Commit: `Adjust field widths
547  <https://pwrev.dev/258174>`__.
548
549.. _docs-changelog-2025-01-09-Modules-pw_protobuf:
550
551pw_protobuf
552-----------
553Changes:
554
555.. 8706efb9847543d226c5cb17494faffcd034cfa0
556
557* Regular callbacks now ignore fields with unset decode callbacks.
558  Previously they caused ``DATA_LOSS`` errors. Commit: `Allow unset
559  callback fields in message structs <https://pwrev.dev/258392>`__.
560
561.. _docs-changelog-2025-01-09-Modules-pw_rpc:
562
563pw_rpc
564------
565New features:
566
567.. 15d4ae5ff36cd452023fdfc07835f5f1635f05ef
568
569* The Java client now supports making multiple concurrent RPC requests
570  to the same method. Commit: `Increment call_ids for java client
571  <https://pwrev.dev/258792>`__.
572
573.. _docs-changelog-2025-01-09-Modules-pw_span:
574
575pw_span
576-------
577New features:
578
579.. 031bf132386f7350cb86338928368f46c5b76d1c
580
581* The new docs section :ref:`module-pw_span-start-params` explains why
582  ``pw::span`` objects should be passed by value. Commit: `Recommend passing
583  pw::span objects by value <https://pwrev.dev/257072>`__. Bug:
584  :bug:`387107922`.
585
586.. _docs-changelog-2025-01-09-Modules-pw_stream:
587
588pw_stream
589---------
590New features:
591
592.. e7380e5da83527b80087e86b63224e052074d10f
593
594* The new ``pw::stream::SocketStream::IsReady()`` method indicates
595  whether the streaming socket connection is ready. Commit: `Add ready
596  method to socket stream <https://pwrev.dev/253772>`__.
597
598.. _docs-changelog-2025-01-09-Modules-pw_thread:
599
600pw_thread
601---------
602Changes:
603
604.. 717e4f58092e947eba23afb8be099d2ccf1247c3
605
606* It is now simpler to disable the ``join()`` function when it's not
607  supported. Commit: `Simplify disabling join() function when not
608  supported <https://pwrev.dev/257913>`__.
609
610.. _docs-changelog-2025-01-09-Modules-pw_toolchain:
611
612pw_toolchain
613------------
614Changes:
615
616.. 8adc4c3e84423554c5ad6549fefe3d0e035985c6
617
618* The float ABI configuration for Arm Cortex-M33 was changed from
619  ``soft`` to ``softfp``. Commit: `Update m33 float-abi
620  <https://pwrev.dev/259412>`__. Bug: :bug:`388354690`.
621
622.. _docs-changelog-2025-01-09-Modules-pw_toolchain_bazel:
623
624pw_toolchain_bazel
625------------------
626Changes:
627
628.. 413a81576837f344c55a8d64b5d1807769e513b0
629
630* Most of ``pw_toolchain_bazel`` has been removed because it has been
631  upstreamed to ``rules_cc``. Commit: `Remove contents
632  <https://pwrev.dev/252472>`__. Bug: :bug:`346388161`.
633
634.. _docs-changelog-2025-01-09-Modules-pw_uart:
635
636pw_uart
637-------
638Changes:
639
640.. 71c2d0d0e9eb7cc27111a20b3190af1593944676
641
642* It is no longer safe to call any ``pw_uart`` read or write methods
643  from a ``pw::uart::UartNonBlocking::DoRead()`` callback context. Commit:
644  `Restrict UartNonBlocking::DoRead() callback
645  <https://pwrev.dev/255732>`__. Bug: :bug:`384966926`.
646
647.. _docs-changelog-2025-01-09-Modules-pw_unit_test:
648
649pw_unit_test
650------------
651Bug fixes:
652
653.. 203c6c8fd11fbdf01b51e564de03150f38dab430
654
655* The buffer for expectation logs was increased in size to prevent
656  expectation logs from getting cut off. Commit: `Expectation buffer
657  cleanup <https://pwrev.dev/259055>`__. Bug: :bug:`387513166`.
658
659.. _docs-changelog-2025-01-09-Build-systems:
660
661Build systems
662=============
663
664.. _docs-changelog-2025-01-09-Build-systems-Bazel:
665
666Bazel
667-----
668Changes:
669
670.. b13f7bf334b239174e87d91fbfac8b8c1d209403
671
672* Pigweed now depends on Bazel 8.0.0. Commit: `Update to Bazel 8.0.0
673  <https://pwrev.dev/242033>`__. Bug: :bug:`372510795`.
674
675.. _docs-changelog-2025-01-09-Docs:
676
677Docs
678====
679New features:
680
681.. b977a3aeb1f4cf5a1b113396bbf9f9af6c1f1658
682
683* The :ref:`Sense tutorial <showcase-sense-tutorial-intro>` has been
684  updated to cover all variations on the Raspberry Pi Pico. Commit:
685  `Refresh Sense tutorial <https://pwrev.dev/254652>`__.
686
687.. 9337bf2516b4e0876d5308ec15939cb2dc9e6ab8
688
689* :ref:`Pigweed Toolchain <toolchain>` now has a homepage. Commit: `Add
690  toolchain homepage <https://pwrev.dev/247593>`__. Bug: :bug:`373454866`.
691
692.. _docs-changelog-2024-12-26:
693
694------------
695Dec 26, 2024
696------------
697Highlights (Dec 12, 2024 to Dec 26, 2024):
698
699* **TLSF allocator**: ``pw_allocator`` has a new :ref:`two-layer, segregated
700  fit allocator <docs-changelog-2024-12-26-Modules-pw_allocator>`.
701* **Checked arithmetic**: ``pw_numeric`` has :ref:`a suite of new arithmetic
702  operations <docs-changelog-2024-12-26-Modules-pw_numeric>` that check for
703  overflows.
704* **Constant expression unit tests**: ``pw_unit_test`` has a
705  :ref:`new constexpr unit test <docs-changelog-2024-12-26-Modules-pw_unit_test>`
706  that runs at both compile-time and runtime.
707* **Bazel module integration guidance**: :ref:`docs-bazel-integration` now provides
708  guidance on how to integrate Pigweed into projects that use Bazel modules.
709
710.. _docs-changelog-2024-12-26-Modules:
711
712Modules
713=======
714
715.. _docs-changelog-2024-12-26-Modules-pw_allocator:
716
717pw_allocator
718------------
719New features:
720
721.. f674d68203b26bf0207ab79099696e2b3b3cd9b3
722
723* The new :cpp:class:`pw::allocator::TlsfAllocator` is a two-layer,
724  segregated fit allocator. Its 2D array of buckets incurs overhead but it
725  can satisfy requests quickly and has much better fragmentation performance
726  than ``WorstFitAllocator``. Commit: `Add TLSF allocator
727  <https://pwrev.dev/234818>`__.
728
729.. _docs-changelog-2024-12-26-Modules-pw_build:
730
731pw_build
732--------
733New features:
734
735.. ee6f9976ba7e78737a1a74ae05f06da397b896c8
736
737* The new ``pw_rust_crates_extension`` Bazel extension lets a project
738  override the ``rust_crates`` repo when needed without requiring every
739  project to define one. Commit: `Add pw_rust_crates_extension
740  <https://pwrev.dev/254952>`__. Bug: :bug:`384536812`.
741
742.. _docs-changelog-2024-12-26-Modules-pw_containers:
743
744pw_containers
745-------------
746New features:
747
748.. 999adb191f8f512b524f0a65bd0662ac7854ef20
749
750* Queues and dequeues now have explicit ``constexpr`` constructors.
751  Commit: `Add explicit constexpr constructors for deques/queues
752  <https://pwrev.dev/250434>`__.
753
754.. _docs-changelog-2024-12-26-Modules-pw_multibuf:
755
756pw_multibuf
757-----------
758Changes:
759
760.. b439dd3e602e6c3568ff2ed68a12c2ecf90391a9
761
762* :cpp:class:`pw::multibuf::MultiBufAllocator` no longer supports async.
763  :cpp:class:`pw::multibuf::MultiBufAllocatorAsync` should be used
764  instead. Commit: `Move async to new MultiBufAllocatorAsync
765  <https://pwrev.dev/255015>`__. Bug: :bug:`384583239`.
766
767.. _docs-changelog-2024-12-26-Modules-pw_numeric:
768
769pw_numeric
770----------
771New features:
772
773.. d6827c16644efa06f524a702903397e3cc07ba4c
774
775.. TODO: https://pwbug.dev/389134105 - Fix these links.
776
777* :cpp:type:`pw::CheckedAdd`, :cpp:type:`pw::CheckedIncrement`,
778  :cpp:type:`pw::CheckedSub`, :cpp:type:`pw::CheckedDecrement`, and
779  :cpp:type:`pw::CheckedMul` are new arithmetic methods that check for
780  overflows. Commit: `Add checked_arithmetic.h
781  <https://pwrev.dev/253172>`__. Bug: :bug:`382262919`.
782
783.. _docs-changelog-2024-12-26-Modules-pw_thread:
784
785pw_thread
786---------
787New features:
788
789.. 4f536c6c1137a7282e7f800aa636c79c5c629191
790
791* The new :cpp:type:`pw::ThreadPriority` class is a generic priority
792  class that can be used by any ``pw_thread`` backend. Commit: `Thread
793  priority class <https://pwrev.dev/242214>`__.
794
795.. _docs-changelog-2024-12-26-Modules-pw_toolchain:
796
797pw_toolchain
798------------
799New features:
800
801.. 13446e506fb94bcf4345bbf74b7987cff0fe0e3a
802
803* ``pw_toolchain`` now supports Arm Cortex-M3. Commit: `Add Cortex M3
804  support <https://pwrev.dev/254474>`__.
805
806.. _docs-changelog-2024-12-26-Modules-pw_unit_test:
807
808pw_unit_test
809------------
810New features:
811
812.. c13d91eae61a50dfbe08023983337086509e7a8e
813
814* :c:macro:`PW_CONSTEXPR_TEST` is a new unit test that is executed both
815  at compile-time in a ``static_assert()`` and at runtime as a GoogleTest
816  ``TEST()``. Commit: `Test framework for constexpr unit tests
817  <https://pwrev.dev/242213>`__.
818
819.. _docs-changelog-2024-12-26-Docs:
820
821Docs
822====
823New features:
824
825.. 42962f4a909048bb7f9464af018515bb5c9ee94c
826
827* :ref:`docs-bazel-integration` has been updated to describe how to
828  integrate Pigweed into projects that use Bazel modules (``bzlmod``). Commit:
829  `Bazel integration: bzlmod, Bazel versions
830  <https://pwrev.dev/254413>`__.
831
832.. _docs-changelog-2024-12-11:
833
834------------
835Dec 11, 2024
836------------
837Highlights (Nov 28, 2024 to Dec 11, 2024):
838
839* **New blog post**: :ref:`docs-blog-06-better-cpp-toolchains`
840  summarizes our journey to upstream modular toolchains in rules_cc.
841
842* **Customizable enum tokenization**: The new
843  :c:macro:`PW_TOKENIZE_ENUM_CUSTOM` macro lets you customize how enum values
844  are tokenized.
845
846* **AES API in pw_crypto**: :ref:`module-pw_crypto` now has an
847  Mbed-TLS backend for AES.
848
849.. _docs-changelog-2024-12-11-Modules:
850
851Modules
852=======
853
854.. _docs-changelog-2024-12-11-Modules-pw_allocator:
855
856pw_allocator
857------------
858Bug fixes:
859
860.. b3d4f6ec721999b6bd4a856386a16c0b102d4f3c
861
862* A bug was fixed where the ``FirstFitAllocator`` incorrectly allocated
863  from the front. Commit: `Fix first-fit with threshold
864  <https://pwrev.dev/253233>`__. Bug: :bug:`382513957`.
865
866.. _docs-changelog-2024-12-11-Modules-pw_assert:
867
868pw_assert
869---------
870Changes:
871
872.. bb9f65d47f203a2623543f5adf20ef15d747524e
873
874* Error messages in constant expressions have been improved. Commit:
875  `Improve error messages in constant expressions
876  <https://pwrev.dev/251914>`__. Bug: :bug:`277821237`.
877
878.. _docs-changelog-2024-12-11-Modules-pw_async2:
879
880pw_async2
881---------
882New features:
883
884.. 4a1d9b2c3f76002ad7462e2a4373fa3eedfda692
885
886* :cpp:class:`pw::async2::OnceReceiver` can now be constructed with a
887  value. Commit: `Support value constructor for OnceReceiver
888  <https://pwrev.dev/251452>`__.
889
890.. _docs-changelog-2024-12-11-Modules-pw_bluetooth_proxy:
891
892pw_bluetooth_proxy
893------------------
894New features:
895
896.. ffb532447804634ffa9a97f78886e8422025f9c2
897
898* The new
899  :cpp:func:`pw::bluetooth::proxy::ProxyHost::SendAdditionalRxCredits`
900  method lets you send additional RX credits when needed. Previously this
901  logic was coupled with the L2CAP connection-oriented channel
902  acquisition. Commit: `Separate rx_additional_credits method
903  <https://pwrev.dev/252352>`__. Bug: :bug:`380076024`.
904
905.. b336566abf4d6d1119f5373dc534e1f1e1070523
906
907* Transport type for ``pw::bluetooth::proxy::BasicL2capChannel`` can now
908  be specified during channel creation. Commit: `Un-hardcode transport
909  type for BasicL2capChannel <https://pwrev.dev/252556>`__.
910
911.. e85884825ea35e9b3b6f86ab0d12d1a1c5e3518d
912
913* A flow control mechanism for writes was added. When a channel's write
914  fails because there's no space, and then space becomes available, the
915  channel is now notified. Commit: `Add write flow control mechanism
916  <https://pwrev.dev/251435>`__. Bug: :bug:`380299794`.
917
918.. 99944ede9942532e5a12996575497ecb31a10442
919
920* Proxies now reset after receiving ``HCI_Reset`` commands. Commit:
921  `Reset proxy on HCI_Reset <https://pwrev.dev/251472>`__. Bug:
922  :bug:`381902130`.
923
924.. 2bfeaec98417551db59ec6dcc718f526a15d193f
925
926* The new :cpp:class:`pw::bluetooth::proxy::L2capStatusDelegate` class
927  lets you receive connection/disconnection notifications for a particular
928  L2CAP service. Commit: `Add L2cap service listener API
929  <https://pwrev.dev/249754>`__. Bug: :bug:`379558046`.
930
931.. _docs-changelog-2024-12-11-Modules-pw_build:
932
933pw_build
934--------
935New features:
936
937.. b8d1cd064d4440e216f62802ab2378eb0c3eb269
938
939* New guidance on :ref:`module-pw_build-bazel-pw_cc_binary` was added.
940  Commit: `Document pw_cc_binary <https://pwrev.dev/252052>`__.
941
942Changes:
943
944.. 2ce8bc27e467224bf503fada12a29d8a4a2b81d7
945
946* When a ``pw_python_venv`` targets has no source packages and no
947  requirements, an empty Python venv is created and ``pip-compile`` is no
948  longer used. Commit: `Allow for empty Python build venvs
949  <https://pwrev.dev/253253>`__. Bug: :bug:`380293856`.
950
951.. _docs-changelog-2024-12-11-Modules-pw_cli:
952
953pw_cli
954------
955New features:
956
957.. 13c7f3ca42864136624da1d8452b0110d61b850e
958
959* Specifying whether color should be enabled on an output is now more
960  granular. Commit: `Allow output-specific color checks
961  <https://pwrev.dev/252292>`__.
962
963Changes:
964
965.. 73b5fbf1ba77139796d29b7a064ec3c76127bae4
966
967* The Python function ``pw_presubmit.tools.exclude_paths()`` was moved
968  to the ``pw_cli.file_filter`` module. Commit: `Move exclude_paths
969  <https://pwrev.dev/252293>`__.
970
971.. _docs-changelog-2024-12-11-Modules-pw_containers:
972
973pw_containers
974-------------
975Bug fixes:
976
977.. a7c4dd8b045259a12194742793eaa03aa9e07443
978
979* A bug was fixed where :cpp:class:`pw::Vector` was move-assigning to
980  destroyed objects. Commit: `Do not move assign to destroyed objects in
981  Vector::erase <https://pwrev.dev/251992>`__. Bug: :bug:`381942905`.
982
983.. _docs-changelog-2024-12-11-Modules-pw_crypto:
984
985pw_crypto
986---------
987New features:
988
989.. 9aceb7c03cab42e1d2ae7c4e2dd9de718fbe3c68
990
991* :ref:`module-pw_crypto` now has an Mbed-TLS backend for AES. Commit:
992  `Implement Mbed-TLS backend for AES <https://pwrev.dev/231912>`__.
993
994.. 23cc90c00be0e6f8c3eef0adfe1a0906fa77b346
995
996* The new :cpp:func:`pw::crypto::aes::backend::DoEncryptBlock` is an
997  initial facade for AES. Commit: `Add AES facade
998  <https://pwrev.dev/231911>`__.
999
1000.. _docs-changelog-2024-12-11-Modules-pw_grpc:
1001
1002pw_grpc
1003-------
1004New features:
1005
1006.. d30c2bbc46ccb4e874da27c3b33dc48e30cdc893
1007
1008* Data is now queued if a stream or connection has no available send
1009  window. Previously data was dropped in this case. The send queues are
1010  non-blocking. Commit: `Implement per stream send queues and make sending
1011  non-blocking <https://pwrev.dev/249952>`__. Bug: :bug:`382294674`.
1012
1013Bug fixes:
1014
1015.. 983b4f196331b7873c59f555a39ed519cb707943
1016
1017* A :cpp:class:`pw::multibuf::MultiBufAllocator` is now required when
1018  creating a :cpp:class:`pw::grpc::Connection` instance. Commit: `Remove
1019  old constructor and make multibuf allocator required
1020  <https://pwrev.dev/252555>`__. Bug: :bug:`382294674`.
1021
1022.. _docs-changelog-2024-12-11-Modules-pw_presubmit:
1023
1024pw_presubmit
1025------------
1026New features:
1027
1028.. 9720483d67050eeda1910c707195aca45879ff90
1029
1030* A new guide for Pigweed contributors on :ref:`managing the Bazel
1031  lockfile <docs-bazel-lockfile>` was published. Commit: `Bazel lockfile
1032  check <https://pwrev.dev/253554>`__. Bug: :bug:`383387420`.
1033
1034.. _docs-changelog-2024-12-11-Modules-pw_rpc:
1035
1036pw_rpc
1037------
1038Changes:
1039
1040.. eb762cabb91d3712fe2ca6a470172f2164247072
1041
1042* The newly public ``internal_packet_proto`` library makes it possible
1043  to generate ``packet.proto`` code for non-supported languages. E.g. this
1044  makes it possible to write a Dart/Flutter RPC client. Commit: `Make
1045  packet proto library public in Bazel <https://pwrev.dev/249692>`__.
1046
1047.. _docs-changelog-2024-12-11-Modules-pw_snapshot:
1048
1049pw_snapshot
1050-----------
1051New features:
1052
1053.. b950987d209c57b18389aaca91d9a3a9ef7066f5
1054
1055* The new ``thread_processing_callback`` parameter of
1056  :py:func:`pw_snapshot.processor.process_snapshot` lets you do custom
1057  thread processing during snapshot decoding. Commit: `Add per-thread
1058  processing callback for snapshot decoding <https://pwrev.dev/251392>`__.
1059
1060.. _docs-changelog-2024-12-11-Modules-pw_system:
1061
1062pw_system
1063---------
1064New features:
1065
1066.. a4d795f13b833950d14ff9803d43e49ec1fb5e47
1067
1068* In the Bazel build ``rpc_server`` is now a
1069  :ref:`module-pw_build-bazel-pw_facade` which lets you swap out the default
1070  HDLC server with something else in your project. Commit: `Add facade for rpc
1071  server in Bazel <https://pwrev.dev/252172>`__.
1072
1073.. _docs-changelog-2024-12-11-Modules-pw_thread:
1074
1075pw_thread
1076---------
1077Changes:
1078
1079.. 9e4c976345d4d2de321e17853e9fb86493ff2200
1080
1081* ``ThreadCore`` logic was moved out of ``pw::Thread``. Commit: `Move
1082  ThreadCore logic out of pw::Thread <https://pwrev.dev/253264>`__.
1083
1084.. _docs-changelog-2024-12-11-Modules-pw_tokenizer:
1085
1086pw_tokenizer
1087------------
1088New features:
1089
1090.. 23370ed5ed0e01273080c231ee3475916dc74fba
1091
1092* The new :c:macro:`PW_TOKENIZE_ENUM_CUSTOM` macro lets you customize
1093  how enum values are tokenized. Commit: `Add macro for tokenizing enums
1094  with custom string <https://pwrev.dev/250492>`__.
1095
1096.. _docs-changelog-2024-12-11-Modules-pw_toolchain:
1097
1098pw_toolchain
1099------------
1100New features:
1101
1102.. 807a3aa14a2035f3c1693e3c023740d086ce7c94
1103
1104* In the GN build it is now possible to completely move away from GNU
1105  libraries. Commit: `Support replacing GNU libs for ARM
1106  <https://pwrev.dev/250572>`__. Bug: :bug:`322360978`.
1107
1108.. _docs-changelog-2024-12-11-Docs:
1109
1110Docs
1111====
1112New features:
1113
1114.. 4a28597bf8cc64f7cfc4cc019ba969bc10747c2b
1115
1116* A new :ref:`Bazel style guide <docs-pw-style-bazel>` was added.
1117  Commit: `Add Bazel style guide <https://pwrev.dev/240811>`__. Bug:
1118  :bug:`371564331`.
1119
1120.. 5a62fe471eab617742ded0ba84c693e4f2d29585
1121
1122* A new blog post on :ref:`C/C++ Bazel toolchains
1123  <docs-blog-06-better-cpp-toolchains>` was published.
1124  Commit: `Shaping a better future for Bazel C/C++ toolchains
1125  <https://pwrev.dev/253332>`__.
1126
1127.. _docs-changelog-2024-11-27:
1128
1129------------
1130Nov 27, 2024
1131------------
1132Highlights (Nov 15, 2024 to Nov 27, 2024):
1133
1134* **pw_allocator updates**: The :ref:`module-pw_allocator-api-bucket` class
1135  has been refactored to be more flexible and the :ref:`block API
1136  <module-pw_allocator-api-block>` has been refactored to support static
1137  polymorphism.
1138
1139.. _docs-changelog-2024-11-27-Modules:
1140
1141Modules
1142=======
1143
1144.. _docs-changelog-2024-11-27-Modules-pw_allocator:
1145
1146pw_allocator
1147------------
1148Changes:
1149
1150.. 0942b69025f2987ca9512141fe3cf3a7046f042c
1151
1152* ``BestFitBlockAllocator`` was renamed to ``BestFitAllocator`` and
1153  ``WorstFitBlockAllocator`` was renamed to ``WorstFitAllocator``. These
1154  classes have been refactored to use :ref:`buckets
1155  <module-pw_allocator-api-bucket>`. Commit: `Refactor best- and worst-fit
1156  allocators to use buckets <https://pwrev.dev/234817>`__.
1157
1158.. 0766dbaf5305202c6f67e18184bb165df8426713
1159
1160* ``FirstFitBlockAllocator``, ``LastFitBlockAllocator``, and
1161  ``DualFirstFitBlockAllocator`` were merged into a single class:
1162  :ref:`module-pw_allocator-api-first_fit_allocator`. Commit: `Refactor
1163  first fit allocators <https://pwrev.dev/234816>`__.
1164
1165.. 3bfdac7a7826a4e2a1dc7a7174fd8d6276546c26
1166
1167* The :ref:`module-pw_allocator-api-bucket` class has been refactored to
1168  be more flexible. Commit: `Refactor Bucket
1169  <https://pwrev.dev/234815>`__.
1170
1171.. 65b5e336df018fbc9d124ca09d71a5dcccd1a8c0
1172
1173* Metric calculation for blocks that shift bytes has changed. Commit:
1174  `Fix metrics for blocks that shift bytes <https://pwrev.dev/249372>`__.
1175  Bug: :bug:`378743727`.
1176
1177.. 33d00a77472a6ff545032b213aa24dfe6a39d606
1178
1179* :cpp:class:`pw::allocator::BlockAllocator` now returns
1180  :cpp:class:`pw::allocator::BlockResult`. Commit: `Use BlockResult in
1181  BlockAllocator <https://pwrev.dev/234811>`__.
1182
1183.. 6417a523b06e03dce3453e96c3a1bec6ab511768
1184
1185* The :ref:`block API <module-pw_allocator-api-block>` has been
1186  refactored to support static polymorphism. Commit: `Add static
1187  polymorphism to Block <https://pwrev.dev/232214>`__.
1188
1189.. _docs-changelog-2024-11-27-Modules-pw_bytes:
1190
1191pw_bytes
1192--------
1193New features:
1194
1195.. a287811e5e99eab8d4ddfcaf9f1a505fd1e3eb17
1196
1197* The new :cpp:func:`pw::IsAlignedAs` utility functions make it easier
1198  to check alignment. Commit: `Add utility for checking alignment
1199  <https://pwrev.dev/248192>`__.
1200
1201.. _docs-changelog-2024-11-27-Modules-pw_presubmit:
1202
1203pw_presubmit
1204------------
1205New features:
1206
1207.. e278ead3bfe1361c3ff08e5329636a35abbcef6c
1208
1209* The new ``includes_presubmit_check`` verifies that ``cc_library``
1210  Bazel targets don't use the ``includes`` attribute. Commit: `Add check
1211  for cc_library includes <https://pwrev.dev/251172>`__. Bug:
1212  :bug:`380934893`.
1213
1214.. _docs-changelog-2024-11-27-Modules-pw_protobuf:
1215
1216pw_protobuf
1217-----------
1218New features:
1219
1220.. f776679bbea5f4ae376ab924d80760bb2f1e69a0
1221
1222* :ref:`pw_protobuf-message-limitations` now has more guidance around
1223  protobuf versioning and ``optional`` fields. Commit: `Expand message
1224  structure limitations docs section <https://pwrev.dev/249072>`__.
1225
1226.. _docs-changelog-2024-11-27-Modules-pw_transfer:
1227
1228pw_transfer
1229-----------
1230Changes:
1231
1232.. 1c771e0fd88511ef3550108572572db1f036d0a5
1233
1234* Warnings logs are now emitted when client or server streams close
1235  unexpectedly. Commit: `Log when streams close unexpectedly
1236  <https://pwrev.dev/249912>`__.
1237
1238.. 48712ad0655654b4dcc9b62085a58445fe0af696
1239
1240* The window size on retried data now shrinks in an attempt to reduce
1241  network congestion. Commit: `Shrink window size on retried data
1242  <https://pwrev.dev/249532>`__.
1243
1244.. _docs-changelog-2024-11-27-Modules-pw_unit_test:
1245
1246pw_unit_test
1247------------
1248Changes:
1249
1250.. c4d59ce4d011e11781bcb6dc6660ad947a7ee8df
1251
1252* Successful expectations are no longer stringified by default. Commit:
1253  `Stop stringifying successful expectations
1254  <https://pwrev.dev/248693>`__.
1255
1256.. _docs-changelog-2024-11-27-Modules-pw_rpc:
1257
1258pw_rpc
1259------
1260Changes:
1261
1262.. 92e854a4d179f0b340a0f8b5a662012ea4b8635c
1263
1264* A warning log is now emitted when a server receives a completion
1265  request but client completion callbacks have been disabled. Commit:
1266  `Warn when client completion callback is disabled
1267  <https://pwrev.dev/249414>`__.
1268
1269.. _docs-changelog-2024-11-14:
1270
1271------------
1272Nov 14, 2024
1273------------
1274.. changelog_highlights_start
1275
1276Highlights (Nov 1, 2024 to Nov 14, 2024):
1277
1278* **ELF API**: The new :cpp:class:`pw::elf::ElfReader` class is a
1279  basic reader for ELF files.
1280* **Updated Bluetooth APIs**: There's a new low energy
1281  connection-oriented channels API and the :ref:`module-pw_bluetooth`
1282  API has been modernized.
1283* **Updated SEED process**: "Intent Approved" and "On Hold" statuses
1284  were added to the SEED lifecycle.
1285
1286.. changelog_highlights_end
1287
1288.. _docs-changelog-2024-11-14-Modules:
1289
1290Modules
1291=======
1292
1293.. _docs-changelog-2024-11-14-Modules-pw_allocator:
1294
1295pw_allocator
1296------------
1297Changes:
1298
1299.. 1dcac6a863b8adfc930de769ec56fd44f1e4448f
1300
1301* ``pw::allocator::AsPmrAllocator`` was renamed to
1302  :cpp:class:`pw::allocator::PmrAllocator`. Commit: `Separate PMR from
1303  Allocator <https://pwrev.dev/246412>`__.
1304
1305.. _docs-changelog-2024-11-14-Modules-pw_async2:
1306
1307pw_async2
1308---------
1309New features:
1310
1311.. 21933c60384c25d73dba60c90e74cc44d2a446de
1312
1313* The ``new`` operator for coroutines now accepts an optional alignment
1314  argument. Commit: `Accept alignment in CoroPromiseType::operator new
1315  <https://pwrev.dev/248638>`__. Bug: :bug:`378929156`.
1316
1317.. d20009a8e35dfdb881f77b6d171c697b61dba5c3
1318
1319* The new :c:macro:`PW_TRY_READY` and :c:macro:`PW_TRY_READY_ASSIGN`
1320  helper macros reduce boilerplate in non-coroutine async code. Commit:
1321  `Add PW_TRY_READY_* control flow macros <https://pwrev.dev/243818>`__.
1322
1323.. _docs-changelog-2024-11-14-Modules-pw_bluetooth:
1324
1325pw_bluetooth
1326------------
1327New features:
1328
1329.. c9ad96cf7be8a05a7d1bf6ec933114c7cc39f012
1330
1331* The new :cpp:class:`pw::bluetooth::low_energy::Channel`,
1332  :cpp:class:`pw::bluetooth::low_energy::ChannelListener`, and
1333  :cpp:class:`pw::bluetooth::low_energy::ChannelListenerRegistry` classes
1334  provide a low energy connection-oriented channels API. Commit: `Add LE
1335  Connection-Oriented Channels API <https://pwrev.dev/227371>`__. Bug:
1336  :bug:`357142749`.
1337
1338Changes:
1339
1340.. a615b8bf5234f48b8a33e6c837aa7521fa80d92a
1341
1342* The :ref:`module-pw_bluetooth` API has been modernized. Commit:
1343  `Modernize APIs <https://pwrev.dev/219393>`__. Bug: :bug:`350994818`.
1344
1345.. _docs-changelog-2024-11-14-Modules-pw_bluetooth_proxy:
1346
1347pw_bluetooth_proxy
1348------------------
1349New features:
1350
1351.. b8ee89e76ff4e8c467ea35291b2a141175c737e9
1352
1353* :cpp:class:`pw::bluetooth::proxy::L2capCoc` now supports reading.
1354  Commit: `L2CAP CoC supports reading <https://pwrev.dev/232172>`__. Bug:
1355  :bug:`360934032`.
1356
1357.. _docs-changelog-2024-11-14-Modules-pw_channel:
1358
1359pw_channel
1360----------
1361New features:
1362
1363.. 0a4e6db6ad35d0bf062c22b471fef2a66948a90f
1364
1365* The new :cpp:func:`pw::Channel::PendAllocateWriteBuffer` method
1366  simplifies the allocation of write buffers that need small
1367  modifications. Commit: `Move to PendAllocateWriteBuffer
1368  <https://pwrev.dev/246239>`__.
1369
1370Changes:
1371
1372.. bd17ed6971f608e2d66da8b2954bc13ad3e2c664
1373
1374* The ``pw::channel::WriteToken`` method was removed. Commit: `Remove
1375  WriteToken <https://pwrev.dev/245932>`__.
1376
1377.. 0422de1761e52ad5d1fad821880025fc27facf1c
1378
1379* ``pw_channel`` inheritance has been refactored
1380  to ensure that conversions between compatible variants are valid.
1381  Commit: `Rework inheritance to avoid SiblingCast
1382  <https://pwrev.dev/247732>`__.
1383
1384.. _docs-changelog-2024-11-14-Modules-pw_elf:
1385
1386pw_elf
1387------
1388New features:
1389
1390.. 8ee78791500354f85df94b228f63b3a42a882040
1391
1392* The new :cpp:class:`pw::elf::ElfReader` class is a basic reader for
1393  ELF files. Commit: `Add ElfReader <https://pwrev.dev/244893>`__.
1394
1395.. _docs-changelog-2024-11-14-Modules-pw_i2c:
1396
1397pw_i2c
1398------
1399Bug fixes:
1400
1401.. 6165aa470b35106b79b2e57ecec9951cff30acdc
1402
1403* I2C flags are now correctly set for transactions that occur on an I3C
1404  bus. Commit: `Set the i2c flags correctly for transactions on an i3c bus
1405  <https://pwrev.dev/245754>`__. Bug: :bug:`373451623`.
1406
1407.. _docs-changelog-2024-11-14-Modules-pw_metric:
1408
1409pw_metric
1410---------
1411New features:
1412
1413.. a751fa9bd38a30f08a14c336e7bc77878a5d60c5
1414
1415* ``pwpb`` now prioritizes the ``.pwpb_options`` for protobuf codegen.
1416  Commit: `Add metrics_service.pwpb_options to BUILD.gn
1417  <https://pwrev.dev/246112>`__.
1418
1419.. aacf94efb59dac4a661e88e2ba95acda20c5ccb1
1420
1421* The new :cpp:func:`PW_METRIC_TOKEN` makes it easier for tests to
1422  create tokens for metrics. Commit: `Expose metric token format via
1423  PW_METRIC_TOKEN <https://pwrev.dev/244332>`__.
1424
1425.. _docs-changelog-2024-11-14-Modules-pw_protobuf:
1426
1427pw_protobuf
1428-----------
1429New features:
1430
1431.. acbeaab3d280f748d235a31025d7a35dd38fa516
1432
1433* The ``Find*()`` methods have been extended to support iterating over
1434  repeated fields. See :ref:`module-pw_protobuf-read`. Commit:
1435  `Extend Find() APIs to support repeated fields <https://pwrev.dev/248432>`__.
1436
1437Changes:
1438
1439.. 6a16fab34795f2976e04457d099a05c671b79b54
1440
1441* It's no longer necessary to set a callback for every possible field in
1442  a message when you're only interested in a few fields. Commit: `Allow
1443  unset oneof callbacks <https://pwrev.dev/246692>`__.
1444
1445.. _docs-changelog-2024-11-14-Modules-pw_protobuf_compiler:
1446
1447pw_protobuf_compiler
1448--------------------
1449Changes:
1450
1451.. cd0b4fb52d8fb2012fbd8483f66a48d593e83bb9
1452
1453* ``pwpb_options`` files are now explicitly processed first, followed by
1454  regular ``.options`` files. Commit: `Don't rely on options file ordering
1455  <https://pwrev.dev/247472>`__.
1456
1457.. _docs-changelog-2024-11-14-Modules-pw_rpc:
1458
1459pw_rpc
1460------
1461Changes:
1462
1463.. f0ba9b05187506d7526ca3585401c8df7b4e9d4d
1464
1465* The Python client previously reused call IDs after ``16384``. The limit
1466  has been increased to ``2097152``. Commit: `Allocate more call IDs in
1467  the Python client <https://pwrev.dev/245067>`__. Bug: :bug:`375658481`.
1468
1469.. _docs-changelog-2024-11-14-Modules-pw_rpc_transport:
1470
1471pw_rpc_transport
1472----------------
1473New features:
1474
1475.. 18d5fbfb289c8675dd683d62ab69b83147e9d70e
1476
1477* The new ``pw::rpc::RpcIngress::num_total_packets`` method tracks how
1478  many packets an ingress RPC handler has received. Commit: `Track number
1479  of RPC packets received <https://pwrev.dev/247194>`__. Bug:
1480  :bug:`373449543`.
1481
1482.. _docs-changelog-2024-11-14-Modules-pw_sensor:
1483
1484pw_sensor
1485---------
1486New features:
1487
1488.. b7246bf88df6aa030dec7b9510e7015b5035616c
1489
1490* The new ``extras`` key lets applications specify additional metadata
1491  that's not supported or used by Pigweed. Commit: `Add freeform extras
1492  field to sensor.yaml <https://pwrev.dev/248195>`__.
1493
1494.. _docs-changelog-2024-11-14-Modules-pw_spi:
1495
1496pw_spi
1497------
1498Changes:
1499
1500.. 6aadd54afb308c09edb833985b387442df732fef
1501
1502* :cpp:class:`pw::spi::Initiator` is now a `non-virtual interface
1503  <https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-Virtual_Interface>`__.
1504  Commit: `Finalize non-Virtual interface on
1505  Initiator <https://pwrev.dev/236236>`__. Bug: :bug:`308479791`.
1506
1507.. _docs-changelog-2024-11-14-Modules-pw_spi_linux:
1508
1509pw_spi_linux
1510------------
1511Bug fixes:
1512
1513.. d17b5acd42c6e983ce4b12a7ebc3184205a06d45
1514
1515* The ``pw::Spi::Initiator::DoWriteRead()`` method now correctly handles
1516  transfers where either the write buffer or the read buffer is empty.
1517  Commit: `Fix read/write-only transfers <https://pwrev.dev/246053>`__.
1518
1519.. _docs-changelog-2024-11-14-Modules-pw_stream:
1520
1521pw_stream
1522---------
1523New features:
1524
1525.. b2c1616caaff13d41e434cbcb8ae0530a20962ca
1526
1527* The new :cpp:func:`pw::stream::Stream::ReadExact` method reads exactly
1528  the number of bytes requested into a provided buffer, if supported.
1529  Commit: `Add ReadExact() wrapper <https://pwrev.dev/243552>`__.
1530
1531.. _docs-changelog-2024-11-14-Modules-pw_tokenizer:
1532
1533pw_tokenizer
1534------------
1535New features:
1536
1537.. 94e2314ddea1499a7868bd3d30621b709e25f7d4
1538
1539* The new :cpp:func:`pw::tokenizer::Detokenizer::FromElfFile` method
1540  constructs a detokenizer from the ``.pw_tokenizer.entries`` section of
1541  an ELF binary. Commit: `Add Detokenizer::FromElfFile
1542  <https://pwrev.dev/243532>`__. Bug: :bug:`374367947`.
1543
1544Bug fixes:
1545
1546.. 7fb7bb1dc5d69c79de1b0b72316a34a800f2d5b0
1547
1548* The Python detokenizer now correctly handles multiple nested tokens in
1549  one log string. Commit: `Update regex for nested args
1550  <https://pwrev.dev/248232>`__.
1551
1552.. _docs-changelog-2024-11-14-SEEDs:
1553
1554SEEDs
1555=====
1556New features:
1557
1558.. a1acd00d02ebe42116a4982ad809264f3c673021
1559
1560* "Intent Approved" and "On Hold" statuses were added to the SEED
1561  lifecycle. Commit: `(SEED-0001) Add "Intent Approved" and "On Hold"
1562  states to lifecycle <https://pwrev.dev/248692>`__.
1563
1564.. _docs-changelog-2024-10-31:
1565
1566------------
1567Oct 31, 2024
1568------------
1569Highlights (Oct 18, 2024 to Oct 31, 2024):
1570
1571* The new :c:macro:`PW_TEST_EXPECT_OK`, :c:macro:`PW_TEST_ASSERT_OK`,
1572  and :c:macro:`PW_TEST_ASSERT_OK_AND_ASSIGN` macros provide test matchers
1573  for :ref:`module-pw_status` and :ref:`module-pw_result` values.
1574* The Sense tutorial has expanded guidance around :ref:`handling crashes
1575  and viewing snapshots <showcase-sense-tutorial-crash-handler>`.
1576* The new :cpp:class:`pw::LinkerSymbol` class represents a symbol
1577  provided by a linker.
1578* The new ``extra_frame_handlers`` parameter lets you add custom HDLC frame
1579  handlers when using the Python-based :ref:`module-pw_system` console.
1580
1581.. _docs-changelog-2024-10-31-Modules:
1582
1583Modules
1584=======
1585
1586.. _docs-changelog-2024-10-31-Modules-pw_allocator:
1587
1588pw_allocator
1589------------
1590New features:
1591
1592.. 6fd4792308999b9c5949e9b778994d064a80a8b7
1593
1594* The new :c:macro:`PW_ALLOCATOR_ENABLE_PMR` macro lets you disable the
1595  ability to use an allocator with the polymorphic versions of standard
1596  library containers. Commit: `Make pw::Allocator::as_pmr optional
1597  <https://pwrev.dev/245254>`__.
1598
1599Changes:
1600
1601.. c3c61885927ee9e8fac187a52b1ab139919fe5e7
1602
1603* Multiple methods were renamed or removed in preparation for upcoming
1604  work to split up :cpp:class:`pw::allocator::Block`. Commit: `Streamline
1605  Block API <https://pwrev.dev/232213>`__.
1606
1607.. _docs-changelog-2024-10-31-Modules-pw_assert:
1608
1609pw_assert
1610---------
1611Changes:
1612
1613.. 673e56ac476a345a0f25319633d8ce0ad0c0cd93
1614
1615* ``pw_assert`` now verifies whether ``PW_CHECK`` message arguments are
1616  valid, regardless of what ``pw_assert`` backend is being used. Commit:
1617  `Verify PW_CHECK message arguments in the API
1618  <https://pwrev.dev/244744>`__.
1619
1620.. _docs-changelog-2024-10-31-Modules-pw_assert_tokenized:
1621
1622pw_assert_tokenized
1623-------------------
1624New features:
1625
1626.. ef5f6bf505343c0926532f53dc788b26c3640048
1627
1628* :c:macro:`pw_assert_HandleFailure` is now supported. Commit: `Support
1629  pw_assert_HandleFailure <https://pwrev.dev/244793>`__.
1630
1631.. _docs-changelog-2024-10-31-Modules-pw_async2:
1632
1633pw_async2
1634---------
1635New features:
1636
1637.. cec451dc5c2cb132717068d686e4e034b06762c9
1638
1639* :cpp:class:`pw::async2::Join` lets you join several separate pendable
1640  values. Commit: `Add Join combinator <https://pwrev.dev/244612>`__.
1641
1642.. 0945ffb46234253d08467adebd8869ebb39234fa
1643
1644* The new :cpp:func:`pw::async2::TimeFuture::Reset` method resets a
1645  ``TimeFuture`` instance to expire at a specified time. Commit: `Add
1646  TimerFuture::Reset <https://pwrev.dev/243993>`__.
1647
1648Changes:
1649
1650.. 9528eac2b6c6243dc5fb6a4d72f33d8d7e0d573c
1651
1652* Waker storage has moved to a macro-based API. See
1653  :c:macro:`PW_ASYNC_STORE_WAKER` and :c:macro:`PW_ASYNC_CLONE_WAKER`.
1654  Commit: `Move to macro-based Waker API <https://pwrev.dev/245068>`__.
1655  Bug: :bug:`376123061`.
1656
1657.. _docs-changelog-2024-10-31-Modules-pw_bluetooth_proxy:
1658
1659pw_bluetooth_proxy
1660------------------
1661New features:
1662
1663.. a8c756860ae104ef5e87439ef4f8cc4fbbb2fab7
1664
1665* Bazel builds are now supported. Commit: `Add bazel build support
1666  <https://pwrev.dev/243874>`__.
1667
1668.. _docs-changelog-2024-10-31-Modules-pw_build:
1669
1670pw_build
1671--------
1672New features:
1673
1674.. 170f745d98d101d73564fa61420f1a0836053033
1675
1676* The new :cpp:class:`pw::LinkerSymbol` class represents a symbol
1677  provided by a linker. Commit: `Add LinkerSymbol
1678  <https://pwrev.dev/242635>`__.
1679
1680.. _docs-changelog-2024-10-31-Modules-pw_channel:
1681
1682pw_channel
1683----------
1684Changes:
1685
1686.. 5f2649a6e5afdecd7b5d59aab06f59bb4d73d9f3
1687
1688* ``pw::channel::AnyChannel::Write`` was renamed to
1689  :cpp:func:`pw::channel::AnyChannel::StageWrite` and
1690  ``pw::channel::AnyChannel::PendFlush`` was renamed to
1691  :cpp:func:`pw::channel::AnyChannel::PendWrite`. Commit: `Rename
1692  {Write->StageWrite, PendFlush->PendWrite} <https://pwrev.dev/245539>`__.
1693
1694.. _docs-changelog-2024-10-31-Modules-pw_containers:
1695
1696pw_containers
1697-------------
1698New features:
1699
1700.. afb18a6ded0c43e91ce85e5ec97ae0206c4873ca
1701
1702* :cpp:class:`pw::IntrusiveSet` is a new class like ``std::set<Key,
1703  Compare>`` that uses intrusive items as keys and
1704  :cpp:class:`pw::IntrusiveMultiSet` is a new class like
1705  ``std::multiset<Key, Compare>`` that uses intrusive items. Commit: `Add
1706  IntrusiveSet and IntrusiveMultiSet <https://pwrev.dev/240053>`__.
1707
1708Changes:
1709
1710.. bde3f80e6e038cebe264283af625faf06a64d8d0
1711
1712* The ``erase`` methods of
1713  :cpp:class:`pw::containers::future::IntrusiveList`,
1714  :cpp:class:`pw::IntrusiveMap`, and :cpp:class:`pw::IntrusiveMultiMap`
1715  have been overloaded to make them easier to use. Commit: `Add methods to
1716  erase by item <https://pwrev.dev/243257>`__.
1717
1718.. _docs-changelog-2024-10-31-Modules-pw_log:
1719
1720pw_log
1721------
1722Changes:
1723
1724.. 661bf47f06e604384a4c7eb7bf79d2f3da71ee74
1725
1726* The signature for :c:macro:`PW_LOG` macro changed. A ``verbosity``
1727  level must now always be passed as the second argument when invoking
1728  ``PW_LOG``. Commit: `Explicitly pass verbosity to PW_LOG
1729  <https://pwrev.dev/239035>`__.
1730
1731.. _docs-changelog-2024-10-31-Modules-pw_multibuf:
1732
1733pw_multibuf
1734-----------
1735New features:
1736
1737.. 9ab6e749821eddb8a82f7724c1af10ef6accc016
1738
1739* The new :cpp:func:`pw::multibuf::FromSpan` function creates a multibuf from
1740  an existing span and a ``deleter`` callback. Commit: `Add FromSpan
1741  <https://pwrev.dev/245132>`__. Bug: :bug:`373725545`.
1742
1743.. _docs-changelog-2024-10-31-Modules-pw_multisink:
1744
1745pw_multisink
1746------------
1747New features:
1748
1749.. 773331a904413e92d86c6e4cb658af77cf889d76
1750
1751* The new :cpp:func:`pw::multisink::UnsafeDumpMultiSinkLogsFromEnd`
1752  utilitiy function dumps contents as a series of log entries. Commit:
1753  `Add UnsafeForEachEntryFromEnd() <https://pwrev.dev/244556>`__. Bug:
1754  :bug:`375653884`.
1755
1756.. _docs-changelog-2024-10-31-Modules-pw_polyfill:
1757
1758pw_polyfill
1759-----------
1760Changes:
1761
1762.. d3e10fad55171d8cdce399916acbf37b2dec732b
1763
1764* :c:macro:`PW_CONSTINIT` now fails when used without compiler support.
1765  Commit: `Make PW_CONSTINIT support mandatory
1766  <https://pwrev.dev/243892>`__.
1767
1768.. _docs-changelog-2024-10-31-Modules-pw_protobuf:
1769
1770pw_protobuf
1771-----------
1772Bug fixes:
1773
1774.. 368cf8be3cb1909453c9c2cc67ec951517943086
1775
1776* ``pw_protobuf`` now fails when the ``max_count`` or ``fixed_count``
1777  options of ``pwpb`` are used on unsupported field types. Commit: `Fail
1778  when a max count is set with an unsupported type
1779  <https://pwrev.dev/236816>`__.
1780
1781Changes:
1782
1783.. 9525d75843cede1c67f78de7c2f86bb30ac98efe
1784
1785* Code generator options can now be specified in files ending with
1786  ``.pwpb_options``. This is useful for projects that wish to strictly
1787  separate Nanopb and ``pw_protobuf`` options. Commit: `Allow
1788  .pwpb_options as an options file extension
1789  <https://pwrev.dev/241137>`__.
1790
1791.. _docs-changelog-2024-10-31-Modules-pw_ring_buffer:
1792
1793pw_ring_buffer
1794--------------
1795New features:
1796
1797.. b90180561658453318c36b125fd8af37de713a3f
1798
1799* ``pw_ring_buffer`` readers now support the ``--`` decrement operator.
1800  Commit: `Add a decrement operator <https://pwrev.dev/244555>`__. Bug:
1801  :bug:`375653884`.
1802
1803.. _docs-changelog-2024-10-31-Modules-pw_system:
1804
1805pw_system
1806---------
1807New features:
1808
1809.. 1f2341cd64eaacb9de474510293397b50165b3b5
1810
1811* The new ``extra_frame_handlers`` parameter lets you add custom HDLC
1812  frame handlers when using the Python-based ``pw_system`` console.
1813  Commit: `Make console support extra hdlc frame handlers
1814  <https://pwrev.dev/245192>`__.
1815
1816Bug fixes:
1817
1818.. 9b2dd9ccb35a49f57c053e88a55da35ad24fc93d
1819
1820* A bug was fixed where the latest logs were not being captured in crash
1821  snapshots. Commit: `Ensure latest logs are captured in crash snapshot
1822  <https://pwrev.dev/244557>`__. Bug: :bug:`375653884`.
1823
1824.. 0aa57cea2e06c48a24266b21d472155c2379189f
1825
1826* The ``pw_system`` crash dump now includes a main stack thread
1827  backtrace. Commit: `Add main stack thread backtrace capture to crash
1828  dump <https://pwrev.dev/242337>`__. Bug: :bug:`354767156`.
1829
1830.. ed55dbc3fa5eb05e2b557fad0eff2b1bf1f93751
1831
1832* The ``pw_system`` crash dump now includes FreeRTOS thread backtraces.
1833  Commit: `Add freertos thread backtrace capture to crash dump
1834  <https://pwrev.dev/234155>`__. Bug: :bug:`354767156`.
1835
1836.. _docs-changelog-2024-10-31-Modules-pw_thread:
1837
1838pw_thread
1839---------
1840Changes:
1841
1842.. e5db91d7df18444134ce4fede3a1a0c3a9f5c1fc
1843
1844* The legacy ``thread::Id`` alias has been migrated to
1845  ``pw::Thread::id``. Commit: `Migrate to Thread::id
1846  <https://pwrev.dev/238432>`__. Bug: :bug:`373524945`.
1847
1848.. _docs-changelog-2024-10-31-Modules-pw_tokenizer:
1849
1850pw_tokenizer
1851------------
1852New features:
1853
1854.. 4b7733f3f0c9e010ccd6bee3ff45d64b92e65fa7
1855
1856* :c:macro:`PW_APPLY` is a new general macro that supports macro
1857  expansion and makes tokenizing enums easier. Commit: `Create generic
1858  macro for tokenizing enums <https://pwrev.dev/242715>`__. Bug:
1859  :bug:`3627557773`.
1860
1861.. _docs-changelog-2024-10-31-Modules-pw_toolchain:
1862
1863pw_toolchain
1864------------
1865New features:
1866
1867.. b40ecc98b47a37b187f40408ae0c3d89ef9b5f79
1868
1869* ``pw_toolchain`` now supports the Arm Cortex-M55F GCC toolchain.
1870  Commit: `Add ARM Cortex-M55F GCC toolchain
1871  <https://pwrev.dev/244672>`__. Bug: :bug:`375562597`.
1872
1873.. _docs-changelog-2024-10-31-Modules-pw_unit_test:
1874
1875pw_unit_test
1876------------
1877New features:
1878
1879.. ce0e3e2d1b7eec7cdf59fbb2ceed2b1cb3edd1ec
1880
1881* The new :c:macro:`PW_TEST_EXPECT_OK`, :c:macro:`PW_TEST_ASSERT_OK`,
1882  and :c:macro:`PW_TEST_ASSERT_OK_AND_ASSIGN` macros provide test matchers
1883  for :ref:`module-pw_status` and :ref:`module-pw_result` values. Commit:
1884  `Define pw::Status matchers <https://pwrev.dev/243615>`__. Bugs:
1885  :bug:`338094795`, :bug:`315370328`.
1886
1887Changes:
1888
1889.. 618eaa4f4c1ee0357bdfba85290a9a6e8c9aee71
1890
1891* :cpp:func:`RUN_ALL_TESTS` is now a function. Previously it was a
1892  macro. Commit: `Use a function for RUN_ALL_TESTS()
1893  <https://pwrev.dev/243889>`__.
1894
1895.. _docs-changelog-2024-10-31-Modules-pw_watch:
1896
1897pw_watch
1898--------
1899New features:
1900
1901.. 5e7d1a0fddab1204d94ff43cee833431eda75af8
1902
1903* ``pw_watch`` can now be invoked through ``bazelisk``. Commit: `Bazel
1904  run support <https://pwrev.dev/242094>`__. Bug: :bug:`360140397`.
1905
1906.. _docs-changelog-2024-10-31-Docs:
1907
1908Docs
1909====
1910New features:
1911
1912.. c5e6cab3b190f4cdc32e3209582a7697f2992a85
1913
1914* The Sense tutorial has expanded guidance around :ref:`handling crashes
1915  and viewing snapshots <showcase-sense-tutorial-crash-handler>`. Commit:
1916  `Add crash handler section to sense tutorial
1917  <https://pwrev.dev/242735>`__. Bug: :bug:`354767156`.
1918
1919.. _docs-changelog-2024-10-31-Targets:
1920
1921Targets
1922=======
1923
1924.. _docs-changelog-2024-10-31-Targets-RP2350:
1925
1926RP2350
1927------
1928New features:
1929
1930.. 892394fe74db6decd3799873f910862cef6a182d
1931
1932* ``MemManage``, ``BusFault``, and ``UsageFault`` exception handlers are
1933  now enabled on the RP2350 target. Commit: `Add MemManage, BusFault &
1934  UsageFault exception handler <https://pwrev.dev/242336>`__. Bug:
1935  :bug:`354767156`.
1936
1937.. _docs-changelog-2024-10-17:
1938
1939------------
1940Oct 17, 2024
1941------------
1942Highlights (Oct 04, 2024 to Oct 17, 2024):
1943
1944* **Math module**: The new :ref:`module-pw_numeric` module is a collection of
1945  mathematical utilities optimized for embedded systems.
1946* **C++ Coroutines**: The new :ref:`docs-blog-05-coroutines` blog post
1947  discusses the nuances of using coroutines in embedded systems.
1948* **New SEEDs**: SEEDs :ref:`seed-0103` and :ref:`seed-0128` were accepted.
1949
1950.. _docs-changelog-2024-10-17-Modules:
1951
1952Modules
1953=======
1954
1955.. _docs-changelog-2024-10-17-Modules-pw_allocator:
1956
1957pw_allocator
1958------------
1959New features:
1960
1961.. 9aae89c7bab1de5a914c462f814fec6528e27a0f
1962
1963* The new :cpp:func:`pw::Allocator::MakeUniqueArray` template function
1964  allows a ``UniquePtr`` to hold an array of elements. Commit: `Add
1965  UniquePtr::MakeUniqueArray <https://pwrev.dev/239913>`__.
1966
1967.. d3a6358972d5897266e2b5ecf50681a8e8456e5b
1968
1969* The new :cpp:class:`pw::allocator::BlockResult` class communicates the
1970  results and side effects of allocation requests. Commit: `Add
1971  BlockResult <https://pwrev.dev/232212>`__.
1972
1973Bug fixes:
1974
1975.. 57183dee645126c67dcccbb479c730492ef168f6
1976
1977* A data race was fixed. Commit: `Fix data race
1978  <https://pwrev.dev/242736>`__. Bug: :bug:`372446436`.
1979
1980.. _docs-changelog-2024-10-17-Modules-pw_async2:
1981
1982pw_async2
1983---------
1984New features:
1985
1986.. 068949bbe9f8a5a03d9b44ae740461c4c01691ca
1987
1988* The new :cpp:func:`pw::async2::EnqueueHeapFunc` function heap-allocates
1989  space for a function and enqueues it to run on a dispatcher.
1990  Commit: `Add EnqueueHeapFunc <https://pwrev.dev/242035>`__.
1991
1992Changes:
1993
1994.. eb03d32b80c25d59000d86fc8417cce91cbc243a
1995
1996* :cpp:class:`pw::async2::PendFuncTask` now has a default template type
1997  of :cpp:type:`pw::Function`. Commit: `Provide default template type for
1998  PendFuncTask <https://pwrev.dev/242918>`__.
1999
2000.. _docs-changelog-2024-10-17-Modules-pw_build:
2001
2002pw_build
2003--------
2004New features:
2005
2006.. 7698704f57a69ff5a913f0b2d43d3cc419d10446
2007
2008* The newly relanded ``pw_copy_and_patch_file`` feature provides the
2009  ability to patch a file during a Bazel or GN build. Commit: `Add
2010  pw_copy_and_patch_file <https://pwrev.dev/240832>`__.
2011
2012.. _docs-changelog-2024-10-17-Modules-pw_cli_analytics:
2013
2014pw_cli_analytics
2015----------------
2016New features:
2017
2018.. 6ae64ef2889810d43682b85e0c793018ae9a507c
2019
2020* The new :ref:`module-pw_cli_analytics` module collects and transmits
2021  analytics on usage of the ``pw`` command line interface. Commit:
2022  `Initial commit <https://pwrev.dev/188432>`__. Bug: :bug:`319320838`.
2023
2024.. _docs-changelog-2024-10-17-Modules-pw_console:
2025
2026pw_console
2027----------
2028Bug fixes:
2029
2030.. 8bd77aba07ab3dce5220b23994cd3ecfbcefda10
2031
2032* A divide-by-zero error in the ``pw_console`` progress bar was fixed.
2033  Commit: `Fix progress bar division by zero
2034  <https://pwrev.dev/233033>`__.
2035
2036.. _docs-changelog-2024-10-17-Modules-pw_env_setup:
2037
2038pw_env_setup
2039------------
2040Changes:
2041
2042.. a789e9c308f3b289c950e8afb3d891fa5b7b39ac
2043
2044* ``//pw_env_setup/py/pw_env_setup/cipd_setup/black.json`` has been
2045  removed. Commit: `Remove black.json <https://pwrev.dev/241359>`__.
2046
2047.. c42ec10b3824a5e15bc4e92d2065bd95143e9aad
2048
2049* Python 2 support has been removed from ``pw_env_setup``. Commit: `Drop
2050  Python 2 support <https://pwrev.dev/242713>`__. Bug: :bug:`373905972`.
2051
2052.. _docs-changelog-2024-10-17-Modules-pw_numeric:
2053
2054pw_numeric
2055----------
2056New features:
2057
2058.. 0c98e51f046d2de13e5ea8509452b99beb6776ec
2059
2060* The new :ref:`module-pw_numeric` module is a collection of
2061  mathematical utilities optimized for embedded systems. Commit: `New
2062  module for mathematical utilities <https://pwrev.dev/240655>`__.
2063
2064.. 1eadbb9e0d8de149ee300c9f60933878498b3544
2065
2066* The new :cpp:func:`pw::IntegerDivisionRoundNearest` function performs
2067  integer division and rounds to the nearest integer. It gives the same
2068  result as ``std::round(static_cast<double>(dividend) /
2069  static_cast<double>(divisor))`` but requires no floating point
2070  operations and is ``constexpr``. Commit: `Rounded integer division
2071  <https://pwrev.dev/240656>`__.
2072
2073.. _docs-changelog-2024-10-17-Modules-pw_protobuf:
2074
2075pw_protobuf
2076-----------
2077Changes:
2078
2079.. 205570386eac8fe6e0269b7fbbab1449eb565036
2080
2081* ``oneof`` protobuf fields can't be inlined within a message structure.
2082  They must be encoded and decoded using callbacks. See
2083  :ref:`pw_protobuf-per-field-apis`. Commit: `Force use of callbacks for oneof
2084  <https://pwrev.dev/242392>`__. Bug: :bug:`373693434`.
2085
2086.. 6efc99b3ee854dd54a0b1465d9014c54e01b21b9
2087
2088* The ``import_prefix`` parameter in the
2089  ``pw_protobuf.options.load_options`` Python function was replaced with
2090  an ``options_files`` parameter that lets you directly specify the
2091  location of ``.options`` files. Commit: `Support directly specifying
2092  options file locations <https://pwrev.dev/240833>`__. Bug:
2093  :bug:`253068333`.
2094
2095.. _docs-changelog-2024-10-17-Modules-pw_rpc:
2096
2097pw_rpc
2098------
2099Bug fixes:
2100
2101.. 05e93dadc080e45d624d92b80879297cfade417c
2102
2103* A bug was fixed where previously ``Call`` objects were not getting
2104  reinitialized correctly. Commit: `Fix Call not getting reset on default
2105  constructor assignment <https://pwrev.dev/239718>`__. Bug:
2106  :bug:`371211198`.
2107
2108.. _docs-changelog-2024-10-17-Modules-pw_spi:
2109
2110pw_spi
2111------
2112Changes:
2113
2114.. 4321a46654fae21df8e8fb971cd5c618b8b73d3f
2115
2116* :cpp:class:`pw::spi::Initiator` now uses a non-virtual interface (NVI)
2117  pattern. Commit: `Use non-virtual interface (NVI) pattern on
2118  pw::spi::Initiator <https://pwrev.dev/236234>`__. Bug: :bug:`308479791`.
2119
2120.. _docs-changelog-2024-10-17-Modules-pw_stream_uart_mcuxpresso:
2121
2122pw_stream_uart_mcuxpresso
2123-------------------------
2124Changes:
2125
2126.. d08c60cad881afa835a22d2bbfe36a0d6f018c1c
2127
2128* :ref:`module-pw_stream_uart_mcuxpresso` is being merged into
2129  :ref:`module-pw_uart_mcuxpresso`. Commit: `Remove dma_stream
2130  <https://pwrev.dev/241201>`__. Bug: :bug:`331617914`.
2131
2132.. _docs-changelog-2024-10-17-Modules-pw_system:
2133
2134pw_system
2135---------
2136New features:
2137
2138.. fd6b7a96cd142fcfbf979c2ebf3ea4ac2e342612
2139
2140* The new ``--debugger-listen`` and ``--debugger-wait-for-client``
2141  options make it easier to debug the ``pw_system`` console. Commit: `Add
2142  \`debugger-listen\` and \`debugger-wait-for-client\` options
2143  <https://pwrev.dev/233752>`__.
2144
2145.. _docs-changelog-2024-10-17-Modules-pw_tokenizer:
2146
2147pw_tokenizer
2148------------
2149New features:
2150
2151.. be439834757b0abcd0e81a77a0c8c39beca2d4db
2152
2153* All domains from ELF files are now loaded by default. Commit: `Load
2154  all domains from ELF files by default <https://pwrev.dev/239509>`__.
2155  Bugs: :bug:`364955916`, :bug:`265334753`.
2156
2157.. 56aa667aaa527d86241d27c5361e0d27f5aed06d
2158
2159* CSV databases now include the token's domain as the third column.
2160  Commit: `Include the domain in CSV databases
2161  <https://pwrev.dev/234414>`__. Bug: :bug:`364955916`.
2162
2163.. 9c37b722d9a807222c289069967222166c8613f5
2164
2165* Tokenizing enums is now supported. Commit: `Add support for tokenizing
2166  enums <https://pwrev.dev/236262>`__. Bug: :bug:`362753838`.
2167
2168Changes:
2169
2170.. 17df82d4c2b77d1667f24f5b27a256dbab31686f
2171
2172* When a domain is specified, any whitespace will be ignored in domain
2173  names and removed from the database. Commit: `Ignore whitespace in
2174  domain values <https://pwrev.dev/241212>`__. Bug: :bug:`362753840`.
2175
2176.. _docs-changelog-2024-10-17-Modules-pw_toolchain:
2177
2178pw_toolchain
2179------------
2180New features:
2181
2182.. 0125f4a94c827612f1ae863b60d3fa301fbd773c
2183
2184* The new :ref:`module-pw_toolchain-bazel-compiler-specific-logic`
2185  documentation provides guidance on how to handle
2186  logic that differs between compilers. Commit: `Add Bazel mechansim for
2187  clang/gcc-specific flags <https://pwrev.dev/238429>`__. Bug:
2188  :bug:`361229275`.
2189
2190.. _docs-changelog-2024-10-17-Modules-pw_uart:
2191
2192pw_uart
2193-------
2194New features:
2195
2196.. b39ad5c71df860223a8f908219bfdcfbdda1e5f5
2197
2198* The new :cpp:class:`pw::uart::UartStream` class implements the
2199  :cpp:class:`pw::stream::NonSeekableReaderWriter` interface on top of a
2200  UART device. Commit: `Add pw::uart::UartStream
2201  <https://pwrev.dev/241200>`__. Bug: :bug:`331603164`.
2202
2203.. f6a7bb781754447aa9eea82af60962070815b4f8
2204
2205* The new :cpp:class:`pw::uart::UartBlockingAdapter` class provides a
2206  blocking UART interface on top of a
2207  :cpp:class:`pw::uart::UartNonBlocking` device. Commit: `Add
2208  UartBlockingAdapter <https://pwrev.dev/238393>`__. Bug:
2209  :bug:`369679732`.
2210
2211.. bdcf65850213372533c9422fdec0a199af112161
2212
2213* The new :cpp:func:`pw::uart::UartNonBlocking::FlushOutput` function
2214  ensures that all enqueued data has been transmitted. Commit: `Add
2215  UartNonBlocking::FlushOutput() <https://pwrev.dev/238572>`__. Bug:
2216  :bug:`370051726`.
2217
2218.. _docs-changelog-2024-10-17-Modules-pw_web:
2219
2220pw_web
2221------
2222Changes:
2223
2224.. c4ea179e91c6aee6b9d41b9fe301269189970850
2225
2226* The ``device`` RPC APIs now support creating request messages for RPCs
2227  and calling the ``device`` API with those request messages. Commit:
2228  `Improvements to \`device\` RPC APIs <https://pwrev.dev/238052>`__.
2229
2230.. _docs-changelog-2024-10-17-Docs:
2231
2232Docs
2233====
2234New features:
2235
2236.. 91d4349e08e22c50e5a738dee31cc95724eab50d
2237
2238* The new :ref:`docs-blog-05-coroutines` blog post discusses the nuances
2239  of using coroutines in embedded systems. Commit: `Add coroutine blog
2240  post <https://pwrev.dev/216111>`__.
2241
2242Changes:
2243
2244.. 84375274c2a7dbc0fc29cb1e718d8cdfa05085fa
2245
2246* Guides for contributing ``pigweed.dev`` documentation have been
2247  consolidated. Commit: `Consolidate
2248  content for pigweed.dev contributors <https://pwrev.dev/242192>`__.
2249
2250.. _docs-changelog-2024-10-17-SEEDs:
2251
2252SEEDs
2253=====
2254New features:
2255
2256.. 385019a0292797dd63f00f008efe36d52d4d698a
2257
2258* SEED :ref:`seed-0103` was accepted. Commit: `(SEED-0103) pw_protobuf:
2259  Past, present, and future <https://pwrev.dev/133971>`__.
2260
2261.. ec62be9c7c9e28c8bae26d9e73f1ce341e5e5cd5
2262
2263* :ref:`seed-0128` was accepted. Commit: `(SEED-0128) Abstracting thread
2264  creation <https://pwrev.dev/206670>`__.
2265
2266.. _docs-changelog-2024-10-17-Targets:
2267
2268Targets
2269=======
2270
2271.. _docs-changelog-2024-10-17-Targets-rp2040:
2272
2273RP2040
2274------
2275New features:
2276
2277.. 8e0d91c3f7da31448419584ae9287de57ed5452f
2278
2279* A new helper, ``flash_rp2350``, was added to
2280  ``//targets/rp2040/flash.bzl``. Commit: `Update \`flash_rp2040\` helper
2281  with --chip argument <https://pwrev.dev/242917>`__.
2282
2283.. _docs-changelog-2024-10-03:
2284
2285-----------
2286Oct 3, 2024
2287-----------
2288
2289Highlights (Sep 20, 2024 to Oct 3, 2024):
2290
2291* The :ref:`module-pw_async2` and :ref:`module-pw_containers` docs
2292  now contain code examples that are built and tested alongside the rest
2293  of Pigweed, minimizing the chance that they bit rot over time.
2294* The new :cpp:class:`pw::async2::Dispatcher` class is a single-
2295  threaded, cooperatively scheduled runtime for async tasks.
2296* The new :cpp:class:`pw::uart::UartBase` class provides a common
2297  abstract base class for UART interfaces.
2298* :cpp:class:`pw::rpc::RawServerReaderWriter` and
2299  :cpp:class:`pw::rpc::RawClientReaderWriter` have new methods that let
2300  you directly serialize RPC payloads to the RPC system's encoding buffer
2301  instead of requiring a copy from an externally managed buffer.
2302
2303.. _docs-changelog-2024-10-03-Modules:
2304
2305Modules
2306=======
2307
2308.. _docs-changelog-2024-10-03-Modules-pw_allocator:
2309
2310pw_allocator
2311------------
2312New features:
2313
2314.. 020780642847dba69a9b2025f1f698fe3d8e4801
2315
2316* The new :cpp:func:`pw::allocator::CalculateFragmentation` method
2317  calculates a fragmentation metric. This should not be invoked on-device
2318  unless the device has robust floating-point support. Commit: `Add
2319  MeasureFragmentation <https://pwrev.dev/238417>`__.
2320
2321.. _docs-changelog-2024-10-03-Modules-pw_async2:
2322
2323pw_async2
2324---------
2325New features:
2326
2327.. 801fb32919777aefd7a734ce9c2c1e6aec782ab7
2328
2329* The new :cpp:class:`pw::async2::Dispatcher` class is a single-
2330  threaded, cooperatively scheduled runtime for async tasks. Commit:
2331  `Refactor Dispatcher to raise top-level API out of CRTP
2332  <https://pwrev.dev/237972>`__. Bug: :bug:`342000726`.
2333
2334.. 846bb7d3672e94c13451bec81098d3304d8395a9
2335
2336* The :ref:`module-pw_async2` docs now have examples. Commit: `Expand
2337  docs with examples <https://pwrev.dev/234095>`__.
2338
2339.. _docs-changelog-2024-10-03-Modules-pw_boot:
2340
2341pw_boot
2342-------
2343Changes:
2344
2345.. fba0833c176a79ec83403fa9d48407c5ddebb99f
2346
2347* The ``main()`` function forward declaration has been moved out of an
2348  explicit ``extern C`` block to prevent pedantic warnings in newer Clang
2349  toolchains. Commit: `Move main forward declaration out of extern "C"
2350  block <https://pwrev.dev/237333>`__. Bug: :bug:`366374135`.
2351
2352.. _docs-changelog-2024-10-03-Modules-pw_build:
2353
2354pw_build
2355--------
2356Changes:
2357
2358.. 53b16cd8d2907855b13bec9159286927de602a72
2359
2360* The rules that previously existed in ``//pw_build/pigweed.bzl`` have
2361  been split into separate files. If you relied on
2362  ``//pw_build/pigweed.bzl`` you may need to update some ``load()``
2363  statements in your Bazel files. Commit: `Break apart pigweed.bzl
2364  <https://pwrev.dev/239133>`__. Bug: :bug:`370792896`.
2365
2366.. _docs-changelog-2024-10-03-Modules-pw_chrono:
2367
2368pw_chrono
2369---------
2370New features:
2371
2372.. 279ab4a35543900b62e674d14c2e663532ad5a18
2373
2374* The new ``--stamp`` Bazel flag ensures that Bazel builds properly
2375  record the actual build time as opposed to a cached value. Commit:
2376  `Properly stamp build time in Bazel <https://pwrev.dev/237809>`__. Bug:
2377  :bug:`367739962`.
2378
2379.. _docs-changelog-2024-10-03-Modules-pw_containers:
2380
2381pw_containers
2382-------------
2383New features:
2384
2385.. 819dd2ceb430eae53909bea7d5a23c7743ef0fc2
2386
2387* The ``pw_containers`` docs now provides examples on how to add
2388  intrusive items to multiple containers. See
2389  :ref:`module-pw_containers-intrusive_list-example`. Commit:
2390  `Multiple container example <https://pwrev.dev/237472>`__.
2391
2392.. 85469bdd7f4b8eea95fad4514002383e09210a6f
2393
2394* The :ref:`module-pw_containers` docs now have code examples that are
2395  built and tested as part of the normal upstream Pigweed build, which
2396  helps ensure that they don't bit rot. Commit: `Add examples
2397  <https://pwrev.dev/236612>`__.
2398
2399Bug fixes:
2400
2401.. 92ab0326113d1d6732a6d81dcc25abb330053b22
2402
2403* A bug was fixed where nodes in an ``AATreeItem`` could become
2404  orphaned. Commit: `Fix tree rebalancing <https://pwrev.dev/237415>`__.
2405
2406.. _docs-changelog-2024-10-03-Modules-pw_log:
2407
2408pw_log
2409------
2410Changes:
2411
2412.. 5d9a1e84e7c55a7b194a8bf459b720cbba220d0c
2413
2414* The ``PW_MODULE_LOG_NAME_DEFINED`` macro has been removed. Commit:
2415  `Remove unused macro PW_MODULE_LOG_NAME_DEFINED
2416  <https://pwrev.dev/238554>`__.
2417
2418.. _docs-changelog-2024-10-03-Modules-pw_metric:
2419
2420pw_metric
2421---------
2422Bug fixes:
2423
2424.. 30dcf2b202c792599151e7b09699e836e3cc44a3
2425
2426* A bug causing ``pw::metric::Metric::Dump()`` and
2427  ``pw::metric::Group::Dump()`` to log invalid JSON objects was fixed.
2428  Commit: `Emit valid JSON from Metric::Dump
2429  <https://pwrev.dev/237933>`__.
2430
2431.. _docs-changelog-2024-10-03-Modules-pw_preprocessor:
2432
2433pw_preprocessor
2434---------------
2435Changes:
2436
2437.. 92438518417d49c3457090c1b3c57f71007743e8
2438
2439* ``PW_MACRO_ARG_COUNT`` now supports up to 256 arguments. Commit:
2440  `Expand PW_MACRO_ARG_COUNT to 256 arguments
2441  <https://pwrev.dev/237993>`__.
2442
2443.. _docs-changelog-2024-10-03-Modules-pw_presubmit:
2444
2445pw_presubmit
2446------------
2447Bug fixes:
2448
2449.. 6422c9ae137ad37a9ec172dcd95f294ce5631f82
2450
2451* A bug was fixed that was causing Pigweed's auto-generated ``rustdoc``
2452  API references to not be built. ``rustdoc`` documentation at
2453  ``pigweed.dev/rustdoc/*`` should be working again. Commit: `Have
2454  docs_build check rust docs <https://pwrev.dev/238189>`__. Bug:
2455  :bug:`369864378`.
2456
2457.. _docs-changelog-2024-10-03-Modules-pw_rpc:
2458
2459pw_rpc
2460------
2461New features:
2462
2463.. 8e2fc6cfe825631416043a972cdd93875562a4fd
2464
2465* :cpp:class:`pw::rpc::RawServerReaderWriter` and
2466  :cpp:class:`pw::rpc::RawClientReaderWriter` have new methods that let
2467  you directly serialize RPC payloads to the RPC system's encoding buffer
2468  instead of requiring a copy from an externally managed buffer. Commit:
2469  `Add callback writes to raw RPC call objects
2470  <https://pwrev.dev/239353>`__.
2471
2472.. _docs-changelog-2024-10-03-Modules-pw_spi:
2473
2474pw_spi
2475------
2476New features:
2477
2478.. c25923e13c339cc678e8900770a512b85064f99a
2479
2480* ``operator!=`` is now implemented. Commit: `Minor enhancements to
2481  pw::spi::Config <https://pwrev.dev/238932>`__.
2482
2483Changes:
2484
2485.. c25923e13c339cc678e8900770a512b85064f99a
2486
2487* ``operator()``, ``operator==``, and ``operator!=`` are now marked
2488  ``constexpr`` to enable compile-time equality checking. Commit: `Minor
2489  enhancements to pw::spi::Config <https://pwrev.dev/238932>`__.
2490
2491.. _docs-changelog-2024-10-03-Modules-pw_spi_rp2040:
2492
2493pw_spi_rp2040
2494-------------
2495Changes:
2496
2497.. 783b29c23dd865fde344501c1b99adba4c956479
2498
2499* ``spi_init()`` from the Pico SDK must be called before using the
2500  ``pw_spi`` initiator. Commit: `Minor cleanup
2501  <https://pwrev.dev/236233>`__.
2502
2503.. _docs-changelog-2024-10-03-Modules-pw_thread:
2504
2505pw_thread
2506---------
2507Changes:
2508
2509.. 30bdace4866039e26a05f8baa379630e066ad660
2510
2511* The old ``pw::Thread`` constructor that takes ``void(void*)`` has been
2512  removed from the public API. This is a breaking change. Constructor
2513  usage should be migrated to the new constructor that takes
2514  ``pw::Function<void()>``. Commit: `Make the deprecated Thread
2515  constructor private <https://pwrev.dev/236435>`__. Bug:
2516  :bug:`367786892`.
2517
2518.. 2a0f0dfccc19b86a686777afa647b0c75a87c863
2519
2520* The ``pw::thread::Thread`` class was renamed to
2521  :cpp:type:`pw::Thread`. Commit: `Migrate from pw::thread::Thread to
2522  pw::Thread <https://pwrev.dev/236723>`__.
2523
2524.. f1070484e7d2f4e429332c6d8520a3676b8cb965
2525
2526* ``pw::thread::Id`` has been renamed to ``pw::Thread::id``. Commit:
2527  `Introduce pw::Thread and pw::Thread::id <https://pwrev.dev/236796>`__.
2528
2529.. _docs-changelog-2024-10-03-Modules-pw_tokenizer:
2530
2531pw_tokenizer
2532------------
2533New features:
2534
2535.. e26be58d6db0215e6a762a5a28ad74584e9a0482
2536
2537* The new :c:macro:`PW_TOKENIZER_DEFINE_TOKEN` macro makes it easier to
2538  support tokenized enums and domains. Commit: `Expose API to define new
2539  token entry <https://pwrev.dev/238272>`__. Bug: :bug:`369881416`.
2540
2541Changes:
2542
2543.. 02a68bb680ebddeba8f0ad6cbbc6bb81d7568759
2544
2545* CSV databases now have 4 columns: token, date removed, domain, and
2546  string. The domain column was added as part of :ref:`seed-0105`. Legacy
2547  databases that only support the other 3 columns continue to be
2548  supported. Tokens in legacy databases are always in the default domain
2549  ``""``. Commit: `Support CSV databases with the domain
2550  <https://pwrev.dev/234413>`__. Bug: :bug:`364955916`.
2551
2552.. _docs-changelog-2024-10-03-Modules-pw_toolchain:
2553
2554pw_toolchain
2555------------
2556Changes:
2557
2558.. bf7078a044353df9683ecb65561a0edca45a4f95
2559
2560* The ``pw_toolchain`` docs were refactored. Bazel-specific guidance is
2561  now in :ref:`module-pw_toolchain-bazel` and GN-specific guidance is now
2562  in :ref:`module-pw_toolchain-gn`. Commit: `Split out build-system
2563  specific docs <https://pwrev.dev/238816>`__.
2564
2565.. 3d0fac908c139ce83eed93727601d13747b03bf7
2566
2567* The Bazel rules at ``//pw_toolchain/args/BUILD.bazel`` moved to
2568  ``//pw_toolchain/cc/args/BUILD.bazel``. If you rely on these rules you
2569  may need to update your ``load()`` statements. Commit: `Move
2570  pw_toolchain/args to pw_toolchain/cc/args <https://pwrev.dev/238817>`__.
2571
2572.. _docs-changelog-2024-10-03-Modules-pw_transfer:
2573
2574pw_transfer
2575-----------
2576Bug fixes:
2577
2578.. da9a7e7cc2bd983d428949a6f5d85b9757b5178f
2579
2580* A bug was fixed where resumed transfers would send a window of ``0``
2581  repeatedly. Commit: `Fix offset receive transfer startup
2582  <https://pwrev.dev/237095>`__. Bug: :bug:`368620868`.
2583
2584.. _docs-changelog-2024-10-03-Modules-pw_uart:
2585
2586pw_uart
2587-------
2588New features:
2589
2590.. 7dc3b1b2a69972ae19bbe43f922aefd6dda73a3e
2591
2592* The new :cpp:class:`pw::uart::UartBase` class provides a common
2593  abstract base class for UART interfaces. Commit: `Add UartBase class
2594  <https://pwrev.dev/238092>`__. Bug: :bug:`369678735`.
2595
2596.. b4e75393442526d409968e4aac685515944b3e3e
2597
2598* The new :cpp:func:`pw::uart::Uart::ReadAtLeast` method reads data from
2599  the UART and blocks until at least the specified number of bytes have
2600  been received. The new :cpp:func:`pw::uart::Uart::ReadExactly` method
2601  reads data from the UART and blocks until the entire buffer has been
2602  filled. Commit: `Add ReadAtLeast and ReadExactly methods
2603  <https://pwrev.dev/236268>`__. Bug: :bug:`368149122`.
2604
2605.. f946f6ae13c3bbc2a648b36f9ff55642e9d23b34
2606
2607* The new :cpp:class:`pw::uart::UartNonBlocking` class provides a
2608  callback-based interface for performing non-blocking UART communication.
2609  It defines the interface that concrete UART implementations must adhere
2610  to. Commit: `Add uart_non_blocking.h API <https://pwrev.dev/210371>`__.
2611  Bugs: :bug:`341356437`, :bug:`331617095`.
2612
2613.. 1dc9a789f52aad1f0e738a1cfd5993e2272c38d2
2614
2615* The new :cpp:func:`pw::uart::Uart::SetFlowControl` method lets
2616  applications configure hardware flow control on UART devices. Commit:
2617  `Add method to set flow control <https://pwrev.dev/237953>`__.
2618
2619Changes:
2620
2621.. d31705b84d24f0ef17e6b8eef6cae13f96f942e4
2622
2623* ``pw::uart::Uart::ConservativeReadAvailable()`` was moved to
2624  :cpp:func:`pw::uart::UartBase::ConservativeReadAvailable()` and
2625  ``pw::uart::Uart::ClearPendingReceiveBytes()`` was moved to
2626  :cpp:func:`pw::uart::UartBase::ClearPendingReceiveBytes()`. Commit:
2627  `Move non-blocking methods from Uart to UartBase
2628  <https://pwrev.dev/238533>`__. Bug: :bug:`369679732`.
2629
2630.. _docs-changelog-2024-10-03-Modules-pw_uart_mcuxpresso:
2631
2632pw_uart_mcuxpresso
2633------------------
2634Bug fixes:
2635
2636.. 94d2c3995c8a14995490ef7de015e933a960c2d5
2637
2638* A bug was fixed where the ``pw::uart::DmaUartMcuxpresso::Deinit()``
2639  method didn't clear an initialization flag, which caused the
2640  ``pw::uart::DmaUartMcuxpresso::Init()`` method to be skipped on
2641  subsequent enables. Commit: `Fix disable bug
2642  <https://pwrev.dev/237394>`__.
2643
2644.. _docs-changelog-2024-10-03-Docs:
2645
2646Docs
2647====
2648New features:
2649
2650.. 2ef99131bbb73e475f64281b6515eedba4a8cb79
2651
2652* The Pigweed blog now has an `RSS feed <https://pigweed.dev/rss.xml>`_.
2653  Commit: `Create RSS feed for blog <https://pwrev.dev/225491>`__. Bug:
2654  :bug:`345857642`.
2655
2656.. 8f18755dc9a225caacf2b190d1114ebfda4a2642
2657
2658* The new blog post :ref:`blog-04-fixed-point` outlines how replacing
2659  soft floats with fixed-point arithmetic can result in speed improvements
2660  and binary size reductions without sacrificing correctness. Commit: `Add
2661  fixed point blog <https://pwrev.dev/234312>`__.
2662
2663Bug fixes:
2664
2665.. e81cd5e642a0c92264caafb14a2f4931cb14fced
2666
2667* When a Pigweed module is listed as supporting Rust in
2668  ``//docs/module_metadata.json``, a link to that module's ``rustdoc`` API
2669  reference is now auto-generated in the ``pigweed.dev`` site nav. Commit:
2670  `Auto-link to Rust API references <https://pwrev.dev/237934>`__. Bug:
2671  :bug:`328503976`.
2672
2673.. _docs-changelog-2024-10-03-SEEDs:
2674
2675SEEDs
2676=====
2677Changes:
2678
2679.. 905bce3bd61280a8254ac5b3b2f78e2d3059faa0
2680
2681* SEED-0123 was rejected because Pigweed ended up upstreaming the
2682  relevant APIs to ``rules_cc`` instead of sprouting them into a separate
2683  repo. Commit: `(SEED-123) Reject the SEED <https://pwrev.dev/236453>`__.
2684
2685.. _docs-changelog-2024-10-03-Targets:
2686
2687Targets
2688=======
2689.. a5a199593f1375177d5805f882f303d4c8b8cea2
2690
2691* The ``main()`` forward declaration for ``emcraft_sf2_som``,
2692  ``host_device_simulator``, and ``stm32f429i_disc1_stm32cube`` are no
2693  longer explicitly marked ``extern C`` to prevent pedantic warnings in
2694  newer Clang toolchains. Commit: `Remove implicit extern C
2695  <https://pwrev.dev/237092>`__. Bug: :bug:`366374135`.
2696
2697.. _docs-changelog-2024-09-19:
2698
2699------------
2700Sep 19, 2024
2701------------
2702Highlights (Sep 06, 2024 to Sep 19, 2024):
2703
2704* **New container classes**: The new :cpp:class:`pw::IntrusiveMap` and
2705  :cpp:class:`pw::IntrusiveMultiMap` classes can be used for associative
2706  dictionaries, sorted lists, and more.
2707* **Protobuf Editions**: Initial support for `Protobuf Editions
2708  <https://protobuf.dev/editions/overview>`__ was added for GN-based and
2709  CMake-based projects.
2710* **Token domains**: The :ref:`Detokenizer
2711  <module-pw_tokenizer-detokenization>` now supports
2712  :ref:`token domains <seed-0105>`.
2713
2714.. _docs-changelog-2024-09-19-Modules:
2715
2716Modules
2717=======
2718
2719.. _docs-changelog-2024-09-19-Modules-pw_allocator:
2720
2721pw_allocator
2722------------
2723New features:
2724
2725.. d5fcc90b39ee7568855390535fa854cea8f33c95
2726
2727* The new :c:macro:`PW_ALLOCATOR_STRICT_VALIDATION` option lets you
2728  enable more expensive checks to aggressively enforce invariants when
2729  testing. The new :c:macro:`PW_ALLOCATOR_BLOCK_POISON_INTERVAL` option
2730  allows setting the poisoning rate more easily from the build rather than
2731  in code via template parameters. See
2732  :ref:`module-pw_allocator-module-configuration`. Commit: `Add module config
2733  <https://pwrev.dev/232211>`__.
2734
2735Bug fixes:
2736
2737.. 82759ccb711c3f34320ae9ae37bf70a029baec57
2738
2739* A bug was fixed where ``pw_allocator`` always split the first block
2740  even if there was not enough room for the first block to be split into
2741  two, which could cause heap corruption and crashes. Commit: `Check for
2742  room to split the first block <https://pwrev.dev/235312>`__. Bug:
2743  :bug:`366175024`.
2744
2745.. _docs-changelog-2024-09-19-Modules-pw_assert:
2746
2747pw_assert
2748---------
2749Changes:
2750
2751.. cfcf0059926589e26f318e29df8733e5a09c2928
2752
2753* :c:macro:`PW_CHECK_OK` now accepts any expression that's convertible
2754  to :cpp:class:`pw::Status`. Commit: `Update PW_CHECK_OK() to handle any
2755  expr convertible to Status <https://pwrev.dev/234820>`__. Bugs:
2756  :bug:`357682413`, :bug:`365592494`.
2757
2758.. _docs-changelog-2024-09-19-Modules-pw_async2:
2759
2760pw_async2
2761---------
2762New features:
2763
2764.. cfcbaf5bbc67288b5e8954f22528c4de9312effe
2765
2766* The new
2767  :cpp:func:`pw::async2::SimulatedTimeProvider::AdvanceUntilNextExpiration`
2768  utility method is useful for advancing test time without
2769  random periods or endless iterations. Commit: `Add more
2770  SimulatedTimeProvider utilities <https://pwrev.dev/234929>`__.
2771
2772Changes:
2773
2774.. ed0fd1f45a3a137965dbb2075227b8ef0e91f935
2775
2776* Coroutines now log the requested size when an allocation fails.
2777  Commit: `Log size of failed coroutine allocations
2778  <https://pwrev.dev/234801>`__.
2779
2780.. _docs-changelog-2024-09-19-Modules-pw_build:
2781
2782pw_build
2783--------
2784Bug fixes:
2785
2786.. 3919d9638b6454512595c8ad39fb8806d4ac9629
2787
2788* An issue was fixed where bootstrap failed when
2789  ``pw_rust_static_library`` was used. Commit: `Fix Undefined identifier
2790  <https://pwrev.dev/232371>`__.
2791
2792.. _docs-changelog-2024-09-19-Modules-pw_bytes:
2793
2794pw_bytes
2795--------
2796New features:
2797
2798.. cda5ba673366d189e0ea326a0fa808df181730a7
2799
2800* The new :cpp:class:`pw::PackedPtr` template class provides a way to
2801  store extra data in the otherwise unused least significant bits of a
2802  pointer. Commit: `Add PackedPtr <https://pwrev.dev/235104>`__.
2803
2804.. _docs-changelog-2024-09-19-Modules-pw_containers:
2805
2806pw_containers
2807-------------
2808New features:
2809
2810.. df3b7ba1f94902e81e375ce9935749163c411515
2811
2812* ``pw::IntrusiveList`` now has a :ref:`size report
2813  <module-pw_containers-intrusivelist-size-report>`. Commit:
2814  `Add IntrusiveForwardList size report to the docs
2815  <https://pwrev.dev/233651>`__.
2816
2817.. 8a3250d2f4287c2f66c4afd7679f9b10f789e764
2818
2819* The new :cpp:class:`pw::IntrusiveMap` and
2820  :cpp:class:`pw::IntrusiveMultiMap` classes can be used for associative
2821  dictionaries, sorted lists, and more. Commit: `Add IntrusiveMap and
2822  IntrusiveMultiMap <https://pwrev.dev/216828>`__.
2823
2824Changes:
2825
2826.. 314e457eaf3a801115542d777e2157e6df85fb31
2827
2828* ``pw::IntrusiveList<T>`` was renamed to
2829  ``pw::IntrusiveForwardList<T>`` and a new doubly-linked intrusive list
2830  was added as ``pw::containers::future::IntrusiveList<T>``. An alias,
2831  ``pw::IntrusiveList<T>``, was added to maintain compatibility with
2832  existing code and will be removed in the future. The original
2833  implementation can still be temporarily enabled by setting
2834  ``PW_CONTAINERS_USE_LEGACY_INTRUSIVE_LIST``. Commit: `Add doubly linked
2835  list <https://pwrev.dev/230811>`__. Bug: :bug:`362348318`.
2836
2837.. _docs-changelog-2024-09-19-Modules-pw_env_setup:
2838
2839pw_env_setup
2840------------
2841Changes:
2842
2843.. 16f0f6387505dc27e7c1a76387b05524752b4602
2844
2845* The Git submodule check is now skipped when no ``.git`` file or
2846  directory is detected. Commit: `Add check for git in
2847  _check_submodule_presence <https://pwrev.dev/234212>`__. Bug:
2848  :bug:`365557573`.
2849
2850.. _docs-changelog-2024-09-19-Modules-pw_ide:
2851
2852pw_ide
2853------
2854Bug fixes:
2855
2856.. 145b45747105fb95e5625c00a7533e5375d124ea
2857
2858* When ``clangd`` is not found, ``pw ide sync`` now cleanly handles the
2859  lack of ``clangd`` and successfully completes the rest of the sync.
2860  Commit: `Don't fail sync on missing clangd
2861  <https://pwrev.dev/236475>`__. Bug: :bug:`349189723`.
2862
2863.. _docs-changelog-2024-09-19-Modules-pw_protobuf:
2864
2865pw_protobuf
2866-----------
2867New features:
2868
2869.. b299522cffb0a18e07528e923f376ceee3e9c188
2870
2871* Initial support for `Protobuf Editions
2872  <https://protobuf.dev/editions/overview>`__ was added for GN-based and
2873  CMake-based projects. Commit: `Basic edition support
2874  <https://pwrev.dev/235873>`__.
2875
2876.. _docs-changelog-2024-09-19-Modules-pw_spi_linux:
2877
2878pw_spi_linux
2879------------
2880Bug fixes:
2881
2882.. eefd313bdb13098552cd713598b937debe80d3d4
2883
2884* A performance issue was fixed where ``Configure()`` was being called
2885  on each ``pw::spi::Device::WriteRead()`` call. Commit: `Avoid
2886  unnecessary ioctl()s in Configure() <https://pwrev.dev/235877>`__. Bug:
2887  :bug:`366541694`.
2888
2889.. _docs-changelog-2024-09-19-Modules-pw_spi_mcuxpresso:
2890
2891pw_spi_mcuxpresso
2892-----------------
2893Changes:
2894
2895.. 9d175062d56972f082ce99753092b75419a228ce
2896
2897* ``pw::spi::McuxpressoInitiator::DoConfigure()`` was renamed to
2898  ``pw::spi::McuxpressoInitiator::DoConfigureLocked()``. Commit: `Rename
2899  DoConfigure() to DoConfigureLocked() <https://pwrev.dev/236232>`__.
2900
2901.. _docs-changelog-2024-09-19-Modules-pw_sys_io_stm32cube:
2902
2903pw_sys_io_stm32cube
2904-------------------
2905Bug fixes:
2906
2907.. b0f73feb04effde3b7751c53c21b7a163f234eb8
2908
2909* A bug was fixed where the GPIO mode of the UART RX GPIO pin on
2910  STM32F1XX devices was not being correctly set. Commit: `Fix UART RX GPIO
2911  mode for f1xx family <https://pwrev.dev/235332>`__.
2912
2913.. _docs-changelog-2024-09-19-Modules-pw_system:
2914
2915pw_system
2916---------
2917New features:
2918
2919.. 5e148c19477521afbbedcc8a91a2c5b2a07bc334
2920
2921* The console's new ``timestamp_decoder`` constructor parameter lets
2922  applications provide custom timestamp parsers. Commit: `Support
2923  timestamp parser as an argument <https://pwrev.dev/234931>`__. Bug:
2924  :bug:`344606797`.
2925
2926Changes:
2927
2928.. faac61757b5428be3787729d328f6f2f3ebfa9f1
2929
2930* The log library header (``pw_system/log.h``) of ``pw_system`` is now
2931  public and can be used outside of ``pw_system``. Commit: `Make log
2932  library header public <https://pwrev.dev/233411>`__.
2933
2934.. _docs-changelog-2024-09-19-Modules-pw_thread:
2935
2936pw_thread
2937---------
2938Changes:
2939
2940.. 8a67d6b57b526757ffa010be2be402c42cd13ac4
2941
2942* ``pw::thread::Thread`` now takes ``pw::Function<void()>``, which
2943  should be used in place of the ``void(void*)`` function pointer and
2944  ``void*`` argument. Commit: `Mark legacy function* / void* constructor
2945  as deprecated <https://pwrev.dev/236454>`__. Bug: :bug:`367786892`.
2946
2947.. _docs-changelog-2024-09-19-Modules-pw_tokenizer:
2948
2949pw_tokenizer
2950------------
2951New features:
2952
2953.. 9fb87e78e4c41778fc950714d58e6602f63d27e6
2954
2955* The :ref:`Detokenizer <module-pw_tokenizer-detokenization>` now
2956  supports :ref:`token domains <seed-0105>`. Commit:
2957  `Add token domain support to Detokenizer <https://pwrev.dev/234968>`__.
2958  Bug: :bug:`362752722`.
2959
2960.. 08ff555993b8ab250ea03a9f12aaf5c2d1c9c705
2961
2962* :py:class:`pw_tokenizer.tokens.Database` now supports :ref:`token
2963  domains <seed-0105>`. Commit: `Use domains in the Python tokens.Database
2964  class <https://pwrev.dev/234412>`__.
2965
2966.. _docs-changelog-2024-09-19-Modules-pw_toolchain:
2967
2968pw_toolchain
2969------------
2970New features:
2971
2972.. 40f756e2d3c40eeb32832309dbcae989fb750268
2973
2974* ``WORKSPACE`` toolchain registration is now configurable so that
2975  downstream projects can manually control which toolchains get
2976  registered. Commit: `Make toolchain registration configurable
2977  <https://pwrev.dev/235712>`__. Bug: :bug:`346388161`.
2978
2979.. _docs-changelog-2024-09-19-Modules-pw_transfer:
2980
2981pw_transfer
2982-----------
2983Bug fixes:
2984
2985.. f1f654a15a3adce476c2d68643eee56f3c225dd4
2986
2987* A bug was fixed where a handshake timeout was not set after
2988  ``START_ACK`` is processed. Commit: `Bugfix for start handshake, and
2989  rate limit logs <https://pwrev.dev/236572>`__. Bug: :bug:`361281209`.
2990
2991Changes:
2992
2993.. 2496aee1a4ab3d98526a7357943b69347a39903a
2994
2995* When a receiver receives a chunk of data it already has the receiver
2996  now sends a ``PARAMETERS_CONTINUE`` chunk instead of requesting
2997  retransmission. Commit: `Send continue parameters for already received
2998  chunks <https://pwrev.dev/235100>`__.
2999
3000.. f1f654a15a3adce476c2d68643eee56f3c225dd4
3001
3002* TX data chunk logs have been rate-limited to only send once every 3
3003  seconds. Commit: `Bugfix for start handshake, and rate limit logs
3004  <https://pwrev.dev/236572>`__. Bug: :bug:`361281209`.
3005
3006.. _docs-changelog-2024-09-19-Modules-pw_uart_mcuxpresso:
3007
3008pw_uart_mcuxpresso
3009------------------
3010New features:
3011
3012.. e8ab2b0ac31c0dde6febd0d384c0ea7d688f6803
3013
3014* Flow control can now be configured. Commit: `Add support for
3015  configuring flow control <https://pwrev.dev/236896>`__. Bug:
3016  :bug:`368150004`.
3017
3018Changes:
3019
3020.. e8ab2b0ac31c0dde6febd0d384c0ea7d688f6803
3021
3022* Flow control, parity mode, and stop bits now have default values.
3023  Commit: `Add support for configuring flow control
3024  <https://pwrev.dev/236896>`__. Bug: :bug:`368150004`.
3025
3026.. _docs-changelog-2024-09-19-Build-systems:
3027
3028Build systems
3029=============
3030
3031.. _docs-changelog-2024-09-19-Build-systems-Bazel:
3032
3033Bazel
3034-----
3035New features:
3036
3037.. 4ceb5b8bf0faf75c0b051114abf85a2ea73ca39c
3038
3039* The new ``do_not_build`` tag specifies targets that should be excluded
3040  from wildcard builds. The new ``do_not_run_test`` tag specifies test
3041  targets that should be built but not executed. Commit: `Introduce
3042  do_not_build, do_no_run_test tags <https://pwrev.dev/223492>`__. Bug:
3043  :bug:`353531487`.
3044
3045.. 54679d205e4888302ab24882e6fb64bf8ba964c6
3046
3047* `Platform-based flags <https://github.com/bazelbuild/proposals/blob/ma
3048  in/designs/2023-06-08-platform-based-flags.md>`__ have been re-enabled.
3049  Commit: `Re-enable platform-based flags <https://pwrev.dev/234135>`__.
3050  Bug: :bug:`301334234`.
3051
3052.. _docs-changelog-2024-09-19-Miscellaneous:
3053
3054Miscellaneous
3055=============
3056Bug fixes:
3057
3058.. 982c7f42878871e7f85dbc5420ff17f0b8ede237
3059
3060* An issue was fixed where the Fuchsia SDK was always fetched during
3061  Bazel workspace initialization and caused unnecessary downloads. Commit:
3062  `Use @fuchsia_clang as a cipd repository <https://pwrev.dev/233531>`__.
3063  Bug: :bug:`346416385`.
3064
3065-----------
3066Sep 5, 2024
3067-----------
3068.. note::
3069
3070   This changelog update is shorter than previous ones because we're
3071   experimenting with only showing user-facing new features, changes,
3072   and bug fixes. I.e. we're omitting commits that don't affect
3073   downstream Pigweed projects.
3074
3075Highlights (Aug 24, 2024 to Sep 5, 2024):
3076
3077* **New backends**: :ref:`module-pw_async_fuchsia` (a ``pw_async``
3078  backend for Fuchsia that implements ``Task`` and ``FakeDispatcher``),
3079  :ref:`module-pw_log_fuchsia` (a ``pw_log`` backend for Fuchsia
3080  that uses the ``fuchsia.logger.LogSink`` FIDL API to send logs),
3081  :ref:`module-pw_random_fuchsia` (a ``pw_random`` backend for Fuchsia
3082  that implements :cpp:class:`pw::random::RandomGenerator`)
3083  and :ref:`module-pw_uart_mcuxpresso` (a ``pw_uart`` backend for
3084  NXP MCUXpresso devices).
3085* **New theme**: The underlying Sphinx theme powering ``pigweed.dev`` is now
3086  `PyData <https://pydata-sphinx-theme.readthedocs.io/en/stable/>`_. In
3087  addition to improving website usability, this theme should also reduce
3088  the ``pigweed.dev`` maintenance workload over time. See
3089  :ref:`seed-0130` for more information.
3090* **Arm Cortex-M55 support**: ``pw_toolchain`` and ``pw_system`` now
3091  support Arm Cortex-M55 cores.
3092* **Bazel cloud demo**: The new :ref:`Bazel cloud features
3093  <showcase-sense-tutorial-bazel_cloud>`
3094  page in the Sense tutorial shows you how to use BuildBuddy
3095  to share logs and speed up builds with remote caching.
3096
3097Modules
3098=======
3099
3100pw_async2
3101---------
3102* The new :cpp:class:`pw::async2::TimeProvider` class can be used to
3103  create timers in a dependency-injection-friendly way.
3104  Commit: `Add TimeProvider
3105  <https://pwrev.dev/232411>`__
3106
3107pw_async_fuchsia
3108----------------
3109* :ref:`module-pw_async_fuchsia` is a new ``pw_async`` backend for Fuchsia
3110  that implements ``Task`` and ``FakeDispatcher``.
3111  Commit: `Create pw_async Fuchsia backend
3112  <https://pwrev.dev/230896>`__
3113
3114pw_chrono
3115---------
3116* :cpp:class:`pw::chrono::VirtualClock` is a new virtual base class for
3117  timers that enables writing
3118  timing-sensitive code that can be tested using simulated clocks such as
3119  :cpp:class:`pw::chrono::SimulatedSystemClock`.
3120  Commit: `Add VirtualClock
3121  <https://pwrev.dev/233031>`__
3122
3123pw_cli
3124------
3125* The new :py:meth:`pw_cli.git_repo.GitRepo.commit_date()` method returns
3126  the datetime of a specified commit.
3127  Commit: `Add in option to retrieve commit date
3128  <https://pwrev.dev/216275>`__
3129
3130pw_digital_io_mcuxpresso
3131------------------------
3132* The GPIO clock is now enabled even when GPIO is disabled.
3133  Commit: `Enable gpio clock even when disabling gpio
3134  <https://pwrev.dev/232131>`__
3135  (issue `#356689514 <https://pwbug.dev/356689514>`__)
3136
3137pw_log_fuchsia
3138--------------
3139* :ref:`module-pw_log_fuchsia` is a new ``pw_log`` backend that uses the
3140  ``fuchsia.logger.LogSink`` FIDL API to send logs.
3141  Commit: `Create pw_log Fuchsia backend
3142  <https://pwrev.dev/231052>`__
3143
3144pw_log_rpc
3145----------
3146* ``pw_log_rpc.LogStreamHandler.listen_to_logs()`` was renamed to
3147  :py:meth:`pw_log_rpc.LogStreamHandler.start_logging()`.
3148  Commit: `Invoke pw.log.Logs.Listen() to restore prior behavior
3149  <https://pwrev.dev/233991>`__
3150  (issue `#364421706 <https://pwbug.dev/364421706>`__)
3151
3152pw_log_zephyr
3153-------------
3154* Use of shell ``printf`` macros within ``if`` blocks that don't use
3155  braces no longer causes compile errors.
3156  Commit: `Make shell printf macros safe for use in if/else blocks
3157  <https://pwrev.dev/232031>`__
3158
3159pw_package
3160----------
3161* ``picotool`` installation on macOS was fixed.
3162  Commit: `Fix pictotool install on mac
3163  <https://pwrev.dev/234238>`__
3164
3165pw_random_fuchsia
3166-----------------
3167* :ref:`module-pw_random_fuchsia` provides an implementation of
3168  :cpp:class:`pw::random::RandomGenerator` that uses Zircon.
3169  Commit: `Create Fuchsia backend for pw_random
3170  <https://pwrev.dev/230895>`__
3171
3172pw_rpc
3173------
3174* New documentation (:ref:`module-pw_rpc-guides-raw-fallback`) was added that
3175  explains how to define a raw method within a non-raw service.
3176  Commit: `Provide examples of raw methods in docs
3177  <https://pwrev.dev/232877>`__
3178* Many RPC-related classes were moved out of ``pw_hdlc`` and into
3179  ``pw_rpc`` or ``pw_stream``.
3180  Commit: `Relocate RPC classes from pw_hdlc
3181  <https://pwrev.dev/230172>`__
3182  (issues `#330177657 <https://pwbug.dev/330177657>`__,
3183  `#360178854 <https://pwbug.dev/360178854>`__)
3184
3185pw_spi_mcuxpresso
3186-----------------
3187* The new ``pw::spi::FifoErrorCheck`` enum lets you configure whether
3188  ``pw::spi::McuxpressoResponder`` instances should log FIFO errors.
3189  Commit: `Add check_fifo_error to responder config
3190  <https://pwrev.dev/232215>`__
3191
3192pw_stream_uart_linux
3193--------------------
3194* The new :cpp:struct:`pw::stream::UartStreamLinux::Config` struct lets
3195  you configure baud rate and control flow.
3196  Commit: `Add Config struct
3197  <https://pwrev.dev/233591>`__
3198  (issue `#331871421 <https://pwbug.dev/331871421>`__)
3199
3200pw_sync
3201-------
3202* :cpp:func:`pw::sync::InterruptSpinLock::try_lock` and similar functions
3203  have been annotated with ``[[nodiscard]]`` which means that ignoring
3204  their return values will result in compiler warnings.
3205  Commit: `[[nodiscard]] for try_lock() and similar functions
3206  <https://pwrev.dev/229311>`__
3207
3208pw_system
3209---------
3210* :ref:`module-pw_system` now supports Arm Cortex-M55 systems.
3211  Commit: `Support ARM Cortex M55 system
3212  <https://pwrev.dev/231632>`__
3213  (issue `#361691368 <https://pwbug.dev/361691368>`__)
3214
3215pw_thread
3216---------
3217* :cpp:class:`pw::thread::Options` has moved to its own header
3218  (``pw_thread/options.h``) to make it possible to work with the class
3219  without relying on the thread facade.
3220  Commit: `Move pw::thread::Options to its own header
3221  <https://pwrev.dev/232151>`__
3222
3223pw_tokenizer
3224------------
3225* In Python the detokenizer prefix is now set in the
3226  :py:class:`pw_tokenizer.detokenize.Detokenizer` constructor.
3227  Commit: `Set prefix in Detokenizer; fix typing issues
3228  <https://pwrev.dev/234311>`__
3229
3230pw_toolchain
3231------------
3232* Arm Cortex-M55 toolchain support was added.
3233  Commit: `Add ARM Cortex-M55 toolchain
3234  <https://pwrev.dev/231631>`__
3235  (issue `#361691368 <https://pwbug.dev/361691368>`__)
3236
3237pw_uart_mcuxpresso
3238------------------
3239* The new :ref:`module-pw_uart_mcuxpresso` module is a
3240  :ref:`module-pw_uart` backend for NXP MCUXpresso devices.
3241  Commit: `Introduce DMA UART backend for NXP devices
3242  <https://pwrev.dev/232831>`__
3243
3244Docs
3245====
3246* New documentation (:ref:`docs-pw-style-cpp-logging`) about logging best
3247  practices was added.
3248  Commit: `Add logging recommendations
3249  <https://pwrev.dev/210204>`__
3250* The new :ref:`Bazel cloud features <showcase-sense-tutorial-bazel_cloud>`
3251  page in the Sense tutorial shows you how to use BuildBuddy
3252  to share logs and speed up builds with remote caching.
3253  Commit: `Add cloud build section to Sense tutorial
3254  <https://pwrev.dev/233751>`__
3255  (issue `#363070027 <https://pwbug.dev/363070027>`__)
3256* :ref:`docs-contributing` now links to good first issues for people who
3257  want to contribute to upstream Pigweed.
3258  Commit: `Add link to good first issue list
3259  <https://pwrev.dev/233652>`__
3260* ``pigweed.dev/live`` now links to the Pigweed Live meeting notes.
3261  Commit: `Add shortlink for Pigweed Live notes
3262  <https://pwrev.dev/232032>`__
3263
3264Targets
3265=======
3266
3267RP2350
3268------
3269* RP2350 crash snapshots now show the correct architecture.
3270  Commit: `Fix architecture in crash snapshot
3271  <https://pwrev.dev/232231>`__
3272  (issue `#362506213 <https://pwbug.dev/362506213>`__)
3273
3274------------
3275Aug 23, 2024
3276------------
3277.. _Google Pigweed comes to our new RP2350: https://www.raspberrypi.com/news/google-pigweed-comes-to-our-new-rp2350/
3278
3279Highlights (Aug 8, 2024 to Aug 23, 2024):
3280
3281* **RP2350 Support**: Pigweed now supports the new Raspberry Pi RP2350 MCU.
3282  Check out `Google Pigweed comes to our new RP2350`_ on the Raspberry Pi
3283  blog for the full story and :ref:`showcase-sense` to try it out.
3284
3285Build systems
3286=============
3287
3288Bazel
3289-----
3290* `Add missing counting_semaphore and thread_yield backends
3291  <https://pwrev.dev/228392>`__
3292
3293Modules
3294=======
3295
3296pw_allocator
3297------------
3298* `Disable example spin_lock test on RP2
3299  <https://pwrev.dev/231251>`__
3300  (issues `#358411629 <https://pwbug.dev/358411629>`__,
3301  `#361354335 <https://pwbug.dev/361354335>`__)
3302
3303pw_async2
3304---------
3305The new ``pw::async2::MakeOnceSenderAndReceiver()`` function template makes it
3306easier to simultaneously create a sender and receiver for asynchronously
3307sending values. The new ``pw::async2::MakeOnceSenderAndReceiver()`` function
3308template works similarly but is used for references.
3309
3310* `Create OnceSender & OnceReceiver
3311  <https://pwrev.dev/226231>`__
3312  (issue `#350994818 <https://pwbug.dev/350994818>`__)
3313* `Remove accidental macro #undef
3314  <https://pwrev.dev/229275>`__
3315
3316pw_bloat
3317--------
3318The ``pw bloat`` CLI command now supports a ``--custom-config`` option to
3319specify a custom Bloaty config file so that non-memory regions can be
3320analyzed.
3321
3322* `Support custom bloaty configs in CLI command
3323  <https://pwrev.dev/216133>`__
3324
3325pw_bluetooth
3326------------
3327* `Create more emboss event definitions
3328  <https://pwrev.dev/231091>`__
3329  (issue `#42167863 <https://pwbug.dev/42167863>`__)
3330* `Add create connection cancel return
3331  <https://pwrev.dev/230251>`__
3332  (issue `#42167863 <https://pwbug.dev/42167863>`__)
3333* `Add LEReadSupportedStates emboss event
3334  <https://pwrev.dev/228961>`__
3335* `Add HCI Command OpCode definitions
3336  <https://pwrev.dev/228672>`__
3337* `Add more emboss definitions
3338  <https://pwrev.dev/228671>`__
3339  (issue `#42167863 <https://pwbug.dev/42167863>`__)
3340* `Make SupportedCommands emboss struct more ergonomic
3341  <https://pwrev.dev/228155>`__
3342
3343pw_bluetooth_proxy
3344------------------
3345* `Release H4 buff on error
3346  <https://pwrev.dev/229011>`__
3347
3348pw_bluetooth_sapphire
3349---------------------
3350* `Add common bt-host clang warnings
3351  <https://pwrev.dev/228651>`__
3352  (issue `#345799180 <https://pwbug.dev/345799180>`__)
3353* `Add new emboss compiler file ir_data_fields.py
3354  <https://pwrev.dev/228655>`__
3355  (issue `#358665524 <https://pwbug.dev/358665524>`__,
3356  `#335724776 <https://pwbug.dev/335724776>`__)
3357
3358pw_build
3359--------
3360The new ``glob_dirs()`` Starlark helper returns a list of directories matching
3361the provided glob pattern. The new ``match_dir()`` Starlark helper returns a
3362single directory that matches the provided glob pattern and fails if there's
3363more than one match.
3364
3365* `Add mod proc_macro to rust macro targets
3366  <https://pwrev.dev/230013>`__
3367* `Remove output_name attr in rust_library
3368  <https://pwrev.dev/230012>`__
3369* `Make pw_load_phase_test host only
3370  <https://pwrev.dev/230072>`__
3371* `Add glob_dirs() Starlark helper
3372  <https://pwrev.dev/228956>`__
3373
3374pw_channel
3375----------
3376* `Ensure that stream_channel_test resources live forever
3377  <https://pwrev.dev/228154>`__
3378  (issue `#358078118 <https://pwbug.dev/358078118>`__)
3379
3380pw_cpu_exception_cortex_m
3381-------------------------
3382* `Fix cpu exception handler on armv8m
3383  <https://pwrev.dev/231372>`__
3384  (issue `#323215726 <https://pwbug.dev/323215726>`__)
3385
3386pw_display
3387----------
3388The new :ref:`module-pw_display` experimental module provides graphic display
3389support and framebuffer management.
3390
3391* `Color library
3392  <https://pwrev.dev/229606>`__
3393  (issue `#359953386 <https://pwbug.dev/359953386>`__)
3394* `Create module directory
3395  <https://pwrev.dev/229712>`__
3396
3397pw_env_setup
3398------------
3399* `Get bazelisk instead of bazel
3400  <https://pwrev.dev/226376>`__
3401  (issue `#355438774 <https://pwbug.dev/355438774>`__)
3402
3403pw_grpc
3404-------
3405When a frame with a payload has a stream-reset error, the payload is now skipped.
3406
3407* `Improve logging when receiving unknown RPC
3408  <https://pwrev.dev/231011>`__
3409* `Skip HTTP2 frame payload for frames that result in stream reset
3410  <https://pwrev.dev/230951>`__
3411
3412pw_i2c_rp2040
3413-------------
3414The ``clock_frequency`` field in ``pw::i2c::Rp2040Initiator::Config`` has been
3415renamed to ``clock_frequency_hz``.
3416
3417* `Include label in clock_frequency
3418  <https://pwrev.dev/221412>`__
3419
3420pw_ide
3421------
3422``pw_ide`` now searches all parent directories for the presence of a
3423``pigweed.json`` file to determine the root directory. The workspace
3424root can be programmatically configured via the new
3425``pw_ide.settings.PigweedIdeSettings.workspace_root`` property. The
3426``pigweed.activateBazeliskInNewTerminals`` option in VS Code now defaults
3427to ``false``.
3428
3429* `Fix .pw_ide.yaml paths
3430  <https://pwrev.dev/230991>`__
3431* `Support different workspace root
3432  <https://pwrev.dev/217220>`__
3433* `Disable Bazelisk auto-activation by default
3434  <https://pwrev.dev/228493>`__
3435  (issue `#358384211 <https://pwbug.dev/358384211>`__)
3436
3437pw_kvs
3438------
3439References to ``pw::kvs::Key`` must be replaced with ``std::string_view``.
3440
3441* `Remove unnecessary Key alias and test
3442  <https://pwrev.dev/229976>`__
3443* `Pass EntryHeader by const reference
3444  <https://pwrev.dev/229727>`__
3445  (issue `#254601862 <https://pwbug.dev/254601862>`__)
3446* `Move inline variable definition to .cc file
3447  <https://pwrev.dev/228514>`__
3448  (issue `#357162923 <https://pwbug.dev/357162923>`__)
3449
3450pw_module
3451---------
3452* `Fix OWNERS file parsing
3453  <https://pwrev.dev/226177>`__
3454
3455pw_multibuf
3456-----------
3457The ``pw::multibuf::MultiBuf::Chunks()`` method and
3458``pw::multibuf::MultiBuf::ChunkIterable`` class have been removed; use the
3459new ``pw::multibuf::MultiBufChunks`` class instead.
3460
3461* `Restructure ChunkIterable
3462  <https://pwrev.dev/230892>`__
3463* `Comment updates for consistency
3464  <https://pwrev.dev/230891>`__
3465
3466pw_package
3467----------
3468* `Use bazel to build picotool package
3469  <https://pwrev.dev/229431>`__
3470
3471pw_preprocessor
3472---------------
3473The new ``PW_MODIFY_DIAGNOSTIC_CLANG`` define lets you handle Clang-only
3474warnings separately from other compilers.
3475
3476* `Test GCC/Clang diagnostic modification macros
3477  <https://pwrev.dev/231336>`__
3478* `Introduce PW_MODIFY_DIAGNOSTIC_CLANG
3479  <https://pwrev.dev/231332>`__
3480  (issue `#356935569 <https://pwbug.dev/356935569>`__)
3481* `Expand comment for PW_PACKED
3482  <https://pwrev.dev/226994>`__
3483
3484pw_rpc
3485------
3486Java client: The new ``PacketByteFactory`` Java class is a helper for creating
3487request and response packets during testing.
3488
3489Python client: The ``pw_rpc.console_tools.watchdog.Watchdog`` Python class has a
3490new ``stop()`` method to stop the watchdog.  The
3491``pw_rpc.callback_client.call.Call`` Python class now accepts a
3492``max_responses`` argument that lets you limit how many responses should be
3493received after a streaming RPC call.  The ``ignore_errors``,
3494``cancel_duplicate_calls``, and ``override_pending_options`` arguments
3495previously available in some Python client methods have been removed.
3496
3497TypeScript client: The ``invoke()`` method in the TypeScript client now accepts
3498a ``maxResponses`` argument which lets you limit how many responses to a
3499streaming RPC call should be stored.
3500
3501* `Avoid recompiling protos for every test
3502  <https://pwrev.dev/230135>`__
3503  (issue `#360184800 <https://pwbug.dev/360184800>`__)
3504* `Fix typing in unaryWait return value in TS client
3505  <https://pwrev.dev/231071>`__
3506* `Create PacketByteFactory
3507  <https://pwrev.dev/230011>`__
3508  (issue `#360174359 <https://pwbug.dev/360174359>`__)
3509* `Add stop method to Watchdog
3510  <https://pwrev.dev/230692>`__
3511  (issue `#350822543 <https://pwbug.dev/350822543>`__)
3512* `Limit maximum stored responses in TypeScript client
3513  <https://pwrev.dev/229975>`__
3514* `Add missing Bazel test rules
3515  <https://pwrev.dev/230691>`__
3516* `Restore RpcIds for testing; move packet encoding to packets.py
3517  <https://pwrev.dev/230471>`__
3518* `Limit maximum stored responses in Python client
3519  <https://pwrev.dev/229974>`__
3520  (issue `#262749163 <https://pwbug.dev/262749163>`__)
3521* `Remove deprecated / obsolete features
3522  <https://pwrev.dev/229908>`__
3523* `Fix open in callback_client
3524  <https://pwrev.dev/169174>`__
3525  (issue `#309159260 <https://pwbug.dev/309159260>`__)
3526* `Merge PendingRpc and RpcIds
3527  <https://pwrev.dev/228952>`__
3528* `Require an output function for channels
3529  <https://pwrev.dev/227855>`__
3530
3531pw_spi_linux
3532------------
3533* `Remove linkage specification from cli main
3534  <https://pwrev.dev/230291>`__
3535
3536pw_status
3537---------
3538The ``StatusWithSize::size_or()`` method has been removed.
3539
3540* `Convert StatusWithSize to Doxygen
3541  <https://pwrev.dev/229980>`__
3542* `Remove StatusWithSize::size_or()
3543  <https://pwrev.dev/229979>`__
3544
3545pw_stream
3546---------
3547* `Disable mpsc_stream_test for Pi Pico
3548  <https://pwrev.dev/231212>`__
3549  (issue `#361369435 <https://pwbug.dev/361369435>`__)
3550
3551pw_system
3552---------
3553The ``pw_system.device.Device`` class constructor now accepts an ``Iterable``
3554of proto libraries rather than a ``list``.
3555
3556* `Add type annotation to pw_system.device.Device() write arg
3557  <https://pwrev.dev/229653>`__
3558* `Update Device ctor to take Iterable of proto libraries
3559  <https://pwrev.dev/229811>`__
3560
3561pw_thread
3562---------
3563* `Disable test_thread_context_facade_test on Pi Pico
3564  <https://pwrev.dev/231291>`__
3565  (issue `#361369192 <https://pwbug.dev/361369192>`__)
3566
3567pw_tokenizer
3568------------
3569* `Remove unsupported C++11 and C++14 code
3570  <https://pwrev.dev/222432>`__
3571
3572pw_trace_tokenized
3573------------------
3574* `Fix TokenizedTracer initialization
3575  <https://pwrev.dev/230314>`__
3576  (issue `#357835484 <https://pwbug.dev/357835484>`__)
3577
3578pw_transfer
3579-----------
3580Transfer handler registration and unregistration functions now return a boolean
3581indicating success or failure. The C++ client now always includes a protocol
3582version in the final chunk.
3583
3584* `Add return values to handler registrations
3585  <https://pwrev.dev/230912>`__
3586* `Always set protocol version in final chunk
3587  <https://pwrev.dev/229289>`__
3588
3589pw_unit_test
3590------------
3591* `Delete unsupported C++14 compatibility code
3592  <https://pwrev.dev/229972>`__
3593* `Fix multi-line test macros
3594  <https://pwrev.dev/229314>`__
3595
3596Docs
3597====
3598* `Require unit tests to be in unnamed namespace
3599  <https://pwrev.dev/231211>`__
3600* `Add structured data to Kudzu blog post
3601  <https://pwrev.dev/230647>`__
3602  (issue `#360924425 <https://pwbug.dev/360924425>`__)
3603* `Fix Pigweed Live CTA link
3604  <https://pwrev.dev/230693>`__
3605  (issue `#357957451 <https://pwbug.dev/357957451>`__)
3606* `Replace 'bazel' with 'bazelisk'
3607  <https://pwrev.dev/226377>`__
3608* `Update Sense flashing instructions
3609  <https://pwrev.dev/229608>`__
3610* `Update RP2 family udev rules
3611  <https://pwrev.dev/228513>`__
3612  (issue `#355291899 <https://pwbug.dev/355291899>`__)
3613* `Update "Who's using Pigweed" section
3614  <https://pwrev.dev/228494>`__
3615* `Update Bazel quickstart mentions
3616  <https://pwrev.dev/228531>`__
3617* `Launch Sense
3618  <https://pwrev.dev/228431>`__
3619
3620Targets
3621=======
3622
3623rp2350
3624------
3625Pigweed now supports the new Raspberry Pi RP2350 MCU.
3626
3627* `Add support for RP2350
3628  <https://pwrev.dev/228326>`__
3629  (issue `#354942782 <https://pwbug.dev/354942782>`__)
3630
3631rp2040
3632------
3633* `Reset tty flags after successful flash on posix
3634  <https://pwrev.dev/229721>`__
3635* `Remove references to b/261603269
3636  <https://pwrev.dev/229397>`__
3637* `Add -fexceptions for the rp2040 PIO assembler
3638  <https://pwrev.dev/229531>`__
3639* `Get Pico SDK and Picotool from BCR
3640  <https://pwrev.dev/228327>`__
3641
3642Third-party software
3643====================
3644
3645Emboss
3646------
3647* `Remove -Wdeprecated-copy from public_config
3648  <https://pwrev.dev/228563>`__
3649  (issue `#345526399 <https://pwbug.dev/345526399>`__)
3650* `Update emboss to v2024.0809.170004
3651  <https://pwrev.dev/228562>`__
3652  (issue `#345526399 <https://pwbug.dev/345526399>`__)
3653
3654Fuchsia
3655-------
3656* `Update patch to ignore warnings in result.h
3657  <https://pwrev.dev/231253>`__
3658* `Copybara import
3659  <https://pwrev.dev/231293>`__
3660
3661Rolls
3662-----
3663* `fuchsia_infra: [roll] Roll fuchsia-infra-bazel-rules-bazel_sdk-ci
3664  <https://pwrev.dev/230635>`__
3665* `fuchsia_infra 54 commits
3666  <https://pwrev.dev/230634>`__
3667* `go
3668  <https://pwrev.dev/230631>`__
3669* `rust
3670  <https://pwrev.dev/230472>`__
3671* `go
3672  <https://pwrev.dev/228811>`__
3673* `gn
3674  <https://pwrev.dev/228731>`__
3675* `fuchsia_infra 27 commits
3676  <https://pwrev.dev/228712>`__
3677* `rust
3678  <https://pwrev.dev/228566>`__
3679
3680Miscellaneous
3681=============
3682* `Change typedef to using
3683  <https://pwrev.dev/230351>`__
3684* `Handle ignored status comments
3685  <https://pwrev.dev/229652>`__
3686  (issues `#357136096 <https://pwbug.dev/357136096>`__,
3687  `#357139112 <https://pwbug.dev/357139112>`__)
3688
3689Owners
3690------
3691* `Add davidroth@
3692  <https://pwrev.dev/230071>`__
3693
3694-----------
3695Aug 7, 2024
3696-----------
3697Highlights (Jul 26, 2024 to Aug 7, 2024):
3698
3699* **Tour of Pigweed**: The new :ref:`Tour of Pigweed <showcase-sense>`
3700  is a hands-on, guided walkthrough of many key Pigweed features working
3701  together in a medium-complexity application.
3702* **Easier pw_digital_io testing**: The new
3703  ``pw::digital_io::DigitalInOutMock`` class is a mock implementation of
3704  ``pw:digital_io::DigitalInOut`` that can be used for testing.
3705* **Code intelligence in VS Code**: The new
3706  :ref:`module-pw_ide-guide-vscode-code-intelligence` document provides
3707  guides on using the code intelligence features of the ``pw_ide``
3708  extension for VS Code.
3709
3710Build systems
3711=============
3712
3713Bazel
3714-----
3715* `Get picotool from the BCR
3716  <https://pwrev.dev/227838>`__
3717  (issue `#354270165 <https://pwbug.dev/354270165>`__)
3718* `Manage pw_ide deps via bzlmod
3719  <https://pwrev.dev/226733>`__
3720  (issue `#258836641 <https://pwbug.dev/258836641>`__)
3721* `Manage Java deps through bzlmod
3722  <https://pwrev.dev/226481>`__
3723  (issue `#258836641 <https://pwbug.dev/258836641>`__)
3724* `Provide symlink to clangd at root
3725  <https://pwrev.dev/226451>`__
3726  (issue `#355655415 <https://pwbug.dev/355655415>`__)
3727* `Partial revert of http://pwrev.dev/226007
3728  <https://pwrev.dev/226271>`__
3729  (issue `#352389854 <https://pwbug.dev/352389854>`__)
3730
3731Modules
3732=======
3733
3734pw_allocator
3735------------
3736* `Fix bucketed block corruption
3737  <https://pwrev.dev/227604>`__
3738  (issue `#345526413 <https://pwbug.dev/345526413>`__)
3739* `Add missing include
3740  <https://pwrev.dev/227174>`__
3741  (issue `#356667663 <https://pwbug.dev/356667663>`__)
3742
3743pw_bluetooth
3744------------
3745``ReadLocalSupportedCommandsCommandCompleteEvent`` now provides both a raw bytes
3746field (``supported_commands_bytes``) and a sub-struct (``supported_commands``)
3747for easier access to command bits. You can use either ``SupportedCommandsOctet``
3748or ``SupportedCommands`` to parse a saved ``uint8_t[64]``.
3749
3750* `Improve ergonomics of emboss SupportedCommands
3751  <https://pwrev.dev/227931>`__
3752* `Add more emboss definitions
3753  <https://pwrev.dev/227951>`__
3754  (issue `#42167863 <https://pwbug.dev/42167863>`__)
3755
3756pw_bluetooth_proxy
3757------------------
3758* `Release active connections once zero
3759  <https://pwrev.dev/226400>`__
3760* `Only log disconnect events for active connections
3761  <https://pwrev.dev/226393>`__
3762
3763pw_bluetooth_sapphire
3764---------------------
3765* `Handle switch warning with pigweed
3766  <https://pwrev.dev/227044>`__
3767  (issue `#355511476 <https://pwbug.dev/355511476>`__)
3768* `Handle switch warning with pigweed
3769  <https://pwrev.dev/227043>`__
3770  (issue `#355511476 <https://pwbug.dev/355511476>`__)
3771* `Handle switch warning with pigweed
3772  <https://pwrev.dev/227025>`__
3773  (issue `#355511476 <https://pwbug.dev/355511476>`__)
3774* `Write Variable PIN Type for Legacy Pairing
3775  <https://pwrev.dev/227042>`__
3776  (issues `#42173830 <https://pwbug.dev/42173830>`__,
3777  `# b/342151162 <https://pwbug.dev/ b/342151162>`__)
3778* `Add LegacyPairingState to BrEdrConnectionRequest
3779  <https://pwrev.dev/227041>`__
3780  (issue `#42173830 <https://pwbug.dev/42173830>`__)
3781* `Create and implement LegacyPairingState class
3782  <https://pwrev.dev/227023>`__
3783  (issues `#342150626 <https://pwbug.dev/342150626>`__,
3784  `#42173830 <https://pwbug.dev/42173830>`__)
3785* `Handle switch warning with pigweed
3786  <https://pwrev.dev/227040>`__
3787  (issue `#355511476 <https://pwbug.dev/355511476>`__)
3788* `Handle switch warning with pigweed
3789  <https://pwrev.dev/227039>`__
3790  (issue `#355511476 <https://pwbug.dev/355511476>`__)
3791* `Translate information & additional attributes
3792  <https://pwrev.dev/227038>`__
3793  (issue `#327758656 <https://pwbug.dev/327758656>`__)
3794* `Return registered services after bredr.Advertise
3795  <https://pwrev.dev/227022>`__
3796  (issue `#327758656 <https://pwbug.dev/327758656>`__)
3797* `Handle switch enum warning with pigweed
3798  <https://pwrev.dev/227037>`__
3799  (issue `#355511476 <https://pwbug.dev/355511476>`__)
3800* `Handle switch warning with pigweed
3801  <https://pwrev.dev/227021>`__
3802  (issue `#355511476 <https://pwbug.dev/355511476>`__)
3803* `Fix shadow variable warnings
3804  <https://pwrev.dev/227036>`__
3805  (issue `#355511476 <https://pwbug.dev/355511476>`__)
3806* `Add panic to EventTypeToString
3807  <https://pwrev.dev/227035>`__
3808  (issue `#356388419 <https://pwbug.dev/356388419>`__)
3809* `Switch over to pw::utf8
3810  <https://pwrev.dev/227020>`__
3811  (issue `#337305285 <https://pwbug.dev/337305285>`__)
3812* `Remove unnecessary cast qual pragma
3813  <https://pwrev.dev/227034>`__
3814  (issue `#355511476 <https://pwbug.dev/355511476>`__)
3815* `Fix statement expression extension warnings
3816  <https://pwrev.dev/227033>`__
3817  (issue `#355511476 <https://pwbug.dev/355511476>`__)
3818* `Fix variadic macro warnings
3819  <https://pwrev.dev/227019>`__
3820  (issue `#355511476 <https://pwbug.dev/355511476>`__)
3821* `Add SetupDataPath FIDL handler
3822  <https://pwrev.dev/227018>`__
3823  (issue `#311639690 <https://pwbug.dev/311639690>`__)
3824* `Create abstract base for IsoStream
3825  <https://pwrev.dev/227017>`__
3826* `Remove CommandPacketVariant
3827  <https://pwrev.dev/227032>`__
3828  (issue `#42167863 <https://pwbug.dev/42167863>`__)
3829* `Use emboss for setting ACL priority
3830  <https://pwrev.dev/227031>`__
3831  (issue `#42167863 <https://pwbug.dev/42167863>`__)
3832* `Add test for A2DP offloading
3833  <https://pwrev.dev/227014>`__
3834  (issue `#330921787 <https://pwbug.dev/330921787>`__)
3835* `Explicitly move WeakRef in GetWeakPtr
3836  <https://pwrev.dev/227013>`__
3837  (issue `#354026910 <https://pwbug.dev/354026910>`__)
3838* `Clean up some type sizes
3839  <https://pwrev.dev/227012>`__
3840  (issue `#354057871 <https://pwbug.dev/354057871>`__)
3841* `Use emboss for LELongTermKeyRequestReply
3842  <https://pwrev.dev/227011>`__
3843  (issue `#42167863 <https://pwbug.dev/42167863>`__)
3844* `Remove manufacturer list
3845  <https://pwrev.dev/226472>`__
3846
3847pw_build
3848--------
3849* `Fix configs in pw_rust_executable
3850  <https://pwrev.dev/212171>`__
3851  (issue `#343111481 <https://pwbug.dev/343111481>`__)
3852* `Auto disable project builder progress bars
3853  <https://pwrev.dev/226379>`__
3854
3855pw_chrono_stl
3856-------------
3857System clock and timer interfaces have been moved to separate directories so
3858that you can pick up the backend of one of these without bringing in the other.
3859This makes it possible to use a custom system timer with the STL system clock,
3860for example.
3861
3862* `Move system clock and timer into separate directories
3863  <https://pwrev.dev/225992>`__
3864
3865pw_clock_tree_mcuxpresso
3866------------------------
3867The new ``pw::clock_tree::ClockMcuxpressoClockIp`` class lets you manage
3868``clock_ip_name_t`` clocks with the clock tree to save power when
3869``FSL_SDK_DISABLE_DRIVE_CLOCK_CONTROL`` is set.
3870
3871* `Introduce ClockMcuxpressoClockIp
3872  <https://pwrev.dev/226069>`__
3873  (issue `#355486338 <https://pwbug.dev/355486338>`__)
3874
3875pw_console
3876----------
3877* `Additional UI and code themes
3878  <https://pwrev.dev/226720>`__
3879* `Bump version of console js, add titles to log panes
3880  <https://pwrev.dev/226831>`__
3881
3882pw_digital_io
3883-------------
3884The new ``pw::digital_io::DigitalInOutMock`` class is a mock implementation
3885of ``pw:digital_io::DigitalInOut`` that can be used for testing.
3886
3887* `Add Mock
3888  <https://pwrev.dev/227836>`__
3889
3890pw_digital_io_linux
3891-------------------
3892The default ``pw_log`` logging level changed from ``DEBUG`` to ``INFO``.
3893
3894* `Set log level to INFO
3895  <https://pwrev.dev/225912>`__
3896
3897pw_digital_io_rp2040
3898--------------------
3899* `Don't discard status returns
3900  <https://pwrev.dev/227712>`__
3901  (issue `#357090965 <https://pwbug.dev/357090965>`__)
3902
3903pw_env_setup
3904------------
3905* `Update rust thumbv7m target
3906  <https://pwrev.dev/226951>`__
3907* `Add rustc thumbv7m target
3908  <https://pwrev.dev/211991>`__
3909  (issue `#343111481 <https://pwbug.dev/343111481>`__)
3910
3911pw_hex_dump
3912-----------
3913* `Add rule for pw_hex_dump/log_bytes.h
3914  <https://pwrev.dev/227651>`__
3915  (issue `#357595992 <https://pwbug.dev/357595992>`__)
3916
3917pw_ide
3918------
3919The Pigweed extension for VS Code will now immediately update the code analysis
3920target if the ``pigweed.codeAnalysisTarget`` setting in ``settings.json`` is
3921changed. The new ``pigweed.activateBazeliskInNewTerminals`` setting lets you
3922specify whether the path to Bazelisk should be added when a VS Code terminal is
3923launched. The new :ref:`module-pw_ide-guide-vscode-code-intelligence` document
3924provides guides on using the VS Code extension's code intelligence features.
3925
3926* `VSC extension 1.3.2 release
3927  <https://pwrev.dev/225391>`__
3928* `Show progress bar on manual refreshes
3929  <https://pwrev.dev/227731>`__
3930* `Detect manual target change in settings
3931  <https://pwrev.dev/227606>`__
3932* `Much faster VSC config parsing
3933  <https://pwrev.dev/227605>`__
3934* `Automatically activate Bazelisk in new terminals
3935  <https://pwrev.dev/226382>`__
3936* `Use stable clangd path
3937  <https://pwrev.dev/226431>`__
3938  (issue `#355655415 <https://pwbug.dev/355655415>`__)
3939* `Add inactive source file decoration
3940  <https://pwrev.dev/225733>`__
3941* `VSC extension refactoring
3942  <https://pwrev.dev/226059>`__
3943
3944pw_multibuf
3945-----------
3946* `Add missing includes
3947  <https://pwrev.dev/227331>`__
3948  (issue `#356667663 <https://pwbug.dev/356667663>`__)
3949
3950pw_multisink
3951------------
3952The new ``pw::multisink::Drain::GetUnreadEntriesCount()`` method is a
3953thread-safe way to return the number of unread entries in a drain's sink.
3954
3955* `Interface to read entries count
3956  <https://pwrev.dev/226351>`__
3957  (issue `#355104976 <https://pwbug.dev/355104976>`__)
3958
3959pw_presubmit
3960------------
3961* `Fix incl-lang when not at repo root
3962  <https://pwrev.dev/227185>`__
3963* `Remove misc program
3964  <https://pwrev.dev/226995>`__
3965  (issue `#356888002 <https://pwbug.dev/356888002>`__)
3966* `Rename "misc" program to "sapphire"
3967  <https://pwrev.dev/226993>`__
3968  (issue `#356888002 <https://pwbug.dev/356888002>`__)
3969* `Add new presubmit steps
3970  <https://pwrev.dev/226712>`__
3971  (issue `#356619766 <https://pwbug.dev/356619766>`__)
3972* `Allow fxbug.dev and crbug.com TODOs
3973  <https://pwrev.dev/226474>`__
3974* `Expose name of Bazel executable
3975  <https://pwrev.dev/226378>`__
3976  (issue `#355438774 <https://pwbug.dev/355438774>`__)
3977
3978pw_router
3979---------
3980* `Add missing includes
3981  <https://pwrev.dev/227331>`__
3982  (issue `#356667663 <https://pwbug.dev/356667663>`__)
3983
3984pw_rpc
3985------
3986* `Fix TypeScript client streaming return type
3987  <https://pwrev.dev/226717>`__
3988* `Add yield mode constraint_setting
3989  <https://pwrev.dev/226551>`__
3990  (issue `#345199579 <https://pwbug.dev/345199579>`__)
3991
3992pw_rust
3993-------
3994The new ``pw_rust_USE_STD`` toolchain configuration option lets you control
3995whether the "std" feature should be used when building executables.
3996
3997* `Add no_std build to basic_executable
3998  <https://pwrev.dev/211993>`__
3999  (issue `#343111481 <https://pwbug.dev/343111481>`__)
4000* `Rename host_executable
4001  <https://pwrev.dev/211992>`__
4002  (issue `#343111481 <https://pwbug.dev/343111481>`__)
4003
4004pw_spi_mcuxpresso
4005-----------------
4006* `Add SPI_RxError() and SPI_TxError()
4007  <https://pwrev.dev/226992>`__
4008
4009pw_status
4010---------
4011``PW_STATUS_CFG_CHECK_IF_USED`` now defaults to ``true`` in Bazel projects,
4012meaning that ``pw::Status`` objects returned from function calls must be used or
4013else a compilation error is raised. See :ref:`module-pw_status-reference-unused`.
4014
4015* `In Bazel, make Status nodiscard
4016  <https://pwrev.dev/227411>`__
4017  (issue `#357090965 <https://pwbug.dev/357090965>`__)
4018* `Don't silently discard status returns
4019  <https://pwrev.dev/227277>`__
4020  (issue `#357090965 <https://pwbug.dev/357090965>`__)
4021
4022pw_symbolizer
4023-------------
4024* `Add missing runfiles dep
4025  <https://pwrev.dev/226719>`__
4026  (issue `#355527449 <https://pwbug.dev/355527449>`__)
4027* `Get llvm-symbolizer path from Bazel
4028  <https://pwrev.dev/226254>`__
4029  (issue `#355527449 <https://pwbug.dev/355527449>`__)
4030
4031pw_system
4032---------
4033The ``pw_system`` console now lets you control host log and device log levels
4034separately via the new ``--host-log-level`` and ``--device-log-level``
4035arguments. The new ``echo()``, ``reboot()``, and ``crash()`` methods of
4036``pw_system.device.Device`` make it easier to access these common
4037operations. Crash snapshots are now saved to ``/tmp`` (``C:\\TEMP`` on Windows)
4038by default. Crash detection logs are now printed across multiple lines to make
4039them easier to spot.
4040
4041* `Separate host and device console log levels
4042  <https://pwrev.dev/227599>`__
4043* `Don't use implementation_deps
4044  <https://pwrev.dev/226977>`__
4045  (issues `#304374970 <https://pwbug.dev/304374970>`__,
4046  `#356667663 <https://pwbug.dev/356667663>`__)
4047* `Add console device aliases for common RPCs
4048  <https://pwrev.dev/226476>`__
4049* `Save snapshots to /tmp
4050  <https://pwrev.dev/226392>`__
4051* `Make crash detection logs louder
4052  <https://pwrev.dev/226373>`__
4053
4054pw_tokenizer
4055------------
4056* `decode_optionally_tokenized without a Detokenizer
4057  <https://pwrev.dev/226727>`__
4058
4059pw_toolchain
4060------------
4061* `Clang support for Arm Cortex-M33
4062  <https://pwrev.dev/228391>`__
4063  (issue `#358108912 <https://pwbug.dev/358108912>`__)
4064* `Register Cortex-M7 toolchain
4065  <https://pwrev.dev/227598>`__
4066* `Use \`crate_name\` for GN rust targets
4067  <https://pwrev.dev/223391>`__
4068* `proc_macro GN cross compile
4069  <https://pwrev.dev/215011>`__
4070* `Rustc cross compile to qemu-clang
4071  <https://pwrev.dev/211994>`__
4072  (issue `#343111481 <https://pwbug.dev/343111481>`__)
4073* `Expose a symlink to clangd
4074  <https://pwrev.dev/226262>`__
4075  (issue `#355655415 <https://pwbug.dev/355655415>`__)
4076
4077pw_transfer
4078-----------
4079* `Add a delay after opening a stream to delay transfer start
4080  <https://pwrev.dev/225734>`__
4081  (issue `#355249134 <https://pwbug.dev/355249134>`__)
4082* `Use initial timeout when resending start chunks
4083  <https://pwrev.dev/226452>`__
4084
4085pw_web
4086------
4087The log viewer now defaults to using line wrapping in table cells. The new
4088``logViews`` property makes it easier to customize each individual log view.
4089The ``severity`` field for controlling what types of logs to display has
4090been renamed to ``level``.
4091
4092* `Add resize handler to message col
4093  <https://pwrev.dev/221433>`__
4094  (issue `#351901512 <https://pwbug.dev/351901512>`__)
4095* `Change word-wrap to default true and save to state
4096  <https://pwrev.dev/226730>`__
4097  (issue `#354283022 <https://pwbug.dev/354283022>`__)
4098* `NPM version bump to 0.0.22
4099  <https://pwrev.dev/226726>`__
4100* `Show REPL message at every run
4101  <https://pwrev.dev/226872>`__
4102* `NPM version bump to 0.0.21
4103  <https://pwrev.dev/226713>`__
4104* `Enable custom titles, log-view access
4105  <https://pwrev.dev/226771>`__
4106  (issue `#355272099 <https://pwbug.dev/355272099>`__)
4107* `Change severity to level
4108  <https://pwrev.dev/225573>`__
4109  (issue `#354282161 <https://pwbug.dev/354282161>`__)
4110* `Replace column menu with MWC components
4111  <https://pwrev.dev/226151>`__
4112  (issues `#354712931 <https://pwbug.dev/354712931>`__,
4113  `#342452087 <https://pwbug.dev/342452087>`__)
4114
4115Docs
4116====
4117The new :ref:`Tour of Pigweed <showcase-sense>` is a hands-on, guided
4118walkthrough of many key Pigweed features working together in a medium-complexity
4119application.
4120
4121* `Start Sense tutorial
4122  <https://pwrev.dev/220311>`__
4123* `Fix some bad links in the changelog
4124  <https://pwrev.dev/226811>`__
4125* `Update changelog
4126  <https://pwrev.dev/226251>`__
4127
4128Rolls
4129=====
4130* `gn
4131  <https://pwrev.dev/227612>`__
4132* `fuchsia_infra 119 commits
4133  <https://pwrev.dev/227476>`__
4134* `cmake
4135  <https://pwrev.dev/227289>`__
4136* `rust
4137  <https://pwrev.dev/227287>`__
4138* `Clang
4139  <https://pwrev.dev/226725>`__
4140  (issue `#356689444 <https://pwbug.dev/356689444>`__)
4141* `bazel_skylib
4142  <https://pwrev.dev/226979>`__
4143* `rust
4144  <https://pwrev.dev/226257>`__
4145
4146Third-party software
4147====================
4148
4149Emboss
4150------
4151* `Append public_deps in GN template
4152  <https://pwrev.dev/227062>`__
4153
4154ICU
4155---
4156* `Remove ICU
4157  <https://pwrev.dev/228234>`__
4158
4159STM32Cube
4160---------
4161* `bzlmod-friendly changes
4162  <https://pwrev.dev/226479>`__
4163  (issue `#258836641 <https://pwbug.dev/258836641>`__)
4164
4165Miscellaneous
4166-------------
4167* `Run 'pw format --fix'
4168  <https://pwrev.dev/227186>`__
4169
4170------------
4171Jul 25, 2024
4172------------
4173Highlights (Jul 12, 2024 to Jul 25, 2024):
4174
4175* **Extensive Bazel support in the Pigweed extension for VS Code**:
4176  See :ref:`docs-changelog-20240725-pw_ide` for the full story.
4177* **Bazel module support**: Upstream Pigweed is now usable as a `Bazel
4178  module <https://bazel.build/external/module>`_ dependency.
4179* **Trapping backend for pw_assert**: :ref:`module-pw_assert_trap` is a
4180  new backend for :ref:`module-pw_assert` that calls ``__builtin_trap()``
4181  when an assert is triggered.
4182* **Crash handling in async pw_system**: Crash snapshots can be downloaded
4183  from ``pw_console`` by calling ``device.get_crash_snapshots()`` in the
4184  REPL.
4185
4186Build systems
4187=============
4188
4189Bazel
4190-----
4191Toolchain registration moved from ``WORKSPACE`` to ``MODULE.bazel``, making
4192it possible for downstream projects to use upstream Pigweed's toolchains
4193directly. Pigweed is now usable as a Bazel module dependency. Pigweed now
4194provides an example ``.bazelrc`` at ``//pw_build/pigweed.bazelrc`` that
4195downstream users can copy into their own projects.
4196
4197* `Remove @pigweed from bzl files
4198  <https://pwrev.dev/226007>`__
4199  (issue `#352389854 <https://pwbug.dev/352389854>`__)
4200* `Remove stray @pigweed in load statement
4201  <https://pwrev.dev/226006>`__
4202  (issue `#352389854 <https://pwbug.dev/352389854>`__)
4203* `Move toolchain registration to MODULE.bazel
4204  <https://pwrev.dev/225471>`__
4205  (issue `#258836641 <https://pwbug.dev/258836641>`__)
4206* `Enable bzlmod
4207  <https://pwrev.dev/211362>`__
4208  (issue `#258836641 <https://pwbug.dev/258836641>`__)
4209* `Remove sanitizers from default program
4210  <https://pwrev.dev/223572>`__
4211  (issue `#301487567 <https://pwbug.dev/301487567>`__)
4212* `Modernize pip deps style (2)
4213  <https://pwrev.dev/224316>`__
4214* `Organize and document required flags
4215  <https://pwrev.dev/223817>`__
4216  (issue `#353750350 <https://pwbug.dev/353750350>`__)
4217* `Use Python toolchain in custom rules
4218  <https://pwrev.dev/224298>`__
4219  (issue `#258836641 <https://pwbug.dev/258836641>`__)
4220* `Use Python toolchain in custom rules
4221  <https://pwrev.dev/224272>`__
4222  (issue `#258836641 <https://pwbug.dev/258836641>`__)
4223* `Use Python toolchain in custom rules
4224  <https://pwrev.dev/224272>`__
4225  (issue `#258836641 <https://pwbug.dev/258836641>`__)
4226* `Modernize pip deps style
4227  <https://pwrev.dev/223871>`__
4228  (issue `#258836641 <https://pwbug.dev/258836641>`__)
4229* `Create separate "sanitizers" CI program
4230  <https://pwrev.dev/223595>`__
4231  (issue `#301487567 <https://pwbug.dev/301487567>`__)
4232* `Run under tsan, ubsan in presubmit
4233  <https://pwrev.dev/223631>`__
4234  (issue `#301487567 <https://pwbug.dev/301487567>`__)
4235* `Run tests with asan in CQ
4236  <https://pwrev.dev/222792>`__
4237  (issue `#301487567 <https://pwbug.dev/301487567>`__)
4238
4239Docs
4240====
4241The fonts on ``pigweed.dev`` have been updated.
4242
4243* `Prefer "change" to Google-specific "CL"
4244  <https://pwrev.dev/226004>`__
4245* `Minor changelog update
4246  <https://pwrev.dev/224271>`__
4247* `Update pigweed.dev fonts
4248  <https://pwrev.dev/223591>`__
4249  (issue `#353530954 <https://pwbug.dev/353530954>`__)
4250* `Minor updates
4251  <https://pwrev.dev/223571>`__
4252* `Update changelog
4253  <https://pwrev.dev/222831>`__
4254
4255Modules
4256=======
4257
4258pw_assert_trap
4259--------------
4260:ref:`module-pw_assert_trap` is a new backend for :ref:`module-pw_assert`
4261that calls ``__builtin_trap()`` when an assert is triggered.
4262
4263* `Add a new assert backend which traps on assert
4264  <https://pwrev.dev/220135>`__
4265  (issues `#351888988 <https://pwbug.dev/https://pwbug.dev/351888988>`__,
4266  `#351886597 <https://pwbug.dev/https://pwbug.dev/351886597>`__)
4267
4268pw_async2
4269---------
4270The new :cpp:class:`pw::async2::CoroOrElseTask` class lets you run a coroutine
4271in a task and invokes a handler function on error. The new
4272:cpp:func:`pw::async2::Task::IsRegistered` method checks if a task is
4273currently registered with a dispatcher. The new
4274:cpp:func:`pw::async2::Coro::Empty()` method creates an empty, invalid
4275coroutine object. The new :cpp:func:`pw::async2::Task::Deregister` method
4276unlinks a task from a dispatcher and any associated waker values.
4277
4278* `Fix minor doc issues
4279  <https://pwrev.dev/226111>`__
4280* `Add CoroOrElseTask
4281  <https://pwrev.dev/225778>`__
4282* `Add Task::IsRegistered
4283  <https://pwrev.dev/225995>`__
4284* `Add Coro::Empty
4285  <https://pwrev.dev/225993>`__
4286* `Add Task::Deregister
4287  <https://pwrev.dev/225775>`__
4288
4289pw_async2_epoll
4290---------------
4291* `Fix block on racing wakeups
4292  <https://pwrev.dev/224291>`__
4293
4294pw_bluetooth
4295------------
4296* `Generate emboss headers in Soong
4297  <https://pwrev.dev/225152>`__
4298  (issue `#352364622 <https://pwbug.dev/352364622>`__)
4299* `Add generic HCI command definition
4300  <https://pwrev.dev/224931>`__
4301  (issue `#42167863 <https://pwbug.dev/42167863>`__)
4302
4303pw_bluetooth_proxy
4304------------------
4305* `Create Soong library for pw_bluetooth_proxy
4306  <https://pwrev.dev/225153>`__
4307  (issue `#352393966 <https://pwbug.dev/352393966>`__)
4308* `Update emboss deps
4309  <https://pwrev.dev/224991>`__
4310* `Do not pass on NOCP events without credits
4311  <https://pwrev.dev/224434>`__
4312  (issue `#353546115 <https://pwbug.dev/353546115>`__)
4313* `Have functions handle passing on the packet
4314  <https://pwrev.dev/224433>`__
4315  (issue `#353546115 <https://pwbug.dev/353546115>`__)
4316* `Update tests to verify number of sent packets
4317  <https://pwrev.dev/224300>`__
4318* `Remove debugging log
4319  <https://pwrev.dev/224032>`__
4320  (issue `#353546115 <https://pwbug.dev/353546115>`__)
4321
4322pw_bluetooth_sapphire
4323---------------------
4324The latest ``pw_bluetooth_sapphire`` commits were brought
4325into Pigweed from the Fuchsia repository.
4326
4327* `Reduce scope of security_manager
4328  <https://pwrev.dev/225036>`__
4329  (issue `#337315598 <https://pwbug.dev/337315598>`__)
4330* `Cleanup BrEdrConnectionManager test file
4331  <https://pwrev.dev/225035>`__
4332* `Fix integer conversion warnings
4333  <https://pwrev.dev/225034>`__
4334  (issue `#354057871 <https://pwbug.dev/354057871>`__)
4335* `Cleanup WritePageScanType into shared test file
4336  <https://pwrev.dev/225033>`__
4337* `Add missing optional include
4338  <https://pwrev.dev/225051>`__
4339  (issue `#313665184 <https://pwbug.dev/313665184>`__)
4340* `Remove unused method
4341  <https://pwrev.dev/224043>`__
4342  (issue `#42167863 <https://pwbug.dev/42167863>`__)
4343* `Remove variant from LE SendCommands
4344  <https://pwrev.dev/224042>`__
4345  (issue `#42167863 <https://pwbug.dev/42167863>`__)
4346* `Remove CommandPacketVariant
4347  <https://pwrev.dev/224041>`__
4348  (issue `#42167863 <https://pwbug.dev/42167863>`__)
4349* `Remove variant from QueueCommand
4350  <https://pwrev.dev/224040>`__
4351  (issue `#42167863 <https://pwbug.dev/42167863>`__)
4352* `Remove variant from QueueLeAsyncCommand
4353  <https://pwrev.dev/224112>`__
4354  (issue `#42167863 <https://pwbug.dev/42167863>`__)
4355* `Create IsoDataChannel
4356  <https://pwrev.dev/224039>`__
4357  (issue `#311639040 <https://pwbug.dev/311639040>`__)
4358* `Check legacy adv for rand addr in FakeController
4359  <https://pwrev.dev/224038>`__
4360  (issue `#42161900 <https://pwbug.dev/42161900>`__)
4361* `Use platform-independent format strings
4362  <https://pwrev.dev/224096>`__
4363  (issue `#313665184 <https://pwbug.dev/313665184>`__)
4364* `Processing of CIS Established event
4365  <https://pwrev.dev/224037>`__
4366  (issue `#311639432 <https://pwbug.dev/311639432>`__)
4367* `Use pw_bytes for endianness conversions
4368  <https://pwrev.dev/224036>`__
4369  (issue `#313665184 <https://pwbug.dev/313665184>`__)
4370* `Cleanup WritePageScanActivity
4371  <https://pwrev.dev/224095>`__
4372* `Cleanup into shared test file
4373  <https://pwrev.dev/224035>`__
4374* `Cleanup WriteLocalNameResponse to shared file
4375  <https://pwrev.dev/224094>`__
4376* `Fix camel case for CIS acronym
4377  <https://pwrev.dev/224034>`__
4378* `Cleanup Inquiry command packets into shared file
4379  <https://pwrev.dev/224033>`__
4380* `Implement AcceptCis()
4381  <https://pwrev.dev/224093>`__
4382  (issue `#311639432 <https://pwbug.dev/311639432>`__)
4383* `Use pw_bytes for endianness conversions
4384  <https://pwrev.dev/221311>`__
4385  (issue `#313665184 <https://pwbug.dev/313665184>`__)
4386* `Use pw_bytes for endianness conversions
4387  <https://pwrev.dev/221250>`__
4388  (issue `#313665184 <https://pwbug.dev/313665184>`__)
4389* `Reorganize test_packets.h/.cc files
4390  <https://pwrev.dev/221249>`__
4391* `Cleanup WriteInquiryScanActivity packets
4392  <https://pwrev.dev/221266>`__
4393* `Use pw_bytes for endianness conversions
4394  <https://pwrev.dev/221265>`__
4395  (issue `#313665184 <https://pwbug.dev/313665184>`__)
4396* `Use pw_bytes for endianness conversions
4397  <https://pwrev.dev/221264>`__
4398  (issue `#313665184 <https://pwbug.dev/313665184>`__)
4399* `Use pw_bytes for endianness conversions
4400  <https://pwrev.dev/221248>`__
4401  (issue `#313665184 <https://pwbug.dev/313665184>`__)
4402* `Remove unneeded #include
4403  <https://pwrev.dev/221262>`__
4404  (issue `#313665184 <https://pwbug.dev/313665184>`__)
4405* `Use pw_bytes for endianness conversions
4406  <https://pwrev.dev/221261>`__
4407  (issue `#313665184 <https://pwbug.dev/313665184>`__)
4408* `Use pw_bytes for endianness conversions
4409  <https://pwrev.dev/221247>`__
4410  (issue `#313665184 <https://pwbug.dev/313665184>`__)
4411* `Use pw_bytes for endianness conversions
4412  <https://pwrev.dev/221246>`__
4413  (issue `#313665184 <https://pwbug.dev/313665184>`__)
4414* `Use pw_bytes for endianness conversions
4415  <https://pwrev.dev/221245>`__
4416  (issue `#313665184 <https://pwbug.dev/313665184>`__)
4417* `Rename link_initiated to outgoing_connection
4418  <https://pwrev.dev/221244>`__
4419* `Cleanup WriteScanEnable packets into shared file
4420  <https://pwrev.dev/221243>`__
4421* `Cleanup ReadScanEnable packets into shared file
4422  <https://pwrev.dev/221260>`__
4423* `Remove alias for BrEdrConnectionRequest
4424  <https://pwrev.dev/221242>`__
4425* `BrEdrConnectionRequest create HCI connection req
4426  <https://pwrev.dev/221241>`__
4427* `Add connection role to fake controller
4428  <https://pwrev.dev/221258>`__
4429  (issue `#311639432 <https://pwbug.dev/311639432>`__)
4430* `Remove double std::move in PairingStateManager
4431  <https://pwrev.dev/221238>`__
4432* `Fix BrEdrDynamicChannel crash
4433  <https://pwrev.dev/221257>`__
4434  (issue `#42076625 <https://pwbug.dev/42076625>`__)
4435* `Cleanup BrEdrConnectionRequest and Manager
4436  <https://pwrev.dev/221237>`__
4437* `Implement IsoStreamServer
4438  <https://pwrev.dev/221256>`__
4439  (issue `#311639275 <https://pwbug.dev/311639275>`__)
4440* `Modernize fuchsia.hardware.bluetooth.Peer API
4441  <https://pwrev.dev/221255>`__
4442  (issue `#330591131 <https://pwbug.dev/330591131>`__)
4443* `Rename to secure_simple_pairing_state
4444  <https://pwrev.dev/221236>`__
4445  (issue `#342150626 <https://pwbug.dev/342150626>`__)
4446* `Use weak hci::BrEdrConnection pointer
4447  <https://pwrev.dev/221253>`__
4448* `Create and use PairingStateManager class
4449  <https://pwrev.dev/221252>`__
4450  (issues `#342150626 <https://pwbug.dev/342150626>`__,
4451  `#42173830 <https://pwbug.dev/42173830>`__)
4452* `Implement GetCodecLocalDelayRange
4453  <https://pwrev.dev/221251>`__
4454  (issue `#311639690 <https://pwbug.dev/311639690>`__)
4455* `Add Bazel rules for FIDL layer
4456  <https://pwrev.dev/221190>`__
4457  (issue `#324105856 <https://pwbug.dev/324105856>`__)
4458* `Refactor ScoConnection
4459  <https://pwrev.dev/221189>`__
4460  (issue `#330590954 <https://pwbug.dev/330590954>`__)
4461* `Fix max connection event length value
4462  <https://pwrev.dev/221188>`__
4463  (issue `#323255182 <https://pwbug.dev/323255182>`__)
4464* `Add AdvertisingData.ToString
4465  <https://pwrev.dev/221187>`__
4466  (issue `#42157647 <https://pwbug.dev/42157647>`__)
4467* `Make UUID string parsing optional
4468  <https://pwrev.dev/221234>`__
4469  (issue `#339726884 <https://pwbug.dev/339726884>`__)
4470* `Add Adapter::GetSupportedDelayRange
4471  <https://pwrev.dev/221233>`__
4472  (issue `#311639690 <https://pwbug.dev/311639690>`__)
4473* `Clean up legacy advertising report parsing API
4474  <https://pwrev.dev/221185>`__
4475  (issue `#308500308 <https://pwbug.dev/308500308>`__)
4476* `Add missing climits include
4477  <https://pwrev.dev/221183>`__
4478  (issue `#338408169 <https://pwbug.dev/338408169>`__)
4479* `Add Emboss support to SendCommand completion
4480  <https://pwrev.dev/221182>`__
4481  (issue `#311639690 <https://pwbug.dev/311639690>`__)
4482* `Improve naming of android namespace aliases
4483  <https://pwrev.dev/221232>`__
4484  (issue `#335491380 <https://pwbug.dev/335491380>`__)
4485* `Migrate emboss aliases to new names
4486  <https://pwrev.dev/221181>`__
4487  (issue `#338068316 <https://pwbug.dev/338068316>`__)
4488* `Add tests for LE Read Max. Adv. Data Length
4489  <https://pwrev.dev/221180>`__
4490  (issue `#338058140 <https://pwbug.dev/338058140>`__)
4491* `Ensure command is supported before issuing it
4492  <https://pwrev.dev/221178>`__
4493  (issue `#338058140 <https://pwbug.dev/338058140>`__)
4494* `Use duration_cast for constants
4495  <https://pwrev.dev/221029>`__
4496  (issue `#337928450 <https://pwbug.dev/337928450>`__)
4497* `Implement extended adv. pdus with fragmentation
4498  <https://pwrev.dev/221177>`__
4499  (issue `#312898345 <https://pwbug.dev/312898345>`__,
4500  `#309013696 <https://pwbug.dev/309013696>`__)
4501* `Use \`ull\` constants for enums
4502  <https://pwrev.dev/221028>`__
4503  (issue `#337928450 <https://pwbug.dev/337928450>`__)
4504* `Update semantics of \`bredr.Advertise\`
4505  <https://pwrev.dev/221176>`__
4506  (issues `#330590954 <https://pwbug.dev/330590954>`__,
4507  `#327758656 <https://pwbug.dev/327758656>`__)
4508* `Add the credit-based flow control RxEngine
4509  <https://pwrev.dev/221175>`__
4510* `Migrate LEAdvertisingReportSubevent to Emboss
4511  <https://pwrev.dev/221174>`__
4512  (issue `#86811 <https://pwbug.dev/86811>`__)
4513* `Lenient LEGetVendorCapabilitiesCommandComplete
4514  <https://pwrev.dev/221027>`__
4515  (issues `#337947318 <https://pwbug.dev/337947318>`__,
4516  `#332924521 <https://pwbug.dev/332924521>`__,
4517  `#332924195 <https://pwbug.dev/332924195>`__)
4518* `Migrate FIDL to bt::testing::TestLoopFixture
4519  <https://pwrev.dev/221172>`__
4520  (issue `#324105856 <https://pwbug.dev/324105856>`__)
4521* `Fix all available lint errors
4522  <https://pwrev.dev/221171>`__
4523* `Move LinkKey simple constructors to the h file
4524  <https://pwrev.dev/221025>`__
4525* `Add operator!= for LinkKey
4526  <https://pwrev.dev/221049>`__
4527* `Add extra diagnostics
4528  <https://pwrev.dev/221048>`__
4529* `Improve management of advertising modes
4530  <https://pwrev.dev/221045>`__
4531  (issue `#309013696 <https://pwbug.dev/309013696>`__)
4532* `Add Bazel rules for socket library
4533  <https://pwrev.dev/221024>`__
4534  (issue `#324105856 <https://pwbug.dev/324105856>`__)
4535* `Update LowEnergyAdvertiser to use std::vector
4536  <https://pwrev.dev/221023>`__
4537  (issue `#312898345 <https://pwbug.dev/312898345>`__,
4538  `#309013696 <https://pwbug.dev/309013696>`__)
4539* `Add more values to LEEventMask
4540  <https://pwrev.dev/221022>`__
4541* `Pass hci::AdvertisingIntervalRange as const
4542  <https://pwrev.dev/221044>`__
4543* `Shorten pw::bluetooth::emboss to pwemb
4544  <https://pwrev.dev/221021>`__
4545* `Pass extended_pdu booleans through the stack
4546  <https://pwrev.dev/221043>`__
4547  (issue `#312898345 <https://pwbug.dev/312898345>`__,
4548  `#309013696 <https://pwbug.dev/309013696>`__)
4549* `Update AdvertisingHandleMap for extended PDUs
4550  <https://pwrev.dev/221020>`__
4551  (issue `#312898345 <https://pwbug.dev/312898345>`__,
4552  `#309013696 <https://pwbug.dev/309013696>`__)
4553* `Update missing header
4554  <https://pwrev.dev/221019>`__
4555  (issue `#331673100 <https://pwbug.dev/331673100>`__)
4556* `Add the credit-based flow control TxEngine
4557  <https://pwrev.dev/221017>`__
4558* `Prevent protected member access in TxEngine
4559  <https://pwrev.dev/221016>`__
4560* `Add Bazel tests
4561  <https://pwrev.dev/221015>`__
4562* `Fix conversions from iterators to raw pointers
4563  <https://pwrev.dev/221014>`__
4564  (issue `#328282937 <https://pwbug.dev/328282937>`__)
4565* `Add bt-host Bazel tests
4566  <https://pwrev.dev/221042>`__
4567  (issue `#324105856 <https://pwbug.dev/324105856>`__)
4568* `Low energy advertiser general cleanup
4569  <https://pwrev.dev/221041>`__
4570* `Use using aliases for Emboss type references
4571  <https://pwrev.dev/221012>`__
4572* `Add Bazel build files
4573  <https://pwrev.dev/221036>`__
4574  (issue `#324105856 <https://pwbug.dev/324105856>`__)
4575
4576pw_build
4577--------
4578``pw_py_binary`` is a new wrapper for ``py_binary`` that provides some
4579defaults, such as marking all Python binaries as incompatible with MCUs.
4580
4581* `Introduce pw_py_binary
4582  <https://pwrev.dev/224296>`__
4583  (issue `#258836641 <https://pwbug.dev/258836641>`__)
4584* `Use incompatible_with_mcu in pw_py_test
4585  <https://pwrev.dev/224294>`__
4586
4587pw_channel
4588----------
4589The new :cpp:class:`pw::channel::StreamChannel` adapter makes it easier for
4590a channel to interact with an underlying reader and writer stream.
4591
4592* `Add StreamChannel adapter
4593  <https://pwrev.dev/225651>`__
4594
4595pw_chrono_freertos
4596------------------
4597* `Work around no std::unique_lock in baremetal libc++
4598  <https://pwrev.dev/223636>`__
4599  (issue `#353601672 <https://pwbug.dev/353601672>`__)
4600
4601pw_chrono_stl
4602-------------
4603* `Consolidate SystemTimer into a single thread
4604  <https://pwrev.dev/224295>`__
4605
4606pw_console
4607----------
4608Typing out RPCs to invoke from the web console REPL should now autocomplete
4609as expected. The web console log viewer now has a default config, defined
4610at ``//pw_console/py/pw_console/html/defaultconfig.json``. A new boolean
4611config option, ``recolor_log_lines_to_match_level``, has been added to
4612allow users to control whether log messages should be restyled to match
4613their severity level.
4614
4615* `Fix RPC autocompletion in web kernel
4616  <https://pwrev.dev/225935>`__
4617* `Set a default config for web console's log viewer
4618  <https://pwrev.dev/225751>`__
4619* `Pass rpc completions to web_kernel
4620  <https://pwrev.dev/224311>`__
4621* `Add config option for log message recoloring
4622  <https://pwrev.dev/224475>`__
4623* `Default WebHandler.kernel_params to an empty dictionary
4624  <https://pwrev.dev/223932>`__
4625* `Handle web logging in a separate thread
4626  <https://pwrev.dev/223691>`__
4627* `Cleanup web kernel on page close
4628  <https://pwrev.dev/223178>`__
4629* `Replace placeholder page with real web console
4630  <https://pwrev.dev/223155>`__
4631
4632pw_cpu_exception_cortex_m
4633-------------------------
4634The new ``PW_CPU_EXCEPTION_CORTEX_M_CRASH_ANALYSIS_INCLUDE_PC_LR``
4635option lets you control whether PC and LR register values are included
4636in the ``AnalyzeCpuStateAndCrash()`` analysis.
4637
4638* `Make PC LR optional
4639  <https://pwrev.dev/221731>`__
4640* `Fix assembly
4641  <https://pwrev.dev/223131>`__
4642  (issue `#261603269 <https://pwbug.dev/261603269>`__)
4643* `Temporarily disable tests on Cortex-M33
4644  <https://pwrev.dev/223594>`__
4645  (issues `#353533678 <https://pwbug.dev/353533678>`__,
4646  `#323215726 <https://pwbug.dev/323215726>`__)
4647
4648pw_crypto
4649---------
4650* `Don't build micro-ecc
4651  <https://pwrev.dev/223152>`__
4652  (issue `#261603269 <https://pwbug.dev/261603269>`__)
4653
4654pw_env_setup
4655------------
4656* `Add luci-cv to environment
4657  <https://pwrev.dev/222811>`__
4658
4659pw_grpc
4660-------
4661* `Fix shadowed variable warning
4662  <https://pwrev.dev/225931>`__
4663
4664.. _docs-changelog-20240725-pw_ide:
4665
4666pw_ide
4667------
4668General updates: ``pw_ide`` now detects Bazel projects based on the presence
4669of ``MODULE.bazel`` files. The :ref:`module-pw_ide` docs have been revamped.
4670Shared VS Code settings can now be stored in ``.vscode/settings.shared.json``.
4671The extension no longer attempts to infer the working directory if a project
4672root isn't explicitly provided; instead it prompts users to manually specify
4673the project root. The VS Code extension now has better support for Fish
4674terminals.
4675
4676VS Code extension updates related to code intelligence in Bazel-based projects:
4677The new ``Pigweed: Select Code Analysis Target`` command controls which Bazel
4678target in your project to use for code intelligence. The new ``Pigweed: Refresh
4679Compile Commands`` command lets you manually refresh code intelligence data.
4680There's also a ``Pigweed: Refresh Compile Commands and Select Code Analysis
4681Target`` that combines these two steps. In the VS Code status bar there's a new
4682icon to indicate whether ``clangd`` code intelligence is on or off. Code
4683intelligence data compilation output is now streamed so that you can monitor
4684the progress of the tool in real-time. The easiest way to access these logs is
4685by running the new ``Pigweed: Open Output Panel`` command. The extension now
4686supports a ``.clangd.shared`` file that can be used to control project-wide
4687``clangd`` settings.
4688
4689VS Code extension updates related to other Bazel tools: The extension now
4690bundles Bazelisk and Buildifier. These bundled versions get updated when the
4691extension itself updates. The extension recommends users to use these bundled
4692versions by default. You can use the new ``Activate Bazelisk in Terminal``
4693command to manually specify which Bazelisk version to use.
4694
4695* `Support bzlmod projects
4696  <https://pwrev.dev/225913>`__
4697* `Block on spawned refresh process
4698  <https://pwrev.dev/225731>`__
4699* `Status bar item for inactive file disabling
4700  <https://pwrev.dev/225392>`__
4701* `Support disabling clangd for inactive files
4702  <https://pwrev.dev/224893>`__
4703* `Update vendored tools on extension update
4704  <https://pwrev.dev/225934>`__
4705* `Use vendored Bazelisk in recommended config
4706  <https://pwrev.dev/225933>`__
4707* `Improve VSC settings interface
4708  <https://pwrev.dev/225932>`__
4709* `Add shared settings management
4710  <https://pwrev.dev/224573>`__
4711* `Associate target groups with active files
4712  <https://pwrev.dev/222735>`__
4713* `Don't unnecessarily infer working dir
4714  <https://pwrev.dev/224572>`__
4715* `VSC extension 1.1.1 release
4716  <https://pwrev.dev/224897>`__
4717* `Add missing command stubs
4718  <https://pwrev.dev/224892>`__
4719* `Stream refresh compile commands output
4720  <https://pwrev.dev/224313>`__
4721* `Update dev build configs
4722  <https://pwrev.dev/224312>`__
4723* `Add fish to Bazelisk+VSC terminal
4724  <https://pwrev.dev/224292>`__
4725* `VSC extension 1.1.0 release
4726  <https://pwrev.dev/224171>`__
4727* `Patch Bazelisk into VSC terminal
4728  <https://pwrev.dev/223823>`__
4729* `VSC extension 1.0.0 release
4730  <https://pwrev.dev/223911>`__
4731* `Revise docs
4732  <https://pwrev.dev/223157>`__
4733* `Update VSC extension packaging
4734  <https://pwrev.dev/223634>`__
4735* `Add proto extension as dependency
4736  <https://pwrev.dev/223156>`__
4737* `Fix VSC troubleshooting links
4738  <https://pwrev.dev/223576>`__
4739* `Update compile commands tool version
4740  <https://pwrev.dev/222575>`__
4741* `Don't show root comp DB dir as target
4742  <https://pwrev.dev/223633>`__
4743* `VSC status bar item for target selection
4744  <https://pwrev.dev/220134>`__
4745* `Add IDE support refresh manager
4746  <https://pwrev.dev/219973>`__
4747* `Integrate Bazelisk in VSC
4748  <https://pwrev.dev/219971>`__
4749* `Bazel comp DB management in VSC
4750  <https://pwrev.dev/218832>`__
4751* `VSC/JS project management
4752  <https://pwrev.dev/222734>`__
4753* `Create VSC settings interface
4754  <https://pwrev.dev/222733>`__
4755* `Use VSC output panel for logging
4756  <https://pwrev.dev/222732>`__
4757* `VSC extension cleanup
4758  <https://pwrev.dev/222731>`__
4759
4760pw_kvs
4761------
4762* `Missing <string> includes
4763  <https://pwrev.dev/223352>`__
4764  (issue `#298822102 <https://pwbug.dev/298822102>`__)
4765* `Update bazel config
4766  <https://pwrev.dev/223171>`__
4767
4768pw_libcxx
4769---------
4770``pw_libcxx`` now has support for the ``new`` operator.
4771
4772* `Actually implement operator delete
4773  <https://pwrev.dev/223692>`__
4774* `Add operator new
4775  <https://pwrev.dev/223632>`__
4776
4777pw_log
4778------
4779* `Log decoder timestamp cleanup
4780  <https://pwrev.dev/223271>`__
4781* `Fix log_decoder timestamp formatting
4782  <https://pwrev.dev/222771>`__
4783  (issue `#351905996 <https://pwbug.dev/351905996>`__)
4784
4785pw_multibuf
4786-----------
4787* `Add more context on chunk regions
4788  <https://pwrev.dev/222431>`__
4789
4790pw_presubmit
4791------------
4792``pw_presubmit.inclusive_language.check_file`` now accepts an optional
4793``check_path`` argument which controls whether to check the path for
4794non-inclusive language.
4795
4796* `Add attributes to docstring
4797  <https://pwrev.dev/223095>`__
4798* `Allow disabling checks in unit tests
4799  <https://pwrev.dev/223577>`__
4800  (issue `#352515663 <https://pwbug.dev/352515663>`__)
4801* `No copyright check in .vscodeignore
4802  <https://pwrev.dev/223575>`__
4803* `Skip commit message check for merges
4804  <https://pwrev.dev/223574>`__
4805* `Add test for inclusive language check
4806  <https://pwrev.dev/222311>`__
4807  (issue `#352515663 <https://pwbug.dev/352515663>`__)
4808
4809pw_result
4810---------
4811* `Fix docs.rst example
4812  <https://pwrev.dev/223251>`__
4813* `Add missing header
4814  <https://pwrev.dev/223176>`__
4815  (issue `#261603269 <https://pwbug.dev/261603269>`__)
4816* `Missing <string> includes
4817  <https://pwrev.dev/223352>`__
4818  (issue `#298822102 <https://pwbug.dev/298822102>`__)
4819
4820pw_rpc
4821------
4822Soong proto building is now more flexible; genrules can now have protos from
4823different sources. ``.option`` files can now be used in Soong genrules sources.
4824
4825* `Build proto path arg list for Soong
4826  <https://pwrev.dev/225031>`__
4827* `Pass .proto files to compiler in Soong
4828  <https://pwrev.dev/222737>`__
4829
4830pw_rpc_transport
4831----------------
4832* `Don't write empty header in StreamRpcFrameSender
4833  <https://pwrev.dev/220211>`__
4834
4835pw_sensor
4836---------
4837* `Add units to sensor::channels final output
4838  <https://pwrev.dev/224711>`__
4839  (issue `#293466822 <https://pwbug.dev/293466822>`__)
4840* `Implement attributes, channels, triggers, and units
4841  <https://pwrev.dev/204199>`__
4842  (issue `#293466822 <https://pwbug.dev/293466822>`__)
4843
4844pw_stream
4845---------
4846* `Update bazel config
4847  <https://pwrev.dev/223171>`__
4848
4849pw_stream_uart_mcuxpresso
4850-------------------------
4851* `Check init state in Deinit()
4852  <https://pwrev.dev/224031>`__
4853
4854pw_string
4855---------
4856The new :cpp:func:`pw::utf8::ReadCodePoint`,
4857:cpp:func:`pw::utf8::EncodeCodePoint`, and
4858:cpp:func:`pw::utf8::WriteCodePoint` methods provide basic UTF-8 decoding
4859and encoding.
4860
4861* `Add utf_codecs
4862  <https://pwrev.dev/222738>`__
4863  (issue `#337305285 <https://pwbug.dev/337305285>`__)
4864* `Disable wchar test for libcpp
4865  <https://pwrev.dev/223581>`__
4866  (issue `#353604434 <https://pwbug.dev/353604434>`__)
4867
4868pw_sync
4869-------
4870The condition variable interface has been deprecated. See
4871:ref:`module-pw_sync-condition-variables`.
4872
4873* `Document that CV should not be used
4874  <https://pwrev.dev/162771>`__
4875  (issue `#294395229 <https://pwbug.dev/294395229>`__)
4876
4877pw_system
4878---------
4879Async ``pw_system`` now supports a crash handling service. When a crash
4880snapshot is available, ``pw_system`` now logs instructions on how to download
4881it. The ``pw_system`` console API now accepts an optional
4882``device_connection`` object, allowing for more flexible connection
4883management. Device class creation has been refactored to make it easier for
4884Python scripts to setup connections to devices in the same way that the
4885``pw_system`` console does. As part of this refactor the ``--output``
4886and ``--proto-globs`` flags were removed from the ``pw_system`` console.
4887
4888* `Enable crash handler in async system
4889  <https://pwrev.dev/225911>`__
4890* `Improve message when crash snapshot exists
4891  <https://pwrev.dev/225851>`__
4892  (issue `#354767156 <https://pwbug.dev/354767156>`__)
4893* `Add crash handling and device service
4894  <https://pwrev.dev/224299>`__
4895  (issue `#350807773 <https://pwbug.dev/350807773>`__)
4896* `Make pw_system_console work for rp2040
4897  <https://pwrev.dev/224714>`__
4898  (issue `#354203490 <https://pwbug.dev/354203490>`__)
4899* `Console device connection override
4900  <https://pwrev.dev/223173>`__
4901* `Add synchronization to pw::System allocator
4902  <https://pwrev.dev/222794>`__
4903  (issues `#352592037 <https://pwbug.dev/352592037>`__,
4904  `#352818465 <https://pwbug.dev/352818465>`__)
4905* `Reusable DeviceConnection functionality
4906  <https://pwrev.dev/221752>`__
4907
4908pw_target_runner
4909----------------
4910* `Increase maximum message size for binaries
4911  <https://pwrev.dev/222736>`__
4912
4913pw_thread
4914---------
4915The new ``pw::thread::TestThreadContext()`` interface makes it easier to
4916create threads for unit tests.
4917
4918* `Add TestThreadContext for FreeRTOS
4919  <https://pwrev.dev/222671>`__
4920
4921pw_tokenizer
4922------------
4923* `Missing <string> includes
4924  <https://pwrev.dev/223352>`__
4925  (issue `#298822102 <https://pwbug.dev/298822102>`__)
4926
4927pw_toolchain
4928------------
4929The new ``minimum_cxx_20()`` Bazel helper can be used with
4930``target_compatible_with`` attributes to express that a target
4931requires C++20 or newer.
4932
4933* `Select Bazel C++ version with config_setting
4934  <https://pwrev.dev/221453>`__
4935  (issue `#352379527 <https://pwbug.dev/352379527>`__)
4936* `Hide toolchain path behind variable
4937  <https://pwrev.dev/224851>`__
4938  (issue `#258836641 <https://pwbug.dev/258836641>`__)
4939* `Add linux_sysroot.bzl
4940  <https://pwrev.dev/223578>`__
4941  (issue `#258836641 <https://pwbug.dev/258836641>`__)
4942* `Host clang toolchain for Bazel
4943  <https://pwrev.dev/223172>`__
4944* `Pico Bazel build
4945  <https://pwrev.dev/223312>`__
4946  (issue `#261603269 <https://pwbug.dev/261603269>`__)
4947* `Add tsan support for host builds
4948  <https://pwrev.dev/222891>`__
4949  (issue `#301487567 <https://pwbug.dev/301487567>`__)
4950* `Add ubsan support for host builds
4951  <https://pwrev.dev/222791>`__
4952
4953pw_trace_tokenized
4954------------------
4955* `Fix bazel build
4956  <https://pwrev.dev/223093>`__
4957  (issues `#260641850 <https://pwbug.dev/issues/260641850>`__,
4958  `#258071921 <https://pwbug.dev/issues/258071921>`__)
4959
4960pw_transfer
4961-----------
4962The new ``PW_TRANSFER_EVENT_PROCESSING_TIMEOUT_MS`` lets you control how
4963long incoming transfer events should block on the previous event being
4964processed before dropping the new event.
4965
4966* `Don't block indefinitely on events
4967  <https://pwrev.dev/224693>`__
4968* `Fix initial timeout and missing start chunk
4969  <https://pwrev.dev/222511>`__
4970
4971pw_unit_test
4972------------
4973* `Removed duplicate from forwarded variables list in pw_test
4974  <https://pwrev.dev/223431>`__
4975* `Update logging_main compatibility
4976  <https://pwrev.dev/223579>`__
4977* `Missing <string> includes
4978  <https://pwrev.dev/223352>`__
4979  (issue `#298822102 <https://pwbug.dev/298822102>`__)
4980* `Introduce googtest_platform
4981  <https://pwrev.dev/222812>`__
4982  (issue `#352808542 <https://pwbug.dev/352808542>`__)
4983
4984pw_web
4985------
4986The REPL in the web console now provides a welcome message that lists commonly
4987used keyboard shortcuts. The log viewer UI is now more dense. The REPL is now
4988positioned on the left by default. Pressing :kbd:`Shift+Enter` in the REPL
4989now goes to a new line rather than evaluating.
4990
4991* `Add icon for info
4992  <https://pwrev.dev/225413>`__
4993  (issue `#354282161 <https://pwbug.dev/354282161>`__)
4994* `Fix keyboard shortcut in repl.rst
4995  <https://pwrev.dev/226003>`__
4996* `Add repl intro message and title param
4997  <https://pwrev.dev/225757>`__
4998  (issue `#354283703 <https://pwbug.dev/354283703>`__)
4999* `Increase default log viewer density
5000  <https://pwrev.dev/225671>`__
5001  (issues `# 354282977 <https://pwbug.dev/ 354282977>`__,
5002  `# 342451299 <https://pwbug.dev/ 342451299>`__)
5003* `Move REPL to left, reduce default division to 40%
5004  <https://pwrev.dev/225755>`__
5005* `Fix bug in code editor to not eval empty snippet
5006  <https://pwrev.dev/224315>`__
5007* `NPM version bump to 0.0.20
5008  <https://pwrev.dev/223154>`__
5009* `Change repl keybinding to eval
5010  <https://pwrev.dev/223174>`__
5011* `Bundle console.ts, fix log source handlers
5012  <https://pwrev.dev/222534>`__
5013* `Save state on input change and adjust filter logs logic
5014  <https://pwrev.dev/222774>`__
5015  (issue `#235253336 <https://pwbug.dev/235253336>`__)
5016* `Add filter field buttons and placeholder
5017  <https://pwrev.dev/222711>`__
5018
5019Third-party software
5020====================
5021
5022Emboss
5023------
5024Emboss was updated to v2024.0718.173957. Emboss build steps that involve
5025Python now use an optimized version of Python, resulting in a 15% speedup.
5026
5027* `Disable using pw_python_action
5028  <https://pwrev.dev/226009>`__
5029  (issue `#354195492 <https://pwbug.dev/354195492>`__)
5030* `Update emboss repo to v2024.0718.173957
5031  <https://pwrev.dev/224713>`__
5032  (issue `#354195492 <https://pwbug.dev/354195492>`__)
5033* `Run python with optimization on
5034  <https://pwrev.dev/224712>`__
5035  (issue `#354195492 <https://pwbug.dev/354195492>`__)
5036* `Make emboss_runner_py Soong target
5037  <https://pwrev.dev/225151>`__
5038  (issue `#352364622 <https://pwbug.dev/352364622>`__)
5039* `Remove -Wno-format-invalid-specifier
5040  <https://pwrev.dev/213660>`__
5041* `Update emboss repo to v2024.0716.040724
5042  <https://pwrev.dev/223592>`__
5043  (issue `#353533164 <https://pwbug.dev/353533164>`__)
5044
5045Go
5046--
5047* `Create a Pigweed-wide go.mod file
5048  <https://pwrev.dev/225011>`__
5049  (issue `#258836641 <https://pwbug.dev/258836641>`__)
5050
5051Miscellaneous
5052=============
5053
5054Rolls
5055-----
5056FreeRTOS was updated to version ``10.5.1.bcr.2``. CMake was bumped to version
5057``3@3.30.1.chromium.8``. Rust was updated to Git revision
5058``73a228116ae8c8ce73e309eee8c730ce90feac78``.
5059
5060* `FreeRTOS for upstream
5061  <https://pwrev.dev/226091>`__
5062  (issue `#355203454 <https://pwbug.dev/355203454>`__)
5063* `FreeRTOS
5064  <https://pwrev.dev/225791>`__
5065* `cmake
5066  <https://pwrev.dev/225172>`__
5067* `rust
5068  <https://pwrev.dev/225171>`__
5069* `rules_python
5070  <https://pwrev.dev/224054>`__
5071  (issue `#258836641 <https://pwbug.dev/258836641>`__)
5072* `Fuchsia SDK
5073  <https://pwrev.dev/223593>`__
5074  (issues `#258836641 <https://pwbug.dev/258836641>`__,
5075  `#353749536 <https://pwbug.dev/353749536>`__)
5076* `310, 311
5077  <https://pwrev.dev/222650>`__
5078
5079Targets
5080=======
5081
5082RP2040
5083------
5084* `Add pw_libcxx as dep for system_async_example
5085  <https://pwrev.dev/223573>`__
5086* `Import statement fix
5087  <https://pwrev.dev/225754>`__
5088  (issue `#258836641 <https://pwbug.dev/258836641>`__)
5089* `Enhance on-device testing instructions
5090  <https://pwrev.dev/225311>`__
5091* `Fix assert basic termination behavior
5092  <https://pwrev.dev/223580>`__
5093
5094------------
5095Jul 11, 2024
5096------------
5097Highlights (Jun 28, 2024 to Jul 11, 2024):
5098
5099* **Bazel 8 pre-release**: Upstream Pigweed is now using a pre-release version
5100  of Bazel 8, the first version to include platform-based flags.
5101* **ARMv6-M support**: :ref:`module-pw_cpu_exception_cortex_m` now supports
5102  ARMv6-M cores.
5103* **Browser-based pw_system console**: The new ``--browser`` option lets
5104  you start a ``pw_system`` console in a web browser rather than the default
5105  Python-based terminal console.
5106* **Updated pw_rpc docs**: The :ref:`module-pw_rpc` docs
5107  have been revamped to make getting started easier and to
5108  provide more Bazel guidance.
5109
5110Build systems
5111=============
5112
5113Bazel
5114-----
5115Pigweed is now using version 8.0.0-pre.20240618.2 of Bazel, the first version
5116to include platform-based flags. Some backend collection targets are now being
5117provided as dictionaries to enable downstream projects to use the pattern
5118described in :ref:`docs-bazel-compatibility-facade-backend-dict`.  The
5119``incompatible_with_mcu`` Bazel helper has been introduced to help express
5120whether a target is only compatible with platforms that have a full-featured
5121OS.
5122
5123* `Run all tests with googletest backend in CI
5124  <https://pwrev.dev/222532>`__
5125  (issue `#352584464 <https://pwbug.dev/352584464>`__)
5126* `Add missing dependencies
5127  <https://pwrev.dev/222572>`__
5128  (issue `#352584464 <https://pwbug.dev/352584464>`__)
5129* `Don't propagate flags to exec config
5130  <https://pwrev.dev/220812>`__
5131  (issues `#234877642 <https://pwbug.dev/234877642>`__,
5132  `#315871648 <https://pwbug.dev/315871648>`__)
5133* `Provide backend collections as dicts
5134  <https://pwrev.dev/219911>`__
5135  (issue `#344654805 <https://pwbug.dev/344654805>`__)
5136* `Roll out incompatible_with_mcu
5137  <https://pwrev.dev/216852>`__
5138  (issue `#348008794 <https://pwbug.dev/348008794>`__)
5139* `Introduce incompatible_with_mcu
5140  <https://pwrev.dev/216851>`__
5141  (issue `#348008794 <https://pwbug.dev/348008794>`__,
5142  `#343481391 <https://pwbug.dev/343481391>`__)
5143* `Add back to CI some building targets
5144  <https://pwrev.dev/218698>`__
5145  (issue `#261603269 <https://pwbug.dev/261603269>`__)
5146
5147Docs
5148====
5149* `Fix shortlink URL
5150  <https://pwrev.dev/221751>`__
5151* `Add shortlink to pw_enviro draft
5152  <https://pwrev.dev/221533>`__
5153* `Update changelog
5154  <https://pwrev.dev/219131>`__
5155
5156Modules
5157=======
5158
5159pw_allocator
5160------------
5161A bug was fixed that caused builds to break when
5162``-Wmissing-template-arg-list-after-template-kw`` is turned on.
5163
5164* `Remove unnecessary template
5165  <https://pwrev.dev/220111>`__
5166
5167pw_assert
5168---------
5169Downstream projects using Bazel now need to set the new backend label flags
5170``@pigweed//pw_assert:check_backend`` and
5171``@pigweed//pw_assert:check_backend_impl`` and include them in their link
5172deps.
5173
5174* `Split up Bazel assert backend, part 2
5175  <https://pwrev.dev/219791>`__
5176  (issue `#350585010 <https://pwbug.dev/350585010>`__)
5177* `Split up Bazel assert backend, part 1
5178  <https://pwrev.dev/219611>`__
5179  (issue `#350585010 <https://pwbug.dev/350585010>`__)
5180
5181pw_async2
5182---------
5183* `Add missing thread_stl dependency
5184  <https://pwrev.dev/219291>`__
5185
5186pw_async2_epoll
5187---------------
5188* `Use unordered_map; silence persistent warnings
5189  <https://pwrev.dev/218860>`__
5190
5191pw_async_basic
5192--------------
5193* `Fix size report build error
5194  <https://pwrev.dev/219691>`__
5195  (issue `#350780546 <https://pwbug.dev/350780546>`__)
5196
5197pw_bluetooth
5198------------
5199* `Format emboss files
5200  <https://pwrev.dev/219351>`__
5201
5202pw_bluetooth_proxy
5203------------------
5204``pw::bluetooth::proxy::sendGattNotify()`` (lowercase first letter) has been
5205removed; use ``pw::bluetooth::proxy::SendGattNotify()`` (uppercase first
5206letter) instead. The new
5207``pw::bluetooth::proxy::GetNumSimultaneousAclSendsSupported()`` function
5208returns the max number of LE ACL sends that can be in-flight at one time.
5209The new ``pw::bluetooth::proxy::AclDataChannel::Reset()`` and
5210``pw::bluetooth::proxy::ProxyHost::Reset()`` methods let you reset the internal
5211state of those classes.
5212
5213* `Delete "sendGattNotify"
5214  <https://pwrev.dev/220951>`__
5215  (issue `#350106534 <https://pwbug.dev/350106534>`__)
5216* `Include <optional> in proxy_host.h
5217  <https://pwrev.dev/220657>`__
5218* `ProxyHost supports multiple sends
5219  <https://pwrev.dev/220573>`__
5220  (issues `#348680331 <https://pwbug.dev/348680331>`__,
5221  `#326499764 <https://pwbug.dev/326499764>`__)
5222* `Remove unneeded PW_EXCLUSIVE_LOCKS_REQUIRED
5223  <https://pwrev.dev/219417>`__
5224  (issue `#350106534 <https://pwbug.dev/350106534>`__)
5225* `Soft transition to SendGattNotify
5226  <https://pwrev.dev/219120>`__
5227  (issue `#350106534 <https://pwbug.dev/350106534>`__)
5228* `Add ProxyHost/AclDataChannel::Reset()
5229  <https://pwrev.dev/219119>`__
5230  (issue `#350497803 <https://pwbug.dev/350497803>`__)
5231* `Dedup NOCP construction in tests
5232  <https://pwrev.dev/219118>`__
5233* `Document which events are expected
5234  <https://pwrev.dev/219353>`__
5235  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5236* `Adjust const for pw::span
5237  <https://pwrev.dev/218877>`__
5238  (issue `#326497489 <https://pwbug.dev/326497489>`__)
5239* `Remove use of <mutex>
5240  <https://pwrev.dev/218893>`__
5241  (issue `#350009505 <https://pwbug.dev/350009505>`__)
5242* `Prevent crash in GattNotifyTest
5243  <https://pwrev.dev/218834>`__
5244
5245pw_bluetooth_sapphire
5246---------------------
5247* `Remove modulo operator from asserts
5248  <https://pwrev.dev/222233>`__
5249* `Add Bazel build files to lib/ packages
5250  <https://pwrev.dev/222232>`__
5251* `Use pwemb namespace alias in FakeController
5252  <https://pwrev.dev/221034>`__
5253* `Unmask LE Connection Complete
5254  <https://pwrev.dev/221033>`__
5255* `Implement ExtendedLowEnergyConnector
5256  <https://pwrev.dev/221032>`__
5257  (issue `#305976440 <https://pwbug.dev/305976440>`__)
5258* `Enable bt-host component
5259  <https://pwrev.dev/221011>`__
5260  (issues `#303116559 <https://pwbug.dev/303116559>`__,
5261  `# b/324109634 <https://pwbug.dev/ b/324109634>`__,
5262  `#326079781 <https://pwbug.dev/326079781>`__,
5263  `# b/325142183 <https://pwbug.dev/ b/325142183>`__)
5264* `Support ISO Channel FIDL Protocol in Drivers
5265  <https://pwrev.dev/221267>`__
5266  (issue `#328457492 <https://pwbug.dev/328457492>`__,
5267  issue `# b/328459391 <https://pwbug.dev/ b/328459391>`__)
5268* `Add ISO support to controllers
5269  <https://pwrev.dev/218992>`__
5270  (issue `#311639690 <https://pwbug.dev/311639690>`__)
5271* `Tag integration test
5272  <https://pwrev.dev/220991>`__
5273  (issue `#344654806 <https://pwbug.dev/344654806>`__)
5274* `Implement ExtendedLowEnergyScanner
5275  <https://pwrev.dev/218979>`__
5276  (issue `#305975969 <https://pwbug.dev/305975969>`__)
5277* `Add packet filtering consts to vendor protocol
5278  <https://pwrev.dev/218978>`__
5279* `Update LEAdvertisers to use EmbossCommandPacket
5280  <https://pwrev.dev/218991>`__
5281  (issue `#312896684 <https://pwbug.dev/312896684>`__)
5282* `Use Emboss for android vendor exts multi advert
5283  <https://pwrev.dev/218977>`__
5284  (issue `#312896673 <https://pwbug.dev/312896673>`__)
5285* `Use Emboss versions of a2dp offload structs
5286  <https://pwrev.dev/218976>`__
5287* `Refactor LowEnergyScanResult to its own class
5288  <https://pwrev.dev/218975>`__
5289* `Refactor TxEngine to allow queueing SDUs
5290  <https://pwrev.dev/218915>`__
5291* `Add incoming CIS request handler
5292  <https://pwrev.dev/218972>`__
5293* `Add IsoStreamManager class
5294  <https://pwrev.dev/218971>`__
5295* `Add CIS events and commands
5296  <https://pwrev.dev/218914>`__
5297  (issue `#311639432 <https://pwbug.dev/311639432>`__)
5298* `Retrieve sleep clock accuracy for peers
5299  <https://pwrev.dev/218913>`__
5300  (issue `#311639272 <https://pwbug.dev/311639272>`__)
5301* `Fix LowEnergyScanner crash
5302  <https://pwrev.dev/218974>`__
5303  (issue `#323098126 <https://pwbug.dev/323098126>`__)
5304* `Remove unused include
5305  <https://pwrev.dev/214677>`__
5306* `Add infrastructure for SCA operations
5307  <https://pwrev.dev/214676>`__
5308  (issue `#311639272 <https://pwbug.dev/311639272>`__)
5309* `Use Write instead of UncheckedWrite
5310  <https://pwrev.dev/214675>`__
5311* `Remove now unnecessary use of std::optional
5312  <https://pwrev.dev/214654>`__
5313* `Expose connection role to le handle
5314  <https://pwrev.dev/214653>`__
5315  (issue `#311639432 <https://pwbug.dev/311639432>`__)
5316* `Disambiguate comment
5317  <https://pwrev.dev/214673>`__
5318* `Fix typo in comment
5319  <https://pwrev.dev/214652>`__
5320
5321pw_build
5322--------
5323The new macros in ``//pw_build:merge_flags.bzl`` help with using
5324platform-based flags.
5325
5326* `Add flags_from_dict
5327  <https://pwrev.dev/221691>`__
5328  (issue `#301334234 <https://pwbug.dev/301334234>`__)
5329
5330pw_cli
5331------
5332``pw_cli`` has increased support for letting users select from interactive
5333prompts. The RP2040 flasher utility uses the new interactive prompting
5334features to let users select which detected device to flash.
5335
5336* `Interactive user index prompt
5337  <https://pwrev.dev/220931>`__
5338
5339pw_console
5340----------
5341* `Headless mode with web/ws server running
5342  <https://pwrev.dev/215860>`__
5343
5344pw_cpu_exception
5345----------------
5346* `Remove multiplexers
5347  <https://pwrev.dev/219371>`__
5348  (issue `#347998044 <https://pwbug.dev/347998044>`__)
5349
5350pw_cpu_exception_cortex_m
5351-------------------------
5352``pw_cpu_exception_cortex_m`` now supports ARMv6-M cores.
5353
5354* `Add armv6-m support
5355  <https://pwrev.dev/219132>`__
5356  (issues `#350747553 <https://pwbug.dev/https://pwbug.dev/350747553>`__,
5357  `#350747562 <https://pwbug.dev/https://pwbug.dev/350747562>`__)
5358
5359pw_digital_io_rp2040
5360--------------------
5361The new ``enable_pull_up`` and ``enable_pull_down`` fields in the
5362``pw::digital_io::Rp2040Config`` struct let you configure whether resistors
5363should be pulled up or down.
5364
5365* `Add pull up/down resistors to Rp2040Config
5366  <https://pwrev.dev/219731>`__
5367* `Remove manual tags
5368  <https://pwrev.dev/219052>`__
5369  (issue `#261603269 <https://pwbug.dev/261603269>`__)
5370
5371pw_env_setup
5372------------
5373* `Use full paths for proj action imports
5374  <https://pwrev.dev/222571>`__
5375
5376pw_function
5377-----------
5378* `Dynamic allocation for upstream host
5379  <https://pwrev.dev/221871>`__
5380
5381pw_log_string
5382-------------
5383* `Require backend_impl to be set explicitly
5384  <https://pwrev.dev/221293>`__
5385
5386pw_malloc_freertos
5387------------------
5388* `Fix typo
5389  <https://pwrev.dev/220751>`__
5390  (issue `#351945325 <https://pwbug.dev/351945325>`__)
5391
5392pw_presubmit
5393------------
5394* `Narrow copyright notice exclusions
5395  <https://pwrev.dev/221532>`__
5396  (issue `#347062591 <https://pwbug.dev/347062591>`__)
5397* `Add copyright notice to some test data
5398  <https://pwrev.dev/221395>`__
5399  (issue `#347062591 <https://pwbug.dev/347062591>`__)
5400* `Exclude test_data from bazel_lint
5401  <https://pwrev.dev/221152>`__
5402* `Exclude files from copyright
5403  <https://pwrev.dev/221151>`__
5404* `Don't automatically use exclusions
5405  <https://pwrev.dev/216355>`__
5406  (issue `#347274642 <https://pwbug.dev/347274642>`__)
5407
5408pw_rpc
5409------
5410The :ref:`module-pw_rpc` docs have been revamped to make getting started
5411easier and to provide more Bazel guidance.
5412
5413* `Expand comment for internal::ClientServerTestComment
5414  <https://pwrev.dev/220574>`__
5415* `Update docs
5416  <https://pwrev.dev/219392>`__
5417  (issue `#349832019 <https://pwbug.dev/349832019>`__)
5418
5419pw_stream_uart_mcuxpresso
5420-------------------------
5421* `Clean up dma stream comments
5422  <https://pwrev.dev/222111>`__
5423
5424pw_sys_io
5425---------
5426* `Remove multiplexer, constraints
5427  <https://pwrev.dev/218736>`__
5428  (issue `#347998044 <https://pwbug.dev/347998044>`__)
5429
5430pw_sys_io_baremetal_stm32f429
5431-----------------------------
5432Bazel projects should now set the ``--@pigweed//pw_sys_io:backend``
5433label flag to ``@pigweed//pw_sys_io_baremetal_stm32f429`` and add the
5434``@pigweed//pw_sys_io_baremetal_stm32f429:compatible`` constraint to their
5435platform to indicate that the platform is compatible with
5436``pw_sys_io_baremetal_stm32f429``.
5437
5438* `Add constraint
5439  <https://pwrev.dev/218831>`__
5440  (issue `#347998044 <https://pwbug.dev/347998044>`__)
5441
5442pw_sys_io_stm32cube
5443-------------------
5444* `Remove target_compatible_with
5445  <https://pwrev.dev/218704>`__
5446  (issue `#347998044 <https://pwbug.dev/347998044>`__)
5447
5448pw_system
5449---------
5450The new ``--browser`` option lets you start a browser-based ``pw_system``
5451console instead of a terminal-based one.Thread stack sizes for the new
5452async version of ``pw_system`` can now be configured with
5453``PW_SYSTEM_ASYNC_LOG_THREAD_STACK_SIZE_BYTES``,
5454``PW_SYSTEM_ASYNC_RPC_THREAD_STACK_SIZE_BYTES``,
5455``PW_SYSTEM_ASYNC_TRANSFER_THREAD_STACK_SIZE_BYTES``, and
5456``PW_SYSTEM_ASYNC_DISPATCHER_THREAD_STACK_SIZE_BYTES``. The new
5457``pw::system::AsyncCore::RunOnce()`` method provides a way to run a function
5458once on a separate thread. The ``--ipython`` option has been removed from the
5459``pw_system`` console. See :ref:`module-pw_console-embedding-ipython` for
5460guidance on how to embed IPython.
5461
5462* `Add web console option
5463  <https://pwrev.dev/221071>`__
5464* `Add missing work queue thread
5465  <https://pwrev.dev/222372>`__
5466* `Clean up pw_system/threads.cc
5467  <https://pwrev.dev/222371>`__
5468* `Configurable thread stack sizes
5469  <https://pwrev.dev/221394>`__
5470* `RunOnce function for work queue functionality
5471  <https://pwrev.dev/218954>`__
5472* `Remove IPython from pw_system console
5473  <https://pwrev.dev/218882>`__
5474* `Organize pw_system:async build targets
5475  <https://pwrev.dev/218737>`__
5476
5477pw_thread
5478---------
5479* `Remove backend multiplexers
5480  <https://pwrev.dev/218238>`__
5481  (issue `#347998044 <https://pwbug.dev/347998044>`__)
5482
5483pw_thread_stl
5484-------------
5485The ``pw::thread::Thread::native_handle()`` method now returns a pointer to
5486the underlying thread object instead of a reference and the docs have been
5487updated to make it clear that using this is inherently non-portable.
5488
5489* `Change NativeThreadHandle to ptr
5490  <https://pwrev.dev/219251>`__
5491  (issue `#350349092 <https://pwbug.dev/350349092>`__)
5492
5493pw_toolchain
5494------------
5495Go binaries have been updated to no longer link with position-independent
5496executables (PIE) on Linux.
5497
5498* `Disable PIE for Golang
5499  <https://pwrev.dev/220191>`__
5500  (issue `#347708308 <https://pwbug.dev/347708308>`__)
5501
5502pw_toolchain_bazel
5503------------------
5504* `Add native binary for clang-tidy
5505  <https://pwrev.dev/221471>`__
5506  (issue `#352343585 <https://pwbug.dev/352343585>`__)
5507
5508pw_trace
5509--------
5510* `Remove backend multiplexer
5511  <https://pwrev.dev/219792>`__
5512  (issue `#347998044 <https://pwbug.dev/347998044>`__)
5513
5514pw_transfer
5515-----------
5516* `Don't assert on resource status responder
5517  <https://pwrev.dev/219037>`__
5518
5519pw_unit_test
5520------------
5521* `Fix CMake test runner argument forwarding
5522  <https://pwrev.dev/218973>`__
5523
5524pw_web
5525------
5526Upstream Pigweed protos are now provided alongside downstream project protos.
5527
5528* `Include core .proto files in the npm bundle
5529  <https://pwrev.dev/222533>`__
5530* `Add newlines, separators, and clear for output
5531  <https://pwrev.dev/222531>`__
5532  (issue `#348650028 <https://pwbug.dev/348650028>`__)
5533* `Set min width for message
5534  <https://pwrev.dev/221592>`__
5535  (issue `#351901512 <https://pwbug.dev/351901512>`__)
5536* `Implement console-level split panels
5537  <https://pwrev.dev/220691>`__
5538  (issue `#348649945 <https://pwbug.dev/348649945>`__)
5539* `Update REPL styles
5540  <https://pwrev.dev/220971>`__
5541  (issue `#348650028 <https://pwbug.dev/348650028>`__)
5542* `Repl kernel interface and litjs component for repl
5543  <https://pwrev.dev/217311>`__
5544* `Fix columns on first load
5545  <https://pwrev.dev/218551>`__
5546  (issue `#346869281 <https://pwbug.dev/346869281>`__)
5547* `Debounce grid template calc on resize
5548  <https://pwrev.dev/218377>`__
5549  (issues `#346596380 <https://pwbug.dev/346596380>`__,
5550  `#342450728 <https://pwbug.dev/342450728>`__)
5551
5552Rolls
5553=====
5554Pigweed is now using version 8.0.0-pre.20240618.2 of Bazel, the first version
5555to include platform-based flags. Go was updated to version ``3@1.22.5``. CMake
5556was updated to version ``3@3.30.0.chromium.8``.
5557
5558* `Update Bazel to 8.0 rolling release
5559  <https://pwrev.dev/220118>`__
5560  (issue `#344013743 <https://pwbug.dev/344013743>`__)
5561* `Update Bazel to 7.2
5562  <https://pwrev.dev/220571>`__
5563  (issue `#347708308 <https://pwbug.dev/347708308>`__)
5564* `go
5565  <https://pwrev.dev/220471>`__
5566* `cmake
5567  <https://pwrev.dev/220351>`__
5568* `310, 311
5569  <https://pwrev.dev/219173>`__
5570
5571Targets
5572=======
5573
5574RP2040
5575------
5576The RP2040 flasher now provides more feedback when a board has been
5577successfully flashed.
5578
5579* `Fix FreeRTOS tick rate
5580  <https://pwrev.dev/220791>`__
5581  (issue `#351906735 <https://pwbug.dev/351906735>`__)
5582* `Log on successful flash
5583  <https://pwrev.dev/220575>`__
5584  (issue `#352052013 <https://pwbug.dev/352052013>`__)
5585* `Fix build command in docs
5586  <https://pwrev.dev/219359>`__
5587
5588Third-party software
5589====================
5590
5591Emboss
5592------
5593Emboss was updated to version ``2024.0702.215418``.
5594
5595* `Add missing ir_data_utils.py to GN build
5596  <https://pwrev.dev/220114>`__
5597  (issue `#350970460 <https://pwbug.dev/350970460>`__)
5598* `Update emboss to v2024.0702.215418
5599  <https://pwrev.dev/219793>`__
5600  (issue `#350970460 <https://pwbug.dev/350970460>`__)
5601
5602FreeRTOS
5603--------
5604* `Add missing CM33_NTZ header
5605  <https://pwrev.dev/222574>`__
5606
5607GoogleTest
5608----------
5609* `Fix the docs
5610  <https://pwrev.dev/222573>`__
5611  (issue `#352584464 <https://pwbug.dev/352584464>`__)
5612
5613ICU
5614---
5615* `Update Bazel rules for dependent headers
5616  <https://pwrev.dev/222231>`__
5617* `Add Bazel build rules
5618  <https://pwrev.dev/218702>`__
5619  (issue `#321300565 <https://pwbug.dev/321300565>`__)
5620
5621Mbed TLS
5622--------
5623* `Remove old build file
5624  <https://pwrev.dev/220137>`__
5625* `Rename build file
5626  <https://pwrev.dev/218709>`__
5627
5628Miscellaneous
5629=============
5630
5631GitHub
5632------
5633* `Add copyright notice
5634  <https://pwrev.dev/221491>`__
5635  (issue `#347062591 <https://pwbug.dev/347062591>`__)
5636
5637dotfiles
5638--------
5639* `Add copyright notice
5640  <https://pwrev.dev/221531>`__
5641  (issue `#347062591 <https://pwbug.dev/347062591>`__)
5642
5643------------
5644Jun 27, 2024
5645------------
5646Highlights (Jun 14, 2024 to Jun 27, 2024):
5647
5648* **RP2040 implementation for pw_channel**:
5649  :cpp:func:`pw::channel::Rp2StdioChannelInit` is a new
5650  :ref:`module-pw_channel` implementation that reads from and writes
5651  to RP2040's ``stdio``.
5652* **Bazel compatibility patterns guide**: The new
5653  :ref:`docs-bazel-compatibility` guide describes the Bazel patterns that
5654  Pigweed uses to express that a build target is compatible with a platform.
5655* **Hex dump helper**: The new :cpp:func:`pw::dump::LogBytes` helper makes
5656  it easier to log binary data as human-readable hex dumps. The number of
5657  input bytes to display per line can be configured via the ``kBytesPerLine``
5658  template parameter.
5659
5660Build systems
5661=============
5662
5663Bazel
5664-----
5665The obsolete ``testonly_freertos`` platform has been removed.
5666
5667.. todo-check: disable
5668
5669* `Encapsulate rp2040 WORKSPACE deps into deps.bazl
5670  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217219>`__
5671* `Update pin for rules_libusb
5672  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217212>`__
5673* `Update TODO in bazelrc
5674  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216274>`__
5675  (issue `#347317581 <https://pwbug.dev/347317581>`__)
5676* `Stop using deprecated pw_facade aliases, v3
5677  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216436>`__
5678  (issue `#328679085 <https://pwbug.dev/328679085>`__)
5679* `Stop using deprecated pw_facade aliases, v2
5680  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216271>`__
5681  (issue `#328679085 <https://pwbug.dev/328679085>`__)
5682* `Remove testonly_freertos platform
5683  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216181>`__
5684* `Remove unnecessary @pigweed references
5685  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218411>`__
5686* `Add clippy to CI
5687  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218271>`__
5688  (issue `#268087116 <https://pwbug.dev/268087116>`__)
5689
5690.. todo-check: enable
5691
5692Docs
5693====
5694The new :ref:`Bazel installation guide <docs-install-bazel>` provides
5695Pigweed's recommendations on how to install Bazel. The
5696:ref:`docs-github-actions` guide was updated. The new :ref:`docs-bazel-compatibility`
5697guide describes the Bazel patterns that Pigweed uses to express that a build target
5698is compatible with a platform.
5699
5700* `Add emboss to packages installed for build_docs
5701  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216893>`__
5702* `Remove mention of multiplexers
5703  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216672>`__
5704  (issue `#344654805 <https://pwbug.dev/344654805>`__)
5705* `Add OWNERS
5706  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216834>`__
5707* `Add Bazel installation guide
5708  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216531>`__
5709* `Update GitHub actions tutorial
5710  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216276>`__
5711* `Update Pigweed Live schedule
5712  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216354>`__
5713  (issue `#347677570 <https://pwbug.dev/347677570>`__)
5714* `Bazel compatibility patterns
5715  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214971>`__
5716  (issue `#344654805 <https://pwbug.dev/344654805>`__)
5717* `Update changelog
5718  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216153>`__
5719
5720Modules
5721=======
5722
5723pw_allocator
5724------------
5725The ``//pw_allocator:block_allocator`` target has been removed. Consumers
5726are now expected to depend on and include individual block allocator targets.
5727
5728* `Use specific block allocator headers and targets
5729  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211917>`__
5730* `Fix Android build
5731  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216511>`__
5732* `Clean up Block interface
5733  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211916>`__
5734  (issue `#326509341 <https://pwbug.dev/326509341>`__)
5735
5736pw_assert
5737---------
5738* `Remove backend multiplexer
5739  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215914>`__
5740  (issue `#347998044 <https://pwbug.dev/347998044>`__)
5741
5742pw_bluetooth
5743------------
5744New Emboss structs added: ``NumberOfCompletedPacketsEvent``,
5745``WritePinTypeCommandCompleteEvent``, ``PinCodeRequestNegativeReplyCommandCompleteEvent``,
5746``ReadPinTypeCommandCompleteEvent``, ``PinCodeRequestEvent``,
5747``PinCodeRequestReplyCommandCompleteEvent``, ``WritePinTypeCommand``,
5748``ReadPinTypeCommand``, ``PinCodeRequestNegativeReplyCommand``,
5749``PinCodeRequestReplyCommand``.
5750
5751* `Add NumberOfCompletedPacketsEvent
5752  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216250>`__
5753  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5754* `Add AttNotifyOverAcl to att.emb
5755  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218311>`__
5756* `Add PinCodeRequestEvent
5757  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217791>`__
5758  (issue `#342151162 <https://pwbug.dev/342151162>`__)
5759* `Add IoCapability enum field
5760  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217074>`__
5761* `Add ACL & L2CAP B-frame Emboss definitions
5762  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216248>`__
5763  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5764* `Add att.emb
5765  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216247>`__
5766  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5767* `Add WritePinTypeCommandCompleteEvent Emboss struct
5768  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216923>`__
5769  (issue `#342151162 <https://pwbug.dev/342151162>`__)
5770* `Add ReadPinTypeCommandCompleteEvent Emboss struct
5771  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216922>`__
5772  (issue `#342151162 <https://pwbug.dev/342151162>`__)
5773* `Add PinCodeRequestNegativeReplyCommandCompleteEvent Emboss
5774  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216921>`__
5775  (issue `#342151162 <https://pwbug.dev/342151162>`__)
5776* `Add PinCodeRequestReplyCommandCompleteEvent Emboss struct
5777  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216920>`__
5778  (issue `#342151162 <https://pwbug.dev/342151162>`__)
5779* `Add WritePinTypeCommand Emboss struct
5780  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216919>`__
5781  (issue `#342151162 <https://pwbug.dev/342151162>`__)
5782* `Add ReadPinTypeCommand Emboss struct
5783  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216918>`__
5784  (issue `#342151162 <https://pwbug.dev/342151162>`__)
5785* `Add PinCodeRequestNegativeReplyCommand Emboss struct
5786  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216917>`__
5787  (issue `#342151162 <https://pwbug.dev/342151162>`__)
5788* `Add PinCodeRequestReplyCommand Emboss struct
5789  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216916>`__
5790  (issue `#342151162 <https://pwbug.dev/342151162>`__)
5791* `Add PinType enum
5792  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216915>`__
5793  (issue `#342151162 <https://pwbug.dev/342151162>`__)
5794
5795pw_bluetooth_proxy
5796------------------
5797The new ``pw::bluetooth::proxy::AclDataChannel::ProcessDisconnectionCompleteEvent()``
5798method frees up resources when a connection is removed. The new
5799``pw::bluetooth::proxy::AclDataChannel::ProcessNumberOfCompletedPacketsEvent()`` method
5800removes completed packets as necessary to reclaim LE ACL credits. The new
5801``pw::bluetooth::proxy::ProxyHost::sendGattNotify()`` method is a simple
5802implementation of sending a GATT notification to a connected peer.
5803
5804* `Process Disconnection_Complete event
5805  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218652>`__
5806  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5807* `Implement basic ACL credit tracking
5808  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216411>`__
5809  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5810* `Implement sendGattNotify
5811  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216249>`__
5812  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5813* `Have release_fn take buffer*
5814  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217414>`__
5815  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5816* `Add GetH4Span
5817  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217413>`__
5818  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5819* `Add release_fn to H4PacketWithH4
5820  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216971>`__
5821  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5822* `Fix case style for some test variables
5823  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216914>`__
5824  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5825* `Move to-controller flow to using h4-based packets
5826  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216897>`__
5827  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5828* `Add H4PacketWithH4 ctor that takes type
5829  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216896>`__
5830  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5831* `Move H4Packet to using move semantics
5832  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216913>`__
5833  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5834* `Fix naming of SetH4Type
5835  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216895>`__
5836  (issue `#326499764 <https://pwbug.dev/326499764>`__)
5837* `Move to using H4Packet wrapper classes
5838  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215222>`__
5839  (issues `#326499764 <https://pwbug.dev/326499764>`__,
5840  `#326497489 <https://pwbug.dev/326497489>`__)
5841
5842pw_bluetooth_sapphire
5843---------------------
5844* `Move LegacyLowEnergyScanner impl to base class
5845  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214674>`__
5846* `Add spec reference to comment
5847  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217111>`__
5848  (issue `#311639040 <https://pwbug.dev/311639040>`__)
5849
5850pw_boot
5851-------
5852* `Remove backend multiplexer
5853  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217213>`__
5854  (issue `#347998044 <https://pwbug.dev/347998044>`__)
5855
5856pw_build
5857--------
5858The ``BuildCommand`` Python class now has an optional ``working_dir`` argument
5859that allows you to specify the working directory in which a build command
5860should be executed. The new ``boolean_constraint_value`` syntactic sugar macro
5861makes it easier to declare a constraint setting with just two possible
5862constraint values.
5863
5864* `Add optional working directory arg to BuildCommand
5865  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217831>`__
5866  (issue `#328083083 <https://pwbug.dev/328083083>`__)
5867* `Introduce boolean_constraint_value
5868  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216832>`__
5869  (issue `#344654805 <https://pwbug.dev/344654805>`__)
5870* `Move host_backend_alias (part 2)
5871  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215741>`__
5872  (issue `#344654805 <https://pwbug.dev/344654805>`__)
5873
5874pw_build_android
5875----------------
5876Dynamic allocation for ``pw::Function`` is now always enabled in Android
5877builds to allow ``pw::Function`` to exceed the inline size limit.
5878
5879* `Enable function dynamic alloc
5880  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218219>`__
5881  (issue `#349352849 <https://pwbug.dev/349352849>`__)
5882
5883pw_build_info
5884-------------
5885The new ``//pw_build_info:git_build_info`` Bazel rule lets you embed which
5886Git commit your binary was built from.
5887
5888* `Add git_build_info.h header for embedding git info
5889  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213854>`__
5890
5891pw_build_mcuxpresso
5892-------------------
5893The type for the ``include`` parameter in the
5894``pw_build_mcuxpresso.components.Project`` Python class constructor changed
5895from ``list[str]`` to ``Collection[str]`` and the type for the ``exclude``
5896parameter changed from  ``list[str]`` to ``Container[str]``.
5897``pw_build_mcuxpresso.bazel.bazel_output()`` now accepts an optional
5898``extra_args`` argument, which is a dictionary of additional arguments to be
5899added to the generated Bazel target.
5900
5901* `Fix bug in create_project()
5902  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218272>`__
5903* `Add extra_args to bazel.bazel_output()
5904  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217754>`__
5905
5906pw_channel
5907----------
5908:cpp:func:`pw::channel::Rp2StdioChannelInit` is a new
5909:ref:`module-pw_channel` implementation that reads from and writes
5910to RP2040's ``stdio``.
5911
5912* `Add Rp2StdioChannel
5913  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217954>`__
5914* `Cleanup redundant checks in epoll_channel
5915  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218376>`__
5916
5917pw_chrono
5918---------
5919The new ``pw_targets_FREERTOS_BACKEND_GROUP`` GN rule sets FreeRTOS
5920backends for ``pw_chrono``, ``pw_sync``, and ``pw_thread`` in one go. Each
5921backend can be individually overridden if needed.
5922
5923* `Add docs metadata
5924  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217752>`__
5925* `Group common backends in the GN build
5926  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215336>`__
5927
5928pw_cli
5929------
5930* `Add missing modules to Bazel build
5931  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217571>`__
5932* `Improve messaging for GitErrors
5933  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217054>`__
5934
5935pw_clock_tree
5936-------------
5937The new :cpp:func:`pw::clock_tree::ClockTree::AcquireWith` method lets
5938you acquire a clock tree element while enabling another one.
5939
5940* `Introduce ClockTree AcquireWith method
5941  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217131>`__
5942  (issue `#331672574 <https://pwbug.dev/331672574>`__)
5943
5944pw_clock_tree_mcuxpresso
5945------------------------
5946:cpp:func:`AcquireWith` should now be used when enabling clock tree
5947elements that are sourced from the audio PLL or SYS PLL.
5948
5949* `Use AcquireWith for audio PLL
5950  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216911>`__
5951  (issue `#331672574 <https://pwbug.dev/331672574>`__)
5952
5953pw_cpu_exception_cortex_m
5954-------------------------
5955* `rm backend multiplexer
5956  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217214>`__
5957  (issue `#347998044 <https://pwbug.dev/347998044>`__)
5958
5959pw_docgen
5960---------
5961* `Add bug Docutils role
5962  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215911>`__
5963
5964pw_emu
5965------
5966``pw_emu`` now supports Bazel.
5967
5968* `Add bazel python build
5969  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217053>`__
5970
5971pw_env_setup
5972------------
5973The version of ``cffi`` that ``pw_env_setup`` uses was updated to
5974``1.16.0`` to fix Windows failures. The "fatal error" that
5975``pw_env_setup`` used to log when running from a directory that's
5976outside of a Git repo has been suppressed.
5977
5978* `Update cffi
5979  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217218>`__
5980  (issue `#348697900 <https://pwbug.dev/348697900>`__)
5981* `Suppress error message when running outside git repo
5982  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217216>`__
5983
5984pw_format
5985---------
5986* `Fix and enable disabled Rust tests
5987  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217135>`__
5988
5989pw_grpc
5990-------
5991The C++ module now handles corrupt frames more gracefully.
5992
5993* `Avoid buffer overflow when processing corrupt frames
5994  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216651>`__
5995
5996pw_hex_dump
5997-----------
5998The ``pw_log_bytes`` target has been renamed to ``log_bytes``. The new
5999:cpp:func:`pw::dump::LogBytes` helper makes it easier to log binary data
6000as human-readable hex dumps. The number of input bytes to display per line
6001can be configured via the ``kBytesPerLine`` template parameter.
6002
6003* `Remove pw prefix from log_bytes
6004  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218531>`__
6005* `Add LogBytes helper
6006  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216711>`__
6007
6008pw_i2c
6009------
6010* `Handle unaligned buffer reads in register_device_test
6011  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217811>`__
6012  (issue `#325509758 <https://pwbug.dev/325509758>`__)
6013
6014pw_ide
6015------
6016A ``--process-files`` (``-P``) flag was added to ``pw ide cpp`` to process
6017compilation databases at the provided paths. Bazel support for ``pw_ide`` has
6018started. ``pw_ide`` now explicitly runs all commands from the ``PW_PROJECT_ROOT``
6019directory.
6020
6021* `Point to compile commands extractor fork
6022  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218631>`__
6023* `Add option to process comp DBs by path
6024  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218334>`__
6025* `Add Bazel dependencies wrapper
6026  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218320>`__
6027* `Bazelify
6028  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217572>`__
6029* `Run commands from PW_PROJECT_ROOT dir
6030  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216471>`__
6031
6032pw_log
6033------
6034* `Remove backend multiplexer
6035  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215892>`__
6036  (issue `#347998044 <https://pwbug.dev/347998044>`__)
6037
6038pw_malloc
6039---------
6040* `Add docs metadata
6041  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217951>`__
6042
6043pw_multibuf
6044-----------
6045* `Fix Android build
6046  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216611>`__
6047
6048pw_preprocessor
6049---------------
6050* `Add docs metadata
6051  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217952>`__
6052
6053pw_presubmit
6054------------
6055* `Add check for rp2040_binary transition
6056  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218273>`__
6057* `Build STM32F429i baremetal in CI
6058  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217231>`__
6059
6060pw_rpc
6061------
6062* `Restructure Channel / internal::Channel
6063  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216037>`__
6064
6065pw_rust
6066-------
6067* `Static Library Linking
6068  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216313>`__
6069
6070pw_spi_mcuxpresso
6071-----------------
6072* `Separate Bazel build targets
6073  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217313>`__
6074* `Fix unused parameter warning
6075  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217312>`__
6076  (issue `#348512572 <https://pwbug.dev/348512572>`__)
6077
6078pw_sync
6079-------
6080The new ``pw_targets_FREERTOS_BACKEND_GROUP`` GN rule sets FreeRTOS
6081backends for ``pw_chrono``, ``pw_sync``, and ``pw_thread`` in one go. Each
6082backend can be individually overridden if needed.
6083
6084* `Remove multiplexers
6085  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216819>`__
6086  (issue `#347998044 <https://pwbug.dev/347998044>`__)
6087* `Group common backends in the GN build
6088  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215336>`__
6089
6090pw_system
6091---------
6092``pw_system:async`` is a new version of ``pw_system`` based on
6093:ref:`module-pw_async2`. The ``pw_system`` console now has a
6094``--device-tracing`` flag to turn device tracing on or off.
6095
6096* `pw_system:async
6097  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216239>`__
6098* `Async packet processing component
6099  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214798>`__
6100* `Rename target_io.cc
6101  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217051>`__
6102* `Allow disabling of DeviceTracing RPC calls
6103  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216332>`__
6104
6105pw_target_runner
6106----------------
6107The ``pw_target_runner`` client in Go now supports a ``server_suggestion``
6108flag, which allows specifying a command to suggest to the user if the server
6109is unavailable. The Go client's ``RunBinary`` method can now accept a binary
6110as a byte array instead of a file path.
6111
6112* `Add suggested server command
6113  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218011>`__
6114* `Send test binaries over gRPC
6115  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216050>`__
6116
6117pw_thread
6118---------
6119The new ``pw_targets_FREERTOS_BACKEND_GROUP`` GN rule sets FreeRTOS
6120backends for ``pw_chrono``, ``pw_sync``, and ``pw_thread`` in one go. Each
6121backend can be individually overridden if needed.
6122
6123* `Group common backends in the GN build
6124  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215336>`__
6125
6126pw_toolchain
6127------------
6128Compiler diagnostics colors are now enabled in Bazel.
6129
6130* `Color diagnostics in Bazel
6131  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217715>`__
6132* `Closer align the bazel arm-gcc flags with GN
6133  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215734>`__
6134* `Add clippy-driver to rust toolchains
6135  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217211>`__
6136  (issue `#268087116 <https://pwbug.dev/268087116>`__)
6137
6138pw_transfer
6139-----------
6140* `Java style fixes; remove unused variable and dependencies
6141  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215858>`__
6142
6143pw_watch
6144--------
6145``pw_watch`` now ignores ``bazel-*`` directories.
6146
6147* `Do not watch bazel-* symlinks
6148  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217931>`__
6149
6150pw_web
6151------
6152The function signature for ``createLogViewer`` changed to
6153``createLogViewer(logSource, root, { columnOrder })``. The ``columnOrder``
6154field in the optional third parameter lets you control the ordering of
6155columns in the log viewer.The new ``useShoelaceFeatures`` boolean lets you
6156control whether the log viewer uses Shoelace components. The log viewer's
6157toolbar is now responsive.
6158
6159* `Add optional parameters to createLogViewer
6160  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217052>`__
6161  (issue `#333537914 <https://pwbug.dev/333537914>`__)
6162* `Add Shoelace component flag
6163  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217093>`__
6164  (issue `#347966938 <https://pwbug.dev/347966938>`__)
6165* `Implement responsive toolbar behavior
6166  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215591>`__
6167  (issue `#309650360 <https://pwbug.dev/309650360>`__)
6168
6169Languages
6170=========
6171
6172Python
6173------
6174* `Add python targets for pw_i2c, pw_digital_io protos
6175  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216736>`__
6176
6177Rust
6178----
6179
6180* `Fix clippy lints
6181  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217136>`__
6182
6183Miscellaneous
6184=============
6185
6186OWNERS
6187------
6188* `Add gwsq
6189  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207731>`__
6190
6191Targets
6192=======
6193References to ``configGENERATE_RUN_TIME_STATS`` have been removed because
6194the implementations are incomplete.
6195
6196* `Remove configGENERATE_RUN_TIME_STATS functions
6197  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218711>`__
6198
6199RP2040
6200------
6201The new ``flash_rp2040`` rule makes it easier to flash Raspberry Pi RP2040s
6202in Bazel.The new ``flash`` Bazel rule makes it easier to flash RP2040s from
6203a Python script.
6204
6205* `Add pw_system_async example
6206  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218691>`__
6207* `Mark rp2040_binary as a non-executable target for host
6208  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218394>`__
6209* `Update docs
6210  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217039>`__
6211* `Add debugprobe version detection and warning
6212  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217055>`__
6213* `Switch to use upstream develop branch of Pico SDK
6214  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216234>`__
6215* `Add IFTT to keep the rp2040 transition and config in sync
6216  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218431>`__
6217* `Add missing backends
6218  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218373>`__
6219* `Unify board selection cmdline args
6220  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/217716>`__
6221  (issue `#348067379 <https://pwbug.dev/348067379>`__)
6222* `Add a bazel rule for flashing
6223  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216314>`__
6224* `Add interrupt and freertos backends
6225  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216493>`__
6226* `Add flash main target
6227  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216492>`__
6228* `Add rp2040_binary transition
6229  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216491>`__
6230* `Refactor test runner and extract flashing
6231  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216152>`__
6232
6233Third-party
6234===========
6235
6236FreeRTOS
6237--------
6238``configUSE_MALLOC_FAILED_HOOK`` can now be enabled to detect out-of-memory
6239errors when using FreeRTOS's heap implementation.
6240
6241* `Add failed malloc hook to support lib
6242  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218380>`__
6243* `Fix Bazel build
6244  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/218351>`__
6245
6246Nanopb
6247------
6248* `Import proto module
6249  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216991>`__
6250
6251Pico SDK
6252--------
6253* `Fix exception names in GN build
6254  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216435>`__
6255  (issue `#347355069 <https://pwbug.dev/347355069>`__)
6256
6257------------
6258Jun 13, 2024
6259------------
6260.. _bootstrap.fish: https://cs.opensource.google/pigweed/pigweed/+/main:bootstrap.fish
6261
6262Highlights (May 30, 2024 to Jun 13, 2024):
6263
6264* **pw_allocator support in pw_mallc**: ``pw_malloc`` now supports
6265  :ref:`pw_allocator <module-pw_allocator>`-based backends.
6266* **New pw_build Bazel rules**: ``pw_py_test`` rule wraps ``py_test``,
6267  :ref:`pw_elf_to_dump <module-pw_build-bazel-pw_elf_to_dump>` takes a
6268  binary executable and produces a text file containing the full binary layout,
6269  and :ref:`pw_elf_to_bin <module-pw_build-bazel-pw_elf_to_bin>` rule takes
6270  a binary executable and produces a file with all ELF headers removed.
6271* **Improved Fish shell support**: The ``pw`` and ``pw build``
6272  commands now support `Fish <https://fishshell.com/>`__ shell completion.
6273  The new `bootstrap.fish`_ script demonstrates how to bootstrap a Pigweed
6274  project from a Fish shell and makes it easier for Fish users to contribute
6275  to upstream Pigweed.
6276* **More informative modules index**: The :ref:`modules index <docs-module-guides>`
6277  now shoes useful metadata for each module, such as a summary of the
6278  module's purpose and the programming languages that the module supports.
6279
6280Active SEEDs
6281============
6282Help shape the future of Pigweed! Please visit :ref:`seed-0000`
6283and leave feedback on the RFCs (i.e. SEEDs) marked
6284``Open for Comments``.
6285
6286Modules
6287=======
6288
6289pw_allocator
6290------------
6291The ``pw::allocator::Layout`` constructor is now marked ``explicit`` to
6292ensure that functions that take ``Layout`` instances as arguments don't
6293silently accept and convert other types. The ``pw::allocator::FreeList`` and
6294``pw::allocator::FreeListHeap`` interfaces have been removed.
6295
6296* `Make Layout constructor explicit
6297  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211915>`__
6298* `Remove FreeList and FreeListHeap
6299  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211914>`__
6300  (issue `#328076428 <https://issues.pigweed.dev/issues/328076428>`__)
6301* `Refactor Bucket chunk list
6302  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215488>`__
6303  (issue `#345526413 <https://issues.pigweed.dev/issues/345526413>`__)
6304
6305pw_analog
6306---------
6307* `Add module metadata
6308  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214500>`__
6309  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6310
6311pw_android_toolchain
6312--------------------
6313* `Add module metadata
6314  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214501>`__
6315  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6316
6317pw_arduino_build
6318----------------
6319* `Add module metadata
6320  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214173>`__
6321  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6322
6323pw_assert
6324---------
6325* `Add module metadata
6326  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214539>`__
6327  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6328
6329pw_async
6330--------
6331* `Add module metadata
6332  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214499>`__
6333  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6334
6335pw_async2
6336---------
6337* `Fix location of backends in sitenav
6338  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213914>`__
6339  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6340
6341pw_base64
6342---------
6343* `Add module metadata
6344  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214540>`__
6345  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6346
6347pw_bloat
6348--------
6349* `Build and run \`pw bloat\` CLI command in Bazel
6350  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215456>`__
6351* `Add module metadata
6352  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214177>`__
6353  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6354
6355pw_blob_store
6356-------------
6357* `Add module metadata
6358  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214502>`__
6359  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6360
6361pw_bluetooth
6362------------
6363* `Add module metadata
6364  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214575>`__
6365  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6366* `Add HCI StatusCode values
6367  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213553>`__
6368
6369pw_bluetooth_hci
6370----------------
6371* `Add module metadata
6372  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214576>`__
6373  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6374
6375pw_bluetooth_profiles
6376---------------------
6377* `Add module metadata
6378  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214612>`__
6379  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6380
6381pw_bluetooth_proxy
6382------------------
6383The new ``pw::bluetooth::proxy::HasSendAclCapability()`` function indicates
6384whether the proxy has the capability to send ACL packets.
6385
6386* `Remove H4HciPacketSendFn alias
6387  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215221>`__
6388  (issue `#326499764 <https://issues.pigweed.dev/issues/326499764>`__)
6389* `Fix const on sendGattNotify param
6390  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214864>`__
6391  (issue `#326499764 <https://issues.pigweed.dev/issues/326499764>`__)
6392* `Mark unused parameters with [[maybe_unused]]
6393  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214637>`__
6394  (issue `#345526399 <https://issues.pigweed.dev/issues/345526399>`__)
6395* `Add maybe_unused to make downstream happy
6396  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214360>`__
6397  (issue `#344031126 <https://issues.pigweed.dev/issues/344031126>`__)
6398* `Add ProxyHost::HasSendAclCapability()
6399  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214101>`__
6400  (issue `#344030724 <https://issues.pigweed.dev/issues/344030724>`__)
6401* `Update H4HciPacket construction
6402  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214233>`__
6403* `Add sendGattNotify stub
6404  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214106>`__
6405  (issue `#344031126 <https://issues.pigweed.dev/issues/344031126>`__)
6406* `Fix compilation errors
6407  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213733>`__
6408* `Pass H4 as event type plus an HCI span
6409  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213664>`__
6410  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
6411* `Tweak CreateNonInteractingToHostBuffer to take array
6412  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213663>`__
6413  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
6414
6415pw_boot_cortex_m
6416----------------
6417* `Add module metadata
6418  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215458>`__
6419
6420pw_build
6421--------
6422The new ``pw_py_test`` rule wraps ``py_test`` and defaults to setting
6423``target_compatible_with`` to ``host`` only. The new
6424:ref:`pw_elf_to_dump <module-pw_build-bazel-pw_elf_to_dump>` rule takes a
6425binary executable and produces a text file containing the full binary layout.
6426The new :ref:`pw_elf_to_bin <module-pw_build-bazel-pw_elf_to_bin>` rule takes
6427a binary executable and produces a file with all ELF headers removed.
6428
6429* `Move host_backend_alias (part 1)
6430  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215740>`__
6431  (issue `#344654805 <https://issues.pigweed.dev/issues/344654805>`__)
6432* `Add python.install into the default GN group
6433  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215791>`__
6434* `Introduce pw_py_test to bazel
6435  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215258>`__
6436* `Add module metadata
6437  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214506>`__
6438  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6439* `Clarify docs on pw_elf_to_bin
6440  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213616>`__
6441* `Update intro
6442  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214062>`__
6443  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6444* `Add pw_elf_to_dump rule
6445  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212851>`__
6446* `Add pw_elf_to_bin rule
6447  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212671>`__
6448* `Populate executable field in return from link_cc utility
6449  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212631>`__
6450
6451pw_build_info
6452-------------
6453* `Add module metadata
6454  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214616>`__
6455
6456pw_build_mcuxpresso
6457-------------------
6458* `Add module metadata
6459  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214507>`__
6460  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6461
6462pw_bytes
6463--------
6464* `Add module metadata
6465  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214509>`__
6466  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6467
6468pw_channel
6469----------
6470* `Add module metadata
6471  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214621>`__
6472  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6473* `Update function documentation
6474  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213712>`__
6475* `Remove manual registration from epoll channel
6476  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213653>`__
6477
6478pw_checksum
6479-----------
6480* `Add module metadata
6481  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214623>`__
6482  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6483
6484pw_chre
6485-------
6486* `Add module metadata
6487  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214633>`__
6488  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6489
6490pw_chrono
6491---------
6492:ref:`libc time wrappers <module-pw_chrono-libc-time-wrappers>` are now
6493provided to improve compatibility with software not written for embedded
6494systems that depends on ``gettimeofday`` and ``time`` from POSIX.
6495
6496* `Group common backends in the GN build
6497  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215336>`__
6498* `Introduce SystemClock backed link time wrappers
6499  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213551>`__
6500
6501pw_cli
6502------
6503.. _Fish: https://fishshell.com/
6504
6505The ``pw`` and ``pw build`` commands now support `Fish`_ shell completion.
6506
6507* `Fish shell completion
6508  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213734>`__
6509
6510pw_clock_tree
6511-------------
6512The new ``pw::clock_tree::ClockSourceNoOp`` class can be used to satisfy
6513the dependency of a source clock tree element for other clock source classes.
6514The new ``pw::clock_tree::ElementController`` class provides easier integration
6515of optional clock tree logic into existing drivers.
6516
6517* `Introduce ClockSourceNoOp class
6518  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213851>`__
6519  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
6520* `Introduce ElementController class
6521  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212095>`__
6522  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
6523* `Fix source set name and visibility
6524  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212151>`__
6525  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
6526
6527pw_clock_tree_mcuxpresso
6528------------------------
6529* `Comment clean up
6530  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214573>`__
6531  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
6532* `Add ClockMcuxpressoRtc support
6533  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214572>`__
6534  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
6535* `Remove unnecessary pw::
6536  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214494>`__
6537  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
6538* `Add ClockMcuxpressoAudioPll support
6539  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214332>`__
6540  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
6541* `Configure ClkIn as source for osc_clk
6542  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214234>`__
6543  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
6544* `Make Mclk and ClkIn dependent elements
6545  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213853>`__
6546  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
6547* `Move example code out of docs
6548  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213852>`__
6549  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
6550* `Fix source set name and visibility
6551  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212152>`__
6552  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
6553
6554pw_console
6555----------
6556Theme colors are now correctly applied when running ``pw console`` with the
6557``--config-file`` option.
6558
6559* `Reload theme when using a config-file
6560  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214891>`__
6561
6562pw_containers
6563-------------
6564The ``pw::Vector::at()`` function signature was changed to take ``size_t``
6565instead of ``size_type``.  The new ``pw::InlineVarLenEntryQueue::try_push()``
6566function is similar to ``pw::InlineVarLenEntryQueue::push_overwrite()`` but it
6567drops entries instead of overwriting old ones. The new
6568``pw::InlineVarLenEntryQueue::max_size()`` function returns the maximum number
6569of empty entries.
6570
6571* `Make Vector::at() use size_t
6572  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215859>`__
6573* `Disallow deletion from InlineVarLenEntryQueue base
6574  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210639>`__
6575* `InlineVarLenEntryQueue::try_push() function
6576  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213612>`__
6577
6578pw_digital_io
6579-------------
6580* `Remove invalid digital_io_controller reference
6581  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214691>`__
6582
6583pw_digital_io_linux
6584-------------------
6585``pw_digital_io_linux`` now supports input interrupts. The new
6586:ref:`watch <module-pw_digital_io_linux-cli-watch>` command in the CLI
6587tool configures a GPIO line as an input and watches for interrupt events.
6588
6589* `Add trigger option to CLI watch command
6590  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213131>`__
6591* `Add "watch" command
6592  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209596>`__
6593* `Add support for input interrupts
6594  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209595>`__
6595* `Move examples out to compiled source files
6596  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209771>`__
6597* `Update mock_vfs
6598  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209594>`__
6599* `Add log_errno.h
6600  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209593>`__
6601
6602pw_docgen
6603---------
6604* `Update module metadata status badge colors
6605  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214574>`__
6606  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6607* `Add module metadata
6608  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214182>`__
6609  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6610* `Fix search results increasing in width
6611  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215332>`__
6612
6613pw_env_setup
6614------------
6615The new `bootstrap.fish`_ script demonstrates how to bootstrap a Pigweed
6616project from a Fish shell and makes it easier for Fish users to contribute
6617to upstream Pigweed.
6618
6619* `Update clang next version
6620  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212432>`__
6621* `Bootstrap fish-shell support
6622  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/56840>`__
6623
6624pw_grpc
6625-------
6626* `Remove send queue timeout
6627  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214099>`__
6628  (issue `#345088816 <https://issues.pigweed.dev/issues/345088816>`__)
6629
6630pw_ide
6631------
6632* `Add module metadata
6633  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215512>`__
6634* `Preserve modified editor settings
6635  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213670>`__
6636  (issue `#344681641 <https://issues.pigweed.dev/issues/344681641>`__)
6637* `Fix constant Pylance crashes
6638  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213668>`__
6639  (issue `#338607100 <https://issues.pigweed.dev/issues/338607100>`__)
6640
6641pw_log
6642------
6643* `Add module metadata
6644  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214184>`__
6645  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6646* `Cast log level to int32_t
6647  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212092>`__
6648  (issue `#343518613 <https://issues.pigweed.dev/issues/343518613>`__)
6649
6650pw_log_string
6651-------------
6652* `Introduce link time assert() wrapper for newlib
6653  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213072>`__
6654* `Set default log backend
6655  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212832>`__
6656
6657pw_malloc
6658---------
6659``pw_malloc`` now supports :ref:`pw_allocator <module-pw_allocator>`-based
6660backends.
6661
6662* `Add allocator backends
6663  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208417>`__
6664
6665pw_multibuf
6666-----------
6667The new ``pw::multibuf::MultiBuf::IsContiguous()`` method checks if a multibuf
6668is contiguous and the new ``pw::multibuf::MultiBuf::ContiguousSpan()`` method
6669provides a way to access contiguous data as a span. The new ``CopyTo()``,
6670``CopyFrom()``, and ``CopyFromAndTruncate()`` methods also simplify
6671interactions with contiguous byte spans.
6672
6673* `Contiguous span functions
6674  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214859>`__
6675* `Functions for copying into and out of a MultiBuf
6676  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214858>`__
6677* `Truncate after an iterator
6678  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214857>`__
6679* `AdvanceToData in iterator constructor
6680  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214503>`__
6681* `Fix Truncate(0) on empty MultiBuf
6682  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213661>`__
6683* `SimpleAllocatorForTest
6684  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212312>`__
6685
6686pw_multisink
6687------------
6688The new ``pw::multisink::MultiSink::GetUnreadEntriesSize()`` and
6689``pw::multisink::MultiSink::UnsafeGetUnreadEntriesSize()`` methods
6690implement :ref:`seed-0124`. The new ``PW_MULTISINK_CONFIG_LOCK_TYPE``
6691macro configures the underlying lock that's used to guard multisink
6692reads or writes.
6693
6694* `Add GetUnreadEntriesSize to Drain
6695  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213472>`__
6696* `Add option to inject a user defined lock
6697  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213211>`__
6698
6699pw_presubmit
6700------------
6701* `Add --fresh to cmake presubmits
6702  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215736>`__
6703* `Add coverage of rp2040 build
6704  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215231>`__
6705  (issue `#342638018 <https://issues.pigweed.dev/issues/342638018>`__)
6706* `Add module metadata
6707  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214571>`__
6708  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6709* `Remove shellcheck from lintformat program
6710  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213617>`__
6711
6712pw_protobuf
6713-----------
6714* `Add module metadata
6715  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214187>`__
6716  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6717
6718pw_ring_buffer
6719--------------
6720* `Add EntriesSize API to Reader
6721  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213471>`__
6722  (issue `#337150071 <https://issues.pigweed.dev/issues/337150071>`__)
6723
6724pw_router
6725---------
6726* `Add module metadata
6727  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214190>`__
6728  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6729
6730pw_rpc
6731------
6732The Python client API now uses positional-only arguments.
6733
6734* `Use positional-only arguments in Python client API
6735  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215532>`__
6736* `Add module metadata
6737  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214032>`__
6738  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6739* `Fix hyperlink
6740  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213556>`__
6741
6742pw_sensor
6743---------
6744* `Add Bazel support for Python package
6745  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214534>`__
6746
6747pw_spi
6748------
6749* `Fix sitenav location for RP2040 backend
6750  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214031>`__
6751  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6752
6753pw_spi_rp2040
6754-------------
6755* `Add module metadata
6756  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214232>`__
6757  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6758
6759pw_stream
6760---------
6761* `Fix include in mpsc_stream
6762  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215075>`__
6763
6764pw_stream_uart_mcuxpresso
6765-------------------------
6766* `Make dma_stream Write of size 0 succeed
6767  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214151>`__
6768* `InterruptSafeWriter example
6769  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212513>`__
6770  (issue `#343773769 <https://issues.pigweed.dev/issues/343773769>`__)
6771* `Stream example
6772  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212512>`__
6773  (issue `#343773769 <https://issues.pigweed.dev/issues/343773769>`__)
6774* `Use clock tree
6775  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209534>`__
6776  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
6777* `DMA stream example
6778  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212391>`__
6779  (issue `#343773769 <https://issues.pigweed.dev/issues/343773769>`__)
6780
6781pw_sync
6782-------
6783The new ``pw_targets_FREERTOS_BACKEND_GROUP`` GN rule sets up multiple
6784modules to use FreeRTOS backends.
6785
6786* `Group common backends in the GN build
6787  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215336>`__
6788
6789pw_system
6790---------
6791``pw-system-console`` now connects to the first detected port if ``--device``
6792isn't provided and only one port is detected or it shows an interactive
6793prompt if multiple ports are detected. :ref:`target-host-device-simulator-demo`
6794now shows how to run ``pw-system-console`` with ``host_device_simulator`` in
6795Bazel-based projects.
6796
6797* `Console interactive serial port selection
6798  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214912>`__
6799  (issue `#343949763 <https://issues.pigweed.dev/issues/343949763>`__)
6800* `Host device simulator entrypoint
6801  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214972>`__
6802* `Move config variables to config.h
6803  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213811>`__
6804* `Mention that extra libs need alwayslink
6805  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212831>`__
6806* `Add host_device_simulator transitions
6807  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212414>`__
6808
6809pw_target_runner
6810----------------
6811* `Switch to Bazel build
6812  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214059>`__
6813* `Add module metadata
6814  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214317>`__
6815  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6816
6817pw_thread
6818---------
6819* `Group common backends in the GN build
6820  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215336>`__
6821
6822pw_thread_freertos
6823------------------
6824* `Expand comment to help when debugging linker errors
6825  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213669>`__
6826
6827pw_toolchain
6828------------
6829* `Enable PIC on host
6830  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214495>`__
6831* `Add bazel toolchain for cortex-m0plus
6832  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215479>`__
6833  (issue `#346609655 <https://issues.pigweed.dev/issues/346609655>`__)
6834* `Add module metadata
6835  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214351>`__
6836  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6837* `Add IOKit and Security headers to mac toolchains
6838  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214013>`__
6839
6840pw_toolchain_bazel
6841------------------
6842* `Add cortex-a32 mcpu value
6843  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213855>`__
6844  (issue `#342510882 <https://issues.pigweed.dev/issues/342510882>`__)
6845
6846pw_transfer
6847-----------
6848* `Remove unused imports
6849  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215478>`__
6850* `Fix ConcurrentModificationException in handleTimeouts()
6851  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214065>`__
6852  (issue `#322919275 <https://issues.pigweed.dev/issues/322919275>`__)
6853* `Always terminate transfers on stream reopen
6854  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212953>`__
6855
6856pw_uart
6857-------
6858* `Add module metadata
6859  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214252>`__
6860  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6861
6862pw_varint
6863---------
6864* `Add module metadata
6865  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214352>`__
6866  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6867
6868pw_watch
6869--------
6870Watching now works in directories other than ``PW_ROOT``.
6871
6872* `Enable watching from non-PW_ROOT
6873  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215735>`__
6874  (issue `#328083083 <https://issues.pigweed.dev/issues/328083083>`__)
6875
6876pw_web
6877------
6878* `Get icon fonts via Google Fonts URL
6879  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212871>`__
6880  (issue `#332587834 <https://issues.pigweed.dev/issues/332587834>`__)
6881* `Fix last column filling space in log table
6882  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212154>`__
6883
6884Build systems
6885=============
6886
6887Bazel
6888-----
6889* `Stop using deprecated pw_facade aliases
6890  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216151>`__
6891  (issue `#328679085 <https://issues.pigweed.dev/issues/328679085>`__)
6892* `Don't use llvm_toolchain for fuchsia_clang
6893  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215651>`__
6894  (issue `#346354914 <https://issues.pigweed.dev/issues/346354914>`__)
6895* `Fix reference to nonexistent file
6896  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215511>`__
6897* `Roll latest rules_libusb
6898  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214792>`__
6899* `No integration tests in wildcard build
6900  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214056>`__
6901  (issue `#344654806 <https://issues.pigweed.dev/issues/344654806>`__)
6902* `Move integration build config in-repo
6903  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214092>`__
6904  (issue `#344654806 <https://issues.pigweed.dev/issues/344654806>`__)
6905
6906Hardware targets
6907================
6908
6909host_device_simulator
6910---------------------
6911* `Make host_device_simulator_binary \`bazel run\`-able
6912  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214693>`__
6913
6914rp2040
6915------
6916* `Add bazel picotool support
6917  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214861>`__
6918* `Add bazel support for rp2040_utils pylib
6919  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211591>`__
6920  (issue `#342634966 <https://issues.pigweed.dev/issues/342634966>`__)
6921* `Support running tests using the debug probe
6922  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211363>`__
6923* `Add pico/debug probe filtering flags
6924  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212611>`__
6925* `Temporarily disable remaining failing rp2040 tests
6926  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215490>`__
6927* `Fix test runner scripts to correct check if args are specified
6928  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214794>`__
6929* `Support bazel wildcard build on rp2040
6930  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213071>`__
6931  (issue `#343467774 <https://issues.pigweed.dev/issues/343467774>`__)
6932
6933stm32f429i
6934----------
6935* `Add baremetal bazel build support
6936  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214626>`__
6937  (issue `#344661765 <https://issues.pigweed.dev/issues/344661765>`__)
6938
6939OS support
6940==========
6941
6942Zephyr
6943------
6944* `Fix typo
6945  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213271>`__
6946
6947FreeRTOS
6948--------
6949FreeRTOS application function implementations like ``vApplicationStackOverflowHook()``
6950are now shared between multiple hardware targets.
6951
6952* `Share common FreeRTOS function implementations
6953  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213737>`__
6954
6955Docs
6956====
6957The :ref:`modules index <docs-module-guides>` now includes metadata for each
6958module such as a summary of each module and what languages each module
6959supports. The ``pigweed.dev`` sitenav was simplified.
6960:ref:`docs-blog-02-bazel-feature-flags` was published. A "skip to main
6961content" accessibility feature was added to ``pigweed.dev``.
6962
6963* `Fix Python package dependencies for sphinx
6964  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/215852>`__
6965* `Auto-generate modules index from metadata
6966  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214711>`__
6967  (issue `#339741960 <https://issues.pigweed.dev/issues/339741960>`__)
6968* `Update sitenav
6969  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214797>`__
6970* `Update homepage tagline
6971  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213951>`__
6972* `Add "skip to main content" a11y feature
6973  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213659>`__
6974  (issue `#344643289 <https://issues.pigweed.dev/issues/344643289>`__)
6975* `blog: Bazel feature flags
6976  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209922>`__
6977* `Update changelog
6978  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212491>`__
6979
6980Third-party software support
6981============================
6982* `Add @libusb to bazel workspace
6983  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214094>`__
6984* `Symlink probe-rs binary into common location
6985  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214057>`__
6986* `Add probe-rs
6987  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213693>`__
6988
6989mimxrt595
6990---------
6991* `Upgrade to SDK_2_14_0_EVK-MIMXRT59
6992  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212451>`__
6993  (issue `#343775421 <https://issues.pigweed.dev/issues/343775421>`__)
6994
6995GitHub
6996------
6997* `Fix step name
6998  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213692>`__
6999
7000io_bazel_rules_go
7001-----------------
7002* `Update to fork which disables warnings
7003  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/214851>`__
7004
7005pigweed.json
7006============
7007* `Add config for Bazel builders
7008  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/213991>`__
7009  (issue `#275107504 <https://issues.pigweed.dev/issues/275107504>`__)
7010
7011------------
7012May 30, 2024
7013------------
7014Highlights (May 17, 2024 to May 30, 2024):
7015
7016* **Clock management**: The new :ref:`module-pw_clock_tree` module manages
7017  generic clock tree elements such as clocks, clock selectors, and clock
7018  dividers.
7019* **GitHub Actions**: The new :ref:`docs-github-actions` guide shows you
7020  how to set up GitHub Actions to build and test a Bazel-based Pigweed
7021  project when a pull request is received.
7022* **pw_system and Bazel**: :ref:`module-pw_system` usage in Bazel has been
7023  simplified by gathering all required ``pw_system`` components into one
7024  target and providing label flags that can set platform-dependent
7025  dependencies.
7026* **Channels and Linux Epoll**: The new :cpp:class:`pw::channel::EpollChannel`
7027  class sends and receives data through a file descriptor, with read and write
7028  notifications backed by Linux's epoll system.
7029
7030Active SEEDs
7031============
7032Help shape the future of Pigweed! Please visit :ref:`seed-0000`
7033and leave feedback on the RFCs (i.e. SEEDs) marked
7034``Open for Comments``.
7035
7036Modules
7037=======
7038
7039pw_allocator
7040------------
7041* `Add BlockAllocator::MeasureFragmentation
7042  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209933>`__
7043* `Fix Android build
7044  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211871>`__
7045* `Refactor optional Allocator methods
7046  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210402>`__
7047* `Make Init methods infallible
7048  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209044>`__
7049  (issue `#338389412 <https://issues.pigweed.dev/issues/338389412>`__)
7050* `Reduce Block fragmentation
7051  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209538>`__
7052  (issue `#328831791 <https://issues.pigweed.dev/issues/328831791>`__)
7053* `Fix #if PW_HAVE_FEATURE(__cpp_rtti)
7054  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210816>`__
7055  (issue `#341975367 <https://issues.pigweed.dev/issues/341975367>`__)
7056* `Track requested sizes in blocks
7057  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210395>`__
7058* `Fix Android build
7059  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210571>`__
7060  (issue `#A <https://issues.pigweed.dev/issues/N/A>`__)
7061* `Move large values to test fixtures
7062  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210398>`__
7063* `Add AsPmrAllocator
7064  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207170>`__
7065
7066pw_assert
7067---------
7068* `Add missing dep in Android.bp
7069  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211271>`__
7070
7071pw_build
7072--------
7073The new ``PW_MUST_PLACE`` macro ensures that linker script inputs are
7074non-zero sized.
7075
7076* `Introduce PW_MUST_PLACE linker script macro
7077  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211924>`__
7078* `Add deps support to pw_linker_script
7079  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211194>`__
7080  (issue `#331927492 <https://issues.pigweed.dev/issues/331927492>`__)
7081
7082pw_channel
7083----------
7084The new :cpp:class:`pw::channel::EpollChannel` class sends and receives
7085data through a file descriptor, with read and write notifications backed
7086by Linux's epoll system.
7087
7088* `Only open read/write if channel is readable/writable
7089  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212212>`__
7090* `Add EpollChannel
7091  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210813>`__
7092* `Consistent datagram/byte channel aliases
7093  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210796>`__
7094
7095pw_chre
7096-------
7097* `Update CHRE revision
7098  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210011>`__
7099  (issue `#341137451 <https://issues.pigweed.dev/issues/341137451>`__)
7100
7101pw_clock_tree
7102-------------
7103The new :ref:`module-pw_clock_tree` module manages generic clock tree
7104elements such as clocks, clock selectors, and clock dividers.
7105
7106* `Introduce new ClockDivider class
7107  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211292>`__
7108  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
7109* `ClockTree support Element ops
7110  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211149>`__
7111  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
7112* `Introduce Element may_block()
7113  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211148>`__
7114  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
7115* `Generic clock tree management
7116  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204310>`__
7117  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
7118
7119pw_clock_tree_mcuxpresso
7120------------------------
7121The new :ref:`module-pw_clock_tree_mcuxpresso` module is an NXP
7122MCUXPresso backend for :ref:`module-pw_clock_tree`.
7123
7124* `Mcuxpresso module
7125  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204245>`__
7126  (issue `#331672574 <https://issues.pigweed.dev/issues/331672574>`__)
7127
7128pw_config_loader
7129----------------
7130* `Remove unnecessary dep
7131  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210286>`__
7132
7133pw_cpu_exception_cortex_m
7134-------------------------
7135The new crash analysis API provides data about CPU state during exceptions.
7136See :ref:`module-pw_cpu_exception_cortex_m-crash-facade-setup`.
7137
7138* `Add crash analysis API
7139  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204248>`__
7140* `Fix incorrect inputs to util_test
7141  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211551>`__
7142* `Fix checks for ARMv8
7143  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210272>`__
7144
7145pw_emu
7146------
7147* `Exclude tests module from the Pigweed Python package
7148  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211977>`__
7149
7150pw_env_setup
7151------------
7152* `PyPI version bump to 0.0.16
7153  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211136>`__
7154* `Build an extra example pypi distribution
7155  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211134>`__
7156* `Remove f-strings from github_visitor
7157  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210274>`__
7158
7159pw_grpc
7160-------
7161* `Fix warnings in format strings
7162  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211391>`__
7163
7164pw_hex_dump
7165-----------
7166* `Add Android.bp
7167  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212231>`__
7168
7169pw_libcxx
7170---------
7171* `Only enable in clang builds
7172  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211941>`__
7173
7174pw_log_basic
7175------------
7176* `Fixing sign conversion error for logging
7177  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210331>`__
7178
7179pw_multisink
7180------------
7181* `Fix compiler warnings for tests
7182  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212051>`__
7183  (issue `#343480404 <https://issues.pigweed.dev/issues/343480404>`__)
7184
7185pw_preprocessor
7186---------------
7187* `Remove PW_HAVE_FEATURE
7188  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211016>`__
7189  (issue `#341975367 <https://issues.pigweed.dev/issues/341975367>`__)
7190
7191pw_rpc
7192------
7193* `Include FakeChannelOutput in soong target
7194  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209991>`__
7195  (issue `#340350973 <https://issues.pigweed.dev/issues/340350973>`__)
7196
7197pw_spi_mcuxpresso
7198-----------------
7199* `Remove unnecessary debug messages
7200  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210711>`__
7201
7202pw_stream_uart_mcuxpresso
7203-------------------------
7204* `Fix unused parameter warnings
7205  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211571>`__
7206
7207pw_system
7208---------
7209:ref:`module-pw_system` usage in Bazel has been simplified by gathering
7210all required ``pw_system`` components into one target and providing label
7211flags that can set platform-dependent dependencies.
7212
7213* `Simplify pw_system usage in Bazel
7214  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210116>`__
7215  (issue `#341144405 <https://issues.pigweed.dev/issues/341144405>`__)
7216
7217pw_thread
7218---------
7219* `Fix thread snapshot service test
7220  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/212111>`__
7221
7222pw_toolchain
7223------------
7224* `Add manual tag to Rust toolchains
7225  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211934>`__
7226  (issue `#342695883 <https://issues.pigweed.dev/issues/342695883>`__)
7227* `Add clang-apply-replacements plugin
7228  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210405>`__
7229  (issue `#339294894 <https://issues.pigweed.dev/issues/339294894>`__)
7230
7231pw_transfer
7232-----------
7233* `Fix transfer_thread_test initialization order
7234  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210352>`__
7235* `End active transfers when RPC stream changes
7236  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209876>`__
7237
7238pw_uart
7239-------
7240* `Add pw_uart to CMakeLists
7241  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210731>`__
7242
7243pw_unit_test
7244------------
7245* `Don't execute multiple test suites at the same time
7246  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210531>`__
7247* `Ensure alignment of test fixtures
7248  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210278>`__
7249
7250pw_web
7251------
7252* `Move shoelace split panel import
7253  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211940>`__
7254* `Add split/resize view guide in docs
7255  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211471>`__
7256* `Implement split log views with resize
7257  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209471>`__
7258  (issue `#333891204 <https://issues.pigweed.dev/issues/333891204>`__)
7259
7260Build
7261=====
7262
7263Bazel
7264-----
7265Clang's ``AddressSanitizer`` is now supported. See
7266:ref:`docs-automated-analysis-clang-sanitizers`.
7267
7268* `Support asan in Bazel
7269  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211369>`__
7270  (issue `#301487567 <https://issues.pigweed.dev/issues/301487567>`__)
7271* `Update rules_rust to 0.45.1
7272  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211939>`__
7273  (issue `#342673389 <https://issues.pigweed.dev/issues/https://pwbug.dev/342673389>`__)
7274* `Explicitly load rules_python in BUILD.bazel files
7275  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211361>`__
7276
7277Targets
7278=======
7279
7280rp2040
7281------
7282* `Additional bazel build file coverage
7283  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211351>`__
7284  (issue `#303255049 <https://issues.pigweed.dev/issues/303255049>`__,
7285  issue `#305746219 <https://issues.pigweed.dev/issues/305746219>`__)
7286
7287* `Enable thread high water accounting
7288  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210831>`__
7289* `Update docs to add missing picotool dependency
7290  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210811>`__
7291* `Save test run log files
7292  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210814>`__
7293* `Increase RPC thread stack size to 16K
7294  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210832>`__
7295* `Allow using rp2040 devices in bootloader mode
7296  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210525>`__
7297* `Refresh target docs
7298  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210404>`__
7299* `Update openocd flashing instructions
7300  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210400>`__
7301* `Increase device_detector verbosity
7302  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210411>`__
7303* `Add upstream Bazel platform definition
7304  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211592>`__
7305* `Renable tests that pass with larger stack frames
7306  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211147>`__
7307* `Raise minimal stack size to 1KB
7308  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210517>`__
7309* `Replace exceptions with logging
7310  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210396>`__
7311
7312OS support
7313==========
7314
7315freertos
7316--------
7317* `Clarify Bazel documentation
7318  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211052>`__
7319
7320Docs
7321====
7322The new :ref:`docs-github-actions` guide shows you how to set up GitHub Actions
7323to build and test a Pigweed project when a pull request is received.
7324
7325* `Add notes about GitHub Actions
7326  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211135>`__
7327  (issue `#338083578 <https://issues.pigweed.dev/issues/338083578>`__)
7328* `Instructions for freertos.BUILD.bazel
7329  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211193>`__
7330* `Create files in current directory
7331  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206196>`__
7332* `Update changelog
7333  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210285>`__
7334
7335Miscellaneous
7336=============
7337.. common_typos_disable
7338
7339* `Fix typo succesfully->successfully
7340  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210671>`__
7341* `Update Android.bp after GetAlignedSubspan move
7342  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210518>`__
7343* `Add link to format
7344  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/211011>`__
7345
7346.. common_typos_enable
7347
7348------------
7349May 16, 2024
7350------------
7351Highlights (May 2, 2024 to May 16, 2024):
7352
7353* **Coroutines**: You can now create asynchronous tasks using C++20
7354  :ref:`coroutines <module-pw_async2-guides-coroutines>`.
7355* **Rust with Bazel**: The Rust toolchain can now be used by downstream projects
7356  using Bazel.
7357* **More MCUXpresso support**: Several modules have additional support for
7358  projects built using the NXP MCUXpresso SDK, including multiple core support
7359  in :ref:`module-pw_build_mcuxpresso`, a new initiator in
7360  :ref:`module-pw_i2c_mcuxpresso`, a new responder in
7361  :ref:`module-pw_spi_mcuxpresso`, and a new :ref:`module-pw_dma_mcuxpresso`
7362  module.
7363
7364Active SEEDs
7365============
7366Help shape the future of Pigweed! Please visit :ref:`seed-0000`
7367and leave feedback on the RFCs (i.e. SEEDs) marked
7368``Open for Comments``.
7369
7370.. Note: There is space between the following section headings
7371.. and commit lists to remind you to write a summary for each
7372.. section. If a summary is not needed, delete the extra
7373.. space.
7374
7375Modules
7376=======
7377
7378pw_allocator
7379------------
7380* `Fix data race
7381  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208412>`__
7382  (issue `#333386065 <https://issues.pigweed.dev/issues/333386065>`__)
7383* `Add BucketBlockAllocator
7384  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198155>`__
7385* `Improve namespacing
7386  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206153>`__
7387* `Use singletons for stateless allocators
7388  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207337>`__
7389
7390pw_assert
7391---------
7392* `Ensure condition does not contain stray %
7393  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208140>`__
7394  (issue `#337268540 <https://issues.pigweed.dev/issues/337268540>`__)
7395
7396pw_async2
7397---------
7398C++20 users can now define asynchronous tasks using
7399:ref:`module-pw_async2-guides-coroutines`.
7400
7401* `Move PW_CO_TRY functions
7402  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209911>`__
7403* `Add Coro<T> coroutine API
7404  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207690>`__
7405
7406pw_bloat
7407--------
7408Padding is now included as part of utilization in code size reports. This allows
7409developers to monitor changes in application size that smaller than the used
7410space alignment defined in the linker script.
7411
7412* `Add padding to utilization
7413  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209972>`__
7414  (issue `#276370736 <https://issues.pigweed.dev/issues/276370736>`__)
7415
7416pw_bluetooth
7417------------
7418* `Add a constant for max controller delay
7419  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209271>`__
7420* `Put cmake tests in modules group
7421  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208897>`__
7422* `Disable emboss enum traits
7423  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208591>`__
7424  (issue `#339029458 <https://issues.pigweed.dev/issues/339029458>`__)
7425* `Remove hci_vendor
7426  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208313>`__
7427  (issue `#338269786 <https://issues.pigweed.dev/issues/338269786>`__)
7428
7429pw_bluetooth_proxy
7430------------------
7431* `Also support V2 of LE read buffer event
7432  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209879>`__
7433  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7434* `Use LE read buffer event
7435  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209878>`__
7436  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7437* `Removing trailing comma in PW_LOG call
7438  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209231>`__
7439  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7440* `Allow setting the # of credits to reserve
7441  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208895>`__
7442  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7443* `Add cmake build rules
7444  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208653>`__
7445  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7446* `Update tests to remove RVNO assumptions
7447  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208652>`__
7448  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7449* `Reserve ACL LE slots from host
7450  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207671>`__
7451  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7452
7453pw_boot_cortex_m
7454----------------
7455* `Emit pw_boot_Entry without prologue
7456  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208931>`__
7457  (issue `#339107121 <https://issues.pigweed.dev/issues/339107121>`__)
7458
7459pw_build
7460--------
7461* `pw_cc_test.lib fixup
7462  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210231>`__
7463  (issue `#307825072 <https://issues.pigweed.dev/issues/307825072>`__,
7464  issue `#341109859 <https://issues.pigweed.dev/issues/341109859>`__)
7465* `Fix type hint
7466  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208137>`__
7467  (issue `#338462905 <https://issues.pigweed.dev/issues/338462905>`__)
7468
7469pw_build_mcuxpresso
7470-------------------
7471:ref:`module-pw_build_mcuxpresso` now can support multiple device cores.
7472
7473* `Support multiple cores
7474  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208654>`__
7475
7476pw_config_loader
7477----------------
7478* `Add missing types dep
7479  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210236>`__
7480
7481pw_cpu_exception_cortex_m
7482-------------------------
7483* `Add error flag masks
7484  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210072>`__
7485* `Fix PSP unit test
7486  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210071>`__
7487
7488pw_digital_io_linux
7489-------------------
7490* `Add test_utils.h for ASSERT_OK and friends
7491  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209592>`__
7492* `Minor updates to OwnedFd
7493  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209591>`__
7494* `Refactor test
7495  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196051>`__
7496
7497pw_dma_mcuxpresso
7498-----------------
7499:ref:`module-pw_dma_mcuxpresso` is a new module for working with an MCUXpresso
7500DMA controller.
7501
7502* `Module for working with NXP DMA controller
7503  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208655>`__
7504
7505pw_docs
7506-------
7507* `Add inline search to sidebar
7508  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207674>`__
7509
7510pw_env_setup
7511------------
7512* `Remove f-strings from github_visitor
7513  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210274>`__
7514* `Change Bazel library name
7515  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210198>`__
7516  (issue `#340328100 <https://issues.pigweed.dev/issues/340328100>`__)
7517* `Add GitHub environment visitor
7518  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210045>`__
7519  (issue `#340900493 <https://issues.pigweed.dev/issues/340900493>`__)
7520* `Bazel support for config_file
7521  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209913>`__
7522  (issue `#340328100 <https://issues.pigweed.dev/issues/340328100>`__)
7523
7524pw_format
7525---------
7526* `Add Rust support for field width and zero padding
7527  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208898>`__
7528* `Add Rust support for formatting integers in hex
7529  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208415>`__
7530* `Add test for escaped curly brackets
7531  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208291>`__
7532* `Refactor format string parsing for better core::fmt support
7533  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208656>`__
7534
7535pw_i2c
7536------
7537* `Update OWNERS
7538  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208413>`__
7539
7540pw_i2c_mcuxpresso
7541-----------------
7542The new ``I3cMcuxpressoInitiator`` implements the ``pw_i2c`` initiator interface
7543using the MCUXpresso I3C driver, allowing normal I2C API's to work after setup.
7544
7545* `Fix Clang compilation
7546  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209191>`__
7547* `Add i3c initiator
7548  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208136>`__
7549* `Remove swatiwagh from OWNERS
7550  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208671>`__
7551
7552pw_ide
7553------
7554* `Add .pw_ide.user.yaml to .gitignore
7555  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208894>`__
7556* `Raise specific error on bad settings file
7557  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208132>`__
7558  (issue `#336799314 <https://issues.pigweed.dev/issues/336799314>`__)
7559
7560pw_libcxx
7561---------
7562Added initial support for using LLVM's `libcxx <https://libcxx.llvm.org/>`__ as
7563a standard C++ library implementation.
7564
7565* `Minimal implementation
7566  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201918>`__
7567
7568pw_log
7569------
7570Logging messages with untyped string arguments is now supported in the Rust
7571implementation.
7572
7573.. todo-check: disable
7574
7575* `Make TODO actionable
7576  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209571>`__
7577* `Add core::fmt style format string support to Rust API
7578  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207331>`__
7579* `Rename Rust logging API to be less verbose
7580  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207330>`__
7581* `Add Rust support for untyped strings
7582  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206673>`__
7583
7584.. todo-check: enable
7585
7586pw_multibuf
7587-----------
7588* `Remove deprecated Chunk::DiscardFront
7589  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206676>`__
7590
7591pw_package
7592----------
7593* `Suppress package progress messages
7594  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208331>`__
7595
7596pw_presubmit
7597------------
7598* `Auto fix unsorted-dict-items
7599  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209881>`__
7600  (issue `#340637744 <https://issues.pigweed.dev/issues/340637744>`__)
7601* `Fix missing pico-sdk for docs_build
7602  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209931>`__
7603* `Add repo tool API
7604  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179230>`__
7605* `Exclude all OWNERS from copyright
7606  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209031>`__
7607
7608pw_proto
7609--------
7610* `Create genrule for raw rpc with prefix
7611  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209992>`__
7612  (issue `#340749161 <https://issues.pigweed.dev/issues/340749161>`__)
7613
7614pw_protobuf
7615-----------
7616* `Build common.proto with Nanopb+Soong
7617  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209851>`__
7618  (issue `#340350973 <https://issues.pigweed.dev/issues/340350973>`__)
7619
7620pw_protobuf_compiler
7621--------------------
7622* `Disable layering check less
7623  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209111>`__
7624  (issue `#323749176 <https://issues.pigweed.dev/issues/323749176>`__)
7625* `Fix name collisions
7626  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208658>`__
7627* `Disable layering_check
7628  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208932>`__
7629  (issue `#339280821 <https://issues.pigweed.dev/issues/339280821>`__)
7630* `Fix bazel failure if proto dir is empty
7631  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208135>`__
7632  (issue `#328311416 <https://issues.pigweed.dev/issues/328311416>`__)
7633* `Add a no_prefix test
7634  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208138>`__
7635  (issue `#328311416 <https://issues.pigweed.dev/issues/328311416>`__)
7636* `Tests fail to build under cmake
7637  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208271>`__
7638  (issue `#338622044 <https://issues.pigweed.dev/issues/338622044>`__)
7639
7640pw_result
7641---------
7642* `Fix typo in template member
7643  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209667>`__
7644  (issue `#339794389 <https://issues.pigweed.dev/issues/339794389>`__)
7645
7646pw_rpc
7647------
7648* `Include FakeChannelOutput in soong target
7649  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209991>`__
7650  (issue `#340350973 <https://issues.pigweed.dev/issues/340350973>`__)
7651* `Update docs for channel ID remapping
7652  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209431>`__
7653* `Build compatibility fixes
7654  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208893>`__
7655* `Fix macro name in docs and comments
7656  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208311>`__
7657
7658pw_spi_mcuxpresso
7659-----------------
7660The :ref:`module-pw_spi_mcuxpresso` module now includes an
7661``McuxpressoResponder`` useing the SPI and DMA drivers from the NXP MCUXpresso
7662SDK.
7663
7664* `Add responder implementation
7665  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208657>`__
7666
7667pw_stm32cube_build
7668------------------
7669* `Fix a label flag name in documentation
7670  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208231>`__
7671
7672pw_sys_io_rp2040
7673----------------
7674* `Bazel build file update
7675  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209877>`__
7676  (issue `#261603269 <https://issues.pigweed.dev/issues/261603269>`__,
7677  issue `#300318025 <https://issues.pigweed.dev/issues/300318025>`__)
7678
7679pw_sys_io_stdio
7680---------------
7681* `Expand allowed uses beyond host
7682  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208511>`__
7683
7684pw_sys_io_stm32cube
7685-------------------
7686* `Fix build for f1xx family
7687  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208471>`__
7688
7689pw_tokenizer
7690------------
7691* `Clean up rust docs
7692  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208416>`__
7693
7694pw_toolchain
7695------------
7696Pigweed's Rust toolchain can now be used by downstream projects.
7697
7698* `Fix typos in newlib_os_interface_stubs.cc
7699  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209952>`__
7700* `Add clang-apply-replacements plugin
7701  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209539>`__
7702  (issue `#339294894 <https://issues.pigweed.dev/issues/339294894>`__)
7703* `Support Rust toolchains in downstream projects
7704  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209871>`__
7705* `Add clang-apply-replacements plugin
7706  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208896>`__
7707  (issue `#339294894 <https://issues.pigweed.dev/issues/339294894>`__)
7708* `Fix CMake build on macOS
7709  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208139>`__
7710* `Add no-canonical-system-headers
7711  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208156>`__
7712  (issue `#319665090 <https://issues.pigweed.dev/issues/319665090>`__)
7713
7714pw_trace_tokenized
7715------------------
7716* `Build compatibility fixes
7717  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208893>`__
7718
7719pw_transfer
7720-----------
7721The transfer service now ends active transfers when the underlying stream
7722changes, avoiding a case where a transfer could become stuck.
7723
7724* `End active transfers when RPC stream changes
7725  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209876>`__
7726* `Add tests for GetResourceStatus
7727  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209753>`__
7728* `Add py_proto_library target for update_bundle_proto
7729  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209731>`__
7730* `GetResoureStatus fix missing return
7731  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208491>`__
7732* `Lock resource_responder_ access
7733  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208251>`__
7734
7735pw_unit_test
7736------------
7737* `Add missing :config dependency for gtest backend
7738  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208472>`__
7739
7740Build
7741=====
7742
7743bazel
7744-----
7745* `Ignore reformatting change in git blame
7746  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210111>`__
7747  (issue `#340637744 <https://issues.pigweed.dev/issues/340637744>`__)
7748* `Fix unsorted-dict-items instances
7749  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209880>`__
7750  (issue `#340637744 <https://issues.pigweed.dev/issues/340637744>`__)
7751* `Remove unnecessary .bazelrc flag
7752  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208659>`__
7753  (issue `#319665090 <https://issues.pigweed.dev/issues/319665090>`__)
7754* `Re-enable sandbox_hermetic_tmp
7755  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208312>`__
7756  (issue `#319665090 <https://issues.pigweed.dev/issues/319665090>`__)
7757
7758Targets
7759=======
7760
7761targets/rp2040
7762--------------
7763* `pre_init and freertos config
7764  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209554>`__
7765  (issue `#261603269, 300318025 <https://issues.pigweed.dev/issues/261603269, 300318025>`__)
7766
7767Docs
7768====
7769* `Update changelog
7770  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208171>`__
7771
7772SEEDs
7773=====
7774
7775SEED-0116
7776---------
7777* `Set status to On Hold
7778  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208831>`__
7779
7780Third party
7781===========
7782
7783third_party/emboss
7784------------------
7785* `Use absolute paths in source dependencies
7786  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/209131>`__
7787  (issue `#339467547 <https://issues.pigweed.dev/issues/339467547>`__)
7788* `Update emboss repo to tag v2024.0501.215421
7789  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208314>`__
7790  (issue `#338675057 <https://issues.pigweed.dev/issues/338675057>`__)
7791* `Add additional owners for emboss
7792  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208631>`__
7793
7794third_party/freertos
7795--------------------
7796* `Add CM3 support to Bazel build
7797  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210211>`__
7798
7799third_party/perfetto
7800--------------------
7801* `Rename proto targets
7802  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210040>`__
7803* `Add third party perfetto repo
7804  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203618>`__
7805* `Copybara import
7806  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207490>`__
7807
7808Miscellaneous
7809=============
7810* `Run clang-format
7811  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208911>`__
7812* `Add roller as WORKSPACE owner
7813  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/208900>`__
7814  (issue `#245397913 <https://issues.pigweed.dev/issues/245397913>`__)
7815
7816-----------
7817May 1, 2024
7818-----------
7819
7820Highlights (Apr 19, 2024 to May 1, 2024):
7821
7822* **Thread kickoff via pw::Function:** Revamped the Thread API to use
7823  pw::Function. The original Thread API was created before pw::Function was
7824  stable; this change modernizes and increases usability of the Thread API.
7825* **Thread creation SEED:** Creating threads in Pigweed is difficult due to our
7826  strict adherence to portability. We're considering creating an additional API
7827  that is more usable but less portable than the current approach.
7828* **Transfer:** Adaptive windowing got a Java implementation, and improvements
7829  to adaptive windowing in C++.
7830* **Bluetooth:** Initial CLs towards a Bluetooth proxy.
7831
7832Active SEEDs
7833============
7834Help shape the future of Pigweed! Please visit :ref:`seed-0000`
7835and leave feedback on the RFCs (i.e. SEEDs) marked
7836``Open for Comments``.
7837
7838Modules
7839=======
7840
7841pw_allocator
7842------------
7843Added two new allocators: BuddyAlloctor and BumpAllocator (also known as an
7844arena allocator). Various cleanups and fixes, including splitting the
7845Block-based allocators to their own files.
7846
7847* `Add missing return statement
7848  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207171>`__
7849  (issue `#337761967 <https://issues.pigweed.dev/issues/337761967>`__)
7850* `Remove conflict marker
7851  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206590>`__
7852* `Move FallbackAllocator implementation
7853  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206174>`__
7854* `Clean up LibCAllocatorTest
7855  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206173>`__
7856* `Move block allocators to separate files
7857  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198154>`__
7858* `Add BuddyAllocator
7859  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195952>`__
7860* `Make AllMetrics internal
7861  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205737>`__
7862* `Fix SynchonizedAllocator data race
7863  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205753>`__
7864  (issue `#333386065 <https://issues.pigweed.dev/issues/333386065>`__)
7865* `Add BumpAllocator
7866  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195953>`__
7867
7868pw_assert
7869---------
7870* `Fix support for print_and_abort in Bazel
7871  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206853>`__
7872  (issue `#337271435 <https://issues.pigweed.dev/issues/337271435>`__)
7873
7874pw_async
7875--------
7876* `Add missing dispatcher facades to CMake
7877  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204873>`__
7878  (issue `#335866562 <https://issues.pigweed.dev/issues/335866562>`__)
7879
7880pw_bluetooth
7881------------
7882Continue filling out Bluetooth packet definitions; as well as some API
7883extensions for e.g. RSSI control.
7884
7885* `Add header alias in command complete events
7886  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207552>`__
7887  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7888* `Add Event Codes to emboss
7889  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207510>`__
7890  (issue `#338068316 <https://issues.pigweed.dev/issues/338068316>`__)
7891* `Add opcode_enum to command and response event
7892  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207335>`__
7893  (issue `#338068316 <https://issues.pigweed.dev/issues/338068316>`__)
7894* `Sync with recent APCF changes
7895  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205921>`__
7896  (issue `#336608891 <https://issues.pigweed.dev/issues/336608891>`__)
7897* `Define Common Data Types
7898  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207470>`__
7899  (issue `#336608891 <https://issues.pigweed.dev/issues/336608891>`__)
7900* `Add LoopbackCommandEvent
7901  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205920>`__
7902  (issue `#336579564 <https://issues.pigweed.dev/issues/336579564>`__)
7903* `Support Read RSSI command and event
7904  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205919>`__
7905  (issue `#336566041 <https://issues.pigweed.dev/issues/336566041>`__)
7906* `Comment why we include all emboss headers in emboss_test
7907  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203637>`__
7908  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7909* `Correct emboss path in doc example
7910  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204811>`__
7911  (issue `#326499650 <https://issues.pigweed.dev/issues/326499650>`__)
7912
7913pw_bluetooth_*
7914--------------
7915* `Formatting fixes
7916  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204750>`__
7917
7918pw_bluetooth_proxy
7919------------------
7920Start building the Bluetooth proxy subsystem.
7921
7922* `Rename ProcessH4 to HandleH4
7923  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207651>`__
7924  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7925* `Rename passthrough_test.cc to proxy_host_test.cc
7926  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207670>`__
7927  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7928* `Move ProxyHost methods to .cc
7929  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207333>`__
7930  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7931* `Rename HciProxy to ProxyHost
7932  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207450>`__
7933  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7934* `Delete policies functionality
7935  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207332>`__
7936  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7937* `Add some emboss helper functions
7938  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205741>`__
7939  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7940* `Template test emboss packet creation
7941  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205740>`__
7942  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7943* `Fix ordering of TEST arguments
7944  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205739>`__
7945  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
7946
7947pw_build
7948--------
7949* `Add a `test_main` param to `pw_cc_test`
7950  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206851>`__
7951  (issue `#337277617 <https://issues.pigweed.dev/issues/337277617>`__)
7952* `Fix using pw_cc_blob_library target in external repos
7953  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206552>`__
7954
7955pw_build_info
7956-------------
7957* `Make the python module importable
7958  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206030>`__
7959
7960pw_cli
7961------
7962New SEED creation tool reduces the burden to create SEEDs. This will open the
7963door to more contributors creating SEEDs for Pigweed changes and enhancements.
7964
7965* `Add SEED creation to CLI tool
7966  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186762>`__
7967* `Handle custom arguments in tools
7968  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204192>`__
7969* `Add git_repo.py and test to Bazel build
7970  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204871>`__
7971
7972pw_containers
7973-------------
7974* `Omit size on FlatMap construction
7975  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201030>`__
7976
7977pw_cpu_exception_cortex_m
7978-------------------------
7979* `Add util_test to tests
7980  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207791>`__
7981
7982pw_digital_io_linux
7983-------------------
7984* `Move OwnedFd to its own header file
7985  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207831>`__
7986
7987pw_env_setup
7988------------
7989* `Update default sysroot version
7990  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204244>`__
7991  (issue `#335438711 <https://issues.pigweed.dev/issues/335438711>`__)
7992
7993pw_format
7994---------
7995* `Better explain core::fmt whitespace parsing in ccomments
7996  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206671>`__
7997* `Add support for core::fmt style format strings
7998  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203830>`__
7999
8000pw_grpc
8001-------
8002* `Support fragmented gRPC messages if an allocator is provided
8003  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204431>`__
8004  (issue `#323924487 <https://issues.pigweed.dev/issues/323924487>`__)
8005
8006pw_module
8007---------
8008* `Include :authors: in generated SEED file
8009  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206674>`__
8010
8011pw_presubmit
8012------------
8013* `Separate 'bazel info' stderr
8014  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206350>`__
8015  (issue `#332357274 <https://issues.pigweed.dev/issues/332357274>`__)
8016* `Save 'bazel info output_base'
8017  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206270>`__
8018* `Remove --verbose_explanations flag
8019  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205933>`__
8020* `Use _LOG global for logging
8021  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205913>`__
8022* `RST format updates
8023  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204241>`__
8024* `Allow disabling hook creation
8025  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205912>`__
8026* `Drop '.' from Bazel symlinks
8027  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204870>`__
8028  (issue `#332357274 <https://issues.pigweed.dev/issues/332357274>`__)
8029
8030pw_protobuf
8031-----------
8032* `Fix support for import_prefix on protos with options
8033  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204671>`__
8034
8035pw_rpc
8036------
8037Enhancements in pw_rpc to better integrate with pw_grpc.
8038
8039* `Add private method for sending internal::Packet directly
8040  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185669>`__
8041  (issue `#319162657 <https://issues.pigweed.dev/issues/319162657>`__)
8042
8043pw_rust
8044-------
8045* `Build examples in presubmit
8046  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207338>`__
8047  (issue `#337951363 <https://issues.pigweed.dev/issues/337951363>`__)
8048* `Fix Rust tokenized logging example
8049  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206672>`__
8050
8051pw_sensors
8052----------
8053Sensors subsystem continues moving along; note that most of the discussion and
8054development is happening in the SEEDs.
8055
8056* `Add support for triggers
8057  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203860>`__
8058  (issue `#293466822 <https://issues.pigweed.dev/issues/293466822>`__)
8059
8060pw_snapshot
8061-----------
8062* `Add python processor tests
8063  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205761>`__
8064* `Fix Bazel builds
8065  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205090>`__
8066
8067pw_spi_mcuxpresso
8068-----------------
8069* `Rename flexspi to flexio_spi
8070  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205711>`__
8071* `Fix Bazel build
8072  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205710>`__
8073
8074pw_stream_uart_mcuxpresso
8075-------------------------
8076* `Add interrupt safe write-only UART stream
8077  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207414>`__
8078
8079pw_string
8080---------
8081* `Add ToString for iterables
8082  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206650>`__
8083* `Add missing array include
8084  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204211>`__
8085
8086pw_thread
8087---------
8088API change to bring pw_thread up to date with pw::Function; see overview.
8089
8090* `Use pw::Function to start threads
8091  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205760>`__
8092  (issue `#243018475 <https://issues.pigweed.dev/issues/243018475>`__)
8093* `Fix pw_thread_zephyr compilability
8094  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206970>`__
8095
8096pw_thread_threadx
8097-----------------
8098* `Remove unused dependency
8099  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207191>`__
8100
8101pw_tls_client
8102-------------
8103* `Add CMake facades
8104  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204874>`__
8105  (issue `#335878898 <https://issues.pigweed.dev/issues/335878898>`__)
8106
8107pw_tokenizer
8108------------
8109Enhance the C++ host-side decoder to better handle the full suite of
8110capabilities, in particulaur, recursive decoding; also some build fixes.
8111
8112* `Add DecodeOptionallyTokenizedData
8113  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206070>`__
8114* `Switch detokenize.h docs to Doxygen
8115  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205751>`__
8116* `Support arbitrary recursion in C++ detokenizer
8117  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205770>`__
8118* `Add missing CMake dep
8119  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204316>`__
8120
8121pw_toolchain
8122------------
8123* `Add clang-tidy suggestion
8124  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206675>`__
8125
8126pw_transfer
8127-----------
8128Adaptive windowing improvements, including C++ enhancementsn to better handle
8129small window sizes, as well as adding a Java implementation.
8130
8131* `Add resource_id to all GetResourceStatus responses
8132  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207350>`__
8133  (issue `#336364832 <https://issues.pigweed.dev/issues/336364832>`__)
8134* `Assume a minimum window size when reserving space
8135  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206890>`__
8136* `Attempt to recover when receiving invalid size
8137  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206632>`__
8138* `Implement adaptive windowing in Java
8139  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/147511>`__
8140
8141pw_unit_test
8142------------
8143* `Add support for a test_main in CMake
8144  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204872>`__
8145  (issue `#335865646 <https://issues.pigweed.dev/issues/335865646>`__)
8146* `Standardize ASSERT_OK_AND_ASSIGN
8147  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205946>`__
8148* `Clarify status macros are gunit-only
8149  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206050>`__
8150* `Add IWYU export/private pragmas
8151  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204151>`__
8152  (issue `#335291547 <https://issues.pigweed.dev/issues/335291547>`__)
8153
8154pw_web
8155------
8156* `Fix icons in packaged version
8157  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207551>`__
8158* `Fix text download format
8159  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206551>`__
8160* `NPM version bump to 0.0.19
8161  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206330>`__
8162* `Add user guide page for features and filter syntax
8163  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203632>`__
8164  (issue `#307560371 <https://issues.pigweed.dev/issues/307560371>`__)
8165
8166Docs
8167====
8168
8169docs
8170----
8171* `Mention @deprecated in the Doxygen style guide
8172  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205762>`__
8173* `Update module docs contributor guidelines
8174  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205742>`__
8175* `Add GitHub pull request template
8176  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205810>`__
8177* `Require Bazel+GN+CMake for new contributions
8178  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204650>`__
8179* `Update changelog
8180  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204203>`__
8181
8182SEEDs
8183=====
8184* SEED-0124: `Getting Used Size from Multisink
8185  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188670>`__
8186  (issue `#326854807 <https://issues.pigweed.dev/issues/326854807>`__) landed
8187* SEED-0128: `Easier thread creation
8188  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206631>`__ started
8189* SEED-0129: `Support PW_ASSERT with non-argument message
8190  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207150>`__ started
8191
8192Miscellaneous
8193=============
8194* `Run clang-format
8195  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207412>`__
8196* `Remove remaining usages of legacy thread entry
8197  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206856>`__
8198* `Replace `string_view&` with `string_view`
8199  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204591>`__
8200
8201.bazelversion
8202-------------
8203* `Add file
8204  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205918>`__
8205  (issue `#336617748 <https://issues.pigweed.dev/issues/336617748>`__)
8206
8207Third party
8208===========
8209* boringssl: `Add CMake integration
8210  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204875>`__
8211  (issue `#335880025 <https://issues.pigweed.dev/issues/335880025>`__)
8212* emboss: `Update emboss repo to tag v2024.0419.155605
8213  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204202>`__
8214  (issue `#335724776 <https://issues.pigweed.dev/issues/335724776>`__)
8215* emboss: `Use COMPILE_LANGUAGE:CXX
8216  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/205670>`__
8217  (issue `#336267050 <https://issues.pigweed.dev/issues/336267050>`__)
8218* fuchsia: `Add defer.h to Bazel build defs
8219  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/206854>`__
8220  (issue `#337275846 <https://issues.pigweed.dev/issues/337275846>`__)
8221* npm: `Update package-lock.json
8222  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/207336>`__
8223
8224------------
8225Apr 18, 2024
8226------------
8227
8228.. changelog_highlights_start
8229
8230Highlights (Apr 4, 2024 to Apr 18, 2024):
8231
8232* The Python and C++ interfaces of ``pw_transfer`` now support
8233  :ref:`adaptive windowing <module-pw_transfer-windowing>`.
8234* :ref:`SEED 0117: I3C <seed-0117>` was accepted.
8235* The new :ref:`docs-quickstart-zephyr` shows you how to set up a
8236  C++-based Zephyr project that's ready to use Pigweed.
8237
8238.. changelog_highlights_end
8239
8240Active SEEDs
8241============
8242Help shape the future of Pigweed! Please visit :ref:`seed-0000`
8243and leave feedback on the RFCs (i.e. SEEDs) marked
8244``Open for Comments``.
8245
8246Modules
8247=======
8248
8249pw_allocator
8250------------
8251The new :cpp:class:`pw::allocator::TypedPool` class is a slab allocator
8252that can allocate a specific object with very low overhead.
8253``pw::allocator::TypedPool`` is implemented using the new
8254:cpp:class:`pw::allocator::Pool` interface.
8255``pw::allocator::TrackingAllocatorImpl`` was renamed to
8256``pw::allocator::TrackingAllocator``.
8257
8258* `Add missing soong deps
8259  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203613>`__
8260* `Add Pool
8261  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195540>`__
8262* `Update OWNERS
8263  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203211>`__
8264* `Rename TrackingAllocatorImpl
8265  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203150>`__
8266  (issue `#326509341 <https://issues.pigweed.dev/issues/326509341>`__)
8267
8268pw_async2
8269---------
8270The new :cpp:class:`pw::async2::PendableAsTask` class is a ``Task`` that
8271delegates to a type with a ``Pend`` method.
8272
8273* `Add PendableAsTask
8274  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201920>`__
8275
8276pw_blob_store
8277-------------
8278The ``pw_add_library()`` call for the ``pw_blob_store`` target now compiles
8279as ``STATIC`` instead of ``INTERFACE`` to be more in line with the Bazel
8280build.
8281
8282* `Fix CMakeLists.txt pw_add_library()
8283  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203134>`__
8284
8285pw_bluetooth
8286------------
8287* `Formatting fixes
8288  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204315>`__
8289* `LEGetVendorCapabilitiesCommandCompleteEvent v1.04 fields
8290  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204198>`__
8291* `Add versions - LEGetVendorCapabilitiesCommandCompleteEvent
8292  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203795>`__
8293  (issue `#332924521 <https://issues.pigweed.dev/issues/332924521>`__)
8294* `Add EventMask and temp field in SetEventMaskCommand
8295  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192256>`__
8296  (issue `#42068631 <https://issues.pigweed.dev/issues/42068631>`__)
8297* `Store length max in virtual field
8298  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201794>`__
8299* `Define LEReadMaximumAdvertisingDataLengthCommandComplete
8300  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201951>`__
8301  (issue `#312898345 <https://issues.pigweed.dev/issues/312898345>`__)
8302
8303pw_bluetooth_sapphire
8304---------------------
8305In CIPD ``bt-host`` artifacts are now uploaded to ``fuchsia/prebuilt/bt-host``.
8306
8307* `Iterators
8308  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203855>`__
8309  (issue `#333448202 <https://issues.pigweed.dev/issues/333448202>`__)
8310* `Change CIPD upload path
8311  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202690>`__
8312  (issue `#321267610 <https://issues.pigweed.dev/issues/321267610>`__)
8313* `Bump @fuchsia_sdk
8314  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202490>`__
8315  (issue `#329933586 <https://issues.pigweed.dev/issues/329933586>`__,
8316  issue `#321267476 <https://issues.pigweed.dev/issues/321267476>`__)
8317
8318pw_build
8319--------
8320* `Disable deprecated pragma warnings
8321  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203856>`__
8322  (issue `#333448202 <https://issues.pigweed.dev/issues/335328444>`__,
8323  issue `#333448202 <https://issues.pigweed.dev/issues/333448202>`__)
8324* `Iterators
8325  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203330>`__
8326  (issue `#333448202 <https://issues.pigweed.dev/issues/333448202>`__,
8327  issue `#335024633 <https://issues.pigweed.dev/issues/335024633>`__,
8328  issue `#335021928 <https://issues.pigweed.dev/issues/335021928>`__)
8329* `Collect wheel fix
8330  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202921>`__
8331* `Disable C23 extension warnings
8332  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202830>`__
8333  (issue `#333712899 <https://issues.pigweed.dev/issues/333712899>`__)
8334
8335pw_build_android
8336----------------
8337* `Update module guidance
8338  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203910>`__
8339* `Update cc_defaults guidance
8340  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203651>`__
8341* `Make Common Backends static
8342  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202090>`__
8343  (issue `#331458726 <https://issues.pigweed.dev/issues/331458726>`__)
8344
8345pw_build_info
8346-------------
8347* `Add missing header file for cmake
8348  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202210>`__
8349
8350pw_cli
8351------
8352The following interfaces were moved from ``pw_presubmit`` to ``pw_cli``
8353to make them more widely available: :py:class:`pw_cli.file_filter.FileFilter`,
8354:py:mod:`pw_cli.git_repo`, and :py:class:`pw_cli.tool_runner.ToolRunner`.
8355The new :py:func:`pw_cli.decorators.deprecated` decorator emits a
8356deprecation warning when the annotated function is used.
8357
8358* `Fix argument handling for GitRepo.has_uncommitted_changes()
8359  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204232>`__
8360* `Fix subprocess runner arg concatenation
8361  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202844>`__
8362* `Move FileFilter
8363  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194617>`__
8364* `Fix commit fallback handling for GitRepo.list_files()
8365  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203790>`__
8366* `Move git_repo to pw_cli
8367  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201279>`__
8368* `Add Python deprecation decorator
8369  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202929>`__
8370* `Update ToolRunner type hints
8371  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202737>`__
8372* `Move ToolRunner
8373  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201278>`__
8374
8375pw_containers
8376-------------
8377* `Iterators
8378  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203330>`__
8379  (issue `#335021928 <https://issues.pigweed.dev/issues/333448202, b/335024633, b/335021928>`__)
8380
8381pw_cpu_exception_risc_v
8382-----------------------
8383The new :ref:`module-pw_cpu_exception_risc_v` backend lays the foundation for
8384RISC-V CPU exception handling.
8385
8386* `Add initial backend structure
8387  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188230>`__
8388
8389pw_env_setup
8390------------
8391* `clang
8392  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202591>`__
8393  (issue `#333448202 <https://issues.pigweed.dev/issues/333448202>`__)
8394
8395pw_hdlc
8396-------
8397* `Iterators
8398  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203330>`__
8399  (issue `#335021928 <https://issues.pigweed.dev/issues/333448202, b/335024633, b/335021928>`__)
8400
8401pw_ide
8402------
8403* `Fixes to support changing working_dir
8404  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204430>`__
8405  (issue `#335628872 <https://issues.pigweed.dev/issues/335628872>`__)
8406* `Enable cmake.format.allowOptionalArgumentIndentation
8407  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203638>`__
8408
8409pw_kvs
8410------
8411* `Make Key an alias for string_view
8412  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204590>`__
8413* `Depend on libraries for fake flash and store tests for Bazel
8414  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202212>`__
8415* `Add libraries to reuse partition and store tests for Bazel
8416  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202211>`__
8417
8418pw_log_zephyr
8419-------------
8420* `Tokenize Zephyr shell fprintf
8421  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202734>`__
8422
8423pw_presubmit
8424------------
8425The following interfaces were moved from ``pw_presubmit`` to ``pw_cli``
8426to make them more widely available: :py:class:`pw_cli.file_filter.FileFilter`,
8427:py:mod:`pw_cli.git_repo`, and :py:class:`pw_cli.tool_runner.ToolRunner`.
8428
8429* `Move FileFilter
8430  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194617>`__
8431* `Add bthost_package step
8432  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203797>`__
8433  (issue `#332357274 <https://issues.pigweed.dev/issues/332357274>`__)
8434* `Don't overwrite Bazel stdout files
8435  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203796>`__
8436  (issue `#332357274 <https://issues.pigweed.dev/issues/332357274>`__)
8437* `Remove cmake_clang from quick presubmit
8438  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198050>`__
8439* `Move git_repo to pw_cli
8440  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201279>`__
8441* `Fix copy/paste bug in _value()
8442  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202913>`__
8443* `Move ToolRunner
8444  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201278>`__
8445
8446pw_protobuf
8447-----------
8448
8449
8450* `Access raw proto values; change RPC packet channel ID
8451  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204152>`__
8452
8453pw_rpc
8454------
8455The new :cpp:func:`pw::rpc::ChangeEncodedChannelId` function lets you rewrite
8456an encoded packet's channel ID in place. See :ref:`module-pw_rpc-remap`.
8457
8458* `Access raw proto values; change RPC packet channel ID
8459  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204152>`__
8460* `Iterators
8461  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203330>`__
8462  (issue `#335021928 <https://issues.pigweed.dev/issues/333448202, b/335024633, b/335021928>`__)
8463
8464pw_rpc_transport
8465----------------
8466* `Soong lib names now follow style
8467  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203650>`__
8468
8469pw_sensor
8470---------
8471The new :ref:`module-pw_sensor` module is the start of the implementation
8472of :ref:`SEED 0119: Sensors <seed-0119>`.
8473
8474* `Fix Python install
8475  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204130>`__
8476* `Add attribute support to sensor-desc CLI
8477  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203791>`__
8478  (issue `#293466822 <https://issues.pigweed.dev/issues/293466822>`__)
8479* `Create a sensor-desc CLI
8480  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203670>`__
8481  (issue `#293466822 <https://issues.pigweed.dev/issues/293466822>`__)
8482* `Update validator schema to JSON schema
8483  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202925>`__
8484  (issue `#293466822 <https://issues.pigweed.dev/issues/293466822>`__)
8485* `Provide a validator
8486  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202912>`__
8487  (issue `#293466822 <https://issues.pigweed.dev/issues/293466822>`__)
8488* `Add module stub
8489  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202911>`__
8490  (issue `#293466822 <https://issues.pigweed.dev/issues/293466822>`__)
8491
8492pw_snapshot
8493-----------
8494* `Process snapshots based on CPU architecture
8495  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188232>`__
8496
8497pw_spi_linux
8498------------
8499``pw_spi_linux`` now has a basic :ref:`module-pw_spi_linux-cli` that lets
8500you read from and write to devices.
8501
8502* `Add pw_spi_linux_cli
8503  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201391>`__
8504
8505pw_thread_freertos
8506------------------
8507* `Use TCB for running stack pointer
8508  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188231>`__
8509
8510pw_tls_client
8511-------------
8512* `Only include <sys/time.h> if available
8513  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202555>`__
8514
8515pw_transfer
8516-----------
8517The Python and C++ interfaces now support
8518:ref:`adaptive windowing <module-pw_transfer-windowing>`.
8519
8520* `Iterators
8521  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203330>`__
8522  (issue `#335021928 <https://issues.pigweed.dev/issues/333448202, b/335024633, b/335021928>`__)
8523* `Implement adaptive windowing in Python
8524  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/147510>`__
8525* `Implement adaptive windowing in C++
8526  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/146392>`__
8527* `Convert arguments to std::fstream constructors
8528  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203151>`__
8529  (issue `#333957637 <https://issues.pigweed.dev/issues/333957637>`__)
8530
8531pw_web
8532------
8533* `Support creating client without using proto descriptor
8534  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203654>`__
8535* `NPM version bump to 0.0.18
8536  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203636>`__
8537* `Fix string manipulation in download logs
8538  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/203612>`__
8539  (issue `#331480903 <https://issues.pigweed.dev/issues/331480903>`__)
8540* `Use existing col data when adding new View
8541  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200290>`__
8542  (issue `#331439176 <https://issues.pigweed.dev/issues/331439176>`__)
8543* `Enable column order on init
8544  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201530>`__
8545  (issue `#329712468 <https://issues.pigweed.dev/issues/329712468>`__)
8546* `Fix test format of log-source.test
8547  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202392>`__
8548  (issue `#333379333 <https://issues.pigweed.dev/issues/333379333>`__)
8549
8550Build
8551=====
8552
8553Bazel
8554-----
8555* `Use remote cache in infra
8556  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202754>`__
8557  (issue `#312215590 <https://issues.pigweed.dev/issues/312215590>`__)
8558
8559Docs
8560====
8561The new :ref:`docs-quickstart-zephyr` shows you how to set up a C++-based
8562Zephyr project that's ready to use Pigweed. The API references for all
8563functions or methods that return a set of ``pw_status`` codes have been
8564refactored for consistency. The :ref:`docs-style-doxygen` has been revamped.
8565
8566* `Add pw_status table for API references
8567  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202739>`__
8568* `Revamp Doxygen style guide
8569  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202590>`__
8570* `Add Zephyr quickstart
8571  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196671>`__
8572* `Update changelog
8573  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202150>`__
8574
8575SEEDs
8576=====
8577* (SEED-0117) `pw_i3c
8578  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178350>`__
8579
8580Miscellaneous
8581=============
8582* (clang) `Fix \`std::array\` iterators
8583  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202834>`__
8584  (issue `#333448202 <https://issues.pigweed.dev/issues/333448202>`__)
8585* (emboss) `Loosen Emboss cmake dependency tracking
8586  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202831>`__
8587  (issue `#333735460 <https://issues.pigweed.dev/issues/333735460>`__)
8588* (many) `Move maxDiff to be a class attribute
8589  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/204150>`__
8590
8591-----------
8592Apr 4, 2024
8593-----------
8594.. _epoll: https://man7.org/linux/man-pages/man7/epoll.7.html
8595
8596Highlights (Mar 21, 2024 to Apr 4, 2024):
8597
8598* **New modules**: :ref:`module-pw_i2c_rp2040` is a Pico SDK implementation of
8599  the ``pw_i2c`` interface, :ref:`module-pw_async2_epoll` is an
8600  `epoll`_-based backend for ``pw_async2``, :ref:`module-pw_spi_linux`
8601  is a Linux backend for ``pw_spi``, :ref:`module-pw_uart` provides
8602  core methods for UART communication, and :ref:`module-pw_bluetooth_proxy`
8603  provides a lightweight proxy host that can be placed between a Bluetooth
8604  host and a Bluetooth controller to add functionality or inspection.
8605* **Docs updates**: Pigweed's main docs builder now builds the
8606  :ref:`examples <seed-0122-examples>` repo; the examples will be available
8607  at ``https://pigweed.dev/examples``. An experimental complete Doxygen API
8608  reference is now being published to ``https://pigweed.dev/doxygen``. The
8609  :ref:`module-pw_i2c` docs, :ref:`docs-style-rest`, and
8610  :ref:`docs contributors homepage <docs-contrib-docs>` have been revamped.
8611* **Android platform updates**: Many modules were refactored to follow the
8612  guidance in :ref:`module-pw_build_android` to make it easier to build them in
8613  Soong.
8614
8615Active SEEDs
8616============
8617Help shape the future of Pigweed! Please visit :ref:`seed-0000`
8618and leave feedback on the RFCs (i.e. SEEDs) marked
8619``Open for Comments``.
8620
8621Modules
8622=======
8623
8624pw_allocator
8625------------
8626The new :ref:`module-pw_allocator-api-capabilities` API lets derived allocators
8627describe what optional features they support. ``pw::Allocator::GetLayout()``
8628has begun to be deprecated and replaced by ``pw::Allocator::GetRequestedLayout``,
8629``pw::Allocator::GetUsableLayout()``, and ``pw::Allocator::GetAllocatedLayout()``
8630to make it easier to distinguish between requested memory, usable memory, and
8631already used memory. Methods that took ``Layout`` arguments, such as
8632``pw::Allocator::GetRequestedLayout()``, have been deprecated.
8633
8634* `Restore DoDeallocate with Layout
8635  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201670>`__
8636  (issue `#332510307 <https://issues.pigweed.dev/issues/332510307>`__)
8637* `Move Layout and UniquePtr to their own header files
8638  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199534>`__
8639* `Remove Layout from Deallocate and Resize
8640  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198153>`__
8641* `Add allocation detail storage to TrackingAllocator
8642  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198152>`__
8643* `Distinguish between requested, usable, and allocated sizes
8644  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198150>`__
8645* `Add Capabilities
8646  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197133>`__
8647
8648pw_assert_log
8649-------------
8650* `Follow Soong guidelines
8651  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197536>`__
8652  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
8653
8654pw_async2
8655---------
8656The new :cpp:class:`pw::async2::PendFuncTask` class delegates a task to a
8657provided function.
8658
8659* `Add Poll::Readiness helper
8660  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201910>`__
8661* `Fix TSAN for dispatcher_thread_test
8662  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201850>`__
8663* `Add PendFuncTask
8664  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199714>`__
8665
8666pw_async2_epoll
8667---------------
8668.. _epoll: https://man7.org/linux/man-pages/man7/epoll.7.html
8669
8670The new :ref:`module-pw_async2_epoll` module is an `epoll`_-based backend
8671for  :ref:`module-pw_async2`.
8672
8673* `Epoll-backed async2 dispatcher
8674  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200233>`__
8675
8676pw_bluetooth
8677------------
8678The :ref:`module-pw_bluetooth-usage` section now shows CMake usage and
8679the new :ref:`module-pw_bluetooth-contributing` section shows how to
8680contribute Emboss code.
8681
8682* `Define LEReadMaximumAdvertisingDataLengthCommandComplete
8683  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201951>`__
8684  (issue `#312898345 <https://issues.pigweed.dev/issues/312898345>`__)
8685* `Add more opcodes
8686  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201130>`__
8687* `Add example of using to_underlying
8688  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200970>`__
8689  (issue `#326499650 <https://issues.pigweed.dev/issues/326499650>`__)
8690* `Emboss formatting tweak
8691  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200230>`__
8692  (issue `#331195584 <https://issues.pigweed.dev/issues/331195584>`__)
8693* `Add cmake to usage guide
8694  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200012>`__
8695  (issue `#326499587 <https://issues.pigweed.dev/issues/326499587>`__)
8696* `Add opcode_full field to emboss HCI headers
8697  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199553>`__
8698  (issue `#326499650 <https://issues.pigweed.dev/issues/326499650>`__)
8699* `Add enum for opcodes
8700  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199671>`__
8701  (issue `#326499650 <https://issues.pigweed.dev/issues/326499650>`__)
8702* `Update cmake targets to be consistent
8703  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200011>`__
8704  (issue `#326499587 <https://issues.pigweed.dev/issues/326499587>`__)
8705* `Update build files to be consistent
8706  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200010>`__
8707  (issue `#326499587 <https://issues.pigweed.dev/issues/326499587>`__)
8708* `Add emboss ReadBufferSize v1 event
8709  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199070>`__
8710  (issue `#326499650 <https://issues.pigweed.dev/issues/326499650>`__)
8711* `Add emboss contributing section to docs.rst
8712  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199531>`__
8713  (issue `#331195584 <https://issues.pigweed.dev/issues/331195584>`__)
8714* `protocol.h comments tweak
8715  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199532>`__
8716  (issue `#326499650 <https://issues.pigweed.dev/issues/326499650>`__)
8717
8718pw_bluetooth_proxy
8719------------------
8720The new :ref:`module-pw_bluetooth_proxy` module provides a lightweight
8721proxy host that can be placed between a Bluetooth host and a Bluetooth
8722controller to add functionality or inspection.
8723
8724* `Move to cpp23::to_underlying
8725  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200971>`__
8726  (issue `#331281133 <https://issues.pigweed.dev/issues/331281133>`__)
8727* `Use emboss OpCode enum
8728  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199554>`__
8729  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
8730* `Bluetooth proxy module and initial classes
8731  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197290>`__
8732  (issue `#326496952 <https://issues.pigweed.dev/issues/326496952>`__)
8733
8734pw_bluetooth_sapphire
8735---------------------
8736``pw_bluetooth_sapphire`` now supports emulation, Fuchsia unit testing, and
8737ARM64 build targets.
8738
8739* `Add arm64 release variant
8740  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202050>`__
8741  (issue `#332928957 <https://issues.pigweed.dev/issues/332928957>`__)
8742* `Stub bt-host CIPD manifest
8743  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201390>`__
8744  (issue `#332357274, 321267610 <https://issues.pigweed.dev/issues/332357274, 321267610>`__)
8745* `Fuchsia testing support
8746  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198270>`__
8747  (issue `#331692493, 42178254 <https://issues.pigweed.dev/issues/331692493, 42178254>`__)
8748* `Add emulator start workflow
8749  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200270>`__
8750  (issue `#321267689 <https://issues.pigweed.dev/issues/321267689>`__)
8751
8752pw_build
8753--------
8754Modules can now be nested in subdirectories, which paves the way for
8755refactoring how modules are organized in the upstream Pigweed repo.
8756:ref:`module-pw_build-project_builder` is a new lightweight build command
8757for projects that need to run multiple commands to perform a build.
8758
8759* `Allow nesting Pigweed modules in subdirectories
8760  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201114>`__
8761* `Add alwayslink option to pw_cc_blob_library
8762  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201110>`__
8763* `ProjectBuilder documentation
8764  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200791>`__
8765* `BuildRecipe auto_create_build_dir option
8766  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200830>`__
8767* `Defer build directory existence check
8768  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200771>`__
8769
8770pw_build_android
8771----------------
8772* `Define rule with static libs
8773  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200351>`__
8774  (issue `#331458726 <https://issues.pigweed.dev/issues/331458726>`__)
8775
8776pw_build_info
8777-------------
8778The new ``pw::build_info::LogBuildId()`` function lets you print a GNU
8779build ID as hex.
8780
8781* `Add log function of GNU build ID
8782  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199471>`__
8783* `Fix Bazel baremetal compatibility
8784  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199470>`__
8785
8786pw_bytes
8787--------
8788* `Add example to docs of using _b suffix
8789  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201350>`__
8790
8791pw_channel
8792----------
8793The new :cpp:type:`pw::channel::LoopbackDatagramChannel` and
8794:cpp:type:`pw::channel::LoopbackByteChannel` aliases provide channel
8795implementations that read their own writes. The new
8796:cpp:class:`pw::channel::ForwardingChannelPair` class lets you connect two
8797subsystems with datagram channels without implementing a custom channel.
8798
8799* `Return status from PollReadyToWrite
8800  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200995>`__
8801* `Rename methods to Pend prefix
8802  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201090>`__
8803* `Add loopback channel
8804  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199150>`__
8805* `Split open bits for read and write
8806  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199712>`__
8807* `Seek is not async
8808  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199713>`__
8809* `Set closed bit on FAILED_PRECONDITION
8810  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199710>`__
8811* `Respect sibling closure
8812  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199035>`__
8813* `Introduce forwarding channels
8814  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197353>`__
8815
8816pw_chrono
8817---------
8818* `Update OWNERS
8819  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200714>`__
8820* `Follow Soong guidelines
8821  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198290>`__
8822  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
8823
8824pw_cli
8825------
8826The new ``pw_cli.alias`` Python module lets you create ``pw`` subcommands
8827that are effectively command line aliases. See :ref:`module-pw_cli-aliases`.
8828
8829* `Move plural()
8830  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201630>`__
8831* `Move status_reporter to pw_cli
8832  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201113>`__
8833* `Add pw ffx alias
8834  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200770>`__
8835  (issue `#329933586 <https://issues.pigweed.dev/issues/329933586>`__)
8836
8837pw_digital_io
8838-------------
8839* `Update OWNERS
8840  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200752>`__
8841
8842pw_emu
8843------
8844* `Fix a TypeError in TemporaryEmulator
8845  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200832>`__
8846  (issue `#316080297 <https://issues.pigweed.dev/issues/316080297>`__)
8847
8848pw_env_setup
8849------------
8850* `Run npm log viewer setup script after install
8851  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200211>`__
8852
8853pw_function
8854-----------
8855* `Define as cc_static_library
8856  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199092>`__
8857  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
8858
8859pw_hdlc
8860-------
8861The new :cpp:class:`pw::hdlc::Router` class is an experimental async HDLC
8862router that uses :ref:`module-pw_channel`.
8863
8864* `Document members of router
8865  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201115>`__
8866* `Add async router
8867  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195538>`__
8868* `Fix sitenav
8869  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196499>`__
8870
8871pw_i2c
8872------
8873The :ref:`module-pw_i2c` docs have been revamped.
8874
8875* `Revamp docs
8876  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196330>`__
8877* `Update OWNERS
8878  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200752>`__
8879* `Update OWNERS
8880  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200714>`__
8881
8882pw_i2c_rp2040
8883-------------
8884The new :ref:`module-pw_i2c_rp2040` module implements the :ref:`module-pw_i2c`
8885interface using the Raspberry Pi Pico SDK.
8886
8887* `Initiator implementation
8888  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173552>`__
8889  (issue `#303255049 <https://issues.pigweed.dev/issues/303255049>`__)
8890
8891pw_ide
8892------
8893:py:func:`pw_ide.settings.PigweedIdeSettings.compdb_searchpaths` now accepts
8894globs. The new :py:func:`pw_ide.settings.PigweedIdeSettings.targets_exclude`
8895method lets you specify a list of GN targets that code analysis should ignore.
8896
8897* `Support comp DB search path globs
8898  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200908>`__
8899* `Move status_reporter to pw_cli
8900  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201113>`__
8901* `Support including and/or excluding targets
8902  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195975>`__
8903
8904pw_libc
8905-------
8906* `Include strncpy
8907  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199110>`__
8908  (issue `#316936782 <https://issues.pigweed.dev/issues/316936782>`__)
8909
8910pw_log
8911------
8912* `Follow Soong guidelines
8913  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197536>`__
8914  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
8915
8916pw_log_basic
8917------------
8918* `Fix Soong definitions
8919  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199034>`__
8920  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
8921
8922pw_log_null
8923-----------
8924* `Define as cc_static_library
8925  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199090>`__
8926  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
8927
8928pw_log_tokenized
8929----------------
8930* `Define as cc_static_library
8931  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198735>`__
8932  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
8933
8934pw_minimal_cpp_stdlib
8935---------------------
8936* `Clarify purpose
8937  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200792>`__
8938
8939pw_module
8940---------
8941* `Jinja template refactor
8942  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201751>`__
8943* `Overwrite prompt with diff display
8944  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201851>`__
8945* `Allow nesting Pigweed modules in subdirectories
8946  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201114>`__
8947* `Add OWNERS file during module creation
8948  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200831>`__
8949
8950pw_multibuf
8951-----------
8952* `Replace Mutex with ISL
8953  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200996>`__
8954* `Define as cc_static_library
8955  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199091>`__
8956  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
8957
8958pw_polyfill
8959-----------
8960* `Define as cc_static_library
8961  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199094>`__
8962  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
8963* `Simplify backported features table
8964  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197891>`__
8965
8966pw_preprocessor
8967---------------
8968* `Define as cc_static_library
8969  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199031>`__
8970  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
8971
8972pw_presubmit
8973------------
8974Pigweed's main docs builder now builds the :ref:`examples <seed-0122-examples>`
8975repo; the examples will be available at ``https://pigweed.dev/examples``.
8976An experimental complete Doxygen API reference is now being published to
8977``https://pigweed.dev/doxygen``.
8978
8979* `Include examples repo docs in docs_builder
8980  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201990>`__
8981  (issue `#300317433 <https://issues.pigweed.dev/issues/300317433>`__)
8982* `Move plural()
8983  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201630>`__
8984* `Include doxygen html in docs_build
8985  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198553>`__
8986* `Refactor Python Black formatter support
8987  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194417>`__
8988* `Refactor Bazel formatter support
8989  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194416>`__
8990* `Refactor GN formatting support
8991  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194415>`__
8992  (issue `#326309165 <https://issues.pigweed.dev/issues/326309165>`__)
8993* `Make ToolRunner capture stdout/stderr by default
8994  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200972>`__
8995* `Update buildifier invocation
8996  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200350>`__
8997* `Switch format test data to importlib
8998  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200790>`__
8999* `Skip gn_teensy_build on mac-arm64
9000  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199670>`__
9001
9002pw_protobuf
9003-----------
9004* `Support full java protos
9005  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200530>`__
9006  (issue `#329445249 <https://issues.pigweed.dev/issues/329445249>`__)
9007
9008pw_python
9009---------
9010* `Update setup.sh requirements
9011  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200994>`__
9012
9013pw_result
9014---------
9015* `Avoid duplicate symbols with Soong
9016  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201277>`__
9017  (issue `#331458726 <https://issues.pigweed.dev/issues/331458726>`__)
9018* `Define as cc_static_library
9019  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199033>`__
9020  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
9021
9022pw_router
9023---------
9024* `Define as cc_static_library
9025  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199130>`__
9026  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
9027* `Add Android common backends as dep
9028  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198390>`__
9029  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
9030
9031pw_rpc
9032------
9033* `List dependencies directly
9034  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199533>`__
9035  (issue `#331226283 <https://issues.pigweed.dev/issues/331226283>`__)
9036
9037pw_rpc_transport
9038----------------
9039* `Define as cc_static_library
9040  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199093>`__
9041  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
9042
9043pw_span
9044-------
9045* `Define as cc_static_library
9046  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199032>`__
9047  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
9048
9049pw_spi
9050------
9051* `Update OWNERS
9052  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200752>`__
9053* `Update OWNERS
9054  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200714>`__
9055
9056pw_spi_linux
9057------------
9058Linux functionality that was previously in :ref:`module-pw_spi` has been
9059moved to its own module, :ref:`module-pw_spi_linux`.
9060
9061* `Move linux_spi from pw_spi to its own module
9062  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201351>`__
9063
9064pw_status
9065---------
9066The new ``pw::StatusWithSize::size_or()`` convenience method lets you return
9067a default size in place of ``pw::StatusWithSize::size()`` when the status is
9068not OK.
9069
9070* `Add StatusWithSize::size_or
9071  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198151>`__
9072
9073pw_stream_shmem_mcuxpresso
9074--------------------------
9075* `Fix interrupt pending check
9076  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198070>`__
9077  (issue `#330225861 <https://issues.pigweed.dev/issues/330225861>`__)
9078
9079pw_sync
9080-------
9081* `Follow Soong guidelines
9082  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197872>`__
9083  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
9084
9085pw_sys_io
9086---------
9087* `Update OWNERS
9088  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200714>`__
9089* `Fix Soong definitions
9090  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199034>`__
9091  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
9092
9093pw_thread
9094---------
9095* `Follow Soong guidance
9096  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199030>`__
9097  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
9098
9099pw_toolchain
9100------------
9101
9102
9103* `Fix Rust GN host build
9104  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201831>`__
9105* `Define as cc_static_library
9106  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198734>`__
9107  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
9108* `Remove unusued source set
9109  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200190>`__
9110  (issue `#331260098 <https://issues.pigweed.dev/issues/331260098>`__)
9111* `LLVM compiler-rt builtins
9112  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198593>`__
9113
9114pw_trace_tokenized
9115------------------
9116* `Fix static initialization
9117  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200232>`__
9118
9119pw_transfer
9120-----------
9121New ``pw_transfer`` macros:
9122:c:macro:`PW_TRANSFER_LOG_DEFAULT_CHUNKS_BEFORE_RATE_LIMIT`,
9123:c:macro:`PW_TRANSFER_LOG_DEFAULT_RATE_PERIOD_MS`,
9124:c:macro:`PW_TRANSFER_CONFIG_LOG_LEVEL`, and
9125:c:macro:`PW_TRANSFER_CONFIG_DEBUG_DATA_CHUNKS`.
9126
9127* `Make numerous logging adjustments
9128  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194750>`__
9129
9130pw_uart
9131-------
9132The new :ref:`module-pw_uart` module defines core methods for UART
9133communication.
9134
9135* `Create OWNERS
9136  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200750>`__
9137* `Added UART interface
9138  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181710>`__
9139
9140pw_unit_test
9141------------
9142* `Add failing results test record
9143  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197852>`__
9144
9145pw_web
9146------
9147* `NPM version bump to 0.0.17
9148  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201091>`__
9149* `Fix logs not appearing in pw_console server
9150  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200793>`__
9151  (issue `#331483789 <https://issues.pigweed.dev/issues/331483789>`__)
9152
9153Build
9154=====
9155
9156Bazel
9157-----
9158* `Add missing Python deps
9159  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199850>`__
9160  (issue `#331267896 <https://issues.pigweed.dev/issues/331267896>`__)
9161* `Localize remaining backend label flags
9162  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199036>`__
9163  (issue `#329441699 <https://issues.pigweed.dev/issues/329441699>`__)
9164
9165Docs
9166====
9167* `Mention that Windows flow needs admin rights
9168  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/202030>`__
9169* `Update reST style guide
9170  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201650>`__
9171* `Organize the documentation style guides
9172  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201116>`__
9173* `Update references to quickstart/bazel
9174  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200131>`__
9175  (issue `#325472122 <https://issues.pigweed.dev/issues/325472122>`__)
9176* `Simplify module creation docs using script
9177  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200231>`__
9178* `Generate doxygen html output locally
9179  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199711>`__
9180* `Update changelog
9181  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198810>`__
9182
9183SEEDs
9184=====
9185* (SEED-0117) `Update status to Last Call
9186  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200710>`__
9187* (SEED-0126) `Claim SEED number
9188  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200911>`__
9189* (SEED-0127) `Reading sensor data
9190  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198134>`__
9191
9192Third party
9193===========
9194* (Emboss) `Assume newer emboss version 2/2
9195  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197363>`__
9196  (issue `#329872338 <https://issues.pigweed.dev/issues/329872338>`__)
9197* (FreeRTOS) `Fix typo in docs
9198  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/201330>`__
9199* (Fuchsia) `Copybara import
9200  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200712>`__
9201  (issue `#331281133 <https://issues.pigweed.dev/issues/331281133>`__)
9202
9203Miscellaneous
9204=============
9205* `Delete move constructors of buffer wrappers
9206  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200753>`__
9207* (Soong) `Remove _headers from lib names
9208  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198330>`__
9209  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
9210* (mbedtls) `Avoid the use of unsupported libc functions
9211  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/199131>`__
9212  (issue `#316936782 <https://issues.pigweed.dev/issues/316936782>`__)
9213* (nanopb) `Fix nanopb_pb2.py generation
9214  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/200772>`__
9215
9216------------
9217Mar 22, 2024
9218------------
9219Highlights (Mar 7, 2024 to Mar 22, 2024):
9220
9221* Pigweed's minimum supported Python version was changed to 3.10.
9222* Setting the new ``pw_build_TEST_TRANSITIVE_PYTHON_DEPS`` flag to ``false``
9223  in your project's ``.gn`` file turns off testing and linting of transitive
9224  dependencies in ``pw_python_package`` rules, which can speed up build
9225  times significantly.
9226* The new :ref:`module-pw_log_android` module is a ``pw_log`` backend for
9227  Android and the new :ref:`module-pw_build_android` module provides tools to
9228  help build Pigweed in Android platform applications.
9229* :ref:`seed-0120` introduces ``pw_sensor``, a module that will handle
9230  Pigweed's upcoming sensor framework.
9231* The new :c:macro:`PW_LOG_EVERY_N` and :c:macro:`PW_LOG_EVERY_N_DURATION`
9232  macros provide rate-limited logging.
9233
9234Active SEEDs
9235============
9236Help shape the future of Pigweed! Please visit :ref:`seed-0000`
9237and leave feedback on the RFCs (i.e. SEEDs) marked
9238``Open for Comments``.
9239
9240Modules
9241=======
9242
9243pw_allocator
9244------------
9245.. _//pw_allocator/examples: https://cs.opensource.google/pigweed/pigweed/+/main:pw_allocator/examples
9246
9247The :ref:`module-pw_allocator` docs have been revamped. Code examples from
9248the docs are now extracted from complete examples that are built and tested
9249alongside the rest of the main Pigweed repo; see `//pw_allocator/examples`_.
9250
9251* `Improve size report accuracy
9252  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196492>`__
9253* `Add buffer utilities
9254  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195353>`__
9255* `Improve UniquePtr ergonomics
9256  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196181>`__
9257* `Various API modifications
9258  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195973>`__
9259* `Add IsEqual
9260  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195954>`__
9261* `Soft-deprecate heap_viewer.py
9262  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195253>`__
9263  (issue `#328648868 <https://issues.pigweed.dev/issues/328648868>`__)
9264* `Move code snippets from docs to examples
9265  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195190>`__
9266  (issue `#328076428 <https://issues.pigweed.dev/issues/328076428>`__)
9267* `Clean up sources files
9268  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194948>`__
9269* `Remove erroneous quotes around tagline
9270  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195514>`__
9271* `Refactor code size reports
9272  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194947>`__
9273* `Remove metrics.cc
9274  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195450>`__
9275  (issue `#277108894 <https://issues.pigweed.dev/issues/277108894>`__)
9276* `Fix move semantics for UniquePtr
9277  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195470>`__
9278* `Refactor docs
9279  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194871>`__
9280  (issue `#328076428 <https://issues.pigweed.dev/issues/328076428>`__)
9281* `Make metrics configurable
9282  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193621>`__
9283  (issue `#326509341 <https://issues.pigweed.dev/issues/326509341>`__)
9284
9285pw_assert
9286---------
9287* `Add keep_dep tags to backend_impl
9288  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197531>`__
9289  (issue `#329441699 <https://issues.pigweed.dev/issues/329441699>`__)
9290* `Introduce :backend, :backend_impl
9291  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196531>`__
9292  (issue `#329441699 <https://issues.pigweed.dev/issues/329441699>`__)
9293* `Apply formatting fixes
9294  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195951>`__
9295
9296pw_assert_basic
9297---------------
9298* `Fix BUILD.bazel file
9299  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196292>`__
9300  (issue `#328679085 <https://issues.pigweed.dev/issues/328679085>`__)
9301
9302pw_bluetooth
9303------------
9304* `Add command complete event
9305  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196030>`__
9306  (issue `#311639690 <https://issues.pigweed.dev/issues/311639690>`__)
9307* `Add command complete event
9308  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195451>`__
9309  (issue `#311639690 <https://issues.pigweed.dev/issues/311639690>`__)
9310* `Add H4 packet indicators in emboss
9311  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195535>`__
9312  (issue `#326499682 <https://issues.pigweed.dev/issues/326499682>`__)
9313* `Reformat l2cap_frames.emb
9314  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194790>`__
9315
9316pw_bluetooth_sapphire
9317---------------------
9318* `Use amd64 SDK
9319  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197510>`__
9320  (issue `#330214852 <https://issues.pigweed.dev/issues/330214852>`__)
9321* `Fuchsia SDK example
9322  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196450>`__
9323  (issue `#42178254 <https://issues.pigweed.dev/issues/42178254>`__)
9324
9325pw_build
9326--------
9327Setting the new ``pw_build_TEST_TRANSITIVE_PYTHON_DEPS`` flag to ``false``
9328in your project's ``.gn`` file turns off testing and linting of transitive
9329dependencies in ``pw_python_package`` rules, which can speed up build
9330times significantly.
9331
9332* `Option to not transitively run py .tests and .lint deps
9333  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186195>`__
9334
9335pw_build_android
9336----------------
9337The new :ref:`module-pw_build_android` module provides tools to help build
9338Pigweed in Android platform applications.
9339
9340* `Add new utils module
9341  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195139>`__
9342  (issue `#328503970 <https://issues.pigweed.dev/issues/328503970>`__)
9343
9344pw_bytes
9345--------
9346The new :cpp:func:`pw::bytes::ExtractBits` helper extracts bits between
9347specified left bit and right bit positions. New Rust helpers were added;
9348see `Crate pw_bytes <./rustdoc/pw_bytes>`_.
9349
9350* `Add ExtractBits template
9351  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196310>`__
9352  (issue `#329435173 <https://issues.pigweed.dev/issues/329435173>`__)
9353* `Add Rust helpers for contcatenating const slices and strs
9354  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187651>`__
9355
9356pw_channel
9357----------
9358Datagram-to-byte conversions must now be explicit.
9359
9360* `Enable GetWriteAllocator function
9361  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197534>`__
9362* `Require explicit datagram-to-byte conversions
9363  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197650>`__
9364* `Remove max_bytes argument from ReadPoll
9365  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197352>`__
9366* `Support datagram-to-byte conversions
9367  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196210>`__
9368* `Handle closed channels in base
9369  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194739>`__
9370
9371pw_checksum
9372-----------
9373* `Add missing #include <array>
9374  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196530>`__
9375  (issue `#329594026 <https://issues.pigweed.dev/issues/329594026>`__)
9376
9377pw_chre
9378-------
9379* `Remove unused files
9380  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170792>`__
9381
9382pw_containers
9383-------------
9384* `ConstexprSort in FlatMap takes an iterator
9385  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197217>`__
9386  (issue `#330072104 <https://issues.pigweed.dev/issues/330072104>`__)
9387* `Add move constructors to queues
9388  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197072>`__
9389
9390pw_digital_io_linux
9391-------------------
9392The new ``pw_digital_io_linux`` CLI tool lets you configure a GPIO line as an
9393input and gets its value, or configure a line as an output and set its value.
9394
9395* `Add Android.bp
9396  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194432>`__
9397* `Add test CLI
9398  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194431>`__
9399
9400pw_docgen
9401---------
9402* `Single-source the module metadata
9403  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193333>`__
9404  (issue `#292582625 <https://issues.pigweed.dev/issues/292582625>`__)
9405
9406pw_env_setup
9407------------
9408Pigweed's minimum supported Python version was changed to 3.10.
9409
9410* `Update min Python version to 3.10
9411  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197332>`__
9412  (issue `#248257406 <https://issues.pigweed.dev/issues/248257406>`__)
9413* `Update CIPD rust version
9414  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194620>`__
9415* `Use amd64 SDK
9416  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197510>`__
9417  (issue `#330214852 <https://issues.pigweed.dev/issues/330214852>`__)
9418* `Fuchsia SDK example
9419  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196450>`__
9420  (issue `#42178254 <https://issues.pigweed.dev/issues/42178254>`__)
9421
9422pw_format
9423---------
9424Initital support for untyped specifiers (``%v``) was added.
9425
9426* `Enhance Rust tests to check for arguments
9427  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196433>`__
9428  (issue `#329507809 <https://issues.pigweed.dev/issues/https://pwbug.dev/329507809>`__)
9429* `Add initial support for untyped specifiers
9430  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187650>`__
9431
9432pw_hdlc
9433-------
9434The newly public :cpp:class:`pw::hdlc::Encoder` class supports gradually
9435encoding frames without ever holding an entire frame in memory at once.
9436
9437* `Expose Encoder
9438  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197535>`__
9439
9440pw_hex_dump
9441-----------
9442CMake support was added.
9443
9444* `Add CMake support
9445  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198170>`__
9446
9447pw_json
9448-------
9449* `Move examples outside of the pw namespace
9450  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195890>`__
9451
9452pw_libc
9453-------
9454* `Define LIBC_FAST_MATH for the faster integral fixed point sqrt
9455  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196350>`__
9456  (issue `#323425639 <https://issues.pigweed.dev/issues/323425639>`__)
9457* `Add uksqrtui to stdfix
9458  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196230>`__
9459  (issue `#323425639 <https://issues.pigweed.dev/issues/323425639>`__)
9460* `Include sqrtur and expk in stdfix
9461  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195256>`__
9462  (issue `#323425639 <https://issues.pigweed.dev/issues/323425639>`__)
9463
9464pw_log
9465------
9466The new :c:macro:`PW_LOG_EVERY_N` and :c:macro:`PW_LOG_EVERY_N_DURATION`
9467macros provide rate-limited logging.
9468
9469* `Add rate limit log statements
9470  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183870>`__
9471* `Add keep_dep tags to backend_impl
9472  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197531>`__
9473  (issue `#329441699 <https://issues.pigweed.dev/issues/329441699>`__)
9474* `Introduce localized backend label flags
9475  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196498>`__
9476  (issue `#329441699 <https://issues.pigweed.dev/issues/329441699>`__)
9477* `Run bpfmt on all Android.bp
9478  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195490>`__
9479  (issue `#277108894 <https://issues.pigweed.dev/issues/277108894>`__)
9480
9481pw_log_android
9482--------------
9483The new :ref:`module-pw_log_android` module is a ``pw_log`` backend for
9484Android.
9485
9486* `Fix Soong build
9487  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197830>`__
9488* `Add pw_log_android_stderr
9489  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195050>`__
9490  (issue `#328281789 <https://issues.pigweed.dev/issues/328281789>`__)
9491* `Add module documentation
9492  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196410>`__
9493
9494pw_malloc
9495---------
9496* `Add backend label flags
9497  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196610>`__
9498  (issue `#329441699 <https://issues.pigweed.dev/issues/329441699>`__)
9499
9500pw_multibuf
9501-----------
9502:cpp:class:`pw::multibuf::Stream` is a new multibuf-backed ``pw_stream``
9503implementation that can read from and write to a multibuf.
9504:cpp:class:`pw::multibuf::SimpleAllocator` is a simple, first-fit variant
9505of :cpp:class:`pw::multibuf::MultiBufAllocator`.
9506
9507* `Add stream implementation
9508  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196354>`__
9509* `Add empty() function
9510  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197351>`__
9511* `Pass reference instead of pointer
9512  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197132>`__
9513* `Add SimpleAllocator
9514  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195129>`__
9515
9516pw_package
9517----------
9518* `Match Emboss version used by Bazel
9519  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197359>`__
9520  (issue `#329872338 <https://issues.pigweed.dev/issues/329872338>`__)
9521
9522pw_polyfill
9523-----------
9524* `Update __cplusplus macro for C++23; support C
9525  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196113>`__
9526* `Remove PW_INLINE_VARIABLE
9527  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196122>`__
9528* `Detect C23
9529  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195266>`__
9530  (issue `#326499611 <https://issues.pigweed.dev/issues/326499611>`__)
9531
9532pw_presubmit
9533------------
9534* `Suppress stdout option for rst_format
9535  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197890>`__
9536* `Begin formatter modularization
9537  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193714>`__
9538  (issue `#326309165 <https://issues.pigweed.dev/issues/326309165>`__)
9539* `Switch default formatter to black
9540  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190453>`__
9541  (issue `#261025545 <https://issues.pigweed.dev/issues/261025545>`__)
9542* `Fuchsia SDK example
9543  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196450>`__
9544  (issue `#42178254 <https://issues.pigweed.dev/issues/42178254>`__)
9545
9546pw_rpc
9547------
9548* `Support full java protos
9549  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196231>`__
9550  (issue `#329445249 <https://issues.pigweed.dev/issues/329445249>`__)
9551* `Move some headers from srcs to hdrs
9552  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196850>`__
9553  (issue `#323749176 <https://issues.pigweed.dev/issues/323749176>`__)
9554* `Add TryFinish API for pw_rpc stream
9555  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195126>`__
9556  (issue `#328462705 <https://issues.pigweed.dev/issues/328462705>`__)
9557* `Remove deprecated functions from Java client
9558  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193503>`__
9559
9560pw_rust
9561-------
9562* `Tweak docs for Rust tokenized logging example
9563  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195351>`__
9564
9565pw_sensor
9566---------
9567:ref:`seed-0120` introduces ``pw_sensor``, a module that will handle
9568Pigweed's upcoming sensor framework.
9569
9570* `Add configuration SEED
9571  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183150>`__
9572
9573pw_spi
9574------
9575* `Update Android.bp to conform with new style
9576  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197410>`__
9577
9578pw_stream_shmem_mcuxpresso
9579--------------------------
9580* `Fix interrupt pending check
9581  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198070>`__
9582  (issue `#330225861 <https://issues.pigweed.dev/issues/330225861>`__)
9583
9584pw_sync_stl
9585-----------
9586* `Android.bp: Add missing dependency on pw_sync_headers
9587  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197030>`__
9588
9589pw_sys_io
9590----------
9591* `Add backend label flags
9592  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196610>`__
9593  (issue `#329441699 <https://issues.pigweed.dev/issues/329441699>`__)
9594
9595pw_sys_io_rp2040
9596----------------
9597* `Use callbacks to block on input
9598  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191490>`__
9599  (issue `#324633376 <https://issues.pigweed.dev/issues/324633376>`__)
9600
9601pw_sys_io_stm32cube
9602-------------------
9603* `Fix build for f0xx, f1xx and f3xx families
9604  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195871>`__
9605
9606pw_thread_zephyr
9607-----------------
9608* `Apply formatting fixes
9609  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195951>`__
9610
9611pw_tokenizer
9612------------
9613The Rust library's hashing code was updated to support multi-input hashing.
9614
9615* `Refactor Rust hash code to allow multi-input hashing
9616  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186310>`__
9617
9618pw_transfer
9619-----------
9620The TypeScript client now has an ``abort()`` method for ending a transfer
9621without a completion chunk and a ``terminate()`` method for ending a transfer
9622with a completion chunk.
9623
9624* `Inline TRANSFER_CLIENT_DEPS
9625  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198592>`__
9626* `Support full java protos
9627  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196231>`__
9628  (issue `#329445249 <https://issues.pigweed.dev/issues/329445249>`__)
9629* `Add abort() and terminate() apis
9630  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194910>`__
9631* `Update the proxy to only consider transfer chunks
9632  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196170>`__
9633* `Fix Java client timeouts in terminating state
9634  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195123>`__
9635
9636pw_unit_test
9637------------
9638The new :cpp:class:`pw::unit_test::TestRecordEventHandler` class is a
9639predefined event handler that outputs a test summary in Chromium JSON Test
9640Results format.
9641
9642* `Flag to disable cmake pw_add_test calls
9643  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197530>`__
9644  (issue `#330205620 <https://issues.pigweed.dev/issues/330205620>`__)
9645* `Add duplicate test case
9646  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197170>`__
9647* `Localize the label flags
9648  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196670>`__
9649  (issue `#329441699 <https://issues.pigweed.dev/issues/329441699>`__)
9650* `Add test record event handler
9651  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194050>`__
9652* `Adding googletest_handler_adapter to cmake
9653  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195070>`__
9654
9655pw_watch
9656--------
9657Changes to Emboss files now trigger rebuilds.
9658
9659* `Add emboss files to default watch patterns
9660  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195387>`__
9661
9662pw_web
9663------
9664* `NPM version bump to 0.0.16
9665  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198291>`__
9666* `Update createLogViewer to use union types
9667  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198210>`__
9668  (issue `#330564978 <https://issues.pigweed.dev/issues/330564978>`__)
9669* `Include file information in browser logs
9670  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196510>`__
9671  (issue `#329680229 <https://issues.pigweed.dev/issues/329680229>`__)
9672* `NPM version bump to 0.0.15
9673  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196120>`__
9674
9675Build
9676=====
9677
9678Bazel
9679-----
9680The new :ref:`module-pw_build-bazel-pw_facade` Bazel macro makes it easier
9681to create a :ref:`facade <docs-facades>`.
9682
9683* `Remove the deprecated pw_cc_facade macro
9684  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196121>`__
9685  (issue `#328679085 <https://issues.pigweed.dev/issues/328679085>`__)
9686* `Treat Rust warnings as errors
9687  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196436>`__
9688  (issue `#329685244 <https://issues.pigweed.dev/issues/https://pwbug.dev/329685244>`__)
9689* `Localize backend label flags
9690  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196232>`__
9691  (issue `#329441699 <https://issues.pigweed.dev/issues/329441699>`__)
9692* `Use pw_facade
9693  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195383>`__
9694  (issue `#328679085 <https://issues.pigweed.dev/issues/328679085>`__)
9695* `Introduce pw_facade
9696  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193648>`__
9697  (issue `#328679085 <https://issues.pigweed.dev/issues/328679085>`__)
9698* `Fix bazel query
9699  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195138>`__
9700
9701Language support
9702================
9703
9704Python
9705------
9706* `Use future annotations
9707  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198570>`__
9708* `Use future annotations
9709  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/198051>`__
9710* `Remove PathOrStr variables
9711  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197538>`__
9712* `Switch from typing.Optional[...] to "... | None"
9713  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197347>`__
9714  (issue `#248257406 <https://issues.pigweed.dev/issues/248257406>`__)
9715* `Switch from typing.Union to "|"
9716  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197346>`__
9717  (issue `#248257406 <https://issues.pigweed.dev/issues/248257406>`__)
9718* `Use argparse.BooleanOptionalAction
9719  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197345>`__
9720  (issue `#248257406 <https://issues.pigweed.dev/issues/248257406>`__)
9721* `Use pathlib.Path.is_relative_to()
9722  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197344>`__
9723  (issue `#248257406 <https://issues.pigweed.dev/issues/248257406>`__)
9724* `Switch from typing.Dict to dict
9725  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197343>`__
9726  (issue `#248257406 <https://issues.pigweed.dev/issues/248257406>`__)
9727* `Switch from typing.Tuple to tuple
9728  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197342>`__
9729  (issue `#248257406 <https://issues.pigweed.dev/issues/248257406>`__)
9730* `Switch from typing.List to list
9731  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197341>`__
9732  (issue `#248257406 <https://issues.pigweed.dev/issues/248257406>`__)
9733
9734OS support
9735==========
9736
9737Zephyr
9738------
9739* `Add action for installing Zephyr SDK
9740  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194629>`__
9741
9742Docs
9743====
9744The new :ref:`CLI style guide <docs-pw-style-cli>` outlines how CLI utilities
9745in upstream Pigweed should behave.
9746
9747.. todo-check: disable
9748
9749* `Add CLI style guide
9750  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197010>`__
9751  (issue `#329532962 <https://issues.pigweed.dev/issues/329532962>`__)
9752* `Move TODO style guide
9753  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197730>`__
9754* `Fix redirect paths
9755  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197368>`__
9756  (issue `#324241028 <https://issues.pigweed.dev/issues/324241028>`__)
9757* `Fix code-block indentation
9758  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197533>`__
9759* `Add redirects infrastructure and docs contributor section
9760  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197339>`__
9761  (issue `#324241028 <https://issues.pigweed.dev/issues/324241028>`__)
9762* `Fix some incorrect target names
9763  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/196495>`__
9764  (issue `#329441699 <https://issues.pigweed.dev/issues/329441699>`__)
9765* `Fix mentions of sample_project
9766  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195974>`__
9767  (issue `#322859039 <https://issues.pigweed.dev/issues/322859039>`__)
9768* `TOC entry for API documentation from source
9769  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195970>`__
9770* `Update changelog
9771  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195354>`__
9772
9773.. todo-check: enable
9774
9775Third party
9776===========
9777* `Minor build file formatting fixes
9778  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197369>`__
9779* (Emboss) `Assume newer emboss version 1/2
9780  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/197362>`__
9781  (issue `#329872338 <https://issues.pigweed.dev/issues/329872338>`__)
9782* (STM32Cube) `Fix bazel hal driver build
9783  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195870>`__
9784
9785-----------
9786Mar 7, 2024
9787-----------
9788Highlights (Feb 22, 2024 to Mar 7, 2024):
9789
9790* The new :ref:`module-pw_digital_io_linux` module is a
9791  :ref:`module-pw_digital_io` backend for Linux userspace.
9792* :cpp:class:`pw::multibuf::MultiBufAllocator` class is a new interface
9793  for allocating ``pw::multibuf::MultiBuf`` objects.
9794* The ``pw_web`` log viewer now captures browser console logs. It also
9795  now supports creating log stores and downloading logs from stores.
9796
9797Active SEEDs
9798============
9799Help shape the future of Pigweed! Please visit :ref:`seed-0000`
9800and leave feedback on the RFCs (i.e. SEEDs) marked
9801``Open for Comments``.
9802
9803Modules
9804=======
9805
9806pw_allocator
9807------------
9808* `Remove split_free_list_allocator.cc from Android.bp
9809  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194551>`__
9810* `Add missing dep
9811  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194231>`__
9812* `Use BlockAllocator instead of alternatives
9813  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188354>`__
9814* `Make TrackingAllocator correct by construction
9815  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193330>`__
9816
9817pw_assert_log
9818-------------
9819* `Depend on pw_log_headers in Android.bp
9820  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194434>`__
9821* `Fix PW_HANDLE_CRASH to handle 0 args
9822  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194450>`__
9823  (issue `#327201811 <https://issues.pigweed.dev/issues/327201811>`__)
9824
9825pw_async2
9826---------
9827* `Address post-submit comments
9828  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194693>`__
9829* `Add converting constructors to Poll
9830  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193593>`__
9831
9832pw_blob_store
9833-------------
9834* `Set module name to BLOB
9835  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195170>`__
9836
9837pw_bluetooth
9838------------
9839* `Add hci_data.emb
9840  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194631>`__
9841  (issue `#311639690 <https://issues.pigweed.dev/issues/311639690>`__)
9842* `Add ISO feature bit to controllers
9843  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194550>`__
9844* `Add ISO definitions to Controller
9845  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194470>`__
9846
9847pw_build
9848--------
9849* `Remove FUZZTEST_OPTS
9850  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189317>`__
9851* `Fix ProjectBuilder recipe percentage
9852  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194392>`__
9853
9854pw_config_loader
9855----------------
9856* `Support custom overloading rules
9857  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190833>`__
9858
9859pw_containers
9860-------------
9861* `Rename VariableLengthEntryQueue
9862  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187311>`__
9863* `Rename VariableLengthEntryQueue files
9864  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187310>`__
9865* `VariableLengthEntryQueue C++ API
9866  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169910>`__
9867
9868pw_digital_io_linux
9869-------------------
9870The new :ref:`module-pw_digital_io_linux` module is a
9871:ref:`module-pw_digital_io` backend for Linux userspace.
9872
9873* `Introduce new module
9874  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194430>`__
9875
9876pw_json
9877-------
9878* `Update example; fix typo and declaration order
9879  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194411>`__
9880
9881pw_libc
9882-------
9883* `Add stdfix target
9884  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194628>`__
9885  (issue `#323425639 <https://issues.pigweed.dev/issues/323425639>`__)
9886* `Facilitate next llvm-libc roll
9887  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194603>`__
9888
9889pw_log
9890------
9891* `Fix stdout race in println_backend_test_test
9892  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195122>`__
9893  (issue `#328498798 <https://issues.pigweed.dev/issues/328498798>`__)
9894* `Add tests for Rust printf and println backends
9895  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194952>`__
9896* `Show child docs in site nav
9897  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193830>`__
9898* `Fix the Pigweed Soong build
9899  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193690>`__
9900  (issue `#277108894 <https://issues.pigweed.dev/issues/277108894>`__)
9901
9902pw_module
9903---------
9904* `Remove README.md check
9905  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194934>`__
9906  (issue `#328265397 <https://issues.pigweed.dev/issues/328265397>`__)
9907
9908pw_multibuf
9909-----------
9910The new :cpp:class:`pw::multibuf::MultiBufAllocator` class is an interface
9911for allocating ``pw::multibuf::MultiBuf`` objects.
9912
9913* `Add MultiBufAllocator interface
9914  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180840>`__
9915* `Deduplicate const+non_const iterators
9916  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194405>`__
9917* `Clean up API
9918  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194600>`__
9919  (issue `#327673957 <https://issues.pigweed.dev/issues/327673957>`__)
9920* `Add +=N and +n operators to iterator
9921  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194310>`__
9922* `Add slicing operations to MultiBuf
9923  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192895>`__
9924
9925pw_presubmit
9926------------
9927* `Remove unused presubmit step
9928  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194940>`__
9929
9930pw_proto_compiler
9931-----------------
9932* `strip_import_prefix + options
9933  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194949>`__
9934  (issue `#328311416 <https://issues.pigweed.dev/issues/328311416>`__)
9935
9936pw_result
9937---------
9938* `Add constructor deduction guide
9939  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194612>`__
9940
9941pw_rpc
9942------
9943The newly public :cpp:class:`pw::rpc::CloseAndWaitForCallbacks` function
9944abandons an RPC and blocks on the completion of any running callbacks.
9945
9946* `Expose CloseAndWaitForCallbacks in client call API
9947  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194697>`__
9948
9949pw_rpc_transport
9950----------------
9951* `Add log for no packet available
9952  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194592>`__
9953
9954pw_rust
9955-------
9956* `Add Rust tokenized logging example
9957  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181268>`__
9958
9959pw_stream_uart_mcuxpresso
9960-------------------------
9961``pw_stream_uart_mcuxpresso`` now supports direct memory access reads and
9962writes.
9963
9964* `Fix code examples in docs
9965  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194630>`__
9966* `Implement DoRead DMA
9967  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192893>`__
9968  (issue `#325514698 <https://issues.pigweed.dev/issues/325514698>`__)
9969* `Implement DoWrite DMA
9970  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192892>`__
9971  (issue `#325514698 <https://issues.pigweed.dev/issues/325514698>`__)
9972* `Implement init / deinit
9973  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192891>`__
9974  (issue `#325514698 <https://issues.pigweed.dev/issues/325514698>`__)
9975* `USART DMA scaffolding
9976  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192890>`__
9977  (issue `#325514698 <https://issues.pigweed.dev/issues/325514698>`__)
9978
9979pw_string
9980---------
9981``pw::InlineByteString`` is a new alias of ``pw::InlineBasicString<std::byte>``
9982that can be used as a simple and efficient byte container.
9983
9984* `Add ToString for Result and Poll
9985  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194621>`__
9986* `Support InlineBasicString<std::byte>; InlineByteString alias
9987  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194710>`__
9988  (issue `#327497061 <https://issues.pigweed.dev/issues/327497061>`__)
9989
9990pw_sync
9991-------
9992* `Allow implict conversion when moving BorrowedPointer
9993  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194394>`__
9994
9995pw_tokenizer
9996------------
9997* `Fix missing bazel filegroup
9998  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194399>`__
9999* `Add Detokenizer constructor with elf binary section
10000  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190650>`__
10001* `Add code size optimization to Rust implementation
10002  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193504>`__
10003
10004pw_toolchain_bazel
10005------------------
10006* `Apply more common attrs to cc_toolchain targets
10007  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194890>`__
10008* `Support Windows in toolchain template build files
10009  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194591>`__
10010
10011pw_transfer
10012-----------
10013* `Respect user-specified resource size
10014  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194935>`__
10015* `Temporarily disable broken integration test
10016  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194850>`__
10017* `Only request a single chunk in test
10018  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194151>`__
10019  (issue `#323386167 <https://issues.pigweed.dev/issues/323386167>`__)
10020* `Fix WindowPacketDropper proxy filter
10021  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194030>`__
10022  (issue `#322497823 <https://issues.pigweed.dev/issues/322497823>`__)
10023
10024pw_unit_test
10025------------
10026The :ref:`module-pw_unit_test` docs have been revamped. Using the full upstream
10027GoogleTest backend with ``simple_printing_main`` in Bazel has been fixed.
10028
10029* `Update docs
10030  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193671>`__
10031* `Fix googletest backend
10032  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190593>`__
10033  (issue `#324116813 <https://issues.pigweed.dev/issues/324116813>`__)
10034
10035pw_watch
10036--------
10037``pw_watch`` now rebuilds when Bazel files are changed.
10038
10039* `Add bazel files to default watch patterns
10040  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/195310>`__
10041  (issue `#328619290 <https://issues.pigweed.dev/issues/328619290>`__)
10042
10043pw_web
10044------
10045The ``pw_web`` log viewer now captures browser console logs. It also
10046now supports creating log stores and downloading logs from stores.
10047
10048* `Capture browser logs in the log viewer
10049  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194451>`__
10050  (issue `#325096768 <https://issues.pigweed.dev/issues/325096768>`__)
10051* `Create log store and enable download logs from it
10052  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186874>`__
10053  (issue `#316966729 <https://issues.pigweed.dev/issues/316966729>`__)
10054
10055Bazel
10056-----
10057* `Update rust_crates in Bazel WORKSPACE
10058  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194938>`__
10059* `Mark more targets testonly
10060  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193626>`__
10061  (issue `#324116813 <https://issues.pigweed.dev/issues/324116813>`__)
10062
10063Docs
10064====
10065The new :ref:`protobuf style guide <docs-pw-style-protobuf>` describes how
10066protobufs should be styled throughout Pigweed.
10067
10068* `Add protobuf style guide
10069  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190723>`__
10070  (issue `#232867615 <https://issues.pigweed.dev/issues/232867615>`__)
10071* `Clarify that Pigweed doesn't support msan
10072  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194877>`__
10073  (issue `#234876100 <https://issues.pigweed.dev/issues/234876100>`__)
10074* `Clarify rvalue docs
10075  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194696>`__
10076* `Reorder tocdepth and title
10077  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193970>`__
10078* `Prefer rvalue references
10079  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193647>`__
10080* `Update changelog
10081  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193620>`__
10082
10083Third party
10084===========
10085* `Android.bp: Export fuchsia_sdk_lib_stdcompat headers
10086  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194370>`__
10087* (Emboss) `Support latest version of Emboss in GN
10088  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194876>`__
10089* (Emboss) `Add CMake support for emboss
10090  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194400>`__
10091  (issue `#326500136 <https://issues.pigweed.dev/issues/326500136>`__)
10092* (FreeRTOS) `Tidy up Bazel build
10093  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193633>`__
10094  (issue `#326625641 <https://issues.pigweed.dev/issues/326625641>`__)
10095* (FreeRTOS) `Create Bazel build template
10096  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193645>`__
10097  (issue `#326625641 <https://issues.pigweed.dev/issues/326625641>`__)
10098* (STM32Cube) `Build template formatting fixes
10099  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194723>`__
10100
10101Miscellaneous
10102=============
10103* `Unrecommendify
10104  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/194852>`__
10105* `Clean up Python proto imports
10106  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193641>`__
10107  (issue `#241456982 <https://issues.pigweed.dev/issues/241456982>`__)
10108
10109------------
10110Feb 23, 2024
10111------------
10112Highlights (Feb 9, 2024 to Feb 23, 2024):
10113
10114* The new :ref:`module-pw_json` module provides classes for serializing JSON.
10115* Raspberry Pi RP2040 support was expanded, including a new
10116  ``pw::digital_io::Rp2040Config`` struct enables you to configure polarity for
10117  RP2040 GPIO pins, and a new ``pw::spi::Rp2040Initiator`` class which is a
10118  Pico SDK userspace implementation of Pigweed's SPI ``Initiator`` class.
10119* The new ``pw::spi::DigitalOutChipSelector`` class sets the state of a
10120  :ref:`module-pw_digital_io` output when activated.
10121* The :ref:`module-pw_kvs` docs were overhauled.
10122
10123Active SEEDs
10124============
10125Help shape the future of Pigweed! Please visit :ref:`seed-0000`
10126and leave feedback on the RFCs (i.e. SEEDs) marked
10127``Open for Comments``.
10128
10129Modules
10130=======
10131
10132pw_allocator
10133------------
10134* `Remove total_bytes metric
10135  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193251>`__
10136* `Expose TrackingAllocator's initialization state
10137  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192570>`__
10138
10139pw_assert
10140---------
10141* `Apply formatting changes
10142  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193496>`__
10143
10144pw_assert_log
10145-------------
10146* `Fix Soong rules
10147  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190602>`__
10148  (issue `#324266698 <https://issues.pigweed.dev/issues/324266698>`__)
10149* `Fix missing lib in soong rule
10150  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192259>`__
10151
10152pw_bluetooth
10153------------
10154* `Add Emboss rules to BUILD.bazel
10155  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192513>`__
10156* `Update emboss imports to match Bazel rule
10157  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192392>`__
10158
10159pw_build
10160--------
10161* `Silence warnings from linker script test
10162  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191850>`__
10163
10164pw_bytes
10165--------
10166* `Add missing export in soong rule
10167  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192257>`__
10168
10169pw_chrono_rp2040
10170----------------
10171* `Minor tweaks to documentation and test
10172  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183730>`__
10173  (issue `#303297807 <https://issues.pigweed.dev/issues/303297807>`__)
10174
10175pw_cli
10176------
10177* `Add exit codes
10178  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192897>`__
10179
10180pw_config_loader
10181----------------
10182The new ``skip_files__without_sections`` option enables you to just move on
10183to the next file rather than raise an exception if a relevant section doesn't
10184exist in a config file.
10185
10186* `Allow skipping files
10187  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191970>`__
10188
10189pw_containers
10190-------------
10191* `Add default move operator for FilteredView
10192  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192830>`__
10193* `Add move constructor to FiltertedView
10194  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191832>`__
10195
10196pw_digital_io_rp2040
10197--------------------
10198The new ``pw::digital_io::Rp2040Config`` struct enables you to configure
10199polarity for RP2040 GPIO pins.
10200
10201* `Config with polarity
10202  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176290>`__
10203  (issue `#303255049 <https://issues.pigweed.dev/issues/303255049>`__)
10204
10205pw_env_setup
10206------------
10207* `Use amd64 host tools on arm64
10208  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192763>`__
10209  (issue `#325498131 <https://issues.pigweed.dev/issues/325498131>`__)
10210
10211pw_function
10212-----------
10213The new ``//third_party/fuchsia:fit`` label flag enables Bazel-based projects
10214to provide an alternate implementation for ``fit()`` when needed.
10215
10216* `//third_party/fuchsia:fit label_flag
10217  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192391>`__
10218
10219pw_fuzzer
10220---------
10221* `Fix Bazel example, add presubmit test
10222  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191310>`__
10223  (issue `#324617297 <https://issues.pigweed.dev/issues/324617297>`__)
10224
10225pw_grpc
10226-------
10227* `Fix some minor bugs
10228  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191831>`__
10229
10230pw_hdlc
10231-------
10232* `Add android_library targets
10233  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190930>`__
10234  (issue `#321155919 <https://issues.pigweed.dev/issues/321155919>`__)
10235
10236pw_i2c
10237------
10238The API reference for :cpp:class:`pw::i2c::RegisterDevice` is now published on
10239``pigweed.dev``.
10240
10241* `Doxygenify RegisterDevice
10242  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191833>`__
10243
10244pw_ide
10245------
10246* `Fix environment inference
10247  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191371>`__
10248
10249pw_json
10250-------
10251The new :ref:`module-pw_json` module provides classes for serializing JSON.
10252
10253* `Classes for serializing JSON
10254  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190458>`__
10255
10256pw_kvs
10257------
10258The :ref:`module-pw_kvs` docs were overhauled.
10259
10260* `Follow new module docs guidelines
10261  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189430>`__
10262
10263pw_log
10264------
10265* `Add android_library targets
10266  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190930>`__
10267  (issue `#321155919 <https://issues.pigweed.dev/issues/321155919>`__)
10268
10269pw_log_android
10270--------------
10271* `Fix missing libs in soong rule
10272  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192258>`__
10273
10274pw_metric
10275---------
10276* `Fix Bazel build
10277  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190971>`__
10278  (issue `#258078909 <https://issues.pigweed.dev/issues/258078909>`__)
10279
10280pw_module
10281---------
10282* `Add exit codes
10283  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192897>`__
10284
10285pw_multibuf
10286-----------
10287* `Fix soong support
10288  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192894>`__
10289  (issue `#325320103 <https://issues.pigweed.dev/issues/325320103>`__)
10290
10291pw_package
10292----------
10293* `Update GoogleTest
10294  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193250>`__
10295* `Remove capture_output=True
10296  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192530>`__
10297
10298pw_preprocessor
10299---------------
10300The :ref:`module-pw_preprocessor` reference is now being generated via Doxygen.
10301
10302* `Do not check for __VA_OPT__ on older compilers
10303  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193434>`__
10304  (issue `#326135018 <https://issues.pigweed.dev/issues/326135018>`__)
10305* `Switch to Doxygen
10306  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192730>`__
10307* `Use __VA_OPT__ when available
10308  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187099>`__
10309
10310pw_presubmit
10311------------
10312.. todo-check: disable
10313
10314* `Allow markdown style TODOs and adjust rustdocs
10315  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192253>`__
10316  (issue `#315389119 <https://issues.pigweed.dev/issues/315389119>`__)
10317* `Log format --fix output
10318  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192394>`__
10319* `Fix formatting of TypeScript code
10320  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192393>`__
10321* `Disallow FIXME and recommend TODO
10322  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188367>`__
10323* `Allow pwbug.dev in TODOs
10324  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191795>`__
10325* `Allow Bazel issues in TODOs
10326  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190970>`__
10327
10328.. todo-check: disable
10329
10330.. _docs-changelog-20240226-pw_rpc:
10331
10332pw_rpc
10333------
10334``pw_rpc`` clients will once again accept unsolicited responses from ``pw_rpc``
10335servers that were built prior to September 2022. Unsolicited responses, also
10336known as "open" requests, let a server send a message to a client prior to the
10337client sending a request. This change fixed an incompatibility in which
10338``pw_rpc`` clients built after September 2022 would not accept unsolicited
10339responses from servers built before September 2022 (specifically,
10340change `#109077 <https://pwrev.dev/109077>`_).
10341
10342* `Remove use of deprecated Python API
10343  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187491>`__
10344  (issue `#306195999 <https://issues.pigweed.dev/issues/306195999>`__)
10345* `Add android_library targets
10346  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190930>`__
10347  (issue `#321155919 <https://issues.pigweed.dev/issues/321155919>`__)
10348* `Support legacy unsolicited responses
10349  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192311>`__
10350
10351pw_software_update
10352------------------
10353* `Add java build objects
10354  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193410>`__
10355
10356pw_spi
10357------
10358The new ``pw::spi::DigitalOutChipSelector`` class is an implementation of
10359``pw::spi::ChipSelector`` that sets the state of a :ref:`module-pw_digital_io`
10360output when activated.
10361
10362* `Add Android.bp
10363  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192590>`__
10364  (issue `#316067629 <https://issues.pigweed.dev/issues/316067629>`__)
10365* `DigitalOutChipSelector
10366  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192790>`__
10367  (issue `#303255049 <https://issues.pigweed.dev/issues/303255049>`__)
10368* `Correct full-duplex behavior of linux_spi
10369  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192591>`__
10370  (issue `#316067628 <https://issues.pigweed.dev/issues/316067628>`__)
10371
10372pw_spi_rp2040
10373-------------
10374The new ``pw::spi::Rp2040Initiator`` class is a Pico SDK userspace
10375implementation of Pigweed's SPI ``Initiator`` class.
10376
10377* `Initiator implementation
10378  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192791>`__
10379  (issue `#303255049 <https://issues.pigweed.dev/issues/303255049>`__)
10380
10381pw_stream
10382---------
10383* `Fix Pigweed build after sync
10384  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191250>`__
10385  (issue `#277108894 <https://issues.pigweed.dev/issues/277108894>`__)
10386
10387pw_string
10388---------
10389Debug error messages for assertions containing ``std::optional`` types have
10390been improved.
10391
10392* `Add ToString for std::optional
10393  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192514>`__
10394
10395pw_sync
10396-------
10397* `Add missing lib in soong rule
10398  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192260>`__
10399
10400pw_tokenizer
10401------------
10402The :ref:`module-pw_tokenizer` and :ref:`module-pw_snapshot` Python
10403libraries can now be used from Bazel as a result of the proto
10404migration. See issue `#322850978 <https://issues.pigweed.dev/issues/322850978>`__).
10405
10406* `Fix link breakage on linux
10407  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192511>`__
10408  (issue `#321306079 <https://issues.pigweed.dev/issues/321306079>`__)
10409* `Proto migration stage 5/5
10410  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191270>`__
10411  (issue `#322850978 <https://issues.pigweed.dev/issues/322850978>`__)
10412* `Proto migration stage 3/5
10413  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189696>`__
10414  (issue `#322850978 <https://issues.pigweed.dev/issues/322850978>`__)
10415* `Proto migration stage 1.5/5
10416  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191834>`__
10417  (issue `#322850978 <https://issues.pigweed.dev/issues/322850978>`__)
10418* `Proto migration stage 1/5
10419  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191135>`__
10420  (issue `#322850978 <https://issues.pigweed.dev/issues/322850978>`__)
10421
10422pw_toolchain
10423------------
10424* `Add missing #include
10425  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193430>`__
10426* `Rename `action_config_flag_sets` to `flag_sets`
10427  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192911>`__
10428* `Simplify macOS -nostdlib++ usage
10429  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192898>`__
10430* `Remove unnecessary toolchain arguments
10431  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192896>`__
10432* `Add missing macOS cxx_builtin_include_directories
10433  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192270>`__
10434  (issue `#324652164 <https://issues.pigweed.dev/issues/324652164>`__)
10435
10436pw_toolchain_bazel
10437------------------
10438* `Use llvm-libtool-darwin on macOS
10439  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190896>`__
10440  (issue `#297413805 <https://issues.pigweed.dev/issues/297413805>`__)
10441* `Explicitly depend on rules_cc
10442  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191430>`__
10443
10444pw_transfer
10445-----------
10446* `Add an android_library for the Java client
10447  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193534>`__
10448* `Change class to parser
10449  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193550>`__
10450* `Fix integration test START packet issue
10451  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192755>`__
10452  (issue `#322497491 <https://issues.pigweed.dev/issues/322497491>`__)
10453* `Add GetResourceStatus method
10454  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192810>`__
10455* `Limit test to sending a single chunk
10456  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192510>`__
10457* `Remove/hide deprecated handle interfaces
10458  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190972>`__
10459
10460pw_watch
10461--------
10462* `Add exit codes
10463  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192897>`__
10464
10465pw_web
10466------
10467The log viewer now supports multiple log sources.
10468
10469* `NPM version bump to 0.0.14
10470  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193510>`__
10471* `Enable multiple log sources
10472  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192370>`__
10473  (issue `#325096310 <https://issues.pigweed.dev/issues/325096310>`__)
10474
10475Build
10476=====
10477* `Fix docs build on mac-arm64
10478  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192910>`__
10479* `Use correct host_cpu when disabling docs on Arm Macs
10480  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192757>`__
10481* `Remove docs from default build on Arm Macs
10482  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192754>`__
10483  (issue `#315998985 <https://issues.pigweed.dev/issues/315998985>`__)
10484* `Build for Java 11
10485  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191830>`__
10486
10487Bazel
10488-----
10489* `Remove shallow_since attributes
10490  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193473>`__
10491* `Upgrade protobuf to 4.24.4
10492  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187431>`__
10493  (issue `#319717451 <https://issues.pigweed.dev/issues/319717451>`__)
10494
10495Targets
10496=======
10497* (rp2040) `Replace rp2040 target with rp2040_pw_system
10498  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192516>`__
10499* (rp2040) `Custom libusb backend
10500  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192630>`__
10501
10502OS support
10503==========
10504* (Zephyr) `Change the pinned Zephyr commit
10505  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192690>`__
10506* (Zephyr) `Add zephyr's west CLI
10507  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190547>`__
10508
10509Docs
10510====
10511`Breadcrumbs <https://en.wikipedia.org/wiki/Breadcrumb_navigation>`_ are now
10512shown at the top of all docs pages except the homepage.
10513
10514* `Add breadcrumbs
10515  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193508>`__
10516* `Fix incorrect module name in changelog
10517  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193331>`__
10518* `Fix canonical URLs for all */docs.html pages
10519  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193431>`__
10520* `Fix typo in facades documentation
10521  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192710>`__
10522* `Fix 404s
10523  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192251>`__
10524  (issue `#325086274 <https://issues.pigweed.dev/issues/325086274>`__)
10525
10526SEEDs
10527=====
10528* (SEED-0125) `Claim SEED number
10529  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192110>`__
10530* `Mark legacy Sensor SEED as Rejected
10531  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192250>`__
10532
10533Third party
10534===========
10535* `Roll FuzzTest and Abseil
10536  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189419>`__
10537
10538Miscellaneous
10539=============
10540* `Disable tests incompatible with rp2040
10541  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192764>`__
10542  (issue `#260624583 <https://issues.pigweed.dev/issues/260624583>`__)
10543* `Fix uses of std::chrono literals
10544  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192515>`__
10545* (pigweed.json) `Disallow Rosetta
10546  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188251>`__
10547  (issue `#315998985 <https://issues.pigweed.dev/issues/315998985>`__)
10548* (renode) `Update renode to latest daily build
10549  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/192254>`__
10550
10551-----------
10552Feb 9, 2024
10553-----------
10554Highlights (Jan 26, 2024 to Feb 9, 2024):
10555
10556* The new :ref:`module-pw_grpc` module provides classes that map between
10557  ``pw_rpc`` packets and HTTP/2 gRPC frames, allowing ``pw_rpc`` services to
10558  be exposed as gRPC services.
10559* A lot of the remaining ``pw_toolchain_bazel`` feature work from
10560  :ref:`seed-0113` was finished and rough edges were polished up.
10561* The new generic ``pw::allocator::BlockAllocator`` interface supported several
10562  derived types that enable fine-grained control over how a block satisfies an
10563  allocation request.
10564
10565* ``pw_transfer`` now supports :ref:`resumable transfers
10566  <pw_transfer-nonzero-transfers>`.
10567
10568Active SEEDs
10569============
10570Help shape the future of Pigweed! Please visit :ref:`seed-0000`
10571and leave feedback on the RFCs (i.e. SEEDs) marked
10572``Open for Comments``.
10573
10574Modules
10575=======
10576
10577pw_alignment
10578------------
10579* `Add CMake & Soong support
10580  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189360>`__
10581
10582pw_allocator
10583------------
10584The new generic :cpp:class:`pw::allocator::BlockAllocator` interface supports
10585several derived types that enable fine-grained control over how a block
10586satisfies an allocation request. The new :cpp:func:`pw::allocator::GetLayout()`
10587method retrieves the layout that was used to allocate a given pointer. The new
10588:cpp:class:`pw::allocator::AllocatorSyncProxy` interface synchronizes access to
10589another allocator, allowing it to be used by multiple threads.
10590
10591* `Refactor metric collection for tests
10592  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190105>`__
10593* `Add Allocator::GetLayout
10594  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187764>`__
10595* `Add BlockAllocator
10596  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187657>`__
10597* `Fix SynchronizedAllocator typo
10598  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190721>`__
10599* `Streamline Block and improve testing
10600  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187656>`__
10601* `Separate metrics from Fallback-, MultiplexAllocator
10602  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190253>`__
10603* `Make TrackingAllocator::Init optional
10604  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190454>`__
10605* `Check for integer overflow in Layout
10606  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187654>`__
10607* `Add additional metrics
10608  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190250>`__
10609* `Rename AllocatorMetricProxy to TrackingAllocator
10610  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190230>`__
10611* `Add SynchronizedAllocator
10612  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189690>`__
10613* `Fix typo
10614  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189717>`__
10615* `Fix Allocator::Reallocate
10616  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189691>`__
10617
10618pw_assert
10619---------
10620* `Break out compatibility backend target
10621  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189106>`__
10622  (issue `#322057191 <https://issues.pigweed.dev/issues/322057191>`__)
10623
10624pw_async_basic
10625--------------
10626* `Remove unneeded locks from test
10627  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190238>`__
10628* `Test flake fix
10629  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189938>`__
10630  (issue `#323251704 <https://issues.pigweed.dev/issues/323251704>`__)
10631* `Fix data race in newly added test
10632  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189879>`__
10633* `Fix ordering of tasks posted at same time
10634  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189784>`__
10635
10636pw_bloat
10637--------
10638The new boolean argument ``ignore_unused_labels`` for ``pw_size_report()``
10639enables you to remove labels from the JSON size report that have a size of 0.
10640
10641* `Allow removal of zero sized labels
10642  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190599>`__
10643  (issue `#282057969 <https://issues.pigweed.dev/issues/282057969>`__)
10644
10645pw_bluetooth
10646------------
10647* `Add l2cap_frames.emb
10648  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185751>`__
10649* `Fix typo in SbcAllocationMethod
10650  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190130>`__
10651
10652pw_boot
10653-------
10654* `Update status and general doc cleanup
10655  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189298>`__
10656
10657pw_build
10658--------
10659The new ``PW_USE_COLOR``, ``NO_COLOR``, and ``CLICOLOR_FORCE`` OS environment
10660variables enable you to control whether output in CI/CQ is color formatted.
10661
10662* `Add Fuchsia to TARGET_COMPATIBLE_WITH_HOST_SELECT
10663  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190714>`__
10664* `Enable fixed point types for clang builds
10665  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190097>`__
10666  (issue `#323425639 <https://issues.pigweed.dev/issues/323425639>`__)
10667* `Support disabling colors
10668  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189611>`__
10669  (issue `#323056074 <https://issues.pigweed.dev/issues/323056074>`__)
10670
10671pw_bytes
10672--------
10673* `Check for integer overflow
10674  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187655>`__
10675
10676pw_channel
10677----------
10678The initial ``pw::channel::Channel`` class from :ref:`seed-0114` has been
10679introduced but it is experimental and should not be used yet.
10680
10681* `Docs fix
10682  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190624>`__
10683* `Module for async data exchange with minimal copying
10684  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189284>`__
10685
10686pw_cli
10687------
10688* `Add json_config_loader_mixin
10689  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190540>`__
10690
10691pw_compilation_testing
10692----------------------
10693* `Do not expand regexes
10694  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/191030>`__
10695* `Minor improvements
10696  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189788>`__
10697
10698pw_config_loader
10699----------------
10700The code from ``pw_cli`` related to looking up user-specific configuration
10701files has been moved to this separate module.
10702
10703* `Add support for nested keys
10704  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190673>`__
10705* `Add tests
10706  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190672>`__
10707* `Initial commit
10708  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190671>`__
10709
10710pw_cpu_exception_cortex_m
10711-------------------------
10712* `Handle ARM v8.1 case
10713  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189828>`__
10714  (issue `#311766664 <https://issues.pigweed.dev/issues/311766664>`__)
10715
10716pw_digital_io
10717-------------
10718* `[[nodiscard]] on as() conversion functions
10719  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189815>`__
10720* `Use pw::internal::SiblingCast
10721  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189015>`__
10722
10723pw_env_setup
10724------------
10725* `Roll cipd
10726  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190737>`__
10727  (issue `#315378787 <https://issues.pigweed.dev/issues/315378787>`__)
10728* `Make npm actions more robust
10729  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189358>`__
10730  (issues `#323378974 <https://issues.pigweed.dev/issues/305042957>`__,
10731  `#322437881 <https://issues.pigweed.dev/issues/322437881>`__,
10732  `#323378974 <https://issues.pigweed.dev/issues/323378974>`__)
10733* `Only add mingw to PATH once
10734  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190030>`__
10735  (issue `#322437881 <https://issues.pigweed.dev/issues/322437881>`__)
10736
10737pw_format
10738---------
10739* `Fix safe buildifier warnings
10740  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189716>`__
10741  (issue `#242181811 <https://issues.pigweed.dev/issues/242181811>`__)
10742
10743pw_function
10744-----------
10745* `Follow new docs guidelines
10746  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188362>`__
10747
10748pw_fuzzer
10749---------
10750* `Fix Bazel run target instructions
10751  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188363>`__
10752
10753pw_grpc
10754-------
10755The new :ref:`module-pw_grpc` module is an implementation of the gRPC HTTP/2
10756protocol. It provides classes that map between :ref:`module-pw_rpc` packets
10757and ``pw_grpc`` HTTP/2 frames, allowing ``pw_rpc`` services to be exposed as
10758gRPC services.
10759
10760* `Fix off-by-one error when handling DATA frames
10761  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190470>`__
10762  (issue `#323924487 <https://issues.pigweed.dev/issues/323924487>`__)
10763* `Add new module
10764  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186796>`__
10765
10766pw_ide
10767------
10768* `Disable Python terminal activation in VSC
10769  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190592>`__
10770* `Remove terminal env vars from VSC settings
10771  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188470>`__
10772* `VSC extension 0.1.4 release
10773  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188742>`__
10774
10775pw_presubmit
10776------------
10777Color formatting in CI/CQ has been improved for readability.
10778
10779* `Simplify 'gn gen' color logic
10780  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190239>`__
10781* `Use color logic in gn gen call
10782  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189827>`__
10783* `Apply color logic in more cases
10784  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189829>`__
10785* `Support disabling colors
10786  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189611>`__
10787  (issue `#323056074 <https://issues.pigweed.dev/issues/323056074>`__)
10788
10789pw_protobuf
10790-----------
10791* `Use pw::internal::SiblingCast
10792  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189015>`__
10793
10794pw_random
10795---------
10796* `Clean up build files
10797  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189779>`__
10798
10799pw_result
10800---------
10801* `Add missing libs in Soong blueprint
10802  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190950>`__
10803
10804pw_rpc
10805------
10806* `Avoid undefined behavior when casting to rpc::Writer
10807  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189648>`__
10808
10809pw_stream
10810---------
10811* `Use pw::internal::SiblingCast
10812  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189015>`__
10813
10814pw_target_runner
10815----------------
10816* `Remove .dev from path name
10817  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190450>`__
10818
10819pw_thread
10820---------
10821* `Incease the sleep duration in tests
10822  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190270>`__
10823  (issue `#321832803 <https://issues.pigweed.dev/issues/321832803>`__)
10824
10825pw_tokenizer
10826------------
10827:ref:`Troubleshooting docs <module-pw_tokenizer-gcc-template-bug>` were added
10828that explain how to workaround GCC's template function tokenization bug in GCC
10829releases prior to 14.
10830
10831* `Mention GCC template bug in the docs
10832  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189820>`__
10833
10834pw_toolchain
10835------------
10836* `Disable unstable features in rust toolchains
10837  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189948>`__
10838* `Fix divergent configuration in arm_clang M0+ toolchain
10839  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190196>`__
10840* `Use less generic names for B1-B5
10841  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189732>`__
10842* `Use LLVM compiler-rt builtins
10843  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186232>`__
10844* `Internal wrapper for casting between siblings
10845  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189014>`__
10846  (issue `#319144706 <https://issues.pigweed.dev/issues/319144706>`__)
10847* `Small docs update
10848  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189278>`__
10849  (issue `#300471936 <https://issues.pigweed.dev/issues/300471936>`__)
10850
10851pw_toolchain_bazel
10852------------------
10853A lot of the remaining ``pw_toolchain_bazel`` feature work from
10854:ref:`seed-0113` was finished and rough edges were polished up.
10855
10856* `Remove support for *_files
10857  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190810>`__
10858  (issue `#323448214 <https://issues.pigweed.dev/issues/323448214>`__)
10859* `Add support for setting environment variables
10860  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190154>`__
10861  (issue `#322872628 <https://issues.pigweed.dev/issues/322872628>`__)
10862* `Implement per-action files
10863  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190152>`__
10864  (issue `#322872628 <https://issues.pigweed.dev/issues/322872628>`__)
10865* `Migrate to PwToolInfo
10866  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190150>`__
10867  (issue `#322872628 <https://issues.pigweed.dev/issues/322872628>`__)
10868* `Pull file collection into config rule
10869  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189971>`__
10870  (issue `#322872628 <https://issues.pigweed.dev/issues/322872628>`__)
10871* `Implement pw_cc_provides
10872  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189112>`__
10873  (issue `#320177248 <https://issues.pigweed.dev/issues/320177248>`__)
10874* `Implement PwActionConfigInfo
10875  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189990>`__
10876  (issue `#322872628 <https://issues.pigweed.dev/issues/322872628>`__)
10877* `Create temporary variable
10878  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189970>`__
10879  (issue `#322872628 <https://issues.pigweed.dev/issues/322872628>`__)
10880* `Add a concept of well-known features
10881  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189050>`__
10882  (issue `#320177248 <https://issues.pigweed.dev/issues/320177248>`__)
10883* `Implement requires_any_of for flag sets
10884  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189111>`__
10885  (issue `#320177248 <https://issues.pigweed.dev/issues/320177248>`__)
10886* `Migrate to custom PwFeatureInfo
10887  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189030>`__
10888  (issue `#320177248 <https://issues.pigweed.dev/issues/320177248>`__)
10889* `Add custom PwFlagSetInfo
10890  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188990>`__
10891  (issue `#322872628 <https://issues.pigweed.dev/issues/322872628>`__)
10892* `Replace bazel_tools providers with PW providers
10893  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189110>`__
10894  (issue `#322872628 <https://issues.pigweed.dev/issues/322872628>`__)
10895* `Support regular binaries as tools
10896  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190151>`__
10897  (issue `#322872628 <https://issues.pigweed.dev/issues/322872628>`__)
10898
10899pw_transfer
10900-----------
10901``pw_transfer`` now supports :ref:`resumable transfers
10902<pw_transfer-nonzero-transfers>`.
10903
10904* `Account for remaining_bytes in payload buffer
10905  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190572>`__
10906* `Rename TransferHandle -> Handle
10907  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189097>`__
10908* `Add resumeable transfers
10909  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182830>`__
10910* `Make cancellation a method on handles
10911  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189096>`__
10912* `Allow setting a transfer resource size in C++
10913  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189095>`__
10914  (issue `#319731837 <https://issues.pigweed.dev/issues/319731837>`__)
10915
10916pw_unit_test
10917------------
10918* `Remove obsolete label flag
10919  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190557>`__
10920
10921Build
10922=====
10923* (Bazel) `Update clang version
10924  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190256>`__
10925
10926OS support
10927==========
10928* (Zephyr) `Fix default logging in chromium CQ
10929  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190696>`__
10930
10931Docs
10932====
10933* `Nest backends under respective facades in sitenav
10934  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190245>`__
10935* `Add doxygengroup to the style guide
10936  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190625>`__
10937* `Update homepage
10938  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190018>`__
10939* `Update README links
10940  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189731>`__
10941* `Fix module homepage canonical URLs
10942  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189773>`__
10943  (issue `#323077749 <https://issues.pigweed.dev/issues/323077749>`__)
10944* `Update Bazel quickstart output sample
10945  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189412>`__
10946  (issue `#300471936 <https://issues.pigweed.dev/issues/300471936>`__)
10947
10948SEEDs
10949=====
10950* (SEED-0122) `Update status, add bug reference
10951  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189612>`__
10952* `Fix pw_seed_index template deps
10953  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190675>`__
10954* `Add authors to SEED document headers
10955  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189870>`__
10956* (SEED-0119) `Add sensors SEED
10957  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182653>`__
10958
10959Miscellaneous
10960=============
10961* `Update the bootstrap script to have start/end guards
10962  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190451>`__
10963* `Migrate bug numbers
10964  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189353>`__
10965  (issue `#298074672 <https://issues.pigweed.dev/issues/298074672>`__)
10966* `Upgrade mbedtls to 3.5.0
10967  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189273>`__
10968  (issue `#319289775 <https://issues.pigweed.dev/issues/319289775>`__)
10969* `Fix clang-format findings
10970  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/190090>`__
10971
10972------------
10973Jan 26, 2024
10974------------
10975Highlights (Jan 12, 2024 to Jan 26, 2024):
10976
10977* The new :ref:`docs-bazel-integration` guide shows you how to integrate a
10978  single Pigweed module into an existing Bazel project.
10979* Initial support for :py:class:`pw_cc_feature` has been added, which completes
10980  the initial set of rules required for building toolchains with
10981  :ref:`module-pw_toolchain_bazel`.
10982* A longstanding GCC bug that caused tokenized logging within a function
10983  template to not work has been fixed.
10984
10985Active SEEDs
10986============
10987Help shape the future of Pigweed! Please visit :ref:`seed-0000`
10988and leave feedback on the RFCs (i.e. SEEDs) marked
10989``Open for Comments``.
10990
10991Modules
10992=======
10993
10994pw_allocator
10995------------
10996* `Add SplifFreeListAllocator fuzzer
10997  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178216>`__
10998
10999pw_bluetooth
11000------------
11001* `Add advertising packet content filter emboss definitions
11002  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188314>`__
11003* `Add android multiple advertising emboss structures
11004  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188313>`__
11005* `Add a2dp remaining offload emboss structures
11006  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188311>`__
11007* `Move emboss structures from hci_commands to hci_common
11008  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188312>`__
11009* `Reorganize hci_vendor.emb
11010  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188310>`__
11011* `Add new event definitions
11012  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188150>`__
11013  (issue `#311639432 <https://issues.pigweed.dev/issues/311639432>`__)
11014
11015pw_build
11016--------
11017The new :ref:`module-pw_build-bazel-pw_cc_binary_with_map` Bazel rule enables
11018you to generate a ``.map`` file when building a binary.
11019
11020* `Add pw_cc_binary variant to generate .map files
11021  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187710>`__
11022  (issue `#319746242 <https://issues.pigweed.dev/issues/319746242>`__)
11023
11024pw_bytes
11025--------
11026The :cpp:class:`pw::ByteBuilder` API reference is now being auto-generated
11027via Doxygen. The new :cpp:func:`pw::bytes::SignExtend` template enables
11028expanding the nth bit to the left up to the size of the destination type.
11029
11030* `Fix compilation error occured with Werror=all
11031  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188890>`__
11032* `Update documentation
11033  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188462>`__
11034* `SignExtend template
11035  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188456>`__
11036  (issue `#321114167 <https://issues.pigweed.dev/issues/321114167>`__)
11037* `Make _b literals error on values >255
11038  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188208>`__
11039
11040pw_compilation_testing
11041----------------------
11042* `Skip tests excluded by the preprocessor
11043  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188650>`__
11044  (issue `#321088147 <https://issues.pigweed.dev/issues/321088147>`__)
11045
11046pw_console
11047----------
11048* `Upgrade to ptpython 3.0.25
11049  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188146>`__
11050  (issue `#320509105 <https://issues.pigweed.dev/issues/320509105>`__)
11051
11052pw_containers
11053-------------
11054The destructors for ``pw::InlineQueue``, ``pw::InlineDeque``, and
11055``pw::Vector`` are now protected to prevent use with ``delete`` or
11056``std::unique_ptr`` and to prevent unusable declarations.
11057
11058* `Protected InlineQueue/Deque<T> destructor
11059  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187802>`__
11060* `Make Vector<T> destructor protected
11061  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187801>`__
11062
11063pw_digital_io
11064-------------
11065The private virtual API requirements for
11066:cpp:class:`pw::digital_io::DigitalIoOptional` are now documented because
11067they are needed when implementing concrete backends for ``pw_digital_io``.
11068
11069* `Document the private virtual API requirements
11070  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187669>`__
11071* `Remove conditional interrupt disabling requirements
11072  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187668>`__
11073
11074pw_doctor
11075---------
11076* `Update expected tools on POSIX
11077  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188102>`__
11078  (issue `#315998985 <https://issues.pigweed.dev/issues/315998985>`__)
11079
11080pw_env_setup
11081------------
11082* `Retrieve qemu on ARM Macs
11083  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187806>`__
11084  (issue `#315998985 <https://issues.pigweed.dev/issues/315998985>`__)
11085
11086pw_hdlc
11087-------
11088* `Remove unused targets
11089  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188226>`__
11090* `Remove unused rpc packet processor target
11091  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188233>`__
11092
11093pw_ide
11094------
11095* `Fix typo
11096  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188423>`__
11097* `Launch activated terminals in VSC
11098  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187195>`__
11099  (issue `#318583596 <https://issues.pigweed.dev/issues/318583596>`__)
11100* `VSC extension 0.1.3 release
11101  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186726>`__
11102
11103pw_kvs
11104------
11105The new ``pw::kvs::FlashMemory::EndOfWrittenData()`` method returns the first
11106byte of erased flash that has no more written bytes.
11107
11108* `Add EndOfWrittenData()
11109  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188872>`__
11110
11111pw_persistent_ram
11112-----------------
11113* `Add more tests to PersistentBuffer
11114  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188106>`__
11115  (issue `#320538351 <https://issues.pigweed.dev/issues/320538351>`__)
11116
11117pw_polyfill
11118-----------
11119``pw_polyfill/static_assert.h`` now provides a C23-style ``static_assert()``.
11120See :ref:`module-pw_polyfill-static_assert`.
11121
11122* `Remove _Static_assert workaround
11123  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188277>`__
11124* `Provide static_assert polyfill for C
11125  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188137>`__
11126
11127pw_preprocessor
11128---------------
11129The new ``PW_ADD_OVERFLOW``, ``PW_SUB_OVERFLOW``, and ``PW_MUL_OVERFLOW``
11130macros can be used to :ref:`check for integer overflows
11131<module-pw_preprocessor-integer-overflow>`.
11132
11133* `Add integer-overflow macros
11134  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187653>`__
11135
11136pw_presubmit
11137------------
11138* `Add more info to todo summary
11139  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188750>`__
11140* `Trim paths in ninja summary
11141  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188070>`__
11142* `No copyright for MODULE.bazel.lock
11143  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188170>`__
11144* `Exclude docs on Mac ARM hosts
11145  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187784>`__
11146  (issue `#315998985 <https://issues.pigweed.dev/issues/315998985>`__)
11147
11148pw_protobuf
11149-----------
11150* `Fix another &*nullptr in test
11151  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188717>`__
11152* `Fix undefined pointer deref in fuzz test
11153  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188281>`__
11154* `Fix out-of-range read
11155  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188095>`__
11156  (issue `#314803709 <https://issues.pigweed.dev/issues/314803709>`__)
11157
11158pw_thread
11159---------
11160* `Add missing include
11161  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/189212>`__
11162
11163pw_tokenizer
11164------------
11165A longstanding GCC bug that caused tokenized logging within a function template
11166to not work has been fixed.
11167
11168* `Compensate for GCC template bug
11169  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188424>`__
11170  (issue `#321306079 <https://issues.pigweed.dev/issues/321306079>`__)
11171* `Allow use of static_assert in C99 test
11172  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188357>`__
11173* `Adjust rustdocs deps to only be in std environments
11174  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188138>`__
11175
11176pw_tool
11177-------
11178This incomplete module has been deleted.
11179
11180* `Delete module
11181  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188919>`__
11182
11183pw_toolchain_bazel
11184------------------
11185The ``//pw_toolchain_bazel`` directory is now configured to be compiled as a
11186standalone Bazel module. Initial support for :py:class:`pw_cc_feature` has been
11187added, which completes the initial set of rules required for building
11188toolchains with :ref:`module-pw_toolchain_bazel`.
11189
11190* `Remove deprecated action names
11191  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188991>`__
11192  (issue `#320177248 <https://issues.pigweed.dev/issues/320177248>`__)
11193* `Migrate to type-safe action names
11194  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187896>`__
11195  (issue `#320177248 <https://issues.pigweed.dev/issues/320177248>`__)
11196* `Require action labels in providers
11197  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188810>`__
11198  (issue `#320177248 <https://issues.pigweed.dev/issues/320177248>`__)
11199* `Define actions names as labels
11200  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187895>`__
11201  (issue `#320177248 <https://issues.pigweed.dev/issues/320177248>`__)
11202* `Make the pw_toolchain repository into a bazel module
11203  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187932>`__
11204  (issue `#320177248 <https://issues.pigweed.dev/issues/320177248>`__)
11205* `Add pw_cc_feature
11206  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181755>`__
11207  (issue `#309533028 <https://issues.pigweed.dev/issues/309533028>`__)
11208* `Set exec_transition_for_inputs to False
11209  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188361>`__
11210  (issue `#321268080 <https://issues.pigweed.dev/issues/321268080>`__)
11211* `Remove check_deps_provide
11212  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187894>`__
11213  (issue `#320177248 <https://issues.pigweed.dev/issues/320177248>`__)
11214
11215pw_transfer
11216-----------
11217The C++ client for :ref:`module-pw_transfer` now uses handles for
11218cancellation.
11219
11220* `Remove duplicated Builder call
11221  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188855>`__
11222* `Use handles for cancellation in C++ client
11223  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/134290>`__
11224  (issue `#272840682 <https://issues.pigweed.dev/issues/272840682>`__)
11225
11226pw_web
11227------
11228* `Init. improvements to resize performance
11229  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188050>`__
11230  (issue `#320475138 <https://issues.pigweed.dev/issues/320475138>`__)
11231
11232Build
11233=====
11234* `Use Python 3.11
11235  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182191>`__
11236  (issue `#310293060 <https://issues.pigweed.dev/issues/310293060>`__)
11237* `Use pre-release of rules_python
11238  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188852>`__
11239  (issue `#310293060 <https://issues.pigweed.dev/issues/310293060>`__)
11240* `Use rules_python in Bazel build files
11241  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188690>`__
11242
11243Targets
11244=======
11245
11246host_device_simulator
11247---------------------
11248* `Update docs
11249  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187430>`__
11250
11251Docs
11252====
11253* `How to use a single Pigweed module in Bazel
11254  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188922>`__
11255* `Add pre-reqs for non-Debian Linux distros
11256  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188770>`__
11257  (issue `#320519800 <https://issues.pigweed.dev/issues/320519800>`__)
11258* `Auto-generate module source code and issues URLs
11259  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187312>`__
11260* `Minor updates to the FAQ
11261  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188252>`__
11262* `Update changelog
11263  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187614>`__
11264
11265SEEDs
11266=====
11267* (SEED-0123) `Claim SEED number
11268  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188140>`__
11269* (SEED-0124) `Claim SEED number
11270  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188671>`__
11271
11272Miscellaneous
11273=============
11274* `Remove module-level README.md files
11275  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188374>`__
11276* `Fix how we ignore bazel- directories
11277  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188940>`__
11278
11279------------
11280Jan 12, 2024
11281------------
11282Highlights (Dec 29, 2023 to Jan 12, 2024):
11283
11284* :ref:`docs-changelog-20240112-pw_allocator` added parameter to make it easier
11285  to work with allocation metadata in a block's header and made it easier to
11286  omit flag-related code for blocks.
11287* ``pw_cc_library`` has been replaced with the Bazel-native ``cc_library``.
11288* :ref:`docs-changelog-20240112-pw_thread_stl` disallowed
11289  ``std::thread::detach()`` on Windows because it's known to randomly hang
11290  indefinitely.
11291
11292Active SEEDs
11293============
11294Help shape the future of Pigweed! Please visit :ref:`seed-0000`
11295and leave feedback on the RFCs (i.e. SEEDs) marked
11296``Open for Comments``.
11297
11298Modules
11299=======
11300
11301.. _docs-changelog-20240112-pw_allocator:
11302
11303pw_allocator
11304------------
11305A new template parameter, ``kNumExtraBytes``, was added to ``Block``. This
11306parameter reserves space in the block's header for storing and fetching
11307allocation metadata.
11308
11309The ``kMaxSize`` parameter was removed from ``Block``
11310and replaced by ``kNumFlags`` to make it easier to omit flag-related code when
11311not needed and define fewer block types rather than one for each allocation
11312pool size.
11313
11314* `Fix source file list in soong rule
11315  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187127>`__
11316* `Fix MulitplexAllocator's deps
11317  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186873>`__
11318* `Add extra bytes to Block
11319  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185954>`__
11320* `Add initializing constructors
11321  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185953>`__
11322* `Add note to AllocatorMetricProxy tests
11323  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185952>`__
11324
11325pw_bluetooth_sapphire
11326---------------------
11327* `Advertise FCS Option
11328  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186850>`__
11329  (issue `#318002648 <https://issues.pigweed.dev/issues/318002648>`__)
11330* `Refactor method and variable names
11331  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182899>`__
11332  (issue `#312645622 <https://issues.pigweed.dev/issues/312645622>`__)
11333* `Revert commits to get to a known working state
11334  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183087>`__
11335
11336pw_containers
11337-------------
11338* `Remove DestructorHelper from vector
11339  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185521>`__
11340  (issue `#301329862 <https://issues.pigweed.dev/issues/301329862>`__)
11341
11342pw_doctor
11343---------
11344* `Fix overridden package check
11345  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187110>`__
11346
11347pw_emu
11348------
11349* `Remove psutil dependency
11350  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186830>`__
11351  (issue `#316080297 <https://issues.pigweed.dev/issues/316080297>`__)
11352
11353pw_env_setup
11354------------
11355* `Update ref to bazel version file
11356  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187118>`__
11357* `Drop reference to rust version file
11358  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187113>`__
11359* `Use correct arch for cipd in Bazel
11360  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184903>`__
11361  (issue `#234879770 <https://issues.pigweed.dev/issues/234879770>`__)
11362* `Switch to Fuchsia ninja CIPD package
11363  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184078>`__
11364  (issue `#311711323 <https://issues.pigweed.dev/issues/311711323>`__)
11365* `Prevent NPM output from interrupting bootstrap
11366  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186510>`__
11367
11368pw_ide
11369------
11370The new ``pigweed.enforceExtensionRecommendations`` configuration option for
11371VS Code makes extension recommendation enforcement optional. When you set this
11372flag to ``true`` in your project's ``extension.json``, recommended extensions
11373will need to be installed and non-recommended extensions will need to be
11374disabled.
11375
11376You can now submit Pigweed issues through VS Code. Open the Command Palette
11377and type ``Pigweed: File Bug``.
11378
11379* `Add Jest testing to VSC extension
11380  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187126>`__
11381* `Make VSC extension enforcement an option
11382  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187170>`__
11383* `Support alternate \`clangd\` paths
11384  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186730>`__
11385  (issue `#318413766 <https://issues.pigweed.dev/issues/318413766>`__)
11386* `VSC extension 0.1.2 release
11387  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184907>`__
11388* `Fix CLI command docs
11389  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184955>`__
11390* `Allow submitting bugs from VSC
11391  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184908>`__
11392* `Document \`compdb_gen_cmd\`
11393  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184899>`__
11394* `Improve VSC extension UX
11395  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184990>`__
11396
11397.. _docs-changelog-20240112-pw_log:
11398
11399pw_log
11400------
11401The Python API of the log decoder now accepts a ``logging.Logger`` or
11402``logging.LoggerAdapter`` instance as the default device logger. Previously
11403it only accepted ``logging.Logger``.
11404
11405* `Let Device accept logger adapter
11406  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187119>`__
11407
11408pw_log_zephyr
11409-------------
11410* `Add missing include for tokenized logging
11411  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186810>`__
11412
11413pw_multibuf
11414-----------
11415* `Add soong support
11416  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186815>`__
11417
11418pw_protobuf
11419-----------
11420* `Fix bool overflow
11421  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186801>`__
11422  (issue `#318732334 <https://issues.pigweed.dev/issues/318732334>`__)
11423* `Fix nullptr dereference in fuzz test
11424  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186800>`__
11425  (issue `#314829525 <https://issues.pigweed.dev/issues/314829525>`__)
11426* `Don't crash on invalid field number
11427  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186724>`__
11428  (issue `#314803709 <https://issues.pigweed.dev/issues/314803709>`__)
11429* `Fix conflict in messages with fields named 'other'
11430  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186951>`__
11431* `Properly fuzz nested encoders/decoders
11432  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186723>`__
11433  (issue `#314803709 <https://issues.pigweed.dev/issues/314803709>`__)
11434* `Fully qualify message namespace
11435  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186822>`__
11436
11437pw_rpc
11438------
11439The new ``PW_RPC_METHOD_STORES_TYPE`` config option provides a way at runtime
11440to determine a method's type. This is useful when implementing a translation
11441layer from another RPC system. Most Pigweed projects won't need this feature so
11442it's disabled by default.
11443
11444* `Have Method optionally store it's MethodType
11445  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185773>`__
11446* `Run tests with completion callback config enabled
11447  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187172>`__
11448* `Add some missing deps in Bazel targets
11449  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186934>`__
11450  (issue `#318850523 <https://issues.pigweed.dev/issues/318850523>`__)
11451
11452pw_stream
11453---------
11454* `Make stream adapters use reinterpret_cast
11455  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186766>`__
11456  (issue `#314829006 <https://issues.pigweed.dev/issues/314829006>`__)
11457
11458pw_system
11459---------
11460See :ref:`docs-changelog-20240112-pw_log`.
11461
11462* `Let Device accept logger adapter
11463  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187119>`__
11464
11465.. _docs-changelog-20240112-pw_thread_stl:
11466
11467pw_thread_stl
11468-------------
11469Using ``std::thread::detach()`` on Windows has been disallowed. When compiling
11470with MinGW on Windows, ``std::thread::detach()`` is known to randomly hang
11471indefinitely.
11472
11473* `Don't allow std::thread::detach() on Windows
11474  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186570>`__
11475  (issue `#317922402 <https://issues.pigweed.dev/issues/317922402>`__)
11476
11477pw_tokenizer
11478------------
11479* `Fix undefined dereference in fuzz test
11480  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186821>`__
11481  (issue `#314829057 <https://issues.pigweed.dev/issues/314829057>`__)
11482* `Make Rust hashing function const
11483  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186273>`__
11484
11485pw_toolchain
11486------------
11487``pw_toolchain`` now adds ``-fno-ms-compatibility`` to ``cflags`` on Windows.
11488When building with ``clang`` on Windows targeting ``msvc``, ``clang``
11489previously enabled a ``ms-compatibility`` mode that broke Pigweed's macro
11490magic.
11491
11492* `Remove duplicate config from Cortex-A32 toolchain
11493  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187270>`__
11494* `Add -fno-ms-compatibility to cflags on Windows
11495  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187173>`__
11496  (issue `#297542996 <https://issues.pigweed.dev/issues/297542996>`__)
11497
11498pw_unit_test
11499------------
11500* `Fix sanitize(r) directive
11501  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186650>`__
11502
11503pw_web
11504------
11505* `Fix autoscroll when window is resized
11506  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187193>`__
11507  (issue `#305022742 <https://issues.pigweed.dev/issues/305022742>`__)
11508
11509Build
11510=====
11511
11512Bazel
11513-----
11514All modules now support the injection of module configuration via
11515``label_flags``.
11516
11517``pw_cc_library`` has been replaced with the Bazel-native ``cc_library``.
11518
11519* `Update to Bazel 7.0.0 release version
11520  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186935>`__
11521* `Add module configuration support
11522  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186725>`__
11523  (issue `#234872811 <https://issues.pigweed.dev/issues/234872811>`__)
11524* `Remove pw_cc_library
11525  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186770>`__
11526  (issue `#267498492 <https://issues.pigweed.dev/issues/267498492>`__)
11527* `Remove references to pw_cc_library
11528  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186765>`__
11529  (issue `#267498492 <https://issues.pigweed.dev/issues/267498492>`__)
11530* `Replace pw_cc_library with cc_library
11531  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186763>`__
11532  (issue `#267498492 <https://issues.pigweed.dev/issues/267498492>`__)
11533
11534OS support
11535==========
11536
11537Zephyr
11538------
11539You can now enable the ``pw_thread/sleep.h`` library in your Zephyr project by
11540setting ``CONFIG_PIGWEED_THREAD_SLEEP=Y`` in your Kconfig.
11541
11542* `Link pw_thread.sleep with appropriate kConfig
11543  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186825>`__
11544
11545Docs
11546====
11547* `Add example of conditionally enabling code based on module config
11548  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187171>`__
11549* `Mention pw format tool
11550  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186851>`__
11551* `Update changelog
11552  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186470>`__
11553* `Rework first-time setup
11554  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185730>`__
11555* `Add troubleshooting section to Bazel quickstart
11556  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186237>`__
11557
11558SEEDs
11559=====
11560* (SEED-0001) `Fix typo and formatting
11561  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187273>`__
11562* (SEED-0114) `Fix Compiler Explorer link
11563  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187330>`__
11564* (SEED-0122) `Claim SEED number
11565  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/187120>`__
11566
11567------------
11568Dec 29, 2023
11569------------
11570Highlights (Dec 15, 2023 to Dec 29, 2023):
11571
11572* The new ``pw::allocator::MultiplexAllocator`` abstract class makes it easier
11573  to dispatch between allocators depending on an app-specific request type ID.
11574* ``pw_base64`` now has initial Rust support.
11575* ``pw_malloc_freertos``, a new FreeRTOS backend for :ref:`module-pw_malloc`,
11576  was added.
11577* The new ``pw::digital_io::Polarity`` helper enum makes it easier for backends
11578  to map logical levels to physical levels.
11579* The Rust macro ``tokenize_to_buffer!`` in the ``pw_tokenizer`` Rust crate now
11580  supports concatenation of format strings via the ``PW_FMT_CONCAT`` operator.
11581* The :ref:`module-pw_hdlc` and :ref:`module-pw_result` docs were updated to
11582  follow our latest :ref:`docs-contrib-docs-modules`.
11583
11584Active SEEDs
11585============
11586Help shape the future of Pigweed! Please visit :ref:`seed-0000`
11587and leave feedback on the RFCs (i.e. SEEDs) marked
11588``Open for Comments``.
11589
11590Modules
11591=======
11592
11593pw_allocator
11594------------
11595The new ``pw::allocator::MultiplexAllocator`` abstract class makes it easier to
11596dispatch between allocators depending on an app-specific request type ID.
11597
11598* `Add MultiplexAllocator
11599  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185027>`__
11600* `Add WithMetrics interface
11601  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185296>`__
11602* `Split up test utilities
11603  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185295>`__
11604
11605pw_base64
11606---------
11607``pw_base64`` now has initial Rust support. See `Crate pw_base64
11608</rustdoc/pw_base64/>`_.
11609
11610* `Add initial Rust support
11611  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185210>`__
11612
11613pw_containers
11614-------------
11615* `Remove DestructorHelper from queues
11616  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185030>`__
11617  (issue `#301329862 <https://issues.pigweed.dev/issues/301329862>`__)
11618
11619pw_digital_io
11620-------------
11621`pw::digital_io::Polarity <https://cs.opensource.google/pigweed/pigweed/+/main:pw_digital_io/public/pw_digital_io/polarity.h>`_
11622was added to make it easier for backends to map logical levels to physical levels.
11623
11624* `Add helper Polarity enum
11625  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185435>`__
11626
11627pw_emu
11628------
11629* `Use code-block instead of code
11630  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186170>`__
11631
11632pw_hdlc
11633-------
11634* `Follow new module docs guidelines
11635  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184799>`__
11636
11637pw_malloc
11638---------
11639``pw_malloc_freertos``, a FreeRTOS backend for ``pw_malloc`` was added.
11640
11641* `Require specifying a backend in bazel build
11642  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185441>`__
11643* `Add freertos backend
11644  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185452>`__
11645
11646pw_presubmit
11647------------
11648* `Use local prettier + eslint versions
11649  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185144>`__
11650
11651pw_result
11652---------
11653* `Rework docs to new standard
11654  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185147>`__
11655
11656pw_rpc
11657------
11658* `Adjust alarm_timer_test
11659  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186274>`__
11660  (issue `#317990451 <https://issues.pigweed.dev/issues/317990451>`__)
11661
11662pw_snapshot
11663-----------
11664* `Clean up RISCV CpuArchitecture
11665  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185690>`__
11666* `Add RISCV CpuArchitecture to metadata
11667  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185630>`__
11668
11669pw_thread_stl
11670-------------
11671* `Disable Bazel tests failing on Windows
11672  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186242>`__
11673  (issue `#317922402 <https://issues.pigweed.dev/issues/317922402>`__)
11674* `Disable tests failing on Windows
11675  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186253>`__
11676  (issue `#317922402 <https://issues.pigweed.dev/issues/317922402>`__)
11677
11678pw_tokenizer
11679------------
11680The Rust macro ``tokenize_to_buffer!`` now supports concatenation of format
11681strings via the ``PW_FMT_CONCAT`` operator.
11682
11683* `Support \`PW_FMT_CONCAT\` in \`tokenize_to_buffer!\`
11684  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185211>`__
11685
11686pw_toolchain
11687------------
11688The need to provide an ``unknown`` value for various ``pw_cc_toolchain`` fields
11689has been removed.
11690
11691* `Remove "unknown" from various fields
11692  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185170>`__
11693  (issue `#315206506 <https://issues.pigweed.dev/issues/315206506>`__)
11694
11695pw_transfer
11696-----------
11697* `Improve Python stream reopening and closing
11698  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184931>`__
11699
11700pw_unit_test
11701------------
11702* `Silence ASAN error in TestInfo
11703  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185654>`__
11704
11705pw_watch
11706--------
11707* `Build directory exclude list handling
11708  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185772>`__
11709  (issue `#317241320 <https://issues.pigweed.dev/issues/317241320>`__)
11710
11711pw_web
11712------
11713* `Add state UI unit tests
11714  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184909>`__
11715  (issue `#316218222 <https://issues.pigweed.dev/issues/316218222>`__)
11716
11717SEEDs
11718=====
11719* `Add facilitators to metadata and generated table
11720  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185932>`__
11721* (SEED-0105) `Use code-block instead of code
11722  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/186171>`__
11723
11724------------
11725Dec 15, 2023
11726------------
11727Highlights (Dec 1, 2023 to Dec 15, 2023):
11728
11729* We started implementing our new async API, :ref:`module-pw_async2`.
11730* We deprecated the use of ``gtest/gtest.h`` header paths for tests intended
11731  to build against ``pw_unit_test``. See
11732  :ref:`docs-changelog-20231215-pw_unit_test` for details.
11733
11734  .. note::
11735
11736     All the commits titled ``Use unit test framework`` in the ``Dec 15, 2023``
11737     update are related to this change.
11738
11739* The :ref:`module-pw_alignment` and :ref:`module-pw_emu` docs have been updated
11740  to follow our latest :ref:`docs-contrib-docs-modules`.
11741* ``pw_system`` now supports an :ref:`extra logging channel
11742  <module-pw_system-logchannel>`.
11743* ``pw_toolchain_bazel`` has a new :ref:`get started guide
11744  <module-pw_toolchain_bazel-get-started>`.
11745
11746Active SEEDs
11747============
11748Help shape the future of Pigweed! Please visit :ref:`seed-0000`
11749and leave feedback on the RFCs (i.e. SEEDs) marked
11750``Open for Comments``.
11751
11752Modules
11753=======
11754
11755pw_alignment
11756------------
11757* `Follow the new docs guidelines
11758  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181432>`__
11759
11760pw_allocator
11761------------
11762* `Fix metric disabling
11763  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185026>`__
11764* `Add support for fuzzing Allocator implementations
11765  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178215>`__
11766* `Use unit test framework
11767  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183270>`__
11768
11769pw_analog
11770---------
11771* `Use unit test framework
11772  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183270>`__
11773
11774pw_async2
11775---------
11776We started implementing our new async API, :ref:`module-pw_async2`.
11777
11778* `Implement initial async API
11779  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182727>`__
11780
11781pw_base64
11782---------
11783* `Use unit test framework
11784  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183299>`__
11785
11786pw_blob_store
11787-------------
11788* `Use unit test framework
11789  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183299>`__
11790
11791pw_bluetooth
11792------------
11793* `Add LE Read Buffer Size [v2] command complete event
11794  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185070>`__
11795  (issue `#311639040 <https://issues.pigweed.dev/issues/311639040>`__)
11796* `Use unit test framework
11797  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184312>`__
11798* `Fix LEExtendedCreateConnectionCommandV1 data interleaving
11799  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183950>`__
11800  (issue `#305976440 <https://issues.pigweed.dev/issues/305976440>`__)
11801* `Fix ExtendedCreateConnectionV1
11802  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183930>`__
11803  (issue `#305976440 <https://issues.pigweed.dev/issues/305976440>`__)
11804* `Add new HCI definition
11805  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183771>`__
11806  (issue `#311639690 <https://issues.pigweed.dev/issues/311639690>`__)
11807* `Re-format emboss files
11808  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183770>`__
11809
11810pw_bluetooth_sapphire
11811---------------------
11812* `Read ISO data buffer info on startup
11813  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184052>`__
11814  (issue `#311639040 <https://issues.pigweed.dev/issues/311639040>`__)
11815* `LE Read Buffer Size [v2]
11816  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183772>`__
11817  (issue `#311639040 <https://issues.pigweed.dev/issues/311639040>`__)
11818* `Add LE Set Host Feature
11819  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184050>`__
11820  (issue `#311639040 <https://issues.pigweed.dev/issues/311639040>`__)
11821* `Update name of ISO host support bit
11822  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184051>`__
11823  (issue `#311639040 <https://issues.pigweed.dev/issues/311639040>`__)
11824* `Fix BrEdrConnectionManager.Inspect test
11825  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183304>`__
11826  (issue `#42086629 <https://issues.fuchsia.dev/issues/42086629>`__)
11827
11828pw_build
11829--------
11830* `Fix use of TARGET_COMPATIBLE_WITH_HOST_SELECT in external repo
11831  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184095>`__
11832
11833pw_bytes
11834--------
11835* `Use unit test framework
11836  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183354>`__
11837
11838pw_checksum
11839-----------
11840* `Use unit test framework
11841  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183300>`__
11842
11843pw_chrono
11844---------
11845* `Use unit test framework
11846  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183300>`__
11847
11848pw_cli
11849------
11850You can now disable the printing of the banner by setting ``PW_ENVSETUP_QUIET``
11851or ``PW_ENVSETUP_NO_BANNER``.
11852
11853* `Allow banner to be suppressed
11854  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184970>`__
11855
11856pw_console
11857----------
11858* `Disable private attr auto-completion
11859  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184644>`__
11860
11861pw_containers
11862-------------
11863* `Fix missing include
11864  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184961>`__
11865* `Fix IntrusiveList::Item move assignment test
11866  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182951>`__
11867  (issue `#303634979 <https://issues.pigweed.dev/issues/303634979>`__)
11868* `Add missing dep for IntrusiveList test
11869  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184245>`__
11870
11871pw_digital_io
11872-------------
11873* `Use unit test framework
11874  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183301>`__
11875
11876pw_docgen
11877---------
11878We updated the docs server to use native hot reloading.
11879
11880* `Update Pigweed Live schedule
11881  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184960>`__
11882* `Add new docs server
11883  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181011>`__
11884
11885pw_emu
11886------
11887We're handling QEMU startup errors more gracefully now.
11888
11889* `Better handling for startup errors
11890  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184859>`__
11891  (issue `#315868463 <https://issues.pigweed.dev/issues/315868463>`__)
11892* `qemu: Improve the QMP handshake handling
11893  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184858>`__
11894  (issue `#315516286 <https://issues.pigweed.dev/issues/315516286>`__)
11895* `Link all the docs to each other
11896  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184310>`__
11897* `Update docs to follow new guidelines
11898  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183223>`__
11899
11900pw_env_setup
11901------------
11902The upstream Pigweed bootstrap script now runs ``npm install``. We worked
11903on native macOS support that doesn't rely on Rosetta. Use the
11904``--disable-rosetta`` flag to try it out. Note that the work isn't complete
11905yet.
11906
11907* `Run npm install on bootstrap
11908  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184639>`__
11909* `Remove "untested" warning
11910  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182813>`__
11911* `Use ARM protoc version on ARM Macs
11912  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184930>`__
11913  (issue `#315998985 <https://issues.pigweed.dev/issues/315998985>`__)
11914* `Fix typo in error message
11915  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184910>`__
11916* `Add flag to disable Rosetta
11917  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184804>`__
11918  (issue `#315998985 <https://issues.pigweed.dev/issues/315998985>`__)
11919* `Retrieve armgcc for ARM Macs
11920  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184785>`__
11921  (issue `#315998985 <https://issues.pigweed.dev/issues/315998985>`__)
11922* `Change case of armgcc version
11923  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184798>`__
11924  (issue `#315998985 <https://issues.pigweed.dev/issues/315998985>`__)
11925* `Roll cipd client
11926  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184277>`__
11927* `Bump executing Python package
11928  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183838>`__
11929
11930pw_file
11931-------
11932* `Use unit test framework
11933  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183301>`__
11934
11935pw_format
11936---------
11937Format strings can now be built by macros at compile-time by specifying the
11938format string as a set of string literals separated by the custom
11939``PW_FMT_CONCAT`` keyword.
11940
11941* `Allow format strings to be composed at compile time
11942  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184200>`__
11943
11944pw_fuzzer
11945---------
11946* `Fix ambiguous reference to ContainerOf
11947  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184284>`__
11948
11949pw_hdlc
11950-------
11951* `Use unit test framework
11952  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183302>`__
11953
11954pw_hex_dump
11955-----------
11956* `Use unit test framework
11957  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183302>`__
11958
11959pw_i2c
11960------
11961* `Use unit test framework
11962  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183302>`__
11963
11964pw_ide
11965------
11966``pw_ide`` now handles additional clang toolchains if your project specifies one
11967that's different from the one provided by Pigweed. We also shipped several UX
11968improvements to the Visual Studio Code extension.
11969
11970* `Add command to build VSC extension
11971  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184992>`__
11972* `Remove VSIX installation stuff
11973  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184991>`__
11974* `Don't warn on missing extensions.json
11975  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184895>`__
11976* `Alpha-sort the list of targets in VSC
11977  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184864>`__
11978* `Auto-run build system command
11979  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184809>`__
11980* `Update VSC Python config
11981  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184820>`__
11982* `Fix condition for Windows platform
11983  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184730>`__
11984* `Fix for clang installed to project dir
11985  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184010>`__
11986  (issue `#314693384 <https://issues.pigweed.dev/issues/314693384>`__)
11987
11988pw_kvs
11989------
11990* `Use unit test framework
11991  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183307>`__
11992
11993pw_libc
11994-------
11995* `Use unit test framework
11996  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183307>`__
11997
11998pw_log
11999------
12000* `Use unit test framework
12001  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183307>`__
12002
12003pw_malloc
12004---------
12005* `Use unit test framework
12006  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183308>`__
12007
12008pw_metric
12009---------
12010* `Use unit test framework
12011  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183308>`__
12012
12013pw_perf_test
12014------------
12015* `Refactor event handler types
12016  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179611>`__
12017* `Use unit test framework
12018  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183309>`__
12019
12020pw_presubmit
12021------------
12022* `Add LUCI_CONTEXT to ctx
12023  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184793>`__
12024* `Merge some of the "misc" checks
12025  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184778>`__
12026* `Better support downstream GnGenNinja use
12027  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183837>`__
12028  (issue `#314818274 <https://issues.pigweed.dev/issues/314818274>`__)
12029* `Automatically compute trim_prefix
12030  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183100>`__
12031  (issue `#282164634 <https://issues.pigweed.dev/issues/282164634>`__)
12032
12033pw_random
12034---------
12035* `Use unit test framework
12036  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183350>`__
12037
12038pw_result
12039---------
12040* `Use unit test framework
12041  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183350>`__
12042
12043pw_rust
12044-------
12045* `Remove excess newline in doc command line
12046  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182451>`__
12047
12048pw_snapshot
12049-----------
12050* `Use unit test framework
12051  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183351>`__
12052
12053pw_status
12054---------
12055* `Docs tweak
12056  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185146>`__
12057
12058pw_string
12059---------
12060* `Fix string_test build error under new clang revision
12061  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184219>`__
12062  (issue `#315190328 <https://issues.pigweed.dev/issues/315190328>`__)
12063* `Add missing include
12064  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183233>`__
12065  (issue `#314130408 <https://issues.pigweed.dev/issues/314130408>`__)
12066
12067pw_symbolizer
12068-------------
12069* `Fix symbolizer_test
12070  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184226>`__
12071  (issue `#315190328 <https://issues.pigweed.dev/issues/315190328>`__)
12072
12073pw_system
12074---------
12075We added an :ref:`extra logging channel <module-pw_system-logchannel>`.
12076
12077* `Support extra logging channel
12078  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184410>`__
12079  (issue `#315540660 <https://issues.pigweed.dev/issues/315540660>`__)
12080
12081pw_thread
12082---------
12083* `Use unit test framework
12084  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183352>`__
12085
12086pw_tls_client
12087-------------
12088* `Use unit test framework
12089  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183352>`__
12090
12091pw_tokenizer
12092------------
12093* `Mark \`pw_tokenizer_core\` as \`no_std\`
12094  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183197>`__
12095
12096pw_toolchain
12097------------
12098The Arm GCC toolchain now uses :ref:`module-pw_toolchain_bazel`.
12099
12100* `Move ARM toolchain to new API
12101  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183160>`__
12102  (issue `#309533028 <https://issues.pigweed.dev/issues/309533028>`__)
12103* `Use action configs from LLVM tool repo
12104  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183010>`__
12105  (issue `#311257445 <https://issues.pigweed.dev/issues/311257445>`__)
12106
12107pw_toolchain_bazel
12108------------------
12109Support for :py:attr:`additional_files` was added to reduce ``*_files``
12110boilerplate. We added a new :ref:`get started guide
12111<module-pw_toolchain_bazel-get-started>`.
12112
12113* `Fix naming in docs
12114  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184753>`__
12115* `Add misc_files group
12116  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184698>`__
12117  (issue `#305737273 <https://issues.pigweed.dev/issues/305737273>`__)
12118* `Add automagic toolchain file collection
12119  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184299>`__
12120  (issue `#305737273 <https://issues.pigweed.dev/issues/305737273>`__)
12121* `Add getting started guide
12122  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184281>`__
12123  (issue `#309533028 <https://issues.pigweed.dev/issues/309533028>`__)
12124* `Remove legacy tool API
12125  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184280>`__
12126* `Remove deprecated API
12127  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183235>`__
12128  (issue `#309533028 <https://issues.pigweed.dev/issues/309533028>`__)
12129* `Rename build file templates part 2/2
12130  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183187>`__
12131
12132pw_trace
12133--------
12134* `Use unit test framework
12135  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183355>`__
12136
12137pw_transfer
12138-----------
12139We added support for setting different timeouts for clients and servers.
12140See ``PW_TRANSFER_DEFAULT_MAX_CLIENT_RETRIES`` and
12141``PW_TRANSFER_DEFAULT_MAX_SERVER_RETRIES`` in :ref:`module-pw_transfer-config`.
12142
12143* `Remove small hardcoded timeout in proxy_test
12144  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184638>`__
12145  (issue `#315459788 <https://issues.pigweed.dev/issues/315459788>`__)
12146* `Allow setting different timeouts for client and server
12147  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184210>`__
12148* `Update integration test documentation
12149  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183163>`__
12150  (issue `#250947749 <https://issues.pigweed.dev/issues/250947749>`__)
12151
12152.. _docs-changelog-20231215-pw_unit_test:
12153
12154pw_unit_test
12155------------
12156We deprecated use of ``gtest/gtest.h`` header paths for tests intended to build
12157against ``pw_unit_test``. Historically, we supported using the ``gtest/gtest.h``
12158include path to support compiling a test as either a ``pw_unit_test`` or with
12159the full GoogleTest on larger targets like desktop. However, this created a
12160problem since ``pw_unit_test`` only implements a subset of the GoogleTest API.
12161With the new approach, we require tests that are intended to compile on devices
12162to directly include ``pw_unit_test/framework.h``. In cases where GoogleTest is
12163available, that header will redirect to GoogleTest.
12164
12165* `Add compatibility in bazel
12166  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184911>`__
12167  (issue `#309665550 <https://issues.pigweed.dev/issues/309665550>`__)
12168* `Use googletest backend as a dep
12169  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184656>`__
12170  (issue `#315351886 <https://issues.pigweed.dev/issues/315351886>`__)
12171* `Fix building fuzztests with cmake
12172  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184268>`__
12173* `Use unit test framework
12174  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183353>`__
12175* `Create facade's header
12176  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183194>`__
12177  (issue `#309665550 <https://issues.pigweed.dev/issues/309665550>`__)
12178
12179pw_varint
12180---------
12181* `Use unit test framework
12182  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183354>`__
12183
12184pw_web
12185------
12186* `Handle unrequested responses after call_id changes
12187  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184320>`__
12188* `Add support for call_id in RPC calls
12189  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160792>`__
12190* `Add Mocha and Jest global vars to ESLint
12191  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183931>`__
12192* `Switch to pre-made subset of icon fonts
12193  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156852>`__
12194  (issue `#287270736 <https://issues.pigweed.dev/issues/287270736>`__)
12195
12196Build
12197=====
12198* `Set Zephyr toolchain to llvm in presubmit
12199  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179170>`__
12200
12201Targets
12202=======
12203* `Point deprecated flag to new backend
12204  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184262>`__
12205* (stm32f429i_disc1) `Fix test runner
12206  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184378>`__
12207
12208Language support
12209================
12210* (Python) `Remove references to non-existing setup.py
12211  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182770>`__
12212
12213OS support
12214==========
12215* (Zephyr) `Remove unecessary toolchain downloads & filter invalid targets
12216  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184072>`__
12217
12218Docs
12219====
12220.. todo-check: disable
12221
12222* `Remove inaccurate #include statements
12223  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/185190>`__
12224  (issue `#295023422 <https://issues.pigweed.dev/issues/295023422>`__)
12225* `Add Bazel code coverage TODO
12226  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182812>`__
12227  (issue `#304833225 <https://issues.pigweed.dev/issues/304833225>`__)
12228* `Add sort by alignment to size optimizations
12229  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184150>`__
12230* `Fix build command typo
12231  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184170>`__
12232* `Update changelog
12233  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183310>`__
12234
12235.. todo-check: disable
12236
12237SEEDs
12238=====
12239* `Always use build metadata titles in index table
12240  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183750>`__
12241* (SEED-0001) `Add section about SEEDs & code changes
12242  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177084>`__
12243* (SEED-0001) `Update number selection guidance
12244  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184223>`__
12245* SEED-0117) `Open for comments
12246  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184795>`__
12247* (SEED-0121) `Claim SEED number
12248  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184225>`__
12249
12250Miscellaneous
12251=============
12252* `Fix formatting after clang roll
12253  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/184752>`__
12254
12255-----------
12256Dec 1, 2023
12257-----------
12258Highlights (Nov 17, 2023 to Dec 1, 2023):
12259
12260* We now have an auto-generated :ref:`seed-0000` that shows you the current
12261  status of all SEEDs.
12262* We've started implementing a :ref:`Rust API for pw_log
12263  <docs-changelog-20231201-pw_log>`.
12264* The :ref:`module-pw_alignment`, :ref:`module-pw_perf_test`, and
12265  :ref:`module-pw_status` docs were refactored to follow our latest
12266  :ref:`docs-contrib-docs-modules`.
12267
12268Active SEEDs
12269============
12270Help shape the future of Pigweed! Please visit :ref:`seed-0000`
12271and leave feedback on the RFCs (i.e. SEEDs) marked
12272``Open for Comments``.
12273
12274Modules
12275=======
12276
12277pw_alignment
12278------------
12279The :ref:`docs <module-pw_alignment>` were updated to follow our new
12280:ref:`docs-contrib-docs-modules`.
12281
12282* `Follow the new docs guidelines
12283  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181432>`__
12284
12285pw_allocator
12286------------
12287Utilities were added that make it easier to write tests for custom allocator
12288implementations. The metric collection API was refactored. CMake support for
12289heap poisoning was added.
12290
12291* `Fix use-after-free in ~AllocatorForTest
12292  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182950>`__
12293* `Add AllocationTestHarness
12294  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183032>`__
12295* `Add AllocationTestHarness
12296  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180532>`__
12297* `Refactor metric collection
12298  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180456>`__
12299* `Improve heap poisoning configuration
12300  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180372>`__
12301
12302pw_bluetooth
12303------------
12304* `Add LE Set Host Feature command
12305  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181770>`__
12306  (issue `#311639040 <https://issues.pigweed.dev/issues/311639040>`__)
12307* `LE Request Peer SCA Complete event
12308  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182430>`__
12309  (issue `#311639272 <https://issues.pigweed.dev/issues/311639272>`__)
12310* `Fix LEExtendedAdvertisingReportData tx_power to be an Int
12311  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181756>`__
12312
12313pw_bluetooth_sapphire
12314---------------------
12315Migration of :ref:`module-pw_bluetooth_sapphire` into Pigweed has begun.
12316
12317* `Use pw_test_group for fuzzers target
12318  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183195>`__
12319  (issue `#307951383 <https://issues.pigweed.dev/issues/307951383>`__)
12320* `Use pw_fuzzer_group
12321  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183168>`__
12322  (issue `#307951383 <https://issues.pigweed.dev/issues/307951383>`__)
12323* `Add sales pitch & roadmap docs
12324  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181834>`__
12325  (issue `#312287470 <https://issues.pigweed.dev/issues/312287470>`__)
12326* `Add testonly to testing targets
12327  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182890>`__
12328  (issue `#136961 <https://issues.fuchsia.dev/issues/136961>`__)
12329* `Revert commits to get to a known working state
12330  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183014>`__
12331* `Use Write instead of UncheckedWrite
12332  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182734>`__
12333* `Remove now unnecessary use of std::optional
12334  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182490>`__
12335  (issue `#311256496 <https://issues.pigweed.dev/issues/311256496>`__)
12336* `Move LegacyLowEnergyScanner impl to base class
12337  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182017>`__
12338  (issue `#305975969 <https://issues.pigweed.dev/issues/305975969>`__)
12339* `Create new LowEnergyScanner polymorphic methods
12340  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182016>`__
12341  (issue `#305975969 <https://issues.pigweed.dev/issues/305975969>`__)
12342* `Extended scanning support, Fake(Controller|Peer)
12343  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182015>`__
12344  (issue `#305975969 <https://issues.pigweed.dev/issues/305975969>`__)
12345* `Remove fidl fuzzer from build
12346  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182714>`__
12347  (issue `#307951383 <https://issues.pigweed.dev/issues/307951383>`__)
12348* `Use explicit constructor for SmartTask
12349  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182013>`__
12350* `Follow pigweed style for test files
12351  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182012>`__
12352* `Add OWNERS file
12353  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181759>`__
12354* `Delete unused build file
12355  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181830>`__
12356  (issue `#307951383 <https://issues.pigweed.dev/issues/307951383>`__)
12357* `Fix pragma_once lint
12358  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181394>`__
12359  (issue `#307951383 <https://issues.pigweed.dev/issues/307951383>`__)
12360* `Fix linter errors
12361  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181305>`__
12362  (issue `#307951383 <https://issues.pigweed.dev/issues/307951383>`__)
12363* `Fix bazel formatting
12364  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181303>`__
12365  (issue `#307951383 <https://issues.pigweed.dev/issues/307951383>`__)
12366* `Remove ICU from bazel build
12367  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181391>`__
12368  (issue `#311449154 <https://issues.pigweed.dev/issues/311449154>`__)
12369* `Refactor pw_bluetooth_sapphire & fix errors
12370  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173484>`__
12371  (issue `#42051324 <https://issues.fuchsia.dev/issues/42051324>`__)
12372* `Update copyright headers
12373  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177800>`__
12374
12375pw_build_info
12376-------------
12377* `Fix relative paths in Python tests
12378  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182681>`__
12379
12380pw_containers
12381-------------
12382A warning was added about ``pw::Vector`` being unsafe with
12383non-trivially-destructible, self-referencing types. See
12384`b/313899658 <https://issues.pigweed.dev/issues/313899658>`_.
12385
12386* `Warn about unsafe Vector usage
12387  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182970>`__
12388  (issue `#313899658 <https://issues.pigweed.dev/issues/313899658>`__)
12389
12390pw_format
12391---------
12392A ``core::fmt`` macro helper was added.
12393
12394* `Add core::fmt macro helper
12395  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178537>`__
12396
12397.. _docs-changelog-20231201-pw_log:
12398
12399pw_log
12400------
12401An initial Rust API has been added.
12402
12403* `Add initial Rust API
12404  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178538>`__
12405
12406pw_multibuf
12407-----------
12408* `Remove unused GN dep
12409  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183165>`__
12410* `Remove dep on external gtest
12411  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183158>`__
12412* `Make HeaderChunkRegionTracket public
12413  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183041>`__
12414* `Fix cmake build file
12415  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182898>`__
12416
12417pw_package
12418----------
12419* `Add ICU package
12420  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181269>`__
12421  (issue `#311449154 <https://issues.pigweed.dev/issues/311449154>`__)
12422
12423pw_perf_test
12424------------
12425The :ref:`docs <module-pw_perf_test>` have been refactored.
12426
12427* `Rename logging event handler files
12428  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178915>`__
12429* `Rework docs
12430  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179610>`__
12431
12432pw_presubmit
12433------------
12434.. todo-check: disable
12435
12436* `Automatically compute trim_prefix
12437  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183100>`__
12438  (issue `#282164634 <https://issues.pigweed.dev/issues/282164634>`__)
12439* `Allow full issues.pigweed.dev urls in TODO links
12440  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183095>`__
12441* `Fix TestTodoCheck.test_one_bug_legacy()
12442  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183094>`__
12443* `No coverage upload for shadow builds
12444  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183093>`__
12445  (issue `#282164634 <https://issues.pigweed.dev/issues/282164634>`__)
12446* `Remove some unused constants
12447  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183092>`__
12448* `Add is_shadow/is_prod members to context
12449  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183077>`__
12450* `Refactor the coverage options
12451  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182873>`__
12452  (issue `#282164634 <https://issues.pigweed.dev/issues/282164634>`__)
12453* `Show diffs when parser tests fail
12454  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182971>`__
12455* `Trim paths in Bazel summaries
12456  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182952>`__
12457* `Correct the codesearch_host
12458  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182850>`__
12459  (issue `#261779031 <https://issues.pigweed.dev/issues/261779031>`__)
12460* `Correct host in coverage presubmit
12461  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182702>`__
12462  (issue `#261779031 <https://issues.pigweed.dev/issues/261779031>`__)
12463* `Fix coverage options
12464  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182666>`__
12465  (issue `#261779031 <https://issues.pigweed.dev/issues/261779031>`__)
12466* `Add Fuchsia style to todo_check_with_exceptions
12467  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181433>`__
12468  (issue `#307951383 <https://issues.pigweed.dev/issues/307951383>`__)
12469* `Create Sapphire presubmit step
12470  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177453>`__
12471  (issue `#42051324 <https://issues.fuchsia.dev/issues/42051324>`__)
12472
12473.. todo-check: enable
12474
12475pw_protobuf
12476-----------
12477* `Add common_py_pb2 target
12478  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182650>`__
12479  (issue `#309351244 <https://issues.pigweed.dev/issues/309351244>`__)
12480
12481pw_rpc
12482------
12483* `Initialize serde_ members to nullptr
12484  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182851>`__
12485
12486pw_rpc_transport
12487----------------
12488* `Unblock sockets when stopping
12489  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181308>`__
12490  (issue `#309680612 <https://issues.pigweed.dev/issues/309680612>`__)
12491
12492pw_sensor
12493---------
12494* `Reserve SEED for configuring sensors
12495  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182805>`__
12496* `Claim SEED number for high level view
12497  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182673>`__
12498
12499pw_status
12500---------
12501The :ref:`docs <module-pw_status>` have been refactored to follow
12502our latest :ref:`docs-contrib-docs-modules`.
12503
12504* `Adopt latest docs standard
12505  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181181>`__
12506
12507pw_string
12508---------
12509* `Add missing include
12510  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183233>`__
12511
12512pw_system
12513---------
12514* `Load all domain tokens
12515  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181231>`__
12516* `Style fixes to Python scripts
12517  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182661>`__
12518* `Add missing dependency on pw_trace
12519  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181350>`__
12520
12521pw_tokenizer
12522------------
12523* `Move entry header to a separate struct
12524  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183193>`__
12525* `Catch accidental use of test macro
12526  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183192>`__
12527* `Fix NULL dereference in fuzz harness
12528  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182710>`__
12529* `Move ReadUint32
12530  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169714>`__
12531
12532pw_toolchain
12533------------
12534The Arm toolchain has been updated to use the new toolchain specified
12535in :ref:`seed-0113`. A helper for registering C/C++ toolchains in Bazel
12536was added to enable upstream Pigweed to make changes without needing to
12537manually update downstream projects. See
12538:ref:`module-pw_toolchain-bazel-upstream-pigweed-toolchains`.
12539
12540* `Move ARM toolchain to new API
12541  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183160>`__
12542  (issue `#309533028 <https://issues.pigweed.dev/issues/309533028>`__)
12543* `Use action configs from LLVM tool repo
12544  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183010>`__
12545  (issue `#311257445 <https://issues.pigweed.dev/issues/311257445>`__)
12546* `Add Bazel toolchain registration helper
12547  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183157>`__
12548  (issue `#301336229 <https://issues.pigweed.dev/issues/301336229>`__)
12549* `Merge host toolchains
12550  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181760>`__
12551* `Expose non-hermetic toolchain
12552  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181330>`__
12553  (issue `#299151946 <https://issues.pigweed.dev/issues/299151946>`__)
12554* `Only fetch compatible Rust toolchains
12555  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181306>`__
12556
12557pw_toolchain/arm_clang
12558----------------------
12559* `Reduce binary size
12560  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169576>`__
12561  (issue `#254541584 <https://issues.pigweed.dev/issues/254541584>`__)
12562
12563pw_toolchain_bazel
12564------------------
12565Support for binding tools to toolchains was added. See :py:class:`pw_cc_tool`
12566and :py:class:`pw_cc_action_config`. Support for featureless sysroots was
12567added. See :py:attr:`pw_cc_toolchain.builtin_sysroot` and
12568:py:attr:`pw_cc_toolchain.cxx_builtin_include_directories`.
12569
12570* `Remove deprecated API
12571  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183235>`__
12572  (issue `#309533028 <https://issues.pigweed.dev/issues/309533028>`__)
12573* `Rename build file templates part 2/2
12574  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183187>`__
12575* `Rename build file templates part 1/2
12576  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183186>`__
12577* `Add LLVM clang tool template
12578  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182969>`__
12579  (issue `#311257445 <https://issues.pigweed.dev/issues/311257445>`__)
12580* `Add ARM GCC toolchain template
12581  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182968>`__
12582  (issue `#309533028 <https://issues.pigweed.dev/issues/309533028>`__)
12583* `Support featureless sysroots
12584  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181833>`__
12585  (issue `#309533028 <https://issues.pigweed.dev/issues/309533028>`__)
12586* `Mirror features to be flag sets
12587  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181832>`__
12588  (issue `#309533028 <https://issues.pigweed.dev/issues/309533028>`__)
12589* `Add initial pw_cc_action_config support
12590  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180842>`__
12591  (issue `#309533028 <https://issues.pigweed.dev/issues/309533028>`__)
12592
12593pw_transfer
12594-----------
12595Commands in the :ref:`integration test docs
12596<module-pw_transfer-integration-tests>` were updated and docs were
12597added that explain how to :ref:`run more than one instance of tests
12598in parallel <module-pw_transfer-parallel-tests>`.
12599
12600* `Update integration test documentation
12601  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183163>`__
12602* `Set clients to transfer_v2
12603  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183050>`__
12604  (issue `#309686987 <https://issues.pigweed.dev/issues/309686987>`__)
12605* `Limit to sending a single chunk in tests
12606  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182665>`__
12607  (issue `#295037376 <https://issues.pigweed.dev/issues/295037376>`__)
12608* `Don't "block-network" by default
12609  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182010>`__
12610  (issue `#311297881 <https://issues.pigweed.dev/issues/311297881>`__)
12611* `Use StatusCode in integration tests
12612  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180828>`__
12613* `Make integration_test_server testonly, fix fx roller
12614  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182019>`__
12615  (issue `#312493408 <https://issues.pigweed.dev/issues/312493408>`__)
12616* `Tag integration tests block-network
12617  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181297>`__
12618  (issue `#311297881 <https://issues.pigweed.dev/issues/311297881>`__)
12619
12620pw_unit_test
12621------------
12622* `Skip googletest tests if not set
12623  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/183089>`__
12624
12625pw_web
12626------
12627* `Install Web Test Runner and dependencies
12628  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181870>`__
12629
12630Build
12631=====
12632
12633Bazel
12634-----
12635More Bazel information has been added to :ref:`docs-module-structure`.
12636
12637* `Add simple module configuration mechanism
12638  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181032>`__
12639  (issue `#234872811 <https://issues.pigweed.dev/issues/234872811>`__)
12640* `Tidy up WORKSPACE
12641  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181292>`__
12642* `Rename Python toolchains
12643  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181762>`__
12644  (issue `#310293060 <https://issues.pigweed.dev/issues/310293060>`__)
12645* `Remove py_proto_library wrapper
12646  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180825>`__
12647  (issue `#266950138 <https://issues.pigweed.dev/issues/266950138>`__)
12648* `Use py_proto_library from rules_python
12649  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180537>`__
12650* `Partial pw_system_console fix
12651  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181304>`__
12652  (issue `#310307709 <https://issues.pigweed.dev/issues/310307709>`__)
12653
12654Docs
12655====
12656The tool that we use to semi-automate these changelog updates has been
12657added to the main Pigweed repository. Try out the tool on
12658:ref:`docs-contrib-docs-changelog` and see ``//docs/_static/js/changelog.js``
12659to view its implementation.
12660
12661* `Gerrit code coverage documentation
12662  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182799>`__
12663  (issue `#282164634 <https://issues.pigweed.dev/issues/282164634>`__)
12664* `Move copyright header info to style guide
12665  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182795>`__
12666* `Document the Test footer
12667  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181752>`__
12668* `Add changelog update instructions and tool
12669  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181765>`__
12670* `Update changelog
12671  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181393>`__
12672
12673SEEDs
12674=====
12675We now have an auto-generated :ref:`seed-0000` that shows you the current
12676status of all SEEDs.
12677
12678* `Generate the SEED index table
12679  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181267>`__
12680* (SEED-0114) `Update status; format header in table
12681  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182872>`__
12682* (SEED-0114) `Channels
12683  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175471>`__
12684* (SEED-0118) `Claim SEED number
12685  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/182654>`__
12686* (SEED-0118) `Claim SEED number
12687  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181837>`__
12688
12689Third party
12690===========
12691* `Add GN rules for ICU
12692  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181311>`__
12693  (issue `#311449154 <https://issues.pigweed.dev/issues/311449154>`__)
12694
12695------------
12696Nov 15, 2023
12697------------
12698Highlights (Nov 02, 2023 to Nov 15, 2023):
12699
12700* The API for writing proc macros with pw_format was simplified.
12701* ``pw_emu`` added a command for resuming the execution of paused emulators
12702  and now has limited support for inserting environment variables into
12703  configuration entries.
12704* ``pw_ide`` can now output logs to files.
12705* ``pw_unit_test`` added support for GoogleTest's
12706  ``ASSERT_OK_AND_ASSIGN``, ``StatusIs``, and ``IsOkAndHolds``.
12707* Pigweed's :ref:`docs-mission` are now documented.
12708
12709Active SEEDs
12710============
12711Help shape the future of Pigweed! Please leave feedback on the following active RFCs (SEEDs):
12712
12713* `SEED-0114: Channels
12714  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175471>`__
12715* `SEED-0115: Sensors
12716  <http://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176760>`__
12717* `SEED-0116: Sockets
12718  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177696>`__
12719
12720Modules
12721=======
12722
12723pw_allocator
12724------------
12725The ``...Unchecked`` methods have been removed from the
12726``pw::allocator::Allocator`` interface and the NVI-style ``Do...`` methods
12727have been modified to take ``Layout`` parameters.
12728
12729* `Update interface based on final SEED-0110 design
12730  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176754>`__
12731* `Refactor test support and example allocator
12732  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177653>`__
12733  (issue `#306686936 <https://issues.pigweed.dev/issues/306686936>`__)
12734
12735pw_analog
12736---------
12737* `Mark libs as test only in bazel
12738  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179612>`__
12739  (issue `#309665550 <https://issues.pigweed.dev/issues/309665550>`__)
12740
12741pw_console
12742----------
12743``SocketClient`` has been updated to support both IPv4 and IPv6 addresses
12744in addition to Unix sockets.
12745
12746* `Add docs banner
12747  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180824>`__
12748* `Improve SocketClient addressing
12749  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178921>`__
12750
12751pw_emu
12752------
12753There is now limited supported for inserting environment variable values
12754into configuration entries. A command for resuming the execution
12755of a paused emulator was added.
12756
12757* `Add support for substitutions in config entries
12758  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179150>`__
12759  (issue `#308793747 <https://issues.pigweed.dev/issues/308793747>`__)
12760* `Add resume command to CLI
12761  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179030>`__
12762  (issue `#308793747 <https://issues.pigweed.dev/issues/308793747>`__)
12763* `Fix CLI gdb and load commands
12764  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178922>`__
12765  (issue `#308793747 <https://issues.pigweed.dev/issues/308793747>`__)
12766
12767pw_env_setup
12768------------
12769* `Make pigweed_environment.gni content gni-relative
12770  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180991>`__
12771* `Update Bazel to 7.0.0 pre-release
12772  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178950>`__
12773
12774pw_format
12775---------
12776The API for writing `proc macros </rustdoc/pw_format/#proc-macros>`__ that take
12777format strings and arguments was simplified.
12778
12779* `Add tests for macro helpers
12780  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181030>`__
12781* `Generalize format macro handling
12782  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178132>`__
12783
12784pw_fuzzer
12785---------
12786* `Move \`Domain\` from fuzztest::internal to fuzztest
12787  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178213>`__
12788* `Switch oss-fuzz build to Bazel
12789  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175618>`__
12790
12791pw_i2c
12792------
12793* `Mark libs as test only in bazel
12794  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179836>`__
12795  (issue `#309665550 <https://issues.pigweed.dev/issues/309665550>`__)
12796
12797pw_ide
12798------
12799Logs can now be output to files.
12800
12801* `Set 3-space tabs in VS Code
12802  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179671>`__
12803* `Support output to logs
12804  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163573>`__
12805* `Remove redundant licence
12806  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179613>`__
12807* `Remove clangd auto-restart
12808  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171691>`__
12809* `Make Sphinx extensions upstream-only
12810  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171690>`__
12811* `VSC extension 0.1.1 release
12812  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171070>`__
12813
12814pw_perf_test
12815------------
12816* `Reogranize source files
12817  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178914>`__
12818
12819pw_presubmit
12820------------
12821* `Create new fuzz program
12822  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181134>`__
12823  (issue `#311215681 <https://issues.pigweed.dev/issues/311215681>`__)
12824* `Add examples showing how to create formatters
12825  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180310>`__
12826* `Correct coverage ref
12827  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179452>`__
12828  (issue `#279161371 <https://issues.pigweed.dev/issues/279161371>`__)
12829
12830pw_stream
12831---------
12832* `Fix use of shutdown on Windows
12833  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180401>`__
12834  (issue `#309680612 <https://issues.pigweed.dev/issues/309680612>`__)
12835
12836pw_system
12837---------
12838* `Add tracing to the demo system
12839  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168834>`__
12840
12841pw_system_demo
12842--------------
12843* `Add clang to default stm32f4 build
12844  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178930>`__
12845  (issue `#301079199 <https://issues.pigweed.dev/issues/301079199>`__)
12846
12847pw_tokenizer
12848------------
12849* `Add Java to supported languages list
12850  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179251>`__
12851
12852pw_toolchain
12853------------
12854* `Set alwayslink = 1 when using --wrap
12855  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180930>`__
12856* `Add objdump
12857  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175810>`__
12858
12859pw_toolchain_bazel
12860------------------
12861Core building blocks from the :ref:`seed-0113` plan were implemented:
12862:py:class:`pw_cc_flag_set` and :py:class:`pw_cc_flag_group`.
12863
12864* `Introduce pw_cc_flag_set and pw_cc_flag_group
12865  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179932>`__
12866  (issue `#309533028 <https://issues.pigweed.dev/issues/309533028>`__)
12867
12868pw_trace_tokenized
12869------------------
12870* `Add a transfer based trace service
12871  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168833>`__
12872
12873pw_transfer
12874-----------
12875There's been a concerted effort to reduce ``pw_transfer`` test flakiness.
12876
12877* `Limit data sent in handler clear test
12878  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180951>`__
12879  (issue `#297355578 <https://issues.pigweed.dev/issues/297355578>`__)
12880* `Limit data sent in manual cancel test
12881  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180826>`__
12882* `Use project-absolute imports for test fixture
12883  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180390>`__
12884  (issue `#310038737 <https://issues.pigweed.dev/issues/310038737>`__)
12885* `Prevent accidental timeouts in unit tests
12886  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180274>`__
12887
12888pw_unit_test
12889------------
12890The :ref:`module-pw_unit_test-api-expect` and
12891:ref:`module-pw_unit_test-api-assert` APIs were documented. Support for
12892GoogleTest's ``ASSERT_OK_AND_ASSIGN``, ``StatusIs``, and ``IsOkAndHolds`` was
12893added.
12894
12895* `Document ASSERT_ and EXPECT_ macros
12896  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179873>`__
12897* `Include the right gmock header
12898  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180030>`__
12899  (issue `#309665550 <https://issues.pigweed.dev/issues/309665550>`__)
12900* `Mark libs as test only in bazel
12901  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179874>`__
12902  (issue `#309665550 <https://issues.pigweed.dev/issues/309665550>`__)
12903* `Support *_NEAR, *_FLOAT_EQ, *_DOUBLE_EQ
12904  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179770>`__
12905* `Allow googletest_test_matchers_test to run
12906  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179450>`__
12907* `Add more googletest test matchers
12908  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179151>`__
12909* `Add googletest test matchers
12910  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177878>`__
12911
12912pw_watch
12913--------
12914Support for ``httpwatcher`` was removed because it's not supported on modern
12915versions of Python.
12916
12917* `Remove httpwatcher support
12918  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179250>`__
12919  (issue `#304603192 <https://issues.pigweed.dev/issues/304603192>`__)
12920
12921pw_web
12922------
12923The log viewer has been polished and testing has been enhanced.
12924
12925* `Fix LogViewControls responsive behavior
12926  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179470>`__
12927  (issue `#308993282 <https://issues.pigweed.dev/issues/308993282>`__)
12928* `Resume autoscroll with clear logs event
12929  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179252>`__
12930* `Fix clear logs due to error thrown handling input text
12931  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176867>`__
12932* `Add manual testing page in docs
12933  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178923>`__
12934  (issue `#288587657 <https://issues.pigweed.dev/issues/288587657>`__)
12935
12936Build
12937=====
12938* `Update the default C++ standard
12939  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178913>`__
12940
12941Bazel
12942-----
12943* `Upgrade nanopb version
12944  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180871>`__
12945* `Update comment
12946  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180815>`__
12947* `Set --incompatible_default_to_explicit_init_py
12948  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/180454>`__
12949  (issue `#266950138 <https://issues.pigweed.dev/issues/266950138>`__)
12950* `Make pw_cc_library an alias for cc_library
12951  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178924>`__
12952  (issue `#267498492 <https://issues.pigweed.dev/issues/267498492>`__)
12953* `Don't disable use_header_modules
12954  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178565>`__
12955  (issue `#267498492 <https://issues.pigweed.dev/issues/267498492>`__)
12956
12957Targets
12958=======
12959.. todo-check: disable
12960
12961* (``stm32f429i_disc1_stm32cube``)
12962  `Update TODO
12963  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179172>`__
12964
12965.. todo-check: enable
12966
12967Language support
12968================
12969* (Python) `Update constraint.list
12970  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179614>`__
12971* (Python) `Upgrade parameterized package
12972  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179451>`__
12973
12974Docs
12975====
12976A document about Pigweed's :ref:`docs-mission` was added. The
12977:ref:`style guide <docs-pw-style>` was split into multiple pages.
12978
12979* `Update Pigweed Live dates
12980  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/181031>`__
12981* `Add mission & philosophies
12982  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178910>`__
12983* `Add Contribution Standards section
12984  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179171>`__
12985* `Add details to codependent docs
12986  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179879>`__
12987* `Update changelog
12988  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178911>`__
12989  (issue `#292247409 <https://issues.pigweed.dev/issues/292247409>`__)
12990* `Split the style guide: Doxygen & Sphinx
12991  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178912>`__
12992* `Split the style guide: C++
12993  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178952>`__
12994* `Split the style guide: commit style
12995  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178490>`__
12996
12997SEEDs
12998=====
12999* (SEED-0110) `Correct status
13000  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/179436>`__
13001* (SEED-0110) `Memory Allocation Interfaces
13002  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168772>`__
13003* (SEED-0113) `Add modular Bazel C/C++ toolchain API
13004  <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173453>`__
13005
13006-----------
13007Nov 3, 2023
13008-----------
13009Highlights (Oct 19, 2023 to Nov 3, 2023):
13010
13011* A lot more of the :cpp:class:`pw::multibuf::Chunk` API was implemented.
13012* :ref:`module-pw_format` is a new module dedicated to Rust format string parsing.
13013* The tokenizer prefix is now configurable via
13014  ``PW_TOKENIZER_NESTED_PREFIX_STR``.
13015* References to C++14 have been removed throughout the codebase. Pigweed no
13016  longer supports C++14; C++17 or newer is required.
13017* The upstream Pigweed GN build is now
13018  :ref:`more isolated <docs-changelog-20231103-pw_build>` so that downstream
13019  projects have less conflicts when importing Pigweed into their existing GN
13020  build.
13021* Build configuration is moving away from Bazel macros like ``pw_cc_library``
13022  and towards the toolchain configuration so that downstream projects can have
13023  :ref:`full control <docs-changelog-20231103-bazel>` over how Pigweed libraries
13024  are built.
13025* New guidelines for authoring module docs have been published at
13026  :ref:`docs-contrib-docs-modules`. :ref:`module-pw_string` is now an example
13027  of a "golden" module docs set that follows the new guidelines. Please leave
13028  feedback on the new guidelines (and module docs updated to follow the
13029  guidelines) in `issue #309123039 <https://issues.pigweed.dev/issues/309123039>`__.
13030
13031
13032Active SEEDs
13033============
13034Help shape the future of Pigweed! Please leave feedback on the following active RFCs (SEEDs):
13035
13036* `SEED-0103: pw_protobuf Object Model <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/133971>`__
13037* `SEED-0106: Project Template <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155430>`__
13038* `SEED-0110: Memory Allocation Interfaces <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168772>`__
13039* `SEED-0113: Modular Bazel C/C++ Toolchain API <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173453>`__
13040* `SEED-0114: Channels <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175471>`__
13041* `SEED-0115: Sensors <http://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176760>`__
13042* `SEED-0116: Sockets <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177696>`__
13043
13044Modules
13045=======
13046
13047pw_allocator
13048------------
13049The docs now have an auto-generated size report.
13050``pw::allocator::SplitFreeListAllocator`` has a new ``blocks()`` method for getting the
13051range of blocks being tracked. The class was also refactored to
13052use the existing ``Block`` API. The ``Block`` API itself was refactored to
13053encode offsets and flags into fields.
13054
13055* `Add size reporting <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178370>`__
13056* `Return Range from SplitFreeListAllocator <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177807>`__
13057* `Refactor SplitFreeListAllocator to use Block <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176579>`__
13058* `Refactor Block to use encoded offsets <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176578>`__
13059
13060pw_arduino_build
13061----------------
13062* `STM32 Core fixes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177750>`__
13063
13064pw_assert
13065---------
13066* `Update print_and_abort backend formatting <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177845>`__
13067
13068pw_bluetooth
13069------------
13070More :ref:`Emboss <module-pw_third_party_emboss>` definitions were added.
13071
13072.. todo-check: disable
13073
13074* `Add TODO for issue 308794058 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/151070>`__
13075  (issue `#308794058 <https://issues.pigweed.dev/issues/308794058>`__)
13076* `Remove anonymous entry in LEPeerAddressTypeNoAnon <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177881>`__
13077* `Separate LEAddressType and LEExtendedAddressType <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178010>`__
13078* `Define LEExtendedCreateConnectionV1 Emboss structure <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176574>`__
13079  (issue `#305976440 <https://issues.pigweed.dev/issues/305976440>`__)
13080* `Define LEEnhancedConnectionCompleteSubeventV1 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176576>`__
13081  (issue `#305976440 <https://issues.pigweed.dev/issues/305976440>`__)
13082* `Remove padding from Emboss command definitions <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176772>`__
13083
13084.. todo-check: enable
13085
13086.. _docs-changelog-20231103-pw_build:
13087
13088pw_build
13089--------
13090Pigweed used to inject a selection of recommended configs into every ``pw_*``
13091C/C++ target in the GN build. These were previously only possible to remove
13092with the ``remove_configs`` argument. These configs are now bundled with
13093toolchains instead, and if you don't use a Pigweed-style toolchain you'll
13094no longer need to find ways to strip the default configs from Pigweed build rules.
13095More importantly, this changes makes Pigweed's recommended configs behave
13096identically to other toolchain configs, and they're now more clearly part of
13097GN toolchain definitions. This change is transparent to most projects, but some
13098Pigweed customers have been asking for this for a while.
13099
13100The :ref:`module-pw_build-bazel-empty_cc_library` Bazel utility was added.
13101
13102* `Add empty_cc_library <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178555>`__
13103* `Remove pw_build_default_configs_in_toolchain <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177894>`__
13104* `Apply pigweed_default_configs in toolchain <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/120610>`__
13105  (issue `#260111641 <https://issues.pigweed.dev/issues/260111641>`__)
13106* `Fix blob attribute ordering <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177458>`__
13107* `Only use -Wextra-semi on C++ files with GCC <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177171>`__
13108  (issues `#301262374 <https://issues.pigweed.dev/issues/306734552>`__,
13109  `#301262374 <https://issues.pigweed.dev/issues/301262374>`__)
13110* `Silence Windows-specific warnings <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177172>`__
13111
13112pw_bytes
13113--------
13114A new ``_b`` literal was added to make it easier to create bytes for tests
13115and constants.
13116
13117* `Add _b suffix for byte literals <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178134>`__
13118
13119pw_containers
13120-------------
13121The reference docs for the variable length entry queue API in C and Python
13122were updated.
13123
13124* `Update VariableLengthEntryQueue size functions; cleanup <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173454>`__
13125
13126pw_digital_io_mcuxpresso
13127------------------------
13128* `Remove RT595 size def <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178353>`__
13129
13130pw_doctor
13131---------
13132* `Trivial linter fixes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176939>`__
13133
13134pw_emu
13135------
13136* `renode: Show more details when failing to connect <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178563>`__
13137  (issue `#307736513 <https://issues.pigweed.dev/issues/307736513>`__)
13138
13139pw_env_setup
13140------------
13141``pip`` has been pinned to ``23.2.1`` and ``pip-tools`` to ``7.3.0`` to
13142prevent dependency resolution problems.
13143
13144* `Pin pip and pip-tools <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177834>`__
13145* `Update protoc to 2@24.4 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177050>`__
13146  (issue `#306461552 <https://issues.pigweed.dev/issues/306461552>`__)
13147
13148pw_format
13149---------
13150:ref:`module-pw_format` is a new module dedicated to Rust format string parsing.
13151
13152* `Correct crate name in docs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178078>`__
13153* `Move Rust format string parsing into its own module <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168362>`__
13154
13155pw_fuzzer
13156---------
13157* `Inline NonOkStatus() <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178212>`__
13158* `Fix instrumentation config <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178214>`__
13159
13160.. _docs-changelog-20231103-pw_hdlc:
13161
13162pw_hdlc
13163-------
13164Using read callbacks in ``RpcClient`` is no longer accepted and the use of
13165``CancellableReader`` is now enforced because it provides a safe and clean
13166shutdown process.
13167
13168* `Enforce use of CancellableReader <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173618>`__
13169  (issue `#301496598 <https://issues.pigweed.dev/issues/301496598>`__)
13170
13171pw_libcxx
13172---------
13173:ref:`module-pw_libcxx` is a new module that provides ``libcxx`` symbols and
13174will eventually facilitate pulling in headers as well.
13175
13176* `Add pw_libcxx library <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/144970>`__
13177
13178pw_log
13179------
13180A :ref:`module-pw_log-bazel-backend_impl` label flag was added to Bazel to
13181avoid circular dependencies.
13182
13183* `Enable sandboxing for pigweed genrules <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178550>`__
13184  (issue `#307824623 <https://issues.pigweed.dev/issues/307824623>`__)
13185* `Introduce backend_impl label flag <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177842>`__
13186  (issue `#234877642 <https://issues.pigweed.dev/issues/234877642>`__)
13187
13188pw_multibuf
13189-----------
13190A lot more of the :cpp:class:`pw::multibuf::Chunk` API was implemented.
13191
13192* `Add basic MultiBuf operations <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178036>`__
13193* `Add Chunk::Merge <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177636>`__
13194* `Fix TrackingAllocatorWithMemory UAF <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177694>`__
13195* `Add module and Chunk implementation <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173951>`__
13196
13197pw_package
13198----------
13199* `Use mirror for stm32cube <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/142510>`__
13200  (issue `#278914999 <https://issues.pigweed.dev/issues/278914999>`__)
13201* `Fix Zephyr URL <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177456>`__
13202
13203pw_presubmit
13204------------
13205A CSS formatter was added.
13206
13207* `Add basic CSS formatter <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178810>`__
13208  (issue `#308948504 <https://issues.pigweed.dev/issues/308948504>`__)
13209* `Kalypsi-based coverage upload <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175070>`__
13210  (issue `#279161371 <https://issues.pigweed.dev/issues/279161371>`__)
13211* `Handle missing upstream better <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177038>`__
13212  (issue `#282808936 <https://issues.pigweed.dev/issues/282808936>`__)
13213* `Trivial linter fixes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176939>`__
13214
13215pw_protobuf
13216-----------
13217* `Enable sandboxing for pigweed genrules <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178550>`__
13218  (issue `#307824623 <https://issues.pigweed.dev/issues/307824623>`__)
13219
13220pw_rpc
13221------
13222:ref:`pw::rpc::SynchronousCallFor() <module-pw_rpc-client-sync-call-wrappers>`
13223now supports :ref:`DynamicClient <module-pw_rpc_pw_protobuf-client>`.
13224
13225* `Update Java service error with tip <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178812>`__
13226  (issue `#293361955 <https://issues.pigweed.dev/issues/293361955>`__)
13227* `Support DynamicClient with SynchronousCallFor API <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177637>`__
13228
13229pw_string
13230---------
13231The docs were updated to match the new :ref:`docs-contrib-docs-modules`.
13232
13233* `Docs tweaks <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177883>`__
13234
13235pw_sys_io
13236---------
13237Backends that depend on ``default_putget_bytes`` were updated to express the
13238dependency.
13239
13240* `Fix Bazel backends <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177656>`__
13241
13242pw_system
13243---------
13244See :ref:`docs-changelog-20231103-pw_hdlc` for an explanation of the
13245``CancellableReader`` change.
13246
13247* `Enforce use of CancellableReader <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173618>`__
13248  (issue `#301496598 <https://issues.pigweed.dev/issues/301496598>`__)
13249
13250pw_tls_client
13251-------------
13252* `Update to new boringssl API <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178150>`__
13253
13254pw_tokenizer
13255------------
13256The tokenizer prefix is now configurable via ``PW_TOKENIZER_NESTED_PREFIX_STR``.
13257
13258* `Enable sandboxing for pigweed genrules <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178550>`__
13259  (issue `#307824623 <https://issues.pigweed.dev/issues/307824623>`__)
13260* `Let tokenizer prefix be configurable <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177575>`__
13261
13262pw_toolchain
13263------------
13264You can now set the ``dir_pw_third_party_builtins`` GN var to your
13265``compiler-rt/builtins`` checkout to enable buildings LLVM ``builtins`` from
13266source instead of relying on a shipped ``libgcc``.
13267
13268* `Apply pigweed_default_configs in toolchain <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/120610>`__
13269  (issue `#260111641 <https://issues.pigweed.dev/issues/260111641>`__)
13270* `Build compiler-rt builtins to replace libgcc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/144050>`__
13271
13272pw_unit_test
13273------------
13274* `Pass verbose flag to TestRunner <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177470>`__
13275
13276pw_web
13277------
13278* `Limit component rerendering <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177810>`__
13279  (issue `#307559191 <https://issues.pigweed.dev/issues/307559191>`__)
13280
13281Build
13282=====
13283References to C++14 have been removed throughout the codebase. Pigweed no
13284longer supports C++14; C++17 or newer is required.
13285
13286* `Drop C++14 compatibility from the build and docs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177610>`__
13287
13288.. _docs-changelog-20231103-bazel:
13289
13290Bazel
13291-----
13292Build configuration is moving away from Bazel macros like ``pw_cc_library``
13293and towards the toolchain configuration so that downstream projects can have
13294full control over how Pigweed libraries are built.
13295
13296* `Move Kythe copts to toolchain configuration <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178592>`__
13297  (issue `#267498492 <https://issues.pigweed.dev/issues/267498492>`__)
13298* `Move warnings to toolchain configuration <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178557>`__
13299  (issue `#240466562 <https://issues.pigweed.dev/issues/240466562>`__)
13300* `Silence warnings from external code <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178436>`__
13301  (issue `#300330623 <https://issues.pigweed.dev/issues/300330623>`__)
13302* `stm32cube support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177134>`__
13303* `Remove most copts from pw_cc_library macro <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170824>`__
13304  (issue `#267498492 <https://issues.pigweed.dev/issues/267498492>`__)
13305
13306Targets
13307=======
13308``pw_assert_BACKEND`` for :ref:`target-host` was set to
13309``print_and_abort_check_backend`` to enable compatibility with GoogleTest death
13310tests.
13311
13312* (``host``) `Change pw_assert_BACKEND <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177835>`__
13313
13314OS support
13315==========
13316* (``zephyr``) `Update checkout to v3.5 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177669>`__
13317
13318Docs
13319====
13320New guidelines for authoring module docs have been published at
13321:ref:`docs-contrib-docs-modules`. :ref:`module-pw_string` is now an example
13322of a "golden" module docs set that follows the new guidelines. Please leave
13323feedback on the new guidelines (and module docs updated to follow the
13324guidelines) in `issue #309123039 <https://issues.pigweed.dev/issues/309123039>`__.
13325
13326There's now a definition for :ref:`docs-glossary-facade` in the glossary.
13327
13328* `Update module docs authoring guidelines <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177465>`__
13329* `Fix nav and main content scrolling <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178591>`__
13330  (issue `#303261476 <https://issues.pigweed.dev/issues/303261476>`__)
13331* `Add udev instructions to Bazel Get Started <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178435>`__
13332* `Add information on the experimental repo to contributing.rst <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/178272>`__
13333* `Mention command for updating Py dep hashes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177799>`__
13334* `Define facade in glossary <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177632>`__
13335* `Remove symlinks to files that were removed <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177530>`__
13336* `Mention upstream development guide in contributor guidelines <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177459>`__
13337* `Move all images out of the repo <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176751>`__
13338* `Update changelog <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177085>`__
13339  (issue `#292247409 <https://issues.pigweed.dev/issues/292247409>`__)
13340* `Move CoC to Contributors section of sitenav <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177071>`__
13341
13342SEEDs
13343=====
13344* (SEED-0107) `Update SEED references; fix typo <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177698>`__
13345* (SEED-0112) `Async Poll Model <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168337>`__
13346* (SEED-0115) `Fix link <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177093>`__
13347* (SEED-0116) `Claim SEED number <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177697>`__
13348
13349Third party
13350===========
13351* (nanopb) `Detect protoc updates <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177650>`__
13352
13353------------
13354Oct 20, 2023
13355------------
13356Highlights (Oct 5, 2023 to Oct 20, 2023):
13357
13358* ``pw_emu`` has launched! Check out :ref:`module-pw_emu` to get started.
13359  See :ref:`seed-0108` for background.
13360* :ref:`module-pw_log-tokenized-args` are now supported. See :ref:`seed-0105`
13361  for background.
13362* The new :cpp:class:`pw::allocator::UniquePtr` class offers a safer, simpler
13363  RAII API for allocating individual values within an allocator.
13364* A few SEEDs were accepted: :ref:`seed-0105`, :ref:`seed-0109`, and
13365  :ref:`seed-0111`.
13366* Lots of new docs, including a guide for
13367  :ref:`getting started with Bazel <docs-get-started-bazel>`, a
13368  conceptual explanation of :ref:`facades and backends <docs-facades>`,
13369  and an eng blog post detailing :ref:`Kudzu <docs-blog-01-kudzu>`, an
13370  electronic badge that the Pigweed team made for Maker Faire 2023.
13371
13372Active SEEDs
13373============
13374Help shape the future of Pigweed! Please leave feedback on the following active RFCs (SEEDs):
13375
13376* `SEED-0103: pw_protobuf Object Model <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/133971>`__
13377* `SEED-0106: Project Template <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155430>`__
13378* `SEED-0110: Memory Allocation Interfaces <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168772>`__
13379* `SEED-0113: Modular Bazel C/C++ Toolchain API <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173453>`__
13380* `SEED-0114: Channels <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175471>`__
13381* `SEED-0115: Sensors <http://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176760>`__
13382
13383Modules
13384=======
13385
13386pw_allocator
13387------------
13388The new :cpp:class:`pw::allocator::UniquePtr` class offers a safer, simpler
13389RAII API for allocating individual values within an allocator.
13390
13391* `Fix SplitFreeListAllocator region alignment <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175232>`__
13392* `Add UniquePtr\<T\> <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176781>`__
13393
13394pw_async
13395--------
13396* `Add CMake support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175475>`__
13397
13398pw_async_basic
13399--------------
13400* `Add missing include <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175476>`__
13401* `Fix build error when using pw_async:heap_dispatcher <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173480>`__
13402
13403pw_bluetooth
13404------------
13405* `Define LEChannelSelectionAlgorithmSubevent <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176577>`__
13406* `Define LEScanTimeoutSubevent <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176575>`__
13407  (issue `#265052417 <https://issues.pigweed.dev/issues/265052417>`__)
13408* `Use $size_in_bits instead of hardcoding size <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176573>`__
13409* `Switch from parameterized value to determining at run time <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176572>`__
13410  (issue `#305975969 <https://issues.pigweed.dev/issues/305975969>`__)
13411* `Fix size reports <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173620>`__
13412
13413pw_build
13414--------
13415:ref:`module-pw_build-bazel-pw_linker_script` now describes how to work
13416with linker scripts.
13417
13418* `Update pw_linker_script docs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174848>`__
13419* `Move pw_linker_script rule definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174872>`__
13420
13421pw_chre
13422-------
13423* `Remove TODOs for CHRE MacOS support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175490>`__
13424
13425pw_cli
13426------
13427* `Honor NO_COLOR and CLICOLOR_FORCE <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176860>`__
13428* `Use typing.Literal <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176778>`__
13429
13430pw_digital_io
13431-------------
13432* `Add Android.bp for proto/rpc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176270>`__
13433
13434pw_emu
13435------
13436The module has launched! Check out :ref:`module-pw_emu` to get started.
13437
13438* `renode: Increase start timeout to 120s <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176865>`__
13439* `Fix pid file race condition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176782>`__
13440* `mock_emu: start listening before making the port available <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176856>`__
13441  (issue `#306155313 <https://issues.pigweed.dev/issues/306155313>`__)
13442* `qemu: Force using IPv4 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176430>`__
13443  (issue `#305810466 <https://issues.pigweed.dev/issues/305810466>`__)
13444* `Add renode support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173613>`__
13445* `Add QEMU support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173612>`__
13446* `core: Let the OS terminate foreground emulator processes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175638>`__
13447* `Add user APIs and the command line interface <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173611>`__
13448* `Add core components <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173610>`__
13449* `Add Emulators Frontend module boilerplate <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162096>`__
13450
13451pw_env_setup
13452------------
13453* `Allow disabling CIPD cache <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176650>`__
13454* `Add prpc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175236>`__
13455
13456pw_function
13457-----------
13458* `Move pw_function_CONFIG to .gni <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173652>`__
13459
13460pw_hdlc
13461-------
13462:ref:`module-pw_hdlc-api-rpc` now has much more information on how to use
13463``pw_hdlc`` for RPC in Python.
13464
13465* `Update Python RPC documents <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174825>`__
13466
13467pw_i2c
13468------
13469* `Fix accidental c++2a <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176511>`__
13470* `Add Android.bp for i2c proto/rpc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176070>`__
13471
13472pw_kvs
13473------
13474The new ``FlashPartitionWithLogicalSectors`` variant of ``FlashPartition``
13475supports combining multiple physical ``FlashMemory`` sectors into a single
13476logical ``FlashPartition`` sector.
13477
13478* `Add FlashPartitionWithLogicalSectors <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/106917>`__
13479
13480pw_log_tokenized
13481----------------
13482:ref:`module-pw_log-tokenized-args` are now supported. See :ref:`seed-0105` for background.
13483
13484* `Add tokenized string args support to log backend <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164514>`__
13485
13486pw_log_zephyr
13487-------------
13488* `Clean-up unused dependencies from TOKENIZED_LIB <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174813>`__
13489
13490pw_minimal_cpp_stdlib
13491---------------------
13492* `Support additional libraries <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173814>`__
13493* `Add Zephyr Kconfig to enable include path <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173653>`__
13494
13495pw_package
13496----------
13497* `Update boringssl commit & skip clang-tidy <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175016>`__
13498* `Update Emboss commit <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173619>`__
13499
13500pw_presubmit
13501------------
13502:ref:`module-pw_presubmit-presubmit-checks` has more guidance on when to use
13503``--base`` and ``--full``.
13504
13505* `Add note about --full and --base <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175633>`__
13506
13507pw_snapshot
13508-----------
13509* `More detokenization tests <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176759>`__
13510
13511pw_spi
13512------
13513* `Fix cmake integration <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175190>`__
13514
13515pw_sync_zephyr
13516--------------
13517* `Add TimedThreadNotification::try_acquire_until <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175478>`__
13518
13519pw_system
13520---------
13521The ``Device`` class's constructor now accepts a ``logger`` argument
13522that enables you to specify which logger should be used.
13523
13524* `Add option to pass logger to Device <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175075>`__
13525
13526pw_third_party_freertos
13527-----------------------
13528* `Add arm_cm7_not_r0p1 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172382>`__
13529
13530pw_thread
13531---------
13532* `More detokenization tests <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176759>`__
13533
13534pw_thread_freertos
13535------------------
13536* `Fix extra wakeups when detaching threads <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175310>`__
13537  (issue `#303885539 <https://issues.pigweed.dev/issues/303885539>`__)
13538
13539pw_tokenizer
13540------------
13541:ref:`module-pw_tokenizer-get-started-integration` has new guidance around
13542configuring linker scripts in Bazel.
13543
13544* `Expose linker_script in BUILD.bazel <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175590>`__
13545
13546pw_toolchain
13547------------
13548* `Exclude googletest from static analysis <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173482>`__
13549
13550pw_transfer
13551-----------
13552* `Start the API reference <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170011>`__
13553  (issue `#299147635 <https://issues.pigweed.dev/issues/299147635>`__)
13554
13555pw_web
13556------
13557* `Reduce table cell padding <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176690>`__
13558  (issue `#305022558 <https://issues.pigweed.dev/issues/305022558>`__)
13559* `Fix invisible jump button <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175330>`__
13560* `Enable manual color scheme setting <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173630>`__
13561  (issue `#301498553 <https://issues.pigweed.dev/issues/301498553>`__)
13562
13563Build
13564=====
13565* `Fix pw_BUILD_BROKEN_GROUPS <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176114>`__
13566* `Update Android.bp <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175631>`__
13567  (issue `#277108894 <https://issues.pigweed.dev/issues/277108894>`__)
13568
13569Bazel
13570-----
13571* `Don't autodetect C++ toolchain <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175613>`__
13572  (issue `#304880653 <https://issues.pigweed.dev/issues/304880653>`__)
13573* `Add O2 to arm_gcc toolchain <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175536>`__
13574  (issue `#299994234 <https://issues.pigweed.dev/issues/299994234>`__)
13575
13576Targets
13577=======
13578* (rp2040_pw_system) `Enable time slicing <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175074>`__
13579
13580OS support
13581==========
13582* (zephyr) `Allow direct CMake inclusions <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175477>`__
13583
13584Docs
13585====
13586* `Move CoC to Contributors section of sitenav <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177071>`__
13587* `Create concepts section in sitenav <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/177037>`__
13588* `Add facades and backends page <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170602>`__
13589* `Add Bazel getting started tutorial <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176319>`__
13590* `Remove css class on Kudzu image captions <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176770>`__
13591* `Kudzu photos <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176710>`__
13592* `Refactor the getting started section <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176331>`__
13593* `Add sitemap <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176492>`__
13594* `Add hat tip for pixel doubling technique <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175639>`__
13595* `Start eng blog and add Kudzu page <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175619>`__
13596* `Add Pigweed Live directive <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174892>`__
13597* `Add builder viz to CI/CQ intro <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175414>`__
13598  (issue `#302680656 <https://issues.pigweed.dev/issues/302680656>`__)
13599* `Fix link <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175415>`__
13600  (issue `#302680656 <https://issues.pigweed.dev/issues/302680656>`__)
13601* `Add changelog highlight <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175231>`__
13602* `Update changelog <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174818>`__
13603
13604SEEDs
13605=====
13606A few SEEDs were accepted and a few more started.
13607
13608* (SEED-0105) `Add nested tokens to pw_tokenizer and pw_log <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154190>`__
13609* (SEED-0109) `Communication Buffers <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168357>`__
13610* (SEED-0111) `Update status, add link to SEED-0113 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176254>`__
13611* (SEED-0111) `Make Bazel Pigweed's Primary Build System <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171695>`__
13612* (SEED-0113) `Claim SEED number (Modular Bazel C/C++ Toolchain API) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175510>`__
13613* (SEED-0114) `Claim SEED number (Channels) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175412>`__
13614* (SEED-0115) `Clain SEED number (Sensors) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176763>`__
13615
13616Third party
13617===========
13618* (boringssl) `Remove crypto_sysrand.cc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175017>`__
13619* (fuchsia) `Copybara import <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173651>`__
13620* (fuchsia) `Update copybara with fit/defer.h <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173481>`__
13621
13622Miscellaneous
13623=============
13624* `Update formatting for new clang version <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/175311>`__
13625* `Use C++20 everywhere <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174630>`__
13626  (issue `#303371098 <https://issues.pigweed.dev/issues/303371098>`__)
13627* (revert) `Use .test convention" <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171793>`__
13628* `Add generated Emboss code <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/176571>`__
13629
13630-----------
13631Oct 6, 2023
13632-----------
13633Highlights (Sep 21, 2023 to Oct 6, 2023):
13634
13635* We expanded our RP2040 support. See the new :ref:`module-pw_chrono_rp2040`
13636  and :ref:`module-pw_digital_io_rp2040` modules.
13637* The :ref:`new CancellableReader class in pw_hdlc <docs-changelog-20231009-pw_hdlc>`
13638  is an interface for receiving RPC packets that guarantees its read process can be
13639  stopped.
13640* ``pw_rpc`` now :ref:`automatically generates a new DynamicClient interface
13641  <docs-changelog-20231009-pw_rpc>` when dynamic allocation is enabled.
13642* The Python backend for ``pw_tokenizer`` now supports :ref:`tokenizing strings as
13643  arguments <docs-changelog-20231009-pw_tokenizer>`.
13644* The ``pigweed_config`` mechanism in Bazel is now officially retired.
13645
13646Active SEEDs
13647============
13648Help shape the future of Pigweed! Please leave feedback on the following active RFCs (SEEDs):
13649
13650* `SEED-0103: pw_protobuf Object Model <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/133971>`__
13651* `SEED-0105: Add nested tokens and tokenized args to pw_tokenizer and pw_log <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154190>`__
13652* `SEED-0106: Project Template <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155430>`__
13653* `SEED-0109: Communication Buffers <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168357>`__
13654* `SEED-0110: Memory Allocation Interfaces <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168772>`__
13655* `SEED-0111: Make Bazel Pigweed's Primary Build System <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171695>`__
13656* `SEED-0112: Async Poll Model <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168337>`__
13657
13658Modules
13659=======
13660
13661.. _docs-changelog-20231009-pw_allocator:
13662
13663pw_allocator
13664------------
13665We added a bunch of new allocator APIs! ``AllocatorMetricProxy`` is a wrapper for
13666``Allocator`` that tracks the number and total of current memory allocations as well
13667as peak memory usage. ``LibCAllocator`` is an allocator that uses ``malloc()`` and
13668``free()``. ``NullAllocator`` is an allocator that always fails which is useful for
13669disallowing memory allocations under certain circumstances. ``SplitFreeListAllocator``
13670uses a free list to reduce fragmentation. ``FallbackAllocator`` enables you to
13671specify primary and secondary allocators.
13672
13673* `Add Android.bp <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173851>`__
13674* `Add pool accessors <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173615>`__
13675* `Move Resize assertion <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173614>`__
13676* `Add AllocatorMetricProxy <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172380>`__
13677* `Add LibCAllocator <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172232>`__
13678* `Add NullAllocator <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172233>`__
13679* `Add SplitFreeListAllocator <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172231>`__
13680* `Add FallbackAllocator <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171837>`__
13681* `Generic interface for allocators <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171709>`__
13682
13683pw_analog
13684---------
13685* `Migrate MicrovoltInput to Doxygen <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170593>`__
13686  (issue `#299147635 <https://issues.pigweed.dev/issues/299147635>`__)
13687
13688pw_async
13689--------
13690* `Add OWNERS file <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173690>`__
13691
13692pw_bloat
13693--------
13694``pw_size_report()`` has a new ``json_key_prefix`` argument which is an
13695optional prefix for key names in JSON size reports and a new
13696``full_json_summary`` argument which provides more control over how
13697much detail is provided in a JSON size report.
13698
13699* `Update API to allow verbose json content <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168718>`__
13700  (issue `#282057969 <https://issues.pigweed.dev/issues/282057969>`__)
13701
13702pw_bluetooth
13703------------
13704* `Format Emboss files <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174832>`__
13705* `Update comments in HCI event defs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174070>`__
13706  (issue `#265052417 <https://issues.pigweed.dev/issues/265052417>`__)
13707
13708pw_build
13709--------
13710
13711
13712* `Fix path in Bazel pw_linker_script <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174591>`__
13713* `Expose pw_linker_script in Bazel <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174590>`__
13714  (issue `#303482154 <https://issues.pigweed.dev/issues/303482154>`__)
13715* `Define empty configs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174490>`__
13716* `Add bazel implementation of pw_cc_blob_library <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173452>`__
13717  (issue `#238339027 <https://issues.pigweed.dev/issues/238339027>`__)
13718* `Clean up build_target.gni <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/120215>`__
13719  (issue `#260111641 <https://issues.pigweed.dev/issues/260111641>`__)
13720* `Allow add_global_link_deps to be overridden <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/150050>`__
13721* `Expose pigweed_default_configs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173372>`__
13722  (issue `#260111641 <https://issues.pigweed.dev/issues/260111641>`__)
13723* `Apply -Wextra-semi to C code as well as C++ <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172372>`__
13724
13725pw_chre
13726-------
13727* `Update bug numbers <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172330>`__
13728
13729pw_chrono
13730---------
13731* `Add clarification to is_nmi_safe <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174573>`__
13732
13733pw_chrono_rp2040
13734----------------
13735This module is a new ``pw::chrono::SystemClock`` backend for RP2040.
13736
13737* `System clock backend <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174651>`__
13738
13739pw_cli
13740------
13741* `Update requires script <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/126101>`__
13742* `Narrow logic around colors <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173232>`__
13743
13744pw_containers
13745-------------
13746There's a new C implementation for ``VariableLengthEntryDeque`` which is a
13747double-ended queue buffer that stores variable-length entries inline in a
13748circular (ring) buffer. The old ``VariableLengthEntryDeque`` was renamed
13749to ``VariableLengthEntryQueue``.
13750
13751* `Add missing <utility> include for std::move <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173879>`__
13752* `Rename to VariableLengthEntryQueue <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173451>`__
13753* `Rename files to variable_length_entry_queue <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173450>`__
13754* `VariableLengthEntryDeque Entry struct <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173130>`__
13755* `VariableLengthEntryDeque C implementation <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169731>`__
13756
13757pw_digital_io_rp2040
13758--------------------
13759This module is a new RP2040 backend for ``pw_digital_io``.
13760
13761* `Implementation <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173550>`__
13762  (issue `#303255049 <https://issues.pigweed.dev/issues/303255049>`__)
13763
13764pw_env_setup
13765------------
13766We made the Pigweed bootstrap process on Windows more robust.
13767
13768* `Fix double bootstrap.bat failures on Windows <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172416>`__
13769  (issue `#300992566 <https://issues.pigweed.dev/issues/300992566>`__)
13770* `Better highlight bootstrap failure <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172415>`__
13771* `Fix double bootstrap.bat failures on Windows <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172410>`__
13772  (issue `#300992566 <https://issues.pigweed.dev/issues/300992566>`__)
13773
13774.. _docs-changelog-20231009-pw_hdlc:
13775
13776pw_hdlc
13777-------
13778The new ``CancellableReader`` class is a new interface for receiving RPC
13779packets that guarantees its read process can be stopped.
13780
13781* `Add CancellableReader <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172051>`__
13782  (issue `#294858483 <https://issues.pigweed.dev/issues/294858483>`__)
13783
13784pw_i2c
13785------
13786* `Fix docs to use MakeExpectedTransactionArray <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173570>`__
13787* `Add cmake integration <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172210>`__
13788
13789pw_kvs
13790------
13791The new ``FlashPartitionWithLogicalSectors`` C++ class supports combining
13792multiple physical ``FlashMemory`` sectors into a single logical
13793``FlashPartition`` sector.
13794
13795* `Add FlashPartitionWithLogicalSectors <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/106917>`__
13796
13797pw_libc
13798-------
13799* `Don't implicitly link against global link_deps <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/150051>`__
13800
13801pw_metric
13802---------
13803* `Make constructors constexpr <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172379>`__
13804
13805pw_minimal_cpp_stdlib
13806---------------------
13807* `Update to compile with stdcompat <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173350>`__
13808* `Namespace public/internal to module <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173692>`__
13809
13810pw_perf_test
13811------------
13812* `Gate on pw_chrono_SYSTEM_TIMER_BACKEND <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174650>`__
13813
13814pw_presubmit
13815------------
13816* `Allow dots in module part of commit message <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174232>`__
13817* `Use autodoc for context classes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169119>`__
13818* `Allow passing kwargs to build.bazel <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173853>`__
13819  (issue `#302045722 <https://issues.pigweed.dev/issues/302045722>`__)
13820* `No env_with_clang_vars with bazel <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173656>`__
13821
13822pw_ring_buffer
13823--------------
13824* `Minor build and docs updates <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173030>`__
13825
13826.. _docs-changelog-20231009-pw_rpc:
13827
13828pw_rpc
13829------
13830If dynamic allocation is enabled via ``PW_RPC_DYNAMIC_ALLOCATION`` a new
13831``DynamicClient`` is now generated which dynamically allocates the call
13832object with ``PW_RPC_MAKE_UNIQUE_PTR``.
13833
13834* `Generate DynamicClient that dynamically allocates call objects <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168534>`__
13835* `Add CancellableReader <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172051>`__
13836  (issue `#294858483 <https://issues.pigweed.dev/issues/294858483>`__)
13837
13838pw_rpc_transport
13839----------------
13840* `Add a test loopback service registry <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171114>`__
13841  (issue `#300663813 <https://issues.pigweed.dev/issues/300663813>`__)
13842
13843pw_stream
13844---------
13845``pw_stream`` now has initial support for ``winsock2``.
13846
13847* `Add Windows socket support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172413>`__
13848
13849pw_sys_io_rp2040
13850----------------
13851* `Renamed from pw_sys_io_pico <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174910>`__
13852
13853.. _docs-changelog-20231009-pw_tokenizer:
13854
13855pw_tokenizer
13856------------
13857The Python backend now supports nested hashing tokenization. See
13858:ref:`module-pw_tokenizer-nested-arguments`.
13859
13860* `Support nested hashing tokenization (python backend) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/145339>`__
13861  (issue `#278890205 <https://issues.pigweed.dev/issues/278890205>`__)
13862* `Test for C99 support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170150>`__
13863
13864pw_toolchain
13865------------
13866* `Add libc stub for gettimeofday, update visibility rules <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173850>`__
13867* `Link against pw_libc for host clang toolchains <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/151439>`__
13868
13869pw_transfer
13870-----------
13871* `Start the API reference <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170011>`__
13872  (issue `#299147635 <https://issues.pigweed.dev/issues/299147635>`__)
13873* `Remove old test server <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172951>`__
13874  (issue `#234875234 <https://issues.pigweed.dev/issues/234875234>`__)
13875
13876pw_unit_test
13877------------
13878* `Do not print contents of unknown objects <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174911>`__
13879* `Add more pw_unit_test_TESTONLY args <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173670>`__
13880  (issue `#234873207 <https://issues.pigweed.dev/issues/234873207>`__)
13881* `Add pw_unit_test_TESTONLY build arg <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171970>`__
13882  (issue `#234873207 <https://issues.pigweed.dev/issues/234873207>`__)
13883
13884pw_watch
13885--------
13886* `Add link to served docs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173456>`__
13887
13888pw_web
13889------
13890* `Make ongoing transfers accessible downstream <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174231>`__
13891* `TypeScript workarounds for disambiguation errors <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173590>`__
13892* `Throw error as an Error type <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173051>`__
13893* `Remove need for Buffer package in pw_hdlc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172377>`__
13894* `Remove date-fns <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172371>`__
13895
13896Build
13897=====
13898* `Fix extended default group <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174574>`__
13899  (issue `#279161371 <https://issues.pigweed.dev/issues/279161371>`__)
13900* `Fix \`all\` target in GN build <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173050>`__
13901* `Add an extended default group <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/110391>`__
13902
13903Bazel
13904-----
13905* `Retire pigweed_config (part 3) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172411>`__
13906* `Retire pigweed_config (part 2) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170058>`__
13907  (issue `#291106264 <https://issues.pigweed.dev/issues/291106264>`__)
13908
13909Docs
13910====
13911We started a :ref:`glossary <docs-glossary>` and added new docs about
13912:ref:`rollers <docs-rollers>` and :ref:`CI/CQ <docs-ci-cq-intro>`.
13913
13914* `Add docs on rollers <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174770>`__
13915  (issue `#302680656 <https://issues.pigweed.dev/issues/302680656>`__)
13916* `Remove redundant auto-submit section <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174890>`__
13917  (issue `#302680656 <https://issues.pigweed.dev/issues/302680656>`__)
13918* `Reformat CI/CQ Intro <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174870>`__
13919  (issue `#302680656 <https://issues.pigweed.dev/issues/302680656>`__)
13920* `Move CI/CQ Intro to infra/ <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174776>`__
13921  (issue `#302680656 <https://issues.pigweed.dev/issues/302680656>`__)
13922* `Address comments on CI/CQ intro <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173932>`__
13923  (issue `#302680656 <https://issues.pigweed.dev/issues/302680656>`__)
13924* `Tidy up build system docs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173658>`__
13925* `Fix typo <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173872>`__
13926* `Add CI/CQ Intro <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173455>`__
13927  (issue `#302680656 <https://issues.pigweed.dev/issues/302680656>`__)
13928* `Add policy on incomplete docs changes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/173617>`__
13929* `Start the glossary <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172952>`__
13930* `Update changelog <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172810>`__
13931  (issue `#292247409 <https://issues.pigweed.dev/issues/292247409>`__)
13932* `Add Doxygen @endcode guidance <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172470>`__
13933
13934SEEDs
13935=====
13936* (SEED-0112) `Fix link <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174771>`__
13937
13938Miscellaneous
13939=============
13940
13941pigweed.json
13942------------
13943* `Exclude patches.json from formatting <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/174230>`__
13944  (issue `#232234662 <https://issues.pigweed.dev/issues/232234662>`__)
13945
13946------------
13947Sep 22, 2023
13948------------
13949Highlights (Sep 07, 2023 to Sep 22, 2023):
13950
13951* ``pw_tokenizer`` has :ref:`new C++ methods for detokenizing
13952  Base64-encoded strings and new C functions for manually encoding tokenized
13953  messages that contain integers <docs-changelog-pw_tokenizer-20230922>`.
13954* ``pw::rpc::SynchronousCall`` now supports the use of :ref:`custom response message
13955  classes <docs-changelog-pw_rpc-20230922>`.
13956* The C API for ``pw_varint`` got :ref:`lots of ergonomic improvements
13957  <docs-changelog-pw_varint-20230922>`.
13958* The new :ref:`docs-code_reviews` document outlines the upstream Pigweed code
13959  review process.
13960
13961Active SEEDs
13962============
13963Help shape the future of Pigweed! Please leave feedback on the following active RFCs (SEEDs):
13964
13965* `SEED-0103: pw_protobuf Object Model <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/133971>`__
13966* `SEED-0105: Add nested tokens and tokenized args to pw_tokenizer and pw_log <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154190>`__
13967* `SEED-0106: Project Template <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155430>`__
13968* `SEED-0109: Communication Buffers <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168357>`__
13969* `SEED-0110: Memory Allocation Interfaces <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168772>`__
13970* `SEED-0111: Future of Pigweed build systems <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171695>`__
13971* `SEED-0112: Async Poll Model <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168337>`__
13972
13973Modules
13974=======
13975
13976pw function
13977-----------
13978* `Sign conversion fixes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171832>`__
13979  (issue `#301079199 <https://issues.pigweed.dev/issues/301079199>`__)
13980
13981pw perf_test
13982------------
13983* `Sign conversion fixes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171832>`__
13984  (issue `#301079199 <https://issues.pigweed.dev/issues/301079199>`__)
13985
13986pw_analog
13987---------
13988* `Migrate AnalogInput to Doxygen <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170511>`__
13989  (issue `#299147635 <https://issues.pigweed.dev/issues/299147635>`__)
13990
13991pw_async
13992--------
13993The ``Run*()`` methods of ``FakeDispatcher`` now return a boolean that indicates
13994whether any tasks were invoked.
13995
13996* `Return bool from FakeDispatcher Run*() methods <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170599>`__
13997
13998pw_async_basic
13999--------------
14000``release()`` is now only called outside of locked contexts to prevent an
14001issue where the thread wakes up and then immediately goes back to sleep.
14002An unnecessary 5-second wakeup has been removed from ``BasicDispatcher``.
14003
14004* `release outside of lock context <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171103>`__
14005* `Remove unnecessary 5-second wakeup <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171102>`__
14006
14007pw_base64
14008---------
14009The new ``pw::base64::IsValidChar()`` method can help you determine if a
14010character is valid Base64.
14011
14012* `Add base64 detokenizer handler <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165010>`__
14013
14014pw_bluetooth
14015------------
14016More :ref:`Emboss <module-pw_third_party_emboss>` definitions were added.
14017
14018* `Add ReadLocalSupportedCommandsCommandCompleteEvent Emboss <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169877>`__
14019* `Add LEReadLocalSupportedFeaturesCommandCompleteEvent <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169931>`__
14020* `Add ReadBufferSizeCommandComplete Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169869>`__
14021* `Add ReadBdAddrCommandCompleteEvent Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170052>`__
14022* `Add ReadLocalVersionInfoCommandCompleteEvent Emboss def <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169951>`__
14023* `Add LELongTermKeyRequestSubevent Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169950>`__
14024* `Add UserPasskeyNotificationEvent Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169917>`__
14025
14026pw_build
14027--------
14028* `Apply -Wextra-semi to C code as well as C++ <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172372>`__
14029
14030pw_bytes
14031--------
14032The ``AlignDown()``, ``AlignUp()``, and ``Padding()`` methods of ``pw_kvs``
14033have moved to ``pw_bytes`` to enable ``pw_allocator`` to use them without
14034taking a dependency on ``pw_kvs``.
14035
14036* `Move Align functions from pw_kvs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171831>`__
14037
14038pw_checksum
14039-----------
14040* `Sign conversion fixes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171832>`__
14041  (issue `#301079199 <https://issues.pigweed.dev/issues/301079199>`__)
14042
14043pw_chre
14044-------
14045The implementation of a module that will enable to work more seamlessly with
14046Android's `Context Hub Runtime Environment <https://source.android.com/docs/core/interaction/contexthub>`__
14047has begun.
14048
14049* `Update bug numbers <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172330>`__
14050* `Minor fixes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171851>`__
14051  (issue `#301079509 <https://issues.pigweed.dev/issues/301079509>`__)
14052* `Fix build rules to use paramertized paths <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171850>`__
14053  (issue `#298474212 <https://issues.pigweed.dev/issues/298474212>`__)
14054* `Split out shared_platform <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170791>`__
14055* `Write our own version.cc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170790>`__
14056  (issue `#300633363 <https://issues.pigweed.dev/issues/300633363>`__)
14057* `Add barebones CHRE <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162510>`__
14058  (issue `#294106526 <https://issues.pigweed.dev/issues/294106526>`__)
14059
14060pw_console
14061----------
14062When invoking ``pw_console`` directly from Python, you can now provide arguments
14063through an ``argparse.Namespace`` instead of messing with ``sys.argv`` or forking
14064another process.
14065
14066* `Allow injecting args via Python call <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172414>`__
14067
14068pw_containers
14069-------------
14070`MemorySanitizer <https://github.com/google/sanitizers/wiki/MemorySanitizer>`__ has
14071been disabled in some of the ``InlineDeque`` implementation to prevent some false
14072positive detections of uninitialized memory reads.
14073
14074* `Silence MSAN false positives <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171990>`__
14075
14076pw_env_setup
14077------------
14078Work continues on making the Windows bootstrap process more robust.
14079
14080* `Better highlight bootstrap failure <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172415>`__
14081* `Fix double bootstrap.bat failures on Windows <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172410>`__
14082  (issue `#300992566 <https://issues.pigweed.dev/issues/300992566>`__)
14083* `Enable overriding Clang CIPD version <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171838>`__
14084* `PyPI version bump to 0.0.15 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171836>`__
14085* `Add relative_pigweed_root to pigweed.json <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171218>`__
14086  (issue `#300632028 <https://issues.pigweed.dev/issues/300632028>`__)
14087* `Roll cipd to 0f08b927516 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170452>`__
14088
14089pw_function
14090-----------
14091The documentation has been updated for accuracy.
14092
14093* `Update config.h comments <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171250>`__
14094* `Add configurable Allocator default <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171130>`__
14095* `Update example to match guidelines for parameters <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170651>`__
14096* `Add Allocator injection <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170190>`__
14097
14098pw_fuzzer
14099---------
14100Conditional logic around fuzzing support has been refactored to allow for
14101dedicated targets based on specific conditions and to make it clearer
14102exactly what configurations and dependencies are being used.
14103
14104* `Refactor conditional GN targets <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169712>`__
14105
14106pw_ide
14107------
14108* `Reformat json files <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172310>`__
14109* `Fix clangd path on Windows <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171099>`__
14110* `Move VSC extension into npm package dir <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170995>`__
14111
14112pw_libc
14113-------
14114The initial implementation work continues.
14115
14116* `Pull in 'abort' <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/138518>`__
14117* `Use .test convention <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171793>`__
14118* `Use underscore prefixed variables <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171792>`__
14119* `Add documentation for pw_libc_source_set <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171693>`__
14120* `Pull in 'gmtime' <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/137699>`__
14121* `Fix printf for newer llvm-libc commits <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170831>`__
14122* `Fix llvm-libc after internal assert changes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168830>`__
14123
14124pw_log
14125------
14126The implementation work continues to enable an Android component to read logs
14127from a component running the ``pw_log_rpc`` service.
14128
14129* `Update Android.bp to generate RPC header files <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169530>`__
14130  (issue `#298693458 <https://issues.pigweed.dev/issues/298693458>`__)
14131
14132pw_log_string
14133-------------
14134* `Fix the default impl to handle zero length va args <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169975>`__
14135
14136pw_package
14137----------
14138Mirrors are now being used for various third-party dependencies.
14139
14140* `Use mirror for zephyrproject-rtos/zephyr <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170355>`__
14141  (issue `#278914999 <https://issues.pigweed.dev/issues/278914999>`__)
14142* `Use Pigweed mirror for google/emboss <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170356>`__
14143  (issue `#278914999 <https://issues.pigweed.dev/issues/278914999>`__)
14144* `Use mirror for raspberrypi/picotool <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170040>`__
14145  (issue `#278914999 <https://issues.pigweed.dev/issues/278914999>`__)
14146
14147pw_polyfill
14148-----------
14149* `Increase __GNUC__ for __constinit <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171150>`__
14150  (issue `#300478321 <https://issues.pigweed.dev/issues/300478321>`__)
14151
14152pw_presubmit
14153------------
14154A new JSON formatting check has been added. The missing newline check has been
14155made more robust.
14156
14157* `Add JSON formatter <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171991>`__
14158* `Better handling of missing newlines <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172230>`__
14159  (issue `#301315329 <https://issues.pigweed.dev/issues/301315329>`__)
14160* `Expand Bazel parser to tests <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171890>`__
14161* `Remove now-unnecessary flag <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171670>`__
14162  (issue `#271299438 <https://issues.pigweed.dev/issues/271299438>`__)
14163* `Additional functions for handling gn args <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170594>`__
14164* `Include bazel_build in full program <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170056>`__
14165
14166pw_protobuf
14167-----------
14168* `Fix "Casting..." heading level <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171030>`__
14169
14170.. _docs-changelog-pw_rpc-20230922:
14171
14172pw_rpc
14173------
14174``pw::rpc::SynchronousCall`` now supports the use of custom response message
14175classes that set field callbacks in their constructor. See
14176:ref:`module-pw_rpc-client-sync-call-wrappers`.
14177
14178.. todo-check: disable
14179
14180* `Refer to bug in TODO and fix format <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172453>`__
14181* `Support custom response messages in SynchronousCall <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170041>`__
14182  (issue `#299920227 <https://issues.pigweed.dev/issues/299920227>`__)
14183* `Add fuzz tests <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/143474>`__
14184
14185.. todo-check: enable
14186
14187pw_stream
14188---------
14189* `Add Windows socket support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172413>`__
14190
14191pw_string
14192---------
14193* `Fix signed integer overflow <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171839>`__
14194
14195pw_system
14196---------
14197* `Add arm_none_eabi_gcc_support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158730>`__
14198
14199pw_thread
14200---------
14201* `Fix small typo in docs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171750>`__
14202
14203.. _docs-changelog-pw_tokenizer-20230922:
14204
14205pw_tokenizer
14206------------
14207``pw::tokenizer::Detokenizer`` has new ``DetokenizeBase64Message()`` and
14208``DetokenizeBase64()`` methods for detokenizing Base64-encoded strings.
14209The new ``pw_tokenizer_EncodeInt()`` and ``pw_tokenizer_EncodeInt64()``
14210functions in the C API make it easier to manually encode tokenized messages
14211with integers from C.
14212
14213* `C++ Base64 detokenization improvements <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171675>`__
14214* `Add base64 detokenizer handler <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165010>`__
14215* `C functions for encoding arguments <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169976>`__
14216
14217pw_toolchain
14218------------
14219``arm_gcc`` now supports Cortex-M33.
14220
14221* `Add missing objcopy tool to bazel toolchains <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171697>`__
14222  (issue `#301004620 <https://issues.pigweed.dev/issues/301004620>`__)
14223* `Add cpu flags to asmopts as well <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171671>`__
14224* `Add cortex-m33 support to arm_gcc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171237>`__
14225
14226pw_toolchain_bazel
14227------------------
14228* `Support ar opts in pw_toolchain_features <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171673>`__
14229* `Add cortex-m7 constraint_value <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171071>`__
14230  (issue `#300467616 <https://issues.pigweed.dev/issues/300467616>`__)
14231
14232.. _docs-changelog-pw_varint-20230922:
14233
14234pw_varint
14235---------
14236The C encoding functions now have an output size argument, making them much
14237easier to use. There's a new macro for calculating the encoded size of an
14238integer in a C constant expression. Incremental versions of the encode and
14239decode functions have been exposed to support in-place encoding and decoding
14240with non-contiguous buffers.
14241
14242* `C API updates <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170050>`__
14243
14244pw_web
14245------
14246The ``ProgressStats`` and ``ProgressCallback`` types are now exported.
14247Styling and scrolling behavior in the log viewer has been improved.
14248
14249* `Remove need for Buffer package in pw_hdlc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172377>`__
14250* `Remove date-fns <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172371>`__
14251* `Export ProgressStats, ProgressCallback types <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171707>`__
14252* `Add back 'buffer' dependency <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171891>`__
14253* `NPM version bump to 0.0.13 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171110>`__
14254* `Improve scrolling behavior <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171290>`__
14255  (issue `#298097109 <https://issues.pigweed.dev/issues/298097109>`__)
14256* `Fix leading white spaces, scrollbar size, and filters in quotes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170811>`__
14257* `NPM version bump to 0.0.12 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170597>`__
14258* `Fix column sizing & toggling, update UI <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169591>`__
14259* `Replace Map() with object in proto collection <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170493>`__
14260
14261pw_work_queue
14262-------------
14263* `Don't lock around work_notification_ <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170450>`__
14264* `Migrate API reference to Doxygen <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169830>`__
14265  (issue `#299147635 <https://issues.pigweed.dev/issues/299147635>`__)
14266
14267Build
14268=====
14269* `Update Android.bp <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171510>`__
14270
14271Bazel
14272-----
14273* `Add platform-printing aspect <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/122974>`__
14274* `Retire pigweed_config (part 2) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170058>`__
14275  (issue `#291106264 <https://issues.pigweed.dev/issues/291106264>`__)
14276* `Retire pigweed_config (part 1) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168721>`__
14277  (issue `#291106264 <https://issues.pigweed.dev/issues/291106264>`__)
14278* `Remove -Wno-private-header from copts <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170951>`__
14279  (issue `#240466562 <https://issues.pigweed.dev/issues/240466562>`__)
14280* `Remove bazelembedded dependency <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170650>`__
14281  (issue `#297239780 <https://issues.pigweed.dev/issues/297239780>`__)
14282* `Move cxxopts out of bazelrc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170639>`__
14283  (issue `#269195628 <https://issues.pigweed.dev/issues/269195628>`__)
14284* `Use the same clang version as in GN <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170638>`__
14285* `Arm gcc configuration <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168192>`__
14286  (issue `#297239780 <https://issues.pigweed.dev/issues/297239780>`__)
14287
14288Targets
14289=======
14290* `Fix pico_sdk elf2uf2 on Windows <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170770>`__
14291* `Add pw_strict_host_clang_debug_dynamic_allocation tc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171674>`__
14292
14293Docs
14294====
14295The new :ref:`docs-code_reviews` document outlines the upstream Pigweed code
14296review process.
14297
14298* `Add Doxygen @endcode guidance <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172470>`__
14299* `Clean up remaining instances of code:: <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172050>`__
14300  (issue `#300317685 <https://issues.pigweed.dev/issues/300317685>`__)
14301* `Document code review process <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171774>`__
14302* `Add link to in-progress hardware targets <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171239>`__
14303* `Fix link title for pw_log <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170670>`__
14304* `Update changelog <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170055>`__
14305  (issue `#292247409 <https://issues.pigweed.dev/issues/292247409>`__)
14306
14307SEEDs
14308=====
14309* `Update process document <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170390>`__
14310* (SEED-0104) `Display Support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/150793>`__
14311* (SEED-0109) `Make link externally accessible <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170043>`__
14312* (SEED-0110) `Claim SEED number <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170038>`__
14313* (SEED-0111) `Claim SEED number <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171672>`__
14314* (SEED-0112) `Claim SEED number <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168359>`__
14315
14316Third party
14317===========
14318* `Add public configs for FuzzTest deps <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169711>`__
14319
14320third_party/fuchsia
14321-------------------
14322* `Copybara import <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171010>`__
14323* `Update patch script and patch <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170890>`__
14324* `Update patch <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170794>`__
14325* `Support specifying the Fuchsia repo to use <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170170>`__
14326
14327third_party/pico_sdk
14328--------------------
14329* `Selectively disable elf2uf2 warnings <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/171072>`__
14330  (issue `#300474559 <https://issues.pigweed.dev/issues/300474559>`__)
14331* `Fix multicore source filename <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170330>`__
14332
14333Miscellaneous
14334=============
14335.. todo-check: disable
14336
14337* `Use new TODO style <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/170730>`__
14338* `Add toolchain team members <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172170>`__
14339* `Fix double bootstrap.bat failures on Windows" <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/172410>`__
14340  (issue `#300992566 <https://issues.pigweed.dev/issues/300992566>`__)
14341
14342.. todo-check: enable
14343
14344-----------
14345Sep 8, 2023
14346-----------
14347Highlights (Aug 25, 2023 to Sep 8, 2023):
14348
14349* SEED :ref:`seed-0107` has been approved! Pigweed will adopt a new sockets API as
14350  its primary networking abstraction. The sockets API will be backed by a new,
14351  lightweight embedded-focused network protocol stack inspired by TCP/IP.
14352* SEED :ref:`seed-0108` has also been approved! Coming soon, the new ``pw_emu``
14353  module will make it easier to work with emulators.
14354
14355Active SEEDs
14356============
14357Help shape the future of Pigweed! Please leave feedback on the following active RFCs (SEEDs):
14358
14359* `SEED-0103: pw_protobuf Object Model <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/133971>`__
14360* `SEED-0104: display support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/150793>`__
14361* `SEED-0105: Add nested tokens and tokenized args to pw_tokenizer and pw_log <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154190>`__
14362* `SEED-0106: Project Template <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155430>`__
14363* `SEED-0109: Communication Buffers <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168357>`__
14364
14365Modules
14366=======
14367
14368pw_assert
14369---------
14370We fixed circular dependencies in Bazel.
14371
14372* `Remove placeholder target <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168844>`__
14373* `Fix Bazel circular deps <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160794>`__
14374  (issue `#234877642 <https://issues.pigweed.dev/issues/234877642>`__)
14375* `Introduce pw_assert_backend_impl <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168774>`__
14376  (issue `#234877642 <https://issues.pigweed.dev/issues/234877642>`__)
14377
14378pw_bluetooth
14379------------
14380We added :ref:`Emboss <module-pw_third_party_emboss>` definitions.
14381
14382* `Add SimplePairingCompleteEvent Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169916>`__
14383* `Add UserPasskeyRequestEvent Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169912>`__
14384* `Add UserConfirmationRequestEvent Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169871>`__
14385* `Use hci.LinkKey in LinkKeyNotificationEvent.link_key <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168858>`__
14386* `Add IoCapabilityResponseEvent Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168354>`__
14387* `Add IoCapabilityRequestEvent Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168353>`__
14388* `Add EncryptionKeyRefreshCompleteEvent Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168331>`__
14389* `Add ExtendedInquiryResultEvent Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168330>`__
14390
14391pw_build
14392--------
14393* `Force watch and default recipe names <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169911>`__
14394
14395pw_build_mcuxpresso
14396-------------------
14397* `Output formatted bazel target <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169740>`__
14398
14399pw_cpu_exception
14400----------------
14401We added Bazel support.
14402
14403* `bazel build support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169733>`__
14404  (issue `#242183021 <https://issues.pigweed.dev/issues/242183021>`__)
14405
14406pw_crypto
14407---------
14408The complete ``pw_crypto`` API reference is now documented on :ref:`module-pw_crypto`.
14409
14410* `Add API reference <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169572>`__
14411  (issue `#299147635 <https://issues.pigweed.dev/issues/299147635>`__)
14412
14413pw_env_setup
14414------------
14415Banners should not print correctly on Windows.
14416
14417* `Add i2c protos to python deps <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169231>`__
14418* `Fix banner printing on Windows <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169172>`__
14419  (issue `#289008307 <https://issues.pigweed.dev/issues/289008307>`__)
14420
14421pw_file
14422-------
14423* `Add pw_file python package <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168831>`__
14424
14425pw_function
14426-----------
14427The :cpp:func:`pw::bind_member()` template is now exposed in the public API.
14428``bind_member()`` is useful for binding the ``this`` argument of a callable.
14429We added a section to the docs explaining :ref:`why pw::Function is not a
14430literal <module-pw_function-non-literal>`.
14431
14432* `Explain non-literal design rationale <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168777>`__
14433* `Expose \`bind_member\` <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169123>`__
14434
14435pw_fuzzer
14436---------
14437We refactored ``pw_fuzzer`` logic to be more robust and expanded the
14438:ref:`module-pw_fuzzer-guides-reproducing_oss_fuzz_bugs` doc.
14439
14440* `Refactor OSS-Fuzz support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167348>`__
14441  (issue `#56955 <https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=56955>`__)
14442
14443pw_i2c
14444------
14445* `Use new k{FieldName}MaxSize constants to get buffer size <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168913>`__
14446
14447pw_kvs
14448------
14449We are discouraging the use of the shorter macros because they collide with
14450Abseil's logging API.
14451
14452* `Remove usage of pw_log/shorter.h API <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169920>`__
14453  (issue `#299520256 <https://issues.pigweed.dev/issues/299520256>`__)
14454
14455pw_libc
14456-------
14457``snprintf()`` support was added.
14458
14459* `Import LLVM libc's snprintf <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/137735>`__
14460
14461pw_log_string
14462-------------
14463We added more detail to :ref:`module-pw_log_string`.
14464
14465* `Fix the default impl to handle zero length va args <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169975>`__
14466* `Provide more detail in the getting started docs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168934>`__
14467  (issue `#298124226 <https://issues.pigweed.dev/issues/298124226>`__)
14468
14469pw_log_zephyr
14470-------------
14471It's now possible to define ``pw_log_tokenized_HandleLog()`` outside of Pigweed
14472so that Zephyr projects have more flexibility around how they capture tokenized
14473logs.
14474
14475* `Split tokenize handler into its own config <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168612>`__
14476
14477pw_package
14478----------
14479* `Handle failed cipd acl checks <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168530>`__
14480
14481pw_persistent_ram
14482-----------------
14483* `Add persistent_buffer flat_file_system_entry <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168832>`__
14484
14485pw_presubmit
14486------------
14487We added a reStructuredText formatter.
14488
14489* `Make builds_from_previous_iteration ints <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169721>`__
14490  (issue `#299336222 <https://issues.pigweed.dev/issues/299336222>`__)
14491* `Move colorize_diff to tools <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168839>`__
14492* `RST formatting <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168541>`__
14493
14494pw_protobuf
14495-----------
14496``max_size`` and ``max_count`` are now exposed in generated headers.
14497The new ``proto_message_field_props()`` helper function makes it easier to
14498iterate through a messages fields and properties.
14499
14500* `Expose max_size, max_count in generated header file <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168973>`__
14501  (issue `#297364973 <https://issues.pigweed.dev/issues/297364973>`__)
14502* `Introduce proto_message_field_props() <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168972>`__
14503* `Change PROTO_FIELD_PROPERTIES to a dict of classes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168971>`__
14504* `Rename 'node' to 'message' in forward_declare() <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168970>`__
14505* `Simplify unnecessary Tuple return type <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168910>`__
14506
14507pw_random
14508---------
14509We're now auto-generating the ``XorShiftStarRng64`` API reference via Doxygen.
14510
14511* `Doxygenify xor_shift.h <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164510>`__
14512
14513pw_rpc
14514------
14515The new ``request_completion()`` method in Python enables you to send a
14516completion packet for server streaming calls.
14517
14518* `Add request_completion to ServerStreamingCall python API <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168439>`__
14519
14520pw_spi
14521------
14522* `Fix Responder.SetCompletionHandler() signature <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169130>`__
14523
14524pw_symbolizer
14525-------------
14526The ``LlvmSymbolizer`` Python class has a new ``close()`` method to
14527deterministically close the background process.
14528
14529* `LlvmSymbolizer tool improvement <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168863>`__
14530
14531pw_sync
14532-------
14533We added :ref:`module-pw_sync-genericbasiclockable`.
14534
14535* `Add GenericBasicLockable <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165930>`__
14536
14537pw_system
14538---------
14539``pw_system`` now supports different channels for primary and logging RPC.
14540
14541* `Multi-channel configuration <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167158>`__
14542  (issue `#297076185 <https://issues.pigweed.dev/issues/297076185>`__)
14543
14544pw_thread_freertos
14545------------------
14546* `Add missing dep to library <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169239>`__
14547
14548pw_tokenizer
14549------------
14550We added :c:macro:`PW_TOKENIZE_FORMAT_STRING_ANY_ARG_COUNT` and
14551:c:macro:`PW_TOKENIZER_REPLACE_FORMAT_STRING`. We refactored the docs
14552so that you don't have to jump around the docs as much when learning about
14553key topics like tokenization and token databases. Database loads now happen
14554in a separate thread to avoid blocking the main thread. Change detection for
14555directory databases now works more as expected. The config API is now exposed
14556in the API reference.
14557
14558* `Remove some unused deps <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169573>`__
14559* `Simplify implementing a custom tokenization macro <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169121>`__
14560* `Refactor the docs to be task-focused <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169124>`__
14561* `Reload database in dedicated thread <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168866>`__
14562* `Combine duplicated docs sections <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168865>`__
14563* `Support change detection for directory dbs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168630>`__
14564* `Move config value check to .cc file <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168615>`__
14565
14566pw_unit_test
14567------------
14568We added ``testing::Test::HasFailure()``, ``FRIEND_TEST``, and ``<<`` messages
14569to improve gTest compatibility.
14570
14571* `Add testing::Test::HasFailure() <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168810>`__
14572* `Add FRIEND_TEST <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169270>`__
14573* `Allow <<-style messages in test expectations <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168860>`__
14574
14575pw_varint
14576---------
14577``pw_varint`` now has a :ref:`C-only API <module-pw_varint-api-c>`.
14578
14579* `Add C-only implementation; cleanup <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169122>`__
14580
14581pw_web
14582------
14583Logs can now be downloaded as plaintext.
14584
14585* `Fix TypeScript errors in Device files <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169930>`__
14586* `Json Log Source example <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169176>`__
14587* `Enable downloading logs as plain text <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168130>`__
14588* `Fix UI/state bugs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167911>`__
14589* `NPM version bump to 0.0.11 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168591>`__
14590* `Add basic bundling tests for log viewer bundle <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168539>`__
14591
14592Build
14593=====
14594
14595Bazel
14596-----
14597* `Fix alwayslink support in MacOS host_clang <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168614>`__
14598  (issue `#297413805 <https://issues.pigweed.dev/issues/297413805>`__)
14599* `Fix lint issues after roll <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169611>`__
14600
14601Docs
14602====
14603* `Fix broken links <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169579>`__
14604  (issue `#299181944 <https://issues.pigweed.dev/issues/299181944>`__)
14605* `Recommend enabling long file paths on Windows <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169578>`__
14606* `Update Windows command for git hook <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168592>`__
14607* `Fix main content scrolling <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168555>`__
14608  (issue `#297384789 <https://issues.pigweed.dev/issues/297384789>`__)
14609* `Update changelog <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168540>`__
14610  (issue `#292247409 <https://issues.pigweed.dev/issues/292247409>`__)
14611* `Use code-block:: instead of code:: everywhere <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168617>`__
14612* `Add function signature line breaks <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168554>`__
14613* `Cleanup indentation <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168537>`__
14614
14615SEEDs
14616=====
14617* `SEED-0108: Emulators Frontend <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158190>`__
14618
14619Third party
14620===========
14621* `Add public configs for FuzzTest deps <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169711>`__
14622* `Reconfigure deps & add cflags to config <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/152691>`__
14623
14624Miscellaneous
14625=============
14626* `Fix formatting with new clang version <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/169078>`__
14627
14628mimxrt595_evk_freertos
14629----------------------
14630* `Use config_assert helper <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160378>`__
14631
14632------------
14633Aug 25, 2023
14634------------
14635Highlights (Aug 11, 2023 to Aug 25, 2023):
14636
14637* ``pw_tokenizer`` now has Rust support.
14638* The ``pw_web`` log viewer now has advanced filtering and a jump-to-bottom
14639  button.
14640* The ``run_tests()`` method of ``pw_unit_test`` now returns a new
14641  ``TestRecord`` dataclass which provides more detailed information
14642  about the test run.
14643* A new Ambiq Apollo4 target that uses the Ambiq Suite SDK and FreeRTOS
14644  has been added.
14645
14646Active SEEDs
14647============
14648Help shape the future of Pigweed! Please leave feedback on the following active RFCs (SEEDs):
14649
14650* `SEED-0103: pw_protobuf Object Model <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/133971>`__
14651* `SEED-0104: display support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/150793>`__
14652* `SEED-0105: Add nested tokens and tokenized args to pw_tokenizer and pw_log <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154190>`__
14653* `SEED-0106: Project Template <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155430>`__
14654* `SEED-0108: Emulators Frontend <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158190>`__
14655
14656Modules
14657=======
14658
14659pw_bloat
14660--------
14661* `Fix typo in method name <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166832>`__
14662
14663pw_bluetooth
14664------------
14665The :ref:`module-pw_third_party_emboss` files were refactored.
14666
14667* `Add SynchronousConnectionCompleteEvent Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167862>`__
14668* `Add all Emboss headers/deps to emboss_test & fix errors <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168355>`__
14669* `Add InquiryResultWithRssiEvent Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167859>`__
14670* `Add DataBufferOverflowEvent Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167858>`__
14671* `Add LinkKeyNotificationEvent Emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167855>`__
14672* `Add LinkKeyRequestEvent emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167349>`__
14673* `Remove unused hci emboss files <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167090>`__
14674* `Add RoleChangeEvent emboss definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167230>`__
14675* `Add missing test dependency <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167130>`__
14676* `Add new hci subset files <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166730>`__
14677
14678pw_build
14679--------
14680The ``pw_build`` docs were split up so that each build system has its own page
14681now. The new ``output_logs`` flag enables you to not output logs for ``pw_python_venv``.
14682
14683* `Handle read-only files when deleting venvs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167863>`__
14684* `Split build system docs into separate pages <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165071>`__
14685* `Use pw_toolchain_clang_tools <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167671>`__
14686* `Add missing pw_linker_script flag <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167632>`__
14687  (issue `#296928739 <https://issues.pigweed.dev/issues/296928739>`__)
14688* `Fix output_logs_ unused warning <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166991>`__
14689  (issue `#295524695 <https://issues.pigweed.dev/issues/295524695>`__)
14690* `Don't include compile cmds when preprocessing ldscripts <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166490>`__
14691* `Add pw_python_venv.output_logs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165330>`__
14692  (issue `#295524695 <https://issues.pigweed.dev/issues/295524695>`__)
14693* `Increase size of test linker script memory region <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164823>`__
14694* `Add integration test metadata <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154553>`__
14695
14696pw_cli
14697------
14698* `Default change pw_protobuf default <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/126806>`__
14699  (issue `#266298474 <https://issues.pigweed.dev/issues/266298474>`__)
14700
14701pw_console
14702----------
14703* `Update web viewer to use pigweedjs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162995>`__
14704
14705pw_containers
14706-------------
14707* `Silence MSAN false positive in pw::Vector <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167111>`__
14708
14709pw_docgen
14710---------
14711Docs builds should be faster now because Sphinx has been configured to use
14712all available cores.
14713
14714* `Remove top nav bar <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168446>`__
14715* `Parallelize Sphinx <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164738>`__
14716
14717pw_env_setup
14718------------
14719Sphinx was updated from v5.3.0 to v7.1.2. We switched back to the upstream Furo
14720theme and updated to v2023.8.19. The content of ``pigweed_environment.gni`` now
14721gets logged. There was an update to ensure that ``arm-none-eabi-gdb`` errors
14722propagate correctly. There is now a way to override Bazel build files for CIPD
14723repos.
14724
14725* `Upgrade sphinx and dependencies for docs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168431>`__
14726* `Upgrade sphinx-design <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168339>`__
14727* `Copy pigweed_environment.gni to logs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167850>`__
14728* `arm-gdb: propagate errors <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165411>`__
14729* `arm-gdb: exclude %VIRTUAL_ENV%\Scripts from search paths <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164370>`__
14730* `Add ability to override bazel BUILD file for CIPD repos <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165530>`__
14731
14732pw_function
14733-----------
14734* `Rename template parameter <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168334>`__
14735
14736pw_fuzzer
14737---------
14738* `Add test metadata <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154555>`__
14739
14740pw_hdlc
14741-------
14742A new ``close()`` method was added to ``HdlcRpcClient`` to signal to the thread
14743to stop.
14744
14745* `Use explicit logger name <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166591>`__
14746* `Mitigate errors on Python background thread <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162712>`__
14747  (issue `#293595266 <https://issues.pigweed.dev/issues/293595266>`__)
14748
14749pw_ide
14750------
14751A new ``--install-editable`` flag was added to install Pigweed Python modules
14752in editable mode so that code changes are instantly realized.
14753
14754* `Add cmd to install Py packages as editable <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163572>`__
14755* `Make VSC extension run on older versions <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167054>`__
14756
14757pw_perf_test
14758------------
14759* `Add test metadata <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154554>`__
14760
14761pw_presubmit
14762------------
14763``pw_presubmit`` now has an ESLint check for linting and a Prettier check for
14764formatting JavaScript and TypeScript files.
14765
14766* `Add msan to OTHER_CHECKS <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168325>`__
14767  (issue `#234876100 <https://issues.pigweed.dev/issues/234876100>`__)
14768* `Upstream constraint file output fix <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166270>`__
14769* `JavaScript and TypeScript lint check <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165410>`__
14770* `Apply TypeScript formatting <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164825>`__
14771* `Use prettier for JS and TS files <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165390>`__
14772
14773pw_rpc
14774------
14775A ``request_completion()`` method was added to the ``ServerStreamingCall``
14776Python API. A bug was fixed related to encoding failures when dynamic buffers
14777are enabled.
14778
14779* `Add request_completion to ServerStreamingCall python API <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168439>`__
14780* `Various small enhancements <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167162>`__
14781* `Remove deprecated method from Service <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165510>`__
14782* `Prevent encoding failure when dynamic buffer enabled <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166833>`__
14783  (issue `#269633514 <https://issues.pigweed.dev/issues/269633514>`__)
14784
14785pw_rpc_transport
14786----------------
14787* `Add simple_framing Soong rule <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165350>`__
14788
14789pw_rust
14790-------
14791* `Update rules_rust to 0.26.0 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166831>`__
14792
14793pw_stm32cube_build
14794------------------
14795* `Windows path fixes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167865>`__
14796
14797pw_stream
14798---------
14799Error codes were updated to be more accurate and descriptive.
14800
14801* `Use more appropriate error codes for Cursor <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164592>`__
14802
14803pw_stream_uart_linux
14804--------------------
14805Common baud rates such as ``9600``, ``19200``, and so on are now supported.
14806
14807* `Add support for baud rates other than 115200 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165070>`__
14808
14809pw_sync
14810-------
14811Tests were added to make sure that ``pw::sync::Borrowable`` works with lock
14812annotations.
14813
14814* `Test Borrowable with Mutex, TimedMutex, and InterruptSpinLock <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/153575>`__
14815  (issue `#261078330 <https://issues.pigweed.dev/issues/261078330>`__)
14816
14817pw_system
14818---------
14819The ``pw_system.device.Device`` Python class can now be used as a
14820`context manager <https://realpython.com/python-with-statement/>`_.
14821
14822* `Make pw_system.device.Device a context manager <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163410>`__
14823
14824pw_tokenizer
14825------------
14826``pw_tokenizer`` now has Rust support. The ``pw_tokenizer`` C++ config API
14827is now documented at :ref:`module-pw_tokenizer-api-configuration` and
14828the C++ token database API is now documented at
14829:ref:`module-pw_tokenizer-api-token-databases`. When creating a token
14830database, parent directories are now automatically created if they don't
14831already exist. ``PrefixedMessageDecoder`` has been renamed to
14832``NestedMessageDecoder``.
14833
14834* `Move config value check to .cc file <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168615>`__
14835* `Create parent directory as needed <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168510>`__
14836* `Rework pw_tokenizer.detokenize.PrefixedMessageDecoder <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167150>`__
14837* `Minor binary database improvements <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167053>`__
14838* `Update binary DB docs and convert to Doxygen <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163570>`__
14839* `Deprecate tokenizer buffer size config <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163257>`__
14840* `Fix instance of -Wconstant-logical-operand <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166731>`__
14841* `Add Rust support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/145389>`__
14842
14843pw_toolchain
14844------------
14845A new Linux host toolchain built using ``pw_toolchain_bazel`` has been
14846started. CIPD-provided Rust toolchains are now being used.
14847
14848* `Link against system libraries using libs not ldflags <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/151050>`__
14849* `Use %package% for cxx_builtin_include_directories <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168340>`__
14850* `Extend documentation for tool prefixes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167633>`__
14851* `Add Linux host toolchain <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164824>`__
14852  (issue `#269204725 <https://issues.pigweed.dev/issues/269204725>`__)
14853* `Use CIPD provided Rust toolchains <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166852>`__
14854* `Switch macOS to use builtin_sysroot <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165414>`__
14855* `Add cmake helpers for getting clang compile+link flags <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163811>`__
14856
14857pw_unit_test
14858------------
14859``run_tests()`` now returns the new ``TestRecord`` dataclass which provides
14860more detailed information about the test run. ``SetUpTestSuit()`` and
14861``TearDownTestSuite()`` were added to improve GoogleTest compatibility.
14862
14863* `Add TestRecord of Test Results <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166273>`__
14864* `Reset static value before running tests <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166590>`__
14865  (issue `#296157327 <https://issues.pigweed.dev/issues/296157327>`__)
14866* `Add per-fixture setup/teardown <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165210>`__
14867
14868pw_web
14869------
14870Log viewers are now drawn every 100 milliseconds at most to prevent crashes
14871when many logs arrive simultaneously. The log viewer now has a jump-to-bottom
14872button. Advanced filtering has been added.
14873
14874* `NPM version bump to 0.0.11 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168591>`__
14875* `Add basic bundling tests for log viewer bundle <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168539>`__
14876* `Limit LogViewer redraws to 100ms <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167852>`__
14877* `Add jump to bottom button, fix UI bugs and fix state bugs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164272>`__
14878* `Implement advanced filtering <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162070>`__
14879* `Remove object-path dependency from Device API <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165013>`__
14880* `Log viewer toolbar button toggle style <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165412>`__
14881* `Log-viewer line wrap toggle <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164010>`__
14882
14883Targets
14884=======
14885
14886targets
14887-------
14888A new Ambiq Apollo4 target that uses the Ambiq Suite SDK and FreeRTOS
14889has been added.
14890
14891* `Ambiq Apollo4 support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/129490>`__
14892
14893Language support
14894================
14895
14896Python
14897------
14898* `Upgrade mypy to 1.5.0 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166272>`__
14899* `Upgrade pylint to 2.17.5 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166271>`__
14900
14901Docs
14902====
14903Doxygen-generated function signatures now present each argument on a separate
14904line. Tabbed content looks visually different than before.
14905
14906* `Use code-block:: instead of code:: everywhere <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168617>`__
14907* `Add function signature line breaks <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168554>`__
14908* `Cleanup indentation <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168537>`__
14909* `Remove unused myst-parser <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168392>`__
14910* `Use sphinx-design for tabbed content <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168341>`__
14911* `Update changelog <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164810>`__
14912
14913SEEDs
14914=====
14915:ref:`SEED-0107 (Pigweed Communications) <seed-0107>` was accepted and
14916SEED-0109 (Communication Buffers) was started.
14917
14918* `Update protobuf SEED title in index <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/166470>`__
14919* `Update status to Accepted <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167770>`__
14920* `Pigweed communications <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157090>`__
14921* `Claim SEED number <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/168358>`__
14922
14923Miscellaneous
14924=============
14925
14926Build
14927-----
14928* `Make it possible to run MSAN in GN <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/167112>`__
14929
14930soong
14931-----
14932* `Remove host/vendor properties from defaults <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/165270>`__
14933
14934------------
14935Aug 11, 2023
14936------------
14937Highlights (Jul 27, 2023 to Aug 11, 2023):
14938
14939* We're prototyping a Pigweed extension for VS Code. Learn more at
14940  :ref:`module-pw_ide-guide-vscode`.
14941* We added ``pw_toolchain_bazel``, a new LLVM toolchain for building with
14942  Bazel on macOS.
14943* We are working on many docs improvements in parallel: auto-generating ``rustdocs``
14944  for modules that support Rust
14945  (`example <https://pigweed.dev/rustdoc/pw_varint/>`_), refactoring the
14946  :ref:`module-pw_tokenizer` docs, migrating API references to Doxygen,
14947  fixing `longstanding docs site UI issues <https://issues.pigweed.dev/issues/292273650>`_,
14948  and more.
14949
14950Active SEEDs
14951============
14952Help shape the future of Pigweed! Please leave feedback on the following active RFCs (SEEDs):
14953
14954* `SEED-0103: pw_protobuf Object Model <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/133971>`__
14955* `SEED-0104: display support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/150793>`__
14956* `SEED-0105: Add nested tokens and tokenized args to pw_tokenizer and pw_log <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154190>`__
14957* `SEED-0106: Project Template <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155430>`__
14958* `SEED-0107: Pigweed communications <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157090>`__
14959* `SEED-0108: Emulators Frontend <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158190>`__
14960
14961Modules
14962=======
14963
14964pw_alignment
14965------------
14966* `Fix typos <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163250>`__
14967
14968pw_analog
14969---------
14970Long-term, all of our API references will be generated from header comments via
14971Doxygen. Short-term, we are starting to show header files directly within the
14972docs as a stopgap solution for helping Pigweed users get a sense of each
14973module's API. See :ref:`module-pw_analog` for an example.
14974
14975* `Include header files as stopgap API reference <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/161491>`__
14976  (issue `#293895312 <https://issues.pigweed.dev/issues/293895312>`__)
14977
14978pw_base64
14979---------
14980We finished migrating the ``pw_random`` API reference to Doxygen.
14981
14982* `Finish Doxygenifying the API reference <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162911>`__
14983* `Doxygenify the Encode() functions <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156532>`__
14984
14985pw_boot_cortex_m
14986----------------
14987* `Allow explict target name <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159790>`__
14988
14989pw_build
14990--------
14991We added a ``log_build_steps`` option to ``ProjectBuilder`` that enables you
14992to log all build step lines to your screen and logfiles.
14993
14994* `Handle ProcessLookupError exceptions <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163710>`__
14995* `ProjectBuilder log build steps option <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162931>`__
14996* `Fix progress bar clear <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160791>`__
14997
14998pw_cli
14999------
15000We polished tab completion support.
15001
15002* `Zsh shell completion autoload <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160796>`__
15003* `Make pw_cli tab completion reusable <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160379>`__
15004
15005pw_console
15006----------
15007We made copy-to-clipboard functionality more robust when running ``pw_console``
15008over SSH.
15009
15010* `Set clipboard fallback methods <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/150238>`__
15011
15012pw_containers
15013-------------
15014We updated :cpp:class:`filteredview` constructors and migrated the
15015``FilteredView`` API reference to Doxygen.
15016
15017* `Doxygenify pw::containers::FilteredView <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160373>`__
15018* `Support copying the FilteredView predicate <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160372>`__
15019
15020pw_docgen
15021---------
15022At the top of pages like :ref:`module-pw_tokenizer` there is a UI widget that
15023provides information about the module. Previously, this UI widget had links
15024to all the module's docs. This is no longer needed now that the site nav
15025automatically scrolls to the page you're on, which allows you to see the
15026module's other docs.
15027
15028* `Remove the navbar from the module docs header widget <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162991>`__
15029  (issue `#292273650 <https://issues.pigweed.dev/issues/292273650>`__)
15030
15031pw_env_setup
15032------------
15033We made Python setup more flexible.
15034
15035* `Add clang_next.json <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163810>`__
15036  (issue `#295020927 <https://issues.pigweed.dev/issues/295020927>`__)
15037* `Pip installs from CIPD <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162093>`__
15038* `Include Python packages from CIPD <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162073>`__
15039* `Remove unused pep517 package <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162072>`__
15040* `Use more available Python 3.9 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/161492>`__
15041  (issue `#292278707 <https://issues.pigweed.dev/issues/292278707>`__)
15042* `Update Bazel to 2@6.3.0.6 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/161010>`__
15043
15044pw_ide
15045------
15046We are prototyping a ``pw_ide`` extension for VS Code.
15047
15048* `Restore stable clangd settings link <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164011>`__
15049* `Add command to install prototype extension <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162412>`__
15050* `Prototype VS Code extension <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/151653>`__
15051
15052pw_interrupt
15053------------
15054We added a backend for Xtensa processors.
15055
15056* `Add backend for xtensa processors <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160031>`__
15057* `Tidy up target compatibility <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160650>`__
15058  (issue `#272090220 <https://issues.pigweed.dev/issues/272090220>`__)
15059
15060pw_log_zephyr
15061-------------
15062We encoded tokenized messages to ``pw::InlineString`` so that the output is
15063always null-terminated.
15064
15065* `Fix null termination of Base64 messages <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163650>`__
15066
15067pw_presubmit
15068------------
15069We increased
15070`LUCI <https://chromium.googlesource.com/infra/infra/+/main/doc/users/services/about_luci.md>`_
15071support and updated the ``#pragma once`` check to look for matching ``#ifndef``
15072and ``#define`` lines.
15073
15074* `Fix overeager format_code matches <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162611>`__
15075* `Exclude vsix files from copyright <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163011>`__
15076* `Clarify unicode errors <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162993>`__
15077* `Upload coverage json to zoss <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162090>`__
15078  (issue `#279161371 <https://issues.pigweed.dev/issues/279161371>`__)
15079* `Add to context tests <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162311>`__
15080* `Add patchset to LuciTrigger <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162310>`__
15081* `Add helpers to LuciContext <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162091>`__
15082* `Update Python vendor wheel dir <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/161514>`__
15083* `Add summaries to guard checks <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/161391>`__
15084  (issue `#287529705 <https://issues.pigweed.dev/issues/287529705>`__)
15085* `Copy Python packages <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/161490>`__
15086* `Add ifndef/define check <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/152173>`__
15087  (issue `#287529705 <https://issues.pigweed.dev/issues/287529705>`__)
15088
15089pw_protobuf_compiler
15090--------------------
15091We continued work to ensure that the Python environment in Bazel is hermetic.
15092
15093* `Use hermetic protoc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162913>`__
15094  (issue `#294284927 <https://issues.pigweed.dev/issues/294284927>`__)
15095* `Move reference to python interpreter <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162932>`__
15096  (issue `#294414535 <https://issues.pigweed.dev/issues/294414535>`__)
15097* `Make nanopb hermetic <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162313>`__
15098  (issue `#293792686 <https://issues.pigweed.dev/issues/293792686>`__)
15099
15100pw_python
15101---------
15102We fixed bugs related to ``requirements.txt`` files not getting found.
15103
15104* `setup.sh requirements arg fix path <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164430>`__
15105* `setup.sh arg spaces bug <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163510>`__
15106
15107pw_random
15108---------
15109We continued migrating the ``pw_random`` API reference to Doxygen.
15110
15111* `Doxygenify random.h <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163730>`__
15112
15113pw_rpc
15114------
15115We made the Java client more robust.
15116
15117* `Java client backwards compatibility <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164515>`__
15118* `Avoid reflection in Java client <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162930>`__
15119  (issue `#293361955 <https://issues.pigweed.dev/issues/293361955>`__)
15120* `Use hermetic protoc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162913>`__
15121  (issue `#294284927 <https://issues.pigweed.dev/issues/294284927>`__)
15122* `Improve Java client error message for missing parser() method <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159471>`__
15123
15124pw_spi
15125------
15126We continued work on implementing a SPI responder interface.
15127
15128* `Responder interface definition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159230>`__
15129
15130pw_status
15131---------
15132We fixed the nesting on a documentation section.
15133
15134* `Promote Zephyr heading to h2 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160730>`__
15135
15136pw_stream
15137---------
15138We added ``remaining()``, ``len()``, and ``position()`` methods to the
15139``Cursor`` wrapping in Rust.
15140
15141* `Add infalible methods to Rust Cursor <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164271>`__
15142
15143pw_stream_shmem_mcuxpresso
15144--------------------------
15145We added the :ref:`module-pw_stream_shmem_mcuxpresso` backend for ``pw_stream``.
15146
15147* `Add shared memory stream for NXP MCU cores <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160831>`__
15148  (issue `#294406620 <https://issues.pigweed.dev/issues/294406620>`__)
15149
15150pw_sync_freertos
15151----------------
15152* `Fix ODR violation in tests <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160795>`__
15153
15154pw_thread
15155---------
15156* `Fix test_thread_context typo and presubmit <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162770>`__
15157
15158pw_tokenizer
15159------------
15160We added support for unaligned token databases and continued the
15161:ref:`seed-0102` update of the ``pw_tokenizer`` docs.
15162
15163* `Separate API reference and how-to guide content <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163256>`__
15164* `Polish the sales pitch <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163571>`__
15165* `Support unaligned databases <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163333>`__
15166* `Move the basic overview into getting started <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163253>`__
15167* `Move the case study to guides.rst <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163255>`__
15168* `Restore info that get lost during the SEED-0102 migration <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163330>`__
15169* `Use the same tagline on every doc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163332>`__
15170* `Replace savings table with flowchart <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158893>`__
15171* `Ignore string nonliteral warnings <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162092>`__
15172
15173pw_toolchain
15174------------
15175We fixed a regression that made it harder to use Pigweed in an environment where
15176``pw_env_setup`` has not been run and fixed a bug related to incorrect Clang linking.
15177
15178* `Optionally depend on pw_env_setup_CIPD_PIGWEED <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163790>`__
15179  (issue `#294886611 <https://issues.pigweed.dev/issues/294886611>`__)
15180* `Prefer start-group over whole-archive <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/150610>`__
15181  (issue `#285357895 <https://issues.pigweed.dev/issues/285357895>`__)
15182
15183pw_toolchain_bazel
15184------------------
15185We added a an LLVM toolchain for building with Bazel on macOS.
15186
15187* `LLVM toolchain for macOS Bazel build <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157634>`__
15188  (issue `#291795899 <https://issues.pigweed.dev/issues/291795899>`__)
15189
15190pw_trace_tokenized
15191------------------
15192We made tracing more robust.
15193
15194* `Replace trace callback singletons with dep injection <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156912>`__
15195
15196pw_transfer
15197-----------
15198We made integration tests more robust.
15199
15200* `Fix use-after-destroy in integration test client <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163252>`__
15201  (issue `#294101325 <https://issues.pigweed.dev/issues/294101325>`__)
15202* `Fix legacy binary path <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162914>`__
15203  (issue `#294284927 <https://issues.pigweed.dev/issues/294284927>`__)
15204* `Mark linux-only Bazel tests <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162094>`__
15205  (issue `#294101325 <https://issues.pigweed.dev/issues/294101325>`__)
15206
15207pw_web
15208------
15209We added support for storing user preferences in ``localStorage``.
15210
15211* `Fix TypeScript warnings in web_serial_transport.ts <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/164591>`__
15212* `Add state for view number, search string, and columns visible <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/161390>`__
15213* `Fix TypeScript warnings in transfer.ts <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162411>`__
15214* `Fix TypeScript warnings <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162095>`__
15215* `Remove dependency on 'crc' and 'buffer' NPM packages <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160830>`__
15216
15217Build
15218=====
15219We made the Bazel system more hermetic and fixed an error related to not
15220finding the Java runtime.
15221
15222* `Do not allow PATH leakage into Bazel build <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162610>`__
15223  (issue `#294284927 <https://issues.pigweed.dev/issues/294284927>`__)
15224* `Use remote Java runtime for Bazel build <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160793>`__
15225  (issue `#291791485 <https://issues.pigweed.dev/issues/291791485>`__)
15226
15227Docs
15228====
15229We created a new doc that explains how to improve Pigweed
15230support in various IDEs. We standardized how we present call-to-action buttons
15231on module homepages. See :ref:`module-pw_tokenizer` for an example. We fixed a
15232longstanding UI issue around the site nav not scrolling to the page that you're
15233currently on.
15234
15235* `Add call-to-action buttons <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163331>`__
15236* `Update module items in site nav <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163251>`__
15237* `Add editor support doc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/110261>`__
15238* `Delay nav scrolling to fix main content scrolling <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162990>`__
15239  (issue `#292273650 <https://issues.pigweed.dev/issues/292273650>`__)
15240* `Suggest editor configuration <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162710>`__
15241* `Scroll to the current page in the site nav <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/162410>`__
15242  (issue `#292273650 <https://issues.pigweed.dev/issues/292273650>`__)
15243* `Add changelog <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160170>`__
15244  (issue `#292247409 <https://issues.pigweed.dev/issues/292247409>`__)
15245
15246SEEDs
15247=====
15248We created a UI widget to standardize how we present SEED status information.
15249See the start of :ref:`seed-0102` for an example.
15250
15251* `Create Sphinx directive for metadata <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/161517>`__
15252
15253Third party
15254===========
15255
15256third_party/mbedtls
15257-------------------
15258* `3.3.0 compatibility <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160790>`__
15259  (issue `#293612945 <https://issues.pigweed.dev/issues/293612945>`__)
15260
15261Miscellaneous
15262=============
15263
15264OWNERS
15265------
15266* `Add kayce@ <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/163254>`__
15267
15268------------
15269Jul 28, 2023
15270------------
15271Highlights (Jul 13, 2023 to Jul 28, 2023):
15272
15273* `SEED-0107: Pigweed Communications <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157090>`__,
15274  a proposal for an embedded-focused network protocol stack, is under
15275  discussion. Please review and provide your input!
15276* ``pw_cli`` now supports tab completion!
15277* A new UART Linux backend for ``pw_stream`` was added (``pw_stream_uart_linux``).
15278
15279Active SEEDs
15280============
15281* `SEED-0103: pw_protobuf Object Model <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/133971>`__
15282* `SEED-0104: display support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/150793>`__
15283* `SEED-0105: Add nested tokens and tokenized args to pw_tokenizer and pw_log <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154190>`__
15284* `SEED-0106: Project Template <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155430>`__
15285* `SEED-0107: Pigweed communications <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157090>`__
15286* `SEED-0108: Emulators Frontend <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158190>`__
15287
15288Modules
15289=======
15290
15291pw_allocator
15292------------
15293We started migrating the ``pw_allocator`` API reference to Doxygen.
15294
15295* `Doxygenify the freelist chunk methods <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155395>`__
15296
15297pw_async
15298--------
15299We increased Bazel support.
15300
15301* `Fill in bazel build rules <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156911>`__
15302
15303pw_async_basic
15304--------------
15305We reduced logging noisiness.
15306
15307* `Remove debug logging <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158193>`__
15308
15309pw_base64
15310---------
15311We continued migrating the ``pw_base64`` API reference to Doxygen.
15312
15313* `Doxygenify MaxDecodedSize() <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157091>`__
15314
15315pw_bloat
15316--------
15317We improved the performance of label creation. One benchmark moved from 120
15318seconds to 0.02 seconds!
15319
15320* `Cache and optimize label production <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159474>`__
15321
15322pw_bluetooth
15323------------
15324Support for 3 events was added.
15325
15326* `Add 3 Event packets & format hci.emb <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157663>`__
15327
15328pw_build
15329--------
15330* `Fix progress bar clear <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160791>`__
15331* `Upstream build script fixes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159473>`__
15332* `Add pw_test_info <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154551>`__
15333* `Upstream build script & presubmit runner <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/137130>`__
15334* `pw_watch: Redraw interval and bazel steps <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159490>`__
15335* `Avoid extra newlines for docs in generate_3p_gn <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/150233>`__
15336* `pip install GN args <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155270>`__
15337  (issue `#240701682 <https://issues.pigweed.dev/issues/240701682>`__)
15338* `pw_python_venv generate_hashes option <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157630>`__
15339  (issue `#292098416 <https://issues.pigweed.dev/issues/292098416>`__)
15340
15341pw_build_mcuxpresso
15342-------------------
15343Some H3 elements in the ``pw_build_mcuxpresso`` docs were being incorrectly
15344rendered as H2.
15345
15346* `Fix doc headings <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155570>`__
15347
15348pw_chrono_freertos
15349------------------
15350We investigated what appeared to be a race condition but turned out to be an
15351unreliable FreeRTOS variable.
15352
15353* `Update SystemTimer comments <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159231>`__
15354  (issue `#291346908 <https://issues.pigweed.dev/issues/291346908>`__)
15355* `Remove false callback precondition <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156091>`__
15356  (issue `#291346908 <https://issues.pigweed.dev/issues/291346908>`__)
15357
15358pw_cli
15359------
15360``pw_cli`` now supports tab completion!
15361
15362* `Zsh shell completion autoload <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160796>`__
15363* `Make pw_cli tab completion reusable <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160379>`__
15364* `Print tab completions for pw commands <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160032>`__
15365* `Fix logging msec timestamp format <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159930>`__
15366
15367pw_console
15368----------
15369Communication errors are now handled more gracefully.
15370
15371* `Detect comms errors in Python <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155814>`__
15372
15373pw_containers
15374-------------
15375The flat map implementation and docs have been improved.
15376
15377* `Doxygenify pw::containers::FilteredView <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160373>`__
15378* `Support copying the FilteredView predicate <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160372>`__
15379* `Improve FlatMap algorithm and filtered_view support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156652>`__
15380* `Improve FlatMap doc example <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156651>`__
15381* `Update FlatMap doc example so it compiles <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156650>`__
15382
15383pw_digital_io
15384-------------
15385We continued migrating the API reference to Doxygen. An RPC service was added.
15386
15387* `Doxygenify the interrupt handler methods <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154193>`__
15388* `Doxygenify Enable() and Disable() <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155817>`__
15389* `Add digital_io rpc service <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154974>`__
15390
15391pw_digital_io_mcuxpresso
15392------------------------
15393We continued migrating the API reference to Doxygen. Support for a new RPC
15394service was added.
15395
15396* `Remove unneeded constraints <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155394>`__
15397
15398pw_docgen
15399---------
15400Support for auto-linking to Rust docs (when available) was added. We also
15401explained how to debug Pigweed's Sphinx extensions.
15402
15403* `Add rustdoc linking support to pigweed-module tag <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159292>`__
15404* `Add extension debugging instructions <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156090>`__
15405
15406pw_env_setup
15407------------
15408There were lots of updates around how the Pigweed environment uses Python.
15409
15410* `pw_build: Disable pip version check <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160551>`__
15411* `Add docstrings to visitors <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159131>`__
15412* `Sort pigweed_environment.gni lines <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158892>`__
15413* `Mac and Windows Python requirements <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158912>`__
15414  (issue `#292098416 <https://issues.pigweed.dev/issues/292098416>`__)
15415* `Add more Python versions <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158891>`__
15416  (issue `#292278707 <https://issues.pigweed.dev/issues/292278707>`__)
15417* `Remove python.json from Bazel CIPD <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158911>`__
15418  (issue `#292585791 <https://issues.pigweed.dev/issues/292585791>`__)
15419* `Redirect variables from empty dirs <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158890>`__
15420  (issue `#292278707 <https://issues.pigweed.dev/issues/292278707>`__)
15421* `Split Python constraints per OS <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157657>`__
15422  (issue `#292278707 <https://issues.pigweed.dev/issues/292278707>`__)
15423* `Add --additional-cipd-file argument <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158170>`__
15424  (issue `#292280529 <https://issues.pigweed.dev/issues/292280529>`__)
15425* `Upgrade Python cryptography to 41.0.2 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157654>`__
15426* `Upgrade ipython to 8.12.2 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157653>`__
15427* `Upgrade PyYAML to 6.0.1 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157652>`__
15428* `Add Python constraints with hashes <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/153470>`__
15429  (issue `#287302102 <https://issues.pigweed.dev/issues/287302102>`__)
15430* `Bump pip and pip-tools <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156470>`__
15431* `Add coverage utilities <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155810>`__
15432  (issue `#279161371 <https://issues.pigweed.dev/issues/279161371>`__)
15433
15434pw_fuzzer
15435---------
15436A fuzzer example was updated to more closely follow Pigweed code conventions.
15437
15438* `Update fuzzers to use Pigweed domains <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/148337>`__
15439
15440pw_hdlc
15441-------
15442Communication errors are now handled more gracefully.
15443
15444* `Detect comms errors in Python <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155814>`__
15445* `Add target to Bazel build <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157651>`__
15446
15447pw_i2c
15448------
15449An RPC service was added. Docs and code comments were updated to use ``responder``
15450and ``initiator`` terminology consistently.
15451
15452* `Standardize naming on initiator/responder <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159132>`__
15453* `Add i2c rpc service <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155250>`__
15454
15455pw_i2c_mcuxpresso
15456-----------------
15457* `Allow for static initialization of initiator <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155790>`__
15458* `Add test to ensure compilation of module <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155390>`__
15459
15460pw_ide
15461------
15462* `Support multiple comp DB search paths <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/144210>`__
15463  (issue `#280363633 <https://issues.pigweed.dev/issues/280363633>`__)
15464
15465pw_interrupt
15466------------
15467Work continued on how facade backend selection works in Bazel.
15468
15469* `Add backend for xtensa processors <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160031>`__
15470* `Tidy up target compatibility <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160650>`__
15471  (issue `#272090220 <https://issues.pigweed.dev/issues/272090220>`__)
15472* `Remove cpu-based backend selection <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160380>`__
15473  (issue `#272090220 <https://issues.pigweed.dev/issues/272090220>`__)
15474* `Add backend constraint setting <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160371>`__
15475  (issue `#272090220 <https://issues.pigweed.dev/issues/272090220>`__)
15476* `Remove redundant Bazel targets <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154500>`__
15477  (issue `#290359233 <https://issues.pigweed.dev/issues/290359233>`__)
15478
15479pw_log_rpc
15480----------
15481A docs section was added that explains how ``pw_log``, ``pw_log_tokenized``,
15482and ``pw_log_rpc`` interact with each other.
15483
15484* `Explain relation to pw_log and pw_log_tokenized <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157231>`__
15485
15486pw_package
15487----------
15488Raspberry Pi Pico and Zephyr support improved.
15489
15490* `Add picotool package installer <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155791>`__
15491* `Handle windows Zephyr SDK setup <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157030>`__
15492* `Run Zephyr SDK setup.sh after syncing from CIPD <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156530>`__
15493
15494pw_perf_test
15495------------
15496* `Remove redundant Bazel targets <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154498>`__
15497  (issue `#290359233 <https://issues.pigweed.dev/issues/290359233>`__)
15498
15499pw_presubmit
15500------------
15501* `Add ifndef/define check <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/152173>`__
15502  (issue `#287529705 <https://issues.pigweed.dev/issues/287529705>`__)
15503* `Remove deprecated gn_docs_build step <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159291>`__
15504* `Fix issues with running docs_build twice <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159290>`__
15505* `Add Rust docs to docs site <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157656>`__
15506
15507pw_protobuf_compiler
15508--------------------
15509* `Disable legacy namespace <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157232>`__
15510* `Transition to our own proto compiler rules <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157033>`__
15511  (issue `#234874064 <https://issues.pigweed.dev/issues/234874064>`__)
15512* `Allow external usage of macros <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155432>`__
15513
15514pw_ring_buffer
15515--------------
15516``pw_ring_buffer`` now builds with ``-Wconversion`` enabled.
15517
15518* `Conversion warning cleanups <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157430>`__
15519  (issue `#259746255 <https://issues.pigweed.dev/issues/259746255>`__)
15520
15521pw_rpc
15522------
15523* `Create client call hook in Python client <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157870>`__
15524* `Provide way to populate response callbacks during tests <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156670>`__
15525* `Add Soong rule for pwpb echo service <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156270>`__
15526
15527pw_rpc_transport
15528----------------
15529* `Add more Soong rules <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155035>`__
15530
15531pw_rust
15532-------
15533We are preparing pigweed.dev to automatically link to auto-generated
15534Rust module documentation when available.
15535
15536* `Add combined Rust doc support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157632>`__
15537* `Update @rust_crates sha <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155051>`__
15538
15539pw_spi
15540------
15541We updated docs and code comments to use ``initiator`` and ``responder``
15542terminology consistently.
15543
15544* `Standardize naming on initiator/responder <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159132>`__
15545
15546pw_status
15547---------
15548* `Add Clone and Copy to Rust Error enum <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157093>`__
15549
15550pw_stream
15551---------
15552We continued work on Rust support.
15553
15554* `Fix Doxygen typo <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154732>`__
15555* `Add read_exact() an write_all() to Rust Read and Write traits <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157094>`__
15556* `Clean up rustdoc warnings <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157092>`__
15557* `Add Rust varint reading and writing support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156451>`__
15558* `Refactor Rust cursor to reduce monomorphization <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155391>`__
15559* `Add Rust integer reading support <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155053>`__
15560* `Move Rust Cursor to it's own sub-module <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155052>`__
15561
15562pw_stream_uart_linux
15563--------------------
15564A new UART Linux backend for ``pw_stream`` was added.
15565
15566* `Add stream for UART on Linux <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156910>`__
15567
15568pw_sync
15569-------
15570C++ lock traits were added and used.
15571
15572* `Improve Borrowable lock traits and annotations <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/153573>`__
15573  (issue `#261078330 <https://issues.pigweed.dev/issues/261078330>`__)
15574* `Add lock traits <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/153572>`__
15575
15576pw_sync_freertos
15577----------------
15578* `Fix ODR violation in tests <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160795>`__
15579
15580pw_sys_io
15581---------
15582* `Add android to alias as host system <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157871>`__
15583  (issue `#272090220 <https://issues.pigweed.dev/issues/272090220>`__)
15584* `Add chromiumos to alias as host system <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155811>`__
15585  (issue `#272090220 <https://issues.pigweed.dev/issues/272090220>`__)
15586
15587pw_system
15588---------
15589* `Update IPython init API <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157872>`__
15590* `Remove redundant Bazel targets <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154497>`__
15591  (issue `#290359233 <https://issues.pigweed.dev/issues/290359233>`__)
15592
15593pw_tokenizer
15594------------
15595We refactored the ``pw_tokenizer`` docs to adhere to :ref:`seed-0102`.
15596
15597* `Update tagline, restore missing info, move sections <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158192>`__
15598* `Migrate the proto docs (SEED-0102) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157655>`__
15599* `Remove stub sections and add guides link (SEED-0102) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157631>`__
15600* `Migrate the custom macro example (SEED-0102) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157032>`__
15601* `Migrate the Base64 docs (SEED-0102) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156531>`__
15602* `Migrate token collision docs (SEED-0102) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155818>`__
15603* `Migrate detokenization docs (SEED-0102) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155815>`__
15604* `Migrate masking docs (SEED-0102) <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155812>`__
15605
15606pw_toolchain
15607------------
15608The build system was modified to use relative paths to avoid unintentionally
15609relying on the path environment variable. Map file generation is now optional
15610to avoid generating potentially large map files when they're not needed.
15611
15612* `Test trivially destructible class <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159232>`__
15613* `Make tools use relative paths <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159130>`__
15614  (issue `#290848929 <https://issues.pigweed.dev/issues/290848929>`__)
15615* `Support conditionally creating mapfiles <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157431>`__
15616
15617pw_trace_tokenized
15618------------------
15619* `Replace singletons with dependency injection <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155813>`__
15620* `Remove redundant Bazel targets <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154499>`__
15621  (issue `#290359233 <https://issues.pigweed.dev/issues/290359233>`__)
15622
15623pw_unit_test
15624------------
15625* `Update metadata test type for unit tests <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/154550>`__
15626
15627pw_varint
15628---------
15629* `Update Rust API to return number of bytes written <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156450>`__
15630
15631pw_watch
15632--------
15633We fixed an issue where builds were getting triggered when files were opened
15634or closed without modication.
15635
15636* `Trigger build only on file modifications <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157633>`__
15637
15638pw_web
15639------
15640* `Remove dependency on 'crc' and 'buffer' NPM packages <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160830>`__
15641* `Update theme token values and usage <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155970>`__
15642* `Add disconnect() method to WebSerialTransport <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156471>`__
15643* `Add docs section for log viewer component <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155050>`__
15644
15645Build
15646=====
15647
15648bazel
15649-----
15650* `Add host_backend_alias macro <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160550>`__
15651  (issue `#272090220 <https://issues.pigweed.dev/issues/272090220>`__)
15652* `Fix missing deps in some modules <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160376>`__
15653* `Support user bazelrc files <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160030>`__
15654* `Update rules_python to 0.24.0 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158913>`__
15655  (issue `#266950138 <https://issues.pigweed.dev/issues/266950138>`__)
15656
15657build
15658-----
15659* `Use remote Java runtime for Bazel build <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160793>`__
15660  (issue `#291791485 <https://issues.pigweed.dev/issues/291791485>`__)
15661* `Add Rust toolchain to Bazel macOS build <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159491>`__
15662  (issue `#291749888 <https://issues.pigweed.dev/issues/291749888>`__)
15663* `Mark linux-only Bazel build targets <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158191>`__
15664
15665Targets
15666=======
15667
15668targets/rp2040_pw_system
15669------------------------
15670Some of the Pico docs incorrectly referred to another hardware platform.
15671
15672* `Fix references to STM32 <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157233>`__
15673  (issue `#286652309 <https://issues.pigweed.dev/issues/286652309>`__)
15674
15675Language support
15676================
15677
15678python
15679------
15680* `Remove setup.py files <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159472>`__
15681
15682rust
15683----
15684* `Add rustdoc links for existing crates <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/159470>`__
15685
15686OS support
15687==========
15688
15689zephyr
15690------
15691* `Add project name to unit test root <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156850>`__
15692* `Add pigweed root as module <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156596>`__
15693* `Fix setup.sh call <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156591>`__
15694
15695Docs
15696====
15697We added a feature grid to the homepage and fixed outdated info in various
15698docs.
15699
15700* `pigweed.dev feature grid <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157658>`__
15701* `Mention SEED-0102 in module_structure.rst <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157234>`__
15702  (issue `#286477675 <https://issues.pigweed.dev/issues/286477675>`__)
15703* `Remove outdated Homebrew info in getting_started.rst <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157291>`__
15704  (issue `#287528787 <https://issues.pigweed.dev/issues/287528787>`__)
15705* `Fix "gn args" examples which reference pw_env_setup_PACKAGE_ROOT <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/156452>`__
15706* `Consolidate contributing docs in site nav <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/155816>`__
15707
15708SEEDs
15709=====
15710
15711SEED-0107
15712---------
15713* `Claim SEED number <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157031>`__
15714
15715SEED-0108
15716---------
15717* `Claim SEED number <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/158171>`__
15718
15719Third party
15720===========
15721
15722third_party
15723-----------
15724* `Remove now unused rules_proto_grpc <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/157290>`__
15725
15726third_party/mbedtls
15727-------------------
15728* `3.3.0 compatibility <https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/160790>`__
15729  (issue `#293612945 <https://issues.pigweed.dev/issues/293612945>`__)
15730