gpt4 book ai didi

java - Android - 发送 HDMI CEC 命令到电视 - minix - libCEC

转载 作者:太空狗 更新时间:2023-10-29 22:58:24 28 4
gpt4 key购买 nike

我正在使用 Minix NEO X8-H(Android 媒体中心,4.4.2),我需要向电视发送 HDMI-CEC 命令:当我的应用程序收到调用时,我想自动将电视源更改为Minix hdmi 源。

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

找到了获取HDMI-CEC输入命令的串口设备

/dev/input/event7

内核引用位于:“/sys/devices/virtual/input/input7/”

# cat /sys/devices/virtual/input/input7/name
cec_input

这是 dmesg 日志的一部分:

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

<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 工具链对其进行交叉编译,并且能够在 Minix 上安装“libcec.so”和演示客户端二进制文件“cec-client”。

这些是构建选项:

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 Controller 配合使用,或者,如果使用 Raspberry 支持功能构建,它可以使用其集成视频 Controller 在 raspi 上顺利运行。

如果它能在 raspi 上运行,我想它一定能在 Minix 上运行。

cec-client 是一个演示客户端,开发用于与串行接口(interface)通信,但实际上由于一些错误它无法与/dev/input/evet7 通信:

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-CEC 使用串行通信协议(protocol),使用 HDMI 连接器的引脚 13,因此即使“cec-client”是演示客户端,它也必须能够正常工作!如您所见,锁定设备或类似问题时出现问题。

问题:

  • 可以使用 Java 通过 Android 发送 CEC 命令吗?
  • 如果没有,有人知道如何调整 libCEC/cec-client 以在 Minix 上工作吗?

如果无法使用 Java 方式,则没有问题:我自己的应用程序是使用 Qt 构建的,实际上我已经在使用几个 native 共享库“.so”

谁有提示?如何做到这一点?

最佳答案

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

第一章:同情

我也遇到了你遇到的所有麻烦,尤其是 libCEC,所以我想描述一下我在 Android 电视盒和通过 HDMI 电缆连接到它的电视之间进行任何交互的唯一方法。

第二章:低温和慢速 cooking

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

要获得响应,您可以:

  1. 阅读“注册表”cat/sys/class/cec/dump_reg

  2. 等待并在 logcat 中寻找响应

// 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

魔数(Magic Number)(代码)解释:

40 - Playback device #1
04 - TV device #1
On - 90 00
Off - 00 00 // in registry or no response at all in logcat

可以在 Cec-O-Matic 上构建或阅读其他可用代码或 amlogic .

第三章:新的希望

我仍然需要尝试访问 Android 的 HdmiControlService但我仍然不知道如何,可能是通过 Java 反射。您可以看到 HdmiCecExtend: onCecMessageRx 因此该 API 在设备上可用,但您不能在 Android Studio 中使用它,据我所知,它仅适用于 Android TV 供应商。

如果有任何进展将会更新。

关于java - Android - 发送 HDMI CEC 命令到电视 - minix - libCEC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29670275/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com