2 votes

la vitesse de transmission du périphérique stty se réinitialise lorsqu'il n'est plus utilisé

-MBP fin 2013, avec Yosemite 10.10.2 Lorsque j'utilise un câble USB --> série (chipset FTDI), je suis incapable d'obtenir un débit en bauds et de le faire coller alors que le périphérique n'est pas ouvert/écrit/lu. Par exemple :

Si j'exécute "stty -f /dev/cu.xxxxxxxx 19200" alors que je ne fais rien de logiciel avec, la vitesse de transmission revient à 9600 immédiatement après.

Cependant, si j'exécute "cat -u < /dev/cu.xxxxxxxx" et que je règle ensuite la vitesse de transmission à 19200 pendant que le chat est en cours d'exécution, la vitesse de transmission reste inchangée. C'est également le cas lorsque j'écris un code de test et que j'exécute la commande système C open("/dev/cu.xxxxxxxx") et que je fige le programme.

Sous les anciennes racines BSD, cela semble être un comportement standard. Lorsque j'essaie de le faire sur une machine Debian, la vitesse de transmission reste inchangée. Cela me laisse penser que cela dépend du système, mais y a-t-il un moyen de faire en sorte que la vitesse de transmission soit la vitesse par défaut/suivie pour toujours ?

8voto

Ek1noX Points 151

Pour tous ceux qui tombent sur ce problème (oui, encore un...), voici une solution shell (Bash au moins) :

L'astuce consiste à ouvrir un descripteur de fichier pour le port série avant d'utiliser stty. Et le garde ouvert pendant toute la lecture/écriture.

Exemple :

exec 3<>/dev/cu.xxxxxxxx           # open a file descriptor
stty -f /dev/cu.xxxxxxxx raw 19200 # configure the serial port
cat /dev/cu.xxxxxxxx               # do stuff...
exec 3<&-                          # close the file descriptor

Merci à @crasysim pour son commentaire sur la même question.

2voto

user3022479 Points 21

Pour tous ceux qui pourraient tomber sur ce sujet plus tard, je n'ai pas trouvé d'astuce pour aider à conserver une vitesse de transmission définie en utilisant stty -f /dev/cu.xxxxxxxx 19200 . J'ai fini par écrire un simple petit programme en C qui voulait open() y sleep() indéfiniment pendant que j'exécutais toute autre magie de bash, ce qui émule efficacement ce que je voulais à l'origine.

1voto

Hobbamok Points 1509

J'avais un problème similaire et la réponse que vous avez postée m'a fait penser qu'il y avait un moyen d'exécuter stty puis une autre commande avant que stty ne se termine. C'est essentiellement ce que fait le piping, mais avec stdin et stdout liés ensemble, ce qui n'est pas pertinent dans ce cas.

D'après mon expérience, ce qui suit vous permettra de modifier la configuration du CU et d'y accéder avec ces paramètres.

stty -f /dev/cu.xxxxxxxx 115200|cat /dev/cu.xxxxxxxx

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X