LINUX.ORG.RU

Есть тут спецы по V4L и USB ?


0

0

Имеется веб-камера. Через венду и 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 \
}

Как их запихнуть в камеру, тоже непанятна...



Последнее исправление: pavlinux (всего исправлений: 2)

акк павлина похакали?

anonymous
()

Хочу такие же вещества, но без побочного эффекта в виде желания что-то куда-то всунуть!

По сабжу. Что-то я не припоминаю, чтобы V4L мог лампочками мигать.

Так что бери исходники драйвера и дописывай!

AF ★★★
()

>Или, как вариант, всунуть в драйвер uvcvideo.

а че стянуть все соурсы uvcvideo и посмотреть как вызывается в них usb_control_msg и как к нему дойти - не судьба?

anonymous
()
Ответ на: комментарий от anonymous

Судьба, только скажи в какое место (строку) вставлять ?! :)

buff = kmalloc(0x7, GFP_KERNEL);
memcpy(buff, ON_LED, 0x7);
ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), 0x21, 0x1, 0x600, 0x400, buff, 0x7, 1000);
uvc_printk(KERN_INFO, «retval = %d\n», ret);

pavlinux
() автор топика
Ответ на: комментарий от pavlinux

ну не тупи а?
скачай уже соурсы и разберись

media/video/uvc/uvc_video.c

static int __uvc_query_ctrl(struct uvc_device *dev, __u8 query, __u8 unit,
__u8 intfnum, __u8 cs, void *data, __u16 size,
int timeout)
{
__u8 type = USB_TYPE_CLASS | USB_RECIP_INTERFACE;
unsigned int pipe;

pipe = (query & 0x80) ? usb_rcvctrlpipe(dev->udev, 0)
: usb_sndctrlpipe(dev->udev, 0);
type |= (query & 0x80) ? USB_DIR_IN : USB_DIR_OUT;

return usb_control_msg(dev->udev, pipe, query, type, cs << 8,
unit << 8 | intfnum, data, size, timeout);
}

дальше ищешь откуда вызывается __uvc_query_ctrl
итд
до самого /dev/ ioctl выйдешь

anonymous
()
Ответ на: комментарий от anonymous

А мож мне перед ретурном всавить...
Пущай на каждый ioctl моё пишет :)

pavlinux
() автор топика
Ответ на: комментарий от pavlinux

Там сегодня за ночь, чё в ядре поменяли...

Эту багу выдают все камер-вьюеры

pavlinux
() автор топика
Ответ на: комментарий от pavlinux

павел, не хамите
вам ответ дали, показали куда и по каким шагам идти, а вы еще и троллите

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.