嵌入式爱好者

查看: 57449|回复: 1

[Linux] ov5640摄像头驱动程序

[复制链接]

2

主题

2

帖子

7

积分

扫一扫,手机访问本帖
发表于 2019-3-17 18:58:49 | 显示全部楼层 |阅读模式
本帖最后由 thtfpcuser 于 2019-3-17 19:06 编辑

OKMX6X-C-Linux手册-V2.0-2018-03-30.pdf里面介绍了一个工具gstcamera,可以对焦。

af 自动对焦,sp0 对焦无穷远,sp255 对焦最近对焦距离。

手册里面说,输入sp0,sp100,sp255是指定焦距手动对焦,但是我实际测试,结果都是自动对焦。

从驱动程序看,存在问题。ioctl_send_command是响应sp命令的,但是,它调用了自动对焦配置函数ov5640_config_auto_focus()。

驱动程序应该怎么修改呢?应该联系谁呢?

linux-3.0.35\drivers\media\video\mxc\capture\ov5640.c

static int ioctl_send_command(struct v4l2_int_device *s, struct v4l2_send_command_control *vc) {
                int ret = -1;
                int retval1,retval2;
                u8 loca_val=0;
       
                ret = ov5640_set_idle_mode();
                if (0 != ret)
                        pr_err("error %d setting idle mode\n", ret);
                        ov5640_config_auto_focus();
                        switch (vc->id) {
                        case 101: //step to near
                                pr_debug("Stepping to near object\n");
                                retval1=ov5640_write_reg(REG_CMD_TAG, 0x01);
                                retval2=ov5640_write_reg(REG_CMD_MAIN, 0x05);
                                        if(retval1 == 0 && retval2 == 0)
                                                ret = 0;
                                                break;
                        case 102: //step to far
                                pr_debug("Stepping to far object\n");
                                retval1=ov5640_write_reg(REG_CMD_TAG, 0x02);
                                retval2=ov5640_write_reg(REG_CMD_MAIN, 0x05);
                                if(retval1 == 0 && retval2 == 0)
                                        ret = 0;
                                break;

                        case 103: //step to furthest
                                pr_debug("Stepping to furthest object\n");
                                retval1=ov5640_write_reg(REG_CMD_TAG, 0x03);
                                retval2=ov5640_write_reg(REG_CMD_MAIN, 0x05);
                                if(retval1 == 0 && retval2 == 0)
                                ret = 0;
                                        break;

                        case 104: //step to nearest
                                pr_debug("Stepping to nearest object\n");
                                retval1=ov5640_write_reg(REG_CMD_TAG, 0x04);
                                retval2=ov5640_write_reg(REG_CMD_MAIN, 0x05);
                                if(retval1 == 0 && retval2 == 0)
                                        ret = 0;
                                        break;

                        case 105: //step to specified position
                                pr_debug("Stepping to position: %d\n", vc->value0);
                                if(vc->value0 < 0 || vc->value0 > 255)
                                        return ret;
                                loca_val = vc->value0;
                                retval1=ov5640_write_reg(REG_CMD_TAG, 0x10);
                                retval2=ov5640_write_reg(REG_CMD_PARA0, loca_val);
                                ret=ov5640_write_reg(REG_CMD_MAIN, 0x05);
                                if(retval1 != 0 && retval2 != 0 && ret != 0)
                                        ret = -1;
                                break;
                        default:
                                break;
                }

                return ret;
}

ov5640.zip

25.4 KB, 下载次数: 10, 下载积分: 贡献 1

回复

使用道具 举报

1

主题

3670

帖子

4157

积分

发表于 2019-3-19 08:50:27 | 显示全部楼层
很抱歉,我们只测试过自动对焦,目前还没有修改手动对焦的方法
技术支持电话:0312-3119192
技术支持邮箱:Android@forlinx.com
点评回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-11-23 03:07

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表