+ if (old_state == null || old_state.gps_ready != state.gps_ready) {
+ if (state.gps_ready)
+ voice.speak("GPS ready");
+ else if (old_state != null)
+ voice.speak("GPS lost");
+ }
+ old_state = state;
+ }
+
+ class DisplayThread extends Thread {
+ IdleThread idle_thread;
+
+ String read() throws InterruptedException { return null; }
+
+ void close() { }
+
+ void update(AltosState state) throws InterruptedException { }
+
+ public void run() {
+ String line;
+ AltosState state = null;
+ AltosState old_state = null;
+
+ idle_thread = new IdleThread();
+
+ info_reset();
+ info_finish();
+ idle_thread.start();
+ try {
+ while ((line = read()) != null) {
+ try {
+ AltosTelemetry t = new AltosTelemetry(line);
+ old_state = state;
+ state = new AltosState(t, state);
+ update(state);
+ show(state);
+ tell(state, old_state);
+ idle_thread.notice(state);
+ } catch (ParseException pp) {
+ System.out.printf("Parse error on %s\n", line);
+ System.out.println("exception " + pp);
+ }
+ }
+ } catch (InterruptedException ee) {
+ } finally {
+ close();
+ idle_thread.interrupt();
+ }
+ }
+
+ public void report() {
+ if (idle_thread != null)
+ idle_thread.report(true);
+ }