在 Android 应用中使用 libCEC + USB 加密狗

Use libCEC + USB dongle in Android app

我的目标是从标准(即非系统)应用程序 运行 在配备 Pulse-Eight 的 USB 加密狗的 Android 盒子上发送 HDMI CEC 命令。

跟随 these instructions I successfully managed to compile libcec for Android 并在盒子上以 root 身份执行它,使用以下命令:

echo <my-cec-command> | cec-client -s /dev/ttyACM0

其中/dev/ttyACM0是系统在插入dongle时创建的设备文件

然而,此文件的权限阻止非 root 用户执行该命令(因此无法从我的 Android 应用程序执行)。

另一方面,该应用实际上可以通过 USB Host API of the Android SDK (provided the user grants the permission) and can even be wrapped into a USB serial controller with UsbSerial 库访问 USB 加密狗。

但我看不出有什么方法可以在 Android 的 USB 主机 API 和 libcec/cec-client 提供的连接之间架起桥梁。您有什么想法或建议吗?

到目前为止,我找到的最佳解决方案是在适配器的串行端口上使用 USB Host API + UsbSerial library 到 read/write CEC 数据包,使用纯 Java 代码(没有嵌入 libCEC)。

我在 libCEC 上进行了一些逆向工程,以找到用于基本操作(例如打开和关闭电视以及设置活动源)的适当命令。

最后我想出了以下 UsbCecConnection java class: https://gist.github.com/sdabet/ac4d7711d1a529806cb7b695530b1fac