/ / Shell script pour écrire et lire des données de la communication série - linux, shell

Script shell pour écrire et lire les données d'une communication série - linux, shell

Je suis en train de créer un script shell simple pour écrire et lire des données sur un périphérique série. J'utilise ces commandes au terminal et elles répondent correctement:

Pour écrire j'utilise:

echo -en "xAAx04xC2" > /dev/ttyUSB0

Pour lire j'utilise read:

cat -v < /dev/ttyUSB0

mais quand j'inclus cela dans un script shell,il ne répond pas. J'ai besoin d'aide à ce sujet. De plus, je veux savoir que, lorsque j'envoie la commande write, elle devrait me donner une sortie au format hexadécimal mais elle me donne une sortie dans ce format M - * ^ NM- ^ H Aussi besoin d'aide dans ce domaine.

Réponses:

2 pour la réponse № 1

Je m'attendrais à ce que votre cat l'instruction bloque l'attente de la fin du fichier. Il peut traiter votre terminal d’entrée comme un terminal standard. Dans ce cas, il faudra un caractère de fin de fichier pour terminer l’entrée (par exemple, Control-D) et appliquer un autre traitement à l’entrée et à la sortie. Vous feriez mieux de vous familiariser avec le stty commande et ses options (voir page de manuel stty). Essayer de faire stty -F /dev/ttyUSB0 pour voir quelles options sont définies.

Le moyen le plus simple de lire l’entrée peut être delire un seul caractère à la fois. Vous pouvez essayer avec le script suivant. Ceci lira un caractère à la fois depuis l'entrée jusqu'à ce qu'un "q" soit entré.

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

Si -F ne fonctionne pas, redirigez stdin vers le périphérique.

Pour votre problème de sortie, je pense que cela fonctionnemais vous voyez les caractères affichés en tant que caractères et non les codes hexadécimaux. Pour voir les codes hexadécimaux (pour les tests de vérification uniquement - je ne pense pas que vous souhaitiez envoyer les codes hexadécimaux au terminal), essayez:

echo -en "xAAx04xC2" | od -tx1

Vous pouvez également vouloir définir le mode brut lors de la sortie pour éviter que le pilote ne modifie les caractères de sortie.