LINUX.ORG.RU

[usb-dev] не работает usb_control_msg


0

0

Пишу драйвер для мышки, реверс-инженерю их протокол отслеживая пакеты между драйвером Windows и мышкой, программкой HHD USB Monitor.

Небольшая часть протокола уже расшифрована. Пытаюсь имитировать пакеты отправляемые оригинальной программкой.

Первый пакет такой: C4 02 00 00 00 00 08 00
Дополнительная информация:
URB_FUNCTION_CLASS_INTERFACE
Recipient: Interface
Request Type: Class
Direction: Host->Device
Request: 0x9 (Unknown)
Value: 0x300
Index: 0x0
Length: 0x8
Pipe Handle: 0x350be40

В ответ должно приходить: 21 09 00 03 00 00 08 00
URB_FUNCTION_CONTROL_TRANSFER

Отправляю так:

int ret;
ret = usb_control_msg(handle, USB_TYPE_CLASS | USB_RECIP_INTERFACE,  USB_REQ_SET_CONFIGURATION, 0x300, 0x0, (char *) buf, 0x8, TIMEOUT);
if (ret != 8) {
  perror("Error writing to USB device");
  printf("%d\n", ret);
  return 1;
}

В ответ получаю Device or resource busy (-16).

USB_TYPE_CLASS | USB_RECIP_INTERFACE - этот момент меня смущает, попробовав разные варианты можно получать Broken pipe (-32) или Inappropriate ioctl for device (0).

Но если взять USB_TYPE_STANDARD | USB_RECIP_DEVICE, то проходит без ошибок, но массив байт не меняется.

★★★

1) C4 02 00 00 00 00 08 00 - это пакет который посылает Хост?

2) 21 09 00 03 00 00 08 00 - это то что должно приходить в ответ от устройства?

Судя по коду ты пытаешься послать 2?

USB_TYPE_STANDARD | USB_RECIP_DEVICE - получится почти стандартный SET_CONFIGURATION поэтому ошибки нет

Проблема в том, что 21 посланное хостом в bmRequestType не подразумевает получение данных с устройства и в ответ ничего не придет.

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

>1) C4 02 00 00 00 00 08 00 - это пакет который посылает Хост?

2) 21 09 00 03 00 00 08 00 - это то что должно приходить в ответ от устройства?

Да, именно так.

Судя по коду ты пытаешься послать 2?

Почему только 2? В buf у меня массив байт - C4 02 00 00 00 00 08 00.

USB_TYPE_STANDARD | USB_RECIP_DEVICE - получится почти стандартный SET_CONFIGURATION поэтому ошибки нет

То есть это совсем не то?

И еще, я использую USB_REQ_SET_CONFIGURATION потому что в типе пакета Request = 0x9.

Проблема в том, что 21 посланное хостом в bmRequestType не подразумевает получение данных с устройства и в ответ ничего не придет.

Ладно бы не приходило, так ведь девайс еще и упирается.

Может не использовать в типе 21, в lomoco (Logitech Mouse Control) использовали USB_TYPE_VENDOR | USB_ENDPOINT_IN, но так у меня тоже не работало.

И еще, может проигнорировать Request 0x9 (USB_REQ_SET_CONFIGURATION) и использовать какой то другой?

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

ret = usb_control_msg(handle, 0xc4, 0x02, 0x00, 0x00, (char *) buf, 0x8, TIMEOUT);

Хост пошлет C4 02 00 00 00 00 08 00; Так как старший бит в bmRequestType выставлен, то в ответ он рассчитывает получить от устройство пакет размером до 8 байт(wLength), видимо это будет 21 09 00 03 00 00 08 00.

Вместо 0xc4 можно USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_PORT, а 0x02 как bRequest в спецификациях не оговорено.

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

>ret = usb_control_msg(handle, 0xc4, 0x02, 0x00, 0x00, (char *) buf, 0x8, TIMEOUT);

Не помогло, выдает Broken pipe.

А почему 0x00 как value вместо 0x300? Хотя все равно в обоих вариантах не работает.

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

>А почему 0x00 как value вместо 0x300? Хотя все равно в обоих вариантах не работает.

ну чтобы хост отправил пакет C4 02 00 00 00 00 08 00 а не C4 02 00 03 00 00 08 00

У меня в исходниках следующий прототип для usb_control_msg() - он по крайней мере не совпадает с твоим :) extern int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *data, __u16 size, int timeout);

В пакете C4 02 00 00 00 00 08 00, который должен послать хост RequestType 0xc4 Request 0x02 Value 0 Index 0 Length 0x08

Тебе надо посмотреть реализацию/прототип usb_control_msg() у тебя и правильно передать аргументы.

Я предполагал, что RequestType у тебя должно было быть 2-м аргументом, судя по твоему коду.

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

Если все правильно переданно, то это скорее всего означает, что устройство в том состоянии, в котором оно находится на момент получения комманды считает эту комманду ошибочной.

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

Мой прототип из /usr/include/usb.h:

int usb_control_msg(usb_dev_handle *dev, int requesttype, int request, int value, int index, char *bytes, int size, int timeout);

В пакете C4 02 00 00 00 00 08 00, который должен послать хост RequestType 0xc4 Request 0x02 Value 0 Index 0 Length 0x08

Я предполагал, что RequestType у тебя должно было быть 2-м аргументом, судя по твоему коду.

Да, все верно.

TIMEOUT у меня = 0x1000, если это имеет значение.

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

В общем все неправильно. Не нужно получать данные от устройства в ответ.
Видимо «21 09 00 03 00 00 08 00» - это какая то контрольная последовательность сигнала в USB, она всегда одинаковая на все запросы, скорее всего это даже не устройство ее отправляет.

Для того чтобы устройство что то отправило там совсем другой вызов, а именно:
000008: Class-Specific Request (DOWN), 15.01.2010 11:17:08.581 +0.0
Destination: Interface, Index 0
Reserved Bits: 34
Request: 0x1
Value: 0x300
Get 0x8 bytes from the device

Какой requesttype тогда нужно использовать если не требуется принимать данные в ответ, 0x21 как и было? И какой request?

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

Попробуй кинуть более подробный лог передачи интересующих тебя пакетов, обязательно подряд, лучше всего с начала.

Тогда скорее всего я смогу что-нибудь еще сказать.

anonymous
()

У меня busy обычно значило, что устройство занято каким-то драйвером. А что за мышка, что надо драйвер писать, она не hid, что ли?

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

>Попробуй кинуть более подробный лог передачи интересующих тебя пакетов, обязательно подряд, лучше всего с начала.

http://slil.ru/28492276

Это лог процесса чтения параметров, это самые первые команды, девайс точно должен их принимать.

У меня busy обычно значило, что устройство занято каким-то драйвером.

Может выгружать usbhid модуль, или как его там? Если конечно не заругается что device busy и не даст выгрузить.

А что за мышка, что надо драйвер писать, она не hid, что ли?

CM Storm Sentinel Advance. Она hid конечно. Но дополнительные настройки можно делать только через программку под windows.

Можно конечно настроить ее из windows и забыть, но протокол несложный и если удастся отправить хотя бы одну команду, то можно будет написать аналог той программки под linux.

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

>Но дополнительные настройки можно делать только через программку под windows.

Так он настройки не через hid кидает? В теории через hid, я бы так делал. А если так, то ты можешь из юзерспейса все в хид кинуть, программкой. Можно /dev/hidrawN

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

Драйвер (usbhid в данном случае) можно отцепить от устройства программно, а не через модпроб. Для этого надо записать в /sys/bus/usb/devices/твой_девайс/driver/unbind bus_id твоего девайса. Можешь глянуть usbip здесь http://www.google.com/codesearch/p?hl=en#DgcR_1UXZJo/svn/tcos/trunk/usbip/src...

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

То есть еще раз.

1. Найди пакеты настроек, и разберись, через hid они идут, или нет.

2. Если через hid, то и общайся с ним через hid, libhid например, или ioctl от hid.

3. Если таки не через hid, то детач драйвер, шлешь usb_control_msg или еще что надо и потом обратно аттач драйвер.

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

>А можно на pastebin, а то как то рекламу не хочется смотреть

Он в html. Там капчи нет, могу еще куда нибудь залить.

Посмотри плиз а то я точно не знаю через hid или нет шлет. Пока не знаю с какой стороны подступится.

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

В пункте 2 еще можно через /dev/hidrawN, но это только с ядрами поновей.

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

>3. Если таки не через hid, то детач драйвер, шлешь usb_control_msg или еще что надо и потом обратно аттач драйвер.

Если unbind сделать то пишет No route to host (-113)

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

Посмотрел вкратце. Вначале там идет обычная энумерация и обмен дескрипторами, оно тебе не надо, это линукc и сам сделает. А потом 2 типа пакетов.

21 09 00 03 00 00 08 00 - это HID get report, используется для получения данных.

Девайс отвечает восемью байтами

DF 00 00 00 00 00 08 00 ну и другими. это скорее всего координаты и кнопки. Чтобы понять, что именно -нужно смотреть HID descriptor. Раньше его lsusb показывал, от рута и отцепленными драйверами. Но его периодически ломают, так что не гарантирую.

Второй пакет

A1 01 00 03 00 00 08 00 это HID set report. Что то шлют на девайс, а что, непонятно. Типа такого DF 47 00 00 00 00 08 00. Но оно меняется. Можно опять же по hid descriptorу догадаться что это.

Больше ничего интересного пока не нашел.

vga ★★
()
Ответ на: комментарий от Lucky1

А блин, точно! Я лоханулся. Его надо анбиндить не от юсб, а от юсбхид. По образу и подобию. В sys/bus/hid/devices/{устройство}/driver/unbind есть. Вот только что туда писать, я не помню. наверное {устройство}.

vga ★★
()
Ответ на: комментарий от Lucky1

Еще можно пересобрать ядро c CONFIG_HID_DEBUG и usbhid модулем. Тогда если запустить usbhid с параметром debug=2 он весь хидовый трафик распарсит и в лог кинет. Хотя не уверен, что оно тебе надо.

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

Вот этот пакет, который ты пытаешься отправить -

A1 01 00 03 00 00 08 00 C4 02 00 00 00 00 08 00

- это хид сет репорт. И кидать его можно через хид. В теории даже через hidraw. write(fdhidraw, «\x03\xC4\x02\x00\x00\x00\x00\x08\x00»)

Но я все так же не вижу, чем тебе это поможет, оно не похоже на настройки. Или это все таки настройки?

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

>Его надо анбиндить не от юсб, а от юсбхид.

Да, так лучше, больше не пишет device busy, но выдает broken pipe.

- это хид сет репорт. И кидать его можно через хид. В теории даже через hidraw. write(fdhidraw, «\x03\xC4\x02\x00\x00\x00\x00\x08\x00»)

У меня 4 /dev/hidrawX файла. При отправке в первые 2 ничего не происходит. А при отправки в последние 2 выдает Broken pipe.

И почему первый байт 0x03?

Но я все так же не вижу, чем тебе это поможет, оно не похоже на настройки. Или это все таки настройки?

Да, это настройки. Это именно те данные которые получает программа из девайса при запуске.

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

21 09 00 03 00 00 08 00 - это HID get report, используется для получения данных.

Не может это быть GET Report - bmRequestType 0x21 означает запись в устройство, а не чтение.

Не поленился на этот раз и залез в DCD HID:

bmRequestType 10100001
bRequest GET_REPORT
...
то есть все наоборот:

21 09 00 03 00 00 08 00 - set report(посылает 8 байт), а A1 01 00 03 00 00 08 00 - get report(получает 8 байт) судя по логу.

По логу происходит следующее на SET REPORT DF Number ..., следующему за ним GET REPORTу устройство отвечает Number ... Время от времени устройству посылаются парные команды SET REPORT C4 ... с разным содержимым.

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

>21 09 00 03 00 00 08 00 - set report(посылает 8 байт), а A1 01 00 03 00 00 08 00 - get report(получает 8 байт) судя по логу.

И как тогда реализовать set report?

Делаю так:
ret = usb_control_msg(handle, 0x21, 0x09, 0x300, 0x00, (char *) buf, 0x8, TIMEOUT);
Думаю это и есть тот самый 21 09 00 03 00 00 08 00.

Пишет Device or resource busy. Хотя даже hid unbind сделан.

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

О блин, это пока логи смотрел все попутал. Конечно же наоборот. /usr/include/linux/hid.h #define HID_REQ_GET_REPORT 0x01 #define HID_REQ_SET_REPORT 0x09

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

О блин, это пока логи смотрел все попутал. Конечно же наоборот.

/usr/include/linux/hid.h

#define HID_REQ_GET_REPORT 0x01

#define HID_REQ_SET_REPORT 0x09

vga ★★
()
Ответ на: комментарий от Lucky1

0x300 - должно быть 3, там байты наоборот. И это есть тот самый 3 в hidraw, про который ты спрашивал

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

>И еще, поставь себе usbmon http://people.redhat.com/zaitcev/linux/usbmon-5.4.tar.gz - будешь видеть весь трафик и ошибки.

Отличная программка, спасибо. На сайте http://www.linux-usb.org/USBMon/ тоже лежит usbmon, но он странный какой то, недоделанный и нерабочий, на джаве.

Мне почему то кажется что я пишу не в то устройство. Проблема в том что есть несколько логических устройств. Не знаю как выделить нужное, просто ищу с нужным мне productid.

usbmon -i usb3 - так я вижу свои пакеты, но не вижу пакетов передачи координат если подвигать мышкой.

usbmon -i usb4 - так я вижу пакеты мышки, но не вижу своих.

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

Ну правильно, так и надо, по VendorID:ProductID. Можно еще не искать, а посмотреть вывод lsusb

Вот у меня мышь

Bus 005 Device 017: ID 046d:c019 Logitech, Inc. Optical Tilt Wheel Mouse

соответсвенно устройство

/dev/bus/usb/005/017

А можно еще правило для удева сделать, и назвать ее просто /dev/my_super_mouse

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

>Ну правильно, так и надо, по VendorID:ProductID. Можно еще не искать, а посмотреть вывод lsusb

Ну я не вручную ищу. Перебираю все девайсы программно пока не встречу нужные VendorID, ProductID.

Просто под windows мышку видно как composite device, в составе которого HID-контроллер, HID-клавиатура, HID-мышка.

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

Ага, я уже догадался, ты через libusb работаешь. А то я обычно через ioctlи. Кинь сюда вывод

lsusb -v -d твой_вендор:

от рута

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

>Ага, я уже догадался, ты через libusb работаешь. А то я обычно через ioctlи. Кинь сюда вывод

Да мне все равно, хоть как бы реализовать. Просто основной код взят из lomoco, а там через libusb сделано.

$ sudo lsusb -v -d 12cf:
Bus 004 Device 002: ID 12cf:0155  
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x12cf 
  idProduct          0x0155 
  bcdDevice           12.02
  iManufacturer           1 DEXIN Corporation
  iProduct                2 CM STORM SENTINEL GAMING MOUSE
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           59
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      2 Mouse
      iInterface              0 
      ** UNRECOGNIZED:  09 21 11 01 00 01 22 70 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              0 
      ** UNRECOGNIZED:  09 21 11 01 00 01 22 56 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval              10
Device Status:     0x0002
  (Bus Powered)
  Remote Wakeup Enabled
Lucky1 ★★★
() автор топика
Ответ на: комментарий от Lucky1

Непонятно тогда, что такое в виндовсе композит. Тут ровно одно устройство (boot interface не считается, он биосом юзается).

Но таки да, судя по всему ты не с тем устройством общаешься, потому что это таки на шине 4, как ты и говорил, что на -i usb4 видишь пакеты мышки.

Даже не знаю, что-то в твоем коде значит, раз твои пакеты на usb3

И да, жаль, что не видно хид-дескриптора, раньше lsusb показывал его, а теперь сломали что-то - вот это от него ошметки

** UNRECOGNIZED: 09 21 11 01 00 01 22 56 00

Его можно в принципе из usbmonа выцепить, может прояснил бы с форматами пакетов что-нибудь. Но я так сходу не скажу, чем его распарсить.

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

Непонятно тогда, что такое в виндовсе композит. Тут ровно одно устройство (boot interface не считается, он биосом юзается).

Не совсем так, если посмотреть в sysfs:

$ ls -l /sys/bus/hid/devices/
итого 0
lrwxrwxrwx 1 root root 0 2010-01-16 01:45 0003:046D:C218.0003 -> ../../../devices/pci0000:00/0000:00:1a.2/usb5/5-1/5-1:1.0/0003:046D:C218.0003
lrwxrwxrwx 1 root root 0 2010-01-16 01:45 0003:046D:C316.0004 -> ../../../devices/pci0000:00/0000:00:1a.2/usb5/5-2/5-2:1.0/0003:046D:C316.0004
lrwxrwxrwx 1 root root 0 2010-01-16 01:45 0003:046D:C316.0005 -> ../../../devices/pci0000:00/0000:00:1a.2/usb5/5-2/5-2:1.1/0003:046D:C316.0005
lrwxrwxrwx 1 root root 0 2010-01-16 01:45 0003:12CF:0155.0001 -> ../../../devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/0003:12CF:0155.0001
lrwxrwxrwx 1 root root 0 2010-01-16 01:45 0003:12CF:0155.0002 -> ../../../devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.1/0003:12CF:0155.0002

Последние две строчки (там где есть 12CF:0155 - это vID:pID): первая это мышка, а вторая «клавиатура» в мышке. Проверено поочередным unbind-ом сначала одного девайса а потом второго.

Просто можно биндить кнопки клавиатуры на мышку, поэтому есть такая «виртуальная клавиатура».

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

Ага, тогда понятно, они похоже через hid_usage сделали. Так а почему тогда программа на шину 3 идет, не нашел?

Можно и через libhid попробовать. Вот их пример http://boxster.ghz.cc/projects/libhid/browser/trunk/test/test_libhid.c и вот статья http://www.linuxjournal.com/article/8145. Правда она в твоем случае ничего не дает, потому что все, что она полезного предоставляет - там унбинд реализован. Ну и еще дескриптор она может распарсить и показать.

Все таки дескриптор бы хотелось увидеть. Пишут, что lsusb сломался в убунту 9.10, в 9.04 работал. http://ubuntuforums.org/showthread.php?t=1310155. Можно с лайвсд попробовать глянуть на него.

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

Так а почему тогда программа на шину 3 идет, не нашел?

Мои пакеты как я понимаю идут на usb3, usb6 и usb7 сразу.

Вот они:

4104c780 0.954441 S Ci:3:001:0 s a3 00 0000 0001 0004 4 <
4104c780 0.954447 C Ci:3:001:0 0 4 = 00010000
4104c780 0.954448 S Ci:3:001:0 s a3 00 0000 0002 0004 4 <
4104c780 0.954452 C Ci:3:001:0 0 4 = 00010000
37be0540 0.954453 S Ii:3:001:1 -:128 2 <
37be0540 3.753223 C Ii:3:001:1 -2:128 0

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

Понять, к кому идет пакет можно по 3:001:0 - это bus:device:endpoint на 003 001 у тебя хаб скорее всего.

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

Все таки дескриптор бы хотелось увидеть. Пишут, что lsusb сломался в убунту 9.10, в 9.04 работал.

Вывод с лайвсиди 9.04:

Bus 004 Device 002: ID 12cf:0155  
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x12cf 
  idProduct          0x0155 
  bcdDevice           12.02
  iManufacturer           1 DEXIN Corporation
  iProduct                2 CM STORM SENTINEL GAMING MOUSE
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           59
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      2 Mouse
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     112
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      86
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval              10
Device Status:     0x0002
  (Bus Powered)
  Remote Wakeup Enabled

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

>> Report Descriptors: > ** UNAVAILABLE **

А жаль, была надежда, что они там будут.

Есть шанс как то расшифровать дескрипторы? Может быть из win каким нибудь ПО?

Хочу попробовать через libhid реализовать.

http://svn.debian.org/wsvn/libhid/trunk/test/test_libhid.c - тут описано как получить дескриптор из lsusb, но у меня этих полей нет, поэтому не могу хотя бы что то отправить в девайс.

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

Нет, его там скорее всего просто нет. Поскольку мышка стандартная, а ей дескриптор не обязателен. Поэтому производитель и не стал его делать, а команды он посылает сам, потому что знает какие.

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

http://paste.org.ru/?q3pj4q - вот что удалось выцепить о HID дескрипторе из виндовой утилитки. Там по двум «логическим» устройствам сразу. Это может чем то помочь? Хотя я сомневаюсь.

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

Правильно сомневаешься, вот это похоже описание пакета.

Usage Page: 65280 (Unknown) Usage: 128 (Unknown) Report Size: 8 Report Count: 8 Logical Minimum: 0 Logical Maximum: 255 Feature: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)

То есть они описали похоже свои 8 байт как массив из 8 байт. Ничего к пониманию оно не добавило, к сожалению.

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