Android — отправлять команды HDMI CEC на телевизор — minix — libCEC

я работаю над Minix NEO X8-H (Android media center, 4.4.2), и мне нужно отправить команду HDMI-CEC на телевизор: когда мое приложение получает вызов, я хочу автоматически изменить источник телевизора на Minix hdmi источник.

На самом деле 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:

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, и я смог установить "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 или, если он собран с функцией поддержки Raspberry, он может без проблем работать на raspi, используя встроенный видеоконтроллер.

Если он может работать на raspi, я думаю, он должен работать и на Minix.

Cec-client был демо-клиентом, разработанным для связи с последовательным интерфейсом, и на самом деле он не может взаимодействовать с /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 использует протокол последовательной связи с использованием контакта 13 разъема HDMI, поэтому, даже если «cec-client» является демонстрационным клиентом, он должен работать правильно! Как видите, есть проблема с блокировкой устройства или что-то подобное.

Проблемы:

  • можно отправить команду CEC через Android с помощью Java?
  • если нет, то кто-нибудь знает, как адаптировать libCEC/cec-client для работы на Minix?

Если способ Java невозможен, проблем нет: мое собственное приложение построено с использованием Qt, и на самом деле я уже использую пару собственных общих библиотек ".so"

У кого-нибудь есть советы? Как это сделать?


person Matt    schedule 16.04.2015    source источник
comment
Как вы с этим справились? Это то, что я должен очень скоро изучить для проекта, над которым я работаю. Мне удалось заставить его работать со встроенным Linux, но еще не с Android. Быстро покопавшись, я нашел это: 0x1c3 .blogspot.co.uk/2015/09/   -  person WLGfx    schedule 26.08.2016
comment
@Matt, не могли бы вы помочь мне, как вы интегрировали libCEC в Android?   -  person PankajAndroid    schedule 03.10.2016
comment
@Matt Вы нашли решение для управления телевизором через аппаратное обеспечение Minix?   -  person Remco Beugels    schedule 14.08.2017
comment
на сегодня я не нашел никакого решения для этого!   -  person Matt    schedule 09.02.2018
comment
@ Мэтт, братан, ты нашел какое-нибудь решение!   -  person hio    schedule 27.10.2020
comment
@ParthPitroda я перестал искать решение. В наше время с последними выпусками Android это больше не должно быть проблемой.   -  person Matt    schedule 28.10.2020


Ответы (2)


Во-первых, очень впечатляющая работа по реверс-инжинирингу!

Во-вторых, я столкнулся с похожей проблемой (но не с продуктом Minix). Пробовали ли вы обновиться до более новой прошивки, такой как эта:

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

Я предлагаю это как возможное решение, потому что одна из проблем, которые он решает, заключается в следующем:

Исправлены проблемы с несколькими устройствами HDMI-CEC.

Это означает, что устройство является не только «ведомым», но и «ведущим» (т.е. может отправлять команды другим устройствам HDMI).

Обратите внимание, что, как указано в ссылке, он не предназначен для плюсовой версии.

Удачи!

person Eyals_at_xtr    schedule 30.06.2015
comment
спасибо за подсказки, но спустя почти 3 года я так и не нашел решения этой проблемы! - person Matt; 09.02.2018

Мои два цента по вопросу:

Глава I: Сострадание

Я прошел через все проблемы, с которыми вы столкнулись, особенно с libCEC, поэтому я хотел бы описать единственный способ взаимодействия между Android TV box и телевизором, подключенным к нему с помощью кабеля HDMI.

Глава II: Готовим медленно и медленно

Отправить запрос о состоянии питания подключенного устройства 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

Объяснение магических чисел (кодов):

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.

Глава III: Новая надежда

Мне все еще нужно попытаться получить доступ к HdmiControlService Android, но я все еще не могу ноу-хау, вероятно, через Java-рефлексию. Вы можете видеть HdmiCecExtend: onCecMessageRx, поэтому API доступен на устройстве, но вы не можете использовать его в Android Studio, насколько я знаю, он доступен только для поставщиков Android TV.

Обновлю, если что-то появится.

person rexxar    schedule 12.02.2019