web-dev-qa-db-fra.com

Comment puis-je définir les bits de parité lorsque vous utilisez l'écran pour accéder à un port série

J'utilise généralement écran (1) pour ouvrir un port série avec la commande:

Sudo screen /dev/ttyUSB2 115200

J'ai essayé de définir Parenb (et un certain nombre d'autres choses) en utilisant la commande suivante:

Sudo screen /dev/ttyUSB2 115200,cs8,parenb,-parodd,-cstopb

Cependant, le système ne semble pas respecter cela. Voici les paramètres tels que rapportés par STTY tandis que je suis IN écran avec la commande ci-dessus:

$ Sudo stty -F /dev/ttyUSB2 -a
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^H; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 100; time = 2;
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts
-ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

Noter la -parenb Malgré le fait que je l'ai activé à la ligne de commande.

Si je fais le changement manuellement à ttyusb2, il n'est pas respecté après (ni tandis que) exécuté écran.

Ensemble Parenb:

$ Sudo stty -F /dev/ttyUSB2 parenb

Vérifiez sa valeur:

$ Sudo stty -F /dev/ttyUSB2 -a
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^H; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 100; time = 2;
parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts
-ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

Vous pouvez voir Parenb est défini correctement.

Run écran:

$ Sudo screen /dev/ttyUSB2 115200,cs8,parenb,-parodd,-cstopb

Vérifiez à nouveau parenb:

$ Sudo stty -F /dev/ttyUSB2 -a
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^H; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 100; time = 2;
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts
-ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

Oups, c'est de retour à être -parenb.

Que se passe-t-il?

Comment puis-je modifier cette commande pour utiliser même la parité (spécifiquement 8e1 au lieu du 8N1 par défaut)?

OS est Ubuntu 12.04.5 LTS avec le dernier HWE.

5
Tom Hennen

Longue histoire courte, il semble que screen _ ne prend pas en charge la définition de ces drapeaux. L'alternative serait de courir stty pour définir les indicateurs pendant que l'écran est connecté au port, comme vous l'avez fait. Alternativement, vous pouvez exécuter Kermit ou un autre programme d'émulateur de terminal à l'intérieur d'une session de ligne de commande d'écran conventionnel, au lieu d'avoir l'écran directement connecté au port série.

Le code source screen est à http://git.savannah.gnu.org/cgit/screen.git . On dirait que le fichier d'intérêt est tty.sh . Ceci est un script shell qui fonctionne pendant le processus de construction pour produire "TTY.C". Tty.c contient le code d'accès à des ports série.

La fonction SttyMode() semble être ce qui analyse les options TTY et définit le mode TTY. Il me semble qu'il gère un petit ensemble d'options fixes. "Parenb" et "Parodd" ne sont pas parmi eux.

On dirait que cela serait simple pour un développeur expérimenté avec C pour ajouter de la prise en charge de ces options, si c'est une option pour vous.

3
Kenster

Essayer Sudo screen /dev/ttyUSB2 115200,cs8,parenb,-parodd,-cstopb

De la page man pour stty :

  • cSN - Réglez la taille de caractère sur n bits, n dans [5..8]
  • [-] Parenb - génère un bit de parité dans la sortie et attendez-vous un bit de parité en entrée
  • [-] Parodd - Définir une parité impaire (même avec '-')
  • [-] cstopb - Utilisez deux bits d'arrêt par caractère (un avec '-')
6
Ƭᴇcʜιᴇ007