diff options
| author | Keith Packard <keithp@keithp.com> | 2014-09-03 22:32:49 -0700 |
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2014-09-03 22:32:49 -0700 |
| commit | 3842735e303f0bf6f46ed8cb659c92d8bb9bd137 (patch) | |
| tree | 126c9e9d6591978980252672eabaa2bc55f0bbf9 /altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java | |
| parent | adc46e2f1346d98ef4f6c2351fef95fbc8ddf831 (diff) | |
altosdroid: Use single object to pass data to UI
Instead of having separate messages for each piece of telemetry state,
package the whole mess up in one object and send it for any
change. This simplifies tracking within the UI by avoiding corner
cases during reconnect.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java')
| -rw-r--r-- | altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java index bec51851..971c3e80 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java @@ -31,6 +31,7 @@ import org.altusmetrum.altoslib_5.*; public class TelemetryReader extends Thread { private static final String TAG = "TelemetryReader"; + private static final boolean D = true; int crc_errors; @@ -44,12 +45,6 @@ public class TelemetryReader extends Thread { LinkedBlockingQueue<AltosLine> telemQueue; public AltosState read() throws ParseException, AltosCRCException, InterruptedException, IOException { - if (stacked != null) { - state = stacked.read(); - if (state != null) - return state; - stacked = null; - } AltosLine l = telemQueue.take(); if (l.line == null) throw new IOException("IO error"); @@ -78,6 +73,26 @@ public class TelemetryReader extends Thread { AltosState state = null; try { + if (D) Log.d(TAG, "starting reader"); + while (stacked != null) { + AltosState stacked_state = null; + try { + stacked_state = stacked.read(); + } catch (ParseException pe) { + continue; + } catch (AltosCRCException ce) { + continue; + } + if (stacked_state != null) + state = stacked_state; + else + stacked = null; + } + if (state != null) { + if (D) Log.d(TAG, "Send initial state"); + handler.obtainMessage(TelemetryService.MSG_TELEMETRY, state).sendToTarget(); + } + if (D) Log.d(TAG, "starting loop"); while (telemQueue != null) { try { state = read(); @@ -97,6 +112,7 @@ public class TelemetryReader extends Thread { } public TelemetryReader (AltosLink in_link, Handler in_handler, AltosFlightReader in_stacked) { + if (D) Log.d(TAG, "connected TelemetryReader create started"); link = in_link; handler = in_handler; stacked = in_stacked; @@ -104,15 +120,9 @@ public class TelemetryReader extends Thread { state = null; telemQueue = new LinkedBlockingQueue<AltosLine>(); link.add_monitor(telemQueue); - try { - link.set_radio_frequency(AltosPreferences.frequency(link.serial)); - link.set_telemetry(AltosLib.ao_telemetry_standard); - link.set_telemetry_rate(AltosPreferences.telemetry_rate(link.serial)); - } catch (InterruptedException ee) { - close(); - } catch (TimeoutException te) { - close(); - } + link.set_telemetry(AltosLib.ao_telemetry_standard); + + if (D) Log.d(TAG, "connected TelemetryReader created"); } private static AltosFlightReader existing_data(AltosLink link) { |
