summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ao-tools/altosui/AltosConfig.java6
-rw-r--r--ao-tools/altosui/AltosDebug.java8
-rw-r--r--ao-tools/altosui/AltosEepromDownload.java5
-rw-r--r--ao-tools/altosui/AltosSerial.java62
4 files changed, 50 insertions, 31 deletions
diff --git a/ao-tools/altosui/AltosConfig.java b/ao-tools/altosui/AltosConfig.java
index ac73e7c5..3d970748 100644
--- a/ao-tools/altosui/AltosConfig.java
+++ b/ao-tools/altosui/AltosConfig.java
@@ -122,17 +122,17 @@ public class AltosConfig implements Runnable, ActionListener {
void start_serial() throws InterruptedException {
if (remote) {
- serial_line.printf("m 0\n");
serial_line.set_channel(AltosPreferences.channel());
serial_line.set_callsign(AltosPreferences.callsign());
serial_line.printf("p\n");
+ serial_line.flush_input();
}
}
void stop_serial() throws InterruptedException {
if (remote) {
- serial_line.printf("~\n");
- serial_line.flush();
+ serial_line.printf("~");
+ serial_line.flush_output();
}
}
diff --git a/ao-tools/altosui/AltosDebug.java b/ao-tools/altosui/AltosDebug.java
index ca2e5a90..3f469d48 100644
--- a/ao-tools/altosui/AltosDebug.java
+++ b/ao-tools/altosui/AltosDebug.java
@@ -62,8 +62,8 @@ public class AltosDebug extends AltosSerial {
void ensure_debug_mode() {
if (!debug_mode) {
- printf("m 0\nD\n");
- flush_reply();
+ printf("D\n");
+ flush_input();
debug_mode = true;
}
}
@@ -103,7 +103,7 @@ public class AltosDebug extends AltosSerial {
throws IOException, InterruptedException {
byte[] data = new byte[length];
- flush_reply();
+ flush_input();
ensure_debug_mode();
printf("I %x %x\n", length, address);
int i = 0;
@@ -155,7 +155,7 @@ public class AltosDebug extends AltosSerial {
public byte[] read_bytes(int length)
throws IOException, InterruptedException {
- flush_reply();
+ flush_input();
ensure_debug_mode();
printf("G %x\n", length);
int i = 0;
diff --git a/ao-tools/altosui/AltosEepromDownload.java b/ao-tools/altosui/AltosEepromDownload.java
index 02a71118..5e43345b 100644
--- a/ao-tools/altosui/AltosEepromDownload.java
+++ b/ao-tools/altosui/AltosEepromDownload.java
@@ -223,10 +223,10 @@ public class AltosEepromDownload implements Runnable {
public void run () {
if (remote) {
- serial_line.printf("m 0\n");
serial_line.set_channel(AltosPreferences.channel());
serial_line.set_callsign(AltosPreferences.callsign());
- serial_line.printf("p\n");
+ serial_line.printf("p\nE 0\n");
+ serial_line.flush_input();
}
monitor = new AltosEepromMonitor(frame, Altos.ao_flight_boost, Altos.ao_flight_landed);
@@ -247,6 +247,7 @@ public class AltosEepromDownload implements Runnable {
if (remote)
serial_line.printf("~");
monitor.done();
+ serial_line.flush_output();
serial_line.close();
}
diff --git a/ao-tools/altosui/AltosSerial.java b/ao-tools/altosui/AltosSerial.java
index 5b47960f..99ba3324 100644
--- a/ao-tools/altosui/AltosSerial.java
+++ b/ao-tools/altosui/AltosSerial.java
@@ -47,6 +47,7 @@ public class AltosSerial implements Runnable {
String line;
byte[] line_bytes;
int line_count;
+ boolean monitor_mode;
public void run () {
int c;
@@ -99,35 +100,39 @@ public class AltosSerial implements Runnable {
}
}
- public void flush_reply() {
+ public void flush_output() {
libaltos.altos_flush(altos);
+ }
+
+ public void flush_input() {
+ flush_output();
try {
- Thread.sleep(100);
+ Thread.sleep(200);
} catch (InterruptedException ie) {
}
- reply_queue.clear();
+ synchronized(this) {
+ if (!"VERSION".startsWith(line) &&
+ !line.startsWith("VERSION"))
+ line = "";
+ reply_queue.clear();
+ }
}
public String get_reply() throws InterruptedException {
- libaltos.altos_flush(altos);
+ flush_output();
String line = reply_queue.take();
return line;
}
public void add_monitor(LinkedBlockingQueue<String> q) {
+ set_monitor(true);
monitors.add(q);
}
public void remove_monitor(LinkedBlockingQueue<String> q) {
monitors.remove(q);
- }
-
- public void flush () {
- synchronized(this) {
- if (!"VERSION".startsWith(line) && !line.startsWith("VERSION"))
- line = "";
- reply_queue.clear();
- }
+ if (monitors.isEmpty())
+ set_monitor(false);
}
public boolean opened() {
@@ -135,8 +140,9 @@ public class AltosSerial implements Runnable {
}
public void close() {
- if (altos != null)
+ if (altos != null) {
libaltos.altos_close(altos);
+ }
if (input_thread != null) {
try {
input_thread.interrupt();
@@ -157,7 +163,7 @@ public class AltosSerial implements Runnable {
}
public void print(String data) {
-//h System.out.printf("\"%s\" ", data);
+// System.out.printf("\"%s\" ", data);
for (int i = 0; i < data.length(); i++)
putc(data.charAt(i));
}
@@ -173,17 +179,28 @@ public class AltosSerial implements Runnable {
throw new FileNotFoundException(device.getPath());
input_thread = new Thread(this);
input_thread.start();
- print("\nE 0\n");
- try {
- Thread.sleep(200);
- } catch (InterruptedException e) {
- }
- flush();
+ print("~\nE 0\n");
+ set_monitor(monitor_mode);
+ flush_input();
}
public void set_channel(int channel) {
- if (altos != null)
- printf("m 0\nc r %d\nm 1\n", channel);
+ if (altos != null) {
+ if (monitor_mode)
+ printf("m 0\nc r %d\nm 1\n", channel);
+ else
+ printf("c r %d\n", channel);
+ }
+ }
+
+ void set_monitor(boolean monitor) {
+ monitor_mode = monitor;
+ if (altos != null) {
+ if (monitor)
+ printf("m 1\n");
+ else
+ printf("m 0\n");
+ }
}
public void set_callsign(String callsign) {
@@ -195,6 +212,7 @@ public class AltosSerial implements Runnable {
altos = null;
input_thread = null;
line = "";
+ monitor_mode = false;
monitors = new LinkedList<LinkedBlockingQueue<String>> ();
reply_queue = new LinkedBlockingQueue<String> ();
}