stty device baud-rate réinitialise une fois qu'il n'est plus utilisé

0

MBP 2013, avec Yosemite 10.10.2 Lors de l'utilisation d'un câble USB -> Série (jeu de puces FTDI), je ne parviens pas à obtenir un débit en bauds défini et à le bloquer tant que le périphérique n'est pas ouvert / écrit / lu. . Par exemple:

Si j'exécute, "stty -f /dev/cu.xxxxxxxx 19200" sans faire quoi que ce soit de logiciel associé, il réinitialisera le baud à 9600 instantanément après.

Cependant, si je lance "cat -u </dev/cu.xxxxxxxx" et que je règle ensuite le bauds à 19200 pendant que le chat est en cours d'exécution, le débit en bauds va rester. C'est également le cas lorsque j'écris du code de test et que j'exécute la commande système C open ("/ dev / cu.xxxxxxxx") et que je bloque le programme.

Sous les anciennes racines BSD, cela semble être un comportement standard. Lorsque j'essaie cela sur une boîte Debian, le taux de bauds reste stable. Cela laisse à penser que cela dépend du système, mais existe-t-il un moyen d’obtenir le débit en bauds comme valeur par défaut / clé permanente?

utilisateur3022479
la source
Le stty -f est pour Open and use ... donc si rien n'est ouvert, il sera par défaut au standard.
Ruskes
Eh bien oui, je l’ai aussi remarqué sous la page de manuel stty pour OS X, mais la page de manuel stty de Debian indique exactement la même chose. Si OS X souhaite utiliser les paramètres par défaut lors de l'utilisation de l'indicateur -f, existe-t-il un emplacement où les paramètres par défaut peuvent être définis par périphérique? Je détesterais devoir exécuter des commandes C system () afin de régler ceci facilement.
user3022479

Réponses:

2

Pour ceux qui tombent sur ça (oui, un autre ...), voici une solution shell (au moins Bash):

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.

Ek1noX
la source
1

Pour tous ceux qui pourraient tomber par la suite sur ce point, je n’étais pas en mesure de trouver une astuce pour garder un «bâton» de débit en bauds stty -f /dev/cu.xxxxxxxx 19200. J'ai fini par écrire un petit programme C simple qui open()et sleep()indéfiniment pendant que j'effectué toute autre magie bash, qui a effectivement imité ce que je voulais à l' origine.

utilisateur3022479
la source
1

J'avais un problème similaire et la réponse que vous avez publiée m'a amené à réfléchir à la possibilité d'exécuter stty, puis une autre commande avant que stty ne disparaisse. C’est essentiellement ce que fait la tuyauterie, même si stdin et stdout sont liés, ce qui n’est pas pertinent en l’espèce.

De mon expérience, ce qui suit vous permettra de changer la configuration de cu et d'y accéder ensuite avec ces paramètres.

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

Nick Dancer
la source