X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altosui%2FAltosSerial.java;h=b089c9c40c580beb7764135fb0c3ead7be9a374a;hb=578c4b17b8f62f2727654ebda78ee139f9fe13fa;hp=6c687f5f17c0ab21c93f715b5a3e7e368dcd0ba1;hpb=0e3e4f9c1e6a6bf972514f12c9d622258aa2aec2;p=fw%2Faltos diff --git a/altosui/AltosSerial.java b/altosui/AltosSerial.java index 6c687f5f..b089c9c4 100644 --- a/altosui/AltosSerial.java +++ b/altosui/AltosSerial.java @@ -213,31 +213,38 @@ public class AltosSerial implements Runnable { public String get_reply(int timeout) throws InterruptedException { boolean can_cancel = true; - ++in_reply; + String reply = null; - System.out.printf("get_reply %d\n", timeout); - if (SwingUtilities.isEventDispatchThread()) { - can_cancel = false; - System.out.printf("Uh-oh, reading serial device from swing thread\n"); - } - flush_output(); - if (remote && can_cancel) { - timeout = 500; - } - abort = false; - timeout_started = false; - for (;;) { - AltosLine line = reply_queue.poll(timeout, TimeUnit.MILLISECONDS); - if (line != null) { - stop_timeout_dialog(); - --in_reply; - return line.line; + try { + ++in_reply; + + if (SwingUtilities.isEventDispatchThread()) { + can_cancel = false; + if (remote) + System.out.printf("Uh-oh, reading remote serial device from swing thread\n"); + } + flush_output(); + if (remote && can_cancel) { + timeout = 500; } - if (!remote || !can_cancel || check_timeout()) { - --in_reply; - return null; + abort = false; + timeout_started = false; + for (;;) { + AltosLine line = reply_queue.poll(timeout, TimeUnit.MILLISECONDS); + if (line != null) { + stop_timeout_dialog(); + reply = line.line; + break; + } + if (!remote || !can_cancel || check_timeout()) { + reply = null; + break; + } } + } finally { + --in_reply; } + return reply; } public String get_reply() throws InterruptedException { @@ -246,7 +253,6 @@ public class AltosSerial implements Runnable { public String get_reply_no_dialog(int timeout) throws InterruptedException, TimeoutException { flush_output(); - System.out.printf("get_reply_no_dialog\n"); AltosLine line = reply_queue.poll(timeout, TimeUnit.MILLISECONDS); if (line != null) return line.line; @@ -350,6 +356,7 @@ public class AltosSerial implements Runnable { setting, telemetry_len()); else printf("c R %d\nc r 0\n", setting); + flush_output(); } }