﻿## RPC Console and Device Tracing

## Using RPC Console

You can use the rpc default config to setup everything correctly for RPCs:

```
$ export SDKCONFIG_DEFAULTS=$PROJECT_ROOT/examples/all-clusters-app/esp32/sdkconfig_m5stack_rpc.defaults
$ rm sdkconfig
$ idf.py fullclean
```

Alternatively, Enable RPCs in the build using menuconfig:

-   Enable the RPC library and Disable ENABLE_CHIP_SHELL

    ```
    Component config → CHIP Core → General Options → Enable Pigweed PRC library
    Component config → CHIP Core → General Options → Disable CHIP Shell
    ```

-   Ensure the UART is correctly configured for your board, for m5stack:

    ```
    PW RPC Debug channel → UART port number → 0
    PW RPC Debug channel → UART communication speed → 115200
    PW RPC Debug channel → UART RXD pin number → 3
    PW RPC Debug channel → UART TXD pin number → 1
    ```

After configuring you can build and flash normally:

```
$ idf.py build
$ idf.py flash
```

After flashing a build with RPCs enabled you can use the rpc console to send
commands to the device.

Build or install the
[rpc console](../../examples/common/pigweed/rpc_console/README.md)

Start the console

```
chip-console --device /dev/ttyUSB0
```

From within the console you can then invoke rpcs:

-   Configure WiFi

    ```
    rpcs.chip.rpc.WiFi.Connect(ssid=b"MySSID", secret=b"MyPASSWORD")
    rpcs.chip.rpc.WiFi.GetIP6Address()
    ```

-   Control Lighting

    ```
    rpcs.chip.rpc.Lighting.Get()
    rpcs.chip.rpc.Lighting.Set(on=True, level=128, color=protos.chip.rpc.LightingColor(hue=5, saturation=5))
    ```

-   Control Lock

    ```
    rpcs.chip.rpc.Locking.Get()
    rpcs.chip.rpc.Locking.Set(locked=True)
    ```

-   OTA Requestor

    ```
    rpcs.chip.rpc.Device.TriggerOta()
    ```

## Device Tracing

Device tracing is available to analyze the device performance. To turn on
tracing, build with RPC enabled.

Obtain tracing json file.

```
$ ./{PIGWEED_REPO}/pw_trace_tokenized/py/pw_trace_tokenized/get_trace.py -d {PORT} -o {OUTPUT_FILE} \
    -t {ELF_FILE} {PIGWEED_REPO}/pw_trace_tokenized/pw_trace_protos/trace_rpc.proto
```
