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)

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

Вродь это «копиркин-профи». Человек поддтвердил. Там в http://kopirkin.ru/for-owners/firmware-update/profi.html

Там есть ссылка на инструкцию где видно плату http://kopirkin.ru/materials/firmware/firmware-update-profi.pdf

Но похоже это самопальная плата. Маркировки чипа рассмотреть не удалось

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

Я думаю плата управления – это кастомный ПК. На плате виден USB Type A разьём для флешки с обновлением, VGA D-SUB разъём для монитора, RJ-45 разъём для локалки. Какие-то гребёнки для подключения периферии. Что это за гребёнки – я не знаю. Кто-то из гребёнок это USB для подключения приёмника монет. А может там на другой стороне платы ещё разъёмы.

Сама плата никаких запросов не шлёт. k2gui является инициатором запросов к приёмнику монет. k2gui командует, приёмник отвечает. Соответственно k2gui пишет запросы в /dev/ttyUSB0 и читает ответы из /dev/ttyUSB0.

Попробуй запустить k2gui с самого начала под трассировщиком, чтобы диалог с приёмником монет был виден с самого начала. Наверное как-то так:

strace -o /tmp/k2gui.trace -f -y -t -e read=3 -e write=3 /opt/k2/k2gui
iliyap ★★★★★
()
Ответ на: комментарий от iliyap

strace старовата на ubuntu8 по-этому выдало ошибку что синтексис нарушен. Буду смотреть что убрать или добавить

root@kopirkin-MS-7529:/opt/k2# strace -V       
strace -- version 4.5.15

Там нет ключа -y

root@kopirkin-MS-7529:/opt/k2# strace -o ./k2gui-2024.02.09.trace -f -y -t -e read=3 -e write=3 /opt/k2/k2gui                    
strace: invalid option -- 'y'
usage: strace [-dffhiqrtttTvVxx] [-a column] [-e expr] ... [-o file]
              [-p pid] ... [-s strsize] [-u username] [-E var=val] ...
              [command [arg ...]]
   or: strace -c [-e expr] ... [-O overhead] [-S sortby] [-E var=val] ...
              [command [arg ...]]
-c -- count time, calls, and errors for each syscall and report summary
-f -- follow forks, -ff -- with output into separate files
-F -- attempt to follow vforks, -h -- print help message
-i -- print instruction pointer at time of syscall
-q -- suppress messages about attaching, detaching, etc.
-r -- print relative timestamp, -t -- absolute timestamp, -tt -- with usecs
-T -- print time spent in each syscall, -V -- print version
-v -- verbose mode: print unabbreviated argv, stat, termio[s], etc. args
-x -- print non-ascii strings in hex, -xx -- print all strings in hex
-a column -- alignment COLUMN for printing syscall results (default 40)
-e expr -- a qualifying expression: option=[!]all or option=[!]val1[,val2]...
   options: trace, abbrev, verbose, raw, signal, read, or write
-o file -- send trace output to FILE instead of stderr
-O overhead -- set overhead for tracing syscalls to OVERHEAD usecs
-p pid -- trace process with process id PID, may be repeated
-s strsize -- limit length of print strings to STRSIZE chars (default 32)
-S sortby -- sort syscall counts by: time, calls, name, nothing (default time)
-u username -- run command as username handling setuid and/or setgid
-E var=val -- put var=val in the environment for command
-E var -- remove var from the environment for command
SaintAnd
() автор топика
Последнее исправление: SaintAnd (всего исправлений: 1)
Ответ на: комментарий от iliyap

Чудеса с этой прогой. Всё пытался прогу запустить, а она не давалась. Пишет в консоли «No connection» и всё. Что я до этого делал, что она прекрасно запускалась, не пойму…

Модпроб сделал /dev/ttyUSB0 определился Симлинки сделал

cd /dev
sudo ln -s ttyUSB0 k2ldr
sudo ln -s ttyUSB0 k2pcb

Порт настроен верно

root@kopirkin-MS-7529:/home/kopirkin/Загрузки/8ub-full/opt/k2# stty -F /dev/ttyUSB0 
speed 9600 baud; line = 0;
min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

Что ему опять надо?

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

Привет. Я тогда приболел. Сейчас здоров.

Понял свою ошибку. Я забыл у симлинка добавить в названии «-usb» 😮‍💨

Надо так

cd /dev

sudo ln -s ttyUSB0 k2ldr-usb

sudo ln -s ttyUSB0 k2pcb-usb

SaintAnd
() автор топика
Ответ на: комментарий от iliyap
strace -o /tmp/k2gui.trace -f -t -e read=3 -e write=3 ./k2gui

Вот что в файле (но были проблемы с кодировкой):

Часть I https://pastebin.com/jKXzN0FV

Часть II https://pastebin.com/46hPCnkG

Часть III https://pastebin.com/Wazp79Lg

Вот оригинальный файл:

https://drive.google.com/file/d/1tulwRUB_mp9wOxhbyAqPddu0l4ga0gMm/view?usp=drive_link

или

https://terabox.com/s/1jrATBFCdUPLNXKIq0FZICw

USBDEVFS_CONNECTINFO - это не то что мы ищем?

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

Открывает канал с приёмником:

5998  13:41:27 open("/dev/k2pcb-usb", O_RDWR|O_NONBLOCK) = 3

Проверяет настройки канала:

5998  13:41:27 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B9600 -opost -isig -icanon -echo ...}) = 0
5998  13:41:27 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B9600 -opost -isig -icanon -echo ...}) = 0
5998  13:41:27 ioctl(3, SNDCTL_TMR_START or TCSETS, {B9600 -opost -isig -icanon -echo ...}) = 0
5998  13:41:27 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B9600 -opost -isig -icanon -echo ...}) = 0

Флашит канал:

5998  13:41:27 ioctl(3, TCFLSH, 0x2)    = 0

Убеждается что данных для чтения в канале нету:

5998  13:41:27 read(3, 0xffd576b4, 100) = -1 EAGAIN (Resource temporarily unavailable)

Записывает в канал перевод строки:

5998  13:41:27 write(3, "\r", 1)        = 1
 | 00000  0d                                                .                 ```

Пытается подключиться сначала к /dev/log, потом открывает /dev/console:

5998  13:41:27 socket(PF_FILE, SOCK_DGRAM, 0) = 4
5998  13:41:27 fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
5998  13:41:27 connect(4, {sa_family=AF_FILE, path="/dev/log"}, 110) = -1 ENOENT (No such file or directory)
5998  13:41:27 close(4)                 = 0
5998  13:41:27 open("/dev/console", O_WRONLY|O_NOCTTY) = 4

Говорит об успешном старте на консоль:

5998  13:41:27 write(4, "K2: K2 started.\r\n", 17) = 17

Вот первая команда, отправленная в канал:

5998  13:41:27 write(3, "]\'\n\26\336\0271\261\10\246\310\313}f\333-\10\246\310"..., 32) = 32
 | 00000  5d 27 0a 16 de 17 31 b1  08 a6 c8 cb 7d 66 db 2d  ]'....1. ....}f.- |
 | 00010  08 a6 c8 cb 7d 66 db 2d  08 a6 c8 cb 7d 66 db 2d  ....}f.- ....}f.- |
5998  13:41:27 write(3, "\10\246\310\313}f\333-\10\246\310\313}f\333-\10\246\310"..., 32) = 32
 | 00000  08 a6 c8 cb 7d 66 db 2d  08 a6 c8 cb 7d 66 db 2d  ....}f.- ....}f.- |
 | 00010  08 a6 c8 cb 7d 66 db 2d  08 a6 c8 cb 7d 66 db 2d  ....}f.- ....}f.- |
5998  13:41:27 write(3, "R8\230\361\377E\325\243\10\246\310\313}f\333-\10\246\310"..., 32) = 32
 | 00000  52 38 98 f1 ff 45 d5 a3  08 a6 c8 cb 7d 66 db 2d  R8...E.. ....}f.- |
 | 00010  08 a6 c8 cb 7d 66 db 2d  08 a6 c8 cb 7d 66 db 2d  ....}f.- ....}f.- |
5998  13:41:27 write(3, "\10\246\310\313}f\333-\10\246\310\313}f\333-\10\246\310"..., 32) = 32
 | 00000  08 a6 c8 cb 7d 66 db 2d  08 a6 c8 cb 7d 66 db 2d  ....}f.- ....}f.- |
 | 00010  08 a6 c8 cb 7d 66 db 2d  08 a6 c8 cb 7d 66 db 2d  ....}f.- ....}f.- |
5998  13:41:27 write(3, "\r", 1)        = 1
 | 00000  0d                                                .                 |

А вот первый ответ из канала:

5998  13:41:27 read(3, 0x9c2cc60, 100)  = -1 EAGAIN (Resource temporarily unavailable)
5998  13:41:27 nanosleep({0, 50000000}, NULL) = 0
5998  13:41:27 read(3, "\244\224nK7\355p\274\10\246\310\313}f\333-\10\246\310\313"..., 100) = 100
 | 00000  a4 94 6e 4b 37 ed 70 bc  08 a6 c8 cb 7d 66 db 2d  ..nK7.p. ....}f.- |
 | 00010  08 a6 c8 cb 7d 66 db 2d  08 a6 c8 cb 7d 66 db 2d  ....}f.- ....}f.- |
 | 00020  08 a6 c8 cb 7d 66 db 2d  08 a6 c8 cb 7d 66 db 2d  ....}f.- ....}f.- |
 | 00030  08 a6 c8 cb 7d 66 db 2d  08 a6 c8 cb 7d 66 db 2d  ....}f.- ....}f.- |
 | 00040  5d 4c be 2a 2b f2 e9 9b  2b 3c 2f 49 18 8e b3 a8  ]L.*+... +</I.... |
 | 00050  15 95 02 11 d0 7c 02 c2  9f eb b0 07 6b 71 da a5  .....|.. ....kq.. |
 | 00060  0a 13 a4 02                                       ....              |
5998  13:41:27 read(3, "}\341\1\30\371#\307\312\215\354\251\260\352\376\2\323\361"..., 100) = 29
 | 00000  7d e1 01 18 f9 23 c7 ca  8d ec a9 b0 ea fe 02 d3  }....#.. ........ |
 | 00010  f1 eb 90 01 2e e0 f1 5a  a9 a5 c3 4c 0d           .......Z ...L.    |
5998  13:41:27 read(3, 0x9c2cc60, 100)  = -1 EAGAIN (Resource temporarily unavailable)

На мой взгляд это не похоже на cctalk. У cctalk первый байт сообщения это целевой адрес, второй байт это длина данных. В запросе второй байт 0x27, не бъётся с длиной сообщения 128. В ответе второй байт 0x94, тоже не бъётся с длиной сообщения 128. К тому же и запрос и ответ завершаются переводом строки «\r» 0xd, такого в cctalk нету.

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

Спасибо за такой чёткий ответ!

Хоть с чего-то начать помогло.

Хочу использовать usbmon, может что и покажет дополнительно. Надеюсь оно не будет мешать передаче.

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

Заметил такое в файле usbmon2-money27.gz.pcap Когда программа загружается, она останавливает обмен пакетами на этом пакете под номером 438 (32-ая секунда) и ждёт пока весь интерфейс прогрузится.

Затем когда он прогрузился, начинается обмен пакетами и каждую секунду вижу такой пакет URB_BULK out с таким содержимым:

0000   c0 a3 80 62 37 89 ff ff 53 03 02 02 02 00 2d 00   ...b7...S.....-.
0010   0b e9 e0 65 00 00 00 00 6d 79 06 00 8d ff ff ff   ...e....my......
0020   40 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00   @...@...........
0030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0040   7e 1b 14 7a 5e 8d f8 b9 a4 37 22 a8 62 39 05 af   ~..z^....7".b9..
0050   cd 84 6d 40 00 40 00 9a 79 e0 c6 91 95 c5 f5 e7   ..m@.@..y.......
0060   ef f8 3b d8 e4 1c 47 ff 70 a6 7d ba 7e cb fd 61   ..;...G.p.}.~..a
0070   37 22 ff 82 5a 7e f8 6e 2a 78 08 a6 c8 cb 7d 66   7"..Z~.n*x....}f

Такой фильтр задал в wireshark:

usb.capdata == 7e:1b:14:7a:5e:8d:f8:b9:a4:37:22:a8:62:39:05:af:cd:84:6d:40:00:40:00:9a:79:e0:c6:91:95:c5:f5:e7:ef:f8:3b:d8:e4:1c:47:ff:70:a6:7d:ba:7e:cb:fd:61:37:22:ff:82:5a:7e:f8:6e:2a:78:08:a6:c8:cb:7d:66
SaintAnd
() автор топика
Ответ на: комментарий от iliyap

Нашёл ещё зацепку: Количество платежей связано с таким фильтром

usb.capdata == 84:30:eb:e0:f3:b1:94:99:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d

Были положены монеты в таком порядке: 10,5,5,5,2

Результат:

568	48.496170	host	2.2.2	USB	128	URB_BULK out
1144	56.111231	host	2.2.2	USB	128	URB_BULK out
2080	69.167323	host	2.2.2	USB	128	URB_BULK out
2746	78.138377	host	2.2.2	USB	128	URB_BULK out
3592	89.673448	host	2.2.2	USB	128	URB_BULK out

А здесь как-будто бы пакеты говорящие об принятии наличных:

usb.capdata == f6:ef:a2:43:de:06:ba:da:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d

640	48.797175	host	2.2.2	USB	128	URB_BULK out
1216	56.363232	host	2.2.2	USB	128	URB_BULK out
2152	69.368321	host	2.2.2	USB	128	URB_BULK out
2818	78.339390	host	2.2.2	USB	128	URB_BULK out
3664	89.974445	host	2.2.2	USB	128	URB_BULK out

Если вычислять разницу между началом и концом пакетов (640-568), то результат всегда будет 72

Уже ещё ближе, вроде нашёл байты зачисления пятаков:

usb.capdata == 8f:fb:d0:30:d0:0f:b0:27:fc:fb:00:80:bc:c8:b2:19:fc:fb:00:80:bc:c8:b2:19:05:de:21:b6:42:1a:23:81

1081	55.775228	2.2.1	host	USB	96	URB_BULK in
2017	68.944316	2.2.1	host	USB	96	URB_BULK in
2683	77.925367	2.2.1	host	USB	96	URB_BULK in
SaintAnd
() автор топика
Последнее исправление: SaintAnd (всего исправлений: 3)
Ответ на: комментарий от iliyap

Похоже на байты зачисления наличных:

usb.capdata == 27:ef:3e:01:b4:9c:8f:ab:d5:33:d0:c7:bc:6b:1f:de:d5:33:d0:c7:bc:6b:1f:de:d5:33:d0:c7:bc:6b:1f:de

415	31.966038	2.2.1	host	USB	96	URB_BULK in
523	48.359164	2.2.1	host	USB	96	URB_BULK in
1099	55.910228	2.2.1	host	USB	96	URB_BULK in
2035	69.021333	2.2.1	host	USB	96	URB_BULK in
2701	78.005414	2.2.1	host	USB	96	URB_BULK in
3547	89.534433	2.2.1	host	USB	96	URB_BULK in

Тоже как-то относится к монетам:

usb.capdata == 06:d9:23:a6:5c:c0:78:91:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d

565	48.495413	host	2.2.2	USB	96	URB_BULK out
1141	56.110833	host	2.2.2	USB	96	URB_BULK out
2077	69.166223	host	2.2.2	USB	96	URB_BULK out
2743	78.137329	host	2.2.2	USB	96	URB_BULK out
3589	89.672695	host	2.2.2	USB	96	URB_BULK out

Ещё дополнительное

usb.capdata == 40:cd:63:50:c4:40:00:bc:8e:ce:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66:db:2d:08:a6:c8:cb:7d:66

586	48.546170	host	2.2.2	USB	128	URB_BULK out
1162	56.161228	host	2.2.2	USB	128	URB_BULK out
2098	69.217322	host	2.2.2	USB	128	URB_BULK out
2764	78.188376	host	2.2.2	USB	128	URB_BULK out
3610	89.723445	host	2.2.2	USB	128	URB_BULK out
SaintAnd
() автор топика
Последнее исправление: SaintAnd (всего исправлений: 2)
Ответ на: комментарий от SaintAnd

В захватах видно, что usb.capdata это то, что пишет/читает приложение k2gui в/из /dev/ttyUSB0.

Протокол какой-то бинарный, типа запрос-ответ, запросы шлёт k2gui, устройство отвечает. Сообщения длиной от 129 байт до 132 байт. Первые 128 байт сообщения передаются кусками по 32 байта (это видно и в strace и в захватах). k2gui опрашивает устройство как-то странно, иногда период между опросами 50 мс, иногда 100 мс, иногда больше одной секунды. Возможно это просто дефективный дизайн k2gui (всё в одном потоке).

Как реверсить этот протокол, непонятно. Он не похож ни на cctalk, ни на MDB. Хотя на сайте kopirkin.ru написано, что монетник и купюрник подключаются к аппарату по MDB. То есть вероятно USB-устройство «Liskom K2 Pro» это мост к шине MDB. С каким-то своим кастомным протоколом на USB плече.

В стартовом посте была обозначена цель – сделать безналичную оплату. Обычно это делают, подключая к вендинговому аппарату готовый модуль безналичной оплаты, например, Vendotek VN. Тут всё более или менее понятно: надо подключить его к шине MDB управляющей платы вендингового аппарата, вендинговый аппарат найдёт на шине платёжное устройство.

У тебя же непонятно, какой вообще план, каковы шаги после реверса протокола. И нужно ли его вообще реверсить.

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

Спасибо за такой глубокий анализ, много чего почерпнул.

Реверсить протокол не нужно.

В ubuntu 16 программа k2 всё-равно не хочет нормально работать (печатать, сканировать…).

Я создам локальную web-страницу (с кнопками печати сканирования), где размещу онлайн-эквайринг, но также и оплата наличными, чтобы всё было на одной странице и не нужно переключаться между web страницей и программой k2 (которую не доконца победил в ub16)

План таков:

  1. Получаем сигнал о пополнении баланса наличными
  2. Добавляем число в файл или сразу на страницу
  3. Страница через php обрабатывает файл и обновляет баланс
  4. Услуги активируются

Баланс можно пополнять налом и онлайн, например:

  • 100 рублей налом
  • 50 рублей через экваиринг
  • итого 150 на услуги.
SaintAnd
() автор топика
Ответ на: комментарий от iliyap

В паралельной теме Условие для потока файла /dev/ttyusb /dev/usbmon0, что я создал, предлагают читать байты через C или PHP, хоть и не умею, но буду разбираться через php как это реализовать. Либо если можно читать поток без hexdump, то было бы отлично. Создать скрипт который сравнивал байты и выполнял условие (поплнял баланс в файле или сразу на странице)

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

То есть план заключается в создании другого UI для вендингового аппарата? И реализации всей логики предоставления услуги заново? При этом k2gui продолжает исполняться гдё-то в фоне и общаться с монетником и купюрником? И новый UI узнаёт баланс налички, «подслушивая» общение k2gui с монетником и купюрником?

И разработка этих костылей «через php» дешевле, чем подключение готового терминала безналичной оплаты к аппарату? И заказчик верит в твой неминуемый успех? И ты сам веришь в свой неминуемый успех?

Какое-то сумашествие…

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

Да, всё так как и есть. К сожалению это самый дешёвый вариант да и qr-код в k2 не добавишь, чтобы оплата так шла. На распечатках много не заработаешь

Какое-то сумашествие…

Согласен)))

Но коль взялся, нужно идти до конца. У заказчика денег не хватит на новый терминал Да, в успех я не сильно верил, поэтому заявил заказчику, если будет результат и работа устроит, то он оплатит это, а ежели нет, то и ничего не будет (потому что понимаю, что такое может не сработать). Заказчик на такое безумие согласился, а я по крайней мере получил опыт, т.к. это занятие интересное))) Если всё получится, то я поделюсь разумеется за всю оказаную помощь, если согласны. Потому что мне очень помогли продвинуться

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

И разработка этих костылей «через php» дешевле, чем подключение готового терминала безналичной оплаты к аппарату?

Тут не совсем так, безналичная оплата едёт не через банковскую карточку, а через юкасса или аналогичное.

Или можно купить и подключить модуль к плате k2 который сможет вывести qr-код или подобное? Интересно есть ли такое решение

VENDOTEK VN - понял, там есть экранчик на который выводится изображение qr-код

Важно! Забыл уточнить. Вместо vendotek на терминале стоит Vendista

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

Вместо vendotek на терминале стоит Vendista

Наверное ты хотел сказать на вендинговом аппарате стоит терминал Vendista.

Быстрый гуглёж даёт https://vendista.ru/documents/. Там есть инструкция по подключению терминалов Vendista к вендинговым аппаратам по MDB. Судя по документации к Vendista она умеет и эквайринг по банковским картам, и приём оплаты по СБП (по QR коду, может быть и по NFC).

А сейчас эта Vendista подключена к вендинговому аппарату? В руководстве на аппарат сказано, что платёжная периферия настраивается в сервисном меню k2gui, пункт Конфигурация -> Платёжные средства. Наверное там должны быть видны монетник, купюрник, и безналичник. В руководстве скриншотов нет, поэтому могу только догадываться что там. Наверное какие-то параметры протокола MDB для диалога с периферией.

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

А сейчас эта Vendista подключена к вендинговому аппарату?

Да, стоит и работает.

Нюанс в том, что вся эта история началась из-за ограниченности программы k2. Она в ubuntu 8 избирательно читала флешки. Владелец только недавно выяснил, что если форматировать флеху через особую программу, тогда начинает определяться, а если через винду то шиш. Но студентов отправлять форматировать флешку - это странно. Поэтому решили на новой системе (ubuntu16) ставить прогу. Потом появилось предложение добавить возможность отправлять файлы через почту, но прога может только с флешки читать файлы и никак иначе. Также k2 работает только с определёнными принтерами, что весьма неприятно в случае поломки оного.

Т.к. я уже не хочу возиться с этой k2 пытаясь запустить её на ubuntu16 без косяков, то мне проще свой интерфейс сделать, чем ковыряться в этом бинарнике🙄

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

Сам себе, просто анониму нельзя редактировать сообщения.

Ты не согласен с тем, что по факту бесплатно решаешь идиотскую задачу, придуманную «кабанчиком»? Но это ведь так.

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

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

Согласен, я с начала это и понимал. И цели навариться на этом у меня нет. К сожалению технический опыт только в разработке сайтов и т.д., но мне более интересно копаться в низкоуровневых приложениях, что бывает очень редко)))

Понимаю, что ничего путного кроме - «бросай это дело» ты не можешь предложить, а жаль))

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

Отсутствие здравого смысла продолжается.

В линуксе «читает флешки» не приложение, а ядро. Стек USB драйверов, драйверы файловых систем. Вот с этим и надо разобраться. Найти флешку, которую «не читает», собрать логи, и посмотреть в чём дело. Я ставлю на то, что на флешке файловая система NTFS или exFAT, а в старом ядре нет драйвера этой файловой системы. Почему бы просто не добавить в старую систему свежее ядро, загрузиться им, и проверить?

Почему k2gui не работает с другими принтерами тоже можно разобраться. Я ставлю на то, что udev-правило создаёт симлинк k2gui-printer только для двух моделей принтера. Поменяй правило на простое KERNEL=="lp[0-9]*", SYMLINK+="k2gui-printer" и будет создавать симлинк k2gui-printer при подключении любого принтера.

Может быть дело с принтером в другом. Драйверы принтеров в линуксе юзерспейсные, обновление ядра не поможет. Может быть k2gui умеет работать только с PCL5e принтерами, или только с PostScript принтерами. Но с этим ведь тоже можно разобраться. Во всяком случае, PCL5e принтеров не одна единственная модель на рынке.

Оказывается, что и безналичная оплата в k2gui работает со сторонним терминалом. И всё это надо выкинуть, и вместо этого сделать какие-то костыли на php. Видимо потому что «я умею только разработку сайтов».

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

Я ставлю на то, что на флешке файловая система NTFS

Тоже так думал, когда поставил систему и не обнаружил ntfs и даже поддержку ext4. Но тут вопрос, что как раз некоторые флешки с fat32 не читаются. По поводу проблем с ntfs заказчик не писал. Речь шла что только fat32 ведёт себя неадекватно. Не однократно просил проверить, что возможно флешки ntfs или exFAT форматнуты, но это был fat32.

Почему бы просто не добавить в старую систему свежее ядро, загрузиться им, и проверить?

Какое ядро посоветуете поставить? Сейчас стоит 2.6.27-7 generic. Кстати как ни пытался на 32-битную ub8 ставить эник, так он и не завёлся, ни 5-ая версия, ни 6-ая 32-битные. Может есть ещё проги 32-битные для удалённого доступа типа rudesktop, мой ассистент, litemanager? Teamviewer тоже не работает. Приходится просить подключать 2-ой ЖД с ub16 и с него через эник, копаться в ub8

Почему k2gui не работает с другими принтерами тоже можно разобраться

Согласен, сейчас это не горит, пока старый принтер работает, за совет спасибо

Оказывается, что и безналичная оплата в k2gui работает со сторонним терминалом

Всё-равно нужно реализовать добавление файлов с электронной почты. Через веб-интерфейс мне понятно как сделать. Через k2 уже не ясно как

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

Оказывается, что и безналичная оплата в k2gui работает со сторонним терминалом

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

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

Всё-равно нужно реализовать добавление файлов с электронной почты. Через веб-интерфейс мне понятно как сделать. Через k2 уже не ясно как

В руководстве на копиркин-профи написано, что там есть функция печати из «электронной библиотеки». Электронная библиотека это съёмный носитель с меткой тома K2LIB. Мне кажется это можно использовать для печати файлов, присланных по почте: периодически скачивать новую почту из ящика, извлекать вложения, раскладывать в «электронную библиотеку». А пользователь будет печатать из «электронной библиотеки».

Вот тут https://unix.stackexchange.com/questions/53047/periodically-download-attachments-from-mail-box советуют для такой автоматизации использовать fetchmail и munpack.

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

функция печати из «электронной библиотеки».

Уточнил этот момент - к сожалению эта функция не доступна, и заказчик не видел эту функцию.

Во вторник сможем проверить момент с печатью файлов через флешку с именем K2LIB

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

Да, это сработало: https://youtube.com/shorts/Qpd3YwvqGdg?feature=share

Тут теперь можно:

  • На ubuntu8
  1. Пытаться исправлять баги с файловыми системами
  2. Настраивать почту (хотя проблемы с сертификатами у интернета и в браузере страницы не работают)
  3. Скидывать все файлы на usb флешку K2LIB (хотя можно сделать симлинк скорее всего)

либо

  • На ubuntu16
  1. Пытаться запускать программу через чрут и решить проблемы с: 1.1 сканированием 1.2 печатью 1.3 ксерокопией
  2. Настроить запуск программы k2 в другом tty на полный экран
  3. И также скидывать файлы на флешку K2LIB
SaintAnd
() автор топика
Ответ на: комментарий от SaintAnd

Можно попробовать поставить ядро посвежее, из ubuntu 14.04 (trusty):

wget https://mirror.yandex.ru/ubuntu/pool/main/l/linux-lts-wily/linux-image-4.2.0-42-generic_4.2.0-42.49~14.04.1_i386.deb
wget https://mirror.yandex.ru/ubuntu/pool/main/l/linux-lts-wily/linux-image-extra-4.2.0-42-generic_4.2.0-42.49~14.04.1_i386.deb
dpkg -i --force-depends linux-image-4.2.0-42-generic_4.2.0-42.49~14.04.1_i386.deb linux-image-extra-4.2.0-42-generic_4.2.0-42.49~14.04.1_i386.deb
sed -i '/Depends: linux-image-4.2.0-42-generic/s/,.*//' /var/lib/dpkg/status

Там в пакете linux-image-extra-4.2.0-42-generic прописана зависимость от crda. А пакета crda в ubuntu 8.10 нету. Поэтому приходится ставить с помощью dpkg с игнорированием зависимостей, а потом информацию об этой зависимости удалять.

P.S.: Есть вот такой патч поддержки форматов файлов. Он включает в себя образ виртуалки с виндой. k2gui запускает эту виртуалку с помощью virtualbox. Для работы virtualbox с помощью dkms собирается ядерный модуль поддержки. Для работы dkms нужен пакет linux-headers, соответствующий linux-image. Вот этот linux-headers скорее всего поставить не получится, потому что он собран под ubuntu 14.04 (trusty) и требует новую версию glibc, новый gcc, и так далее. Если linux-headers не установить, то dkms не соберёт ядерный модуль поддержки virtualbox и «поддержка форматов файлов» работать не будет.

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