LINUX.ORG.RU
ФорумAdmin

Как считать любые данные с usb порта?

 , , , ,


1

2

Привет всем!

Имеется аппарат считыватель монет. На нем стоит ubuntu 8 и программа k2 для считывания наличных.

Нужно сделать оплату онлайн, но на этой версии проблемы с сертификатами и стоит firefox версии 3.

Я установил на новую убунту chroot от ubuntu 8 (потому что k2 имеет проблемы с зависимостями и их много), но программа не определяет подключения.

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

Если не понятно, то объясню и поправлю топик

В /dev/ имени ttyUSB нет Есть знание об usb имени

Bus 002 Device 002: ID ffff:0001

И установленые из программы правила для udev

sudo vim /etc/udev/rules.d/65-k2.rules

KERNEL=="ttyUSB*", SYSFS{idVendor}=="ffff", SYSFS{idProduct}=="0001", SYSFS{product}=="Liskom K2pro"  SYMLINK+="k2ldr-usb"
KERNEL=="ttyUSB*", SYSFS{idVendor}=="ffff", SYSFS{idProduct}=="0001", SYSFS{product}=="Liskom K2 Pro" SYMLINK+="k2pcb-usb"

KERNEL=="event[0-9]*", SYSFS{idVendor}=="0dfc", SYSFS{idProduct}=="0001", SYMLINK+="k2gui-touchscreen-event"
KERNEL=="mouse[0-9]*", SYSFS{idVendor}=="0dfc", SYSFS{idProduct}=="0001", SYMLINK+="k2gui-touchscreen-mouse"

KERNEL=="event[0-9]*", SYSFS{idVendor}=="0df9", SYSFS{idProduct}=="0001", SYMLINK+="k2gui-touchscreen-event"
KERNEL=="mouse[0-9]*", SYSFS{idVendor}=="0df9", SYSFS{idProduct}=="0001", SYMLINK+="k2gui-touchscreen-mouse"

SUBSYSTEM=="usb", KERNEL=="lp[0-9]*", SYSFS{idVendor}=="0924", SYSFS{idProduct}=="420c", SYMLINK+="k2gui-printer"
SUBSYSTEM=="usb", KERNEL=="lp[0-9]*", SYSFS{idVendor}=="04e8", SYSFS{idProduct}=="341d", SYMLINK+="k2gui-printer"

ENV{DEVTYPE}=="partition", SUBSYSTEMS=="usb", SYMLINK+="k2gui-storage-%k"

NAME=="usbdev*", MODE="0666"
NAME=="bus/usb/*", MODE="0666"

k2gui-printer - не определяется в системе /dev :(((



Последнее исправление: SaintAnd (всего исправлений: 2)

В интернете я вашей шняги (к2gui-printer) не нашёл. Рассказывайте по шагам, что такое К2, когда он работал в последний раз целиком (на какой системе).

Выглядит так, как будто без установленного драйвера от производителя работать не должно

PPP328 ★★★★★
()
Последнее исправление: PPP328 (всего исправлений: 1)

Сделать оплату онлайн монетами — огонь цель.

Тебе нужно вернуть как было, и поставить отдельно нормальный клип со свежей ОС, смотрящий в сеть. А с рухлядью говорящей через второй интерфейс.

t184256 ★★★★★
()

В /dev/ имени ttyUSB нет

Ну раз так, то ничего из удав-правил работать не будет. Смотрите, чем оно прикидывается. Вангую, что это не «настоящий» USB, а COM-порт (ttyACM0..9). То что оно подключается по USB ни о чем не говорит.

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

Скину ссылку на прогу deb https://drive.google.com/file/d/1K2Z_FXlw4aUr0ppqDUccKVAS1sm_apy3/view?usp=drive_link

и распакованный в zip https://drive.google.com/file/d/1XqxSBrSJH3J5uo4cM8JuW--GskugsiFK/view?usp=drive_link

На чрут https://drive.google.com/file/d/1CDox3tRW-oouFNjLrm5u_4JWe6VhoWN0/view?usp=drive_link

Запускаю таким образом

cd /media/user/CHROOT-ubuntu8/
sudo mount proc -t proc ./proc
sudo mount /sys -t sysfs ./sys
sudo mount --bind /dev ./dev/
sudo mount --bind /dev/pts ./dev/pts
sudo mount -o bind /tmp/ ./tmp/
sudo xhost +

sudo chroot ./
cd /opt/k2/
./k2gui
SaintAnd
() автор топика
Последнее исправление: SaintAnd (всего исправлений: 1)
Ответ на: комментарий от t184256

Вообще моя цель - сделать оплату как наличными, так и онлайн в браузере (сделать локальную страницу).

Но пока есть только вариант использовать старую прогу для наличных, и оплату онлайн в браузере…. А хотелось конечно чтобы налом можно было в браузере. Через php хочу это реализовать

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

Это программа (k2) написанная на python, работает с компортом скорей всего через (ftdi usb rs232), ftdi позволяет поменять idProduct и idVendor и т.д. То что это rs это точно. Если распаковать архив «data.tar.gz» там есть файл /etc/hal/fdi/policy/k2-touchscreen.fdi, если я правильно понимаю, он должен определятся в /dev как «k2gui-touchscreen-event». А в каталоге «opt» остальные потроха программы. Решение простое))) реверс-инжиниринг, надо узнать команды устройства, а это либо ревёрсить файлы они в bin формате, либо запускать устройство на старой ubuntu 8, разбирать устройство, смотреть его потроха на какой микросхеме работает устройство, брать логический анализатор, паяльник искать выводы uart и подпаиваться, надо понять какой у него протокол как оно общается с компьютером.

Ruslan76
()
Последнее исправление: Ruslan76 (всего исправлений: 1)
Ответ на: комментарий от Ruslan76

Может быть udev не правильно настроен?

Вот вывод udevadm monitor после отключения и подключения usb

KERNEL[5135.740358] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0 (usb)
KERNEL[5135.740449] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1 (usb)
KERNEL[5135.741458] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-2 (usb)
UDEV  [5135.826715] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0 (usb)
UDEV  [5135.831747] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1 (usb)
UDEV  [5135.850397] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-2 (usb)
KERNEL[5136.534324] add      /devices/parport0/ppdev0.0 (parport)
KERNEL[5136.536918] remove   /devices/parport0/ppdev0.0 (parport)
UDEV  [5136.539052] add      /devices/parport0/ppdev0.0 (parport)
UDEV  [5136.547529] remove   /devices/parport0/ppdev0.0 (parport)
KERNEL[5139.253382] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-2 (usb)
KERNEL[5139.261539] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0 (usb)
KERNEL[5139.261608] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1 (usb)
UDEV  [5139.280513] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-2 (usb)
UDEV  [5139.301503] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0 (usb)
UDEV  [5139.305966] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1 (usb)
KERNEL[5140.088741] add      /devices/parport0/ppdev0.0 (parport)
UDEV  [5140.093147] add      /devices/parport0/ppdev0.0 (parport)
KERNEL[5140.136824] remove   /devices/parport0/ppdev0.0 (parport)
UDEV  [5140.143698] remove   /devices/parport0/ppdev0.0 (parport)

SaintAnd
() автор топика
Последнее исправление: SaintAnd (всего исправлений: 1)
Ответ на: комментарий от SaintAnd

Честно, не знаю… , я бы начал с проверки выводов uart самого устройства, т.е залез бы в его потроха))) встал осциллографом на выводы Rx, Tx и посмотрел посылает ли устройство чего, какая у него внутрянка, в частности преобразователь USB-UART, на какой скорости оно работает в бодах например: 9600, 19200. И вообще тяжело чего-то сказать когда даже не представляешь как выглядит это устройство. Самое главное узнать какой там преобразователь USB-UART, если это FTDI 232 то на эту микросхему драйвера в Linux идут в ядре, их дополнительно ставить не нужно.

Ruslan76
()

Чтоб разобраться с этим устройством и программным обеспечением нужно обладать определёнными знаниями работы с компортом в linux (API интерфейс) man termios, немножко быть программистом (язык Си, Python), уметь читать bash скрипты т.к они запускают эту программу k2, немножко быть электронщиком: уметь обращаться с осциллографом или логическим анализатором. Короче много чего надо уметь…. Попробуй для начала удовлетворить все зависимости они описаны в файле data.tar.gz/control. Если, тех знаний которые я описал у тебя нет, то только чудо тебе поможет разобраться)))

Ruslan76
()
Последнее исправление: Ruslan76 (всего исправлений: 1)
Ответ на: комментарий от Ruslan76

Да, я бы первым делом этим и занялся, но беда в том, что помогаю человеку удалённо, который в этом не разбирается. Я уже читал эти файлы через «hexdump -C» и python файлы кажутся повреждёнными, но каким-то образом работают (наверное их пытались обфусцировать). Фотки этого устройства мне присылались, но понять удалось только, что это плата подключается по usb

Действительно нужен модуль для этого подключения, так как заходя в ubuntu 8 через режим восстановления, программа перестаёт работать.

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

Видимо речь о вендинговом автомате. У него внутри писюк с ubuntu 8, а снаружи тач, приёмник монет, принтер чеков. И все это подключено к писюку по usb.

но программа не определяет подключения.

Вот что значит эта фраза — загадка. Наверное программа не может найти нужные ей usb устройства. То ли /dev хоста не смонтирован в чрут, то ли правила udev не добавлены на хост. Правила udev кстати просто создают симлинки. Наверное программа пытается открыть как раз эти симлинки.

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

Да да, вендинговый автомат, забыл как назывался. Принтер не для чеков, а для распечатки. Для студентов в основном, для распечатки документов. В программе через флешку выбирают док и печатают через принтер.

Да про сим-линки - это правда. Он не видит устройство ttyusb0 и не может сделать этот сим-линк

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

Если я ставлю ubuntu 10, то уже прога ругается на зависимости, что ей нужен python 2.5, а 2.6 не нравится. И там целый «букет»… Пробовал сначала в новую систему их ставить, а потом понял, что там зависимости с системой уже будут конфликтовать, поэтому перешёл на chroot. Вот с LD_LIBRARY_PATH ещё мучался, но не удалось с ним на новой системе запустить прогу.

SaintAnd
() автор топика
Последнее исправление: SaintAnd (всего исправлений: 1)
Ответ на: комментарий от SaintAnd

Вам надо разобраться как это всё работает в оригинале, на Ubuntu 8.04. Какие там на писюке появляются устройства при подключении всей этой вендинговой перифирии, какими драйверами они обслуживаются, какие создаются симлинки и на что они указывают. Ваш приятель, имеющий доступ к вендинговому автомату, не может вам прислать вывод lsusb -vvt? По выводу команды будет понятно, какие USB-устройства подключены, какие у них интерфейсы (USB-устройства могут иметь несколько интерфейсов), каким драйвером обслуживается каждый интерфейс устройства, какие sysfs-ноды и dev-ноды соответствуют этим устройствам/интерфейсам.

Udev-правила похоже имеют устаревший формат. Насколько я понимаю на свежей системе SYSFS{} надо заменить на ATTRS{}.

Правила расчитаны видимо на разную вендинговую периферию:

  • приёмник налички: USB ffff:0001 product string «Liskom K2pro» и USB ffff:0001 product string «Liskom K2 pro» (это видимо устройства производства http://liskom.ru/about/info.html). Для первого устройства создаётся симлинк /dev/k2ldr-usb, для второго создаётся симлинк /dev/k2pcb-usb. Может быть один из них это приёмник монет, а второй приемник банкнот? Я хз.

  • сенсорный экран: USB 0dfc:0001 (GeneralTouch Technology Co., Ltd Touchscreen) или USB 0df9:0001 (MASTouch TouchSystems Touchscreen). Для сенсорного экрана создаются симлинки /dev/k2gui-touchscreen-event и /dev/k2gui-touchscreen-mouse.

  • принтер: USB 0924:420c (Xerox WorkCentre 4118 Series) или USB 04e8:341d (Samsung SCX-6x22 Series). Для принтера создается симлинк /dev/k2gui-printer.

  • флешка: для каждого раздела флешки создаётся симлинк типа /dev/k2gui-storage-sdc1

Я подозреваю, что приёмник налички должен обслуживаться драйвером, который реализует последовательный порт. Что-то из каталога /lib/modules/$(uname -r)/kernel/drivers/usb/serial. Если подключить периферию к писюку с Ubuntu 22.04, что говорит lsusb -vvt? Каким драйвером обслуживаются устройства USB ffff:0001?

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

Нашёл, но ещё не проверил:

cat /etc/init.d/k2

...
/sbin/modprobe usbserial
/sbin/sleep 1
/opt/k2/hal_automount.py -d --mnt_dir=/k2mnt
/bin/su k2 -- -c "/opt/k2/vbox_control.sh start"
/opt/k2/k2gui_runner.sh >> /var/log/k2-run.log 2>&1 &
...
SaintAnd
() автор топика
Ответ на: комментарий от iliyap

Тут Class=CDC Data но без драйвера Bus 002 Device 003: ID ffff:0001

root@kopirkin-MS-7529:/home/kopirkin# lsusb 
Bus 001 Device 007: ID 14cd:168a Super Top 
Bus 001 Device 002: ID 0924:420c Xerox 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 0dfc:0001 GeneralTouch Technology Co., Ltd Touchscreen
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID ffff:0001  
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

root@kopirkin-MS-7529:/home/kopirkin# lsusb -vvt
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbtouchscreen, 1.5M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 2: Dev 3, If 0, Class=Communications, Driver=, 12M
    |__ Port 2: Dev 3, If 1, Class=CDC Data, Driver=, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/8p, 480M
    |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=, 480M
    |__ Port 1: Dev 2, If 1, Class=Printer, Driver=usblp, 480M
    |__ Port 8: Dev 7, If 0, Class=Mass Storage, Driver=usb-storage, 480M
SaintAnd
() автор топика
Ответ на: комментарий от iliyap

hal-device


109: udi = '/org/freedesktop/Hal/devices/usb_device_ffff_1_noserial_if1'
  linux.hotplug_type = 2  (0x2)  (int)
  linux.subsystem = 'usb'  (string)
  info.subsystem = 'usb'  (string)
  info.product = 'USB Data Interface'  (string)
  info.udi = '/org/freedesktop/Hal/devices/usb_device_ffff_1_noserial_if1'  (string)
  usb.linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1'  (string)
  usb.configuration_value = 1  (0x1)  (int)
  usb.num_configurations = 1  (0x1)  (int)
  usb.num_interfaces = 2  (0x2)  (int)
  usb.device_class = 2  (0x2)  (int)
  usb.device_subclass = 0  (0x0)  (int)
  usb.device_protocol = 0  (0x0)  (int)
  usb.vendor_id = 65535  (0xffff)  (int)
  usb.product_id = 1  (0x1)  (int)
  usb.vendor = 'Liskom'  (string)
  usb.product = 'USB Data Interface'  (string)
  usb.max_power = 100  (0x64)  (int)
  usb.num_ports = 0  (0x0)  (int)
  usb.device_revision_bcd = 0  (0x0)  (int)
  usb.is_self_powered = true  (bool)
  usb.speed = 12  (double)
  usb.bus_number = 2  (0x2)  (int)
  usb.can_wake_up = false  (bool)
  usb.version = 2  (double)
  usb.linux.device_number = 2  (0x2)  (int)
  usb.interface.number = 1  (0x1)  (int)
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.1'  (string)
  info.parent = '/org/freedesktop/Hal/devices/usb_device_ffff_1_noserial'  (string)
  usb.interface.subclass = 0  (0x0)  (int)
  usb.interface.class = 10  (0xa)  (int)
  usb.interface.protocol = 0  (0x0)  (int)

110: udi = '/org/freedesktop/Hal/devices/usb_device_ffff_1_noserial_if0'
  linux.hotplug_type = 2  (0x2)  (int)
  linux.subsystem = 'usb'  (string)
  info.subsystem = 'usb'  (string)
  info.product = 'USB Communications Interface'  (string)
  info.udi = '/org/freedesktop/Hal/devices/usb_device_ffff_1_noserial_if0'  (string)
  usb.linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0'  (string)
  usb.configuration_value = 1  (0x1)  (int)
  usb.num_configurations = 1  (0x1)  (int)
  usb.num_interfaces = 2  (0x2)  (int)
  usb.device_class = 2  (0x2)  (int)
  usb.device_subclass = 0  (0x0)  (int)
  usb.device_protocol = 0  (0x0)  (int)
  usb.vendor_id = 65535  (0xffff)  (int)
  usb.product_id = 1  (0x1)  (int)
  usb.vendor = 'Liskom'  (string)
  usb.product = 'USB Communications Interface'  (string)
  usb.max_power = 100  (0x64)  (int)
  usb.num_ports = 0  (0x0)  (int)
  usb.device_revision_bcd = 0  (0x0)  (int)
  usb.is_self_powered = true  (bool)
  usb.speed = 12  (double)
  usb.bus_number = 2  (0x2)  (int)
  usb.can_wake_up = false  (bool)
  usb.version = 2  (double)
  usb.linux.device_number = 2  (0x2)  (int)
  usb.interface.number = 0  (0x0)  (int)
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0'  (string)
  info.parent = '/org/freedesktop/Hal/devices/usb_device_ffff_1_noserial'  (string)
  usb.interface.subclass = 2  (0x2)  (int)
  usb.interface.class = 2  (0x2)  (int)
  usb.interface.protocol = 1  (0x1)  (int)

111: udi = '/org/freedesktop/Hal/devices/usb_device_ffff_1_noserial'
  linux.device_file = '/dev/bus/usb/002/002'  (string)
  info.vendor = 'Liskom'  (string)
  info.udi = '/org/freedesktop/Hal/devices/usb_device_ffff_1_noserial'  (string)
  linux.hotplug_type = 2  (0x2)  (int)
  linux.subsystem = 'usb'  (string)
  info.linux.driver = 'usb'  (string)
  usb_device.linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-2'  (string)
  usb_device.configuration_value = 1  (0x1)  (int)
  usb_device.num_configurations = 1  (0x1)  (int)
  usb_device.num_interfaces = 2  (0x2)  (int)
  usb_device.device_class = 2  (0x2)  (int)
  usb_device.device_subclass = 0  (0x0)  (int)
  usb_device.device_protocol = 0  (0x0)  (int)
  usb_device.vendor_id = 65535  (0xffff)  (int)
  usb_device.product_id = 1  (0x1)  (int)
  usb_device.vendor = 'Liskom'  (string)
  usb_device.product = 'Liskom K2 Pro'  (string)
  info.subsystem = 'usb_device'  (string)
  info.product = 'Liskom K2 Pro'  (string)
  usb_device.max_power = 100  (0x64)  (int)
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-2'  (string)
  info.parent = '/org/freedesktop/Hal/devices/usb_device_1d6b_1_0000_00_1d_0'  (string)
  usb_device.num_ports = 0  (0x0)  (int)
  usb_device.device_revision_bcd = 0  (0x0)  (int)
  usb_device.version = 2  (double)
  usb_device.speed = 12  (double)
  usb_device.linux.device_number = 2  (0x2)  (int)
  usb_device.is_self_powered = true  (bool)
  usb_device.can_wake_up = false  (bool)
  usb_device.bus_number = 2  (0x2)  (int)

112: udi = '/org/freedesktop/Hal/devices/usb_device_1d6b_1_0000_00_1d_0_if0'
  linux.hotplug_type = 2  (0x2)  (int)
  linux.subsystem = 'usb'  (string)
  info.linux.driver = 'hub'  (string)
  info.subsystem = 'usb'  (string)
  info.product = 'USB Hub Interface'  (string)
  info.udi = '/org/freedesktop/Hal/devices/usb_device_1d6b_1_0000_00_1d_0_if0'  (string)
  usb.linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-0:1.0'  (string)
  usb.configuration_value = 1  (0x1)  (int)
  usb.num_configurations = 1  (0x1)  (int)
  usb.num_interfaces = 1  (0x1)  (int)
  usb.device_class = 9  (0x9)  (int)
  usb.device_subclass = 0  (0x0)  (int)
  usb.device_protocol = 0  (0x0)  (int)
  usb.vendor_id = 7531  (0x1d6b)  (int)
  usb.product_id = 1  (0x1)  (int)
  usb.vendor = 'Linux Foundation'  (string)
  usb.product = 'USB Hub Interface'  (string)
  usb.max_power = 0  (0x0)  (int)
  usb.serial = '0000:00:1d.0'  (string)
  usb.num_ports = 2  (0x2)  (int)
  usb.device_revision_bcd = 1045  (0x415)  (int)
  usb.is_self_powered = true  (bool)
  usb.speed = 12  (double)
  usb.bus_number = 2  (0x2)  (int)
  usb.can_wake_up = true  (bool)
  usb.version = 1.1  (double)
  usb.linux.device_number = 1  (0x1)  (int)
  usb.interface.number = 0  (0x0)  (int)
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-0:1.0'  (string)
  info.parent = '/org/freedesktop/Hal/devices/usb_device_1d6b_1_0000_00_1d_0'  (string)
  usb.interface.subclass = 0  (0x0)  (int)
  usb.interface.class = 9  (0x9)  (int)
  usb.interface.protocol = 0  (0x0)  (int)
SaintAnd
() автор топика
Ответ на: комментарий от SaintAnd

Сенсорный экран с драйвером (usbtouchscreen), принтер с драйвером (usblp), приёмник налички (два интерфейса) – оба без драйвера. И вендинговый автомат при этом принимает наличку? Вы же говорили, что программа k2gui ожидает последовательный порт?

Или это вывод не с работающего вендингового автомата, а с чего-то другого?

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

Я скачал k2-20110928-152708.deb, посмотрел что внутри. Там в /etc/modprobe.d/k2-modprobe есть строчка options usbserial vendor=0xFFFF product=0x0001. Она задаёт параметры загрузки модуля usbserial. Если кто-то вызывает modprobe usbserial без параметров, то модуль загружается с указанными параметрами. Эти параметры говорят модулю, что драйвер usbserial_generic должен цепляться к USB устройствам ffff:0001.

В файле /etc/init.d/k2 в функции start() есть вызов modprobe usbserial. И только после него запускается k2gui.

На системе же, с который вы прислали вывод lsusb -t, похоже модуль usbserial не загружен.

Хотя может быть загружен, но не с теми параметрами. Или загружен, но не смог подцепить драйвер к интерфейсам устройства. Надо смотреть dmesg | grep usbserial.

Или на этом ядре он собран не в виде модуля, а builtin в ядро. modinfo usbserial скажет как собран модуль. Если он builtin, то параметры usbserial.vendor=0xffff usbserial.product=1 ему можно передать только в строке загрузки ядра.

iliyap ★★★★★
()
Последнее исправление: iliyap (всего исправлений: 1)
Ответ на: комментарий от iliyap
  1. Да на usb делается ссылка в /dev/ и дальше программа работает с этой ссылью, на сколько понимаю.

  2. Я запускал modprobe но без этих параметров в ../../k2-modprobe (не додумался скинуть на новую систему), нужно попробовать, спасибо за наводку.

  3. Я делал modprobe usbserial, затем подключал флешку и lsusb -t, видимо без тех параметров, что выше, не работает подключение драйвера.

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

Выглядит как-будто в ядро не встроен, но могу ошибаться

root@ub8-desktop:/home/ub8# modinfo usbserial
filename:       /lib/modules/2.6.27-7-generic/kernel/drivers/usb/serial/usbserial.ko
license:        GPL
description:    USB Serial Driver core
author:         Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux/
srcversion:     96219212FFE058A93C12C85
depends:        usbcore
vermagic:       2.6.27-7-generic SMP mod_unload modversions 586 
parm:           vendor:User specified USB idVendor (ushort)
parm:           product:User specified USB idProduct (ushort)
parm:           debug:Debug enabled or not (bool)
SaintAnd
() автор топика
Ответ на: комментарий от SaintAnd

Не встроен. Значит достаточно выгрузить модуль modprobe -r usbserial, а затем загрузить с параметрами modprobe usbserial vendor=0xffff product=1. И проверить в lsusb -t, прицепился ли драйвер usbserial_generic к интерфейсам USB-устройства.

iliyap ★★★★★
()
Последнее исправление: iliyap (всего исправлений: 1)
Ответ на: комментарий от iliyap

Теперь наконец-то определился /dev/ttyUSB0 Остаётся только найти удобный способ считать сигналы с него. Пока не выходит)))

root@kopirkin-MS-7529:/home/kopirkin# lsusb -vvt
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 1: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 2: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbtouchscreen, 1.5M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 2: Dev 3, If 0, Class=Communications, Driver=, 12M
    |__ Port 2: Dev 3, If 1, Class=CDC Data, Driver=usbserial_generic, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/8p, 480M
    |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=, 480M
    |__ Port 1: Dev 2, If 1, Class=Printer, Driver=usblp, 480M
    |__ Port 8: Dev 7, If 0, Class=Mass Storage, Driver=usb-storage, 480M
SaintAnd
() автор топика
Ответ на: комментарий от iliyap

Только не пойму, почему «Class=Communications,» без драйвера…

Та прога так и нехочет работать, может быть нужен ещё какой-то драйвер?

Ан нет, сработало вродь))) https://ibb.co/jgLNrmF

SaintAnd
() автор топика
Последнее исправление: SaintAnd (всего исправлений: 1)
Ответ на: комментарий от iliyap

Когда я пытаюсь считать данные во время загруженной проги, то у меня соединение в проге сбрасывается? Можно ли как-то так данные считать, чтобы pid не добавлялся к /dev/ttyUSB0 ?

root@kopirkin-MS-7529:/etc/modprobe.d# fuser -v /dev/ttyUSB0 
                     ПОЛЬЗ-ЛЬ    PID ДОСТУП КОМАНДА
/dev/ttyUSB0:        root       6678 F.... gsmsmsd
                     root       6706 F.... k2gui
                     root       6722 F.... gsmsmsd
                     root       6743 f.... cat

SaintAnd
() автор топика
Последнее исправление: SaintAnd (всего исправлений: 1)
Ответ на: комментарий от SaintAnd

Ну как ты себе представляешь читать tty одновременно из двух процессов? По-твоему каждый должен получить копию? Это не так. Данные прочитает только один процесс, кому повезёт. Может быть k2gui шлёт в ttyUSB0 периодические запросы «ты живой?», а приёмник налички шлёт в ответ «я живой». Твой процесс эти ответы считывает раньше k2gui, и k2gui считает, что приёмник налички сдох.

Непонятно, что ты пытаешься сделать. Отреверсить протокол общения k2gui и приёмника налички? С помощью lsof -p $k2gui_pid можно посмотреть список файловых дескрипторов процесса k2gui, с помощьью strace -p $k2gui_pid -f -e read=$ttyusb0_fd -e write=$ttyusb0_fd можно посмотреть какие данные пишет и читает k2gui.

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

Хотел обойтись меньшими силами, чтобы не было этих проверок от устройств «ты живой», чтобы сразу брать инфу с ttyUSB0 какие данные приходят.

Если кинуть мелочь и слушать порт, то ничего не происходит

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

Ты же не знаешь какой там протокол. Может приёмник по своей инициативе ничего не посылает, а только отвечает на запросы. Протокол ведь должен быть устойчив к разрывам связи и перезапускам программы.

iliyap ★★★★★
()
Последнее исправление: iliyap (всего исправлений: 1)
Ответ на: комментарий от iliyap

Вот что выяснил. Если прога выключена и кинуть монету, то плата будет ждать, когда прога включится, и только когда она запустится, то отправляет данные о поступлении налички. Значит она ждёт пока сигнал не поступит на плату

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

На сайте kopirkin.ru упоминается приёмник монет NRI G13. В интернетах пишут, что он поддерживает протокол ccTalk over USB. https://msky.kz/sites/default/files/g13mft_cctalk_pc_g.pdf

iliyap ★★★★★
()
Последнее исправление: iliyap (всего исправлений: 1)
Ответ на: комментарий от iliyap

Я правильно понял как запускать прогу strace?

strace -p 7357 -f -e write=3 -e read=3
lsof -p 7357
...
k2gui   7357 root    2u   CHR              136,4      0t0       7 /dev/pts/4
k2gui   7357 root    3u   CHR              188,0      0t0     398 /home/kopirkin/Загрузки/8ub-full/dev/ttyUSB0
k2gui   7357 root    4u   CHR               4,65      0t0      89 /home/kopirkin/Загрузки/8ub-full/dev/ttyS1
...
SaintAnd
() автор топика
Ответ на: комментарий от iliyap

Что же это такое?

Вопросы

  • Какие hex байты отправлять на ttyUSB0, чтобы устройство мне обратно слало информацию о поступлении средств?
  • Через strace можно это выяснить?
  • Где лучше искать в read или write?

Я думаю, что плата работает так:

- Наличные считываются и отправляются память
- Плата шлёт запрос на доступность проги
- Если ответа нет, то ждёт 5 сек и снова опрашивает
- Если ответ есть, то отсылает данные о сумме поступленных средств
SaintAnd
() автор топика
Последнее исправление: SaintAnd (всего исправлений: 1)