首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -向TV - minix - libCEC发送HDMI CEC命令

Android -向TV - minix - libCEC发送HDMI CEC命令
EN

Stack Overflow用户
提问于 2015-04-16 09:13:55
回答 2查看 8.1K关注 0票数 15

我正在开发一个Minix NEO X8-H (Android媒体中心,4.4.2),我需要将HDMI-CEC命令发送到TV:当我的应用程序接到电话时,我想自动将TV source更改为Minix hdmi源。

实际上,Minix提供了一些选项来启用HDMI,媒体中心软件XBMC据报道支持CEC。但只有在“接收模式”下,我猜:用户可以使用电视遥控器来命令Android设备。我想用相反的方式工作。我浏览了XBMC的源代码,发现了非常有趣的代码,但不知道它是否对我有用。

我找到了一个串行设备,它可以获得HDMI-CEC输入命令。

代码语言:javascript
复制
/dev/input/event7

内核引用放在:“/sys/设备/虚拟/输入/input 7/”。

代码语言:javascript
复制
# cat /sys/devices/virtual/input/input7/name
cec_input

这是dmesg日志的一部分:

http://pastebin.com/raw.php?i=A5dE3qLu

代码语言:javascript
复制
<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内置支持的有效存在。

我发现libCEC和我设法交叉编译它使用Android工具链,我能够安装"libcec.so“和一个演示客户端二进制”client“到Minix上。

以下是构建选项:

代码语言:javascript
复制
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控制器一起工作,或者,如果使用Raspberry支持功能构建,它可以在raspi上使用其集成视频控制器平稳地运行。

我想,如果它能在raspi上运行,它必须能够在Minix上运行。

cec-client是一个演示客户端,用于与串行接口通信,实际上,由于一些错误,它无法与/dev/ not /evet7 7通信:

代码语言:javascript
复制
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

但是AFAIK HDMI使用的串行通信协议使用的是HDMI连接器的13引脚,所以即使“client”是一个演示客户端,它也必须能够正常工作!正如您所看到的,锁定设备或类似的东西有问题。

问题:

  • 使用Java可以通过Android发送CEC命令吗?
  • 如果不是,有人知道如何使libCEC/cec-客户端在Minix上工作吗?

如果Java是不可能的,那么没有问题:我自己的应用程序是使用Qt构建的,实际上,我已经使用了几个本地共享库".so“

有人有小费吗?怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-12 22:59:16

我在这个问题上的两分钱:

第一章:同情

我也经历了你遇到的所有麻烦,特别是在libCEC上,所以我想描述一下在安卓电视盒和用HDMI电缆连接到它的电视之间进行交互的唯一方法。

第二章:慢慢来

发送连接设备电源状态echo 0x40 0x8F > /sys/class/cec/cmd的请求

要得到响应,您可以:

  1. 阅读“注册表”cat /sys/class/cec/dump_reg
  2. 等待并查找logcat中的响应。
代码语言:javascript
复制
// Example:
02-06 16:33:10.568  4012  4105 D CEC     : [cec_rx_loop]msg:04 90 00
02-06 16:33:10.570  4012  4105 D HdmiCecExtend: onCecMessageRx
02-06 16:33:10.657  4012  4012 W HDMI    : [1]:Unhandled cec command:<Report Power Status> src: 0, dst: 4, params: 00
02-06 16:33:10.762  4012  4104 D CEC     : [cec_send_message][4 -> 0]len:3, body:00 90 00 , result:success

幻数(密码)解释:

代码语言:javascript
复制
40 - Playback device #1
04 - TV device #1
On - 90 00
Off - 00 00 // in registry or no response at all in logcat

其他可用的代码可以在中科院-奥马季奇非逻辑上构造或读取。

第三章:新希望

我仍然必须尝试访问安卓的HdmiControlService,但我仍然不知道如何实现,可能是通过Java反射。您可以看到HdmiCecExtend: onCecMessageRx,因此API在设备上是可用的,但您不能在Android中使用它,据我所知,它只适用于Android供应商。

如果有什么消息会更新的。

票数 3
EN

Stack Overflow用户

发布于 2015-06-30 15:16:20

首先,非常令人印象深刻的逆向工程工作!

其次,我面临着一个类似的问题(但非Minix产品)。您是否尝试过升级到较新的固件,例如这个:

http://minixforum.com/threads/x8-x8-plus-x8-h-official-firmware-004a-not-for-x8-h-plus.5567/

我建议这是一种可能的解决办法,因为它解决的问题之一是:

修正了HDMI-CEC多设备问题

这意味着设备不仅是“从”,而且也是“主”(即可以向其他hdmi设备发送命令)。

请注意,正如在链接中所述,它并不打算用于加号版本。

祝好运!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29670275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档