summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ao-tools/altosui/AltosConfig.java9
-rw-r--r--ao-tools/altosui/AltosDebug.java11
-rw-r--r--ao-tools/altosui/AltosEepromDownload.java9
-rw-r--r--ao-tools/altosui/AltosFlash.java13
-rw-r--r--ao-tools/altosui/AltosFlashUI.java11
-rw-r--r--ao-tools/altosui/AltosSerial.java28
-rw-r--r--ao-tools/altosui/AltosTelemetryReader.java5
-rw-r--r--ao-tools/altosui/AltosUI.java6
-rw-r--r--ao-tools/altosui/Makefile.am1
9 files changed, 62 insertions, 31 deletions
diff --git a/ao-tools/altosui/AltosConfig.java b/ao-tools/altosui/AltosConfig.java
index 30f7d541..09e204a9 100644
--- a/ao-tools/altosui/AltosConfig.java
+++ b/ao-tools/altosui/AltosConfig.java
@@ -231,10 +231,9 @@ public class AltosConfig implements Runnable, ActionListener {
product = new string_ref("unknown");
device = AltosDeviceDialog.show(owner, AltosDevice.product_any);
- serial_line = new AltosSerial();
if (device != null) {
try {
- serial_line.open(device);
+ serial_line = new AltosSerial(device);
if (!device.matchProduct(AltosDevice.product_telemetrum))
remote = true;
config_thread = new Thread(this);
@@ -245,6 +244,12 @@ public class AltosConfig implements Runnable, ActionListener {
device.getPath()),
"Cannot open target device",
JOptionPane.ERROR_MESSAGE);
+ } catch (AltosSerialInUseException si) {
+ JOptionPane.showMessageDialog(owner,
+ String.format("Device \"%s\" already in use",
+ device.getPath()),
+ "Device in use",
+ JOptionPane.ERROR_MESSAGE);
} catch (IOException ee) {
JOptionPane.showMessageDialog(owner,
device.getPath(),
diff --git a/ao-tools/altosui/AltosDebug.java b/ao-tools/altosui/AltosDebug.java
index 9c10129d..9aa35d3f 100644
--- a/ao-tools/altosui/AltosDebug.java
+++ b/ao-tools/altosui/AltosDebug.java
@@ -19,9 +19,10 @@ package altosui;
import java.lang.*;
import java.io.*;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.LinkedList;
-import java.util.Iterator;
+import java.util.concurrent.*;
+import java.util.*;
+
+import libaltosJNI.*;
public class AltosDebug extends AltosSerial {
@@ -259,4 +260,8 @@ public class AltosDebug extends AltosSerial {
public void reset() {
printf ("R\n");
}
+
+ public AltosDebug (altos_device in_device) throws FileNotFoundException, AltosSerialInUseException {
+ super(in_device);
+ }
} \ No newline at end of file
diff --git a/ao-tools/altosui/AltosEepromDownload.java b/ao-tools/altosui/AltosEepromDownload.java
index bd9e4b48..8996b924 100644
--- a/ao-tools/altosui/AltosEepromDownload.java
+++ b/ao-tools/altosui/AltosEepromDownload.java
@@ -244,12 +244,11 @@ public class AltosEepromDownload implements Runnable {
frame = given_frame;
device = AltosDeviceDialog.show(frame, AltosDevice.product_any);
- serial_line = new AltosSerial();
remote = false;
if (device != null) {
try {
- serial_line.open(device);
+ serial_line = new AltosSerial(device);
if (!device.matchProduct(AltosDevice.product_telemetrum))
remote = true;
eeprom_thread = new Thread(this);
@@ -260,6 +259,12 @@ public class AltosEepromDownload implements Runnable {
device.getPath()),
"Cannot open target device",
JOptionPane.ERROR_MESSAGE);
+ } catch (AltosSerialInUseException si) {
+ JOptionPane.showMessageDialog(frame,
+ String.format("Device \"%s\" already in use",
+ device.getPath()),
+ "Device in use",
+ JOptionPane.ERROR_MESSAGE);
} catch (IOException ee) {
JOptionPane.showMessageDialog(frame,
device.getPath(),
diff --git a/ao-tools/altosui/AltosFlash.java b/ao-tools/altosui/AltosFlash.java
index 25b4a06e..fa2465d3 100644
--- a/ao-tools/altosui/AltosFlash.java
+++ b/ao-tools/altosui/AltosFlash.java
@@ -329,17 +329,14 @@ public class AltosFlash {
return rom_config;
}
- public void open() throws IOException, FileNotFoundException, InterruptedException {
+ public AltosFlash(File in_file, AltosDevice in_debug_dongle)
+ throws IOException, FileNotFoundException, AltosSerialInUseException, InterruptedException {
+ file = in_file;
+ debug_dongle = in_debug_dongle;
+ debug = new AltosDebug(in_debug_dongle);
input = new FileInputStream(file);
image = new AltosHexfile(input);
- debug.open(debug_dongle);
if (!debug.check_connection())
throw new IOException("Debug port not connected");
}
-
- public AltosFlash(File in_file, AltosDevice in_debug_dongle) {
- file = in_file;
- debug_dongle = in_debug_dongle;
- debug = new AltosDebug();
- }
} \ No newline at end of file
diff --git a/ao-tools/altosui/AltosFlashUI.java b/ao-tools/altosui/AltosFlashUI.java
index 70c8c549..b09cb594 100644
--- a/ao-tools/altosui/AltosFlashUI.java
+++ b/ao-tools/altosui/AltosFlashUI.java
@@ -65,10 +65,9 @@ public class AltosFlashUI
}
public void run() {
- flash = new AltosFlash(file, debug_dongle);
- flash.addActionListener(this);
try {
- flash.open();
+ flash = new AltosFlash(file, debug_dongle);
+ flash.addActionListener(this);
AltosRomconfigUI romconfig_ui = new AltosRomconfigUI (frame);
romconfig_ui.set(flash.romconfig());
@@ -88,6 +87,12 @@ public class AltosFlashUI
"Cannot open image",
file.toString(),
JOptionPane.ERROR_MESSAGE);
+ } catch (AltosSerialInUseException si) {
+ JOptionPane.showMessageDialog(frame,
+ String.format("Device \"%s\" already in use",
+ debug_dongle.getPath()),
+ "Device in use",
+ JOptionPane.ERROR_MESSAGE);
} catch (IOException e) {
JOptionPane.showMessageDialog(frame,
e.getMessage(),
diff --git a/ao-tools/altosui/AltosSerial.java b/ao-tools/altosui/AltosSerial.java
index 6787e0c8..99a92fdb 100644
--- a/ao-tools/altosui/AltosSerial.java
+++ b/ao-tools/altosui/AltosSerial.java
@@ -23,9 +23,8 @@ package altosui;
import java.lang.*;
import java.io.*;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.LinkedList;
-import java.util.Iterator;
+import java.util.concurrent.*;
+import java.util.*;
import libaltosJNI.*;
@@ -37,6 +36,9 @@ import libaltosJNI.*;
public class AltosSerial implements Runnable {
+ static List<String> devices_opened = Collections.synchronizedList(new LinkedList<String>());
+
+ altos_device device;
SWIGTYPE_p_altos_file altos;
LinkedList<LinkedBlockingQueue<AltosLine>> monitors;
LinkedBlockingQueue<AltosLine> reply_queue;
@@ -141,10 +143,6 @@ public class AltosSerial implements Runnable {
set_monitor(false);
}
- public boolean opened() {
- return altos != null;
- }
-
public void close() {
if (altos != null) {
libaltos.altos_close(altos);
@@ -161,6 +159,9 @@ public class AltosSerial implements Runnable {
libaltos.altos_free(altos);
altos = null;
}
+ synchronized (devices_opened) {
+ devices_opened.remove(device.getPath());
+ }
}
public void putc(char c) {
@@ -178,7 +179,12 @@ public class AltosSerial implements Runnable {
print(String.format(format, arguments));
}
- public void open(altos_device device) throws FileNotFoundException {
+ private void open() throws FileNotFoundException, AltosSerialInUseException {
+ synchronized (devices_opened) {
+ if (devices_opened.contains(device.getPath()))
+ throw new AltosSerialInUseException(device);
+ devices_opened.add(device.getPath());
+ }
close();
altos = libaltos.altos_open(device);
if (altos == null)
@@ -220,12 +226,12 @@ public class AltosSerial implements Runnable {
}
}
- public AltosSerial() {
- altos = null;
- input_thread = null;
+ public AltosSerial(altos_device in_device) throws FileNotFoundException, AltosSerialInUseException {
+ device = in_device;
line = "";
monitor_mode = false;
monitors = new LinkedList<LinkedBlockingQueue<AltosLine>> ();
reply_queue = new LinkedBlockingQueue<AltosLine> ();
+ open();
}
}
diff --git a/ao-tools/altosui/AltosTelemetryReader.java b/ao-tools/altosui/AltosTelemetryReader.java
index 0b5509eb..ff02c722 100644
--- a/ao-tools/altosui/AltosTelemetryReader.java
+++ b/ao-tools/altosui/AltosTelemetryReader.java
@@ -50,9 +50,10 @@ class AltosTelemetryReader extends AltosFlightReader {
serial.set_callsign(callsign);
}
- public AltosTelemetryReader (AltosDevice in_device) throws FileNotFoundException, IOException {
+ public AltosTelemetryReader (AltosDevice in_device)
+ throws FileNotFoundException, AltosSerialInUseException, IOException {
device = in_device;
- serial = new AltosSerial();
+ serial = new AltosSerial(device);
log = new AltosLog(serial);
name = device.getPath();
diff --git a/ao-tools/altosui/AltosUI.java b/ao-tools/altosui/AltosUI.java
index 9ab451de..0d8f0e8d 100644
--- a/ao-tools/altosui/AltosUI.java
+++ b/ao-tools/altosui/AltosUI.java
@@ -56,6 +56,12 @@ public class AltosUI extends JFrame {
device.getPath()),
"Cannot open target device",
JOptionPane.ERROR_MESSAGE);
+ } catch (AltosSerialInUseException si) {
+ JOptionPane.showMessageDialog(AltosUI.this,
+ String.format("Device \"%s\" already in use",
+ device.getPath()),
+ "Device in use",
+ JOptionPane.ERROR_MESSAGE);
} catch (IOException ee) {
JOptionPane.showMessageDialog(AltosUI.this,
device.getPath(),
diff --git a/ao-tools/altosui/Makefile.am b/ao-tools/altosui/Makefile.am
index 267bae63..f4c743df 100644
--- a/ao-tools/altosui/Makefile.am
+++ b/ao-tools/altosui/Makefile.am
@@ -58,6 +58,7 @@ altosui_JAVA = \
AltosRomconfig.java \
AltosRomconfigUI.java \
AltosSerial.java \
+ AltosSerialInUseException.java \
AltosSerialMonitor.java \
AltosState.java \
AltosStatusTable.java \