champ c_cflag de termios

Le
pes
Bonjour,

je souhaitais programmer la liaison série sous linux et je me suis
aperçu que lorsque je configurais ma liaison, j' étais obligé de mettre
les bits 10 et 11 du champ c_cflag de termios à 1:
termios_p.c_cflag |= 0x0C00;

sans quoi cela ne marche plus rapidement.

Quelqu' on connaît t' il la signification de ces bits?
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Eric Levenez
Le #984775
Le 22/03/07 11:12, dans
je souhaitais programmer la liaison série sous linux et je me suis
aperçu que lorsque je configurais ma liaison, j' étais obligé de mettre
les bits 10 et 11 du champ c_cflag de termios à 1:
termios_p.c_cflag |= 0x0C00;

sans quoi cela ne marche plus rapidement.

Quelqu' on connaît t' il la signification de ces bits?


Il ne faut, bien évidemment, jamais manipuler ce champ par une constante
hexa. Il faut pour cela utiliser les defines qui sont définis dans l'include
associé.

Suivant les systèmes, ces champs peuvent varier, ainsi sur Mac OS X :

#define CREAD 0x00000800 /* enable receiver */
#define CSTOPB 0x00000400 /* send 2 stop bits */

Sur ton GNU/Linux (x86?) cela peut être différent.

Le man de termios donne toute la signification des bits de c_cflag.

--
Éric Lévénez -- Unix is not only an OS, it's a way of life.

pes
Le #984774
Eric Levenez wrote:
Le 22/03/07 11:12, dans
je souhaitais programmer la liaison série sous linux et je me suis
aperçu que lorsque je configurais ma liaison, j' étais obligé de mettre
les bits 10 et 11 du champ c_cflag de termios à 1:
termios_p.c_cflag |= 0x0C00;

sans quoi cela ne marche plus rapidement.

Quelqu' on connaît t' il la signification de ces bits?


Il ne faut, bien évidemment, jamais manipuler ce champ par une constante
hexa. Il faut pour cela utiliser les defines qui sont définis dans l'include
associé.


En fait j' utilise des constantes parce que j' ai pas trouvé de macros
correspondantes à ces bits dans mon /usr/include/bits/termios.h de mon
système Linux X86.


Je suis allé lire le champ c_cflag lors du fonctionnement de minicom
pour voir les différences avec mon application.


Suivant les systèmes, ces champs peuvent varier, ainsi sur Mac OS X :

#define CREAD 0x00000800 /* enable receiver */
#define CSTOPB 0x00000400 /* send 2 stop bits */

Sur ton GNU/Linux (x86?) cela peut être différent.

Le man de termios donne toute la signification des bits de c_cflag.



Je n' ai donc pas les mêmes champs que toi et m' étonne de ne pas
trouver leur signification.


Thomas Labourdette
Le #984772
pes a écrit le jeudi 22 mars 2007 13:33 :

Eric Levenez wrote:
Le man de termios donne toute la signification des bits de c_cflag.



Je n' ai donc pas les mêmes champs que toi et m' étonne de ne pas
trouver leur signification.


Même dans man termios comme l'a écrit Eric Levenez ?

Chez moi, j'ai :
" Constantes pour l'attribut c_cflag :

CBAUD ...

CBAUDEX ..."

etc ...

@+
--
Chantal AMESSE (signature et citation aléatoires)
En 2001 on a gaspillé 5 fois plus d'argent pour des implants mammaires
et du Viagra que pour la recherche contre la maladie d'Alzheimer. On
peut donc conclure que dans 30 ans, il y aura un très grand nombre de
personnes avec de gros nichons et de superbes érections, mais
incapables de se rappeler à quoi ça sert !


pes
Le #984771
Thomas Labourdette wrote:
pes a écrit le jeudi 22 mars 2007 13:33 :

Eric Levenez wrote:
Le man de termios donne toute la signification des bits de c_cflag.

Je n' ai donc pas les mêmes champs que toi et m' étonne de ne pas

trouver leur signification.


Même dans man termios comme l'a écrit Eric Levenez ?

Chez moi, j'ai :
" Constantes pour l'attribut c_cflag :

CBAUD ...

CBAUDEX ..."

etc ...

@+


en rélité je cherche à savoir à quel attribut pourrait bien correspondre
le bit 11 du champ c_cflag car il me pose problème et n' est modifié par
aucune macro spécifiée dans mon bits/termios.h :

/* c_cflag bit meaning */
#ifdef __USE_MISC
# define CBAUD 0010017
#endif
#define B0 0000000 /* hang up */
#define B50 0000001
#define B75 0000002
#define B110 0000003
#define B134 0000004
#define B150 0000005
#define B200 0000006
#define B300 0000007
#define B600 0000010
#define B1200 0000011
#define B1800 0000012
#define B2400 0000013
#define B4800 0000014
#define B9600 0000015
#define B19200 0000016
#define B38400 0000017
#ifdef __USE_MISC
# define EXTA B19200
# define EXTB B38400
#endif
#define CSIZE 0000060
#define CS5 0000000
#define CS6 0000020
#define CS7 0000040
#define CS8 0000060
#define CSTOPB 0000100
#define CREAD 0000200
#define PARENB 0000400
#define PARODD 0001000
#define HUPCL 0002000
#define CLOCAL 0004000
#ifdef __USE_MISC
# define CBAUDEX 0010000
#endif
#define B57600 0010001
#define B115200 0010002
#define B230400 0010003
#define B460800 0010004
#define B500000 0010005
#define B576000 0010006
#define B921600 0010007
#define B1000000 0010010
#define B1152000 0010011
#define B1500000 0010012
#define B2000000 0010013
#define B2500000 0010014
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
#define __MAX_BAUD B4000000
#ifdef __USE_MISC
# define CIBAUD 002003600000 /* input baud rate (not used) */
# define CMSPAR 010000000000 /* mark or space (stick) parity */
# define CRTSCTS 020000000000 /* flow control */
#endif



Thomas Labourdette
Le #984597
pes a écrit le jeudi 22 mars 2007 16:18 :

Thomas Labourdette wrote:
pes a écrit le jeudi 22 mars 2007 13:33 :

Eric Levenez wrote:
Le man de termios donne toute la signification des bits de c_cflag.

Je n' ai donc pas les mêmes champs que toi et m' étonne de ne pas

trouver leur signification.


Même dans man termios comme l'a écrit Eric Levenez ?


en rélité je cherche à savoir à quel attribut pourrait bien correspondre
le bit 11 du champ c_cflag car il me pose problème et n' est modifié par
aucune macro spécifiée dans mon bits/termios.h :

/* c_cflag bit meaning */

#define CLOCAL 0004000


C'est lui le bit 11.

Extrait du man :
CLOCAL Ignorer les signaux de contrôle du modem.

@+
--
Véronique et Sarah PORTE (signature et citation aléatoires)
Pourquoi le mot "abréviation" est si long ?




Eric Levenez
Le #984596
Le 22/03/07 13:33, dans
Eric Levenez wrote:

Il ne faut, bien évidemment, jamais manipuler ce champ par une constante
hexa. Il faut pour cela utiliser les defines qui sont définis dans l'include
associé.


En fait j' utilise des constantes parce que j' ai pas trouvé de macros
correspondantes à ces bits dans mon /usr/include/bits/termios.h de mon
système Linux X86.


Et bien, et bien. Je viens de regarder dans Linux et ces bits sont bien
présents dans les includes.

Suivant les systèmes, ces champs peuvent varier, ainsi sur Mac OS X :

#define CREAD 0x00000800 /* enable receiver */
#define CSTOPB 0x00000400 /* send 2 stop bits */

Sur ton GNU/Linux (x86?) cela peut être différent.

Le man de termios donne toute la signification des bits de c_cflag.


Je n' ai donc pas les mêmes champs que toi et m' étonne de ne pas
trouver leur signification.


Sur Linux/i386 (différents sur les autres Linux), le fichier termbits.h
donne les defines :

#define HUPCL 0002000
#define CLOCAL 0004000

Dans ton autre poste tu les donnes toi même !

Le man de termios donne pour ces 2 valeurs :

HUPCL Lower modem control lines after last process closes the device (hang
up).
CLOCAL Ignore modem control lines.

Bon, comme tout cela n'a pas vraiment sa place ici où l'on parle du C
standard, tu pourrais continuer la discussion sur un groupe Linux si tu ne
comprends toujours pas ces 2 bits.

--
Éric Lévénez -- Unix is not only an OS, it's a way of life.


Publicité
Poster une réponse
Anonyme