Estou criando um script de shell simples para gravar e ler dados no dispositivo serial. Estou usando esses comandos no terminal e eles estão respondendo corretamente:
Para escrever, estou usando:
echo -en "xAAx04xC2" > /dev/ttyUSB0
Para ler, estou usando read:
cat -v < /dev/ttyUSB0
mas quando incluo isso em um script de shell,não está respondendo. Preciso de ajuda sobre isso. Também quero saber que, quando eu enviar o comando write, ele deve me dar saída em formato hexadecimal, mas está me dando saída neste formato M - * ^ NM- ^ H Também preciso de ajuda nisso.
Respostas:
2 para resposta № 1Eu esperaria que o seu cat
A instrução está bloqueando a espera do final do arquivo. Ele pode tratar sua entrada tty como um dispositivo de terminal padrão; nesse caso, será necessário um caractere de final de arquivo para finalizar a entrada (por exemplo, Control-D) e pode aplicar outro processamento à entrada e à saída. É melhor você se familiarizar com o stty
comando e suas opções (consulte página de manual stty) Tente fazer stty -F /dev/ttyUSB0
para ver quais opções estão definidas.
A maneira mais fácil de ler a entrada pode ser:leia um único caractere de cada vez. Você pode tentar com o seguinte script. Isso lerá um único caractere de cada vez da entrada até que um "q" seja inserido.
stty -F /dev/ttyUSB0 raw
stty -F /dev/ttyUSB0 -echo
while read -rs -n 1 c && [[ $c != "q" ]]
do
echo "read <$c>" # Replace this with code to handle the characters read
done < /dev/ttyUSB0
Se -F não funcionar, redirecione o stdin para o dispositivo.
Para o seu problema de saída, acho que está funcionandomas você está vendo os caracteres exibidos como caracteres e não os códigos hexadecimais. Para ver os códigos hexadecimais (apenas para testes de verificação - acho que você não deseja enviar os códigos hexadecimais para o terminal), tente:
echo -en "xAAx04xC2" | od -tx1
Você também pode querer definir o modo bruto ao emitir para evitar que o driver altere os caracteres de saída.