You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

5.4 KiB

External CEC adapter

USB - CEC Adapter from Pulse-Eight

Picture of USB - CEC Adapter

Get the hardware

Get the software

  1. Connect "TV" port on the adapter to your TV

  2. Connect USB mini port to you computer

  3. Install the cec-client

    • Linux
    sudo apt-get install cec-utils
    
     sudo /opt/local/bin/port install libcec
    
  4. run the client

    $ cec-client
    No device type given. Using 'recording device'
    CEC Parser created - libCEC version 4.0.2
    no serial port given. trying autodetect:
     path:     /dev/cu.usbmodemv1
     com port: /dev/cu.usbmodemv1
    
    opening a connection to the CEC adapter...
    DEBUG:   [               1] Broadcast (F): osd name set to 'Broadcast'
    DEBUG:   [               3] connection opened, clearing any previous input     and waiting for active transmissions to end before starting
    DEBUG:   [              10] communication thread started
    DEBUG:   [              70] turning controlled mode on
    NOTICE:  [             255] connection opened
    DEBUG:   [             255] processor thread started
    DEBUG:   [             255] << Broadcast (F) -> TV (0): POLL
    TRAFFIC: [             255] << f0
    DEBUG:   [             255] setting the line timeout to 3
    DEBUG:   [             403] >> POLL sent
    DEBUG:   [             403] TV (0): device status changed into 'present'
    

Add timestamps

Use the ts command to add timestamps.

$ cec-client  | ts
Nov 18 16:15:46 No device type given. Using 'recording device'
Nov 18 16:15:46 CEC Parser created - libCEC version 4.0.4
Nov 18 16:15:46 no serial port given. trying autodetect:
Nov 18 16:15:46  path:     /sys/devices/pci0000:00/0000:00:14.0/usb2/2-9
Nov 18 16:15:46  com port: /dev/ttyACM0
Nov 18 16:15:46
Nov 18 16:15:46 opening a connection to the CEC adapter...
Nov 18 16:15:46 DEBUG:   [             386] Broadcast (F): osd name set to 'Broadcast'

ts is part of the moreutils package

sudo apt-get install moreutils

cheat sheets

  • Show all connected devices

    $ echo scan | cec-client -s -d 1
    
    

Available Commands

[tx] {bytes}
transfer bytes over the CEC line.
[txn] {bytes}
transfer bytes but don't wait for transmission ACK.
[on] {address}
power on the device with the given logical address.
[standby] {address}
put the device with the given address in standby mode.
[la] {logical address}
change the logical address of the CEC adapter.
[p] {device} {port}
change the HDMI port number of the CEC adapter.
[pa] {physical address}
change the physical address of the CEC adapter.
[as]
make the CEC adapter the active source.
[is]
mark the CEC adapter as inactive source.
[osd] {addr} {string}
set OSD message on the specified device.
[ver] {addr}
get the CEC version of the specified device.
[ven] {addr}
get the vendor ID of the specified device.
[lang] {addr}
get the menu language of the specified device.
[pow] {addr}
get the power status of the specified device.
[name] {addr}
get the OSD name of the specified device.
[poll] {addr}
poll the specified device.
[lad]
lists active devices on the bus
[ad] {addr}
checks whether the specified device is active.
[at] {type}
checks whether the specified device type is active.
[sp] {addr}
makes the specified physical address active.
[spl] {addr}
makes the specified logical address active.
[volup]
send a volume up command to the amp if present
[voldown]
send a volume down command to the amp if present
[mute]
send a mute/unmute command to the amp if present
[self]
show the list of addresses controlled by libCEC
[scan]
scan the CEC bus and display device info

Sending Remote Control Events

You can send CEC remote events using the tx command above. The format is as follows:

tx <source id><destination id>:<command id>:<param value>

where all of the above parameters should be filled in with a single HEX digit (except <command id>, which requires 2 digits). Here, we want to send commands to the Android TV, so we will place its ID in <destination id>. The scan command above will give you the IDs for each device that the CEC adapter is aware of.

In the examples below the DUT is a CEC player device with a logical address of 4. Here are some useful commands to execute remote actions:

  • Press home

    tx 04:44:09
    
  • Press select

    tx 04:44:00
    
  • Press d-pad up

    tx 04:44:01
    
  • Press d-pad down

    tx 04:44:02
    
  • Press d-pad left

    tx 04:44:03
    
  • Press d-pad right

    tx 04:44:04
    

You can check out https://www.cec-o-matic.com/ for more info on formatting your request and a full list of commands and their respective parameters.