Запуск сканеров штрих-кода работающих через COM порт или USB-COM на примере CIPHERLAB 1000.

Added by Николай Гончаров over 14 years ago

Документация по запуску сканера штрих-кода ChiperLab 1000 USB-VCOM в linux

Дано: Терминал на линуксе + сканер штрих кода, подключен к серверу с оффтопиком и 1С 7.7

Данное устройство представляет собой 2 девайса: переходник USB->COM и собственно сканер.

Задача 1: Подключение на уровне ядра
Вывод по lsusb:

Bus 003 Device 002: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x Composite Device

В ядре:

Device Drivers  --->
    [*] USB support  --->
        <M>   USB Serial Converter support  --->
            <M>   USB CP210x family of UART Bridge Controllers

Пересобрать ядро.
Если все прошло нормально, то dmesg выдаст:

usb 3-1: new full speed USB device using uhci_hcd and address 12 
usb 3-1: configuration #1 chosen from 1 choice 
cp2101 3-1:1.0: cp2101 converter detected 
usb 3-1: reset full speed USB device using uhci_hcd and address 12 
usb 3-1: cp2101 converter now attached to ttyUSB0

Теперь у нас есть устройство /dev/ttyUSB0 и ссылка на него /dev/serial/by-id/usb-Silicon_Labs_CIPHERLAB_308_USB-to-RS232_Interface_Converter_02140002276B-if00-port0

Задача 2: Передать данные из com порта в окружение пользователя и rdesktop.

Установка пакетов:
emerge -av xvkbd logserial
Также будет нужен работающий udev.

Создаем нужные файлы:
1) трубу fifo:
mkfifo /etc/barcode

2) Ссылку на .Xauthority - xvkbd требует для общения с иксами. Хотя наверное правильнее было бы просто запускать его от прав локального пользователя.
ln -s /home/local/.Xauthority /root/.Xauthority

3) Скрипт:

/etc/barcode.sh 
#!/bin/bash 
killall  -9 logserial xvkbd 2>/dev/null >/dev/null 
DISPLAY=:0.0 start-stop-daemon --start --background --stdout /var/log/barcode-1.log --exec /usr/bin/xvkbd     -- -xsendevent -file /etc/barcode 
start-stop-daemon --start --background --exec /usr/bin/logserial -- -t /dev/serial/by-id/usb-Silicon_Labs_CIPHERLAB_308_USB-to-RS232_Interface_Converter_02140002276B-if00-port0  -f /etc/barcode

4) И правило udev

/etc/udev/rules.d/90-cipher.rules
SUBSYSTEMS=="usb-serial", ENV{ID_PORT}="$attr{port_number}" 
IMPORT="path_id" 
IMPORT="usb_id --export %p" 
ENV{ID_SERIAL}=="", GOTO="persistent_serial_end" 
ACTION=="add", SUBSYSTEMS=="usb-serial", ENV{ID_MODEL_ID}=="ea60",ENV{ID_VENDOR_ID}=="10c4",RUN+="/etc/./barcode.sh " 
LABEL="persistent_serial_end" 

(возможно правило может быть и короче - не тестил)

Результат:
При подключении сканера к USB порту udev запускает скрипт barcode.sh Оттуда стартуют xvkbd, который читает из трубы и передает в иксы, и logserial - который читает из COM порта и в трубу пишет. Результат - в иксы сыпется то что прочитал сканер. Можно уточнить вывод для xvkbd указав ему через "-window" окно rdesktop.

Удачного пик-"4041485047773"пик"30656750 96DNM33L312"-анья.

Прошу сообщество оценить/обругать, помочь выявить подводные камни. После этого думаю можно будет внести в вики.


Replies (2)

RE: Запуск сканеров штрих-кода работающих через COM порт или USB-COM на примере CIPHERLAB 1000. - Added by Alexander Tratsevskiy over 14 years ago

Спасибо за описание!
На новом сайте форум будет заменять собой wiki. Здесь есть глобальный полнотекстовый поиск по всем разделам, в том числе и по форуму. Вы всегда будете получать обратную связь.
В ближайшее время мы планируем запустить блоги, для анонсов и подобных статей.

(1-2/2)

Thank you!