# Test code 

Testing peripherals on the custom RP2350B servo controller PCB.

## Commands

> [!WARNING]
> The zephyr sdk has bug in the [rp2350 pinctrl](https://github.com/zephyrproject-rtos/zephyr/blob/main/include/zephyr/dt-bindings/pinctrl/rpi-pico-rp2350-pinctrl-common.h) file. The `RP2_PINCTRL_GPIO_FUNC_UART_AUX` macro is defind, but `RP2_PINCTRL_GPIO_FUNC_UART_ALT` macro is used. A [pull request](https://github.com/zephyrproject-rtos/zephyr/pull/111495) has been made to fix this.

> [!NOTE]
> While shell is over USB, the `adc scan_for` command uses uart. The UART uses spi1 pins, so the spi1 needs to be disabled and `extra_uart.overlay` needs to be used.


| Command                     | Parameters                   | Description                                         |
| --------------------------- | ---------------------------- | --------------------------------------------------- |
| `led set <id> <on\|off>`    | `id`: `0-1`                  | Set LED state                                       |
| `led allon`                 | -                            | Turn all LEDs ON                                    |
| `led alloff`                | -                            | Turn all LEDs OFF                                   |
| `servo set <id> <angle>`    | Servo ID, angle in degrees   | Set servo angle                                     |
| `adc read <id>`             | ADC channel ID               | Read a single ADC channel                           |
| `adc read_for <id> <count>` | ADC channel ID, sample count | Read one ADC channel repeatedly                     |
| `adc scan`                  | -                            | Read all ADC channels once                          |
| `adc scan_for <count>`      | `count ≤ 1024`               | Read all ADC channels repeatedly and log timestamps |

### UART Output Formats

| Command        | Output Format                                       |
| -------------- | --------------------------------------------------- |
| `adc scan`     | `ADC,<channel>,<value>`                             |
| `adc scan_for` | `<sample>,ADC,<channel>,<value>,<timestamp_cycles>` |
