xref: /aosp_15_r20/cts/hostsidetests/hdmicec/cec_adapter.md (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
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![Picture of USB - CEC Adapter](https://www.pulse-eight.com/generated-assets/products/0000237_555.jpeg)
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