LINUX.ORG.RU

Тачскрин с проблемными дескрипторами

 , ,


0

1

USB тачскрин передает с дескриптором только одну конфигурацию с интерфейсом класса 0x0A (CDC Data). При этом CDC дескриптор отсутствует и cdc-acm драйвер не цепляется:

Bus 001 Device 003: ID 0547:2001
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x0547
  idProduct          0x2001
  bcdDevice            2.00
  iManufacturer           1 
  iProduct                2 
  iSerial                 3 00000000001A
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0020
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xc0
      Self Powered
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0
      bInterfaceProtocol      0
      iInterface              0
  Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
      Transfer Type            Bulk
      Synch Type               None
      Usage Type               Data
    wMaxPacketSize     0x0040  1x 64 bytes
    bInterval               0
  Endpoint Descriptor:
    bLength                 7
    bDescriptorType         5
    bEndpointAddress     0x81  EP 1 IN
    bmAttributes            2
      Transfer Type            Bulk
      Synch Type               None
      Usage Type               Data
    wMaxPacketSize     0x0040  1x 64 bytes
    bInterval               0
Device Status:     0x0001
  Self Powered

Устройство принимает драйвер usbserial и передает bulk пакеты по 64 байта в интерфейс ttyUSB0, но те не содержат события касания, либо разобрать их не предоставляется возможным. Сам разработчик устройства в свое время написал драйвер преобразующий устройство в HID и обрабатывающий события касания при помощи hidkmdf.sys, Win7 DDK driver и Microsoft Multi Touch HID Driver.

Как завести эту железку на Ubuntu?



Последнее исправление: barcodeine (всего исправлений: 4)
  1. Самое простое — написать юзерспейс-костыль, который выделяет новый pty, общается с endpoint’ами устройства через libusb, и просто пересылает данные туда-сюда.
  2. Пропатчить дескриптор на уровне драйвера
  3. Пропатчить дескриптор на уровне eBPF-хуков
  4. Посмотреть quirk’и драйвера CDC-ACM, там есть что-то похожее:
if (control_interface == data_interface) {
		/* some broken devices designed for windows work this way */
		dev_warn(&intf->dev,"Control and data interfaces are not separated!\n");
  1. Пропатчить драйвер cdc-acm под ваш случай

Глазами пробежался по коду cdc-acm, вроде бы ваш десктоптор под особые случаи не попадает, придётся патчить или код, или дескриптор.

ValdikSS ★★★★★
()

Сам разработчик устройства в свое время написал драйвер преобразующий устройство в HID и обрабатывающий события касания при помощи hidkmdf.sys, Win7 DDK driver и Microsoft Multi Touch HID Driver.

Запишите трафик USB в Windows с помощью Wireshark + usbcap, посмотрите, как драйвер с ним работает. Возможно, там нужна magic-настройка или какой-то особый поллинг командами.

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

userspace костыль написан, в нем не хватает ключевого звена: парсера bulk сообщений, поскольку сообщения не разобрать. USB трафик записал в Wireshark: пустой и с касаниями. Выглядит это добро вот так: https://drive.google.com/file/d/1cFz60Y92Pnl8Zy14aohHcYfHrCmySDb4/view?usp=drive_link

barcodeine
() автор топика

Сам разработчик устройства в свое время написал драйвер преобразующий устройство в HID

Варианты

  1. Пытать разработчика
  2. Гидру в руки и реверсить драйвер
  3. В Job
iSage ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.