当前位置: 首页 > 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);

}

http://www.dtcms.com/a/166488.html

相关文章:

  • 上海地区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关键字
  • DeepSeek谈《凤凰项目 一个IT运维的传奇故事》
  • 蛋白质数据库UniProt介绍
  • git中reset和checkout的用法
  • Webug4.0通关笔记06- 第8关CSV注入
  • 文件读取操作
  • 【论文速读】《Scaling Scaling Laws with Board Games》
  • 数据结构学习篇——哈希
  • 冰冰一号教程网--介绍采用vuepress搭建个人博客
  • Git 忽略文件配置 .gitignore
  • 客户服务升级:智能语音外呼系统在多领域的场景应用解析