From: Keith Packard Date: Fri, 7 Dec 2012 18:14:11 +0000 (-0800) Subject: Merge branch 'master' into aprs X-Git-Tag: 1.1.9.3~10^2~19 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=748e42ebf1dfb1efd5dec6ddd93f5c7aeedeb01d;hp=75912f8af04cecc0bbffecb2072d465c3744d4e8 Merge branch 'master' into aprs --- diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index 45a88783..ddc49e88 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -26,31 +26,53 @@ 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 +107,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 +155,152 @@ 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(); - 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; - stored_flight = 0; - serial = -1; + 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; - int npyro = 0; - int pyro = 0; + storage_size = -1; + storage_erase_unit = -1; + stored_flight = -1; + } + + 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 */ + + /* 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() { + 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 { + 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 diff --git a/altoslib/AltosMs5607.java b/altoslib/AltosMs5607.java index 148a9f92..318fea4d 100644 --- a/altoslib/AltosMs5607.java +++ b/altoslib/AltosMs5607.java @@ -82,6 +82,43 @@ public class AltosMs5607 { return pa; } + public boolean parse_line(String line) { + String[] items = line.split("\\s+"); + if (line.startsWith("Pressure:")) { + if (items.length >= 2) + raw_pres = Integer.parseInt(items[1]); + } else if (line.startsWith("Temperature:")) { + if (items.length >= 2) + raw_temp = Integer.parseInt(items[1]); + } else if (line.startsWith("ms5607 reserved:")) { + if (items.length >= 3) + reserved = Integer.parseInt(items[2]); + } else if (line.startsWith("ms5607 sens:")) { + if (items.length >= 3) + sens = Integer.parseInt(items[2]); + } else if (line.startsWith("ms5607 off:")) { + if (items.length >= 3) + off = Integer.parseInt(items[2]); + } else if (line.startsWith("ms5607 tcs:")) { + if (items.length >= 3) + tcs = Integer.parseInt(items[2]); + } else if (line.startsWith("ms5607 tco:")) { + if (items.length >= 3) + tco = Integer.parseInt(items[2]); + } else if (line.startsWith("ms5607 tref:")) { + if (items.length >= 3) + tref = Integer.parseInt(items[2]); + } else if (line.startsWith("ms5607 tempsens:")) { + if (items.length >= 3) + tempsens = Integer.parseInt(items[2]); + } else if (line.startsWith("ms5607 crc:")) { + if (items.length >= 3) + crc = Integer.parseInt(items[2]); + } else if (line.startsWith("Altitude")) + return false; + return true; + } + public AltosMs5607() { raw_pres = AltosRecord.MISSING; raw_temp = AltosRecord.MISSING; diff --git a/altoslib/AltosMs5607Query.java b/altoslib/AltosMs5607Query.java index 3c746795..1aaec334 100644 --- a/altoslib/AltosMs5607Query.java +++ b/altoslib/AltosMs5607Query.java @@ -27,38 +27,7 @@ class AltosMs5607Query extends AltosMs5607 { if (line == null) { throw new TimeoutException(); } - String[] items = line.split("\\s+"); - if (line.startsWith("Pressure:")) { - if (items.length >= 2) - raw_pres = Integer.parseInt(items[1]); - } else if (line.startsWith("Temperature:")) { - if (items.length >= 2) - raw_temp = Integer.parseInt(items[1]); - } else if (line.startsWith("ms5607 reserved:")) { - if (items.length >= 3) - reserved = Integer.parseInt(items[2]); - } else if (line.startsWith("ms5607 sens:")) { - if (items.length >= 3) - sens = Integer.parseInt(items[2]); - } else if (line.startsWith("ms5607 off:")) { - if (items.length >= 3) - off = Integer.parseInt(items[2]); - } else if (line.startsWith("ms5607 tcs:")) { - if (items.length >= 3) - tcs = Integer.parseInt(items[2]); - } else if (line.startsWith("ms5607 tco:")) { - if (items.length >= 3) - tco = Integer.parseInt(items[2]); - } else if (line.startsWith("ms5607 tref:")) { - if (items.length >= 3) - tref = Integer.parseInt(items[2]); - } else if (line.startsWith("ms5607 tempsens:")) { - if (items.length >= 3) - tempsens = Integer.parseInt(items[2]); - } else if (line.startsWith("ms5607 crc:")) { - if (items.length >= 3) - crc = Integer.parseInt(items[2]); - } else if (line.startsWith("Altitude")) + if (!parse_line(line)) break; } convert(); 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 { diff --git a/src/cc1111/ao_usb.c b/src/cc1111/ao_usb.c index 81e9074e..f66e807c 100644 --- a/src/cc1111/ao_usb.c +++ b/src/cc1111/ao_usb.c @@ -411,7 +411,7 @@ ao_usb_getchar(void) __critical { int c; - while ((c = ao_usb_pollchar()) == -1) + while ((c = ao_usb_pollchar()) == AO_READ_AGAIN) ao_sleep(&ao_stdin_ready); return c; } diff --git a/src/core/ao_cmd.c b/src/core/ao_cmd.c index a3330974..3d086a57 100644 --- a/src/core/ao_cmd.c +++ b/src/core/ao_cmd.c @@ -265,12 +265,25 @@ ao_reboot(void) static void version(void) { - printf("manufacturer %s\n", ao_manufacturer); - printf("product %s\n", ao_product); - printf("serial-number %u\n", ao_serial_number); + printf("manufacturer %s\n" + "product %s\n" + "serial-number %u\n" +#if HAS_FLIGHT + "current-flight %u\n" +#endif +#if HAS_LOG + "log-format %u\n" +#endif + , ao_manufacturer + , ao_product + , ao_serial_number +#if HAS_FLIGHT + , ao_flight_number +#endif #if HAS_LOG - printf("log-format %u\n", ao_log_format); + , ao_log_format #endif + ); #if HAS_MS5607 ao_ms5607_info(); #endif diff --git a/src/core/ao_config.c b/src/core/ao_config.c index df40ff90..63158158 100644 --- a/src/core/ao_config.c +++ b/src/core/ao_config.c @@ -529,15 +529,15 @@ __code struct ao_config_var ao_config_vars[] = { ao_config_callsign_set, ao_config_callsign_show }, { "e <0 disable, 1 enable>\0Enable telemetry and RDF", ao_config_radio_enable_set, ao_config_radio_enable_show }, + { "f \0Radio calib (cal = rf/(xtal/2^16))", + ao_config_radio_cal_set, ao_config_radio_cal_show }, #endif /* HAS_RADIO */ #if HAS_ACCEL { "a <+g> <-g>\0Accel calib (0 for auto)", ao_config_accel_calibrate_set,ao_config_accel_calibrate_show }, + { "o <0 antenna up, 1 antenna down>\0Set pad orientation", + ao_config_pad_orientation_set,ao_config_pad_orientation_show }, #endif /* HAS_ACCEL */ -#if HAS_RADIO - { "f \0Radio calib (cal = rf/(xtal/2^16))", - ao_config_radio_cal_set, ao_config_radio_cal_show }, -#endif /* HAS_RADIO */ #if HAS_LOG { "l \0Flight log size (kB)", ao_config_log_set, ao_config_log_show }, @@ -546,10 +546,6 @@ __code struct ao_config_var ao_config_vars[] = { { "i <0 dual, 1 apogee, 2 main>\0Set igniter mode", ao_config_ignite_mode_set, ao_config_ignite_mode_show }, #endif -#if HAS_ACCEL - { "o <0 antenna up, 1 antenna down>\0Set pad orientation", - ao_config_pad_orientation_set,ao_config_pad_orientation_show }, -#endif #if HAS_AES { "k <32 hex digits>\0Set AES encryption key", ao_config_key_set, ao_config_key_show }, diff --git a/src/core/ao_stdio.c b/src/core/ao_stdio.c index 4a832487..1748dfe8 100644 --- a/src/core/ao_stdio.c +++ b/src/core/ao_stdio.c @@ -98,7 +98,7 @@ __xdata uint8_t ao_stdin_ready; char getchar(void) __reentrant { - char c; + int c; ao_arch_critical( int8_t stdio = ao_cur_stdio; diff --git a/src/drivers/ao_btm.c b/src/drivers/ao_btm.c index f3816047..c862200a 100644 --- a/src/drivers/ao_btm.c +++ b/src/drivers/ao_btm.c @@ -120,7 +120,7 @@ uint8_t ao_btm_get_line(void) { uint8_t ao_btm_reply_len = 0; - char c; + int c; for (;;) { diff --git a/src/drivers/ao_packet_master.c b/src/drivers/ao_packet_master.c index 481232df..023c788b 100644 --- a/src/drivers/ao_packet_master.c +++ b/src/drivers/ao_packet_master.c @@ -20,7 +20,7 @@ static char ao_packet_getchar(void) { - char c; + int c; while ((c = ao_packet_pollchar()) == AO_READ_AGAIN) { if (!ao_packet_enable) break; @@ -35,7 +35,7 @@ ao_packet_getchar(void) static void ao_packet_echo(void) __reentrant { - char c; + int c; while (ao_packet_enable) { c = ao_packet_getchar(); if (c != AO_READ_AGAIN)