Comment définir le débit en bauds à 307200 sur Linux?

Fondamentalement, je suis en utilisant le code suivant pour définir le débit en bauds du port série:

struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B115200);
cfsetospeed(&options, B115200);
tcsetattr(fd, TCSANOW, &options);

Cela fonctionne très bien. Mais je sais que je dois communiquer avec un périphérique qui utilise un débit en bauds de 307200. Comment puis-je régler ça? cfsetispeed(&options, B307200); ne fonctionne pas, il n'y a pas de B307200 défini.

Je l'ai essayé à l'aide d'un MOXA Uport 1150 (qui est en fait une clé USB-to-serial converter) et le port série standard d'une carte mère Intel. Je ne sais pas exactement le type de cette dernière, setserial juste le signale comme 16550A.

Pouvez-vous définir ce taux avec "stty'? Si pas, je doute que vous le pouvez (qui semble être une obscure de la vitesse à moi), si vous le pouvez, alors jetez un oeil à cette partie du code. Le "speed_t' options sont définies par une valeur octale dans termios.h de sorte que vous pourriez tirer de la valeur correcte, par l'analyse de ces valeurs.
Pas de stty ne fonctionne pas car il vérifie le débit en bauds avec certaines valeurs codées en dur. Il est intéressant de noter serserial permet de définir 307200 et de ne pas signaler une erreur. Mais lorsque je tente de lire à partir du port série, il ne fonctionne pas.
Êtes-vous vraiment bien sûr de la vitesse de transmission de votre appareil est 307200? N'est-ce pas quelque chose de spécifique à la radio de communication?
Yep je suis vraiment sûr, 307200 est correct.

OriginalL'auteur cairol | 2011-02-11