1*b7c941bbSAndroid Build Coastguard Worker# External CEC adapter 2*b7c941bbSAndroid Build Coastguard Worker 3*b7c941bbSAndroid Build Coastguard Worker## USB - CEC Adapter from Pulse-Eight 4*b7c941bbSAndroid Build Coastguard Worker 5*b7c941bbSAndroid Build Coastguard Worker 6*b7c941bbSAndroid Build Coastguard Worker 7*b7c941bbSAndroid Build Coastguard Worker## Get the hardware 8*b7c941bbSAndroid Build Coastguard Worker 9*b7c941bbSAndroid Build Coastguard Worker* [Order from Pulse-Eight](https://www.pulse-eight.com/p/104/usb-hdmi-cec-adapter#) 10*b7c941bbSAndroid Build Coastguard Worker* [Pulse-Eight USB CEC adapter on Amazon](https://www.amazon.com/s/ref=nb_sb_ss_i_1_22?url=search-alias%3Daps&field-keywords=pulse+eight+usb+cec+adapter&sprefix=usb+cec+adapter+pulse+%2Caps%2C218&crid=UK4LY390M5H2) 11*b7c941bbSAndroid Build Coastguard Worker 12*b7c941bbSAndroid Build Coastguard Worker## Get the software {#software} 13*b7c941bbSAndroid Build Coastguard Worker 14*b7c941bbSAndroid Build Coastguard Worker1. Connect "TV" port on the adapter to your TV 15*b7c941bbSAndroid Build Coastguard Worker2. Connect USB mini port to you computer 16*b7c941bbSAndroid Build Coastguard Worker3. Install the cec-client 17*b7c941bbSAndroid Build Coastguard Worker 18*b7c941bbSAndroid Build Coastguard Worker * Linux 19*b7c941bbSAndroid Build Coastguard Worker 20*b7c941bbSAndroid Build Coastguard Worker ```shell 21*b7c941bbSAndroid Build Coastguard Worker sudo apt-get install cec-utils 22*b7c941bbSAndroid Build Coastguard Worker ``` 23*b7c941bbSAndroid Build Coastguard Worker 24*b7c941bbSAndroid Build Coastguard Worker * macOS (using [MacPorts](https://guide.macports.org/#installing)) 25*b7c941bbSAndroid Build Coastguard Worker 26*b7c941bbSAndroid Build Coastguard Worker ```shell 27*b7c941bbSAndroid Build Coastguard Worker sudo /opt/local/bin/port install libcec 28*b7c941bbSAndroid Build Coastguard Worker ``` 29*b7c941bbSAndroid Build Coastguard Worker 30*b7c941bbSAndroid Build Coastguard Worker4. run the client 31*b7c941bbSAndroid Build Coastguard Worker 32*b7c941bbSAndroid Build Coastguard Worker ```shell 33*b7c941bbSAndroid Build Coastguard Worker $ cec-client 34*b7c941bbSAndroid Build Coastguard Worker No device type given. Using 'recording device' 35*b7c941bbSAndroid Build Coastguard Worker CEC Parser created - libCEC version 4.0.2 36*b7c941bbSAndroid Build Coastguard Worker no serial port given. trying autodetect: 37*b7c941bbSAndroid Build Coastguard Worker path: /dev/cu.usbmodemv1 38*b7c941bbSAndroid Build Coastguard Worker com port: /dev/cu.usbmodemv1 39*b7c941bbSAndroid Build Coastguard Worker 40*b7c941bbSAndroid Build Coastguard Worker opening a connection to the CEC adapter... 41*b7c941bbSAndroid Build Coastguard Worker DEBUG: [ 1] Broadcast (F): osd name set to 'Broadcast' 42*b7c941bbSAndroid Build Coastguard Worker DEBUG: [ 3] connection opened, clearing any previous input and waiting for active transmissions to end before starting 43*b7c941bbSAndroid Build Coastguard Worker DEBUG: [ 10] communication thread started 44*b7c941bbSAndroid Build Coastguard Worker DEBUG: [ 70] turning controlled mode on 45*b7c941bbSAndroid Build Coastguard Worker NOTICE: [ 255] connection opened 46*b7c941bbSAndroid Build Coastguard Worker DEBUG: [ 255] processor thread started 47*b7c941bbSAndroid Build Coastguard Worker DEBUG: [ 255] << Broadcast (F) -> TV (0): POLL 48*b7c941bbSAndroid Build Coastguard Worker TRAFFIC: [ 255] << f0 49*b7c941bbSAndroid Build Coastguard Worker DEBUG: [ 255] setting the line timeout to 3 50*b7c941bbSAndroid Build Coastguard Worker DEBUG: [ 403] >> POLL sent 51*b7c941bbSAndroid Build Coastguard Worker DEBUG: [ 403] TV (0): device status changed into 'present' 52*b7c941bbSAndroid Build Coastguard Worker ``` 53*b7c941bbSAndroid Build Coastguard Worker 54*b7c941bbSAndroid Build Coastguard Worker## Add timestamps 55*b7c941bbSAndroid Build Coastguard Worker 56*b7c941bbSAndroid Build Coastguard WorkerUse the `ts` command to add timestamps. 57*b7c941bbSAndroid Build Coastguard Worker 58*b7c941bbSAndroid Build Coastguard Worker```shell 59*b7c941bbSAndroid Build Coastguard Worker$ cec-client | ts 60*b7c941bbSAndroid Build Coastguard WorkerNov 18 16:15:46 No device type given. Using 'recording device' 61*b7c941bbSAndroid Build Coastguard WorkerNov 18 16:15:46 CEC Parser created - libCEC version 4.0.4 62*b7c941bbSAndroid Build Coastguard WorkerNov 18 16:15:46 no serial port given. trying autodetect: 63*b7c941bbSAndroid Build Coastguard WorkerNov 18 16:15:46 path: /sys/devices/pci0000:00/0000:00:14.0/usb2/2-9 64*b7c941bbSAndroid Build Coastguard WorkerNov 18 16:15:46 com port: /dev/ttyACM0 65*b7c941bbSAndroid Build Coastguard WorkerNov 18 16:15:46 66*b7c941bbSAndroid Build Coastguard WorkerNov 18 16:15:46 opening a connection to the CEC adapter... 67*b7c941bbSAndroid Build Coastguard WorkerNov 18 16:15:46 DEBUG: [ 386] Broadcast (F): osd name set to 'Broadcast' 68*b7c941bbSAndroid Build Coastguard Worker``` 69*b7c941bbSAndroid Build Coastguard Worker 70*b7c941bbSAndroid Build Coastguard Worker### ts is part of the moreutils package 71*b7c941bbSAndroid Build Coastguard Worker 72*b7c941bbSAndroid Build Coastguard Worker```shell 73*b7c941bbSAndroid Build Coastguard Workersudo apt-get install moreutils 74*b7c941bbSAndroid Build Coastguard Worker``` 75*b7c941bbSAndroid Build Coastguard Worker 76*b7c941bbSAndroid Build Coastguard Worker## cheat sheets 77*b7c941bbSAndroid Build Coastguard Worker 78*b7c941bbSAndroid Build Coastguard Worker* Show all connected devices 79*b7c941bbSAndroid Build Coastguard Worker 80*b7c941bbSAndroid Build Coastguard Worker ```shell 81*b7c941bbSAndroid Build Coastguard Worker $ echo scan | cec-client -s -d 1 82*b7c941bbSAndroid Build Coastguard Worker 83*b7c941bbSAndroid Build Coastguard Worker ``` 84*b7c941bbSAndroid Build Coastguard Worker 85*b7c941bbSAndroid Build Coastguard Worker## Available Commands 86*b7c941bbSAndroid Build Coastguard Worker 87*b7c941bbSAndroid Build Coastguard Worker[tx] \{bytes\} 88*b7c941bbSAndroid Build Coastguard Worker: transfer bytes over the CEC line. 89*b7c941bbSAndroid Build Coastguard Worker 90*b7c941bbSAndroid Build Coastguard Worker[txn] \{bytes\} 91*b7c941bbSAndroid Build Coastguard Worker: transfer bytes but don't wait for transmission ACK. 92*b7c941bbSAndroid Build Coastguard Worker 93*b7c941bbSAndroid Build Coastguard Worker[on] \{address\} 94*b7c941bbSAndroid Build Coastguard Worker: power on the device with the given logical address. 95*b7c941bbSAndroid Build Coastguard Worker 96*b7c941bbSAndroid Build Coastguard Worker[standby] \{address\} 97*b7c941bbSAndroid Build Coastguard Worker: put the device with the given address in standby mode. 98*b7c941bbSAndroid Build Coastguard Worker 99*b7c941bbSAndroid Build Coastguard Worker[la] \{logical address\} 100*b7c941bbSAndroid Build Coastguard Worker: change the logical address of the CEC adapter. 101*b7c941bbSAndroid Build Coastguard Worker 102*b7c941bbSAndroid Build Coastguard Worker[p] \{device\} \{port\} 103*b7c941bbSAndroid Build Coastguard Worker: change the HDMI port number of the CEC adapter. 104*b7c941bbSAndroid Build Coastguard Worker 105*b7c941bbSAndroid Build Coastguard Worker[pa] \{physical address\} 106*b7c941bbSAndroid Build Coastguard Worker: change the physical address of the CEC adapter. 107*b7c941bbSAndroid Build Coastguard Worker 108*b7c941bbSAndroid Build Coastguard Worker[as] 109*b7c941bbSAndroid Build Coastguard Worker: make the CEC adapter the active source. 110*b7c941bbSAndroid Build Coastguard Worker 111*b7c941bbSAndroid Build Coastguard Worker[is] 112*b7c941bbSAndroid Build Coastguard Worker: mark the CEC adapter as inactive source. 113*b7c941bbSAndroid Build Coastguard Worker 114*b7c941bbSAndroid Build Coastguard Worker[osd] \{addr\} \{string\} 115*b7c941bbSAndroid Build Coastguard Worker: set OSD message on the specified device. 116*b7c941bbSAndroid Build Coastguard Worker 117*b7c941bbSAndroid Build Coastguard Worker[ver] \{addr\} 118*b7c941bbSAndroid Build Coastguard Worker: get the CEC version of the specified device. 119*b7c941bbSAndroid Build Coastguard Worker 120*b7c941bbSAndroid Build Coastguard Worker[ven] \{addr\} 121*b7c941bbSAndroid Build Coastguard Worker: get the vendor ID of the specified device. 122*b7c941bbSAndroid Build Coastguard Worker 123*b7c941bbSAndroid Build Coastguard Worker[lang] \{addr\} 124*b7c941bbSAndroid Build Coastguard Worker: get the menu language of the specified device. 125*b7c941bbSAndroid Build Coastguard Worker 126*b7c941bbSAndroid Build Coastguard Worker[pow] \{addr\} 127*b7c941bbSAndroid Build Coastguard Worker: get the power status of the specified device. 128*b7c941bbSAndroid Build Coastguard Worker 129*b7c941bbSAndroid Build Coastguard Worker[name] \{addr\} 130*b7c941bbSAndroid Build Coastguard Worker: get the OSD name of the specified device. 131*b7c941bbSAndroid Build Coastguard Worker 132*b7c941bbSAndroid Build Coastguard Worker[poll] \{addr\} 133*b7c941bbSAndroid Build Coastguard Worker: poll the specified device. 134*b7c941bbSAndroid Build Coastguard Worker 135*b7c941bbSAndroid Build Coastguard Worker[lad] 136*b7c941bbSAndroid Build Coastguard Worker: lists active devices on the bus 137*b7c941bbSAndroid Build Coastguard Worker 138*b7c941bbSAndroid Build Coastguard Worker[ad] \{addr\} 139*b7c941bbSAndroid Build Coastguard Worker: checks whether the specified device is active. 140*b7c941bbSAndroid Build Coastguard Worker 141*b7c941bbSAndroid Build Coastguard Worker[at] \{type\} 142*b7c941bbSAndroid Build Coastguard Worker: checks whether the specified device type is active. 143*b7c941bbSAndroid Build Coastguard Worker 144*b7c941bbSAndroid Build Coastguard Worker[sp] \{addr\} 145*b7c941bbSAndroid Build Coastguard Worker: makes the specified physical address active. 146*b7c941bbSAndroid Build Coastguard Worker 147*b7c941bbSAndroid Build Coastguard Worker[spl] \{addr\} 148*b7c941bbSAndroid Build Coastguard Worker: makes the specified logical address active. 149*b7c941bbSAndroid Build Coastguard Worker 150*b7c941bbSAndroid Build Coastguard Worker[volup] 151*b7c941bbSAndroid Build Coastguard Worker: send a volume up command to the amp if present 152*b7c941bbSAndroid Build Coastguard Worker 153*b7c941bbSAndroid Build Coastguard Worker[voldown] 154*b7c941bbSAndroid Build Coastguard Worker: send a volume down command to the amp if present 155*b7c941bbSAndroid Build Coastguard Worker 156*b7c941bbSAndroid Build Coastguard Worker[mute] 157*b7c941bbSAndroid Build Coastguard Worker: send a mute/unmute command to the amp if present 158*b7c941bbSAndroid Build Coastguard Worker 159*b7c941bbSAndroid Build Coastguard Worker[self] 160*b7c941bbSAndroid Build Coastguard Worker: show the list of addresses controlled by libCEC 161*b7c941bbSAndroid Build Coastguard Worker 162*b7c941bbSAndroid Build Coastguard Worker[scan] 163*b7c941bbSAndroid Build Coastguard Worker: scan the CEC bus and display device info 164*b7c941bbSAndroid Build Coastguard Worker 165*b7c941bbSAndroid Build Coastguard Worker## Sending Remote Control Events 166*b7c941bbSAndroid Build Coastguard Worker 167*b7c941bbSAndroid Build Coastguard WorkerYou can send CEC remote events using the `tx` command above. The format is as 168*b7c941bbSAndroid Build Coastguard Workerfollows: 169*b7c941bbSAndroid Build Coastguard Worker 170*b7c941bbSAndroid Build Coastguard Worker``` 171*b7c941bbSAndroid Build Coastguard Workertx <source id><destination id>:<command id>:<param value> 172*b7c941bbSAndroid Build Coastguard Worker``` 173*b7c941bbSAndroid Build Coastguard Worker 174*b7c941bbSAndroid Build Coastguard Workerwhere all of the above parameters should be filled in with a single HEX digit 175*b7c941bbSAndroid Build Coastguard Worker(except `<command id>`, which requires 2 digits). Here, we want to send commands 176*b7c941bbSAndroid Build Coastguard Workerto the Android TV, so we will place its ID in `<destination id>`. The scan 177*b7c941bbSAndroid Build Coastguard Workercommand above will give you the IDs for each device that the CEC adapter is 178*b7c941bbSAndroid Build Coastguard Workeraware of. 179*b7c941bbSAndroid Build Coastguard Worker 180*b7c941bbSAndroid Build Coastguard WorkerIn the examples below the DUT is a CEC player device with a logical address of 181*b7c941bbSAndroid Build Coastguard Worker4. Here are some useful commands to execute remote actions: 182*b7c941bbSAndroid Build Coastguard Worker 183*b7c941bbSAndroid Build Coastguard Worker* Press home 184*b7c941bbSAndroid Build Coastguard Worker 185*b7c941bbSAndroid Build Coastguard Worker ``` 186*b7c941bbSAndroid Build Coastguard Worker tx 04:44:09 187*b7c941bbSAndroid Build Coastguard Worker ``` 188*b7c941bbSAndroid Build Coastguard Worker 189*b7c941bbSAndroid Build Coastguard Worker* Press select 190*b7c941bbSAndroid Build Coastguard Worker 191*b7c941bbSAndroid Build Coastguard Worker ``` 192*b7c941bbSAndroid Build Coastguard Worker tx 04:44:00 193*b7c941bbSAndroid Build Coastguard Worker ``` 194*b7c941bbSAndroid Build Coastguard Worker 195*b7c941bbSAndroid Build Coastguard Worker* Press d-pad up 196*b7c941bbSAndroid Build Coastguard Worker 197*b7c941bbSAndroid Build Coastguard Worker ``` 198*b7c941bbSAndroid Build Coastguard Worker tx 04:44:01 199*b7c941bbSAndroid Build Coastguard Worker ``` 200*b7c941bbSAndroid Build Coastguard Worker 201*b7c941bbSAndroid Build Coastguard Worker* Press d-pad down 202*b7c941bbSAndroid Build Coastguard Worker 203*b7c941bbSAndroid Build Coastguard Worker ``` 204*b7c941bbSAndroid Build Coastguard Worker tx 04:44:02 205*b7c941bbSAndroid Build Coastguard Worker ``` 206*b7c941bbSAndroid Build Coastguard Worker 207*b7c941bbSAndroid Build Coastguard Worker* Press d-pad left 208*b7c941bbSAndroid Build Coastguard Worker 209*b7c941bbSAndroid Build Coastguard Worker ``` 210*b7c941bbSAndroid Build Coastguard Worker tx 04:44:03 211*b7c941bbSAndroid Build Coastguard Worker ``` 212*b7c941bbSAndroid Build Coastguard Worker 213*b7c941bbSAndroid Build Coastguard Worker* Press d-pad right 214*b7c941bbSAndroid Build Coastguard Worker 215*b7c941bbSAndroid Build Coastguard Worker ``` 216*b7c941bbSAndroid Build Coastguard Worker tx 04:44:04 217*b7c941bbSAndroid Build Coastguard Worker ``` 218*b7c941bbSAndroid Build Coastguard Worker 219*b7c941bbSAndroid Build Coastguard WorkerYou can check out [https://www.cec-o-matic.com/](https]://www.cec-o-matic.com/) 220*b7c941bbSAndroid Build Coastguard Workerfor more info on formatting your request and a full list of commands and their 221*b7c941bbSAndroid Build Coastguard Workerrespective parameters. 222