usb: почему мой f_uvc не отвечает на запрос GET_DEF?
Мне нужно реализовать спецификации 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 ответ
Это событие V4L2, с которым вам нужно иметь дело в другом месте. Вы можете получить событие v4l2 через
rt = ioctl(dev->fd, VIDIOC_DQEVENT,&v4l2_event);
Затем вы можете проанализировать этот v4l2_event, может быть, GET_CUR, GER_LEN и т. Д. Таким образом, вы можете ответить на эти запросы самостоятельно определить.