Merge branch 'buttonbox' of git://git.gag.com/fw/altos into buttonbox
[fw/altos] / ao-tools / altosui / AltosConfig.java
index 3d970748102abcd2b700cf9a80dc22b6f23142e5..a0fdb6236cfc3491cfb45abf7eb2d8dba4ab2360 100644 (file)
@@ -28,20 +28,6 @@ import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.LinkedBlockingQueue;
 
-import altosui.Altos;
-import altosui.AltosSerial;
-import altosui.AltosSerialMonitor;
-import altosui.AltosRecord;
-import altosui.AltosTelemetry;
-import altosui.AltosState;
-import altosui.AltosDeviceDialog;
-import altosui.AltosPreferences;
-import altosui.AltosLog;
-import altosui.AltosVoice;
-import altosui.AltosFlightStatusTableModel;
-import altosui.AltosFlightInfoTableModel;
-import altosui.AltosConfigUI;
-
 import libaltosJNI.*;
 
 public class AltosConfig implements Runnable, ActionListener {
@@ -83,6 +69,7 @@ public class AltosConfig implements Runnable, ActionListener {
        int_ref         main_deploy;
        int_ref         apogee_delay;
        int_ref         radio_channel;
+       int_ref         radio_calibration;
        string_ref      version;
        string_ref      product;
        string_ref      callsign;
@@ -122,7 +109,7 @@ public class AltosConfig implements Runnable, ActionListener {
 
        void start_serial() throws InterruptedException {
                if (remote) {
-                       serial_line.set_channel(AltosPreferences.channel());
+                       serial_line.set_channel(AltosPreferences.channel(device.getSerial()));
                        serial_line.set_callsign(AltosPreferences.callsign());
                        serial_line.printf("p\n");
                        serial_line.flush_input();
@@ -146,6 +133,7 @@ public class AltosConfig implements Runnable, ActionListener {
                                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_string(line, "Callsign:", callsign);
                                get_string(line,"software-version", version);
                                get_string(line,"product", product);
@@ -175,6 +163,7 @@ public class AltosConfig implements Runnable, ActionListener {
                        config_ui.set_main_deploy(main_deploy.get());
                        config_ui.set_apogee_delay(apogee_delay.get());
                        config_ui.set_radio_channel(radio_channel.get());
+                       config_ui.set_radio_calibration(radio_calibration.get());
                        config_ui.set_callsign(callsign.get());
                        config_ui.set_clean();
                } catch (InterruptedException ie) {
@@ -188,12 +177,14 @@ public class AltosConfig implements Runnable, ActionListener {
                main_deploy.set(config_ui.main_deploy());
                apogee_delay.set(config_ui.apogee_delay());
                radio_channel.set(config_ui.radio_channel());
+               radio_calibration.set(config_ui.radio_calibration());
                callsign.set(config_ui.callsign());
                try {
                        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 r %d\n", radio_channel.get());
+                       serial_line.printf("c f %d\n", radio_calibration.get());
                        serial_line.printf("c c %s\n", callsign.get());
                        serial_line.printf("c w\n");
                } catch (InterruptedException ie) {
@@ -207,12 +198,26 @@ public class AltosConfig implements Runnable, ActionListener {
 
        public void actionPerformed(ActionEvent e) {
                String  cmd = e.getActionCommand();
-               if (cmd.equals("save")) {
+               if (cmd.equals("Save")) {
                        save_data();
                        set_ui();
-               } else if (cmd.equals("reset")) {
+               } else if (cmd.equals("Reset")) {
                        set_ui();
-               } else if (cmd.equals("close")) {
+               } else if (cmd.equals("Reboot")) {
+                       if (serial_line != null) {
+                               try {
+                                       start_serial();
+                                       serial_line.printf("r eboot\n");
+                               } catch (InterruptedException ie) {
+                               } finally {
+                                       try {
+                                               stop_serial();
+                                       } catch (InterruptedException ie) {
+                                       }
+                               }
+                               serial_line.close();
+                       }
+               } else if (cmd.equals("Close")) {
                        if (serial_line != null)
                                serial_line.close();
                }
@@ -234,16 +239,16 @@ public class AltosConfig implements Runnable, ActionListener {
                main_deploy = new int_ref(250);
                apogee_delay = new int_ref(0);
                radio_channel = new int_ref(0);
+               radio_calibration = new int_ref(1186611);
                callsign = new string_ref("N0CALL");
                version = new string_ref("unknown");
                product = new string_ref("unknown");
 
-               device = AltosDeviceDialog.show(owner, AltosDevice.Any);
-               serial_line = new AltosSerial();
+               device = AltosDeviceDialog.show(owner, AltosDevice.product_any);
                if (device != null) {
                        try {
-                               serial_line.open(device);
-                               if (!device.matchProduct(AltosDevice.TeleMetrum))
+                               serial_line = new AltosSerial(device);
+                               if (!device.matchProduct(AltosDevice.product_telemetrum))
                                        remote = true;
                                config_thread = new Thread(this);
                                config_thread.start();
@@ -253,6 +258,12 @@ public class AltosConfig implements Runnable, ActionListener {
                                                                            device.getPath()),
                                                              "Cannot open target device",
                                                              JOptionPane.ERROR_MESSAGE);
+                       } catch (AltosSerialInUseException si) {
+                               JOptionPane.showMessageDialog(owner,
+                                                             String.format("Device \"%s\" already in use",
+                                                                           device.getPath()),
+                                                             "Device in use",
+                                                             JOptionPane.ERROR_MESSAGE);
                        } catch (IOException ee) {
                                JOptionPane.showMessageDialog(owner,
                                                              device.getPath(),