1 package org.altusmetrum.AltosDroid;
\r
5 import java.util.concurrent.*;
\r
6 import android.util.Log;
\r
7 import android.os.Handler;
\r
9 import org.altusmetrum.AltosLib.*;
\r
12 public class TelemetryReader extends Thread {
\r
14 private static final String TAG = "TelemetryReader";
\r
21 AltosRecord previous;
\r
23 LinkedBlockingQueue<AltosLine> telem;
\r
25 public AltosRecord read() throws ParseException, AltosCRCException, InterruptedException, IOException {
\r
26 AltosLine l = telem.take();
\r
28 throw new IOException("IO error");
\r
29 AltosRecord next = AltosTelemetry.parse(l.line, previous);
\r
34 public void close() {
\r
36 link.remove_monitor(telem);
\r
43 AltosState state = null;
\r
48 AltosRecord record = read();
\r
51 state = new AltosState(record, state);
\r
53 handler.obtainMessage(TelemetryService.MSG_TELEMETRY, state).sendToTarget();
\r
54 } catch (ParseException pp) {
\r
55 Log.e(TAG, String.format("Parse error: %d \"%s\"", pp.getErrorOffset(), pp.getMessage()));
\r
56 } catch (AltosCRCException ce) {
\r
60 } catch (InterruptedException ee) {
\r
61 } catch (IOException ie) {
\r
67 public TelemetryReader (AltosLink in_link, Handler in_handler) {
\r
69 handler = in_handler;
\r
72 telem = new LinkedBlockingQueue<AltosLine>();
\r
73 link.add_monitor(telem);
\r