altosui: Make 'monitor idle' work with older TeleMetrum firmware (trac #28)
authorKeith Packard <keithp@keithp.com>
Wed, 28 Mar 2012 05:02:13 +0000 (22:02 -0700)
committerKeith Packard <keithp@keithp.com>
Wed, 28 Mar 2012 05:03:05 +0000 (22:03 -0700)
Older TM firmware did not have the 'done' line at the end of the GPS
report, rather it would just stop after showing the Flags value. Check
the TM version and stop looking for GPS data when the Flags line appears.

Signed-off-by: Keith Packard <keithp@keithp.com>
altosui/AltosIdleMonitorUI.java
altosui/AltosSerial.java

index dbac2d332c5fbbf84812fc18549e3e806ea3b667..d877be4d7d23f2ba789cd2bd91074f17bfcf75ec 100644 (file)
@@ -90,7 +90,9 @@ class AltosADC {
 }
 
 class AltosGPSQuery extends AltosGPS {
-       public AltosGPSQuery (AltosSerial serial) throws TimeoutException, InterruptedException {
+       public AltosGPSQuery (AltosSerial serial, AltosConfigData config_data)
+               throws TimeoutException, InterruptedException {
+               boolean says_done = config_data.compare_version("1.0") >= 0;
                serial.printf("g\n");
                for (;;) {
                        String line = serial.get_reply_no_dialog(5000);
@@ -140,6 +142,8 @@ class AltosGPSQuery extends AltosGPS {
                                int status = Integer.decode(bits[1]);
                                connected = (status & Altos.AO_GPS_RUNNING) != 0;
                                locked = (status & Altos.AO_GPS_VALID) != 0;
+                               if (!says_done)
+                                       break;
                                continue;
                        }
                        if (line.startsWith("Sats:")) {
@@ -184,7 +188,7 @@ class AltosIdleMonitor extends Thread {
                                serial.flush_input();
                        config_data = new AltosConfigData(serial);
                        adc = new AltosADC(serial);
-                       gps = new AltosGPSQuery(serial);
+                       gps = new AltosGPSQuery(serial, config_data);
                } finally {
                        if (remote)
                                serial.stop_remote();
@@ -237,6 +241,8 @@ class AltosIdleMonitor extends Thread {
                                        update_state();
                                        post_state();
                                } catch (TimeoutException te) {
+                                       if (AltosSerial.debug)
+                                               System.out.printf ("monitor idle data timeout\n");
                                }
                                Thread.sleep(1000);
                        }
index dffc74ea25be0a831dc7a415810b48954fddf779..77c926b1f9629f9a9e171e6a4377e8ff84e1eba9 100644 (file)
@@ -55,7 +55,7 @@ public class AltosSerial implements Runnable {
        boolean monitor_mode;
        int telemetry;
        double frequency;
-       static boolean debug;
+       public static boolean debug;
        boolean remote;
        LinkedList<String> pending_output = new LinkedList<String>();
        Frame frame;