*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
import android.speech.tts.TextToSpeech.OnInitListener;
import android.location.Location;
-import org.altusmetrum.altoslib_7.*;
+import org.altusmetrum.altoslib_12.*;
public class AltosVoice {
private Location last_receiver;
private long last_speak_time;
private int last_flight_tell = TELL_FLIGHT_NONE;
+ private boolean quiet = false;
private long now() {
return System.currentTimeMillis();
public synchronized void speak(String s) {
if (!tts_enabled) return;
last_speak_time = now();
- tts.speak(s, TextToSpeech.QUEUE_ADD, null);
+ if (!quiet)
+ tts.speak(s, TextToSpeech.QUEUE_ADD, null);
}
public synchronized long time_since_speak() {
if (state == null)
return false;
+ AltosDebug.debug("tell_pad lag %b ltm %d\n", last_apogee_good, last_tell_mode);
+
if (state.apogee_voltage != AltosLib.MISSING)
last_apogee_good = tell_gonogo("apogee",
state.apogee_voltage >= AltosLib.ao_igniter_good,
if (state == null)
return false;
- if (state.state != last_state && AltosLib.ao_flight_boost <= state.state && state.state <= AltosLib.ao_flight_landed) {
+ if (last_tell_mode != TELL_MODE_FLIGHT)
+ last_flight_tell = TELL_FLIGHT_NONE;
+
+ if (state.state() != last_state && AltosLib.ao_flight_boost <= state.state() && state.state() <= AltosLib.ao_flight_landed) {
speak(state.state_name());
- if (descending(state.state) && !descending(last_state)) {
+ if (descending(state.state()) && !descending(last_state)) {
if (state.max_height() != AltosLib.MISSING) {
speak("max height: %s.",
AltosConvert.height.say_units(state.max_height()));
return true;
}
- if (last_tell_mode == TELL_MODE_FLIGHT) {
- if (time_since_speak() < 10 * 1000 && last_flight_tell == TELL_FLIGHT_TRACK)
+ if (last_tell_mode == TELL_MODE_FLIGHT && last_flight_tell == TELL_FLIGHT_TRACK) {
+ if (time_since_speak() < 10 * 1000)
return false;
if (!target_moved(state) && !receiver_moved(receiver))
return false;
if (last_flight_tell == TELL_FLIGHT_NONE || last_flight_tell == TELL_FLIGHT_STATE || last_flight_tell == TELL_FLIGHT_TRACK) {
last_flight_tell = TELL_FLIGHT_SPEED;
- if (state.state <= AltosLib.ao_flight_coast) {
+ if (state.state() <= AltosLib.ao_flight_coast) {
speed = state.speed();
} else {
speed = state.gps_speed();
if (last_flight_tell == TELL_FLIGHT_HEIGHT) {
last_flight_tell = TELL_FLIGHT_TRACK;
if (from_receiver != null) {
- speak("bearing %s %d, elevation %d, range %s.",
+ speak("bearing %s %d, elevation %d, distance %s.",
from_receiver.bearing_words(
AltosGreatCircle.BEARING_VOICE),
(int) (from_receiver.bearing + 0.5),
(int) (from_receiver.elevation + 0.5),
- AltosConvert.distance.say(from_receiver.range));
+ AltosConvert.distance.say(from_receiver.distance));
return true;
}
}
if (direction == null)
direction = String.format("Bearing %d", (int) (from_receiver.bearing + 0.5));
- speak("%s, range %s.", direction,
+ speak("%s, distance %s.", direction,
AltosConvert.distance.say_units(from_receiver.distance));
return true;
public void tell(TelemetryState telem_state, AltosState state,
AltosGreatCircle from_receiver, Location receiver,
- AltosDroidTab tab) {
+ AltosDroidTab tab, boolean quiet) {
+
+ this.quiet = quiet;
boolean spoken = false;
int tell_serial = last_tell_serial;
if (state != null)
- tell_serial = state.serial;
+ tell_serial = state.cal_data.serial;
if (tell_serial != last_tell_serial)
reset_last();
else
tell_mode = TELL_MODE_RECOVER;
- AltosDebug.debug("last_serial %d serial %d last_mode %d mode %d\n",
- last_tell_serial, tell_serial,
- last_tell_mode, tell_mode);
-
if (tell_mode == TELL_MODE_PAD)
spoken = tell_pad(telem_state, state, from_receiver, receiver);
else if (tell_mode == TELL_MODE_FLIGHT)
last_tell_mode = tell_mode;
last_tell_serial = tell_serial;
if (state != null) {
- last_state = state.state;
+ last_state = state.state();
last_height = state.height();
if (state.gps != null)
last_gps = state.gps;