为了让AmCap能够通过Windows UVC接口控制Cypress传感器的曝光时间,需要修改cycx3_uvcdscr.c中的UVC描述符,确保曝光控制属性被正确声明。以下是关键步骤和示例代码:
步骤1:确认硬件支持
确保传感器支持通过UVC协议调整曝光时间(例如,支持PU_EXPOSURE_TIME_ABSOLUTE_CONTROL属性)。
步骤2:修改UVC描述符
在cycx3_uvcdscr.c中,找到Processing Unit(PU)描述符,在bmControls字段中启用曝光控制位:
// 原始代码可能类似:
PU_DESCRIPTOR(0,
VIDEO_PROCESSING,
(PU_CONTROL_BACKLIGHT_COMPENSATION | PU_CONTROL_GAIN), // bmControls
...)
// 修改后,添加PU_EXPOSURE_TIME_ABSOLUTE_CONTROL:
PU_DESCRIPTOR(0,
VIDEO_PROCESSING,
(PU_CONTROL_BACKLIGHT_COMPENSATION | PU_CONTROL_GAIN | PU_CONTROL_EXPOSURE_TIME_ABSOLUTE), // 启用曝光控制
...)
步骤3:映射属性到UVC规范
确保曝光时间属性与UVC规范一致。在uvc_controls.h中确认以下宏定义:
#define PU_CONTROL_EXPOSURE_TIME_ABSOLUTE 0x00000080 // 对应bmControls的bit7
步骤4:实现控制请求处理
在固件中处理SET_CUR/GET_CUR请求,将曝光值传递给传感器:
// 在CyU3PUVCControlCallback函数中添加处理逻辑:
case PU_EXPOSURE_TIME_ABSOLUTE_CONTROL:
if (reqType == UVC_SET_CUR) {
// 从pData读取曝光值,写入传感器寄存器
sensor_set_exposure(*(uint32_t*)pData);
return CY_U3P_SUCCESS;
} else if (reqType == UVC_GET_CUR) {
// 从传感器读取当前曝光值,填充到pData
*(uint32_t*)pData = sensor_get_exposure();
return CY_U3P_SUCCESS;
}
break;
步骤5:编译并验证
- 重新编译固件并烧录到设备。
- 检查描述符:使用USBTreeView确认曝光控制是否在PU的
bmControls中启用。
- AmCap测试:打开AmCap,进入属性页面,确认曝光控制已可调节。
注意事项
通过上述修改,AmCap应能通过UVC接口调整曝光时间。若问题依旧,需进一步检查传感器寄存器配置或Windows驱动兼容性。
为了让AmCap能够通过Windows UVC接口控制Cypress传感器的曝光时间,需要修改cycx3_uvcdscr.c中的UVC描述符,确保曝光控制属性被正确声明。以下是关键步骤和示例代码:
步骤1:确认硬件支持
确保传感器支持通过UVC协议调整曝光时间(例如,支持PU_EXPOSURE_TIME_ABSOLUTE_CONTROL属性)。
步骤2:修改UVC描述符
在cycx3_uvcdscr.c中,找到Processing Unit(PU)描述符,在bmControls字段中启用曝光控制位:
// 原始代码可能类似:
PU_DESCRIPTOR(0,
VIDEO_PROCESSING,
(PU_CONTROL_BACKLIGHT_COMPENSATION | PU_CONTROL_GAIN), // bmControls
...)
// 修改后,添加PU_EXPOSURE_TIME_ABSOLUTE_CONTROL:
PU_DESCRIPTOR(0,
VIDEO_PROCESSING,
(PU_CONTROL_BACKLIGHT_COMPENSATION | PU_CONTROL_GAIN | PU_CONTROL_EXPOSURE_TIME_ABSOLUTE), // 启用曝光控制
...)
步骤3:映射属性到UVC规范
确保曝光时间属性与UVC规范一致。在uvc_controls.h中确认以下宏定义:
#define PU_CONTROL_EXPOSURE_TIME_ABSOLUTE 0x00000080 // 对应bmControls的bit7
步骤4:实现控制请求处理
在固件中处理SET_CUR/GET_CUR请求,将曝光值传递给传感器:
// 在CyU3PUVCControlCallback函数中添加处理逻辑:
case PU_EXPOSURE_TIME_ABSOLUTE_CONTROL:
if (reqType == UVC_SET_CUR) {
// 从pData读取曝光值,写入传感器寄存器
sensor_set_exposure(*(uint32_t*)pData);
return CY_U3P_SUCCESS;
} else if (reqType == UVC_GET_CUR) {
// 从传感器读取当前曝光值,填充到pData
*(uint32_t*)pData = sensor_get_exposure();
return CY_U3P_SUCCESS;
}
break;
步骤5:编译并验证
- 重新编译固件并烧录到设备。
- 检查描述符:使用USBTreeView确认曝光控制是否在PU的
bmControls中启用。
- AmCap测试:打开AmCap,进入属性页面,确认曝光控制已可调节。
注意事项
通过上述修改,AmCap应能通过UVC接口调整曝光时间。若问题依旧,需进一步检查传感器寄存器配置或Windows驱动兼容性。
举报