*
* 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
* 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<String> {
+public class AltosConfigData {
/* Version information */
public String manufacturer;
public int log_space;
public String version;
public int altitude_32;
-
- /* Strings returned */
- public LinkedList<String> lines;
+ public int config_major, config_minor;
/* Config information */
/* HAS_FLIGHT*/
/* HAS_APRS */
public int aprs_interval;
public int aprs_ssid;
+ public int aprs_format;
/* HAS_BEEP */
public int beep;
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)) {
throw new ParseException("mismatch", 0);
}
- public Iterator<String> iterator() {
- return lines.iterator();
- }
-
public int log_space() {
if (log_space > 0)
return log_space;
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;
}
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);
}
public void reset() {
- lines = new LinkedList<String>();
-
- 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) {}
/* 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) {}
/* 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) {}
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);
}
int setting = radio_setting;
if (radio_frequency < 0 && channel < 0 && setting < 0)
- return -1;
+ return AltosLib.MISSING;
if (channel < 0)
channel = 0;
}
+ 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 */
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();
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)
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 */
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;
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)
break;
}
}
-
}