Estou tentando testar o seguinte ambiente:
Um servidor (é um roteador, possui busybox e alguns outros cmd) com uma porta serial fÃsica e soquete aberto
#tcpsvd -v 0.0.0.0 -p 999 gato /dev/ttyS0
Vários clientes se conectando ao servidor
Meus problemas: 1 quando escrevo para ttyS0, os dados de uma nova linha são enviados aleatoriamente para apenas um cliente por vez, gostaria que fosse para todos ao mesmo tempo. 2 o que posso usar em vez de cat para ter uma comunicação bidirecional? 3 Como posso fazer com que o fluxo seja feito byte por bye, enviado e não linha por linha?
Obrigado!
Infelizmente, este é um recurso padrão da comunicação por porta serial: um dispositivo TTY é um FIFO simples. Depois que os dados são lidos do dispositivo TTY, eles desaparecem. É por isso que geralmente não é uma boa ideia ter vários processos acessando o mesmo dispositivo TTY simultaneamente.
Uma linha serial RS-232 é fundamentalmente um-para-um: dispositivos e protocolos projetados para portas seriais são projetados para esperar apenas um parceiro de link na outra extremidade da linha.
Se você precisar de vários clientes TCP com uma única porta serial, receio que você precise criar seu próprio programa que faça a comunicação da maneira que você precisa.
microcom
é um comando do busybox que parece se adequar ao propósito aqui. De acordo com a página de manual do busybox, ele usa stdin & stdout, então deve funcionar comtcpsvd
... mas não testei.Supondo que entendi sua pergunta,
stty -F /dev/ttyS0 raw
deveria fazê-lo, mas se você mudar paramicrocom
em vez decat
, já deverá fazer isso por você.Presumi que você está restrito a tudo o que está disponÃvel no roteador, portanto a resposta acima pressupõe apenas o busybox, pois não posso saber quais outros comandos podem estar disponÃveis.
Mas se você puder adicionar mais software, eu recomendaria usar algo projetado para esse propósito, como
ser2net
.