IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Port Serie Full Duplex Termios


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Points : 23
    Points
    23
    Par défaut Port Serie Full Duplex Termios
    Bonjour,

    Alors voila je desire realiser une communication via le port serie. Pour cela j'utilise la librairie termios. Mon probleme est que je desire utiliser une connexion Full Duplex sur le meme port (un thread emission, un thread reception).
    Mais ce que j'ai fait n'a pas l'air de fonctionner. Je n'arrive qu'a envoyer mais pas de réception.
    Donc est ce que quelqu'un aurait déjà utiliser cette librairie et saurait comment bien configurer le port en FD.

    Merci

  2. #2
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Tu peux montrer ton code ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Points : 23
    Points
    23
    Par défaut
    Voici le code d'init :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    int initSerial(int fd, speed_t speed, char parity_com, int databits, int stopbits)
    {
     
        struct termios config;
     
     
        if(!isatty(fd))
        {
            perror("Error");
        }
     
        /* Get the current option of the port */
        tcgetattr(fd, &config);
     
     
        config.c_iflag &= ~(IGNBRK | BRKINT | ICRNL |
                            PARMRK | INLCR | ISTRIP | IXON);
     
     
        config.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN | ISIG);
     
        config.c_oflag &= ~OPOST;
     
        /* Enable the receiver and set local mode*/
        config.c_cflag |= (CLOCAL | CREAD);
     
        /* Set speed */
        cfsetispeed(&config, speed);
        cfsetospeed(&config, speed);
     
     
        /* Set the data size */
        config.c_cflag &= ~CSIZE;
     
        switch (databits)
        {
        case 5 :
            config.c_cflag |= CS5;
            break;
        case 6:
            config.c_cflag |= CS6;
            break;
        case 7:
            config.c_cflag |= CS7;
            break;
        case 8:
            config.c_cflag |= CS8;
            break;
        default :
            break;
        }
     
        /* set the parity */
        switch(parity_com)
        {
        case 'n':
            config.c_cflag &= ~PARENB;
            break;
        case 'i':
            config.c_cflag |= PARENB;
            config.c_cflag &= ~PARODD;
            break;
        case 'p':
            config.c_cflag |= PARENB;
            config.c_cflag |= PARODD;
            break;
        default :
            break;
        }
     
        /* set bit */
        if(stopbits == 1)
            config.c_cflag &= ~CSTOPB;
        else
            config.c_cflag |= CSTOPB;
     
     
        /* set the new options */
        tcsetattr(fd, TCSANOW, &config);
     
    }

  4. #4
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    L'initiation se déroule bien ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 36
    Points : 23
    Points
    23
    Par défaut
    Je pense oui. En tout pour une communication Half duplex que ce soit en Rx ou Tx il n y pas l'air d avoir de souci.

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    Je m'intéresse également à ce genre de problème. En fait, je cherchais à savoir s'il était possible d'utiliser un même file descriptor passé à deux threads différents, un pour la lecture sur le port série, l'autre pour l'écriture, si ça ne posait pas de problèmes de synchronisation.

    Visiblement, d'après les messages ci-dessus, c'est possible. Il suffit donc en théorie d'initialiser le port, puis de transmettre le FD aux deux threads, c'est bien ça ? C'est ce que tu as fait, MeWaa ?

    Charles

  7. #7
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Citation Envoyé par Charlock Voir le message
    Bonjour,

    Je m'intéresse également à ce genre de problème. En fait, je cherchais à savoir s'il était possible d'utiliser un même file descriptor passé à deux threads différents, un pour la lecture sur le port série, l'autre pour l'écriture, si ça ne posait pas de problèmes de synchronisation.

    Visiblement, d'après les messages ci-dessus, c'est possible. Il suffit donc en théorie d'initialiser le port, puis de transmettre le FD aux deux threads, c'est bien ça ? C'est ce que tu as fait, MeWaa ?

    Charles
    Pour moi ca marche.
    J'ai jamais eu de probleme.

Discussions similaires

  1. quel est le Meilleur language pour piloter le port serie ?
    Par flyfab dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 21/07/2003, 11h03
  2. Lire le fichier du port série
    Par saibe dans le forum Linux
    Réponses: 7
    Dernier message: 09/04/2003, 10h29
  3. Réponses: 5
    Dernier message: 25/03/2003, 20h43
  4. [TP] port série rs232
    Par cyb33 dans le forum Turbo Pascal
    Réponses: 44
    Dernier message: 13/01/2003, 16h49
  5. [Kylix] Kylix / port serie
    Par Anonymous dans le forum EDI
    Réponses: 3
    Dernier message: 01/04/2002, 13h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo