Имеется веб-камера. Через венду и usbsnoop поймал нужные байты,
посылаемые вендовой програмкой...
Теперь проблема всунуть эти байты в Linux приложение,
желательно через V4L2 ioctl(fd, VIDIOC_S_CTRL, &ctrl); VIDIOC_S_CTRL - или другой
Или, как вариант, всунуть в драйвер uvcvideo.
С помощью libusb этот запрос выглядит так:
#define LED_ON «\x02\x00\0x01\0x00\0x00\0x00\0x00»
#define TYPE (USB_TYPE_CLASS | USB_RECIP_INTERFACE)
memcpy(buf, LED_ON, 0x7);
usb_control_msg(devh, TYPE, 1, 0x600, 0x400, buf, 0x7, 1000);
...
Сама ж..а - это 0x600 и 0x400.
Как их всунуть в устройство через V4L API нипанятна...
---
В USB Device Class Definition for Video Devices написано:
2.3.6 Extension Unit
The Extension Unit (XU) is the method provided by this specification to add vendor-specific
building blocks to the specification. The Extension Unit can have one or more Input Pins and has
a single Output Pin.
Although a generic host driver will not be able to determine what functionality is implemented in
the Extension Unit, it shall report the presence of these extensions to vendor-supplied client
software, and provide a method for sending control requests from the client software to the Unit,
and receiving status from the unit.
---
Их есть у нас, аж две штуки
VideoControl Interface Descriptor:
bLength 26
bDescriptorType 36
bDescriptorSubtype 6 (EXTENSION_UNIT)
bUnitID 4
guidExtensionCode {7033f028-1163-2e4a-ba2c-6890eb334016}
bNumControl 8
bNrPins 1
baSourceID( 0) 3
bControlSize 1
bmControls( 0) 0x0f
iExtension 0
VideoControl Interface Descriptor:
bLength 26
bDescriptorType 36
bDescriptorSubtype 6 (EXTENSION_UNIT)
bUnitID 5
guidExtensionCode {3fae1228-d7bc-114e-a357-6f1edef7d61d}
bNumControl 8
bNrPins 1
baSourceID( 0) 4
bControlSize 1
bmControls( 0) 0xff
iExtension 0
С помощью скрипта из libwebcam эти XU превращаются в ...
#ifndef UVC_GUID_USER_HW_CONTROL_ONE
#define UVC_GUID_USER_HW_CONTROL_ONE { \
0x28, 0xf0, 0x33, 0x70, 0x63, 0x11, 0x4a, 0x2e, \
0xba, 0x2c, 0x68, 0x90, 0xeb, 0x33, 0x40, 0x16 \
}
#endif
#ifndef UVC_GUID_LOGITECH_USER_HW_CONTROL_TWO
#define UVC_GUID_LOGITECH_USER_HW_CONTROL_TWO { \
0x28, 0x12, 0xae, 0x3f, 0xbc, 0xd7, 0x4e, 0x11, \
0xa3, 0x57, 0x6f, 0x1e, 0xde, 0xf7, 0xd6, 0x1d \
}
Как их запихнуть в камеру, тоже непанятна...