Bonjour à Tous !

Je suis sous WINDOWS et j communique avec un module GPS en port série (virtualisé par un port USB) pour télécharger des coordonnées GPS.

à la réception d'une grande qté de donnée à 115200Bauds, je remarque qu'il ya des charactères qui manquent Exemple, je dois recevoir 10000 lignes identiques avec un id incrémental, remarquez qu'il coupe la ligne 452 et passe à 469 d'où une ligne illisible et 17lignes manquantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
450;2;44.456789;1.345678;0.345;2010;04;10;11;03
451;2;44.456789;1.345678;0.345;2010;04;10;11;03
452;2;44.456789;1.356789;1.345678;0.345;2010;04;10;11;03
469;2;44.456789;1.345678;0.345;2010;04;10;11;03
470;2;44.456789;1.345678;0.345;2010;04;10;11;03
Il n'y a pas de règle, les erreurs arrivent de façon aléatoire.

Remarque: je gère la réception octet par octet (à l'ancienne) :
> Est-ce la vitesse trop évelvée ? (115200Bps)
> Est-ce mon code qui déconne ?
> Est-ce le driver
> Est-ce cette API ? (il y a une alternative: RXTX)
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
// Evènement(de l'API) déclenché à la récepetion de donnée
case SerialPortEvent.DATA_AVAILABLE:
byte[] readBufferLine = new byte[100];
			try {	int numLigne = 0;
				int Byte = 0;
				long totalBytes = 0;
				int lineSize = 0;
				String ligne = "riendans;laligne";
				byte[] tempByte = new byte[1];
				do {
					Byte = inputStream.read(); // je lis 1 octet
					//je dédecte les caractères: imprimables ou \n ou -1
					if((Byte != -1)&& (((Byte>=0x20) && (Byte<=0x7E))||(Byte == '\n')))
					{	totalBytes++;
 						// je l'ajoute à ma ligne
						readBufferLine[lineSize] = (byte)numBytes;
						lineSize++;				
 
						if((numBytes=='\n')||(numBytes=='>'))
						{
							readBufferLine[lineSize]='\0';
							ligne = new String(readBufferLine,0,lineSize);
								numLigne++;
								system.out.println(ligne);
 
							lineSize = 0;
						}
					}//si '>' c'est une fin d'une ligne également
				}while ((Byte !=-1)&&(totalBytes<5000000)&&(numBytes!='>')) ;
>> Voilà mnt 7 jours de perdus dans mon PFE sur ce problème. Mon encadrant commence à s'agacer.. à l'aiiide !
Merci^^