summaryrefslogtreecommitdiff
path: root/altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2014-09-03 22:32:49 -0700
committerKeith Packard <keithp@keithp.com>2014-09-03 22:32:49 -0700
commit3842735e303f0bf6f46ed8cb659c92d8bb9bd137 (patch)
tree126c9e9d6591978980252672eabaa2bc55f0bbf9 /altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java
parentadc46e2f1346d98ef4f6c2351fef95fbc8ddf831 (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.java37
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();