telegps: Add config for tracker starting distances
[fw/altos] / altoslib / AltosConfigData.java
index edaf4601bbebc9632fb6b9ee8a8e83bc10cdf613..83c184cdd8299590a386b3c3b2599c926f5e552f 100644 (file)
@@ -15,7 +15,7 @@
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
-package org.altusmetrum.altoslib_3;
+package org.altusmetrum.altoslib_4;
 
 import java.util.*;
 import java.text.*;
@@ -70,6 +70,9 @@ public class AltosConfigData implements Iterable<String> {
        /* HAS_APRS */
        public int              aprs_interval;
 
+       /* HAS_BEEP */
+       public int              beep;
+
        /* Storage info replies */
        public int      storage_size;
        public int      storage_erase_unit;
@@ -77,6 +80,9 @@ public class AltosConfigData implements Iterable<String> {
        /* Log listing replies */
        public int      stored_flight;
 
+       /* HAS_TRACKER */
+       public int[]    tracker_distances;
+
        public static String get_string(String line, String label) throws  ParseException {
                if (line.startsWith(label)) {
                        String  quoted = line.substring(label.length()).trim();
@@ -100,6 +106,20 @@ public class AltosConfigData implements Iterable<String> {
                throw new ParseException("mismatch", 0);
        }
 
+       public static int[] get_distances(String line, String label) throws NumberFormatException, ParseException {
+               if (line.startsWith(label)) {
+                       String tail = line.substring(label.length()).trim();
+                       String[] tokens = tail.split("\\s+");
+                       if (tokens.length > 1) {
+                               int[]   distances = new int[2];
+                               distances[0] = Integer.parseInt(tokens[0]);
+                               distances[1] = Integer.parseInt(tokens[1]);
+                               return distances;
+                       }
+               }
+               throw new ParseException("mismatch", 0);
+       }
+
        public Iterator<String> iterator() {
                return lines.iterator();
        }
@@ -210,6 +230,10 @@ public class AltosConfigData implements Iterable<String> {
 
                aprs_interval = -1;
 
+               beep = -1;
+
+               tracker_distances = null;
+
                storage_size = -1;
                storage_erase_unit = -1;
                stored_flight = 0;
@@ -286,6 +310,12 @@ public class AltosConfigData implements Iterable<String> {
                /* HAS_APRS */
                try { aprs_interval = get_int(line, "APRS interval:"); } catch (Exception e) {}
 
+               /* HAS_BEEP */
+               try { beep = get_int(line, "Beeper setting:"); } catch (Exception e) {}
+
+               /* HAS_TRACKER */
+               try { tracker_distances = get_distances(line, "Tracker setting:"); } catch (Exception e) {}
+
                /* Storage info replies */
                try { storage_size = get_int(line, "Storage size:"); } catch (Exception e) {}
                try { storage_erase_unit = get_int(line, "Storage erase unit:"); } catch (Exception e) {}
@@ -409,8 +439,16 @@ public class AltosConfigData implements Iterable<String> {
                if (npyro > 0)
                        pyros = source.pyros();
 
+               /* HAS_APRS */
                if (aprs_interval >= 0)
                        aprs_interval = source.aprs_interval();
+
+               /* HAS_BEEP */
+               if (beep >= 0)
+                       beep = source.beep();
+               /* HAS_TRACKER */
+               if (tracker_distances != null)
+                       tracker_distances = source.tracker_distances();
        }
 
        public void set_values(AltosConfigValues dest) {
@@ -449,6 +487,8 @@ public class AltosConfigData implements Iterable<String> {
                else
                        dest.set_pyros(null);
                dest.set_aprs_interval(aprs_interval);
+               dest.set_beep(beep);
+               dest.set_tracker_distances(tracker_distances);
        }
 
        public void save(AltosLink link, boolean remote) throws InterruptedException, TimeoutException {
@@ -515,6 +555,14 @@ public class AltosConfigData implements Iterable<String> {
                if (aprs_interval >= 0)
                        link.printf("c A %d\n", aprs_interval);
 
+               /* HAS_BEEP */
+               if (beep >= 0)
+                       link.printf("c b %d\n", beep);
+
+               /* HAS_TRACKER */
+               if (tracker_distances != null)
+                       link.printf("c t %d %d\n", tracker_distances[0], tracker_distances[1]);
+
                link.printf("c w\n");
                link.flush_output();
        }