From e572651b36ad557d716fb14e76e3eec132e5ebdf Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 6 Dec 2012 17:08:39 -0800 Subject: altoslib: Make AltosConfigData parse all of the config data It was missing quite a few. This also speeds up parsing of config from TeleScience, TeleBT and TeleTerra by not listing flight info on those products (where it doesn't make sense). Signed-off-by: Keith Packard --- altoslib/AltosConfigData.java | 197 +++++++++++++++++++++++++++++------------- 1 file changed, 138 insertions(+), 59 deletions(-) (limited to 'altoslib/AltosConfigData.java') diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index 45a88783..b4478da9 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -26,31 +26,54 @@ public class AltosConfigData implements Iterable { /* Version information */ public String manufacturer; public String product; - public String version; - public int log_format; public int serial; + public int flight; + public int log_format; + public String version; /* Strings returned */ public LinkedList lines; /* Config information */ - public int config_major; - public int config_minor; + /* HAS_FLIGHT*/ public int main_deploy; public int apogee_delay; - public int radio_channel; - public int radio_setting; + public int apogee_lockout; + + /* HAS_RADIO */ public int radio_frequency; public String callsign; - public int accel_cal_plus, accel_cal_minus; + public int radio_enable; public int radio_calibration; + /* Old HAS_RADIO values */ + public int radio_channel; + public int radio_setting; + + /* HAS_ACCEL */ + public int accel_cal_plus, accel_cal_minus; + public int pad_orientation; + + /* HAS_LOG */ public int flight_log_max; + + /* HAS_IGNITE */ public int ignite_mode; - public int stored_flight; + + /* HAS_AES */ + public String aes_key; + + /* AO_PYRO_NUM */ + public AltosPyro[] pyros; + public int npyro; + public int pyro; + + /* Storage info replies */ public int storage_size; public int storage_erase_unit; - public AltosPyro[] pyros; + /* Log listing replies */ + public int stored_flight; + public static String get_string(String line, String label) throws ParseException { if (line.startsWith(label)) { @@ -85,6 +108,9 @@ public class AltosConfigData implements Iterable { if (stored_flight == 0) return 1; return 0; + case AltosLib.AO_LOG_FORMAT_TELEMETRY: + case AltosLib.AO_LOG_FORMAT_TELESCIENCE: + return 1; default: if (flight_log_max <= 0) return 1; @@ -130,71 +156,124 @@ public class AltosConfigData implements Iterable { return 0; } - public AltosConfigData(AltosLink link) throws InterruptedException, TimeoutException { - link.printf("c s\nf\nl\nv\n"); + public void reset() { lines = new LinkedList(); + + serial = -1; radio_setting = 0; radio_frequency = 0; - stored_flight = 0; - serial = -1; pyros = null; + npyro = 0; + pyro = 0; + } + + 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) {} + try { serial = get_int(line, "serial-number"); } catch (Exception e) {} + try { flight = get_int(line, "current-flight"); } catch (Exception e) {} + try { log_format = get_int(line, "log-format"); } catch (Exception e) {} + try { version = get_string(line, "software-version"); } catch (Exception e) {} + + /* Version also contains MS5607 info, which we ignore here */ + + /* Config show replies */ - int npyro = 0; - int pyro = 0; + /* HAS_FLIGHT */ + try { main_deploy = get_int(line, "Main deploy:"); } catch (Exception e) {} + try { apogee_delay = get_int(line, "Apogee delay:"); } catch (Exception e) {} + try { apogee_lockout = get_int(line, "Apogee lockout:"); } catch (Exception e) {} + + /* HAS_RADIO */ + try { + radio_frequency = get_int(line, "Frequency:"); + if (radio_frequency < 0) + radio_frequency = 434550; + } catch (Exception e) {} + try { callsign = get_string(line, "Callsign:"); } catch (Exception e) {} + try { radio_enable = get_int(line, "Radio enable:"); } catch (Exception e) {} + try { radio_calibration = get_int(line, "Radio cal:"); } catch (Exception e) {} + + /* Old HAS_RADIO values */ + try { radio_channel = get_int(line, "Radio channel:"); } catch (Exception e) {} + try { radio_setting = get_int(line, "Radio setting:"); } catch (Exception e) {} + + /* HAS_ACCEL */ + try { + if (line.startsWith("Accel cal")) { + String[] bits = line.split("\\s+"); + if (bits.length >= 6) { + accel_cal_plus = Integer.parseInt(bits[3]); + accel_cal_minus = Integer.parseInt(bits[5]); + } + } + } catch (Exception e) {} + try { pad_orientation = get_int(line, "Pad orientation:"); } catch (Exception e) {} + + /* HAS_LOG */ + try { flight_log_max = get_int(line, "Max flight log:"); } catch (Exception e) {} + + /* HAS_IGNITE */ + try { ignite_mode = get_int(line, "Ignite mode:"); } catch (Exception e) {} + + /* HAS_AES */ + try { aes_key = get_string(line, "AES key:"); } catch (Exception e) {} + + /* AO_PYRO_NUM */ + try { + npyro = get_int(line, "Pyro-count:"); + pyros = new AltosPyro[npyro]; + pyro = 0; + } catch (Exception e) {} + if (npyro > 0) { + try { + AltosPyro p = new AltosPyro(pyro, line); + if (pyro < npyro - 1) + pyros[pyro++] = p; + } 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) {} + + /* Log listing replies */ + try { get_int(line, "flight"); stored_flight++; } catch (Exception e) {} + } + + public AltosConfigData() { + this.reset(); + } + + private void read_link(AltosLink link, String finished) throws InterruptedException, TimeoutException { for (;;) { String line = link.get_reply(); if (line == null) throw new TimeoutException(); if (line.contains("Syntax error")) continue; - lines.add(line); - if (pyro < npyro - 1) { - if (pyros == null) - pyros = new AltosPyro[npyro]; - try { - pyros[pyro] = new AltosPyro(pyro, line); - } catch (ParseException e) { - } - ++pyro; - continue; - } - try { serial = get_int(line, "serial-number"); } catch (Exception e) {} - try { log_format = get_int(line, "log-format"); } catch (Exception e) {} - try { main_deploy = get_int(line, "Main deploy:"); } catch (Exception e) {} - try { apogee_delay = get_int(line, "Apogee delay:"); } catch (Exception e) {} - try { radio_channel = get_int(line, "Radio channel:"); } catch (Exception e) {} - try { radio_setting = get_int(line, "Radio setting:"); } catch (Exception e) {} - try { - radio_frequency = get_int(line, "Frequency:"); - if (radio_frequency < 0) - radio_frequency = 434550; - } catch (Exception e) {} - try { - if (line.startsWith("Accel cal")) { - String[] bits = line.split("\\s+"); - if (bits.length >= 6) { - accel_cal_plus = Integer.parseInt(bits[3]); - accel_cal_minus = Integer.parseInt(bits[5]); - } - } - } catch (Exception e) {} - try { radio_calibration = get_int(line, "Radio cal:"); } catch (Exception e) {} - try { flight_log_max = get_int(line, "Max flight log:"); } catch (Exception e) {} - try { ignite_mode = get_int(line, "Ignite mode:"); } catch (Exception e) {} - try { callsign = get_string(line, "Callsign:"); } catch (Exception e) {} - try { version = get_string(line,"software-version"); } catch (Exception e) {} - try { product = get_string(line,"product"); } catch (Exception e) {} - try { manufacturer = get_string(line,"manufacturer"); } catch (Exception e) {} - - try { get_int(line, "flight"); stored_flight++; } catch (Exception e) {} - try { storage_size = get_int(line, "Storage size:"); } catch (Exception e) {} - try { storage_erase_unit = get_int(line, "Storage erase unit"); } catch (Exception e) {} - try { npyro = get_int(line, "Pyro-count:"); pyro = 0; } catch (Exception e) {} + this.parse_line(line); /* signals the end of the version info */ - if (line.startsWith("software-version")) + if (line.startsWith(finished)) break; } } + public AltosConfigData(AltosLink link) throws InterruptedException, TimeoutException { + this.reset(); + link.printf("c s\nf\nv\n"); + read_link(link, "software-version"); + switch (log_format) { + case AltosLib.AO_LOG_FORMAT_TELEMETRY: + case AltosLib.AO_LOG_FORMAT_TELESCIENCE: + break; + default: + link.printf("l\n"); + read_link(link, "done"); + } + } + } \ No newline at end of file -- cgit v1.2.3 From 16fd9009d8b034fd8d208115317f65fabe10072a Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 7 Dec 2012 08:32:22 -0800 Subject: altosui: Use AltosConfigData for altosui configuration dialog Instead of a separate config language parser, share with altoslib Signed-off-by: Keith Packard --- altoslib/AltosConfigData.java | 41 +++++- altosui/AltosConfig.java | 311 +++++++++++------------------------------- 2 files changed, 115 insertions(+), 237 deletions(-) (limited to 'altoslib/AltosConfigData.java') diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index b4478da9..ddc49e88 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -74,7 +74,6 @@ public class AltosConfigData implements Iterable { /* Log listing replies */ public int stored_flight; - public static String get_string(String line, String label) throws ParseException { if (line.startsWith(label)) { String quoted = line.substring(label.length()).trim(); @@ -159,12 +158,40 @@ public class AltosConfigData implements Iterable { public void reset() { lines = new LinkedList(); - serial = -1; - radio_setting = 0; + manufacturer = "unknown"; + product = "unknown"; + serial = 0; + flight = 0; + log_format = AltosLib.AO_LOG_FORMAT_UNKNOWN; + version = "unknown"; + + main_deploy = 250; + apogee_delay = 0; + apogee_lockout = 0; + radio_frequency = 0; - pyros = null; - npyro = 0; + callsign = "N0CALL"; + radio_enable = -1; + radio_calibration = 0; + radio_channel = -1; + radio_setting = -1; + + accel_cal_plus = -1; + accel_cal_minus = -1; + pad_orientation = -1; + + flight_log_max = 0; + ignite_mode = -1; + + aes_key = ""; + pyro = 0; + npyro = 0; + pyros = null; + + storage_size = -1; + storage_erase_unit = -1; + stored_flight = -1; } public void parse_line(String line) { @@ -244,7 +271,7 @@ public class AltosConfigData implements Iterable { } public AltosConfigData() { - this.reset(); + reset(); } private void read_link(AltosLink link, String finished) throws InterruptedException, TimeoutException { @@ -263,7 +290,7 @@ public class AltosConfigData implements Iterable { } public AltosConfigData(AltosLink link) throws InterruptedException, TimeoutException { - this.reset(); + reset(); link.printf("c s\nf\nv\n"); read_link(link, "software-version"); switch (log_format) { diff --git a/altosui/AltosConfig.java b/altosui/AltosConfig.java index 4b0edec0..92191564 100644 --- a/altosui/AltosConfig.java +++ b/altosui/AltosConfig.java @@ -58,64 +58,12 @@ public class AltosConfig implements ActionListener { AltosDevice device; AltosSerial serial_line; boolean remote; - AltosConfigData remote_config_data; - double remote_frequency; - int_ref serial; - int_ref log_format; - int_ref main_deploy; - int_ref apogee_delay; - int_ref apogee_lockout; - int_ref radio_channel; - int_ref radio_calibration; - int_ref flight_log_max; - int_ref ignite_mode; - int_ref pad_orientation; - int_ref radio_setting; - int_ref radio_frequency; - int_ref storage_size; - int_ref storage_erase_unit; - int_ref stored_flight; - int_ref radio_enable; - string_ref version; - string_ref product; - string_ref callsign; - int_ref npyro; - AltosPyro[] pyros; + + AltosConfigData data; AltosConfigUI config_ui; boolean serial_started; boolean made_visible; - boolean get_int(String line, String label, int_ref x) { - if (line.startsWith(label)) { - try { - String tail = line.substring(label.length()).trim(); - String[] tokens = tail.split("\\s+"); - if (tokens.length > 0) { - int i = Integer.parseInt(tokens[0]); - x.set(i); - return true; - } - } catch (NumberFormatException ne) { - } - } - return false; - } - - boolean get_string(String line, String label, string_ref s) { - if (line.startsWith(label)) { - String quoted = line.substring(label.length()).trim(); - - if (quoted.startsWith("\"")) - quoted = quoted.substring(1); - if (quoted.endsWith("\"")) - quoted = quoted.substring(0,quoted.length()-1); - s.set(quoted); - return true; - } else { - return false; - } - } - void start_serial() throws InterruptedException, TimeoutException { serial_started = true; if (remote) @@ -131,8 +79,8 @@ public class AltosConfig implements ActionListener { } int log_limit() { - if (storage_size.get() > 0 && storage_erase_unit.get() > 0) { - int log_limit = storage_size.get() - storage_erase_unit.get(); + if (data.storage_size > 0 && data.storage_erase_unit > 0) { + int log_limit = data.storage_size - data.storage_erase_unit; if (log_limit > 0) return log_limit / 1024; } @@ -140,33 +88,33 @@ public class AltosConfig implements ActionListener { } void update_ui() { - config_ui.set_serial(serial.get()); - config_ui.set_product(product.get()); - config_ui.set_version(version.get()); - config_ui.set_main_deploy(main_deploy.get()); - config_ui.set_apogee_delay(apogee_delay.get()); - config_ui.set_apogee_lockout(apogee_lockout.get()); - config_ui.set_radio_calibration(radio_calibration.get()); + config_ui.set_serial(data.serial); + config_ui.set_product(data.product); + config_ui.set_version(data.version); + config_ui.set_main_deploy(data.main_deploy); + config_ui.set_apogee_delay(data.apogee_delay); + config_ui.set_apogee_lockout(data.apogee_lockout); + config_ui.set_radio_calibration(data.radio_calibration); config_ui.set_radio_frequency(frequency()); boolean max_enabled = true; - switch (log_format.get()) { + switch (data.log_format) { case Altos.AO_LOG_FORMAT_TINY: max_enabled = false; break; default: - if (stored_flight.get() >= 0) + if (data.stored_flight >= 0) max_enabled = false; break; } config_ui.set_flight_log_max_enabled(max_enabled); - config_ui.set_radio_enable(radio_enable.get()); + config_ui.set_radio_enable(data.radio_enable); config_ui.set_flight_log_max_limit(log_limit()); - config_ui.set_flight_log_max(flight_log_max.get()); - config_ui.set_ignite_mode(ignite_mode.get()); - config_ui.set_pad_orientation(pad_orientation.get()); - config_ui.set_callsign(callsign.get()); - config_ui.set_pyros(pyros); - config_ui.set_has_pyro(npyro.get() > 0); + config_ui.set_flight_log_max(data.flight_log_max); + config_ui.set_ignite_mode(data.ignite_mode); + config_ui.set_pad_orientation(data.pad_orientation); + config_ui.set_callsign(data.callsign); + config_ui.set_pyros(data.pyros); + config_ui.set_has_pyro(data.npyro > 0); config_ui.set_clean(); if (!made_visible) { made_visible = true; @@ -176,52 +124,6 @@ public class AltosConfig implements ActionListener { int pyro; - void process_line(String line) { - if (line == null) { - abort(); - return; - } - if (line.equals("all finished")) { - if (serial_line != null) - update_ui(); - return; - } - if (pyro < npyro.get()) { - if (pyros == null) - pyros = new AltosPyro[npyro.get()]; - - try { - pyros[pyro] = new AltosPyro(pyro, line); - } catch (ParseException e) { - System.out.printf ("pyro parse failed %s\n", line); - } - ++pyro; - return; - } - get_int(line, "serial-number", serial); - get_int(line, "log-format", log_format); - get_int(line, "Main deploy:", main_deploy); - get_int(line, "Apogee delay:", apogee_delay); - get_int(line, "Apogee lockout:", apogee_lockout); - get_int(line, "Radio channel:", radio_channel); - get_int(line, "Radio cal:", radio_calibration); - get_int(line, "Max flight log:", flight_log_max); - get_int(line, "Ignite mode:", ignite_mode); - get_int(line, "Pad orientation:", pad_orientation); - get_int(line, "Radio setting:", radio_setting); - if (get_int(line, "Frequency:", radio_frequency)) - if (radio_frequency.get() < 0) - radio_frequency.set(434550); - get_int(line, "Radio enable:", radio_enable); - get_int(line, "Storage size:", storage_size); - get_int(line, "Storage erase unit:", storage_erase_unit); - get_int(line, "flight", stored_flight); - get_string(line, "Callsign:", callsign); - get_string(line,"software-version", version); - get_string(line,"product", product); - get_int(line, "Pyro-count:", npyro); - } - final static int serial_mode_read = 0; final static int serial_mode_save = 1; final static int serial_mode_reboot = 2; @@ -230,63 +132,33 @@ public class AltosConfig implements ActionListener { AltosConfig config; int serial_mode; - void process_line(String line) { - config.process_line(line); - } - void callback(String in_line) { - final String line = in_line; + void callback(String in_cmd) { + final String cmd = in_cmd; Runnable r = new Runnable() { public void run() { - process_line(line); + if (cmd.equals("abort")) { + abort(); + } else if (cmd.equals("all finished")) { + if (serial_line != null) + update_ui(); + } } }; SwingUtilities.invokeLater(r); } - void reset_data() { - serial.set(0); - log_format.set(Altos.AO_LOG_FORMAT_UNKNOWN); - main_deploy.set(250); - apogee_delay.set(0); - apogee_lockout.set(0); - radio_channel.set(0); - radio_setting.set(0); - radio_frequency.set(0); - radio_calibration.set(1186611); - radio_enable.set(-1); - flight_log_max.set(0); - ignite_mode.set(-1); - pad_orientation.set(-1); - storage_size.set(-1); - storage_erase_unit.set(-1); - stored_flight.set(-1); - callsign.set("N0CALL"); - version.set("unknown"); - product.set("unknown"); - pyro = 0; - npyro.set(0); - } - void get_data() { + data = null; try { - config.start_serial(); - reset_data(); - - config.serial_line.printf("c s\nf\nl\nv\n"); - for (;;) { - try { - String line = config.serial_line.get_reply(5000); - if (line == null) - stop_serial(); - callback(line); - if (line.startsWith("software-version")) - break; - } catch (Exception e) { - break; - } - } + start_serial(); + data = new AltosConfigData(config.serial_line); } catch (InterruptedException ie) { } catch (TimeoutException te) { + try { + stop_serial(); + callback("abort"); + } catch (InterruptedException ie) { + } } finally { try { stop_serial(); @@ -299,37 +171,37 @@ public class AltosConfig implements ActionListener { void save_data() { try { double frequency = frequency(); - boolean has_frequency = radio_frequency.get() > 0; - boolean has_setting = radio_setting.get() > 0; + boolean has_frequency = data.radio_frequency > 0; + boolean has_setting = data.radio_setting > 0; start_serial(); - serial_line.printf("c m %d\n", main_deploy.get()); - serial_line.printf("c d %d\n", apogee_delay.get()); - serial_line.printf("c L %d\n", apogee_lockout.get()); + serial_line.printf("c m %d\n", data.main_deploy); + serial_line.printf("c d %d\n", data.apogee_delay); + serial_line.printf("c L %d\n", data.apogee_lockout); if (!remote) - serial_line.printf("c f %d\n", radio_calibration.get()); + serial_line.printf("c f %d\n", data.radio_calibration); serial_line.set_radio_frequency(frequency, has_frequency, has_setting, - radio_calibration.get()); + data.radio_calibration); if (remote) { serial_line.stop_remote(); serial_line.set_radio_frequency(frequency); AltosUIPreferences.set_frequency(device.getSerial(), frequency); serial_line.start_remote(); } - serial_line.printf("c c %s\n", callsign.get()); - if (flight_log_max.get() != 0) - serial_line.printf("c l %d\n", flight_log_max.get()); - if (radio_enable.get() >= 0) - serial_line.printf("c e %d\n", radio_enable.get()); - if (ignite_mode.get() >= 0) - serial_line.printf("c i %d\n", ignite_mode.get()); - if (pad_orientation.get() >= 0) - serial_line.printf("c o %d\n", pad_orientation.get()); - if (pyros.length > 0) { - for (int p = 0; p < pyros.length; p++) { + serial_line.printf("c c %s\n", data.callsign); + if (data.flight_log_max != 0) + serial_line.printf("c l %d\n", data.flight_log_max); + if (data.radio_enable >= 0) + serial_line.printf("c e %d\n", data.radio_enable); + if (data.ignite_mode >= 0) + serial_line.printf("c i %d\n", data.ignite_mode); + if (data.pad_orientation >= 0) + serial_line.printf("c o %d\n", data.pad_orientation); + if (data.pyros.length > 0) { + for (int p = 0; p < data.pyros.length; p++) { serial_line.printf("c P %s\n", - pyros[p].toString()); + data.pyros[p].toString()); } } serial_line.printf("c w\n"); @@ -413,25 +285,25 @@ public class AltosConfig implements ActionListener { } double frequency() { - return AltosConvert.radio_to_frequency(radio_frequency.get(), - radio_setting.get(), - radio_calibration.get(), - radio_channel.get()); + return AltosConvert.radio_to_frequency(data.radio_frequency, + data.radio_setting, + data.radio_calibration, + data.radio_channel); } void set_frequency(double freq) { - int frequency = radio_frequency.get(); - int setting = radio_setting.get(); + int frequency = data.radio_frequency; + int setting = data.radio_setting; if (frequency > 0) { - radio_frequency.set((int) Math.floor (freq * 1000 + 0.5)); - radio_channel.set(0); + data.radio_frequency = (int) Math.floor (freq * 1000 + 0.5); + data.radio_channel = 0; } else if (setting > 0) { - radio_setting.set(AltosConvert.radio_frequency_to_setting(freq, - radio_calibration.get())); - radio_channel.set(0); + data.radio_setting =AltosConvert.radio_frequency_to_setting(freq, + data.radio_calibration); + data.radio_channel = 0; } else { - radio_channel.set(AltosConvert.radio_frequency_to_channel(freq)); + data.radio_channel = AltosConvert.radio_frequency_to_channel(freq); } } @@ -448,21 +320,21 @@ public class AltosConfig implements ActionListener { return; } - main_deploy.set(config_ui.main_deploy()); - apogee_delay.set(config_ui.apogee_delay()); - apogee_lockout.set(config_ui.apogee_lockout()); - radio_calibration.set(config_ui.radio_calibration()); + data.main_deploy = config_ui.main_deploy(); + data.apogee_delay = config_ui.apogee_delay(); + data.apogee_lockout = config_ui.apogee_lockout(); + data.radio_calibration = config_ui.radio_calibration(); set_frequency(config_ui.radio_frequency()); - flight_log_max.set(config_ui.flight_log_max()); - if (radio_enable.get() >= 0) - radio_enable.set(config_ui.radio_enable()); - if (ignite_mode.get() >= 0) - ignite_mode.set(config_ui.ignite_mode()); - if (pad_orientation.get() >= 0) - pad_orientation.set(config_ui.pad_orientation()); - callsign.set(config_ui.callsign()); - if (npyro.get() > 0) { - pyros = config_ui.pyros(); + data.flight_log_max = config_ui.flight_log_max(); + if (data.radio_enable >= 0) + data.radio_enable = config_ui.radio_enable(); + if (data.ignite_mode >= 0) + data.ignite_mode = config_ui.ignite_mode(); + if (data.pad_orientation >= 0) + data.pad_orientation = config_ui.pad_orientation(); + data.callsign = config_ui.callsign(); + if (data.npyro > 0) { + data.pyros = config_ui.pyros(); } run_serial_thread(serial_mode_save); } @@ -491,27 +363,6 @@ public class AltosConfig implements ActionListener { public AltosConfig(JFrame given_owner) { owner = given_owner; - serial = new int_ref(0); - log_format = new int_ref(Altos.AO_LOG_FORMAT_UNKNOWN); - main_deploy = new int_ref(250); - apogee_delay = new int_ref(0); - apogee_lockout = new int_ref(0); - radio_channel = new int_ref(0); - radio_setting = new int_ref(0); - radio_frequency = new int_ref(0); - radio_calibration = new int_ref(1186611); - radio_enable = new int_ref(-1); - flight_log_max = new int_ref(0); - ignite_mode = new int_ref(-1); - pad_orientation = new int_ref(-1); - storage_size = new int_ref(-1); - storage_erase_unit = new int_ref(-1); - stored_flight = new int_ref(-1); - callsign = new string_ref("N0CALL"); - version = new string_ref("unknown"); - product = new string_ref("unknown"); - npyro = new int_ref(0); - device = AltosDeviceDialog.show(owner, Altos.product_any); if (device != null) { try { -- cgit v1.2.3 From 1489c7f75f7b9ce547ac49c157b440c4f9131ef4 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 7 Dec 2012 17:27:48 -0800 Subject: altosui: Call config UI from AltosConfigData directly Don't make AltosConfig have a pile of config code, stick that in AltosConfigData instead. This uses a new interface, AltosConfigValues to get from AltosConfigData to the UI. Signed-off-by: Keith Packard --- altoslib/AltosConfigData.java | 200 +++++++++++++++++++++++++++++++++++++--- altoslib/AltosConfigValues.java | 75 +++++++++++++++ altoslib/Makefile.am | 1 + altosui/AltosConfig.java | 115 +++-------------------- altosui/AltosConfigUI.java | 11 +-- 5 files changed, 280 insertions(+), 122 deletions(-) create mode 100644 altoslib/AltosConfigValues.java (limited to 'altoslib/AltosConfigData.java') diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index ddc49e88..515ff480 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -39,7 +39,7 @@ public class AltosConfigData implements Iterable { public int main_deploy; public int apogee_delay; public int apogee_lockout; - + /* HAS_RADIO */ public int radio_frequency; public String callsign; @@ -136,7 +136,7 @@ public class AltosConfigData implements Iterable { return r; } - + public int compare_version(String other) { int[] me = parse_version(version); int[] them = parse_version(other); @@ -165,14 +165,14 @@ public class AltosConfigData implements Iterable { log_format = AltosLib.AO_LOG_FORMAT_UNKNOWN; version = "unknown"; - main_deploy = 250; - apogee_delay = 0; - apogee_lockout = 0; + main_deploy = -1; + apogee_delay = -1; + apogee_lockout = -1; - radio_frequency = 0; - callsign = "N0CALL"; + radio_frequency = -1; + callsign = null; radio_enable = -1; - radio_calibration = 0; + radio_calibration = -1; radio_channel = -1; radio_setting = -1; @@ -180,7 +180,7 @@ public class AltosConfigData implements Iterable { accel_cal_minus = -1; pad_orientation = -1; - flight_log_max = 0; + flight_log_max = -1; ignite_mode = -1; aes_key = ""; @@ -193,7 +193,7 @@ public class AltosConfigData implements Iterable { storage_erase_unit = -1; stored_flight = -1; } - + public void parse_line(String line) { lines.add(line); /* Version replies */ @@ -257,11 +257,11 @@ public class AltosConfigData implements Iterable { if (npyro > 0) { try { AltosPyro p = new AltosPyro(pyro, line); - if (pyro < npyro - 1) + if (pyro < npyro) pyros[pyro++] = p; } 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) {} @@ -289,6 +289,182 @@ public class AltosConfigData implements Iterable { } } + public boolean has_frequency() { + return radio_frequency >= 0 || radio_setting >= 0 || radio_channel >= 0; + } + + public void set_frequency(double freq) { + int frequency = radio_frequency; + int setting = radio_setting; + + if (frequency > 0) { + radio_frequency = (int) Math.floor (freq * 1000 + 0.5); + radio_channel = -1; + } else if (setting > 0) { + radio_setting =AltosConvert.radio_frequency_to_setting(freq, + radio_calibration); + radio_channel = -1; + } else { + radio_channel = AltosConvert.radio_frequency_to_channel(freq); + } + } + + public double frequency() { + int channel = radio_channel; + int setting = radio_setting; + if (channel < 0) + channel = 0; + if (setting < 0) + setting = 0; + + return AltosConvert.radio_to_frequency(radio_frequency, + setting, + radio_calibration, + channel); + } + + public int log_limit() { + if (storage_size > 0 && storage_erase_unit > 0) { + int log_limit = storage_size - storage_erase_unit; + if (log_limit > 0) + return log_limit / 1024; + } + return 1024; + } + + public void get_values(AltosConfigValues source) { + + /* HAS_FLIGHT */ + if (main_deploy >= 0) + main_deploy = source.main_deploy(); + if (apogee_delay >= 0) + apogee_delay = source.apogee_delay(); + if (apogee_lockout >= 0) + apogee_lockout = source.apogee_lockout(); + + /* HAS_RADIO */ + if (has_frequency()) + set_frequency(source.radio_frequency()); + if (radio_enable >= 0) + radio_enable = source.radio_enable(); + if (callsign != null) + callsign = source.callsign(); + if (radio_calibration >= 0) + radio_calibration = source.radio_calibration(); + + /* HAS_ACCEL */ + if (pad_orientation >= 0) + pad_orientation = source.pad_orientation(); + + /* HAS_LOG */ + if (flight_log_max >= 0) + flight_log_max = source.flight_log_max(); + + /* HAS_IGNITE */ + if (ignite_mode >= 0) + ignite_mode = source.ignite_mode(); + + /* AO_PYRO_NUM */ + if (npyro > 0) + pyros = source.pyros(); + } + + public void set_values(AltosConfigValues dest) { + dest.set_serial(serial); + dest.set_product(product); + dest.set_version(version); + dest.set_main_deploy(main_deploy); + dest.set_apogee_delay(apogee_delay); + dest.set_apogee_lockout(apogee_lockout); + dest.set_radio_calibration(radio_calibration); + dest.set_radio_frequency(frequency()); + boolean max_enabled = true; + switch (log_format) { + case AltosLib.AO_LOG_FORMAT_TINY: + max_enabled = false; + break; + default: + if (stored_flight >= 0) + max_enabled = false; + break; + } + dest.set_flight_log_max_enabled(max_enabled); + dest.set_radio_enable(radio_enable); + dest.set_flight_log_max_limit(log_limit()); + dest.set_flight_log_max(flight_log_max); + dest.set_ignite_mode(ignite_mode); + dest.set_pad_orientation(pad_orientation); + dest.set_callsign(callsign); + if (npyro > 0) + dest.set_pyros(pyros); + else + dest.set_pyros(null); + } + + public void save(AltosLink link, boolean remote) throws InterruptedException, TimeoutException { + + /* HAS_FLIGHT */ + if (main_deploy >= 0) + link.printf("c m %d\n", main_deploy); + if (apogee_delay >= 0) + link.printf("c d %d\n", apogee_delay); + 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; + boolean has_setting = radio_setting > 0; + double frequency = frequency(); + link.set_radio_frequency(frequency, + has_frequency, + has_setting, + radio_calibration); + /* When remote, reset the dongle frequency at the same time */ + if (remote) { + link.stop_remote(); + link.set_radio_frequency(frequency); + link.start_remote(); + } + } + + if (callsign != null) + link.printf("c c %s\n", callsign); + if (radio_enable >= 0) + link.printf("c e %d\n", radio_enable); + + /* HAS_ACCEL */ + /* UI doesn't support accel cal */ + if (pad_orientation >= 0) + link.printf("c o %d\n", pad_orientation); + + /* HAS_LOG */ + if (flight_log_max != 0) + link.printf("c l %d\n", flight_log_max); + + /* HAS_IGNITE */ + if (ignite_mode >= 0) + link.printf("c i %d\n", ignite_mode); + + /* HAS_AES */ + /* UI doesn't support AES key config */ + + /* AO_PYRO_NUM */ + if (pyros.length > 0) { + for (int p = 0; p < pyros.length; p++) { + link.printf("c P %s\n", + pyros[p].toString()); + } + } + + link.printf("c w\n"); + link.flush_output(); + } + public AltosConfigData(AltosLink link) throws InterruptedException, TimeoutException { reset(); link.printf("c s\nf\nv\n"); diff --git a/altoslib/AltosConfigValues.java b/altoslib/AltosConfigValues.java new file mode 100644 index 00000000..69239f21 --- /dev/null +++ b/altoslib/AltosConfigValues.java @@ -0,0 +1,75 @@ +/* + * Copyright © 2012 Keith Packard + * + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.AltosLib; + +public interface AltosConfigValues { + /* set and get all of the dialog values */ + public abstract void set_product(String product); + + public abstract void set_version(String version); + + public abstract void set_serial(int serial); + + public abstract void set_main_deploy(int new_main_deploy); + + public abstract int main_deploy(); + + public abstract void set_apogee_delay(int new_apogee_delay); + + public abstract int apogee_delay(); + + public abstract void set_apogee_lockout(int new_apogee_lockout); + + public abstract int apogee_lockout(); + + public abstract void set_radio_frequency(double new_radio_frequency); + + public abstract double radio_frequency(); + + public abstract void set_radio_calibration(int new_radio_calibration); + + public abstract int radio_calibration(); + + public abstract void set_radio_enable(int new_radio_enable); + + public abstract int radio_enable(); + + public abstract void set_callsign(String new_callsign); + + public abstract String callsign(); + + public abstract void set_flight_log_max(int new_flight_log_max); + + public abstract void set_flight_log_max_enabled(boolean enable); + + public abstract int flight_log_max(); + + public abstract void set_flight_log_max_limit(int flight_log_max_limit); + + public abstract void set_ignite_mode(int new_ignite_mode); + + public abstract int ignite_mode(); + + public abstract void set_pad_orientation(int new_pad_orientation); + + public abstract int pad_orientation(); + + public abstract void set_pyros(AltosPyro[] new_pyros); + + public abstract AltosPyro[] pyros(); +} diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am index 2579a650..0086bc65 100644 --- a/altoslib/Makefile.am +++ b/altoslib/Makefile.am @@ -12,6 +12,7 @@ AltosLibdir = $(datadir)/java AltosLib_JAVA = \ $(SRC)/AltosLib.java \ $(SRC)/AltosConfigData.java \ + $(SRC)/AltosConfigValues.java \ $(SRC)/AltosConvert.java \ $(SRC)/AltosCRCException.java \ $(SRC)/AltosEepromChunk.java \ diff --git a/altosui/AltosConfig.java b/altosui/AltosConfig.java index 92191564..e1ffebb4 100644 --- a/altosui/AltosConfig.java +++ b/altosui/AltosConfig.java @@ -78,43 +78,8 @@ public class AltosConfig implements ActionListener { serial_line.stop_remote(); } - int log_limit() { - if (data.storage_size > 0 && data.storage_erase_unit > 0) { - int log_limit = data.storage_size - data.storage_erase_unit; - if (log_limit > 0) - return log_limit / 1024; - } - return 1024; - } - void update_ui() { - config_ui.set_serial(data.serial); - config_ui.set_product(data.product); - config_ui.set_version(data.version); - config_ui.set_main_deploy(data.main_deploy); - config_ui.set_apogee_delay(data.apogee_delay); - config_ui.set_apogee_lockout(data.apogee_lockout); - config_ui.set_radio_calibration(data.radio_calibration); - config_ui.set_radio_frequency(frequency()); - boolean max_enabled = true; - switch (data.log_format) { - case Altos.AO_LOG_FORMAT_TINY: - max_enabled = false; - break; - default: - if (data.stored_flight >= 0) - max_enabled = false; - break; - } - config_ui.set_flight_log_max_enabled(max_enabled); - config_ui.set_radio_enable(data.radio_enable); - config_ui.set_flight_log_max_limit(log_limit()); - config_ui.set_flight_log_max(data.flight_log_max); - config_ui.set_ignite_mode(data.ignite_mode); - config_ui.set_pad_orientation(data.pad_orientation); - config_ui.set_callsign(data.callsign); - config_ui.set_pyros(data.pyros); - config_ui.set_has_pyro(data.npyro > 0); + data.set_values(config_ui); config_ui.set_clean(); if (!made_visible) { made_visible = true; @@ -170,41 +135,11 @@ public class AltosConfig implements ActionListener { void save_data() { try { - double frequency = frequency(); - boolean has_frequency = data.radio_frequency > 0; - boolean has_setting = data.radio_setting > 0; start_serial(); - serial_line.printf("c m %d\n", data.main_deploy); - serial_line.printf("c d %d\n", data.apogee_delay); - serial_line.printf("c L %d\n", data.apogee_lockout); - if (!remote) - serial_line.printf("c f %d\n", data.radio_calibration); - serial_line.set_radio_frequency(frequency, - has_frequency, - has_setting, - data.radio_calibration); - if (remote) { - serial_line.stop_remote(); - serial_line.set_radio_frequency(frequency); - AltosUIPreferences.set_frequency(device.getSerial(), frequency); - serial_line.start_remote(); - } - serial_line.printf("c c %s\n", data.callsign); - if (data.flight_log_max != 0) - serial_line.printf("c l %d\n", data.flight_log_max); - if (data.radio_enable >= 0) - serial_line.printf("c e %d\n", data.radio_enable); - if (data.ignite_mode >= 0) - serial_line.printf("c i %d\n", data.ignite_mode); - if (data.pad_orientation >= 0) - serial_line.printf("c o %d\n", data.pad_orientation); - if (data.pyros.length > 0) { - for (int p = 0; p < data.pyros.length; p++) { - serial_line.printf("c P %s\n", - data.pyros[p].toString()); - } - } - serial_line.printf("c w\n"); + data.save(serial_line, remote); + if (remote) + AltosUIPreferences.set_frequency(device.getSerial(), + data.frequency()); } catch (InterruptedException ie) { } catch (TimeoutException te) { } finally { @@ -291,51 +226,23 @@ public class AltosConfig implements ActionListener { data.radio_channel); } - void set_frequency(double freq) { - int frequency = data.radio_frequency; - int setting = data.radio_setting; - - if (frequency > 0) { - data.radio_frequency = (int) Math.floor (freq * 1000 + 0.5); - data.radio_channel = 0; - } else if (setting > 0) { - data.radio_setting =AltosConvert.radio_frequency_to_setting(freq, - data.radio_calibration); - data.radio_channel = 0; - } else { - data.radio_channel = AltosConvert.radio_frequency_to_channel(freq); - } - } - void save_data() { /* bounds check stuff */ - if (config_ui.flight_log_max() > log_limit()) { + if (config_ui.flight_log_max() > data.log_limit()) { JOptionPane.showMessageDialog(owner, String.format("Requested flight log, %dk, is larger than the available space, %dk.\n", config_ui.flight_log_max(), - log_limit()), + data.log_limit()), "Maximum Flight Log Too Large", JOptionPane.ERROR_MESSAGE); return; } - data.main_deploy = config_ui.main_deploy(); - data.apogee_delay = config_ui.apogee_delay(); - data.apogee_lockout = config_ui.apogee_lockout(); - data.radio_calibration = config_ui.radio_calibration(); - set_frequency(config_ui.radio_frequency()); - data.flight_log_max = config_ui.flight_log_max(); - if (data.radio_enable >= 0) - data.radio_enable = config_ui.radio_enable(); - if (data.ignite_mode >= 0) - data.ignite_mode = config_ui.ignite_mode(); - if (data.pad_orientation >= 0) - data.pad_orientation = config_ui.pad_orientation(); - data.callsign = config_ui.callsign(); - if (data.npyro > 0) { - data.pyros = config_ui.pyros(); - } + /* Pull data out of the UI and stuff back into our local data record */ + + data.get_values(config_ui); + run_serial_thread(serial_mode_save); } diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java index feac053b..2c3435c1 100644 --- a/altosui/AltosConfigUI.java +++ b/altosui/AltosConfigUI.java @@ -25,7 +25,7 @@ import org.altusmetrum.AltosLib.*; public class AltosConfigUI extends AltosDialog - implements ActionListener, ItemListener, DocumentListener + implements ActionListener, ItemListener, DocumentListener, AltosConfigValues { Container pane; @@ -684,6 +684,7 @@ public class AltosConfigUI public void set_apogee_delay(int new_apogee_delay) { apogee_delay_value.setSelectedItem(Integer.toString(new_apogee_delay)); + apogee_delay_value.setEnabled(new_apogee_delay >= 0); } public int apogee_delay() { @@ -692,6 +693,7 @@ public class AltosConfigUI public void set_apogee_lockout(int new_apogee_lockout) { apogee_lockout_value.setSelectedItem(Integer.toString(new_apogee_lockout)); + apogee_lockout_value.setEnabled(new_apogee_lockout >= 0); } public int apogee_lockout() { @@ -829,13 +831,10 @@ public class AltosConfigUI return -1; } - public void set_has_pyro(boolean has_pyro) { - pyro.setEnabled(has_pyro); - } - public void set_pyros(AltosPyro[] new_pyros) { pyros = new_pyros; - if (pyro_ui != null) + pyro.setEnabled(pyros != null); + if (pyros != null && pyro_ui != null) pyro_ui.set_pyros(pyros); } -- cgit v1.2.3 From abf82991b8e69754ebc4857ce78ac4a4b01f16e4 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 7 Dec 2012 17:35:15 -0800 Subject: altosui: Add APRS interval configuration to UI Signed-off-by: Keith Packard --- altoslib/AltosConfigData.java | 18 +++++++++++- altoslib/AltosConfigValues.java | 4 +++ altosui/AltosConfigUI.java | 64 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 84 insertions(+), 2 deletions(-) (limited to 'altoslib/AltosConfigData.java') diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index 515ff480..f940b150 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -67,6 +67,9 @@ public class AltosConfigData implements Iterable { public int npyro; public int pyro; + /* HAS_APRS */ + public int aprs_interval; + /* Storage info replies */ public int storage_size; public int storage_erase_unit; @@ -189,6 +192,8 @@ public class AltosConfigData implements Iterable { npyro = 0; pyros = null; + aprs_interval = -1; + storage_size = -1; storage_erase_unit = -1; stored_flight = -1; @@ -262,6 +267,9 @@ public class AltosConfigData implements Iterable { } catch (Exception e) {} } + /* HAS_APRS */ + try { aprs_interval = get_int(line, "APRS interval:"); } 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) {} @@ -367,6 +375,9 @@ public class AltosConfigData implements Iterable { /* AO_PYRO_NUM */ if (npyro > 0) pyros = source.pyros(); + + if (aprs_interval >= 0) + aprs_interval = source.aprs_interval(); } public void set_values(AltosConfigValues dest) { @@ -399,6 +410,7 @@ public class AltosConfigData implements Iterable { dest.set_pyros(pyros); else dest.set_pyros(null); + dest.set_aprs_interval(aprs_interval); } public void save(AltosLink link, boolean remote) throws InterruptedException, TimeoutException { @@ -461,6 +473,10 @@ public class AltosConfigData implements Iterable { } } + /* HAS_APRS */ + if (aprs_interval >= 0) + link.printf("c A %d\n", aprs_interval); + link.printf("c w\n"); link.flush_output(); } @@ -479,4 +495,4 @@ public class AltosConfigData implements Iterable { } } -} \ No newline at end of file +} diff --git a/altoslib/AltosConfigValues.java b/altoslib/AltosConfigValues.java index 69239f21..40d5217e 100644 --- a/altoslib/AltosConfigValues.java +++ b/altoslib/AltosConfigValues.java @@ -72,4 +72,8 @@ public interface AltosConfigValues { public abstract void set_pyros(AltosPyro[] new_pyros); public abstract AltosPyro[] pyros(); + + public abstract int aprs_interval(); + + public abstract void set_aprs_interval(int new_aprs_interval); } diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java index 2c3435c1..95780e2b 100644 --- a/altosui/AltosConfigUI.java +++ b/altosui/AltosConfigUI.java @@ -39,6 +39,7 @@ public class AltosConfigUI JLabel radio_calibration_label; JLabel radio_frequency_label; JLabel radio_enable_label; + JLabel aprs_interval_label; JLabel flight_log_max_label; JLabel ignite_mode_label; JLabel pad_orientation_label; @@ -56,6 +57,7 @@ public class AltosConfigUI AltosFreqList radio_frequency_value; JTextField radio_calibration_value; JRadioButton radio_enable_value; + JComboBox aprs_interval_value; JComboBox flight_log_max_value; JComboBox ignite_mode_value; JComboBox pad_orientation_value; @@ -97,6 +99,13 @@ public class AltosConfigUI "Redundant Main", }; + static String[] aprs_interval_values = { + "Disabled", + "2", + "5", + "10" + }; + static String[] pad_orientation_values = { "Antenna Up", "Antenna Down", @@ -141,6 +150,13 @@ public class AltosConfigUI radio_enable_value.setToolTipText("Firmware version does not support disabling radio"); } + void set_aprs_interval_tool_tip() { + if (aprs_interval_value.isEnabled()) + aprs_interval_value.setToolTipText("Enable APRS and set the interval between APRS reports"); + else + aprs_interval_value.setToolTipText("Hardware doesn't support APRS"); + } + void set_flight_log_max_tool_tip() { if (flight_log_max_value.isEnabled()) flight_log_max_value.setToolTipText("Size reserved for each flight log (in kB)"); @@ -393,7 +409,7 @@ public class AltosConfigUI c.anchor = GridBagConstraints.LINE_START; c.insets = il; c.ipady = 5; - radio_enable_label = new JLabel("Telemetry/RDF Enable:"); + radio_enable_label = new JLabel("Telemetry/RDF/APRS Enable:"); pane.add(radio_enable_label, c); c = new GridBagConstraints(); @@ -410,6 +426,32 @@ public class AltosConfigUI set_radio_enable_tool_tip(); row++; + /* APRS interval */ + c = new GridBagConstraints(); + c.gridx = 0; c.gridy = row; + c.gridwidth = 4; + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.LINE_START; + c.insets = il; + c.ipady = 5; + aprs_interval_label = new JLabel("APRS Interval(s):"); + pane.add(aprs_interval_label, c); + + c = new GridBagConstraints(); + c.gridx = 4; c.gridy = row; + c.gridwidth = 4; + c.fill = GridBagConstraints.HORIZONTAL; + c.weightx = 1; + c.anchor = GridBagConstraints.LINE_START; + c.insets = ir; + c.ipady = 5; + aprs_interval_value = new JComboBox(aprs_interval_values); + aprs_interval_value.setEditable(true); + aprs_interval_value.addItemListener(this); + pane.add(aprs_interval_value, c); + set_aprs_interval_tool_tip(); + row++; + /* Callsign */ c = new GridBagConstraints(); c.gridx = 0; c.gridy = row; @@ -843,4 +885,24 @@ public class AltosConfigUI pyros = pyro_ui.get_pyros(); return pyros; } + + public void set_aprs_interval(int new_aprs_interval) { + String s; + + if (new_aprs_interval <= 0) + s = "Disabled"; + else + s = Integer.toString(new_aprs_interval); + aprs_interval_value.setSelectedItem(s); + aprs_interval_value.setEnabled(new_aprs_interval >= 0); + set_aprs_interval_tool_tip(); + } + + public int aprs_interval() { + String s = aprs_interval_value.getSelectedItem().toString(); + + if (s.equals("Disabled")) + return 0; + return Integer.parseInt(s); + } } -- cgit v1.2.3 From 8dbe8abd034a2d1ee2ec0380ec376722a4ecbd71 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 14 Dec 2012 19:27:56 -0800 Subject: altoslib: Only list flight logs for boards that we know have them Boards that don't have flight logs will generate a nice 'Syntax Error' and fail to initialize. Signed-off-by: Keith Packard --- altoslib/AltosConfigData.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'altoslib/AltosConfigData.java') diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index 515ff480..758953e2 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -469,13 +469,15 @@ public class AltosConfigData implements Iterable { reset(); link.printf("c s\nf\nv\n"); read_link(link, "software-version"); + System.out.printf("Log format %d\n", log_format); switch (log_format) { - case AltosLib.AO_LOG_FORMAT_TELEMETRY: - case AltosLib.AO_LOG_FORMAT_TELESCIENCE: - break; - default: + case AltosLib.AO_LOG_FORMAT_FULL: + case AltosLib.AO_LOG_FORMAT_TINY: + case AltosLib.AO_LOG_FORMAT_MEGAMETRUM: link.printf("l\n"); read_link(link, "done"); + default: + break; } } -- cgit v1.2.3