| # CHIP TV Casting App Example |
| |
| This is a CHIP TV Casting app that can be used to cast content to a TV. This app |
| discovers TVs on the local network that act as commissioners, lets the user |
| select one, sends the TV a User Directed Commissioning request, enters |
| commissioning mode, advertises itself as a Commissionable Node and gets |
| commissioned. Then it allows the user to send CHIP commands to the TV. |
| |
| <hr> |
| |
| - [CHIP TV Casting App Example](#chip-tv-casting-app-example) |
| - [Building](#building) |
| - [Running the Complete Example on Linux](#running-the-complete-example-on-linux) |
| - [Commissioning the tv-casting-app](#commissioning-the-tv-casting-app) |
| - [Re-Running the Example on Linux with Cached Fabrics](#re-running-the-example-on-linux-with-cached-fabrics) |
| - [Sending Arbitrary Cluster commands](#sending-arbitrary-cluster-commands) |
| |
| <hr> |
| |
| ## 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-casting-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-casting-app/linux |
| $ rm -rf out/ |
| |
| ## Running the Complete Example on Linux |
| |
| - Pre-requisite: Build and run the tv-app |
| |
| $ cd ~/connectedhomeip/examples/tv-app/linux |
| $ out/debug/chip-tv-app --secured-device-port 5640 --secured-commissioner-port 5552 |
| |
| - Run the tv-casting-app (clean start) |
| |
| $ cd ~/connectedhomeip/examples/tv-casting-app/linux |
| (delete any stored fabrics from previous runs) |
| $ rm -rf /tmp/rm -rf /tmp/chip* |
| $ out/debug/chip-tv-casting-app |
| |
| Follow the on-screen prompts on the tv-casting-app console |
| |
| - Re-run the tv-casting-app (cached fabrics) |
| |
| $ cd ~/connectedhomeip/examples/tv-casting-app/linux |
| $ out/debug/chip-tv-casting-app |
| |
| Follow the on-screen prompts on the tv-casting-app console. NOTE: When there |
| are cached fabrics, re-commissioning onto the same fabric will fail. See |
| below for details. |
| |
| ### Commissioning the tv-casting-app |
| |
| The tv-casting-app will automatically discover video players and print these out |
| upon startup. The user-directed-commissioning (UDC) process can be initiated |
| using the shell by specifying the index of the discovered video player in the |
| printed list. |
| |
| - Initiate UDC for the discovered video player with index 0 |
| |
| tv-casting-app> cast request 0 |
| |
| - After sending UDC command to tv-app, you should be able to enter into tv-app |
| shell: |
| |
| tv-app> controller ux ok |
| |
| - Re-run commissioner discovery |
| |
| tv-casting-app> cast discover |
| |
| ### Re-Running the Example on Linux with Cached Fabrics |
| |
| After successfully commissioning the tv-casting-app onto a fabric the app can be |
| re-run using a cached fabric so that the commissioning step does not need to be |
| repeated. This allows the app to be commissioned once and then re-run upon |
| demand. Shell commands allow viewing, selecting and deleting a cached fabric. If |
| no fabric is specified for a command that required a fabric, then the first |
| valid cached fabric will be used. |
| |
| - Print all shell commands |
| |
| tv-casting-app> help |
| tv-casting-app> cast help |
| |
| - Print all fabrics |
| |
| tv-casting-app> cast print-fabrics |
| |
| - Delete fabric with index 1 |
| |
| tv-casting-app> cast delete-fabric 1 |
| |
| - Switch to fabric index |
| |
| tv-casting-app> cast set-fabric 1 |
| |
| ### Sending Arbitrary Cluster commands |
| |
| The linux tv-casting-app can invoke any cluster command using the same syntax as |
| chip-tool. This can be done from the command line and from the shell. The |
| default (or first valid) cached fabric will be used unless a different fabric |
| has been set already using shell commands. |
| |
| Similar to chip-tool arguments, the target nodeId for the command is specified |
| along with the endpoint. For the casting app, the nodeId would be the nodeId for |
| the video player (TV). For convenience, when nodeId '0' is used, the |
| tv-casting-app will use the cached nodeId for the video player corresponding to |
| the current fabric. |
| |
| The tv-casting-app is able to determine the nodeId for the given fabric by |
| checking its binding table since the video player sets bindings on the |
| tv-casting-app for each endpoint to which the tv-casting-app is granted access |
| during commissioning. Cluster commands can be invoked via command line arguments |
| passed to the chip-tv-casting-app executable or via the built-in interactive |
| shell by prefixing the words "cast cluster" before the command. |
| |
| - Run the tv-casting-app and invoke a cluster command using default fabric, |
| target video player nodeId 18446744004990074879 |
| |
| $ out/debug/chip-tv-casting-app onoff read on-off 18446744004990074879 2 |
| |
| - Run the tv-casting-app and invoke a cluster command using default fabric, |
| target video player nodeId 0xFFFFFFEFFFFFFFFF (hex) |
| |
| $ out/debug/chip-tv-casting-app onoff read on-off 0xFFFFFFEFFFFFFFFF 2 |
| |
| - Run the tv-casting-app and invoke a cluster command using default fabric, |
| video player nodeId for that fabric |
| |
| $ out/debug/chip-tv-casting-app onoff read on-off 0 2 |
| |
| - Run the tv-casting-app and invoke a different cluster command using default |
| fabric, video player nodeId for that fabric |
| |
| $ out/debug/chip-tv-casting-app keypadinput send-key 1 0 1 |
| |
| - Run the tv-casting-app and invoke a cluster command from the shell using |
| default fabric, video player nodeId for that fabric |
| |
| tv-casting-app> cast cluster keypadinput send-key 1 0 1 |
| |
| - Run the tv-casting-app and invoke a cluster command from the shell using |
| default fabric, target video player nodeId 0xFFFFFFEFFFFFFFFF |
| |
| tv-casting-app> cast cluster keypadinput send-key 1 0xFFFFFFEFFFFFFFFF 1 |