Драйвер эмуляции com порта для usb сканера linux

unixforum.org

Форум для пользователей UNIX-подобных систем

  • Темы без ответов
  • Активные темы
  • Поиск
  • Статус форума

Виртуальный com порт

Модератор: Bizdelnick

Виртуальный com порт

Сообщение troll80 » 17.05.2009 14:27

Re: Виртуальный com порт

Сообщение sash-kan » 17.05.2009 15:03

Re: Виртуальный com порт

Сообщение troll80 » 17.05.2009 16:07

Re: Виртуальный com порт

Сообщение troll80 » 17.05.2009 16:14

Re: Виртуальный com порт

Сообщение sash-kan » 17.05.2009 22:52

и больше ничего не появляется? забыл написать, что неплохо бы подключение производить после перезагрузки системы и команду dmesg выполнять через несколько (10-20) секунд после подключения кабеля.

но, судя по всему, придётся вам углубляться в usb-протоколы и в эмуляцию последовательного порта.
начать, наверно, можно с модуля usbserial:
Documentation/usb/usb-serial.txt
и
$ sudo modinfo usbserial
на предмет параметров, принимаемых модулем.

p.s. dmesg -c очищает буфер сообщений ядра.

Re: Виртуальный com порт

Сообщение troll80 » 18.05.2009 09:42

Re: Виртуальный com порт

Сообщение Denjs » 18.05.2009 10:26

Не надо нам «аналогий винды».
Если устройство полноценное, т.е. полностью реализует (нормально и правильно) профиль «последовательный порт» для USB, то никаких драйверов как правило ставить не надо — в большинстве дистрибутивов думаю уже идет в комплекте все что нужно. По крайней мере в SuSe Linux все идет «из коробки».

Например вот такой usb-2-com-адаптер в SuSe Linux 11.0 определяется без всяких доп. модулей, и создается устройство /dev/ttyUSB0 с которым можно работать так-же полноценно как и с «родным» /dev/ttyS0
Если ваше устройство реализует нормальный профиль для usb и полностью(!) — оно должно определяться аналогично.

Re: Виртуальный com порт

Сообщение Denjs » 18.05.2009 10:51

Вообще как я понимаю нужен подключенный модуль usbserial .
Также вы можете посмотреть сюда и/или сюда. Как я понимаю это про ваше устройство?

В общем просто включите модуль usbserial есил он не включен, и проверьте наличие у вас устройства /dev/ttyUSB0
там впрочем сказано загружать с заданными параметрами (судя по вашему dmesg после подключения — это ваше устройство)

Источник

Виртуальный последовательный порт для Linux

Мне нужно протестировать приложение последовательного порта в Linux, однако моя тестовая машина имеет только один последовательный порт.

Есть ли способ добавить виртуальный последовательный порт в Linux и протестировать мое приложение, эмулируя устройство через оболочку или скрипт?

Примечание: я не могу переназначить порт, он жестко запрограммирован на ttys2, и мне нужно протестировать приложение, как оно написано.

Для этого вы можете использовать pty («псевдотелетайп», где последовательный порт является «настоящим телетайпом»). С одного конца откройте /dev/ptyp5 , а затем прикрепите свою программу к /dev/ttyp5 ; ttyp5 будет действовать так же, как последовательный порт, но будет отправлять / получать все, что он делает, через / dev / ptyp5.

Если вам действительно нужно, чтобы он разговаривал с файлом с именем /dev/ttys2 , просто уберите старый /dev/ttys2 и создайте символическую ссылку с ptyp5 на ttys2 .

Конечно, вы можете использовать другое число, кроме ptyp5 . Возможно, выберите один с большим числом, чтобы избежать дублирования, поскольку все ваши терминалы входа также будут использовать ptys.

В Википедии есть дополнительная информация о ptys: http://en.wikipedia.org/wiki/Pseudo_terminal

Дополняя ответ @ slonik.

Вы можете протестировать socat для создания виртуального последовательного порта, выполнив следующую процедуру (проверено на Ubuntu 12.04):

Откройте терминал (назовем его Terminal 0) и запустите его:

Приведенный выше код возвращает:

Откройте другой терминал и напишите (Терминал 1):

имя порта этой команды может быть изменено в зависимости от компьютера. это зависит от предыдущего вывода.

вы должны использовать номер, доступный в выделенной области.

Откройте другой терминал и напишите (Терминал 2):

Теперь вернитесь в Терминал 1, и вы увидите строку «Тест».

Для этого используйте socat:

Также существует tty0tty http://sourceforge.net/projects/tty0tty/, который является настоящим эмулятором нуль-модема для Linux.

Это простой модуль ядра — небольшой исходный файл. Я не знаю, почему он получил отрицательные отзывы на sourceforge, но мне он подходит. Самое лучшее в нем то, что он также эмулирует аппаратные контакты (RTC / CTS DSR / DTR). Он даже реализует команды TIOCMGET / TIOCMSET и TIOCMIWAIT iotcl!

В недавнем ядре вы можете получить ошибки компиляции. Это легко исправить. Просто вставьте несколько строк вверху источника module / tty0tty.c (после включений):

Когда модуль загружен, он создает 4 пары последовательных портов. Устройства: от / dev / tnt0 до / dev / tnt7, где tnt0 подключен к tnt1, tnt2 подключен к tnt3 и т. Д. Вам может потребоваться исправить права доступа к файлам, чтобы иметь возможность использовать устройства.

Думаю, я немного поторопился со своим энтузиазмом. Хотя драйвер выглядит многообещающе, он кажется нестабильным. Я не знаю наверняка, но думаю, что это разбило машину в офисе, над которым я работал из дома. Я не могу проверить, пока не вернусь в офис в понедельник.

Во-вторых, TIOCMIWAIT не работает. Код, кажется, скопирован из какого-то примера кода «крошечного терминала». Обработка TIOCMIWAIT кажется на месте, но она никогда не просыпается, потому что соответствующий вызов wake_up_interruptible () отсутствует.

Авария в офисе действительно произошла по вине водителя. Отсутствовала инициализация, и полностью непроверенный код TIOCMIWAIT вызвал сбой машины.

Вчера и сегодня потратил на переписывание драйвера. Было много проблем, но теперь у меня все хорошо. По-прежнему отсутствует код для аппаратного управления потоком данных, управляемого драйвером, но он мне не нужен, потому что я сам буду управлять контактами, используя TIOCMGET / TIOCMSET / TIOCMIWAIT из кода пользовательского режима.

Читайте также:  Linux mint нет desktop sharing

Если кому-то интересна моя версия кода, напишите мне, и я отправлю его вам.

Источник

как сделать эмуляцию serial порта на usb-устройстве?

В windows’е для определенного устройства есть специальный драйвер. Как мне его воспроизвести на linux mint 15? http://dumpz.org/753081/ — вот код драйвера.

Написать драйвер. Что за устройство-то?

Написать драйвер. Что за устройство-то?

Самодельное — дали поюзать, описали протокол взаимодействия по Serial-порту, дали драйвер под винду..)

Как драйвер под венду называется?

CDC, «драйвер» в ведре.

Cмотри драйвер usbserial.

Установи пакет tinyserial, запускай com /dev/ttyACM0 [скорость] . Или тупо screen используй — он-то у всех установлен.

А еще можно при помощи setserial или minicom настроить «порт» и фигачить посредством echo туда всякую дребедень, считывая tailf ‘ом.

Это, извиняюсь, говнище какое-то, но никак не код «драйвера»!

Да, конечно. Я бы даже не начинал разбираться, если б протокола не было )))

Лол, это *.inf от вендового драйвера; не код, да.

В общем, похоже, ТС собирается сделать «то, не знаю, что». Трудно ему придется.

В общем, похоже, ТС собирается сделать «то, не знаю, что». Трудно ему придется.

Для того тему и завел — спросить совета. tinyserial в mint’е нету. $ /dev/ttyACM0 не появляется. С setserial и minicom не разобрался. Да. Трудно.

Как страшно жить.

Вынимаешь железку, вставляешь, смотришь dmesg что там определилось. В девайсах у тебя появятся ttyACM0 или ttyU0 . На него и натравливаешь cu или minicom .

Par example: cu -s 9600 -l /dev/ttyU0

Либо эта самоделка глючит либо драйвер её не опознаёт.

Попробуй lsusb, может он его покажет. Но то, что в dmesg его не видно это плохой признак.

Кабель к нему тоже самопальный идёт?

Кабель к нему тоже самопальный идёт?

Покупной обычный Mini usb — Crc-драйвер успешно ищется и встает на винде — только-что попробовал.

Ну ты как маленький прямо! Запусти udevadm monitor и воткни железяку. Если по выхлопу удева не поймешь, то dmesg тебе, возможно, что-то подскажет.

А если это не CDC, а хитрожопая вантузная НĒХ, то придется при помощи libusb что-нибудь пилить.

В девайсах у тебя появятся ttyACM0 или ttyU0

Увы — их не появляется.

dmesg что говорит? А lsusb ? А udevadm monitor при втыкании железяки?

Если все молчат, производитель железки — козел.

До неё только дошел — уже завтра буду разбираться. Через pyusb делаю:

путем исключения после втыкания и вытыкания usb-девайсов, становится понятно, что что-то там видно на usb-порте. вопрос тепрь, как с этим «что-то» работать, через вот эту либу.

после втыкания и вытыкания usb-девайсов, становится понятно, что что-то там видно на usb-порте.

Посмотри через lsusb, что за VID и PID у железяки. А еще глянь, какое устройство ей соответствует (/dev/bus/usb/[BUS]/[DEV]) и попробуй его открыть в обычном последовательном терминале. Вдруг случится чудо? Тогда просто правило для удева напишешь для этих VID и PID, чтобы симлинк делал.

Есть нормальные железные эмуляшки от старых нокиа. Банка пива.
Правда получается не com1, com2 и с програматорами правильно не сростется.
Если конечно для этого нужно. rts, cts и тп.

Поднял задницу — нашел.
Bus 005 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Оно.

USB CDC ACM Vendor and Product ID Definitions VID 04D8 PID 000A

Гуглишь «linux VID 04D8 PID 000A» и находишь что стоит его один раз воткнуть в Ubuntu 10.04 — оно начинает рабоать везде. Так что выкинь нахер свой минт и ставь убунту.

I did not change anything. No patches, nothing. I just loaded «usbserial», «cdc_acm» and «ftdi_sio», plugged in the device and it worked. I added the modules to /etc/modules and the board gets ready with the RPi boot. Perfect! The only difference is, that I plugged it once into my notebook with Ubuntu 10.04 (2.6.+).

Волшебный дистрибутив — сам пользуюсь 🙂

Возможно ТС-у просто нужно вручную сделать:

$ modprobe usbserial $ modprobe cdc_acm

и воткнуть девайс. Возможно тогда оно подцепится в Mint.

Скорее всего, в параметрах указав pid и vid девайса (product=xxx, vendor=xxx).

Источник

Эмуляция COM-порта у сканера-штрихкода bluetooth в Linux

Имеется сканер-штрихкода подключенный к USB свистку в CentOS 6.10.
В Windows для подключения этого сканера к 1С используется эмуляция COM-порта. Т.е. подключаем сканер через специальную программу, которая как я понимаю пробрасывает данные с подключенного к «свистку» по bluetooth сканера на созданный этой програмкой COM-порт и обратно, а 1С уже работает с данным COM-портом.

Вопрос такой. Как подобное сделать в Linux?
Сканер по bluetooth подключается.

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

ну подключил, теперь rfcomm на него и будет com порт

«популярное пояснение»

подключаем сканер через специальную программу, которая как я понимаю пробрасывает данные с подключенного к «свистку» по bluetooth сканера на созданный этой програмкой COM-порт и обратно, а 1С уже работает с данным COM-портом.

у тебя сложились неверные представления. com-порт «создает» ОС (точнее драйвер устройства; но эти детали тебе не нужны). программа работает с устройством через этот виртуальный com-порт. Как там и что делал в windows в связке программа 1C не так важно сейчас для тебя.

Читайте также:  Хост процесс для задач windows не работает что это

В linux
После сопряжения сканера и адаптера bluetooth создаётся устройство /dev/rfcomm0 (это не точно). Посмотреть как именно называется sdptool browse или сразу после сопряжения искать в выхлопе dmesg|tail

для использования сканера необходимо ПО под linux (его нет?) или описание системы команд/протокола для обмена через com-порт для написания такого ПО (ну или скриптов). Если такой документации нет (производитель/продавец же не предоставляет?), то возможно поискать в открытом ПО для сканеров (есть такое?). На крайний случай wine (такое возможно?) или реверсинженеринг ПО из windows.

Как уже писали выше, с точки зрения linux сканер это COM-порт к которому подключено некое устройство. Все что нужно это читать данные из этого порта.

1С в linux может работать c этими данными только через внешнею компоненту(ВК) с типом Native.

В стандартных конфигурациях есть такая Драйвер1СУстройстваВводаNative. См там должны быть два SO, например: ScanOPOSNativeLin64_8_1_9_1.so ScanOPOSNativeLin32_8_1_9_1.so

Нашел такую конфигурацию БПО (библиотека подключаемого оборудования) буду через неё пробовать. Там есть такой драйвер оборудования как «1С:Сканеры штрихкода (NativeApi)», попробую его.

Вообщем настроил следующим образом

У меня появился файл /dev/rfcomm0.
Потом я удалил /dev/ttyS3 и сделал Линк с /dev/rfcomm0 на /dev/ttyS3

Это поведение соответствует заявленному производителем? Режим энергосбережения или что-то похожее.

мне тут подсказывают, что возможно нужно убрать park

мне тут подсказывают, что возможно нужно убрать park

Убрал, но ничего не изменилось, все так же отключается. Причем в Windows с той же конфигурацией 1С и сканером, такого не наблюдается. Какие еще настройки могут на это влиять?
И еще вопрос. Можно как то сделать чтобы сканер сам подключался на ttyS3? А то приходится каждый раз вручную делать симлинк с rfcomm0.
И rfcomm0 почему то появляется только после ручного

Есть преобразователи USB<>bluetooth последовательного порта. Они появляются как /dev/ttyUSBx. Возможно, как раз то, что надо. Около двух-трех баксов на али.

А чего, этот сканер клавиатурой не умеет работать?

мне тут подсказывают, что возможно нужно убрать park

Убрал, но ничего не изменилось, все так же отключается.

Вот по этому ману получается, что это никак не отключается — бред, наверное я не разобрался. Также sniff, как я понял, может быть причиной; но как это изменить непонятно. Есть идея добавить discovto 0 — хотя, это вроде бы «о другом»; я бы попробовал. На крайний случай придётся «костылять» некий сервис, который будет проверять наличие порта и если его нет подключать сканер автоматически — мне такое не нравится. Но если, через конфиг не получится, я не вижу других средств.

А действительно необходимо держать сканер постоянно соединённым с ПК?

Можно как то сделать чтобы сканер сам подключался на ttyS3? А то приходится каждый раз вручную делать симлинк с rfcomm0.

Да, через правила udev. Опять же я бы

  • сначала посмотрел что происходит при спаривании сканера и ПК в dmesg
  • посмотрел текущие правил для сканера в /etc/udev/rules.d/
  • создал/модифицировал правило

И rfcomm0 почему то появляется только после ручного

про rfcomm0 я по памяти писал, возможно это и необязательно. Но мне это странно, может же быть несколько устройств с rfcomm и с разными настройками. Решается через правило udev

А чего, этот сканер клавиатурой не умеет работать?

Умеет, но как мне кажется это более медленный и менее надежный способ.

Есть преобразователи USB<>bluetooth последовательного порта. Они появляются как /dev/ttyUSBx. Возможно, как раз то, что надо. Около двух-трех баксов на али.

Т.е.поставить преобразователь с Али, а в него уже «свисток» пихать? Чего то фигня какая то получается, Будет ли вообще такая связка работать?

«Свисток» в данном случае не понадобится. Будет эмуляция последовательного порта на bluetooth

Почему это? Драйвер клавиатуры простой и оттестированный. Какие-то непонятные драйверы фиг пойми кем писанные — явно хуже. Я бы использовал как клавиатуру и не заморачивался.

«Свисток» в данном случае не понадобится. Будет эмуляция последовательного порта на bluetooth

Я может не понимаю чего, можно ссылку? Поискал и не могу понять о чем речь.

А как спаривание делать, вручную? При com порте происходит автоматически при обращении к нему (вроде бы).

Ищи HC-05 или HC-06 на Али. Пишу с планшета, поэтому ссылки дать не могу.

Вот по этому ману получается, что это никак не отключается — бред, наверное я не разобрался. Также sniff, как я понял, может быть причиной; но как это изменить непонятно. Есть идея добавить discovto 0 — хотя, это вроде бы «о другом»; я бы попробовал.

Добавил, но ничего не произошло. А может как то влиять постфикс приходящего со сканера? У меня после кода идет ‘CR’+’LF’ на win, а на Линуксе, почему-то, ‘LF’+’LF’.

А действительно необходимо держать сканер постоянно соединённым с ПК?

Мне он не нужен постоянно подключенный, логика такая. Когда 1С лезет в COM порт происходит подключение самого сканера, а когда отключается то соединение рвется, по крайней мере в Windows было так. Тут же получается что устройства rfcomm0 не видно вообще пока не сделаешь

Сейчас как раз ковыряю его. Пока сделал через скрипт при старте.

При помощи AT-команд модуль настраивается как мастер и подключается к заданной железке. Далее он просто проксирует поток между синезубом и виртуальным портом.

А, блин, да: к модулю понадобится usb-ttl, что-то я ступил!

Это ожидаемый результат :(, но ведь проверить надо было.

меня после кода идет ‘CR’+’LF’ на win, а на Линуксе, почему-то, ‘LF’+’LF’.

Думаю «да», это влияет. Про сканер не скажу, а модемы «вешаются» если не получают ‘CR’+’LF’. Для модемов понимающих AT-команды (и windows-а) комбинация ‘CR’+’LF’ разделяет строки. В линуксе принято просто ‘LF’. А где ты наблюдаешь эти коды?

ут же получается что устройства rfcomm0 не видно вообще пока не сделаешь

для USB-модемов (да и не только) создаются устройства /dev/ttyUSB (или /dev/ttyACM ; есть ещё варианты). А вот для виртуального порта через Bluetooth разрабы отчего-то приняли просто rfcomm (мне вот непонятно). Если других виртуальных портов через Bluetooth у тебя не предвидится, то можешь не создавать rfcomm0 — сразу rfcomm привязывай к /dev/ttyS*

Читайте также:  Amd64 microsoft windows что это

Хочется уточнить проблемы именно при работе через 1C?

если работать с этим портом через терминал (например CuteCOM) проблема есть?

Ничего уже не понимаю. 🙁 После запуска minicom, он тут же крашится.. НО зато после этого сканер ведет себя так как нужно, на конце ‘CR’+’LF’ и не отваливается.
Не понимаю в чем проблема, возможно при старте minicom что то донастраивает, а вот что и где посмотреть пока непонятно. Ну не запускать же его при старте системы..

stty поможет проверить настройки порта.

Нет только, например если сделать

то тоже вылетает через 5 сек. По выводу видно что передается два ‘LF’

stty поможет проверить настройки порта.

Я уже туплю наверное. Подскажите как посмотреть то? 🙁

Да, вот этот момент как-то ускользнул от внимания. Вероятно, просто привязать rfcomm* к ttyS* мало, нужна и «наладка». Если не ошибаюсь, то параметры порта можно подсмотреть в inf-файле его виндового драйвера. В скрипт, который «дергается» правилом udev для rfcomm добавить команду настройки через stty.

Разобрался.
До запуска minicom

В паре написано, я до ноутбука только вечером доберусь. После обхода и прогулки.

Нашел какие два ключа были нужны

Погуглив вроде это файл, rc.serial. Но у меня в CentOS нет такого, а его создание ни к чему не приводит.

Нашел какие два ключа были нужны

после привязки rfcomm* к /dev/ttyS3 выполни

Да так работает, но при этом происходит активация сканера и он пищит. А нельзя это как то без спаривания сделать? Ну типа правил udev.

я и подразумевал (после проверки) добавить эту команду в правило udev: настройка бы выполнялась при подключении сканера.

Чего то не выходит у меня. Я правильно понял, что правило типа такого?

Может в другое место надо запихать?

Но если сделать скрипт таким то все работает, правда выглядит как костыль.

KERNEL==«rfcomm0», SUBSYSTEM==«tty», ATTR

==«00:20:E0:7F:43:0A», ATTR==«1», SYMLINK+=«ttyS5», RUN+=«/etc/bluetooth/stty_SF51.sh»

да, примерно так оно и должно выглядеть. разве что, я бы добавил ACTION==»add»

Не срабатывает скорее всего потому, что на момент выполнения команды порт ещё не связан с симлинком — т.е. нет устройства /dev/ttyS5. Я уже обращал твоё внимание, что команда должна применяться после появления устройства в /dev/ttyS5. Или добавить ACTION==»add» в правило или модифицировать скрипт. Например, как ты поставить задержку или вот так как-то

Причем если сканер находится в энергосберегающем режиме то вообще ничего не получается. И к тому же происходит активация сканера и он пищит. Может все таки можно как то более красиво сделать?

Всё дело в том, что американцы программы «тупые». Сканер и так скорее всего находиться в требуемом режиме, но stty делает ему принудительную настройку, причём при каждом его появлении в системе. Хотя нам этого как бы и не нужно. По умолчанию последовательный порт в линукс имеет установки отличающиеся от настроек в сканере (коряво сказал) — тебе бы только «принимающий» интерфейс настроить, а там мы настраиваем всю цепочку. Вот не знаю можно ли такое сделать. Точнее сказать: не знаю как это сделать.

P.S. Ты же взаимодействуешь со сканером через какие-то компоненты 1С? Там нет конфигов для настройки портов/устройств?

1с может читать с fifo? Сделай fifo, да отформатируй выхлоп туда. Что ему вообще надо? Может через xdotool накостылись можно.

Но если сделать скрипт таким то все работает, правда выглядит как костыль.

У меня был скрипт типа такого, он до сих пор там работает. Сканер штрихкодов штука тупая. Он просто передаёт код и endline в конце. Я его просто замыкал на xdotool и все были счастливы. Я из треда не понял кто кому что передаёт, опиши весь процесс еще раз.

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

Добавление ACTION==«add» ничего не меняет все равно нужен sleep 1

Сканер и так скорее всего находиться в требуемом режиме, но stty делает ему принудительную настройку, причём при каждом его появлении в системе.

Да вроде как достаточно только один раз сделать, а потом само работает.

P.S. Ты же взаимодействуешь со сканером через какие-то компоненты 1С? Там нет конфигов для настройки портов/устройств?

Да вроде нет стандартных, но буду что то колхозть тогда. 🙂

Я из треда не понял кто кому что передаёт, опиши весь процесс еще раз.

Если я правильно понял, то примерно так. Сканер bluetooth Подключается к USB-bluetooth, создается порт /dev/rfcomm0 на который создается линк /dev/ttyS5. А 1С, через драйвер NativeAPI подключается к COM6. Или не так?

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

ну так аффтар «перла» как бы намекал

я не проверял работоспособность этого «кода»
«кода»

Сообщаю для тех кто может тоже захотеть попробовать. 🙂

Источник

Оцените статью