Выдавать себя за последовательное устройство с помощью socat

4738
AShelly

Я пытаюсь использовать socat для олицетворения внешнего последовательного устройства. Если я делаю это в одном терминале:

sudo socat -ddd -ddd PTY,raw,link=/dev/ttyS32,echo=0 READLINE 

и запустите эту упрощенную версию моего клиента последовательного интерфейса Python в другом:

import serial s = serial.Serial('/dev/ttyS32',baudrate=9600,timeout=1) while True: s.write("query\n") resp = s.read() if resp: print(resp) 

Он работает, как и ожидалось: терминал READLINE socat печатает полученный «запрос» каждую секунду, и все, что я набираю, отправляется и печатается клиентом.

Теперь у меня есть программа на Python, которая эмулирует последовательное устройство:

#echo.py n=0 while True: s = raw_input() if 'query' in s: print n n+=1 

Это работает как задумано, когда я запускаю его из командной строки: когда я набираю 'query', он печатает счетчик.

Что не работает, так это когда я пытаюсь связать две стороны вместе с помощью этой команды:

sudo socat -ddd -ddd PTY,raw,link=/dev/ttyS32,echo=0 EXEC:"python echo.py" 

В этом случае ни клиент Python, ни окно socat не показывают никаких данных.
Что я делаю неправильно? Как связать stdin и stdout echo.py с pesudo tty, чтобы я мог читать / записывать его как последовательное устройство?

(Хотя я использую Python в этом примере, у меня та же проблема с эмулятором, написанным на C)

3

1 ответ на вопрос

2
glallen

Попробуй это:

sudo socat -ddd -ddd PTY,raw,echo=0 "EXEC:'python /tmp/echo.py',pty,raw,echo=0" 

(по какой-то причине мне не нравилось указывать ссылку =, но приведенное выше, /dev/pts/6поэтому я запустил:

$ sudo python pyserial1.py 4 1 1 8 ... 

Похожие вопросы