altosui: Make sure packet mode is turned off when the connection fails
[fw/altos] / ao-tools / altosui / AltosLog.java
index f876bebae9166c1b205f36ce55f926f3a956d714..dd147d21adb960818ff3d26423f7c5e48816ba36 100644 (file)
@@ -22,9 +22,6 @@ import java.lang.*;
 import java.util.*;
 import java.text.ParseException;
 import java.util.concurrent.LinkedBlockingQueue;
-import altosui.AltosSerial;
-import altosui.AltosFile;
-import altosui.AltosLine;
 
 /*
  * This creates a thread to capture telemetry data and write it to
@@ -39,9 +36,22 @@ class AltosLog implements Runnable {
        FileWriter                      log_file;
        Thread                          log_thread;
 
-       void close() throws IOException {
-               if (log_file != null)
-                       log_file.close();
+       private void close_log_file() {
+               if (log_file != null) {
+                       try {
+                               log_file.close();
+                       } catch (IOException io) {
+                       }
+                       log_file = null;
+               }
+       }
+
+       void close() {
+               close_log_file();
+               if (log_thread != null) {
+                       log_thread.interrupt();
+                       log_thread = null;
+               }
        }
 
        boolean open (AltosTelemetry telem) throws IOException {
@@ -71,7 +81,7 @@ class AltosLog implements Runnable {
                                try {
                                        AltosTelemetry  telem = new AltosTelemetry(line.line);
                                        if (telem.serial != serial || telem.flight != flight || log_file == null) {
-                                               close();
+                                               close_log_file();
                                                serial = telem.serial;
                                                flight = telem.flight;
                                                open(telem);
@@ -89,10 +99,7 @@ class AltosLog implements Runnable {
                } catch (InterruptedException ie) {
                } catch (IOException ie) {
                }
-               try {
-                       close();
-               } catch (IOException ie) {
-               }
+               close();
        }
 
        public AltosLog (AltosSerial s) {