Bonjour,
j'écris une petite application qui utilise le port série, mais je rencontre un problème pour la lecture de celui-ci, en effet avec le code que j'utilise je ne reçoit qu'un seul caractère.
Pourtant d'après la documentation la méthode read demande bien le pointeur de fichier, le buffer, et la taille... Je ne comprend pas pourquoi il ne lit que le premier caractère puis s'arrête.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 void connect_serie::readMessage(char *buffer, unsigned int sizeMax) { printf("Size : %d \n", size); int ret = read(fd, buffer, size); if (ret < 0) { perror("Error while reading"); } printf("Bytes read %d :\n", ret); }
Voici la configuration du port série :
J'ai contourné le problème avec le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 // Configure port params. deviceConfig.c_cflag &= ~PARENB; // parity off deviceConfig.c_cflag &= ~PARODD; deviceConfig.c_cflag |= CSTOPB; // 2 stop bit. deviceConfig.c_cflag &= ~CSIZE; // Reset data size. deviceConfig.c_cflag |= CS8; // 8 data bits. deviceConfig.c_iflag &= ~(IXON | IXOFF | IXANY); //Disable software flow control. // Set port speed. cfsetispeed(&deviceConfig, B9600); cfsetospeed(&deviceConfig, B9600);
Mais je trouve la solution peu élégante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void connect_serie::readMessage(char *buffer, unsigned int sizeMax) { int i; int ret = 0 ; for ( i= 0; i < sizeMax;i++) { ret += read(fd, &buffer[i], 1); } printf("Bytes read %d :\n", ret); }
Dernièrement existe t-il une méthode pour lire tout le buffer d'entré ? Car je ne sais pas forcément le nombre de caractères que je reçoit sur le port série ?
Merci de votre aide
Partager