Fuchsia F23 release notes

Version: F23

The following changes have been implemented:

A11y

The following updates have been made for A11y:

  • Improved screen reader behavior by fixing bugs related to behavior with disabled nodes.

Audio

The following updates have been made for Audio.

  • Audio drivers and driver API:

    • Opened key FIDL protocols related to audio signal processing and ring buffers for improved ABI compatibility.
    • Changed devfs alias names for composite audio to align with standard naming.
    • Added inspect for power transitions (aml-g12-tdm audio driver).
    • Added tracing for power transitions for the aml-g12-tdm driver.
    • Improved logging for the aml-g12-audio-composite driver.
  • AudioCore and smart display support:

    • Disabled some audio tests that were causing SSH connection errors.
  • AudioDeviceRegistry service:

    • Added tracing to audio_device_registry to track power transitions.
    • Clarified logging.
    • Modified the WatchDevicesAdded method to respond immediately to the first call, even with an empty vector.
  • Audio developer tools:

    • Added a --channels flag to the ffx audio device play command to control active channels and the audio device's power state.
    • Fixed glitches and ring buffer handling in ffx audio record and ffx audio device record to correctly capture audio.

Bluetooth

The following updates have been made for Bluetooth:

  • The Message Access Service (MAS) client has been implemented, enabling connection to multiple MAS instances.
  • Hands-Free Profile (HFP) now supports AudioDeviceRegistry products and is more compatible: HFP now uses the first supported DAI frame format for improved hardware compatibility. On products using the AudioDeviceRegistry, peers are added to the registry on connect, and Media can start/stop audio without an active call.
  • BR/EDR Legacy Pairing now supports PIN code requests and integrates with the PairingStateManager to manage pairing method selection (SSP or legacy). Configuration for enabling/disabling legacy pairing based on product assembly has also been added. Inspect properties for pairing have been updated to reflect these changes.
  • L2CAP connection-oriented channels have been added.
  • LE remote feature interrogation can now fail gracefully, improving connection compatibility.
  • Bluetooth FIDL modernization: Several enums updated to be flexible. Vendor protocol has updated terminology and documentation. Flow control has been reworked for fuchsia.bluetooth.Channel and related protocols, using FIDL flow control over zircon sockets. Support for L2CAP connection-oriented channels. With these changes, many Bluetooth protocols are also staged to be added to the SDK.
  • Embossified various Bluetooth test functions to use emboss definitions: This is a change from using packed structs.

Build

The following updates have been made for Build:

  • Added a new environment variable, TEST_UNDECLARED_OUTPUTS_DIR_OVERRIDE, to control the location where undeclared outputs are written: This is useful for testing purposes.
  • Added a bazel build target for scoped_global_logger: This target is for in-tree Bazel targets.

Cobalt

The following updates have been made for Cobalt:

  • Migrated the Cobalt component to use the FUCHSIA_LOG macro instead of the deprecated fuchsia_logging:: severity levels.

Component Framework

The following updates have been made for Component Framework:

  • Added support for Component Manager to rout runner capabilities from the environment and config values from dictionaries.
  • Added support for weak service offers in fuchsia.component.decl.
  • Removed dynamic config capabilities and replaced with bedrock dictionaries.
  • Component exit code and termination status are now reported in the OnStop event, and StopConclusion and ComponentStopOutcome have been merged for simplified component stopping.

Connectivity Drivers

The following updates have been made for Connectivity Drivers:

  • The dwmac driver now directly implements the NetworkDevice protocol, improving performance in most benchmarks.
  • The brcmfmac driver now correctly sets the wnm iovar, resolving a BCME_BUSY error on VIM3.
  • Removed the fuchsia.hardware.network/DeviceClass the latest NEXT API version, affecting fuchsia.net.interfaces/Properties.
  • Fixed filter-fidl tests by retaining sockets for each test case: The filter-fidl tests are flaking due to subsequent test cases binding sockets that happen to pick the same ports as preceding ones. This change keeps the previous cases' sockets open so that the netstack will pick fresh ports for each case.
  • Updated the weave/tests to use the modern route FIDL APIs: This is a change from using the deprecated fuchsia.net.stack AddForwardingEntry for adding routes, use fuchsia.net.routes.admin.
  • Avoided the unused_tuple_struct Lint by making the members of KeepResource named.

Diagnostics

The following updates have been made for Diagnostics:

  • Archivist:
  • Sampler:
  • Syslog:
    • Improved the relevant C++ libraries.
    • Bugs: b/299996898
  • Ensured inspect-runner based tests are treated as system tests.

Display

The following updates have been made for Display:

  • Migrated the display driver stack to modern Fuchsia Platform infrastructure, such as DFv2 and FIDL. No user-visible changes are expected.
  • Renamed display drivers for consistency:
    • simple-display to framebuffer-display.
    • intel-i915 to intel-display.
    • virtio-guest to virtio-gpu-display.

Driver Framework

The following updates have been made for Driver Framework:

  • Improved the platform bus library's interrupt mode by switching to an enum representation, increasing type safety and code clarity.
  • Renamed driver collections based on their resolver.
  • ** Simplified ScopedGlobalLogger for improved test logging, and a previously disabled test has been re-enabled and updated. An unused API associated with a removed test has also been deleted.**
  • Updated GPIO FIDL: Added an empty bits type for future interrupt options, and renamed SetPolarity to ConfigureInterrupt. GPIO init metadata was also switched to use pinimpl types.
  • Improved the ScopedGlobalLogger implementation by simplifying it:As it never actually makes any async calls, there is no need to create a thread for the logger.
  • Simplified the forwarding mechanism in driver_test_realm by using realm_builder_exposed_dir to forward connections: This fixes an issue with exposing the fuchsia.hardware.ramdisk service which wasn't using the forwarding mechanism, and also allows us to use dtr_exposes rather than the deprecated exposes Start argument.
  • Migrated deprecated driver test library pieces into the internal namespace: Added a warning to tests that are using the namespace to prevent new tests from copying those tests.
  • Improved the driver transport and simple driver with additional unit tests and code refinements: The driver transport example now showcases FIDL client interaction, optimize d transfer size queries, and improved bitrate setting, while the simple driver example demonstrates the difference between Foreground and Background driver tests.**

FIDL

The following updates have been made for FIDL:

  • Updated Several FIDL protocols related to audio and component management for ABI compatibility: fuchsia.hardware.audio.signalprocessing/Reader and fuchsia.hardware.audio/RingBuffer now have flexible methods and open protocols (along with their composing protocols). fuchsia.component/ComponentController is now open with flexible OnEscrow and OnStopInfo events.
  • Improved the FIDL build system: "Unversioned" FIDL libraries no longer undergo compatibility tests, and "versioned" logic is consolidated in the build template. Also, regenerated Go bindings for fuchsia.io.

GPU

The following updates have been made for GPU:

  • Merged upstream changes for arm-mali GPU driver.

Kernel

The following updates have been made for Kernel:

  • Virtual memory:
    • Disallowed stream creation for physical or contiguous VMOs.
    • Began to eliminate the pmm_ wrapper functions around the goal PmmNode.
    • Added an option for supplying zeros to VMOs beyond their content size.
    • Disallowed cache ops on physical VMOs.
    • Added new PMM arena selection algorithm.
  • Power:
    • Added support for pausing monotonic timer behind feature flag.
  • Other:

Matter

The following updates have been made for Matter:

  • Improved Matter/GHP: Fixed bugs and improved stability.

Platform Drivers

The following updates have been made for Platform Drivers:

  • Added a FIDL API in SPMI that represents target/secondary SPMI devices on a bus, enabling support for multiple devices.
  • Enhanced GPIO with a new FIDL bits type for future interrupt options and migrated toward the pinimpl protocol. The core driver now selects between gpioimpl and pinimpl.
  • Enhanced I2C to include devicetree visitor support for multiple peripheral addresses in the reg field, and added the I2C address to generated node properties. This simplifies handling of complex I2C configurations.
  • Added a devicetree visitor for SPI, attaching fuchsia.hardware.spi.businfo metadata to spiimpl nodes.
  • Added resource properties to platform devices, allowing driver validation of correct resource allocation.
  • Added device tree source for Banana Pi F3.

Rust

The following updates have been made for Rust:

  • Enabled rustdoc subtargets for first and third-party crates, providing an fx rustdoc-link script to merge generated documentation.
  • Improved detection of unreachable patterns, especially with never or Infallible.
  • Updated several dependencies, including a fix for the nom minimal-lexical dependency, and enabled new features in the hex and log crates.
  • Temporarily disabled Rust LTO due to incompatibility with LLD.

Software Delivery

The following updates have been made for Software Delivery:

Starnix

The following updates have been made for Starnix:

Testing

The following updates have been made for Testing:

  • Improved iperf benchmarks by storing artifacts in a per benchmark case directory: This fixes a problem where the server JSON output file and the trace.fxt file were clobbering each other.
  • Updated the iperf benchmarks that run over loopback run against a hermetic netstack: Existing tests were repurposed to run iperf using netemul sandbox and modified into benchmarks. The existing python script for running the iperf benchmarks was kept to reuse the logic for turning iperf JSON output to fuchsiaperf output.

Thread

The following updates have been made for Thread:

  • Enabled full-duplex transaction for the ot-radio module: This change improves the performance of the ot-radio driver and resolved an issue of starving TX transactions when throughput is high in both TX and RX direction.

Timekeeping

The following updates have been made for Timekeeping:

Toolchain

The following updates have been made for Toolchain:

Tools

The following updates have been made for Tools:

  • Improved the debugger, including support for collecting minidumps from attached processes (useful for debugging test timeouts), a fix for a crash caused by unverified line table entries, consistent inclusion of the SSH port in end-to-end tests, an update to the CURRENT_SUPPORTED_API_LEVEL to 22 (removing older IPC version compatibility), and removal of the legacy DebugAgent launcher.
  • Updated DevShell to use jiri's updated argument ordering.
  • Disabled VSCode's Source Control graph visualization to improve performance with Fuchsia repositories.

ffx

The following updates have been made for ffx:

  • Improved the stability of the emulator stability. Several changes were made to improve emulator stability and address common issues.
  • Added support for bootloader Fat partitions and EFI product bundles. This allows the emulator to launch from product bundles that only include bootloader partitions or contain EFI based kernels.
  • Added FfxCoreSubCommand and check_core_constraints. This function makes checks before command execution to ensure the command is invoked with the machine interface, has only one config flag passed, and the config flag passed is a path to a file. The target is also specified from the CLI. libfho will invoke this function on the subtool before execution.
  • Added active_channels to play command. This adds a --channels flag to the ffx audio device play command. This flag manipulates which channels are activated and configures the audio device's power state from the CLI.
  • Improved error handling. Several improvements were made to the error handling and reporting of ffx. This includes reporting SSH errors properly, improving the error message for port in use, and adding an error for incorrect build directories.
  • Updated ffx to support direct connections with the --core flag. This updates the ffx behavior for handling connections and providing FIDL protocols for developers. When passing the --core flag to a command, non-daemon behavior will be put to use where possible.
  • Cleaned up old configuration generation code and added a new --assembly-override option to fx set. This option sets the new developer assembly overrides mapping up correctly in args.gn.
  • Updated OvernetConnector to exit early and removes unnecessary ASCII art.

fx

The following updates have been made for fx:

  • Updated fx serve to exclusively use the foreground repository server, simplifying its operation. ffx is now the default repository server, and related configurations have been updated. This also prepares for the removal of pm.
  • Updated scripts to ensure they are on the path regardless of environment. This change ensures that the scripts directory can be found on the PATH, even if the user has not used fx-env.sh.
  • Exposed fx set --rbe-mode=MODE. This simplifies RBE configuration.
  • Re-implemented fx status in python.

ffxutil

The following updates have been made for ffxutil:

  • Added SDK tool overrides in ffx config.

UI

The following updates have been made for UI:

Video

The following updates have been made for Video:

  • Deprecated SetTags has it is being removed. This change has been made multiple times to address the deprecation of SetTags.
  • Deprecated BuildAndInitializeWithTags and replacing it with WithTags.
  • Upstream libcxx changes the way how cmath header is implicitly included, causing build breakages on Fuchsia. This patch adds the missing 'cmath' include to multiple Fuchsia components.
  • Routing LogSink manually is not needed, as this is done implicitly through the client shard. Future CLs will update the routing used in the shard, so it's necessary to cleanup these duplicate routes in order to update the shards.

WLAN

The following updates have been made for WLAN:

  • Added roaming functionality. This feature allows WLAN to initiate roaming through the fullmac device firmware. Upon roam, the Policy roam monitor is now reinitialized to improve reliability.
  • Changed FullmacDevice to use FIDL channel instead of Banjo. Improves performance by using FIDL channels for communication between the FullmacDevice struct and the vendor driver.
  • Improved WLAN logging. wlancfg now captures a snapshot of the system state when it successfully recovers from WLAN issues. The client-connections-toggle-events node has been renamed, the log line now correctly states that the country code was received. The interface manager will log the state of all client and AP state machines before taking action during recovery. The wlan_connectivity_states, connected_networks, disconnected_networks, and disconnect_sources time series are now logged.
  • Cleaned up tech-debt. The log_cobalt_1dot1 macro has been made hygienic, AP state machines now expose their current state information, and two clippy lints have been addressed. Metric expiration has been updated.
  • Fixed WLAN issues. An issue has been fixed where a phy removal during iface removal could result in wlandevicemonitor keeping a stale iface. The send_assoc_req_frame function no longer has arguments. The WlanFullmacImplIfc FFI is no longer accessed after stop_fullmac_mlme() has been called.