Representar um dispositivo serial com socat

3

Estou tentando usar socat para representar um dispositivo serial externo. Se eu fizer isso em um terminal:

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

e execute esta versão simplificada do meu cliente de interface serial do Python em outro:

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

Funciona como esperado: o terminal socat READLINE imprime uma 'consulta' a cada segundo, e qualquer coisa que eu digite lá é enviada para e impressa pelo cliente.

Agora eu tenho um programa em Python que emula o dispositivo serial:

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

Isso funciona como planejado quando eu o executo a partir da linha de comando: quando eu digito 'query', ele imprime um contador.

O que não funciona é quando tento vincular os dois lados com esse comando:

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

Nesse caso, nem o cliente Python nem a janela socat mostram nenhum dado.
O que estou fazendo de errado? Como faço para vincular o stdin e stdout do echo.py ao pesudo tty para que eu possa ler / escrever nele como um dispositivo serial?

(Embora eu esteja usando o Python neste exemplo, tenho o mesmo problema com um emulador escrito em C)

    
por AShelly 20.06.2014 / 08:50

1 resposta

2

Tente isto:

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

(por alguma razão, não gostei de eu especificar o link = mas o acima fornecido /dev/pts/6 , então eu corri:

$ sudo python pyserial1.py
4
1
1
8
...
    
por 25.06.2014 / 04:36