# CHIP Ameba Pigweed Example Application

This example demonstrates the usage of Pigweed module functionalities in an
application.

The example is based on [CHIP](https://github.com/project-chip/connectedhomeip),
the [Pigweed](https://pigweed.googlesource.com/pigweed/pigweed) module, which is
a collection of libraries that provide different functionalities for embedded
systems, and the Ameba platform.

You can use this example as a training ground for making experiments, testing
Pigweed module features and checking what actions are necessary to fully
integrate Pigweed in a CHIP project.

Pigweed functionalities are being gradually integrated into CHIP. Currently, the
following features are available:

-   **Echo RPC** - Creates a Remote Procedure Call server and allows sending
    commands through the serial port to the device, which makes echo and sends
    the received commands back.

---

-   [CHIP Ameba Pigweed Example Application](#chip-ameba-pigweed-example-application)
    -   [Building the Example Application](#building-the-example-application)
    -   [Testing the Example Application](#testing-the-example-application)

---

## Building the Example Application

-   Pull docker image:

          $ docker pull ghcr.io/project-chip/chip-build-ameba:167

-   Run docker container:

          $ docker run -it -v ${CHIP_DIR}:/root/chip ghcr.io/project-chip/chip-build-ameba:167

-   Setup build environment:

          $ source ./scripts/bootstrap.sh

-   To build the demo application:

          $ ./scripts/build/build_examples.py --target ameba-amebad-pigweed build

    The output image files are stored in `out/ameba-amebad-pigweed/asdk/image`
    folder.

    The bootloader image files are stored in
    `out/ameba-amebad-pigweed/asdk/bootloader` folder.

-   After building the application, **Ameba Image Tool** is used to flash it to
    Ameba board.

1. Connect your device via USB and open Ameba Image Tool.
2. Select correct serial port and set baudrate as **115200**.
3. Browse and add the corresponding image files in the Flash Download list to
   the correct locations
4. Click **Download** button.

## Testing the Example Application

Connect a USB-TTL Adapter as shown below

          Ameba         USB-TTL
          A19           TX
          A18           RX
          GND           GND

Build the
[chip-rpc console](https://github.com/project-chip/connectedhomeip/tree/master/examples/common/pigweed/rpc_console)

Reset Ameba board, then launch the chip-rpc console, where the Echo RPC commands
can be invoked

        python -m pw_hdlc.rpc_console --device /dev/tty<USB-TTL port> -b 115200

To send an Echo RPC message, type the following command, where the actual
message is the text in quotation marks after the `msg=` phrase:

        rpcs.pw.rpc.EchoService.Echo(msg="hi")
