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
Handler handler;\r
\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
try {\r
for (;;) {\r
try {\r
- AltosRecord record = read();\r
- if (record == null)\r
- break;\r
- state = new AltosState(record, 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
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