make infotable scrollable, revert its fontsize to 14
[fw/altos] / ao-tools / altosui / AltosLog.java
index ec868b9c8dd2bcc078cf5b07541a07140e847c56..fed96c28b0c238b20b7c7db72ef5e586383bd8e1 100644 (file)
@@ -24,6 +24,7 @@ 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
@@ -31,16 +32,22 @@ import altosui.AltosFile;
  */
 class AltosLog implements Runnable {
 
-       LinkedBlockingQueue<String>     input_queue;
+       LinkedBlockingQueue<AltosLine>  input_queue;
        LinkedBlockingQueue<String>     pending_queue;
        int                             serial;
        int                             flight;
        FileWriter                      log_file;
        Thread                          log_thread;
 
-       void close() throws IOException {
-               if (log_file != null)
-                       log_file.close();
+       void close() {
+               if (log_file != null) {
+                       try {
+                               log_file.close();
+                       } catch (IOException io) {
+                       }
+               }
+               if (log_thread != null)
+                       log_thread.interrupt();
        }
 
        boolean open (AltosTelemetry telem) throws IOException {
@@ -64,9 +71,11 @@ class AltosLog implements Runnable {
        public void run () {
                try {
                        for (;;) {
-                               String  line = input_queue.take();
+                               AltosLine       line = input_queue.take();
+                               if (line.line == null)
+                                       continue;
                                try {
-                                       AltosTelemetry  telem = new AltosTelemetry(line);
+                                       AltosTelemetry  telem = new AltosTelemetry(line.line);
                                        if (telem.serial != serial || telem.flight != flight || log_file == null) {
                                                close();
                                                serial = telem.serial;
@@ -74,26 +83,24 @@ class AltosLog implements Runnable {
                                                open(telem);
                                        }
                                } catch (ParseException pe) {
+                               } catch (AltosCRCException ce) {
                                }
                                if (log_file != null) {
-                                       log_file.write(line);
+                                       log_file.write(line.line);
                                        log_file.write('\n');
                                        log_file.flush();
                                } else
-                                       pending_queue.put(line);
+                                       pending_queue.put(line.line);
                        }
                } catch (InterruptedException ie) {
                } catch (IOException ie) {
                }
-               try {
-                       close();
-               } catch (IOException ie) {
-               }
+               close();
        }
 
        public AltosLog (AltosSerial s) {
                pending_queue = new LinkedBlockingQueue<String> ();
-               input_queue = new LinkedBlockingQueue<String> ();
+               input_queue = new LinkedBlockingQueue<AltosLine> ();
                s.add_monitor(input_queue);
                serial = -1;
                flight = -1;