X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=ao-tools%2Faltosui%2FAltosSerial.java;fp=ao-tools%2Faltosui%2FAltosSerial.java;h=99ba3324e623fbd3d3fe3c82c0323b6b3587c9f3;hp=5b47960f79a28f8d7e4bd92977147b6eaad30587;hb=ae02b1590439d5c8dfb472cf1f83a14fdcfbaf11;hpb=edcfb1bdf64772d3b83405ccf99385b8fea5d8e4 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 q) { + set_monitor(true); monitors.add(q); } public void remove_monitor(LinkedBlockingQueue 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> (); reply_queue = new LinkedBlockingQueue (); }