rk3588 Android HDMI IN热插拔解决

一、前言

1、公司在使用 别的厂商的板卡遇到一个问题,开机我们的app自启就会闪退,后来定位发现是camera 的open出错了,这个问题的出现是因为没有插HDMI IN输入的问题导致的,所以需要对HDMI IN的热插拔进行检测,后面我把这个问题也顺利解决了。下面是我的尝试和使用的解决办法。

二、尝试广播

1、尝试使用广播的形式去解决这个问题,网上也是能够搜到对应的文章: www.cnblogs.com/fuccc/p/767…

2、后来发现广播并没有反应没有任何效果,后来上网搜索好像找到了原因,大概如下图吧。

微信图片_20230731170515.png

三、尝试读取系统文件

1、也是上面搜索到的文章提示我尝试读取系统文件

image.png

 2、同时我也查阅了RK官方的HMDI IN的开发指南Rockchip HDMI IN开发指南 (nnewn.com),得出结论:

可以尝试通过读取文件查询状态,或者,我是说或者有可能通过TIF可以检测HDMI IN的状态,因为,文中也提到了camera和tv进行了交互。

3、话不多说,我用的是读取系统文件实现的,但是这个方法,需要有status文件的系统读权限,可以修改设备下的/vendor/etc/init/hw/init.rk3588.rc文件修改的权限,这个问题交给自己或者厂家协商解决。下面是代码:



public class HdmiService {
    private static final String TAG = "HdmiService";
    private boolean threadStatus; //线程状态,为了安全终止线程
    // 实时读取文件
    private File mHmdiRx = null;
    private FileReader mHdmiRxReader = null;
    private BufferedReader mHdmiBufReader = null;
    // rk的HDMI IN路径和别的不太一样
    private String mHdmiRxDevicePath = "/sys/kernel/debug/hdmirx/status";
    private String mFristStrStatus = "";


    private static HdmiService instance = new HdmiService();
    public static HdmiService getInstance() {
        return instance;
    }

    public void init(){
        Log.d(TAG, "init :read thread run");
        mHmdiRx = new File(mHdmiRxDevicePath);

        threadStatus = false;
        ReadThread readThread = new ReadThread();
        readThread.start();

    }

    private class ReadThread extends Thread{
        @Override
        public void run() {
            super.run();
            while (!threadStatus){
//                Log.d(TAG, "read thread run");
                try {
                    Thread.sleep(800);
                    // 读取首行内容
                    mHdmiRxReader = new FileReader(mHmdiRx);
                    mHdmiBufReader = new BufferedReader(mHdmiRxReader);
                    String firstLine = mHdmiBufReader.readLine();
                    mHdmiBufReader.close();
                    // 处理读取到的首行内容
                    if (firstLine != null) {
                        mFristStrStatus = firstLine;
                        HdmiRxUtil.getInstance().StatusChange(mFristStrStatus);
                    }

                }catch (IOException e) {
                    Log.d(TAG, "run: read data exception:" +e.toString());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

三、注意 检测到了HDMI IN 插入的状态之后,需要等HDMI IN驱动起来延时两秒左右,这个需要自己去适配。

最后我就讲到这,希望能够帮助大家。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要获取rk3588Android 12代码中所有的HDMI相关信息,您可以按照以下步骤进行操作: 1. 首先,下载并安装适用于rk3588Android 12源代码。您可以从Rockchip官方网站或其他可靠的开发者资源中获得该源代码。 2. 解压源代码文件到本地计算机,并确保您对源代码目录具有适当的读写权限。 3. 打开源代码目录,在其中寻找与HDMI相关的源代码文件。这些文件可能位于设备树(device tree)、驱动程序(driver)或框架(framework)等部分中。 4. 针对设备树部分,您可以查看`/arch/arm64/boot/dts/rockchip/`目录下的相关设备树文件,例如"rk3588-evb.dts"。打开该文件,会有关于HDMI接口的配置信息。 5. 对于驱动程序部分,可以查看`/drivers/video/rockchip`目录下的相关驱动文件,例如"rockchip_pseudo_hdmi.c"。该文件包含了处理HDMI接口的驱动逻辑。 6. 对于框架部分,您可以查看`/frameworks/base`目录下的相关源文件。特别是"frameworks/base/services/core/java/com/android/server/display"目录中的文件,这些文件关联着显示和显示服务。 7. 对于以上文件的每一个,您可以阅读源代码并查找与HDMI相关的配置、功能以及相关的类、方法或结构体等。 通过查看这些源代码文件,您可以详细了解rk3588Android 12代码中关于HDMI的配置和功能。请注意,由于具体设备和镜像差异,某些HDMI相关文件的位置或名称可能会略有不同。应根据具体的开发板或设备来查找相关的源代码文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈~~哈~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值