X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosConfigData.java;h=cb19ddf0f6cec054230296299366ded3f5ca6ccb;hb=4c5acb57d7ac1abec7bb4cda9dc88c2a19767a2d;hp=65f6346a4c00633ce6aede342c2fad71da08560d;hpb=66e7a8081c07d0d96a31ae34963d430f06dccdfb;p=fw%2Faltos diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index 65f6346a..cb19ddf0 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -15,13 +16,13 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_5; +package org.altusmetrum.altoslib_11; import java.util.*; import java.text.*; import java.util.concurrent.*; -public class AltosConfigData implements Iterable { +public class AltosConfigData { /* Version information */ public String manufacturer; @@ -32,9 +33,7 @@ public class AltosConfigData implements Iterable { public int log_space; public String version; public int altitude_32; - - /* Strings returned */ - public LinkedList lines; + public int config_major, config_minor; /* Config information */ /* HAS_FLIGHT*/ @@ -75,6 +74,7 @@ public class AltosConfigData implements Iterable { /* HAS_APRS */ public int aprs_interval; public int aprs_ssid; + public int aprs_format; /* HAS_BEEP */ public int beep; @@ -94,14 +94,13 @@ public class AltosConfigData implements Iterable { public int accel_zero_along, accel_zero_across, accel_zero_through; /* ms5607 data */ - public int ms5607_reserved; - public int ms5607_sens; - public int ms5607_off; - public int ms5607_tcs; - public int ms5607_tco; - public int ms5607_tref; - public int ms5607_tempsens; - public int ms5607_crc; + AltosMs5607 ms5607; + + public AltosMs5607 ms5607() { + if (ms5607 == null) + ms5607 = new AltosMs5607(); + return ms5607; + } public static String get_string(String line, String label) throws ParseException { if (line.startsWith(label)) { @@ -140,10 +139,6 @@ public class AltosConfigData implements Iterable { throw new ParseException("mismatch", 0); } - public Iterator iterator() { - return lines.iterator(); - } - public int log_space() { if (log_space > 0) return log_space; @@ -203,7 +198,7 @@ public class AltosConfigData implements Iterable { for (int i = 0; i < parts.length; i++) { try { - r[i] = AltosLib.fromdec(parts[i]); + r[i] = (int) AltosLib.fromdec(parts[i]); } catch (NumberFormatException n) { r[i] = 0; } @@ -212,6 +207,10 @@ public class AltosConfigData implements Iterable { return r; } + public boolean altitude_32() { + return altitude_32 == 1; + } + public int compare_version(String other) { int[] me = parse_version(version); int[] them = parse_version(other); @@ -231,62 +230,63 @@ public class AltosConfigData implements Iterable { } public void reset() { - lines = new LinkedList(); - - manufacturer = "unknown"; - product = "unknown"; - serial = 0; - flight = 0; + manufacturer = null; + product = null; + serial = AltosLib.MISSING; + flight = AltosLib.MISSING; log_format = AltosLib.AO_LOG_FORMAT_UNKNOWN; - log_space = -1; + log_space = AltosLib.MISSING; version = "unknown"; + config_major = AltosLib.MISSING; + config_minor = AltosLib.MISSING; - main_deploy = -1; - apogee_delay = -1; - apogee_lockout = -1; + main_deploy = AltosLib.MISSING; + apogee_delay = AltosLib.MISSING; + apogee_lockout = AltosLib.MISSING; - radio_frequency = -1; + radio_frequency = AltosLib.MISSING; callsign = null; - radio_enable = -1; - radio_calibration = -1; - radio_channel = -1; - radio_setting = -1; - telemetry_rate = -1; + radio_enable = AltosLib.MISSING; + radio_calibration = AltosLib.MISSING; + radio_channel = AltosLib.MISSING; + radio_setting = AltosLib.MISSING; + telemetry_rate = AltosLib.MISSING; - accel_cal_plus = -1; - accel_cal_minus = -1; - pad_orientation = -1; + accel_cal_plus = AltosLib.MISSING; + accel_cal_minus = AltosLib.MISSING; + pad_orientation = AltosLib.MISSING; - flight_log_max = -1; - log_fixed = -1; - ignite_mode = -1; + flight_log_max = AltosLib.MISSING; + log_fixed = AltosLib.MISSING; + ignite_mode = AltosLib.MISSING; - aes_key = ""; + aes_key = null; pyro = 0; npyro = 0; pyros = null; - pyro_firing_time = -1; + pyro_firing_time = AltosLib.MISSING; - aprs_interval = -1; - aprs_ssid = -1; + aprs_interval = AltosLib.MISSING; + aprs_ssid = AltosLib.MISSING; + aprs_format = AltosLib.MISSING; - beep = -1; + beep = AltosLib.MISSING; - tracker_motion = -1; - tracker_interval = -1; + tracker_motion = AltosLib.MISSING; + tracker_interval = AltosLib.MISSING; - storage_size = -1; - storage_erase_unit = -1; - stored_flight = 0; + storage_size = AltosLib.MISSING; + storage_erase_unit = AltosLib.MISSING; + stored_flight = AltosLib.MISSING; - accel_zero_along = -1; - accel_zero_across = -1; - accel_zero_through = -1; + accel_zero_along = AltosLib.MISSING; + accel_zero_across = AltosLib.MISSING; + accel_zero_through = AltosLib.MISSING; } public void parse_line(String line) { - lines.add(line); + /* Version replies */ try { manufacturer = get_string(line, "manufacturer"); } catch (Exception e) {} try { product = get_string(line, "product"); } catch (Exception e) {} @@ -299,17 +299,31 @@ public class AltosConfigData implements Iterable { /* Version also contains MS5607 info, which we ignore here */ - try { ms5607_reserved = get_int(line, "ms5607 reserved:"); } catch (Exception e) {} - try { ms5607_sens = get_int(line, "ms5607 sens:"); } catch (Exception e) {} - try { ms5607_off = get_int(line, "ms5607 off:"); } catch (Exception e) {} - try { ms5607_tcs = get_int(line, "ms5607 tcs:"); } catch (Exception e) {} - try { ms5607_tco = get_int(line, "ms5607 tco:"); } catch (Exception e) {} - try { ms5607_tref = get_int(line, "ms5607 tref:"); } catch (Exception e) {} - try { ms5607_tempsens = get_int(line, "ms5607 tempsens:"); } catch (Exception e) {} - try { ms5607_crc = get_int(line, "ms5607 crc:"); } catch (Exception e) {} + try { ms5607().reserved = get_int(line, "ms5607 reserved:"); } catch (Exception e) {} + try { ms5607().sens = get_int(line, "ms5607 sens:"); } catch (Exception e) {} + try { ms5607().off = get_int(line, "ms5607 off:"); } catch (Exception e) {} + try { ms5607().tcs = get_int(line, "ms5607 tcs:"); } catch (Exception e) {} + try { ms5607().tco = get_int(line, "ms5607 tco:"); } catch (Exception e) {} + try { ms5607().tref = get_int(line, "ms5607 tref:"); } catch (Exception e) {} + try { ms5607().tempsens = get_int(line, "ms5607 tempsens:"); } catch (Exception e) {} + try { ms5607().crc = get_int(line, "ms5607 crc:"); } catch (Exception e) {} /* Config show replies */ + try { + if (line.startsWith("Config version")) { + String[] bits = line.split("\\s+"); + if (bits.length >= 3) { + String[] cfg = bits[2].split("\\."); + + if (cfg.length >= 2) { + config_major = Integer.parseInt(cfg[0]); + config_minor = Integer.parseInt(cfg[1]); + } + } + } + } catch (Exception e) {} + /* HAS_FLIGHT */ try { main_deploy = get_int(line, "Main deploy:"); } catch (Exception e) {} try { apogee_delay = get_int(line, "Apogee delay:"); } catch (Exception e) {} @@ -370,6 +384,7 @@ public class AltosConfigData implements Iterable { /* HAS_APRS */ try { aprs_interval = get_int(line, "APRS interval:"); } catch (Exception e) {} try { aprs_ssid = get_int(line, "APRS SSID:"); } catch (Exception e) {} + try { aprs_format = get_int(line, "APRS format:"); } catch (Exception e) {} /* HAS_BEEP */ try { beep = get_int(line, "Beeper setting:"); } catch (Exception e) {} @@ -434,11 +449,11 @@ public class AltosConfigData implements Iterable { if (frequency > 0) { radio_frequency = (int) Math.floor (freq * 1000 + 0.5); - radio_channel = -1; + radio_channel = AltosLib.MISSING; } else if (setting > 0) { radio_setting =AltosConvert.radio_frequency_to_setting(freq, radio_calibration); - radio_channel = -1; + radio_channel = AltosLib.MISSING; } else { radio_channel = AltosConvert.radio_frequency_to_channel(freq); } @@ -449,7 +464,7 @@ public class AltosConfigData implements Iterable { int setting = radio_setting; if (radio_frequency < 0 && channel < 0 && setting < 0) - return -1; + return AltosLib.MISSING; if (channel < 0) channel = 0; @@ -473,6 +488,18 @@ public class AltosConfigData implements Iterable { } + public boolean mma655x_inverted() throws AltosUnknownProduct { + if (product.startsWith("EasyMega-v1")) + return false; + if (product.startsWith("TeleMetrum-v2")) + return true; + if (product.startsWith("TeleMega-v2")) + return false; + if (product.startsWith("TeleMega-v1")) + return false; + throw new AltosUnknownProduct(product); + } + public void get_values(AltosConfigValues source) throws AltosConfigDataException { /* HAS_FLIGHT */ @@ -490,8 +517,6 @@ public class AltosConfigData implements Iterable { radio_enable = source.radio_enable(); if (callsign != null) callsign = source.callsign(); - if (radio_calibration >= 0) - radio_calibration = source.radio_calibration(); if (telemetry_rate >= 0) telemetry_rate = source.telemetry_rate(); @@ -518,6 +543,8 @@ public class AltosConfigData implements Iterable { aprs_interval = source.aprs_interval(); if (aprs_ssid >= 0) aprs_ssid = source.aprs_ssid(); + if (aprs_format >= 0) + aprs_format = source.aprs_format(); /* HAS_BEEP */ if (beep >= 0) @@ -572,11 +599,20 @@ public class AltosConfigData implements Iterable { dest.set_pyro_firing_time(pyro_firing_time); dest.set_aprs_interval(aprs_interval); dest.set_aprs_ssid(aprs_ssid); + dest.set_aprs_format(aprs_format); dest.set_beep(beep); dest.set_tracker_motion(tracker_motion); dest.set_tracker_interval(tracker_interval); } + public boolean log_has_state() { + switch (log_format) { + case AltosLib.AO_LOG_FORMAT_TELEGPS: + return false; + } + return true; + } + public void save(AltosLink link, boolean remote) throws InterruptedException, TimeoutException { /* HAS_FLIGHT */ @@ -587,10 +623,6 @@ public class AltosConfigData implements Iterable { if (apogee_lockout >= 0) link.printf("c L %d\n", apogee_lockout); - /* Don't mess with radio calibration when remote */ - if (radio_calibration > 0 && !remote) - link.printf("c f %d\n", radio_calibration); - /* HAS_RADIO */ if (has_frequency()) { boolean has_frequency = radio_frequency >= 0; @@ -666,6 +698,8 @@ public class AltosConfigData implements Iterable { link.printf("c A %d\n", aprs_interval); if (aprs_ssid >= 0) link.printf("c S %d\n", aprs_ssid); + if (aprs_format >= 0) + link.printf("c C %d\n", aprs_format); /* HAS_BEEP */ if (beep >= 0) @@ -696,5 +730,4 @@ public class AltosConfigData implements Iterable { break; } } - }