altosdroid: update to support new state code
[fw/altos] / altosdroid / src / org / altusmetrum / AltosDroid / TelemetryReader.java
index fb07442ee47e0c6d38c492aae50c0c4922440b7f..cdd1decdc68b9189a77812b6676c5dcee204d76d 100644 (file)
@@ -25,7 +25,7 @@ import java.util.concurrent.*;
 import android.util.Log;\r
 import android.os.Handler;\r
 \r
-import org.altusmetrum.altoslib_1.*;\r
+import org.altusmetrum.altoslib_2.*;\r
 \r
 \r
 public class TelemetryReader extends Thread {\r
@@ -36,27 +36,30 @@ public class TelemetryReader extends Thread {
 \r
        Handler     handler;\r
 \r
-       TelemetryService service;\r
        AltosLink   link;\r
-       AltosRecord previous;\r
+       AltosState  state = null;\r
 \r
-       LinkedBlockingQueue<AltosLine> telem;\r
+       LinkedBlockingQueue<AltosLine> telemQueue;\r
 \r
-       public AltosRecord read() throws ParseException, AltosCRCException, InterruptedException, IOException {\r
-               AltosLine l = telem.take();\r
+       public AltosState read() throws ParseException, AltosCRCException, InterruptedException, IOException {\r
+               AltosLine l = telemQueue.take();\r
                if (l.line == null)\r
                        throw new IOException("IO error");\r
-               AltosRecord     next = AltosTelemetry.parse(l.line, previous);\r
-               previous = next;\r
-               return next;\r
+               AltosTelemetry telem = AltosTelemetryLegacy.parse(l.line);\r
+               if (state == null)\r
+                       state = new AltosState();\r
+               else\r
+                       state = state.clone();\r
+               telem.update_state(state);\r
+               return state;\r
        }\r
 \r
        public void close() {\r
-               previous = null;\r
-               link.remove_monitor(telem);\r
+               state = null;\r
+               link.remove_monitor(telemQueue);\r
                link = null;\r
-               telem.clear();\r
-               telem = null;\r
+               telemQueue.clear();\r
+               telemQueue = null;\r
        }\r
 \r
        public void run() {\r
@@ -65,16 +68,13 @@ public class TelemetryReader extends Thread {
                try {\r
                        for (;;) {\r
                                try {\r
-                                       AltosRecord record = read();\r
-                                       if (record == null)\r
-                                               break;\r
-                                       state = new AltosState(record, state);\r
-                                       service.sendTelemetry(state);\r
+                                       state = read();\r
+                                       handler.obtainMessage(TelemetryService.MSG_TELEMETRY, state).sendToTarget();\r
                                } catch (ParseException pp) {\r
                                        Log.e(TAG, String.format("Parse error: %d \"%s\"", pp.getErrorOffset(), pp.getMessage()));\r
                                } catch (AltosCRCException ce) {\r
                                        ++crc_errors;\r
-                                       service.sendCrcErrors(crc_errors);\r
+                                       handler.obtainMessage(TelemetryService.MSG_CRC_ERROR, new Integer(crc_errors)).sendToTarget();\r
                                }\r
                        }\r
                } catch (InterruptedException ee) {\r
@@ -84,13 +84,12 @@ public class TelemetryReader extends Thread {
                }\r
        }\r
 \r
-       public TelemetryReader (TelemetryService in_service, AltosLink in_link, Handler in_handler) {\r
-               service = in_service;\r
+       public TelemetryReader (AltosLink in_link, Handler in_handler) {\r
                link    = in_link;\r
                handler = in_handler;\r
 \r
-               previous = null;\r
-               telem = new LinkedBlockingQueue<AltosLine>();\r
-               link.add_monitor(telem);\r
+               state = null;\r
+               telemQueue = new LinkedBlockingQueue<AltosLine>();\r
+               link.add_monitor(telemQueue);\r
        }\r
 }\r