MAJ BROSSARD

Dependencies:   mbed

petitedoc.txt

Committer:
singularity
Date:
2014-10-22
Revision:
3:8f2c0c324296
Parent:
2:2889a7a4b67a

File content as of revision 3:8f2c0c324296:

#define NCCS 16

   typedef unsigned int tcflag_t;
   typedef unsigned char cc_t;

     struct termios {
        tcflag_t        c_iflag;        /* Input modes */
        tcflag_t        c_oflag;        /* Output modes */
        tcflag_t        c_cflag;        /* Control modes */
        tcflag_t        c_lflag;        /* Local modes */
        tcflag_t        c_reserved;     /* Reserved for future use */
        cc_t            c_cc[NCCS];     /* Control characters */
     };



Modes d'entrée

Macro-définitions des drapeaux du mode d'entrée :

IGNBRK
    Ignorer <break>
BRKINT
    Signal SIGINT à la frappe de <break>
IGNPAR
    Ignorer les erreurs de parité
PARMRK
    Marquer les erreurs de parité
INPCK
    Vérification de parité
ISTRIP
    Strip character: compacter sur 7 bits
INLCR
    Transformer NL en CR
IGNCR
    Ignorer CR
ICRNL
    Transformer CR en NL
_IUCLC
    Transformer Majuscules en minuscules
IXON
    Autoriser l'arrêt du flux avec (Ctrl-S/Ctrl-Q)
_IXANY
    N'importe quel caractère relance le flux.
IXOFF
    Interdit l'arrêt du flux.



    Modes de sortie

Macro-définitions des drapeaux du mode de sortie :

OPOST
    Postprocessing de la sortie.
OLCUC
    Transformer minuscule en MAJUSCULE en sortie.
ONLCR
    NL en CR+NL.
OCRNL
    CR en NL .
ONOCR
    No CR en colonne 0.
ONLRET
    NL en NL+CR



    Modes de contrôle

Description plus bas niveau de la ligne de communication. Utilisés surtout pour des périphériques de communication (modems).

CLOCAL
    Ouverture non bloquante, sinon l'ouverture est bloquante tant que la ligne n'est pas prête (par exemple un modem), sauf demande contraire dans le open avec O_NONBLOCK.
HUPCL
    hangup sur le dernier close.



Modes locaux

Ce sont ces modes-là qui ont le plus d'impact au niveau logiciel. Ce sont eux qui indiquent les traitements réalisés sur les caractères de contrôle et déterminent le comportement de la primitive read.

ISIG
    les caractères de contrôle intr, quit, etc sont transformés en signaux.

ECHO
    Les caractères frappés au clavier sont après transformation, définie dans le mode d'entrée, insérés dans le flux de sortie (écho des caractères en sh par exemple).

ECHOE
    dans ce mode et en mode ICANON, le caractère de contrôle erase a un écho provoquant l'effacement du dernier caractère sur l'écran.

ECHOK
    dans ce mode et en mode ICANON, le caractère de contrôle kill a comme écho le caractère de fin de ligne.

NOFLSH
    dans ce mode, il n'y a pas de vidange par défaut des tampons de lecture et d'écriture à la prise en compte des caractères intr, quit, susp en mode ISIG.

TOSTOP
    dans ce mode, les processus du groupe de processus en arrière-plan du terminal sont suspendus, lorsqu'ils essaient d'écrire sur le terminal, par le signal SIGTTOU.
ICANON
    est un mode complexe, voir plus bas.





    Mode canonique
    : c'est le mode de fonctionnement d'un terminal en mode interactif, il se caractérise de la manière suivante: le tampon d'entrée est structuré en ligne, une ligne étant une suite de caractères terminée par le caractère newline de code ASCII 10 (le newline du C). Ceci signifie que les caractères lus au cours d'une opération de lecture read sur le terminal sont extraits dans une et une seule ligne. Donc tout caractère non suivi d'un newline n'est pas accessible en lecture! Une opération de lecture ne peut avoir lieu à cheval sur plusieurs lignes.
Mode non-canonique
    : la structure de ligne ne définit plus le critère d'accessibilité des caractères et les 4 caractères erase, kill, eof, eol perdent leur qualité de caractères de contrôle.

Les critères d'accessibilité en mode non-canonique sont définis par deux caractères spéciaux MIN et TIME du tableau c_cc de la structure termios.

Si MIN > 0 et TIME > 0 , TIME est un minuteur inter-caractères de granularité 0.1 seconde.

    A chaque caractère reçu le minuteur est repositionné.
    Si le nombre de caractères reçu avant l'expiration du minuteur est égal à MIN l'appel read retourne ces caractère au processus.
    Si le minuteur expire avant la reception de MIN caractères, l'appel read retourne les caractères reçus au processus.
    Remarquer qu'au moins un caractère sera renvoyé. Le read est bloquant tant que le premier caractère n'est pas reçu et que MIN et TIME ne sont pas mis en marche.

Pour certaines valeurs de MIN et TIME:

MIN > 0, TIME = 0
    Même comportement mais seul MIN est significatif. Le read est bloquant jusqu'à la reception de MIN caractères.
MIN = 0, TIME > 0
    comme le nombre de caractères à lire est nul (MIN = 0), le minuteur est initialisé au debut de l'appel read. L'appel read retourne soit parce qu'un caractère a été lu ou que le délai a expiré.
MIN = 0, TIME = 0
    mode non bloquant : l'appel read retourne les caractères disponibles (le minimum des caractères disponibles et du nombre de caractères demandés dans l'appel de read).

Les valeurs les plus couramment utilisées sont MIN=1, TIME=0, ce qui est le mode CBREAK des versions BSD. Ce mode permet d'avoir une saisie bloquante de chaque caractère frappé au clavier (vi utilise ce mode), le read retourne dès qu'un caractère est frappé.



int tcgetattr(int desc, struct termios *termios);

extraction des paramètres courants.

int tcsetattr(int desc, int option, struct termios *termios);

positionnement des paramètres.

Le paramétre option permet de spécifier le comportement de gestion des tampons d'entrée et de sortie de la ligne :

TCSANOW
    changement immédiat des attributs
TCSADRAIN
    les sorties en cours sont réalisées avant
TCSAFLUSH
    idem et le tampon de lecture est vidé.

La primitive

int tcdrain(int desc);

bloque le processus jusqu'à ce que tous les caractères à destination du terminal de descripteur desc aient été transmis.

int tcflush(int desc, int option);

vidange des tampons.
valeur de option:

TCIFLUSH
    tampon d'entrée
TCOFLUSH
    tampon de sortie
TCIOFLUSH
    les deux tampons.



     Encodage:

speed_t cfgetispeed(const struct termios *termios);
speed_t cfgetospeed(const struct termios *termios);

Permet de lire la vitesse dans la structure termios.

int cfsetispeed(const struct *termios, speed_t vitesse);
int cfsetospeed(const struct *termios, speed_t vitesse);

permet de positionner la vitesse dans la structure termios.

Positionnement/récupération de la structure termios par les primitives tcgetattr et tcsetattr