X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosLog.java;h=1cac6b5205a1b6c731b42447a2ef132919114018;hp=ed59ef713eb44cd1a27c58e9cbbdefe5157a81b2;hb=d1065424d144b8dab949db7e57140ffdf244bd48;hpb=e17e3691d93636eebbd7381f2df1303dc46ea96c diff --git a/altoslib/AltosLog.java b/altoslib/AltosLog.java index ed59ef71..1cac6b52 100644 --- a/altoslib/AltosLog.java +++ b/altoslib/AltosLog.java @@ -15,11 +15,11 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_2; +package org.altusmetrum.altoslib_5; import java.io.*; -import java.text.ParseException; -import java.util.concurrent.LinkedBlockingQueue; +import java.text.*; +import java.util.concurrent.*; /* * This creates a thread to capture telemetry data and write it to @@ -31,9 +31,11 @@ public class AltosLog implements Runnable { LinkedBlockingQueue pending_queue; int serial; int flight; + int receiver_serial; FileWriter log_file; Thread log_thread; AltosFile file; + AltosLink link; private void close_log_file() { if (log_file != null) { @@ -46,6 +48,7 @@ public class AltosLog implements Runnable { } public void close() { + link.remove_monitor(input_queue); close_log_file(); if (log_thread != null) { log_thread.interrupt(); @@ -57,18 +60,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; @@ -78,17 +78,16 @@ public class AltosLog implements Runnable { public void run () { try { - AltosState state = null; + AltosState state = new AltosState(); + AltosConfigData receiver_config = link.config_data(); + state.set_receiver_serial(receiver_config.serial); for (;;) { AltosLine line = input_queue.take(); if (line.line == null) continue; try { AltosTelemetry telem = AltosTelemetry.parse(line.line); - if (state != null) - state = state.clone(); - else - state = new AltosState(); + state = state.clone(); telem.update_state(state); if (state.serial != serial || state.flight != flight || log_file == null) { @@ -109,6 +108,7 @@ public class AltosLog implements Runnable { pending_queue.put(line.line); } } catch (InterruptedException ie) { + } catch (TimeoutException te) { } catch (IOException ie) { } close(); @@ -120,6 +120,7 @@ public class AltosLog implements Runnable { link.add_monitor(input_queue); serial = -1; flight = -1; + this.link = link; log_file = null; log_thread = new Thread(this); log_thread.start();