projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altosui: Simple timeouts don't work with query data
[fw/altos]
/
altosui
/
AltosSerial.java
diff --git
a/altosui/AltosSerial.java
b/altosui/AltosSerial.java
index 88b38bb176f01ad00db321de36fb698d2c14019c..cb82a574ed4381d5c87862f2d9de23757dad5afb 100644
(file)
--- a/
altosui/AltosSerial.java
+++ b/
altosui/AltosSerial.java
@@
-25,6
+25,7
@@
import java.lang.*;
import java.io.*;
import java.util.concurrent.*;
import java.util.*;
import java.io.*;
import java.util.concurrent.*;
import java.util.*;
+import java.text.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
@@
-95,7
+96,7
@@
public class AltosSerial implements Runnable {
}
if (debug)
System.out.printf("\t\t\t\t\t%s\n", line);
}
if (debug)
System.out.printf("\t\t\t\t\t%s\n", line);
- if (line.startsWith("VERSION") || line.startsWith("CRC")) {
+ if (line.startsWith("
TELEM") || line.startsWith("
VERSION") || line.startsWith("CRC")) {
for (int e = 0; e < monitors.size(); e++) {
LinkedBlockingQueue<AltosLine> q = monitors.get(e);
q.put(new AltosLine (line));
for (int e = 0; e < monitors.size(); e++) {
LinkedBlockingQueue<AltosLine> q = monitors.get(e);
q.put(new AltosLine (line));
@@
-137,18
+138,19
@@
public class AltosSerial implements Runnable {
boolean timeout_started = false;
private void stop_timeout_dialog() {
boolean timeout_started = false;
private void stop_timeout_dialog() {
- System.out.printf("stop_timeout_dialog\n");
- Runnable r = new Runnable() {
-
public void run
() {
- if (timeout_dialog != null)
+ if (timeout_started) {
+ timeout_started = false;
+
Runnable r = new Runnable
() {
+ public void run() {
timeout_dialog.setVisible(false);
timeout_dialog.setVisible(false);
- }
- };
- SwingUtilities.invokeLater(r);
+ }
+ };
+ SwingUtilities.invokeLater(r);
+ }
}
private void start_timeout_dialog_internal() {
}
private void start_timeout_dialog_internal() {
- System.out.printf("Creating timeout dialog\n");
+
Object[] options = { "Cancel" };
JOptionPane pane = new JOptionPane();
Object[] options = { "Cancel" };
JOptionPane pane = new JOptionPane();
@@
-165,15
+167,14
@@
public class AltosSerial implements Runnable {
return;
if (options[0].equals(o))
abort = true;
return;
if (options[0].equals(o))
abort = true;
+ timeout_dialog.dispose();
+ timeout_dialog = null;
}
private boolean check_timeout() {
if (!timeout_started && frame != null) {
}
private boolean check_timeout() {
if (!timeout_started && frame != null) {
- timeout_started = true;
- System.out.printf("Starting timeout dialog\n");
- if (SwingUtilities.isEventDispatchThread()) {
- start_timeout_dialog_internal();
- } else {
+ if (!SwingUtilities.isEventDispatchThread()) {
+ timeout_started = true;
Runnable r = new Runnable() {
public void run() {
start_timeout_dialog_internal();
Runnable r = new Runnable() {
public void run() {
start_timeout_dialog_internal();
@@
-191,7
+192,7
@@
public class AltosSerial implements Runnable {
int timeout = 100;
if (remote)
int timeout = 100;
if (remote)
- timeout =
3
00;
+ timeout =
5
00;
do {
try {
Thread.sleep(timeout);
do {
try {
Thread.sleep(timeout);
@@
-208,30
+209,53
@@
public class AltosSerial implements Runnable {
}
public String get_reply() throws InterruptedException {
}
public String get_reply() throws InterruptedException {
+ if (SwingUtilities.isEventDispatchThread())
+ System.out.printf("Uh-oh, reading serial device from swing thread\n");
flush_output();
AltosLine line = reply_queue.take();
return line.line;
}
flush_output();
AltosLine line = reply_queue.take();
return line.line;
}
+ int in_reply;
+
public String get_reply(int timeout) throws InterruptedException {
public String get_reply(int timeout) throws InterruptedException {
+ boolean can_cancel = true;
+ ++in_reply;
+
+ if (SwingUtilities.isEventDispatchThread()) {
+ can_cancel = false;
+ System.out.printf("Uh-oh, reading serial device from swing thread\n");
+ }
flush_output();
flush_output();
- if (remote) {
- timeout = 300;
- System.out.printf("Doing remote timout\n");
+ if (remote && can_cancel) {
+ timeout = 500;
}
abort = false;
timeout_started = false;
for (;;) {
}
abort = false;
timeout_started = false;
for (;;) {
+ System.out.printf("timeout %d\n", timeout);
AltosLine line = reply_queue.poll(timeout, TimeUnit.MILLISECONDS);
if (line != null) {
stop_timeout_dialog();
AltosLine line = reply_queue.poll(timeout, TimeUnit.MILLISECONDS);
if (line != null) {
stop_timeout_dialog();
+ --in_reply;
return line.line;
}
return line.line;
}
- if (!remote || check_timeout())
+ System.out.printf("no line remote %b can_cancel %b\n", remote, can_cancel);
+ if (!remote || !can_cancel || check_timeout()) {
+ --in_reply;
return null;
return null;
+ }
}
}
}
}
+ public String get_reply_no_dialog(int timeout) throws InterruptedException, TimeoutException {
+ flush_output();
+ AltosLine line = reply_queue.poll(timeout, TimeUnit.MILLISECONDS);
+ if (line != null)
+ return line.line;
+ return null;
+ }
+
public void add_monitor(LinkedBlockingQueue<AltosLine> q) {
set_monitor(true);
monitors.add(q);
public void add_monitor(LinkedBlockingQueue<AltosLine> q) {
set_monitor(true);
monitors.add(q);
@@
-244,6
+268,9
@@
public class AltosSerial implements Runnable {
}
public void close() {
}
public void close() {
+ if (in_reply != 0)
+ System.out.printf("Uh-oh. Closing active serial device\n");
+
if (altos != null) {
libaltos.altos_close(altos);
}
if (altos != null) {
libaltos.altos_close(altos);
}
@@
-288,7
+315,7
@@
public class AltosSerial implements Runnable {
throw new AltosSerialInUseException(device);
devices_opened.add(device.getPath());
}
throw new AltosSerialInUseException(device);
devices_opened.add(device.getPath());
}
- altos =
libaltos.altos_open(device
);
+ altos =
device.open(
);
if (altos == null) {
close();
throw new FileNotFoundException(device.toShortString());
if (altos == null) {
close();
throw new FileNotFoundException(device.toShortString());
@@
-309,11
+336,16
@@
public class AltosSerial implements Runnable {
set_callsign(AltosPreferences.callsign());
}
set_callsign(AltosPreferences.callsign());
}
+ private int telemetry_len() {
+ return Altos.telemetry_len(telemetry);
+ }
+
public void set_channel(int in_channel) {
channel = in_channel;
if (altos != null) {
if (monitor_mode)
public void set_channel(int in_channel) {
channel = in_channel;
if (altos != null) {
if (monitor_mode)
- printf("m 0\nc r %d\nm %d\n", channel, telemetry);
+ printf("m 0\nc r %d\nm %x\n",
+ channel, telemetry_len());
else
printf("c r %d\n", channel);
flush_output();
else
printf("c r %d\n", channel);
flush_output();
@@
-324,7
+356,7
@@
public class AltosSerial implements Runnable {
telemetry = in_telemetry;
if (altos != null) {
if (monitor_mode)
telemetry = in_telemetry;
if (altos != null) {
if (monitor_mode)
- printf("m 0\nm %
d\n", telemetry
);
+ printf("m 0\nm %
x\n", telemetry_len()
);
flush_output();
}
}
flush_output();
}
}
@@
-333,7
+365,7
@@
public class AltosSerial implements Runnable {
monitor_mode = monitor;
if (altos != null) {
if (monitor)
monitor_mode = monitor;
if (altos != null) {
if (monitor)
- printf("m %
d\n", telemetry
);
+ printf("m %
x\n", telemetry_len()
);
else
printf("m 0\n");
flush_output();
else
printf("m 0\n");
flush_output();
@@
-362,7
+394,6
@@
public class AltosSerial implements Runnable {
try {
flush_input();
} finally {
try {
flush_input();
} finally {
- System.out.printf("Sending tilde\n");
printf ("~\n");
flush_output();
}
printf ("~\n");
flush_output();
}
@@
-378,7
+409,7
@@
public class AltosSerial implements Runnable {
line = "";
monitor_mode = false;
frame = null;
line = "";
monitor_mode = false;
frame = null;
- telemetry = Altos.ao_telemetry_
full
;
+ telemetry = Altos.ao_telemetry_
standard
;
monitors = new LinkedList<LinkedBlockingQueue<AltosLine>> ();
reply_queue = new LinkedBlockingQueue<AltosLine> ();
open();
monitors = new LinkedList<LinkedBlockingQueue<AltosLine>> ();
reply_queue = new LinkedBlockingQueue<AltosLine> ();
open();