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