0

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

4

1 回答 1

-2

这是一个 V4L2 事件,您应该在另一个地方处理。您可以通过接收 v4l2 事件

rt = ioctl(dev->fd, VIDIOC_DQEVENT,&v4l2_event);

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

于 2015-09-10T03:11:03.510 回答