X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altosui%2FAltosConfig.java;h=bb2665c2876eb7c1af9332614557fa47920f965e;hb=fa96ee3db9b57cc2a88e9edd74bb9efcc228ccf3;hp=9a44c1c5a273cd42dbf8c1e181371d3cf20cf4f6;hpb=ef7f60df841f1eb22b9cec0d7f68cf2c003d6b30;p=fw%2Faltos diff --git a/altosui/AltosConfig.java b/altosui/AltosConfig.java index 9a44c1c5..bb2665c2 100644 --- a/altosui/AltosConfig.java +++ b/altosui/AltosConfig.java @@ -76,13 +76,17 @@ public class AltosConfig implements ActionListener { 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; AltosConfigUI config_ui; boolean serial_started; + boolean made_visible; boolean get_int(String line, String label, int_ref x) { if (line.startsWith(label)) { @@ -146,13 +150,28 @@ public class AltosConfig implements ActionListener { config_ui.set_apogee_delay(apogee_delay.get()); config_ui.set_radio_calibration(radio_calibration.get()); config_ui.set_radio_frequency(frequency()); + boolean max_enabled = true; + switch (log_format.get()) { + case Altos.AO_LOG_FORMAT_TINY: + max_enabled = false; + break; + default: + if (stored_flight.get() >= 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_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_clean(); - config_ui.make_visible(); + if (!made_visible) { + made_visible = true; + config_ui.make_visible(); + } } void process_line(String line) { @@ -160,7 +179,7 @@ public class AltosConfig implements ActionListener { abort(); return; } - if (line.equals("done")) { + if (line.equals("all finished")) { if (serial_line != null) update_ui(); return; @@ -175,8 +194,13 @@ public class AltosConfig implements ActionListener { 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); @@ -203,10 +227,33 @@ public class AltosConfig implements ActionListener { 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); + 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"); + } + void get_data() { try { config.start_serial(); - config.serial_line.printf("c s\nf\nv\n"); + reset_data(); + + config.serial_line.printf("c s\nf\nl\nv\n"); for (;;) { try { String line = config.serial_line.get_reply(5000); @@ -227,12 +274,13 @@ public class AltosConfig implements ActionListener { } catch (InterruptedException ie) { } } - callback("done"); + callback("all finished"); } void save_data() { try { double frequency = frequency(); + boolean has_frequency = radio_frequency.get() > 0; boolean has_setting = radio_setting.get() > 0; start_serial(); serial_line.printf("c m %d\n", main_deploy.get()); @@ -240,6 +288,7 @@ public class AltosConfig implements ActionListener { if (!remote) serial_line.printf("c f %d\n", radio_calibration.get()); serial_line.set_radio_frequency(frequency, + has_frequency, has_setting, radio_calibration.get()); if (remote) { @@ -251,6 +300,8 @@ public class AltosConfig implements ActionListener { 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) @@ -334,15 +385,20 @@ public class AltosConfig implements ActionListener { } double frequency() { - return AltosConvert.radio_to_frequency(radio_setting.get(), + return AltosConvert.radio_to_frequency(radio_frequency.get(), + radio_setting.get(), radio_calibration.get(), radio_channel.get()); } void set_frequency(double freq) { + int frequency = radio_frequency.get(); int setting = radio_setting.get(); - if (setting > 0) { + if (frequency > 0) { + radio_frequency.set((int) Math.floor (freq * 1000 + 0.5)); + radio_channel.set(0); + } else if (setting > 0) { radio_setting.set(AltosConvert.radio_frequency_to_setting(freq, radio_calibration.get())); radio_channel.set(0); @@ -369,6 +425,8 @@ public class AltosConfig implements ActionListener { radio_calibration.set(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) @@ -407,12 +465,15 @@ public class AltosConfig implements ActionListener { apogee_delay = 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"); @@ -432,8 +493,7 @@ public class AltosConfig implements ActionListener { } } catch (FileNotFoundException ee) { JOptionPane.showMessageDialog(owner, - String.format("Cannot open device \"%s\"", - device.toShortString()), + ee.getMessage(), "Cannot open target device", JOptionPane.ERROR_MESSAGE); } catch (AltosSerialInUseException si) {