From 97f4874d19ec05c81a04a3ecd06abffcf7fbfafc Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 22 Apr 2010 16:25:35 -0700 Subject: [PATCH] More ALtosUI changes --- ao-tools/altosui/AltosSerial.java | 39 +++++++++++++++++++------------ ao-tools/altosui/AltosUI.java | 18 +++++--------- ao-tools/altosui/Makefile | 3 +++ 3 files changed, 33 insertions(+), 27 deletions(-) diff --git a/ao-tools/altosui/AltosSerial.java b/ao-tools/altosui/AltosSerial.java index e4cedde2..03ab28c5 100644 --- a/ao-tools/altosui/AltosSerial.java +++ b/ao-tools/altosui/AltosSerial.java @@ -36,7 +36,7 @@ import altosui.AltosSerialMonitor; */ class AltosSerialReader implements Runnable { InputStream serial_in; - LinkedBlockingQueue monitor_queue; + LinkedList> monitors; LinkedBlockingQueue reply_queue; Thread input_thread; String line; @@ -56,9 +56,12 @@ class AltosSerialReader implements Runnable { synchronized(this) { if (c == '\n') { if (line != "") { - if (line.startsWith("VERSION")) - monitor_queue.put(line); - else + if (line.startsWith("VERSION")) { + for (int e = 0; e < monitors.size(); e++) { + LinkedBlockingQueue q = monitors.get(e); + q.put(line); + } + } else reply_queue.put(line); line = ""; } @@ -72,16 +75,18 @@ class AltosSerialReader implements Runnable { } } - public String get_telem() throws InterruptedException { - String s = monitor_queue.take(); - System.out.println(s); - return s; - } - public String get_reply() throws InterruptedException { return reply_queue.take(); } + public void add_monitor(LinkedBlockingQueue q) { + monitors.add(q); + } + + public void remove_monitor(LinkedBlockingQueue q) { + monitors.remove(q); + } + public void flush () { synchronized(this) { if (!"VERSION".startsWith(line) && !line.startsWith("VERSION")) @@ -132,7 +137,7 @@ class AltosSerialReader implements Runnable { serial_in = null; input_thread = null; line = ""; - monitor_queue = new LinkedBlockingQueue (); + monitors = new LinkedList> (); reply_queue = new LinkedBlockingQueue (); } @@ -142,10 +147,6 @@ public class AltosSerial { OutputStream serial_out = null; AltosSerialReader reader = null; - public String get_telem() throws InterruptedException { - return reader.get_telem(); - } - CommPort comm_port = null; public void close() { @@ -178,6 +179,14 @@ public class AltosSerial { reader = new AltosSerialReader(); } + public void add_monitor(LinkedBlockingQueue q) { + reader.add_monitor(q); + } + + public void remove_monitor(LinkedBlockingQueue q) { + reader.remove_monitor(q); + } + public AltosSerial() { init(); } diff --git a/ao-tools/altosui/AltosUI.java b/ao-tools/altosui/AltosUI.java index 7f008f3a..2952fcc0 100644 --- a/ao-tools/altosui/AltosUI.java +++ b/ao-tools/altosui/AltosUI.java @@ -26,6 +26,7 @@ import java.io.*; import java.util.*; import java.text.*; import java.util.prefs.*; +import java.util.concurrent.LinkedBlockingQueue; import gnu.io.*; import altosui.AltosSerial; @@ -391,14 +392,6 @@ public class AltosUI extends JFrame { return true; } - private void PickSerialDevice() { - java.util.Enumeration port_list = CommPortIdentifier.getPortIdentifiers(); - while (port_list.hasMoreElements()) { - CommPortIdentifier identifier = port_list.nextElement(); - System.out.println("Serial port " + identifier.getName()); - } - } - class DisplayThread extends Thread { String read() throws InterruptedException { return null; } @@ -433,21 +426,22 @@ public class AltosUI extends JFrame { class DeviceThread extends DisplayThread { AltosSerial serial; + LinkedBlockingQueue telem; String read() throws InterruptedException { - System.out.println("Waiting for telemetry"); - String s = serial.get_telem(); - System.out.println("Got telemetry " + s); - return s; + return telem.take(); } void close() { serial.close(); + serial.remove_monitor(telem); System.out.println("DisplayThread done"); } public DeviceThread(AltosSerial s) { serial = s; + telem = new LinkedBlockingQueue(); + serial.add_monitor(telem); } } diff --git a/ao-tools/altosui/Makefile b/ao-tools/altosui/Makefile index fbe0a5eb..b9f025da 100644 --- a/ao-tools/altosui/Makefile +++ b/ao-tools/altosui/Makefile @@ -3,9 +3,12 @@ CLASSPATH=..:/usr/share/java/* CLASSFILES=\ AltosConvert.class \ + AltosFile.class \ AltosGPS.class \ AltosGreatCircle.class \ + AltosLog.class \ AltosParse.class \ + AltosPreferences.class \ AltosSerialMonitor.class \ AltosSerial.class \ AltosState.class \ -- 2.30.2