我需要在我的设备中实现uvc1.5规范,我选择linux3.4作为我的内核,我想使用drivers/usb/gadget/webcam.c
作为我的功能驱动。但它没有正常运作。
根据wireshark捕获的信号,当主机向设备发送GET_DEF
请求时,我的设备回答-ENOENT
,导致枚举失败。
我发现当composite.c
收到此类请求时,会将其转发到f->set_up
以继续。
f->set_up
的主要部分是:
uvc->event_setup_out = !(ctrl->bRequestType & USB_DIR_IN);
uvc->event_length = le16_to_cpu(ctrl->wLength);
memset(&v4l2_event, 0, sizeof(v4l2_event));
v4l2_event.type = UVC_EVENT_SETUP;
memcpy(&uvc_event->req, ctrl, sizeof(uvc_event->req));
v4l2_event_queue(&uvc->vdev, &v4l2_event);
v4l2_event_queue
的召唤令我感到困惑:谁将处理此事件?
我没有看到任何代码执行此类事件相关的初始化工作.....
我的问题是如何正确处理此事件,以便我可以回答GET_DEF
请求?
答案 0 :(得分:-2)
这是你应该在另一个地方处理的V4L2事件。您可以通过
接收v4l2事件rt = ioctl(dev->fd, VIDIOC_DQEVENT,&v4l2_event);
然后你可以解析这个v4l2_event,它可能是GET_CUR,GER_LEN等。因此,您可以自己定义响应这些请求。