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/AltosVoice.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/AltosVoice.java')
| -rw-r--r-- | altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java | 37 |
1 files changed, 20 insertions, 17 deletions
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java index b05913b6..b8def367 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java @@ -58,7 +58,7 @@ public class AltosVoice { } } - public void tell(AltosState state) { + public void tell(AltosState state, AltosGreatCircle from_receiver) { if (!tts_enabled) return; boolean spoke = false; @@ -88,13 +88,14 @@ public class AltosVoice { } old_state = state; if (idle_thread != null) - idle_thread.notice(state, spoke); + idle_thread.notice(state, from_receiver, spoke); } class IdleThread extends Thread { boolean started; private AltosState state; + private AltosGreatCircle from_receiver; int reported_landing; int report_interval; long report_time; @@ -112,25 +113,26 @@ public class AltosVoice { return; } - /* If the rocket isn't on the pad, then report height */ - if (((AltosLib.ao_flight_drogue <= state.state && + /* If the rocket isn't on the pad, then report location */ + if ((AltosLib.ao_flight_drogue <= state.state && state.state < AltosLib.ao_flight_landed) || - state.state == AltosLib.ao_flight_stateless) && - state.range >= 0) + state.state == AltosLib.ao_flight_stateless) { - if (state.from_pad != null) { + AltosGreatCircle position; + + if (from_receiver != null) + position = from_receiver; + else + position = state.from_pad; + + if (position != null) { speak(String.format("Height %d, bearing %s %d, elevation %d, range %d.\n", (int) (state.height() + 0.5), - state.from_pad.bearing_words( + position.bearing_words( AltosGreatCircle.BEARING_VOICE), - (int) (state.from_pad.bearing + 0.5), - (int) (state.elevation + 0.5), - (int) (state.range + 0.5))); - } else { - speak(String.format("Height %d, elevation %d, range %d.\n", - (int) (state.height() + 0.5), - (int) (state.elevation + 0.5), - (int) (state.range + 0.5))); + (int) (position.bearing + 0.5), + (int) (position.elevation + 0.5), + (int) (position.range + 0.5))); } } else if (state.state > AltosLib.ao_flight_pad) { if (state.height() != AltosLib.MISSING) @@ -186,9 +188,10 @@ public class AltosVoice { } } - public synchronized void notice(AltosState new_state, boolean spoken) { + public synchronized void notice(AltosState new_state, AltosGreatCircle new_from_receiver, boolean spoken) { AltosState old_state = state; state = new_state; + from_receiver = new_from_receiver; if (!started && state.state > AltosLib.ao_flight_pad) { started = true; start(); |
