X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosConfig.java;h=40f7ebecb4c4635809dfdec7ebc9d068edca3af5;hp=84c8a4a307d74528d42ff28af07dbd757be3bd51;hb=5a51efd7f9b49ffadc91ccaf7a0d69566301c009;hpb=67f28c58db0deca8f8050d33e97ad96017f4baaa diff --git a/altosui/AltosConfig.java b/altosui/AltosConfig.java index 84c8a4a3..40f7ebec 100644 --- a/altosui/AltosConfig.java +++ b/altosui/AltosConfig.java @@ -17,18 +17,13 @@ package altosui; -import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.filechooser.FileNameExtensionFilter; -import javax.swing.table.*; import java.io.*; -import java.util.*; -import java.text.*; -import java.util.prefs.*; import java.util.concurrent.*; - -import libaltosJNI.*; +import java.text.*; +import org.altusmetrum.altoslib_5.*; +import org.altusmetrum.altosuilib_3.*; public class AltosConfig implements ActionListener { @@ -64,57 +59,11 @@ 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 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 storage_size; - int_ref storage_erase_unit; - int_ref stored_flight; - string_ref version; - string_ref product; - string_ref callsign; + + AltosConfigData data; AltosConfigUI config_ui; boolean serial_started; - - 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; - } - } + boolean made_visible; void start_serial() throws InterruptedException, TimeoutException { serial_started = true; @@ -130,61 +79,17 @@ public class AltosConfig implements ActionListener { serial_line.stop_remote(); } - int log_limit() { - if (storage_size.get() > 0 && storage_erase_unit.get() > 0) { - int log_limit = storage_size.get() - storage_erase_unit.get(); - if (log_limit > 0) - return log_limit / 1024; - } - return 1024; - } - 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_radio_calibration(radio_calibration.get()); - config_ui.set_radio_frequency(frequency()); - config_ui.set_flight_log_max_enabled(stored_flight.get() < 0); - 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()); + data.set_values(config_ui); config_ui.set_clean(); - config_ui.make_visible(); - } - - void process_line(String line) { - if (line == null) { - abort(); - return; - } - if (line.equals("done")) { - if (serial_line != null) - update_ui(); - return; + if (!made_visible) { + made_visible = true; + config_ui.make_visible(); } - 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, "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); - 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); } + int pyro; + final static int serial_mode_read = 0; final static int serial_mode_save = 1; final static int serial_mode_reboot = 2; @@ -193,73 +98,49 @@ 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 get_data() { + data = null; try { - config.start_serial(); - stored_flight.set(-1); - 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(); } catch (InterruptedException ie) { } } - callback("done"); + callback("all finished"); } void save_data() { try { - double frequency = frequency(); - boolean has_setting = radio_setting.get() > 0; start_serial(); - serial_line.printf("c m %d\n", main_deploy.get()); - serial_line.printf("c d %d\n", apogee_delay.get()); - if (!remote) - serial_line.printf("c f %d\n", radio_calibration.get()); - serial_line.set_radio_frequency(frequency, - has_setting, - radio_calibration.get()); - if (remote) { - serial_line.stop_remote(); - serial_line.set_radio_frequency(frequency); - AltosPreferences.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 (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()); - 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 { @@ -280,9 +161,9 @@ public class AltosConfig implements ActionListener { } finally { try { stop_serial(); + serial_line.close(); } catch (InterruptedException ie) { } - serial_line.close(); } } @@ -320,8 +201,10 @@ public class AltosConfig implements ActionListener { } void abort() { - serial_line.close(); - serial_line = null; + if (serial_line != null) { + serial_line.close(); + serial_line = null; + } JOptionPane.showMessageDialog(owner, String.format("Connection to \"%s\" failed", device.toShortString()), @@ -338,47 +221,36 @@ public class AltosConfig implements ActionListener { } double frequency() { - return AltosConvert.radio_to_frequency(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 setting = radio_setting.get(); + void save_data() { - if (setting > 0) { - radio_setting.set(AltosConvert.radio_frequency_to_setting(freq, - radio_calibration.get())); - radio_channel.set(0); - } else { - radio_channel.set(AltosConvert.radio_frequency_to_channel(freq)); - } - } + try { + /* bounds check stuff */ + if (config_ui.flight_log_max() > data.log_space() / 1024) { + JOptionPane.showMessageDialog(owner, + String.format("Requested flight log, %dk, is larger than the available space, %dk.\n", + config_ui.flight_log_max(), + data.log_space() / 1024), + "Maximum Flight Log Too Large", + JOptionPane.ERROR_MESSAGE); + return; + } - void save_data() { + /* Pull data out of the UI and stuff back into our local data record */ - /* bounds check stuff */ - if (config_ui.flight_log_max() > log_limit()) { + data.get_values(config_ui); + run_serial_thread(serial_mode_save); + } catch (AltosConfigDataException ae) { JOptionPane.showMessageDialog(owner, - String.format("Requested flight log, %dk, is larger than the available space, %dk.\n", - config_ui.flight_log_max(), - log_limit()), - "Maximum Flight Log Too Large", + ae.getMessage(), + "Configuration Data Error", JOptionPane.ERROR_MESSAGE); - return; } - - main_deploy.set(config_ui.main_deploy()); - apogee_delay.set(config_ui.apogee_delay()); - radio_calibration.set(config_ui.radio_calibration()); - set_frequency(config_ui.radio_frequency()); - flight_log_max.set(config_ui.flight_log_max()); - 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()); - run_serial_thread(serial_mode_save); } public void actionPerformed(ActionEvent e) { @@ -405,29 +277,12 @@ 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); - radio_channel = new int_ref(0); - radio_setting = new int_ref(0); - radio_calibration = new int_ref(1186611); - 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"); - - device = AltosDeviceDialog.show(owner, Altos.product_any); + device = AltosDeviceUIDialog.show(owner, Altos.product_any); if (device != null) { try { serial_line = new AltosSerial(device); try { - if (!device.matchProduct(Altos.product_telemetrum)) + if (device.matchProduct(Altos.product_basestation)) remote = true; init_ui(); } catch (InterruptedException ie) { @@ -437,8 +292,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) { @@ -447,12 +301,7 @@ public class AltosConfig implements ActionListener { device.toShortString()), "Device in use", JOptionPane.ERROR_MESSAGE); - } catch (IOException ee) { - JOptionPane.showMessageDialog(owner, - device.toShortString(), - ee.getLocalizedMessage(), - JOptionPane.ERROR_MESSAGE); } } } -} \ No newline at end of file +}