altosdroid: more updates for new AltosState
authorMike Beattie <mike@ethernal.org>
Wed, 4 Sep 2013 15:11:42 +0000 (03:11 +1200)
committerKeith Packard <keithp@keithp.com>
Thu, 5 Sep 2013 18:43:24 +0000 (11:43 -0700)
Signed-off-by: Mike Beattie <mike@ethernal.org>
Conflicts:
altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java

altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java
altosdroid/src/org/altusmetrum/AltosDroid/TabAscent.java
altosdroid/src/org/altusmetrum/AltosDroid/TabDescent.java
altosdroid/src/org/altusmetrum/AltosDroid/TabLanded.java

index c512089f9c1d0fb00e4e058a4e17b66aa966b5ad..f17cb82171e2f54e34eca4cd799677a95bdc1d2c 100644 (file)
-/*\r
- * Copyright © 2011 Keith Packard <keithp@keithp.com>\r
- * Copyright © 2012 Mike Beattie <mike@ethernal.org>\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; version 2 of the License.\r
- *\r
- * This program is distributed in the hope that it will be useful, but\r
- * WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
- * General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along\r
- * with this program; if not, write to the Free Software Foundation, Inc.,\r
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.\r
- */\r
-\r
-package org.altusmetrum.AltosDroid;\r
-\r
-import android.speech.tts.TextToSpeech;\r
-import android.speech.tts.TextToSpeech.OnInitListener;\r
-\r
-import org.altusmetrum.altoslib_2.*;\r
-\r
-public class AltosVoice {\r
-\r
-       private TextToSpeech tts         = null;\r
-       private boolean      tts_enabled = false;\r
-\r
-       private IdleThread   idle_thread = null;\r
-\r
-       private AltosState   old_state   = null;\r
-\r
-       public AltosVoice(AltosDroid a) {\r
-\r
-               tts = new TextToSpeech(a, new OnInitListener() {\r
-                       public void onInit(int status) {\r
-                               if (status == TextToSpeech.SUCCESS) tts_enabled = true;\r
-                               if (tts_enabled) {\r
-                                       idle_thread = new IdleThread();\r
-                               }\r
-                       }\r
-               });\r
-\r
-       }\r
-\r
-       public void speak(String s) {\r
-               if (!tts_enabled) return;\r
-               tts.speak(s, TextToSpeech.QUEUE_ADD, null);\r
-       }\r
-\r
-       public void stop() {\r
-               if (tts != null) tts.shutdown();\r
-               if (idle_thread != null) {\r
-                       idle_thread.interrupt();\r
-                       idle_thread = null;\r
-               }\r
-       }\r
-\r
-       public void tell(AltosState state) {\r
-               if (!tts_enabled) return;\r
-\r
-               boolean spoke = false;\r
-               if (old_state == null || old_state.state != state.state) {\r
-                       speak(state.state_name());\r
-                       if ((old_state == null || old_state.state <= AltosLib.ao_flight_boost) &&\r
-                           state.state > AltosLib.ao_flight_boost) {\r
-                               speak(String.format("max speed: %d meters per second.", (int) (state.max_speed() + 0.5)));\r
-                               spoke = true;\r
-                       } else if ((old_state == null || old_state.state < AltosLib.ao_flight_drogue) &&\r
-                                  state.state >= AltosLib.ao_flight_drogue) {\r
-                               speak(String.format("max height: %d meters.", (int) (state.max_height + 0.5)));\r
-                               spoke = true;\r
-                       }\r
-               }\r
-               if (old_state == null || old_state.gps_ready != state.gps_ready) {\r
-                       if (state.gps_ready) {\r
-                               speak("GPS ready");\r
-                               spoke = true;\r
-                       } else if (old_state != null) {\r
-                               speak("GPS lost");\r
-                               spoke = true;\r
-                       }\r
-               }\r
-               old_state = state;\r
-               idle_thread.notice(state, spoke);\r
-       }\r
-\r
-\r
-       class IdleThread extends Thread {\r
-               boolean            started;\r
-               private AltosState state;\r
-               int                reported_landing;\r
-               int                report_interval;\r
-               long               report_time;\r
-\r
-               public synchronized void report(boolean last) {\r
-                       if (state == null)\r
-                               return;\r
-\r
-                       /* reset the landing count once we hear about a new flight */\r
-                       if (state.state < AltosLib.ao_flight_drogue)\r
-                               reported_landing = 0;\r
-\r
-                       /* Shut up once the rocket is on the ground */\r
-                       if (reported_landing > 2) {\r
-                               return;\r
-                       }\r
-\r
-                       /* If the rocket isn't on the pad, then report height */\r
-                       if (AltosLib.ao_flight_drogue <= state.state &&\r
-                           state.state < AltosLib.ao_flight_landed &&\r
-                           state.range >= 0)\r
-                       {\r
-                               speak(String.format("Height %d, bearing %s %d, elevation %d, range %d.\n",\r
-                                                   (int) (state.height + 0.5),\r
-                                       state.from_pad.bearing_words(\r
-                                             AltosGreatCircle.BEARING_VOICE),\r
-                                                   (int) (state.from_pad.bearing + 0.5),\r
-                                                   (int) (state.elevation + 0.5),\r
-                                                   (int) (state.range + 0.5)));\r
-                       } else if (state.state > AltosLib.ao_flight_pad) {\r
-                               speak(String.format("%d meters", (int) (state.height + 0.5)));\r
-                       } else {\r
-                               reported_landing = 0;\r
-                       }\r
-\r
-                       /* If the rocket is coming down, check to see if it has landed;\r
-                        * either we've got a landed report or we haven't heard from it in\r
-                        * a long time\r
-                        */\r
-                       if (state.state >= AltosLib.ao_flight_drogue &&\r
-                           (last ||\r
-                            System.currentTimeMillis() - state.received_time >= 15000 ||\r
-                            state.state == AltosLib.ao_flight_landed))\r
-                       {\r
-                               if (Math.abs(state.speed) < 20 && state.height < 100)\r
-                                       speak("rocket landed safely");\r
-                               else\r
-                                       speak("rocket may have crashed");\r
-                               if (state.from_pad != null)\r
-                                       speak(String.format("Bearing %d degrees, range %d meters.",\r
-                                                           (int) (state.from_pad.bearing + 0.5),\r
-                                                           (int) (state.from_pad.distance + 0.5)));\r
-                               ++reported_landing;\r
-                       }\r
-               }\r
-\r
-               long now () {\r
-                       return System.currentTimeMillis();\r
-               }\r
-\r
-               void set_report_time() {\r
-                       report_time = now() + report_interval;\r
-               }\r
-\r
-               public void run () {\r
-                       try {\r
-                               for (;;) {\r
-                                       set_report_time();\r
-                                       for (;;) {\r
-                                               synchronized (this) {\r
-                                                       long sleep_time = report_time - now();\r
-                                                       if (sleep_time <= 0)\r
-                                                               break;\r
-                                                       wait(sleep_time);\r
-                                               }\r
-                                       }\r
-                                       report(false);\r
-                               }\r
-                       } catch (InterruptedException ie) {\r
-                       }\r
-               }\r
-\r
-               public synchronized void notice(AltosState new_state, boolean spoken) {\r
-                       AltosState old_state = state;\r
-                       state = new_state;\r
-                       if (!started && state.state > AltosLib.ao_flight_pad) {\r
-                               started = true;\r
-                               start();\r
-                       }\r
-\r
-                       if (state.state < AltosLib.ao_flight_drogue)\r
-                               report_interval = 10000;\r
-                       else\r
-                               report_interval = 20000;\r
-                       if (old_state != null && old_state.state != state.state) {\r
-                               report_time = now();\r
-                               this.notify();\r
-                       } else if (spoken)\r
-                               set_report_time();\r
-               }\r
-\r
-               public IdleThread() {\r
-                       state = null;\r
-                       reported_landing = 0;\r
-                       report_interval = 10000;\r
-               }\r
-       }\r
-\r
-}\r
+/*
+ * Copyright © 2011 Keith Packard <keithp@keithp.com>
+ * Copyright © 2012 Mike Beattie <mike@ethernal.org>
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.AltosDroid;
+
+import android.speech.tts.TextToSpeech;
+import android.speech.tts.TextToSpeech.OnInitListener;
+
+import org.altusmetrum.altoslib_2.*;
+
+public class AltosVoice {
+
+       private TextToSpeech tts         = null;
+       private boolean      tts_enabled = false;
+
+       private IdleThread   idle_thread = null;
+
+       private AltosState   old_state   = null;
+
+       public AltosVoice(AltosDroid a) {
+
+               tts = new TextToSpeech(a, new OnInitListener() {
+                       public void onInit(int status) {
+                               if (status == TextToSpeech.SUCCESS) tts_enabled = true;
+                               if (tts_enabled) {
+                                       idle_thread = new IdleThread();
+                               }
+                       }
+               });
+
+       }
+
+       public void speak(String s) {
+               if (!tts_enabled) return;
+               tts.speak(s, TextToSpeech.QUEUE_ADD, null);
+       }
+
+       public void stop() {
+               if (tts != null) tts.shutdown();
+               if (idle_thread != null) {
+                       idle_thread.interrupt();
+                       idle_thread = null;
+               }
+       }
+
+       public void tell(AltosState state) {
+               if (!tts_enabled) return;
+
+               boolean spoke = false;
+               if (old_state == null || old_state.state != state.state) {
+                       speak(state.state_name());
+                       if ((old_state == null || old_state.state <= AltosLib.ao_flight_boost) &&
+                           state.state > AltosLib.ao_flight_boost) {
+                               speak(String.format("max speed: %d meters per second.", (int) (state.max_speed() + 0.5)));
+                               spoke = true;
+                       } else if ((old_state == null || old_state.state < AltosLib.ao_flight_drogue) &&
+                                  state.state >= AltosLib.ao_flight_drogue) {
+                               speak(String.format("max height: %d meters.", (int) (state.max_height() + 0.5)));
+                               spoke = true;
+                       }
+               }
+               if (old_state == null || old_state.gps_ready != state.gps_ready) {
+                       if (state.gps_ready) {
+                               speak("GPS ready");
+                               spoke = true;
+                       } else if (old_state != null) {
+                               speak("GPS lost");
+                               spoke = true;
+                       }
+               }
+               old_state = state;
+               idle_thread.notice(state, spoke);
+       }
+
+
+       class IdleThread extends Thread {
+               boolean            started;
+               private AltosState state;
+               int                reported_landing;
+               int                report_interval;
+               long               report_time;
+
+               public synchronized void report(boolean last) {
+                       if (state == null)
+                               return;
+
+                       /* reset the landing count once we hear about a new flight */
+                       if (state.state < AltosLib.ao_flight_drogue)
+                               reported_landing = 0;
+
+                       /* Shut up once the rocket is on the ground */
+                       if (reported_landing > 2) {
+                               return;
+                       }
+
+                       /* If the rocket isn't on the pad, then report height */
+                       if (AltosLib.ao_flight_drogue <= state.state &&
+                           state.state < AltosLib.ao_flight_landed &&
+                           state.range >= 0)
+                       {
+                               speak(String.format("Height %d, bearing %s %d, elevation %d, range %d.\n",
+                                                   (int) (state.height() + 0.5),
+                                       state.from_pad.bearing_words(
+                                             AltosGreatCircle.BEARING_VOICE),
+                                                   (int) (state.from_pad.bearing + 0.5),
+                                                   (int) (state.elevation + 0.5),
+                                                   (int) (state.range + 0.5)));
+                       } else if (state.state > AltosLib.ao_flight_pad) {
+                               speak(String.format("%d meters", (int) (state.height() + 0.5)));
+                       } else {
+                               reported_landing = 0;
+                       }
+
+                       /* If the rocket is coming down, check to see if it has landed;
+                        * either we've got a landed report or we haven't heard from it in
+                        * a long time
+                        */
+                       if (state.state >= AltosLib.ao_flight_drogue &&
+                           (last ||
+                            System.currentTimeMillis() - state.received_time >= 15000 ||
+                            state.state == AltosLib.ao_flight_landed))
+                       {
+                               if (Math.abs(state.speed()) < 20 && state.height() < 100)
+                                       speak("rocket landed safely");
+                               else
+                                       speak("rocket may have crashed");
+                               if (state.from_pad != null)
+                                       speak(String.format("Bearing %d degrees, range %d meters.",
+                                                           (int) (state.from_pad.bearing + 0.5),
+                                                           (int) (state.from_pad.distance + 0.5)));
+                               ++reported_landing;
+                       }
+               }
+
+               long now () {
+                       return System.currentTimeMillis();
+               }
+
+               void set_report_time() {
+                       report_time = now() + report_interval;
+               }
+
+               public void run () {
+                       try {
+                               for (;;) {
+                                       set_report_time();
+                                       for (;;) {
+                                               synchronized (this) {
+                                                       long sleep_time = report_time - now();
+                                                       if (sleep_time <= 0)
+                                                               break;
+                                                       wait(sleep_time);
+                                               }
+                                       }
+                                       report(false);
+                               }
+                       } catch (InterruptedException ie) {
+                       }
+               }
+
+               public synchronized void notice(AltosState new_state, boolean spoken) {
+                       AltosState old_state = state;
+                       state = new_state;
+                       if (!started && state.state > AltosLib.ao_flight_pad) {
+                               started = true;
+                               start();
+                       }
+
+                       if (state.state < AltosLib.ao_flight_drogue)
+                               report_interval = 10000;
+                       else
+                               report_interval = 20000;
+                       if (old_state != null && old_state.state != state.state) {
+                               report_time = now();
+                               this.notify();
+                       } else if (spoken)
+                               set_report_time();
+               }
+
+               public IdleThread() {
+                       state = null;
+                       reported_landing = 0;
+                       report_interval = 10000;
+               }
+       }
+
+}
index 95aaea360b3e3f1fe8546ef737a4d169684d5bd4..3eaf12dbd1f53ca0124794c5ebb52990d1136132 100644 (file)
@@ -87,12 +87,12 @@ public class TabAscent extends Fragment implements AltosDroidTab {
 
        public void update_ui(AltosState state, AltosGreatCircle from_receiver, Location receiver) {
                if (state != null) {
-                       mHeightView.setText(AltosDroid.number("%6.0f m", state.height));
-                       mMaxHeightView.setText(AltosDroid.number("%6.0f m", state.max_height));
+                       mHeightView.setText(AltosDroid.number("%6.0f m", state.height()));
+                       mMaxHeightView.setText(AltosDroid.number("%6.0f m", state.max_height()));
                        mSpeedView.setText(AltosDroid.number("%6.0f m/s", state.speed()));
                        mMaxSpeedView.setText(AltosDroid.number("%6.0f m/s", state.max_speed()));
-                       mAccelView.setText(AltosDroid.number("%6.0f m/s²", state.acceleration));
-                       mMaxAccelView.setText(AltosDroid.number("%6.0f m/s²", state.max_acceleration));
+                       mAccelView.setText(AltosDroid.number("%6.0f m/s²", state.acceleration()));
+                       mMaxAccelView.setText(AltosDroid.number("%6.0f m/s²", state.max_acceleration()));
 
                        if (state.gps != null) {
                                mLatitudeView.setText(AltosDroid.pos(state.gps.lat, "N", "S"));
index 6076c401bfb58b152e59ed718e05a2fe75e6e401..e4a954ca1603e7fc38d9ffd46558fe597463f082 100644 (file)
@@ -92,7 +92,7 @@ public class TabDescent extends Fragment implements AltosDroidTab {
        public void update_ui(AltosState state, AltosGreatCircle from_receiver, Location receiver) {
                if (state != null) {
                        mSpeedView.setText(AltosDroid.number("%6.0f m/s", state.speed()));
-                       mHeightView.setText(AltosDroid.number("%6.0f m", state.height));
+                       mHeightView.setText(AltosDroid.number("%6.0f m", state.height()));
                        if (from_receiver != null) {
                                mElevationView.setText(AltosDroid.number("%3.0f°", from_receiver.elevation));
                                mRangeView.setText(AltosDroid.number("%6.0f m", from_receiver.range));
index a57ae5146088e7a7f65e7a9dd6c058b495845990..40399f2aed0df4d0fe31ad6e5fec78c0fb814d45 100644 (file)
@@ -89,8 +89,8 @@ public class TabLanded extends Fragment implements AltosDroidTab {
                }
               
                if (state != null) {
-                       mMaxHeightView.setText(String.format("%6.0f m", state.max_height));
-                       mMaxAccelView.setText(String.format("%6.0f m/s²", state.max_acceleration));
+                       mMaxHeightView.setText(String.format("%6.0f m", state.max_height()));
+                       mMaxAccelView.setText(String.format("%6.0f m/s²", state.max_acceleration()));
                        mMaxSpeedView.setText(String.format("%6.0f m/s", state.max_speed()));
                }
        }