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

Я использую socat для создания пары виртуальных последовательных портов. К одному я подключаюсь с помощью простой программы на C (используя termios), а к другому я хотел бы подключиться с помощью программы под названием Ardupilot Mega Planner (для RC-вещей). Однако Планировщик не распознает виртуальный порт (перечисленный в /dev/pts), а только устройства tty и устройства /dev/serial. Нужно ли делать какое-то специальное крепление, чтобы это работало? Или есть обходной путь, который я мог бы попробовать? Я попытался «связать» существующий последовательный порт (например, ttyS0), но я получаю сообщение об ошибке «неуместный ioctl», если я пытаюсь сделать что-то подобное (виртуальный порт к реальному порту, реальный порт к реальному порту). Есть идеи?

редактировать: после просмотра исходного кода программы (Планировщик миссий) кажется, что она только «распознает» (или добавляет порты) все устройства /dev/ttyS*, /dev/serial/by-id/* устройства, /dev/USB0 и /dev/ACM0. Поэтому либо мне нужно отредактировать исходный код, либо найти способ «проверить» порт ttyS*. По-прежнему кажется, что планировщик миссий просто не будет подключаться ни к каким устройствам ttyS *, кроме S1 или S0. Есть идеи? У меня такое ощущение, что это потому, что они как-то неправильно настроены.

редактировать 2: я, наконец, получил исходный код ArdupilotMega Planner и изменил его, чтобы он включал устройства из /dev/pts/. Тем не менее, я все еще получаю ту же проблему. Планировщик получает какую-то проблему, когда открывает порт. Есть ли какой-то параметр, который нужно сразу проверить/изменить, чтобы программа могла подключиться к нему? Собираюсь исследовать и попытаться более тщательно понять связь через последовательный порт...


person The Spartan    schedule 24.07.2012    source источник


Ответы (3)


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

socat PTY,link=/dev/ttyS10 PTY,link=/dev/ttyS11

и свяжите свои программы с ttyS10 и ttyS11.

person D. Rouse    schedule 25.07.2012
comment
Ладно, сейчас попробовал. Моя программа (APM Mission Planner), похоже, по-прежнему не распознает ни один последовательный порт, на который ссылается socat. Мне не удалось подключиться к ttyS10, хотя я использовал именно ту команду, которую вы дали выше (хотя мне пришлось использовать ее так: socat -d -d PTY,link=/dev/ttyS10 PTY,link=/dev/ttyS11. В противном случае окно просто зависнет, если я не введу -d -d. В любом случае, я не знаю, что делает socat, но программе, похоже, это не нравится, но спасибо за предложение. - person The Spartan; 25.07.2012
comment
Кроме того: планировщик миссий, похоже, не хочет подключаться к ttyS10, точка, даже если socat ничего не делает (обычно он пытается подключиться к распознаваемым портам, даже если к ним ничего не подключено/не подключено) . Поэтому я не знаю, является ли это проблемой с socat, поскольку моя система не распознает ttyS10 и/или ttyS11 (хотя termios, похоже, прекрасно их принимает). - person The Spartan; 26.07.2012
comment
Извините, я понятия не имею, что вызывает эту проблему. С командой socat все в порядке. Я предполагаю, что это что-то с программой планирования миссий APM. - person D. Rouse; 26.07.2012

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

socat tcp-l:5760 /dev/YOURPORT,raw,echo=0,bHEREBAUDRATE

Затем в планировщике Misson выберите «TCP», сервер: 127.0.0.1, порт: 5760.

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

person Deadolus    schedule 18.12.2013

Пробовали ли вы связываться с более высокими ttyS, например, ttyS10 или выше. Они обычно ничему не присваиваются. РЕДАКТИРОВАТЬ: Также какую команду вы используете для создания последовательных портов

person daniel_p    schedule 25.07.2012
comment
Хорошо, вот команда, которую я использовал для создания виртуальных портов: sudo socat -d -d pty,raw,echo=0 pty,link=/dev/ttyS10,raw,echo=0 Затем я пытаюсь подключиться к ней с помощью своей программы, и она выдает исключение ввода-вывода (что-то о недопустимом аргументе). Извините за то, что я новичок в серийных устройствах, но нужно ли мне монтировать этот порт или что-то еще? - person The Spartan; 25.07.2012
comment
Я боюсь, что объект SerialPort нельзя использовать с виртуальными COM-портами socat (исключение недопустимого аргумента). Я переключу свой код на файловый поток и посмотрю, работает ли это. - person josef; 24.03.2014