Bonjour,

J'ai créé une application sous linux (distribution "voyage linux") qui ouvre le port série "/dev/ttyUSB0", qui lit les données arrivant sur ce port (peut aussi en écrire) et qui traitent ces données pour les sauvegarder dans un fichier.

Le matériel connecté en USB au système envoie toujours le même nombre d'octets (30). Lorsque j'utilise ce matériel sous windows et que je "sniffe" les trames du port USB, la configuration est comme ceci : 8 data, 1 stop, parité paire, vitesse 38400, aucun contrôle de flux.

Dans mon application linux, j'utilise la fonction "open", et pour la config j'utilise la structure "termios".
Lorsque le matériel doit m'envoyer une trame toutes les 32s par ex, il y a quelques fois des trames qui ne sont pas vues donc pas traitées !!!

Je pense que ce problème vient des paramètres que je passe à la fonction "open" ou alors des paramètres de "termios".
J'ai fait pas mal de recherches sur ces paramètres et j'avoue que je suis un peu perdu !


Voici le code :
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
 
int fd = open ("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
 
	if (fd < 0)
	{
		printf ("Erreur ouverture port\n");
		exit (EXIT_FAILURE);		
	}
	else
	{
		printf ("Ouverture COM reussie\n");
	}
 
	tcgetattr(fd,&oldtio); // sauvegarde les configurations actuelles du port
 
	newtio.c_cflag = B38400 | CS8 | CREAD | PARENB;
	newtio.c_lflag = ECHO;
	newtio.c_oflag = OFDEL;
	newtio.c_lflag = CSTOPB ;
 
	newtio.c_iflag = IGNPAR | ICRNL;
 
	newtio.c_oflag = 0;
 
	tcflush(fd, TCIFLUSH);
	tcsetattr(fd,TCSANOW,&newtio);
 
	SignalRecu=0;
 
	printf("Attente reception ...\n\n");
	while (1)
	{
 
		int taille = read (fd,buf,sizeof (buf));
 
		if ( taille == 30 )
		{
 
                }
        }
Merci d'avance pour votre aide et à bientôt !