altosuilib: Wait for product data while scanning
[fw/altos] / altosuilib / AltosScanUI.java
index 7e51a55a757d174d8dce0a1ac6566cefbbaf5d8d..1b30f99d64a092532e7eb9de702d17d0461b12fa 100644 (file)
@@ -159,6 +159,8 @@ public class AltosScanUI
        Thread                          thread;
        AltosFrequency[]                frequencies;
        int                             frequency_index;
+       int                             packet_count;
+       int                             tick_count;
 
        void scan_exception(Exception e) {
                if (e instanceof FileNotFoundException) {
@@ -200,6 +202,7 @@ public class AltosScanUI
                                                AltosState      state = reader.read();
                                                if (state == null)
                                                        continue;
+                                               packet_count++;
                                                if (state.flight != AltosLib.MISSING) {
                                                        final AltosScanResult   result = new AltosScanResult(state.callsign,
                                                                                                             state.serial,
@@ -284,6 +287,8 @@ public class AltosScanUI
                                return;
                        }
                }
+               packet_count = 0;
+               tick_count = 0;
                ++frequency_index;
                if (frequency_index >= frequencies.length)
                        frequency_index = 0;
@@ -308,7 +313,9 @@ public class AltosScanUI
        }
 
        void tick_timer() throws InterruptedException, TimeoutException {
-               next();
+               ++tick_count;
+               if (packet_count == 0 || tick_count > 5)
+                       next();
        }
 
        public void actionPerformed(ActionEvent e) {
@@ -356,7 +363,6 @@ public class AltosScanUI
                                if (r != null) {
                                        if (device != null) {
                                                if (reader != null) {
-                                                       System.out.printf("frequency %g rate %d\n", r.frequency.frequency, r.rate);
                                                        reader.set_telemetry(r.telemetry);
                                                        reader.set_telemetry_rate(r.rate);
                                                        reader.set_frequency(r.frequency.frequency);