第2课第1.1.8节 摄像头驱动_从零写USB摄像头驱动之设置属性

  硬件上怎么设置属性?
1.  UVC规范里定义了哪些属性 : uvc_ctrl.c里数组: static struct uvc_control_info uvc_ctrls[],这个数组里每一项都对应一个属性,这个数组里就定义了UVC规范所支持的所有属性。
    以设置亮度为例讲述设置过程:我们要设置亮度,就需要发一个数据给硬件,就要把数据发给VC下的PU模块,发给PU里面的selector。
{
.entity = UVC_GUID_UVC_PROCESSING, // 属于哪个entity(比如PU),比如我们要设置亮度,需要把数据发给硬件,那发给哪个接口呢?VC。那发给VC接口的那哪一个entity呢,这个成员就是指定entity。
.selector = PU_BRIGHTNESS_CONTROL,   // 用于亮度。PU中有许多属性,我们把数据发给PU,那我们怎么知道这个数据是用来设置亮度的呢,这个成员就是用来分辨的。
.index = 0,                       // 对应Processing Unit Descriptor的bmControls[0],表示是PU中的第几个属性
.size = 2,                       // 数据长度为2字节
.flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_RANGE
| UVC_CONTROL_RESTORE,                  //UVC_CONTROL_SET_CUR 表示我们可以设置当前的亮度等
},

2.  我们的设备支持哪些属性
   这需要去看描述符, 比如 Processing Unit Descriptor的bmControls的值为7f 14
    可知BIT0为1,表示支持BRIGHTNESS
    
    在代码里:
uvc_drvier.c
uvc_ctrl_init_device    
    // 对于每一个entity(IT,PU,SU,OT等)
list_for_each_entry(entity, &dev->entities, list) {
   // 读出bmControls
   bmControls = ....
   
   // 计算bmControls里位值为1的个数,就是支持的属性个数
   ncontrols += hweight8(bmControls[i]);    
   
   // 为每一个属性分配一个struct uvc_control
   entity->controls = kzalloc..
</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值