diff options
-rw-r--r-- | altoslib/AltosIdleMonitor.java | 19 | ||||
-rw-r--r-- | altoslib/AltosLink.java | 3 | ||||
-rw-r--r-- | altosui/AltosIdleMonitorUI.java | 14 |
3 files changed, 29 insertions, 7 deletions
diff --git a/altoslib/AltosIdleMonitor.java b/altoslib/AltosIdleMonitor.java index 6b20b3f1..f2f75bbb 100644 --- a/altoslib/AltosIdleMonitor.java +++ b/altoslib/AltosIdleMonitor.java @@ -27,6 +27,7 @@ public class AltosIdleMonitor extends Thread { AltosState state; boolean remote; double frequency; + String callsign; AltosState previous_state; AltosConfigData config_data; AltosGPS gps; @@ -87,6 +88,7 @@ public class AltosIdleMonitor extends Thread { try { if (remote) { link.set_radio_frequency(frequency); + link.set_callsign(callsign); link.start_remote(); } else link.flush_input(); @@ -126,12 +128,29 @@ public class AltosIdleMonitor extends Thread { public void set_frequency(double in_frequency) { frequency = in_frequency; + link.abort_reply(); + } + + public void set_callsign(String in_callsign) { + callsign = in_callsign; + link.abort_reply(); } public void post_state() { listener.update(state); } + public void abort() { + if (isAlive()) { + interrupt(); + link.abort_reply(); + try { + join(); + } catch (InterruptedException ie) { + } + } + } + public void run() { try { for (;;) { diff --git a/altoslib/AltosLink.java b/altoslib/AltosLink.java index 2b5909aa..9eb25ce0 100644 --- a/altoslib/AltosLink.java +++ b/altoslib/AltosLink.java @@ -249,6 +249,7 @@ public abstract class AltosLink implements Runnable { public boolean monitor_mode = false; public int telemetry = AltosLib.ao_telemetry_standard; public double frequency; + public String callsign; AltosConfigData config_data; private int telemetry_len() { @@ -330,6 +331,7 @@ public abstract class AltosLink implements Runnable { } public void set_callsign(String callsign) { + this.callsign = callsign; printf ("c c %s\n", callsign); flush_output(); } @@ -363,5 +365,6 @@ public abstract class AltosLink implements Runnable { } public AltosLink() { + callsign = ""; } } diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java index 462bff18..8c883eeb 100644 --- a/altosui/AltosIdleMonitorUI.java +++ b/altosui/AltosIdleMonitorUI.java @@ -37,11 +37,8 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl boolean remote; void stop_display() { - if (thread != null && thread.isAlive()) { - thread.interrupt(); - try { - thread.join(); - } catch (InterruptedException ie) {} + if (thread != null) { + thread.abort(); } thread = null; } @@ -92,8 +89,11 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl /* DocumentListener interface methods */ public void changedUpdate(DocumentEvent e) { - if (callsign_value != null) - AltosUIPreferences.set_callsign(callsign_value.getText()); + if (callsign_value != null) { + String callsign = callsign_value.getText(); + thread.set_callsign(callsign); + AltosUIPreferences.set_callsign(callsign); + } } public void insertUpdate(DocumentEvent e) { |