summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--altoslib/AltosIdleMonitor.java19
-rw-r--r--altoslib/AltosLink.java3
-rw-r--r--altosui/AltosIdleMonitorUI.java14
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) {