Ciao a tutti,
non è la prma volta che uso la libreria javax.comm per acquisire/scrivere dati da/su porta seriale, però è la prima volta che mi interessa acquisire in modo continuo un flusso di stringhe ad una certa velocità (fino ad ora avevo sempre acquisito una singola risposta).

Lo strumento collegato alla seriale trasmette 20 stringhe ogni secondo, io al più avrò bisogno di 10 valori per ogni secondo (posso permettermi di perderne uno ogni 2).

Per poter far partire e fermare l'acquisizione ho utilizzato la classe Thread e fin qui non pare ci siano problemi, ma veniamo al dunque.

codice:
.....
        public synchronized void run ()
        {
            String temp = new String();
            while ( run ){
                System.out.println ( "start thread");
                byte[] buffer = new byte[15];
                int len = -1;
                try
                {
                    while ( ( len = this.in.read(buffer)) > -1 )
                    {
                        int segno = contatore ++;
                        String data = data();
                        temp = segno + "\t" + new String(buffer) + "\t" + data;
                        JFrame01.datiLetti.add(temp);
                        WriteTxtFile(temp);
                        if (!run)
                            break;
                        if (!JFrame01.inLettura)
                            attendi();
                    }
                }
                catch ( IOException e )
                {
                    e.printStackTrace();
                }
            }
        }
.....
1. problema
I dati letti dalla porta seriale li salvo su un ArrayList (e per ora in fase di sviluppo in un file di testo) con annesso il tempo in cui il dato è stato ricevuto:

codice:
public static String data() {
        System.out.println ( " Nuova data ");
        GregorianCalendar gc = new GregorianCalendar();
        SimpleDateFormat sdf =new SimpleDateFormat("dd/MM/yyyy - HH:mm:ss:SSS");
        return  sdf.format( gc.getTime() ) ;
    }
Non mi spiego come mai ottengo in output diversi valori con lo stesso tempo :master:

codice:
contatore \t StringaRx (che finisce con un a capo) \t Tempo
codice:
362	$11    40     
	13/10/2009 - 14:13:19:803
363	$11    40     
	13/10/2009 - 14:13:19:803
364	$11    40     
	13/10/2009 - 14:13:19:803
365	$11    40     
	13/10/2009 - 14:13:19:803
366	$11    40     
	13/10/2009 - 14:13:19:803
367	$11    40     
	13/10/2009 - 14:13:19:803
368	$11    40     
	13/10/2009 - 14:13:19:803
369	$11    40     
	13/10/2009 - 14:13:19:803
370	$11    40     
	13/10/2009 - 14:13:20:006
371	$11    40     
	13/10/2009 - 14:13:20:006
372	$11    40     
	13/10/2009 - 14:13:20:006
373	$11    40     
	13/10/2009 - 14:13:20:006
374	$11    40     
	13/10/2009 - 14:13:20:006
375	$11    40     
	13/10/2009 - 14:13:20:006
376	$11    40     
	13/10/2009 - 14:13:20:006
377	$11    40     
	13/10/2009 - 14:13:20:006
378	$11    40     
	13/10/2009 - 14:13:20:006
il contatore viene incrementato, ma il tempo no!


2. problema
A volte memorizzo delle risposte strane che sembrano violare il protocollo.... ma in realtà sembrano delle buone stringhe di risposta ma spezzate ( notate l'assenza dei caratteri a capo o la loro posizione sbagliata)

con 2 $ e senza il /r
codice:
273	$$11    40     	13/10/2009 - 14:13:17:57
codice:
339	0     
$11    4	13/10/2009 - 14:04:56:030
codice:
273	$0     
$11   1	13/10/2009 - 13:57:36:917
274	40     
$11   1	13/10/2009 - 13:57:36:917
Se utilizzo un monitor di porte seriale questi pastrocchi non ci sono e vi chiedo: è colpa del mio codice? Dovrei acquisire meglio considerando il CR (/r) il fine stringa?
Qualcuno riesce a darmi qualche dritta?

Grazie