Автор Тема: Подключение сканера штрих-кода в режиме эмуляции последовательного порта  (Прочитано 6180 раз)

Оффлайн VadimZelenin

  • Завсегдатай
  • *
  • Сообщений: 116
    • МИС Самсон
Добрый день,
нынче мне принесли usb сканер штрих-кода kraftway KLS-02D (соответствует Motorola Symbol DS4208) и попросили убедиться что он работает с нашим ПО. Наше ПО требует, чтобы сканер был подключен в режиме эмуляции последовательного порта. Оказалось, что в alt linux 7 (3.10.33-std-def-alt2 x86_64) для такого сканера используется драйвер hid-generic а не symbolserial:

[447900.260560] usb 1-1.5: new full-speed USB device number 24 using ehci-pci
[447900.356070] hid-generic 0003:05E0:0600.0017: hiddev0,hidraw1: USB HID v1.10 Device [Symbol Technologies, Inc, 2008 Symbol Bar Code Scanner] on usb-0000:00:1a.0-1.5/input0

и, соответственно, /dev/ttyUSBn не создаётся.

Прошу подсказки - как подключить сканер в требуемом режиме.

P.S.
Проверил у коллеги - в alt linux 6 (32 bit) всё работает как часы.
« Последнее редактирование: 08.04.2014 17:31:39 от VadimZelenin »

Оффлайн ArtCh

  • Давно тут
  • **
  • Сообщений: 26
Я недавно подключал сканеры штрих кодов Motorola DS 4208  к компам на своем предприятии, на W7.
Програмирование сканера осуществляется с помощью штрих кодов из документации, сканировал нужный ШК и сканер пикнул и перешел в режим эмуляции клавиатуры, другой ШК считал и сканер стал сигналы подавать тише.
Каждый ШК програмирует нужную функцию. Во как.
« Последнее редактирование: 27.03.2014 06:46:40 от ArtCh »

Оффлайн VadimZelenin

  • Завсегдатай
  • *
  • Сообщений: 116
    • МИС Самсон
Програмирование сканера осуществляется с помощью штрих кодов из документации
Это всё сделано, я жалуюсь на то, что ядро шестёрки использует ожидаемый модуль ядра и всё работает как запланировано - создаётся обычный в этом случае /dev/ttyUSB0. Тогда как ядро семёрки по неведомым мне причинам для этого устройства загружает другой модуль - и в результате вместо последовательного порта я имею hid устройство.

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

Оффлайн VadimZelenin

  • Завсегдатай
  • *
  • Сообщений: 116
    • МИС Самсон
Собрал и приложил выдачу dmesg, lsusb, udevadm monitor
и egrep '(symbolserial|usbhid)' <modules.alias
 для p6 и p7.

что-то мне кажется, что по MODALIAS в обоих случаях подходят и usbhid и symbolserial.

Как указать ядру что в данном случае нужно предпочитать один модуль другому?

Оффлайн VadimZelenin

  • Завсегдатай
  • *
  • Сообщений: 116
    • МИС Самсон
Оказалось, что usbhid можно попросить игнорировать заданное устройство.
Для этого в /etc/modprobe.d/ нужно создать файл (скажем, usbhid.conf) и вписать в него строку
options usbhid quirks=0x05e0:0x0600:0x0004
Здесь первые два параметра - id вендора и устройства, а третий - 0x0004 (== HID_QUIRK_IGNORE) - признак того, что usbhid должен игнорировать это устройство.

Но оказалось, что при таком варианте проявляется ошибка в symbolserial.

Выявленную ошибку описал в https://bugzilla.altlinux.org/show_bug.cgi?id=29976


« Последнее редактирование: 08.04.2014 18:24:11 от VadimZelenin »

Оффлайн VadimZelenin

  • Завсегдатай
  • *
  • Сообщений: 116
    • МИС Самсон
«тихо сам с собою я веду беседу» :)
symbolserial.c пропатчил, см. багтрекер.

На первый взгляд всё работает - сканер успешно передаёт данные в программу.

Пришло время просить пропатчить hid-core.c - добавить этот сканер в  hid_ignore_list.

upd: https://bugzilla.altlinux.org/show_bug.cgi?id=29989
« Последнее редактирование: 11.04.2014 13:36:24 от VadimZelenin »