blob: 945efbde4c9d82abe768f6be2d311f8252bb53cf [file] [log] [blame] [view]
# Kudzu
[TOC]
## Getting Started
Make sure you've set up [Pigweed's
prerequisites](https://pigweed.dev/docs/getting_started.html#prerequisites).
**If you're on Windows**, you can automate the initial setup by downloading the
first-time setup script **from cmd.exe**:
```bat
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**:
```bat
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:
```sh
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**
```bat
bootstrap.bat
```
**Linux & Mac**
```sh
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**
```sh
activate.bat
```
**Linux & Mac**
```sh
source ./activate.sh
```
### Device tools setup
Install the pico SDK and tool to flash the device.
```sh
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
```sh
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:
```sh
sudo udevadm control --reload-rules
sudo udevadm trigger
```
## Compile:
```sh
pw build
```
## Run:
### Host
Run the host app and connect to it via `pw console`:
```sh
./out/gn/host_device_simulator.speed_optimized/obj/applications/badge/bin/badge & \
pw console --socket-addr default ; \
killall badge
```
### Kudzu
```sh
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`:
```sh
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))
```