usb:为什么我的f_uvc没有回答GET_DEF请求?

时间:2015-07-23 12:01:00

标签: device uvc

我需要在我的设备中实现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请求?

1 个答案:

答案 0 :(得分:-2)

这是你应该在另一个地方处理的V4L2事件。您可以通过

接收v4l2事件
rt = ioctl(dev->fd, VIDIOC_DQEVENT,&v4l2_event);

然后你可以解析这个v4l2_event,它可能是GET_CUR,GER_LEN等。因此,您可以自己定义响应这些请求。