roll: third_party/pigweed 76 commits

d7f4cfe88a34541 pw_ide: VSC extension 1.0.0 release
37bbd5f8e53c1cf pw_bluetooth_sapphire: Remove unused method
f683c3b7e34055e pw_bluetooth_sapphire: Remove variant from LE Send
da931640a3ceaa3 pw_bluetooth_sapphire: Remove CommandPacketVariant
2cb52a5c040a068 pw_bluetooth_sapphire: Remove variant from QueueCo
cd2cdd36b55215d pw_bluetooth_sapphire: Remove variant from QueueLe
b9ee46f19af8b95 pw_bluetooth_sapphire: Create IsoDataChannel
b88802f6fb17d16 pw_bluetooth_sapphire: Check legacy adv for rand a
b2210dea6ecba21 pw_bluetooth_sapphire: Use platform-independent fo
11b6d22c96ffa25 pw_bluetooth_sapphire: Processing of CIS Establish
4e49c9a4d73cd65 roll: rules_python
e4e974a53ee236d pw_bluetooth_sapphire: Use pw_bytes for endianness
cbdf4ece80b860e pw_bluetooth_sapphire: Cleanup WritePageScanActivi
31314575c7d54b5 pw_bluetooth_sapphire: Cleanup into shared test fi
f5bb47bd0316e6a pw_bluetooth_sapphire: Cleanup WriteLocalNameRespo
5592c7588a11a66 pw_bluetooth_sapphire: Fix camel case for CIS acro
6f990918d3f2ee6 pw_bluetooth_sapphire: Cleanup Inquiry command pac
003bbe28674612a pw_bluetooth_sapphire: Implement AcceptCis()
d01cc5df086d910 pw_chrono_freertos: Work around no std::unique_loc
7bd3905ad725850 roll: Fuchsia SDK
29eecebfec5d803 pw_bluetooth_proxy: Remove debugging log
64fab36c47fbac1 pw_console: Default WebHandler.kernel_params to an
ee443d56579423e pw_stream_uart_mcuxpresso: Check init state in Dei
95951f4f88891c1 bazel: Modernize pip deps style
9c64c8d1cd1cec4 pw_cpu_exception_cortex_m: Make PC LR optional
a98647d744dc24c pw_toolchain: Add linux_sysroot.bzl
7dc26abc274fa80 pw_libcxx: Actually implement operator delete
b2afd53cde2dcc9 pw_ide: Revise docs
510f3669f3efa06 pw_bluetooth_sapphire: Use pw_bytes for endianness
110886b36198cfe pw_bluetooth_sapphire: Use pw_bytes for endianness
8874d47ccfa465d pw_bluetooth_sapphire: Reorganize test_packets.h/.
721173ca9019b69 pw_bluetooth_sapphire: Cleanup WriteInquiryScanAct
63a1dce944a0fbe pw_bluetooth_sapphire: Use pw_bytes for endianness
b335456fdb77bb9 pw_bluetooth_sapphire: Use pw_bytes for endianness
fbda534b8e330ba pw_bluetooth_sapphire: Use pw_bytes for endianness
548f5c7af1b9af5 pw_bluetooth_sapphire: Remove unneeded #include
edc32d2d6933838 pw_bluetooth_sapphire: Use pw_bytes for endianness
4524992ebf7d7a4 pw_bluetooth_sapphire: Use pw_bytes for endianness
d7e8d2ff283c451 pw_bluetooth_sapphire: Use pw_bytes for endianness
3e71386abd84aec pw_bluetooth_sapphire: Use pw_bytes for endianness
3ac62ffae11dbdb pw_bluetooth_sapphire: Rename link_initiated to ou
a532db5b0ae5a4b pw_bluetooth_sapphire: Cleanup WriteScanEnable pac
50f4a97a1903282 pw_bluetooth_sapphire: Cleanup ReadScanEnable pack
41f05bde0a0e51c pw_bluetooth_sapphire: Remove alias for BrEdrConne
4be96ee0d8d1e07 pw_bluetooth_sapphire: BrEdrConnectionRequest crea
217e8726bf1c9d7 pw_bluetooth_sapphire: Add connection role to fake
57000edcfd2bb92 pw_bluetooth_sapphire: Remove double std::move in
22c3381a3cc63e3 pw_bluetooth_sapphire: Fix BrEdrDynamicChannel cra
aae665e766a0865 pw_bluetooth_sapphire: Cleanup BrEdrConnectionRequ
565760fe5122a2e pw_bluetooth_sapphire: Implement IsoStreamServer
a8285a5c71eebb7 pw_bluetooth_sapphire: Modernize fuchsia.hardware.
aa4a8e3d13ed126 pw_bluetooth_sapphire: Rename to secure_simple_pai
0c81249d91bb21b pw_bluetooth_sapphire: Use weak hci::BrEdrConnecti
61111f8a0a8a584 pw_bluetooth_sapphire: Create and use PairingState
fed1a4ac940f060 pw_bluetooth_sapphire: Implement GetCodecLocalDela
2ff9fd8832b11ad pw_bluetooth_sapphire: Add Bazel rules for FIDL la
e8a0c91ac25a4a2 pw_bluetooth_sapphire: Refactor ScoConnection
2036fdef704762d pw_bluetooth_sapphire: Fix max connection event le
a622862b3f0bc5d pw_bluetooth_sapphire: Add AdvertisingData.ToStrin
8b518ec2b747f12 pw_bluetooth_sapphire: Make UUID string parsing op
ec2a45e92ab2918 pw_bluetooth_sapphire: Add Adapter::GetSupportedDe
9695b4b71c9a788 pw_bluetooth_sapphire: Clean up legacy advertising
135b5344b4b2750 pw_bluetooth_sapphire: Add missing climits include
4b00cebc95b7131 pw_bluetooth_sapphire: Add Emboss support to SendC
3688ecf89dbc109 pw_bluetooth_sapphire: Improve naming of android n
993d153724f7fc9 pw_bluetooth_sapphire: Migrate emboss aliases to n
196ab220be84690 pw_bluetooth_sapphire: Add tests for LE Read Max.
2265b2568b2ddc9 pw_bluetooth_sapphire: Ensure command is supported
eb4af40890efea5 pw_bluetooth_sapphire: Use duration_cast for const
a5ca74b914e8205 pw_bluetooth_sapphire: Implement extended adv. pdu
5cf904b2b9af5fa pw_bluetooth_sapphire: Use `ull` constants for enu
41608a281538865 pw_bluetooth_sapphire: Update semantics of `bredr.
f1ee471410b4b2c pw_bluetooth_sapphire: Add the credit-based flow c
72a8ca6b98eb503 pw_bluetooth_sapphire: Migrate LEAdvertisingReport
40351f96a88b4cf pw_bluetooth_sapphire: Lenient LEGetVendorCapabili
2295d1150aa5748 pw_unit_test: Removed duplicate from forwarded var

https://pigweed.googlesource.com/pigweed/pigweed
third_party/pigweed Rolled-Commits: 5522843e83b016f..d7f4cfe88a34541
Roller-URL: https://ci.chromium.org/b/8742085144004319921
GitWatcher: ignore
CQ-Do-Not-Cancel-Tryjobs: true
Change-Id: Ib8b2fc913140c3e7013f4cd7a3ba59d7d3831f69
Reviewed-on: https://pigweed-review.googlesource.com/c/gonk/+/224232
Bot-Commit: Pigweed Roller <pigweed-roller@pigweed-service-accounts.iam.gserviceaccount.com>
Commit-Queue: Pigweed Roller <pigweed-roller@pigweed-service-accounts.iam.gserviceaccount.com>
Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com>
1 file changed
tree: 6d63e2dbdb4291896fec5d1470b1901db9194aa7
  1. applications/
  2. build_overrides/
  3. fpga/
  4. lib/
  5. pcb/
  6. scripts/
  7. targets/
  8. third_party/
  9. tools/
  10. .gitignore
  11. .gitmodules
  12. .gn
  13. banner.txt
  14. bootstrap.sh
  15. BUILD.gn
  16. BUILDCONFIG.gn
  17. OWNERS
  18. pigweed.json
  19. README.md
README.md

Gonk

Getting Started

  1. Clone the repo

    git clone https://pigweed.googlesource.com/gonk
    
  2. Source bootstrap.sh to download all compilers and tooling into the environment directory:

    . ./bootstrap.sh
    

    This should init all git submodules for you.

  3. From here on the Pigweed environment is activated. You can activate the environment in a new shell without re-running bootstrap by sourcing activate.sh

    . ./activate.sh
    

Compile:

Build for the host and device by running:

pw build

This is mostly a shortcut with nice output for running gn gen out/gn and ninja -C out/gn.

The build commands are defined in: //tools/gonk_tools/build_project.py.

Gonk Verilog:

The Verilog build requires the following to be installed on Linux:

sudo apt install fpga-icestorm nextpnr-ice40 yosys

Run this to compile:

pw build

The bitstream files will be written with the .bin extenson under ./out/gn/obj/fpga/*/*.bin along with log output files.

For example:

$ ls ./out/gn/obj/fpga/toplevel/
nextpnr-log.txt
toplevel.asc
toplevel.bin
toplevel.json
toplevel_timing_report.json
toplevel_timing_report.txt
yosys-log.txt

Gonk fpga config Example

Flash the stm32f7 and launch the write_fpga.py script on a bitstream file.

Flash via DFU

  1. Unplug gonk from USB and replug with MODE button held down.

  2. Run gonk-flash on the MCU binary. This uses pyfu-usb.

    gonk-flash --bin-file ./out/gn/arduino_size_optimized/obj/applications/fpga_config/fpga_config.bin
    

Write the FPGA bitstream

  1. Write an FPGA bitstream with the write_fpga.py script:

    gonk \
      --bitstream-file ./out/gn/obj/fpga/toplevel/toplevel.bin
      --database ./out/gn/arduino_size_optimized/obj/applications/fpga_config/bin/fpga_config.elf \
      --log-to-stderr
    

    You can redirect host and device logs to separate files with:

    gonk \
      --bitstream-file ./out/gn/obj/fpga/toplevel/toplevel.bin
      --database ./out/gn/arduino_size_optimized/obj/applications/fpga_config/bin/fpga_config.elf \
      --host-logfile gonk-host-logs.txt \
      --device-logfile gonk-device-logs.txt
    

Alternative: Flash with BlackMagic Probe

./scripts/flash-with-blackmagic-probe.sh ./out/gn/arduino_size_optimized/obj/applications/spi_flash_test/bin/spi_flash_test.elf

Generating the Gonk Python Bundle

On Linux with the FPGA toolchain available run:

pw build

The zip file containing all the dependencies for the gonk python tooling is located in:

out/gn/obj/gonk_bundle.zip

Inside are the Python wheels for gonk_dist, gonk_firmware, and all third_party dependencies.

gonk_bundle
├── python_wheels
│   ├── appdirs-1.4.4-py2.py3-none-any.whl
│   ├── astroid-3.0.1-py3-none-any.whl
│   ├── ...
│   ├── gonk_dist-0.0.1+20240305140627-py3-none-any.whl
│   ├── gonk_firmware-0.0.1+20240305140542-py3-none-any.whl
│   ├── ...
│   └── wheel-0.40.0-py3-none-any.whl
├── requirements.txt
├── setup.bat
└── setup.sh

pw_system Example

Run on Host

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

./out/gn/host_device_simulator.speed_optimized/obj/applications/system_example/bin/system_example & \
  pw-system-console --socket-addr default \
    --proto-globs third_party/pigweed/pw_rpc/echo.proto ; \
  killall system_example

Run on Device

Flashing

openocd -s $PW_PIGWEED_CIPD_INSTALL_DIR/share/openocd/scripts \
  -f $GONK_ROOT/targets/stm32f769i_disc0_stm32cube/openocd_stm32f7xx.cfg \
  -c "program out/gn/stm32f769i_disc0_stm32cube.size_optimized/obj/applications/system_example/bin/system_example.elf reset exit"

Updating STM32Cube

Checkout the desired commits in each of these submodules:

third_party/stm32cube_f7/cmsis_core
third_party/stm32cube_f7/cmsis_device
third_party/stm32cube_f7/hal_driver

Then run from Gonk root:

python -m pw_stm32cube_build gen_file_list third_party/stm32cube_f7

Pin Map

Misc

NetSTM32 PinSTM32 FunctionFunction
STATUSPB13GPIO_OutputSTAT LED

SPI Flash Connection

NetFPGA IO#STM32 PinSTM32 FunctionFlash Pin
ICE_SPI_SS71PD2GPIO_OutputS#
ICE_SPI_MISO68PB4SPI1_MISODQ1
ICE_SPI_MOSI67PB5SPI1_MOSIDQ0
ICE_SPI_SCK70PB3SPI1_SCKC
FLASH_HOLD63PC11GPIO_OutputHOLD#/DQ3
FLASH_WP64PC12GPIO_OutputW#/VPP/DQ2

FPGA Connection

NetFunctionFPGA IO#STM32 PinSTM32 FunctionNotes
FPGA_IO_SPARE_0_2rst_i135PA0GPIO_OutputActive high
FPGA_IO_SPARE_0_0mode_i137PB11GPIO_OutputFPGA operation mode
DSPI_CSvalid_o75PB6GPIO_OutputData/Transfer Valid
FPGA_IO_SPARE_1_1miso_i101PC2SPI1_MISO
FPGA_IO_SPARE_1_0mosi_i99PC3SPI1_MOSI
I2C_O_SDAcs_n79PB9SPI1_NSS
FPGA_IO_SPARE_0_1sclk_i136PB10SPI1_SCK
FPGA_IO_SPARE_2_049PA7
FPGA_IO_SPARE_2_148PA6
FPGA_IO_SPARE_2_247PA5
FPGA_IO_SPARE_2_345PA4

Capture ADC samples and plot

  1. First bootstrap, run pw build and flash gonk using DFU.

    . ./bootstrap.sh
    
    pw build
    

    Unplug gonk from USB and replug with MODE button held down.

    Run gonk-flash on the MCU binary. This uses pyfu-usb.

    gonk-flash ./out/gn/arduino_size_optimized/obj/applications/fpga_config/fpga_config.bin
    
  2. Start capturing ADC samples with:

    python tools/gonk_tools/write_fpga.py \
      --bitstream-file ./out/gn/obj/fpga/toplevel/toplevel.bin \
      --database ./out/gn/arduino_size_optimized/obj/applications/fpga_config/bin/fpga_config.elf \
      --host-logfile gonk-host-logs.txt \
      --device-logfile gonk-device-logs.txt \
      --log-to-stderr
    
    • Press Enter to stop or start ADC continuous updates. It will begin automatically on startup.
    • Press ctrl-c to quit.
  3. Plot the logs from gonk-device-logs.txt with:

    python tools/gonk_tools/plot.py -i gonk-device-logs.txt -o plot.svg