[third_party/pigweed] Roll 24 commits

d595cc8bc24ce2e pw_hdlc: Add async router
9bbfe80a2ffff7c pw_{log_basic,sys_io}: Fix Soong definitions
9c33f41cda92196 pw_trace_tokenized: Fix static initialization
3473c9118a43845 pw_log_tokenized: Define as cc_static_library
e0888f672378e3e pw_router: Define as cc_static_library
68e898711ea85b8 pw_toolchain: Define as cc_static_library
df4efa0243b5dba pw_result: Define as cc_static_library
595fd9562a8d905 pw_build_info: Add log function of GNU build ID
6ebdfaf68c2e080 pw_span: Define as cc_static_library
d99ef2cf38ae998 pw_preprocessor: Define as cc_static_library
04fbfa382513335 pw_bluetooth_sapphire: Add emulator start workflow
e9441715b774fc7 pw_polyfill: Define as cc_static_library
5c53b840a4ecd3f pw_rpc_transport: Define as cc_static_library
d6d27ec27a71859 pw_function: Define as cc_static_library
e0abef00c07545a pw_multibuf: Define as cc_static_library
cb32298c56d1b71 pw_log_null: Define as cc_static_library
7cffdd83bfd413c pw_thread: Follow Soong guidance
7682e4abe456481 pw_allocator: Add allocation detail storage to Tra
ebcc8c717f3980d pw_channel: Add loopback channel
72a1d6f484ecbd1 pw_toolchain: Remove unusued source set
16d3c47ab5a6d45 pw_status: Add StatusWithSize::size_or
55b88ef80fc2403 pw_channel: Split open bits for read and write
be2ee681c2c0176 pw_async2: Add PendFuncTask
a9d379800be4ccd pw_allocator: Distinguish between requested, usabl

https://pigweed.googlesource.com/pigweed/pigweed
third_party/pigweed Rolled-Commits: c59bb69e5e17000..d595cc8bc24ce2e
Roller-URL: https://ci.chromium.org/b/8752324174510496177
GitWatcher: ignore
CQ-Do-Not-Cancel-Tryjobs: true
Change-Id: Id0b3d45d1c2240f3501cc4317e5ee9f4e339ca61
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/kudzu/+/200610
Bot-Commit: Pigweed Roller <pigweed-roller@pigweed-service-accounts.iam.gserviceaccount.com>
Commit-Queue: Pigweed Roller <pigweed-roller@pigweed-service-accounts.iam.gserviceaccount.com>
1 file changed
tree: 6b175509a425d89be15a74df94ce0b10f681f9d2
  1. applications/
  2. build_overrides/
  3. lib/
  4. pcb/
  5. targets/
  6. third_party/
  7. tools/
  8. .gitignore
  9. .gitmodules
  10. .gn
  11. activate.bat
  12. banner.txt
  13. bootstrap.bat
  14. bootstrap.sh
  15. BUILD.gn
  16. BUILDCONFIG.gn
  17. OWNERS
  18. pigweed.json
  19. README.md
README.md

Kudzu

Getting Started

Make sure you've set up Pigweed's prerequisites.

If you're on Windows, you can automate the initial setup by downloading the first-time setup script from cmd.exe:

curl https://pigweed.googlesource.com/pigweed/sample_project/+/main/tools/setup_windows_prerequisites.bat?format=TEXT > setup_pigweed_prerequisites.b64 && certutil -decode -f setup_pigweed_prerequisites.b64 setup_pigweed_prerequisites.bat && del setup_pigweed_prerequisites.b64

Then you can run the script with the following command in cmd.exe:

setup_pigweed_prerequisites.bat

Note: You may see a few UAC prompts as the script installs Git, Python, and enables developer mode.

Once that is done, you can clone this project with the following command:

git clone https://pigweed.googlesource.com/pigweed/kudzu

Environment setup

Pigweed uses a local development environment for most of its tools. This means tools are not installed to your machine, and are instead stored in a directory inside your project (Note: git ignores this directory). The tools are temporarily added to the PATH of the current shell session.

To make sure the latest tooling has been fetched and set up, run the bootstrap command for your operating system:

Windows

bootstrap.bat

Linux & Mac

source ./bootstrap.sh

After tooling updates, you might need to run bootstrap again to ensure the latest tools.

After the initial bootstrap, you can use use the activate scripts to configure the current shell for development without doing a full update.

Windows

activate.bat

Linux & Mac

source ./activate.sh

Device tools setup

Install the pico SDK and tool to flash the device.

pw package install pico_sdk
pw package install picotool

These packages will be built and added to the path automatically. There is no need to add these to the gn arguments.

Linux Setup

GLFW Dependency:

Install the GLFW OpenGL library

sudo apt install libglfw3-dev libglfw3

Udev Rules:

Put the following into /usr/lib/udev/rules.d/49-picoprobe.rules

# Pico app mode
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="000a", MODE:="0666"
KERNEL=="ttyACM*", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="000a", MODE:="0666", SYMLINK+="rp2040"

# RP2 Boot
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0003", MODE:="0666"
KERNEL=="ttyACM*", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0003", MODE:="0666", SYMLINK+="rp2040"

# Picoprobe
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0004", MODE:="0666"
KERNEL=="ttyACM*", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0004", MODE:="0666", SYMLINK+="picoprobe"

This will also symlink /dev/picoprobe and /dev/rp2040 to the respective vendor and product ids.

Apply the above rules with:

sudo udevadm control --reload-rules
sudo udevadm trigger

Compile:

pw build

Run:

Host

Run the host app and connect to it via pw console:

./out/gn/host_device_simulator.speed_optimized/obj/applications/badge/bin/badge & \
  pw console --socket-addr default ; \
  killall badge

Kudzu

export ELF=./out/gn/rp2040.size_optimized/obj/applications/badge/bin/badge.elf

picotool reboot -f -u && \
  sleep 3 && \
  picotool load -x $ELF

Connect with pw console:

pw console --verbose \
  --baudrate 115200 \
  --token-databases ./out/gn/rp2040.size_optimized/obj/applications/badge/bin/badge.elf \
  --device /dev/rp2040

From Python Repl window you can issue RPCs interactively:

>>> device.rpcs.kudzu.rpc.Kudzu.PackageTemp()
(Status.OK, kudzu.rpc.PackageTempResponse(temp=27.60657501220703))