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 Alexandre Boeglin . Évalué à 2.
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 Alexandre Boeglin . Évalué à 2.
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 Pierre Jacquier . Évalué à 1.
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.