v853如何实现对cmos sensor实时的寄存器读写?
-
sensor型号为cis5001。目前自己写的驱动已经可以实现图像显示,但是曝光太暗,也有色偏。想要能够实时调节曝光和白平衡的寄存器。但是在用户代码中写的i2c接口无法顺利访问寄存器。请问各位大佬有没有相关的经验?拜谢!
-
@monuannuan
你驱动里有没有 v4l2_ctrl_ops ?
类似static const struct v4l2_ctrl_ops sensor_ctrl_ops = { .g_volatile_ctrl = sensor_g_ctrl, .s_ctrl = sensor_s_ctrl, };
这个sensor_s_ctrl类似:
static int sensor_s_ctrl(struct v4l2_ctrl *ctrl) { struct sensor_info *info = container_of(ctrl->handler, struct sensor_info, handler); struct v4l2_subdev *sd = &info->sd; switch (ctrl->id) { case V4L2_CID_GAIN: return sensor_s_gain(sd, ctrl->val); case V4L2_CID_EXPOSURE: return sensor_s_exp(sd, ctrl->val); case V4L2_CID_ILLUMINATORS_1: return sensor_s_illum1(sd, ctrl->val); case V4L2_CID_ILLUMINATORS_2: return sensor_s_illum2(sd, ctrl->val); } return -EINVAL; }
你在这边的函数里面操作i2c就可以。
然后主程序类似bool setCameraExposure(int exposure){ struct v4l2_control ctrl; memset(&ctrl, 0, sizeof(struct v4l2_control)); ctrl.id = V4L2_CID_EXPOSURE; ctrl.value = exposure; printf("set camera exposure to %d\n", exposure); if (ioctl(videofd, VIDIOC_S_CTRL, &ctrl) < 0) { printf("set camera exposure failed\n"); return false; } return true; }
这样主程序就能调用驱动操作传感器。
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号