我正在处理一个Minix NEO X8-H(Android媒体中心,4.4.2),需要向电视发送HDMI-CEC命令:当我的应用程序收到呼叫时,我想自动将电视源更改为Minix HDMI源。
实际上,Minix提供了一些选项来启用HDMI-CEC,并且媒体中心软件XBMC据说支持CEC。但我猜只能在“接收模式”下:用户可以使用电视遥控器控制Android设备。我想反过来操作。我浏览了XBMC的源代码,发现了非常有趣的代码,但不知道是否对我有用。
我找到了获取HDMI-CEC输入命令的串行设备。
内核引用位于:"/sys/devices/virtual/input/input7/"。
这是dmesg日志的一部分:
我知道libcec可以与外部hdmi-cec控制器配合使用,或者如果构建了树莓派支持功能,则可以在树莓派上平稳运行,利用其集成的视频控制器。
如果它可以在树莓派上运行,那么我想它应该能够在Minix上运行。
cec-client是一个演示客户端,开发用于与串行接口通信,但实际上由于一些错误,它无法与/dev/input/event7通信。
据我所知,HDMI-CEC使用HDMI连接器的13号引脚进行串行通信协议,因此即使“cec-client”是一个演示客户端,它也必须能够正常工作!正如您所看到的,存在锁定设备或类似问题。
问题:
任何人有提示吗?如何完成这个任务?
实际上,Minix提供了一些选项来启用HDMI-CEC,并且媒体中心软件XBMC据说支持CEC。但我猜只能在“接收模式”下:用户可以使用电视遥控器控制Android设备。我想反过来操作。我浏览了XBMC的源代码,发现了非常有趣的代码,但不知道是否对我有用。
我找到了获取HDMI-CEC输入命令的串行设备。
/dev/input/event7
内核引用位于:"/sys/devices/virtual/input/input7/"。
# cat /sys/devices/virtual/input/input7/name
cec_input
这是dmesg日志的一部分:
(注:dmesg是Linux和其他Unix系统上的命令,用于显示内核环缓冲区的信息)
<5>[ 0.000000@0] Kernel command line: init=/init console=ttyS0,115200n8 no_console_suspend storage=5 cvbsdrv=0 vdaccfg=0xa007 logo=osd1,loaded,0x15100000,4k2ksmpte,full hdmimode=4k2ksmpte cvbsmode=576cvbs androidboot.firstboot=0 hdmitx=cec0
<4>[ 0.000000@0] kernel get hdmimode form uboot is 4k2ksmpte
<4>[ 0.000000@0] hdmitx: cec: Function List: disable, , ,
<4>[ 0.000000@0] hdmitx: cec: HDMI aml_read_reg32(P_AO_DEBUG_REG0):0x0
<4>[ 0.000000@0] hdmitx: cec: HDMI hdmi_cec_func_config:0x0
<4>[ 1.392440@1] hdmitx: cec: CEC not ready
<4>[ 4.872752@0] hdmitx: cec: CEC init
<4>[ 4.876194@1] hdmitx: cec: CEC task process
<4>[ 4.876398@0] hdmitx: cec: hdmitx_device->cec_init_ready:0x1
这证明了HDMI-CEC内置支持的有效存在。
我发现了libCEC,并成功使用Android NDK工具链进行交叉编译,我能够将"libcec.so"和演示客户端二进制文件"cec-client"安装到Minix上。
以下是构建选项:
asd@vm-ubuntu:~/Desktop/libcec/libcec-master/build$ cmake ..
-- Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
-- Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
-- Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
-- Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
-- Could NOT find SWIG (missing: SWIG_EXECUTABLE SWIG_DIR)
-- Configured features:
-- Pulse-Eight CEC Adapter: no
-- Pulse-Eight CEC Adapter detection: no
-- lockdev support: no
-- xrandr support: no
-- Raspberry Pi support: no
-- TDA995x support: no
-- Exynos support: no
-- Python support: no
-- lib info: compiled on Linux-3.13.0-35-generic, features: P8_USB
-- Configuring done
-- Generating done
-- Build files have been written to: /home/asd/Desktop/libcec/libcec-master/build
我知道libcec可以与外部hdmi-cec控制器配合使用,或者如果构建了树莓派支持功能,则可以在树莓派上平稳运行,利用其集成的视频控制器。
如果它可以在树莓派上运行,那么我想它应该能够在Minix上运行。
cec-client是一个演示客户端,开发用于与串行接口通信,但实际上由于一些错误,它无法与/dev/input/event7通信。
root@NEO-X8:/data # cec-client -t p -p 4 /dev/input/event7
== using device type 'playback device'
using HDMI port '4'
CEC Parser created - libCEC version 3.0.0
opening a connection to the CEC adapter...
DEBUG: [ 7] Broadcast (F): osd name set to 'Broadcast'
ERROR: [ 3520] error opening serial port '/dev/input/event7': Invalid argument
ERROR: [ 3521] could not open a connection (try 1)
ERROR: [ 6355] error opening serial port '/dev/input/event7': Too many open files
ERROR: [ 6355] could not open a connection (try 2)
ERROR: [ 8243] error opening serial port '/dev/input/event7': Too many open files
ERROR: [ 8243] could not open a connection (try 3)
ERROR: [ 9501] error opening serial port '/dev/input/event7': Too many open files
ERROR: [ 9501] could not open a connection (try 4)
unable to open the device on port /dev/input/event7
NOTICE: [ 10506] connection opened
据我所知,HDMI-CEC使用HDMI连接器的13号引脚进行串行通信协议,因此即使“cec-client”是一个演示客户端,它也必须能够正常工作!正如您所看到的,存在锁定设备或类似问题。
问题:
- 是否可以使用Java通过Android发送CEC命令?
- 如果不行,有人知道如何适配libCEC / cec-client以在Minix上工作吗?
任何人有提示吗?如何完成这个任务?