summaryrefslogtreecommitdiff
path: root/altoslib
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-12-18 01:14:11 -0800
committerKeith Packard <keithp@keithp.com>2013-12-18 01:14:11 -0800
commite26306c9350ef1d107d4257ef1c09d15165c9154 (patch)
treed7983c6a04c54b3307d6fc2699dad4fa21d8bde0 /altoslib
parent18852efa108ba6e6e69dfd5076d4f4c01f62b4ef (diff)
altoslib: Pass InterruptedException up the stack instead of hiding it
When interrupting a thread that is talking to a serial device, it's important not to have that thread discard the InterruptedException so that it will actually terminate. This patch removes a bunch of places that were discarding InterruptedExceptions and lets higher level code see them so that they can exit cleanly. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib')
-rw-r--r--altoslib/AltosDebug.java23
-rw-r--r--altoslib/AltosFlash.java4
-rw-r--r--altoslib/AltosFlightReader.java4
-rw-r--r--altoslib/AltosGPS.java3
-rw-r--r--altoslib/AltosIMU.java3
-rw-r--r--altoslib/AltosIdleFetch.java3
-rw-r--r--altoslib/AltosIdleMonitor.java18
-rw-r--r--altoslib/AltosIgnite.java15
-rw-r--r--altoslib/AltosLink.java47
-rw-r--r--altoslib/AltosLog.java11
-rw-r--r--altoslib/AltosMag.java8
-rw-r--r--altoslib/AltosMma655x.java3
-rw-r--r--altoslib/AltosMs5607.java3
-rw-r--r--altoslib/AltosProgrammer.java4
-rw-r--r--altoslib/AltosSelfFlash.java13
-rw-r--r--altoslib/AltosSensorEMini.java3
-rw-r--r--altoslib/AltosSensorMega.java3
-rw-r--r--altoslib/AltosSensorMetrum.java3
-rw-r--r--altoslib/AltosSensorTM.java3
-rw-r--r--altoslib/AltosSensorTMini.java3
-rw-r--r--altoslib/AltosStateUpdate.java2
-rw-r--r--altoslib/AltosTelemetryReader.java15
22 files changed, 88 insertions, 106 deletions
diff --git a/altoslib/AltosDebug.java b/altoslib/AltosDebug.java
index 8faab03b..fb11d39a 100644
--- a/altoslib/AltosDebug.java
+++ b/altoslib/AltosDebug.java
@@ -56,13 +56,10 @@ public class AltosDebug {
boolean debug_mode;
- void ensure_debug_mode() {
+ void ensure_debug_mode() throws InterruptedException {
if (!debug_mode) {
link.printf("D\n");
- try {
- link.flush_input();
- } catch (InterruptedException ie) {
- }
+ link.flush_input();
debug_mode = true;
}
}
@@ -81,13 +78,16 @@ public class AltosDebug {
}
public void close() {
- link.close();
+ try {
+ link.close();
+ } catch (InterruptedException ie) {
+ }
}
/*
* Write target memory
*/
- public void write_memory(int address, byte[] bytes, int start, int len) {
+ public void write_memory(int address, byte[] bytes, int start, int len) throws InterruptedException {
ensure_debug_mode();
// dump_memory("write_memory", address, bytes, start, len);
link.printf("O %x %x\n", len, address);
@@ -95,7 +95,7 @@ public class AltosDebug {
link.printf("%02x", bytes[start + i]);
}
- public void write_memory(int address, byte[] bytes) {
+ public void write_memory(int address, byte[] bytes) throws InterruptedException {
write_memory(address, bytes, 0, bytes.length);
}
@@ -132,7 +132,7 @@ public class AltosDebug {
/*
* Write raw bytes to the debug link using the 'P' command
*/
- public void write_bytes(byte[] bytes) throws IOException {
+ public void write_bytes(byte[] bytes) throws IOException, InterruptedException {
int i = 0;
ensure_debug_mode();
while (i < bytes.length) {
@@ -147,7 +147,7 @@ public class AltosDebug {
}
}
- public void write_byte(byte b) throws IOException {
+ public void write_byte(byte b) throws IOException, InterruptedException {
byte[] bytes = { b };
write_bytes(bytes);
}
@@ -257,13 +257,12 @@ public class AltosDebug {
return true;
}
- public AltosRomconfig romconfig() {
+ public AltosRomconfig romconfig() throws InterruptedException {
try {
byte[] bytes = read_memory(0xa0, 10);
AltosHexfile hexfile = new AltosHexfile (bytes, 0xa0);
return new AltosRomconfig(hexfile);
} catch (IOException ie) {
- } catch (InterruptedException ie) {
}
return new AltosRomconfig();
}
diff --git a/altoslib/AltosFlash.java b/altoslib/AltosFlash.java
index 0906f2ef..0977070e 100644
--- a/altoslib/AltosFlash.java
+++ b/altoslib/AltosFlash.java
@@ -318,7 +318,7 @@ public class AltosFlash extends AltosProgrammer {
close();
}
- public boolean check_rom_config() {
+ public boolean check_rom_config() throws InterruptedException {
if (debug == null)
return true;
if (rom_config == null)
@@ -330,7 +330,7 @@ public class AltosFlash extends AltosProgrammer {
rom_config = romconfig;
}
- public AltosRomconfig romconfig() {
+ public AltosRomconfig romconfig() throws InterruptedException {
if (!check_rom_config())
return null;
return rom_config;
diff --git a/altoslib/AltosFlightReader.java b/altoslib/AltosFlightReader.java
index 4a722e42..b251e7cc 100644
--- a/altoslib/AltosFlightReader.java
+++ b/altoslib/AltosFlightReader.java
@@ -46,7 +46,7 @@ public class AltosFlightReader {
public File backing_file() { return null; }
- public boolean has_monitor_battery() { return false; }
+ public boolean has_monitor_battery() throws InterruptedException { return false; }
- public double monitor_battery() { return AltosLib.MISSING; }
+ public double monitor_battery() throws InterruptedException { return AltosLib.MISSING; }
}
diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java
index 1d5b0755..f5162225 100644
--- a/altoslib/AltosGPS.java
+++ b/altoslib/AltosGPS.java
@@ -348,7 +348,7 @@ public class AltosGPS implements Cloneable {
}
}
- static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException {
try {
AltosGPS gps = new AltosGPS(link, config_data);
@@ -357,7 +357,6 @@ public class AltosGPS implements Cloneable {
return;
}
} catch (TimeoutException te) {
- } catch (InterruptedException ie) {
}
state.set_gps(null, 0);
}
diff --git a/altoslib/AltosIMU.java b/altoslib/AltosIMU.java
index c231dda7..6d88ccae 100644
--- a/altoslib/AltosIMU.java
+++ b/altoslib/AltosIMU.java
@@ -58,14 +58,13 @@ public class AltosIMU implements Cloneable {
return n;
}
- static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException {
try {
AltosIMU imu = new AltosIMU(link);
if (imu != null)
state.set_imu(imu);
} catch (TimeoutException te) {
- } catch (InterruptedException ie) {
}
}
diff --git a/altoslib/AltosIdleFetch.java b/altoslib/AltosIdleFetch.java
index 64c421f4..4adc6c41 100644
--- a/altoslib/AltosIdleFetch.java
+++ b/altoslib/AltosIdleFetch.java
@@ -125,7 +125,7 @@ public class AltosIdleFetch implements AltosStateUpdate {
double frequency;
String callsign;
- public void update_state(AltosState state) {
+ public void update_state(AltosState state) throws InterruptedException {
try {
AltosConfigData config_data = new AltosConfigData(link);
state.set_state(AltosLib.ao_flight_startup);
@@ -140,7 +140,6 @@ public class AltosIdleFetch implements AltosStateUpdate {
}
}
state.set_received_time(System.currentTimeMillis());
- } catch (InterruptedException ie) {
} catch (TimeoutException te) {
}
diff --git a/altoslib/AltosIdleMonitor.java b/altoslib/AltosIdleMonitor.java
index d858845a..c816c202 100644
--- a/altoslib/AltosIdleMonitor.java
+++ b/altoslib/AltosIdleMonitor.java
@@ -90,15 +90,16 @@ public class AltosIdleMonitor extends Thread {
link.abort_reply();
}
- public void abort() {
- if (isAlive()) {
+ public void abort() throws InterruptedException {
+ System.out.printf("Attempting to abort monitor thread\n");
+ while (isAlive()) {
+ System.out.printf("Interrupting\n");
interrupt();
link.abort_reply();
- try {
- join();
- } catch (InterruptedException ie) {
- }
+ Thread.sleep(100);
}
+ System.out.printf("Appears to be dead now\n");
+ join();
}
public void run() {
@@ -115,7 +116,10 @@ public class AltosIdleMonitor extends Thread {
}
} catch (InterruptedException ie) {
}
- link.close();
+ try {
+ link.close();
+ } catch (InterruptedException ie) {
+ }
}
public AltosIdleMonitor(AltosIdleMonitorListener in_listener, AltosLink in_link, boolean in_remote)
diff --git a/altoslib/AltosIgnite.java b/altoslib/AltosIgnite.java
index 42169989..fc9599b6 100644
--- a/altoslib/AltosIgnite.java
+++ b/altoslib/AltosIgnite.java
@@ -141,7 +141,7 @@ public class AltosIgnite {
}
}
- public void fire(int igniter) {
+ public void fire(int igniter) throws InterruptedException {
if (link == null)
return;
try {
@@ -154,21 +154,14 @@ public class AltosIgnite {
link.printf("i DoIt drogue\n");
break;
}
- } catch (InterruptedException ie) {
} catch (TimeoutException te) {
} finally {
- try {
- stop_link();
- } catch (InterruptedException ie) {
- }
+ stop_link();
}
}
- public void close() {
- try {
- stop_link();
- } catch (InterruptedException ie) {
- }
+ public void close() throws InterruptedException {
+ stop_link();
link.close();
link = null;
}
diff --git a/altoslib/AltosLink.java b/altoslib/AltosLink.java
index ba557a72..ee1f9785 100644
--- a/altoslib/AltosLink.java
+++ b/altoslib/AltosLink.java
@@ -26,10 +26,10 @@ public abstract class AltosLink implements Runnable {
public final static int ERROR = -1;
public final static int TIMEOUT = -2;
- public abstract int getchar();
- public abstract void print(String data);
+ public abstract int getchar() throws InterruptedException;
+ public abstract void print(String data) throws InterruptedException;
public abstract void putchar(byte c);
- public abstract void close();
+ public abstract void close() throws InterruptedException;
public static boolean debug = false;
public static void set_debug(boolean in_debug) { debug = in_debug; }
@@ -57,7 +57,11 @@ public abstract class AltosLink implements Runnable {
String line = String.format(format, arguments);
if (debug)
pending_output.add(line);
- print(line);
+ try {
+ print(line);
+ } catch (InterruptedException ie) {
+
+ }
}
public String get_reply_no_dialog(int timeout) throws InterruptedException, TimeoutException {
@@ -233,7 +237,7 @@ public abstract class AltosLink implements Runnable {
try {
add_telem (new AltosLine());
add_reply (new AltosLine());
- } catch (InterruptedException e) {
+ } catch (InterruptedException ie) {
}
}
@@ -399,33 +403,27 @@ public abstract class AltosLink implements Runnable {
flush_output();
}
- public boolean is_loader() {
+ public boolean is_loader() throws InterruptedException {
boolean ret = false;
printf("v\n");
- try {
- for (;;) {
- String line = get_reply();
-
- if (line == null)
- return false;
- if (line.startsWith("software-version"))
- break;
- if (line.startsWith("altos-loader"))
- ret = true;
- }
- } catch (InterruptedException ie) {
+ for (;;) {
+ String line = get_reply();
+
+ if (line == null)
+ return false;
+ if (line.startsWith("software-version"))
+ break;
+ if (line.startsWith("altos-loader"))
+ ret = true;
}
return ret;
}
- public void to_loader() {
+ public void to_loader() throws InterruptedException {
printf("X\n");
flush_output();
close();
- try {
- Thread.sleep(1000);
- } catch (InterruptedException ie) {
- }
+ Thread.sleep(1000);
}
public boolean remote;
@@ -490,7 +488,7 @@ public abstract class AltosLink implements Runnable {
return config_data.has_monitor_battery();
}
- public double monitor_battery() {
+ public double monitor_battery() throws InterruptedException {
int monitor_batt = AltosLib.MISSING;
if (config_data.has_monitor_battery()) {
@@ -504,7 +502,6 @@ public abstract class AltosLink implements Runnable {
}
i++;
}
- } catch (InterruptedException ie) {
} catch (TimeoutException te) {
}
}
diff --git a/altoslib/AltosLog.java b/altoslib/AltosLog.java
index 015d9f65..d4fbee97 100644
--- a/altoslib/AltosLog.java
+++ b/altoslib/AltosLog.java
@@ -59,18 +59,15 @@ public class AltosLog implements Runnable {
return file;
}
- boolean open (AltosState state) throws IOException {
+ boolean open (AltosState state) throws IOException, InterruptedException {
AltosFile a = new AltosFile(state);
log_file = new FileWriter(a, true);
if (log_file != null) {
while (!pending_queue.isEmpty()) {
- try {
- String s = pending_queue.take();
- log_file.write(s);
- log_file.write('\n');
- } catch (InterruptedException ie) {
- }
+ String s = pending_queue.take();
+ log_file.write(s);
+ log_file.write('\n');
}
log_file.flush();
file = a;
diff --git a/altoslib/AltosMag.java b/altoslib/AltosMag.java
index 56add8f3..89e72bd6 100644
--- a/altoslib/AltosMag.java
+++ b/altoslib/AltosMag.java
@@ -25,6 +25,11 @@ public class AltosMag implements Cloneable {
public int z;
public boolean parse_string(String line) {
+// if (line.startsWith("Syntax error")) {
+// x = y = z = 0;
+// return true;
+// }
+
if (!line.startsWith("X:"))
return false;
@@ -53,14 +58,13 @@ public class AltosMag implements Cloneable {
z = AltosLib.MISSING;
}
- static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException {
try {
AltosMag mag = new AltosMag(link);
if (mag != null)
state.set_mag(mag);
} catch (TimeoutException te) {
- } catch (InterruptedException ie) {
}
}
diff --git a/altoslib/AltosMma655x.java b/altoslib/AltosMma655x.java
index 8dc947db..f8256190 100644
--- a/altoslib/AltosMma655x.java
+++ b/altoslib/AltosMma655x.java
@@ -44,14 +44,13 @@ public class AltosMma655x implements Cloneable {
return n;
}
- static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException {
try {
AltosMma655x mma655x = new AltosMma655x(link);
if (mma655x != null)
state.set_accel(mma655x.accel);
} catch (TimeoutException te) {
- } catch (InterruptedException ie) {
}
}
diff --git a/altoslib/AltosMs5607.java b/altoslib/AltosMs5607.java
index b29fa9ae..23d65ea9 100644
--- a/altoslib/AltosMs5607.java
+++ b/altoslib/AltosMs5607.java
@@ -128,7 +128,7 @@ public class AltosMs5607 {
return true;
}
- static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException {
try {
AltosMs5607 ms5607 = new AltosMs5607(link);
@@ -137,7 +137,6 @@ public class AltosMs5607 {
return;
}
} catch (TimeoutException te) {
- } catch (InterruptedException ie) {
}
}
diff --git a/altoslib/AltosProgrammer.java b/altoslib/AltosProgrammer.java
index 88777cf3..b010d564 100644
--- a/altoslib/AltosProgrammer.java
+++ b/altoslib/AltosProgrammer.java
@@ -27,9 +27,7 @@ public abstract class AltosProgrammer {
abstract public void abort();
- abstract public AltosRomconfig romconfig();
+ abstract public AltosRomconfig romconfig() throws InterruptedException;
abstract public void set_romconfig(AltosRomconfig config);
-
-
} \ No newline at end of file
diff --git a/altoslib/AltosSelfFlash.java b/altoslib/AltosSelfFlash.java
index 07952d7f..327a90bd 100644
--- a/altoslib/AltosSelfFlash.java
+++ b/altoslib/AltosSelfFlash.java
@@ -130,7 +130,10 @@ public class AltosSelfFlash extends AltosProgrammer {
public void close() {
if (link != null) {
reboot();
- link.close();
+ try {
+ link.close();
+ } catch (InterruptedException ie) {
+ }
link = null;
}
}
@@ -140,7 +143,7 @@ public class AltosSelfFlash extends AltosProgrammer {
close();
}
- private AltosHexfile get_rom() {
+ private AltosHexfile get_rom() throws InterruptedException {
System.out.printf("get rom\n");
try {
int base = AltosRomconfig.fetch_base(image);
@@ -152,15 +155,13 @@ public class AltosSelfFlash extends AltosProgrammer {
} catch (AltosNoSymbol none) {
System.out.printf("no symbol %s\n", none.getMessage());
return null;
- } catch (InterruptedException ie) {
- return null;
} catch (IOException ie) {
return null;
}
}
- public boolean check_rom_config() {
+ public boolean check_rom_config() throws InterruptedException {
if (link == null) {
System.out.printf ("no link\n");
return true;
@@ -177,7 +178,7 @@ public class AltosSelfFlash extends AltosProgrammer {
rom_config = romconfig;
}
- public AltosRomconfig romconfig() {
+ public AltosRomconfig romconfig() throws InterruptedException {
System.out.printf("fetch romconfig\n");
if (!check_rom_config())
return null;
diff --git a/altoslib/AltosSensorEMini.java b/altoslib/AltosSensorEMini.java
index cbc65143..5f9eed55 100644
--- a/altoslib/AltosSensorEMini.java
+++ b/altoslib/AltosSensorEMini.java
@@ -25,7 +25,7 @@ public class AltosSensorEMini {
public int main;
public int batt;
- static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException {
try {
AltosSensorEMini sensor_emini = new AltosSensorEMini(link);
@@ -36,7 +36,6 @@ public class AltosSensorEMini {
state.set_main_voltage(AltosConvert.easy_mini_voltage(sensor_emini.main));
} catch (TimeoutException te) {
- } catch (InterruptedException ie) {
}
}
diff --git a/altoslib/AltosSensorMega.java b/altoslib/AltosSensorMega.java
index 3afb8a64..e715242a 100644
--- a/altoslib/AltosSensorMega.java
+++ b/altoslib/AltosSensorMega.java
@@ -88,7 +88,7 @@ class AltosSensorMega {
}
}
- static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException {
try {
AltosSensorMega sensor_mega = new AltosSensorMega(link);
@@ -102,7 +102,6 @@ class AltosSensorMega {
state.set_ignitor_voltage(ignitor_voltage);
} catch (TimeoutException te) {
- } catch (InterruptedException ie) {
}
}
}
diff --git a/altoslib/AltosSensorMetrum.java b/altoslib/AltosSensorMetrum.java
index 4a51d492..c30eaebd 100644
--- a/altoslib/AltosSensorMetrum.java
+++ b/altoslib/AltosSensorMetrum.java
@@ -52,14 +52,13 @@ class AltosSensorMetrum {
}
}
- static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException {
try {
AltosSensorMetrum sensor_metrum = new AltosSensorMetrum(link);
state.set_battery_voltage(AltosConvert.mega_battery_voltage(sensor_metrum.v_batt));
state.set_apogee_voltage(AltosConvert.mega_pyro_voltage(sensor_metrum.sense_a));
state.set_main_voltage(AltosConvert.mega_pyro_voltage(sensor_metrum.sense_m));
} catch (TimeoutException te) {
- } catch (InterruptedException ie) {
}
}
}
diff --git a/altoslib/AltosSensorTM.java b/altoslib/AltosSensorTM.java
index 2696a308..f867de4b 100644
--- a/altoslib/AltosSensorTM.java
+++ b/altoslib/AltosSensorTM.java
@@ -28,7 +28,7 @@ public class AltosSensorTM {
public int drogue;
public int main;
- static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException {
try {
AltosSensorTM sensor_tm = new AltosSensorTM(link);
@@ -42,7 +42,6 @@ public class AltosSensorTM {
state.set_main_voltage(AltosConvert.cc_ignitor_to_voltage(sensor_tm.main));
} catch (TimeoutException te) {
- } catch (InterruptedException ie) {
}
}
diff --git a/altoslib/AltosSensorTMini.java b/altoslib/AltosSensorTMini.java
index be071e5d..ee030910 100644
--- a/altoslib/AltosSensorTMini.java
+++ b/altoslib/AltosSensorTMini.java
@@ -25,7 +25,7 @@ public class AltosSensorTMini {
public int main;
public int batt;
- static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException {
try {
AltosSensorTMini sensor_tmini = new AltosSensorTMini(link);
@@ -36,7 +36,6 @@ public class AltosSensorTMini {
state.set_main_voltage(AltosConvert.easy_mini_voltage(sensor_tmini.main));
} catch (TimeoutException te) {
- } catch (InterruptedException ie) {
}
}
diff --git a/altoslib/AltosStateUpdate.java b/altoslib/AltosStateUpdate.java
index ec4f7609..97a5dfe2 100644
--- a/altoslib/AltosStateUpdate.java
+++ b/altoslib/AltosStateUpdate.java
@@ -18,5 +18,5 @@
package org.altusmetrum.altoslib_2;
public interface AltosStateUpdate {
- public void update_state(AltosState state);
+ public void update_state(AltosState state) throws InterruptedException;
} \ No newline at end of file
diff --git a/altoslib/AltosTelemetryReader.java b/altoslib/AltosTelemetryReader.java
index aea97844..405c555b 100644
--- a/altoslib/AltosTelemetryReader.java
+++ b/altoslib/AltosTelemetryReader.java
@@ -54,7 +54,10 @@ public class AltosTelemetryReader extends AltosFlightReader {
public void close(boolean interrupted) {
link.remove_monitor(telem);
log.close();
- link.close();
+ try {
+ link.close();
+ } catch (InterruptedException ie) {
+ }
}
public void set_frequency(double in_frequency) throws InterruptedException, TimeoutException {
@@ -83,7 +86,7 @@ public class AltosTelemetryReader extends AltosFlightReader {
else
return false;
} catch (InterruptedException ie) {
- return true;
+ return false;
} catch (TimeoutException te) {
return true;
}
@@ -114,7 +117,7 @@ public class AltosTelemetryReader extends AltosFlightReader {
return link.has_monitor_battery();
}
- public double monitor_battery() {
+ public double monitor_battery() throws InterruptedException {
return link.monitor_battery();
}
@@ -130,12 +133,8 @@ public class AltosTelemetryReader extends AltosFlightReader {
telemetry = AltosPreferences.telemetry(link.serial);
set_telemetry(telemetry);
link.add_monitor(telem);
- } catch (TimeoutException e) {
- close(true);
- throw(e);
- } catch (InterruptedException e) {
+ } finally {
close(true);
- throw(e);
}
}
}