当前位置: 首页 > news >正文

MT6765 android上层获取VCM lens位置

一般摄像头的VCM 自动对焦,对lens的寄存器自动写入位置值,也有些上层APP 应用需要获取VCM  lens的位置进行界面信息显示。APP 应用需要获取VCM  lens的位置值,需要读取节点值与开放selinux权限。

本文以为DW9714为例,简单说下上层如何获取lens位置.

1 定义lens

ProjectConfig.mk:

CUSTOM_HAL_LENS = dw9714af

CUSTOM_HAL_MAIN_LENS = dw9714af

k62v1_64_bsp_defconfig:

CONFIG_MTK_LENS_DW9714AF_SUPPORT=y

2 驱动调用

lens_info.h

定义模域与控制指令值

#define AF_MAGIC 'A'

#define AFIOC_T_GETPOS _IOR(AF_MAGIC, 18, u32)

main_lens.c

lens列表中找到DW9714AF.

stAF_DrvList g_stAF_DrvList[MAX_NUM_OF_LENS]

IOCOTRL:

static long AF_Ioctl(struct file *a_pstFile, unsigned int a_u4Command,
             unsigned long a_u4Param)
{

......

    default:
        if (g_pstAF_CurDrv)
            i4RetValue = g_pstAF_CurDrv->pAF_Ioctl(
                a_pstFile, a_u4Command, a_u4Param);
        break;

}

g_pstAF_CurDrv->pAF_Ioctl调用DW9714的

long DW9714AF_Ioctl(struct file *a_pstFile, unsigned int a_u4Command,
            unsigned long a_u4Param)
{

......

        /×添加读取位置代码×/

    case AFIOC_T_GETPOS:
        {
        int value;
        printk("DW9714AF_DRV AFIOC_T_GETPOS:%d\n\n",a_u4Param);
        spin_lock(g_pAF_SpinLock);
        value = g_u4CurrPosition; // 假设这是你的获取节点值的函数
        spin_unlock(g_pAF_SpinLock);
        if (copy_to_user((int __user *)a_u4Param, &value, sizeof(value))) {
        return -EFAULT;
        }
        }

......

}

3 节点权限开启与selinux权限开放给对应APP

alps/device/mediatek/mt6765/ueventd.mt6765.emmc.rc:

/dev/MAINAF                0777   root     root

alps/device/mediatek/mt6765/ueventd.mt6765.ufs.rc:

/dev/MAINAF                0777   root     root

alps/device/mediatek/sepolicy/basic/non_plat/file_contexts:

/dev/MAINAF u:object_r:supercam_device:s0

./mediatek/sepolicy/basic/non_plat/untrusted_app.te:

allow untrusted_app supercam_device:chr_file { open read write ioctl};

4 编写JNI接口

int readvalue(void)

{

int fd = open("/dev/MAINAF", O_RDONLY); // 打开设备文件

if (fd < 0) {

perror("Failed to open device");

}

int value;

if (ioctl(fd, AFIOC_T_GETPOS, &value) == -1) {

perror("Failed to perform IOCTL");

close(fd);

}

printf("Node value: %d\n", value);

close(fd);

}

相关文章:

  • 上海地区IDC机房服务器托管选型报告(2025年4月30日)
  • Power Automate:发送邮件时加入表格
  • pinia实现数据持久化插件pinia-plugin-persist-uni
  • w313安康学院新型冠状病毒肺炎疫情防控专题网站设计与实现
  • MySQL慢查询日志分析工具mysqldumpslow教程
  • Roboflow标注数据集
  • 【MCP Node.js SDK 全栈进阶指南】高级篇(6):MCP服务大规模部署方案
  • 安卓AppWidget桌面小组件在国产移动设备的一些适配问题
  • 驱动车辆诊断测试创新 | 支持诊断测试的模拟器及数据文件转换生成
  • pybind11 使用指南+示例
  • 【AI论文】RepText:通过复制渲染视觉文本
  • java访问修饰符
  • SSM学习
  • LibAI Lab走进西浦:重塑“AI+建筑”教育
  • C语言之操作符
  • 从 PID 到 Agent:工业控制算法的五代进化史与智能协同革命
  • 哪些因素会影响远程视频监控的质量?浅述EasyCVR视频智能诊断技术
  • 手动创建一份konga对应helm的chart项目
  • 【学习笔记】机器学习(Machine Learning) | 第五章(1)| 分类与逻辑回归
  • 浅谈C# record关键字
  • 安徽两位新任地级市政府党组书记亮相
  • 2025五一档新片电影总票房破亿
  • 国家医保局副局长颜清辉调任人社部副部长
  • “铁血防守”制造8年最快丢球,恐惧中的阿森纳什么也做不了
  • 俄外长:俄将在不损害伙伴关系前提下发展对美关系
  • 游客曝九寨沟打网约车被出租车围堵,官方:前者违规,后者做法不对