Pulse-Eight / libcec

USB CEC Adapter communication Library http://libcec.pulse-eight.com/
Other
704 stars 282 forks source link

sending abort with opcode a4 and reason 'unrecognised opcode' to TV #615

Open ballle98 opened 1 year ago

ballle98 commented 1 year ago

I'm working on a project here to bridge CEC to LIRC to control the volume on my ancient Yamaha receiver. https://github.com/ballle98/cec-lirc

There are several CEC 1.4 Audo opcodes that are known but report unknown

/* CEC 1.4 */
  CEC_OPCODE_REQUEST_SHORT_AUDIO_DESCRIPTORS  = 0xA4,

This is log for 0xA4

[09/09/22 08:19:22.0330] LOG4 CEC client registered: libCEC version = 6.0.2, client version = 4.0.0, firmware version = 1, logical address(es) = Audio (5) , physical address: 1.0.0.0, compiled on Linux-5.4.0-72-generic ... , features: P8_USB, DRM, P8_detect, randr, RPi, Exynos, Linux, AOCEC
[09/09/22 08:19:22.0330] LOG16 << Audio (5) -> TV (0): OSD name 'CECtoIR'
[09/09/22 08:19:22.0330] LOG8 << 50:47:43:45:43:74:6f:49:52
[09/09/22 08:19:22.0570] LOG16 << requesting power status of 'TV' (0)
[09/09/22 08:19:22.0570] LOG8 << 50:8f
[09/09/22 08:19:22.0721] LOG8 >> 05:a4:0a
CECCommand: opcode a4 0 -> 5
[09/09/22 08:19:22.0721] LOG16 sending abort with opcode a4 and reason 'unrecognised opcode' to TV
[09/09/22 08:19:22.0721] LOG16 << transmitting abort message
[09/09/22 08:19:22.0721] LOG8 << 50:00:a4:00
[09/09/22 08:19:22.0721] LOG16 >> TV (0) -> Audio (5): UNKNOWN (A4)
[09/09/22 08:19:22.0901] LOG8 >> 05:9f
CECCommand: opcode 9f 0 -> 5
[09/09/22 08:19:22.0901] LOG16 << Audio (5) -> TV (0): cec version 1.4
[09/09/22 08:19:22.0901] LOG8 << 50:9e:05
[09/09/22 08:19:22.0901] LOG16 >> TV (0) -> Audio (5): get cec version (9F)

This is log for 0xC3

CECCommand: opcode c3 0 -> 5
[09/09/22 08:20:00.0750] LOG16 sending abort with opcode c3 and reason 'unrecognised opcode' to TV
[09/09/22 08:20:00.0750] LOG16 << transmitting abort message
[09/09/22 08:20:00.0750] LOG8 << 50:00:c3:00
[09/09/22 08:20:00.0750] LOG16 >> TV (0) -> Audio (5): request ARC start (C3)
gmsoft-tuxicoman commented 1 year ago

You will not be able to achieve this with current libcec. It lacks the features you need. The problem is that you might send commands to the TV but their answer will get a "Unrecognized opcode." since you cannot tell libcec not to handle a specific command.

I have just created PR #617 to address this issue. See issue #612 for more details.

You can also find my python implementation here : https://github.com/gmsoft-tuxicoman/py-z906/

You can probably reuse cecclient.py and base your ceclirc.py code from z906cec.py from my repository. HTH