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.
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