Forum Programmation.c Port série et enregistrement

Posté par  .
Étiquettes : aucune
0
24
juil.
2004
Bonjour à tous,
J'essaye actuellement d'envoyer des messages sur mon port série ttyS0, mais un cat < /dev/ttyS0 ne fait rien apparaitre.
Comment cela se fait-il ?
Au fait, voila le code du programme :
int fd[2]={0,0}; /*Tableau des différents descripeurs de fichiers*/

char * donne_le_port( int portnum)
{
if (portnum<0 || portnum > 99)
return 0;
char * port; /*c'est ce pointeur qu'on renverra */
char c[3]; /* pour contenir le numéro (2 chiffres + 1 zéro terminal) */

/* on alloue la mémoire et on se tire la queue basse si ça ne marche pas */
if ((port = (char *)malloc(12*sizeof(char))) == 0)
return 0;

/* on écrit le numéro en chiffres dans la chaine c */
sprintf(c, "%d", portnum);
/* et on revoie la chaîne concaténée correctement
(le strcat le plus intérieur concat�ne "/dev/ttyS" avec une chaîne encore vide)
*/
return strcat(strcat(port, "/dev/ttyS"), c);
}


int
ouvre_port(int i) /*fonction ouvrant le port n°i*/
{

fd[i] = open(donne_le_port(i), O_RDWR | O_NOCTTY | O_NDELAY);

if (fd[i] == -1)
{ perror("open_port : incapable d'ouvrir le port");
}
/* else
fcntl(fd[i], F_SETFL, 0);
*/ return(fd[i]);
}

int
ecrit_port(int i, char * envoi) /*fonction ecrivant sur le port n°i*/
{
int n;
n = write(fd[i], envoi,strlen(envoi));
if (n<0)
fputs("write() n'a pas marché !\n", stderr);
else
printf("write a écrit %d caractères (sur %d)\n", n, strlen(envoi));

return (fd[i]);
}

int main(int argc, char* argv[])
{
char * port;

if ((port = donne_le_port(atoi(argv[1])))==0) /* on vérifie que portstring a bien réussi (indispensable !) */
{
printf("\n *** ERREUR D'ALLOCATION MEMOIRE ! ***\n\n");
return 0;
};
/* si oui, c'est bon, port est initialisé comme il faut, on peut s'en servir */

if( ouvre_port(atoi(argv[1])) == -1)
printf("dommage\n");
else
printf("bien joue\n");

if (ecrit_port(atoi(argv[1]), argv[2]) == -1)
printf("envoi raté\n");
else
printf("envoi réussi\n");

return 0;
}


Le programme tourne très bien, m'annonce que j'ai envoyé des données, et rien sur ttyS0 ? (lorsque j'utilise le port 0 ?)

Merci beaucoup pour vos réponses

Jacouille (qui ne mange pas que des nouilles...)
  • # plus simple

    Posté par  . Évalué à 2.

    hello,

    le plus simple serait ceci :

    tu ouvres un nouveau xterm, et tu tapes la commande tty, qui va te renvoyer le nom du terminal courant. (/dev/pts/4 par exemple)

    ensuite, tu te connectes à ce terminal, au lieu de ttyS0, pour y envoyer tes données. elles apparaîtront normalement sur ce second xterm. la manip est aussi faisable avec une console non utilisée, /dev/tty9, par exemple... et Ctrl+Alt+9 te permettra de voir ce qui sort, à ce moment.

    j'ai bien peur que si tu écris sur ttyS0 directement, il te faille regarder ce qui se passe de l'autre côté, avec un câble null modem et un minicom qui attend à l'autre bout, par exemple.

    un truc qui m'aurait intéressé, moi, serait de savoir s'il est possible de brancher par exemple deux pppd ou deux minicom à un même device, et de les regarder communiquer...

    @++
    • [^] # Re: plus simple

      Posté par  . Évalué à 2.

      bah, en fait, je peux me répondre :

      d'abord premier terminal :

      minicom -o -p /dev/ptyp0

      puis deuxième terminal :

      minicom -o -p /dev/ttyp0

      nickel chrome
  • # Bracher un recepteur de l'autre côté

    Posté par  . Évalué à 1.

    En parlant de bracher un recepteur de l'autre côté en série, j'ai déjà un Palm Vx... Sur le site de Palm, il n'en parle même plus tellement il est dépassé.
    Connaissez-vous un petit programme installable dessus qui est capable de recevoir des infos séries ? (type ASCII affichables à l'écran ?)
    Merci
    @++

    Jacouille

    "La difficulté d'être un super-génie, c'est d'être entouré de super crétins " (Calvin dans Calvin and Hobbes (Bill Watterson))

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.