# CHIP TV Example

An example showing the use of CHIP on the Linux. The document will describe how
to build and run CHIP TV Example on Raspberry Pi. This doc is tested on **Ubuntu
for Raspberry Pi Server 20.04 LTS (aarch64)** and **Ubuntu for Raspberry Pi
Desktop 20.10 (aarch64)**

<hr>

-   [CHIP TV Example](#chip-tv-example)
    -   [Building](#building)
    -   [Running the Complete Example on Raspberry Pi 4](#running-the-complete-example-on-raspberry-pi-4)

<hr>

<a name="building"></a>

## Building

-   Install tool chain

          $ sudo apt-get install git gcc g++ python pkg-config libssl-dev libdbus-1-dev libglib2.0-dev ninja-build python3-venv python3-dev unzip

-   Build the example application:

          $ cd ~/connectedhomeip/examples/tv-app/linux
          $ git submodule update --init
          $ source third_party/connectedhomeip/scripts/activate.sh
          $ gn gen out/debug
          $ ninja -C out/debug

-   To delete generated executable, libraries and object files use:

          $ cd ~/connectedhomeip/examples/tv-app/linux
          $ rm -rf out/

<a name="running-complete-example"></a>

## Running the Complete Example on Raspberry Pi 4

> If you want to test ZCL, please disable Rendezvous
>
>     gn gen out/debug --args='bypass_rendezvous=true'
>     ninja -C out/debug
>
> Note that GN will set bypass_rendezvous for future builds, to enable
> rendezvous, re-generate using
>
>     gn gen out/debug --args='chip_bypass_rendezvous=false'

-   Prerequisites

    1. A Raspberry Pi 4 board
    2. A USB Bluetooth Dongle, Ubuntu desktop will send Bluetooth advertisement,
       which will block CHIP from connecting via BLE. On Ubuntu server, you need
       to install `pi-bluetooth` via APT.
    3. Ubuntu 20.04 or newer image for ARM64 platform.

-   Building

    Follow [Building](#building) section of this document.

-   Running

    -   [Optional] Plug USB Bluetooth dongle

        -   Plug USB Bluetooth dongle and find its bluetooth device number. The
            number after `hci` is the bluetooth device number, `1` in this
            example.

                  $ hciconfig
                  hci1:	Type: Primary  Bus: USB
                      BD Address: 00:1A:7D:AA:BB:CC  ACL MTU: 310:10  SCO MTU: 64:8
                      UP RUNNING PSCAN ISCAN
                      RX bytes:20942 acl:1023 sco:0 events:1140 errors:0
                      TX bytes:16559 acl:1011 sco:0 commands:121 errors:0

                  hci0:	Type: Primary  Bus: UART
                      BD Address: B8:27:EB:AA:BB:CC  ACL MTU: 1021:8  SCO MTU: 64:1
                      UP RUNNING PSCAN ISCAN
                      RX bytes:8609495 acl:14 sco:0 events:217484 errors:0
                      TX bytes:92185 acl:20 sco:0 commands:5259 errors:0

        -   Run TV Example App

                  $ cd ~/connectedhomeip/examples/tv-app/linux
                  $ sudo out/debug/chip-tv-app --ble-device [bluetooth device number]
                  # In this example, the device we want to use is hci1
                  $ sudo out/debug/chip-tv-app --ble-device 1

        -   Test the device using ChipDeviceController on your laptop /
            workstation etc.
