再Android10上实现检测AHD摄像头是否接入

项目有个需要,需要知道tp9951是否接入AHD摄像头

1,驱动层可以通过读取寄存器的值来检测是否接入AHD摄像头

    tp9951_write_reg(0x40, 0x00); //select decoder page
    tp9951_write_reg(0x41, ch);    
    val = tp9951_read_reg(TP_INPUT_STATUS_REG);
    pr_info("[%s] input_status ch %d : val:%x\n", __func__, ch, val);

        1号寄存器的bit7是检测是否接入摄像头的标记位。TP_INPUT_STATUS_REG为 0x01.

2,在/proc下增加一个文件节点来实现从kernel态设备状态传递到user态。

static char kbuf[28] = {0};
//open operation
static int proc_file_open(struct inode *inode, struct file *file)
{   
    MX_LOG_INF("come here.");
    return 0;
}
//read operation
static ssize_t proc_file_read(struct file *file, char __user *buffer, size_t len, loff_t *offset)
{
    int val=0;
    MX_LOG_INF("come here.");
    memset(kbuf, 0, sizeof(kbuf));
    val = mx_tp9951_ahd_det(0);
    if ((val & 0x0080) > 0)  {
        sprintf(kbuf, "%s\n", "unlink");
    } else {
        sprintf(kbuf, "%s\n", "link");
    }
    copy_to_user(buffer , kbuf , strlen(kbuf));
    return strlen(kbuf);
}
//write opertion
static ssize_t proc_file_write(struct file *file, const char __user *buffer, size_t len, loff_t *offset)
{
    MX_LOG_INF("come here.");
    //memset(kbuf, 0, sizeof(kbuf));
    //copy_from_user(kbuf , buffer , len);
    return len;
}
//release operation
int proc_file_release(struct inode *inode, struct file *file)
{
    MX_LOG_INF("come here.");
    return 0;
}

static const struct file_operations proc_file_ops = {
        .open           = proc_file_open,
        .read           = proc_file_read,
        .write          = proc_file_write,
        .release        = proc_file_release,
};

static int proc_file_init(void)
{
    proc_create_data("mx_ahd_det", 0644, NULL, &proc_file_ops, NULL);
    MX_LOG_INF("come here.");
    return 0;
}

static void proc_file_exit(void)
{
    remove_proc_entry("mx_ahd_det", NULL);
    MX_LOG_INF("come here.");
}

注:需要在模块初始化时调用proc_file_init函数,

      在模块退出函数地方调用proc_file_exit函数。

3, 用cat 命令可测试

$cat /proc/mx_ahd_det

 输出link表示当前接入了AHD摄像头。

输出unlink表示未接入AHD摄像头。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/448912.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【含文档】基于Springboot+Vue的仓库管理系统设计与实现(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

ZBrush和3D-Coat各自的优缺点是什么?

zbrush支持的模型面数高英文界面,3d coat支持的模型面数比zbrsh低有中文界 ZBrush优缺点 1、ZBrush优点: zbrush是高精度建模poser制作的首选。可搭配雕刻版使用,主要为烘焙高细节的铁图建模。因为是高精度模型,不适用于动画和游…

MySQL【知识改变命运】08

数据库约束 1:约束的几个类型2:NOT NULL非空约束3:UNIQUE 唯⼀约束4:PRIMARY KEY 主键约束4.1:回顾 5:FOREIGN KEY 外键约束5.1:创建班级表(主表),并初始化数据5.2:重构学⽣表(从表)…

移动云智算平台,斩获两大国际知名设计奖项

近日,移动云一站式智算平台从全球激烈的竞争中脱颖而出,斩获2024年缪斯设计奖与法国设计奖两项国际知名设计大奖。这两大奖项在全球设计与创新领域颇具影响力,致力于表彰来自全球的优秀和原创设计作品。此次获奖,体现了移动云出色…

5. Node.js Http模块

2.4 Http模块 2.4.1创建Http服务端 //1.导入http模块 let http=require(http)//2.创建服务对象 let server=http.createServer((request,response)=>{console.log(request.method) //获取请求方式console.log(request.url) //获取请求url(路径和参数部份…

JavaWeb Servlet--09深入:注册系统04--修改页面

修改页面 分析:点击修改超链接,就跳转到一个修改界面,要显示原本的数据,且密码显示出来,在该页面将对用户的数据的进行修改,最后提交。 开始业务: 1.在web下创建一个修改界面update.jsp 写法…

蓝牙资讯|苹果AirPods Pro 2耳机推送开发者Beta固件

科技媒体 MacRumors 报道,苹果公司邀请开发者,针对 Lightning 和 USB-C 接口的 AirPods Pro 2 耳机,推送了新的 7B5013d 固件版本,较之前的 7B5013c 有所提升。 苹果未来会向所有 AirPods Pro 2 用户推送本次固件更新&#xff0…

基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析

本文探讨了Python脚本与动态模态分解(DMD)的结合应用。我们将利用Python对从OpenFOAM模拟中提取的二维切片数据进行DMD计算。这种方法能够有效地提取隐藏的流动模式,深化对流体动力学现象的理解。 使用开源CFD软件OpenFOAM,有两种方法可以对CFD数据进行DMD计算。第一种方法是直…

外卖平台开发定制全攻略:从选技术到上线运营

随着外卖行业的蓬勃发展,越来越多的餐饮企业希望拥有一个定制化的外卖平台,以便在激烈的市场竞争中脱颖而出。那么,如何从技术选型到平台开发再到上线运营,打造一个适合自身业务的外卖平台?本文将从开发技术、系统架构…

LLM中20种提示词策略

在大型语言模型(LLM)应用中,Prompt策略是指如何设计输入提示(Prompt)以引导模型生成期望的输出。以下是一些常见的Prompt策略: 1. 零样本提示(Zero-Shot Prompting) 描述: 模型在没…

微信小程序-自定义组件

文章目录 微信小程序-自定义组件概述创建和使用数据、方法和属性slot 插槽默认插槽具名插槽 组件样式注意项样式隔离 数据监听组件间通信父传子子传父获取子组件实例 生命周期组件的生命周期组件所在页面的生命周期App、Page与Component生命周期对比冷启动保留当前页面和关闭当…

Hadoop集群基础搭建

目录 一.虚拟机安装 1.配置虚拟机的ip 2.配置本机的ip 3.新建虚拟机 4.克隆三台虚拟机 二.虚拟机网络配置 1.修改ip配置 2.配置主机名和主机映射 3.配置SSH免密登陆 三.安装JDK 1.tar命令解压JDK安装包 2.配置JDK的环境变量 四.安装Hadoop 1.tar命令解压Hadoop安…

AnaTraf | 深入探秘:如何利用网络报文分析仪进行高效抓包分析

目录 什么是网络报文分析仪? 抓包分析的核心作用 1. 故障排除 2. 性能优化 3. 安全监测 抓包分析的常见场景与技巧 1. 分析网络延迟问题 2. 排查TCP三次握手问题 3. 分析丢包问题 总结 AnaTraf 网络性能监控系统NPM | 全流量回溯分析 | 网络故障排除工具A…

智能驾驶必备:MEB低速紧急制动功能如何保护你的车辆?

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

springboot家庭膳食生活助手小程序-计算机毕业设计源码85829

摘 要 家庭膳食生活助手系统是一个基于小程序平台的项目,采用springboot框架进行开发。该系统旨在帮助用户更加便捷地规划和管理家庭膳食,促进健康饮食和生活方式。本系统通过用户自定义的家庭成员信息和饮食偏好,智能生成个性化的膳食计划…

【C++】类和对象(类的默认成员函数)

目录 一.构造函数 二.析构函数 三.拷贝构造函数 四.赋值运算符重载 五.取地址运算符重载 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。一个类,我们不写的情况下编译器会默认生成以下6个默认成员函数。 一.构造…

【C语言】函数的声明与定义

函数的声明 用户自定义函数需要在main函数之前进行声明,用分号结尾。 函数的定义 用户自定义函数在main函数之后进行定义,需要写出具体形参的变量名。注意函数的返回值和返回值类型要一一对应。 函数的调用 调用时,直接使用函数名进行调用&am…

【v5.3.0】修复订单批量发货提示 isPicUpload is not defined

使用订单批量发货的时候,没有反应,控制台提示 ReferenceError: isPicUpload is not defined 修改文件src/pages/order/orderList/components/tableList.vue 把isPicUpload改成isFileUpload,然后重新打包admin后台上传即可

推荐系统框架

推荐系统框架 理论---->应用 fellow前沿的理论,应用到推荐系统 SoTA(state of the art):意思是“最先进的”或“当前技术的最高水平”。通常用于描述某个领域中最新、最优或最具前沿性的技术、方法或成果。在研究和开发中&am…

【C语言】sizeof和strlen的区别

本篇博客将讲解以下知识: 1、sizeof和strlen的区别 1、sizeof和strlen的区别 (1)sizeof sizeof是单目操作符,不是函数,计算变量所占内存空间大小。单位是字节。如果操作数是类型的话,计算的是使用这种类型…