QUOTE (_galb_ @ Oct 17 2012, 14:11)

Linux-2.6.37, сборка linux-davinci
Как раз и интересно, как дальше драйвер разбирается с устройством. Как я вижу, стандартные запросы USB (GET_STATUS, CLEAR_FEATURE, ...) обрабатываются в функции composite_setup (библиотеки composite.c). Пока не понятно, где обрабатываются специфические для класса запросы (например, для TMC запрос GET_CAPABILITY). Ну и мехинизм посылки ответа хосту тоже не до конца понятен...
Может, конечно, я туплю, но пока что из всего, что прочитано, как надо сделать до меня не дошло

Не понятно что?: как устройство зарегистрировать в ситеме при его подключении и записать в регистры usb устройства его настройки?
Или как написать интерфейсные ф-ии драйвераа, к которым будет обращаться приложение?
Если необходимо писать в регистры устройства (например, я задавал частоту и разрешение кадров видеокамеры)
QUOTE
3. Для инициализации камеры послать управляющие посылки (Vendor Request)
(IN UCHAR Request, IN USHORT Value, IN USHORT Index)
0x0A, 0x01, 0x0F
0x0A, 0x03, 0x0F
0x0A, 0x01, 0x0F
0x0A, 0x00, 0x60
0x0A, 0x01, 0x02
Задержка в 2 мс.
0x0A, 0x15, 0x0F
4. Включить камеру на передачу кадров по Pipe: 1 Type: BLK
0x0A, 0x1F,0x0F;
5. Принимать кадры по Pipe: 1 (Bulk Read) (MaxPktSize: 0x200)
6. Выключить камеру после окончания приема.
0x0A, 0x1D, 0x0F
CODE
static int vec135_cmd_tx(struct usb_vec135 *vec135, unsigned short req, unsigned short value, unsigned short index)
{int ret = usb_control_msg (vec135->udev, usb_sndctrlpipe(vec135->udev, 0), req,
USB_DIR_OUT | USB_TYPE_VENDOR, value, index, NULL, 0, 5000);
if (ret < 0)
printk("%s> error: returned %d for 0x%x 0x%x 0x%x\n", __FUNCTION__, ret, req, value, index);
else
printk("%s> req 0x%02x 0x%02x 0x%02x\n", __FUNCTION__, req, value, index);
return ret;
}
static int vec135_init(struct usb_vec135 *vec135) {
vec135_cmd_tx( vec135, 0x0A, 0x01,0x0F);
vec135_cmd_tx( vec135, 0x0A, 0x03,0x0F);
vec135_cmd_tx( vec135, 0x0A, 0x01,0x0F);
vec135_cmd_tx( vec135, 0x0A, 0x60,0x00);
vec135_cmd_tx( vec135, 0x0A, 0x00,0x60);
vec135_cmd_tx( vec135, 0x0A, 0x01,0x02);
msleep(200);
vec135_cmd_tx( vec135, 0x0A, 0x15, 0x0F);
return 0;
}