altoslib: Compute speed at entry to each state
[fw/altos] / altoslib / AltosLink.java
index c0031cadbf059ce3ea38c6e102901dac1be79e9d..5a802ef180230bdfb969d01212a0197781bb366d 100644 (file)
@@ -3,7 +3,8 @@
  *
  * 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
@@ -15,7 +16,7 @@
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
-package org.altusmetrum.altoslib_5;
+package org.altusmetrum.altoslib_12;
 
 import java.io.*;
 import java.util.concurrent.*;
@@ -86,10 +87,17 @@ public abstract class AltosLink implements Runnable {
 
        public boolean  reply_abort;
        public int      in_reply;
+       boolean cancel_enable = true;
+
+       public void set_cancel_enable(boolean e) {
+               cancel_enable = e;
+       }
 
        boolean         reply_timeout_shown = false;
 
        private boolean check_reply_timeout() {
+               if (!cancel_enable)
+                       return false;
                if (!reply_timeout_shown)
                        reply_timeout_shown = show_reply_timeout();
                return reply_abort;
@@ -163,8 +171,8 @@ public abstract class AltosLink implements Runnable {
                boolean can_cancel = can_cancel_reply();
                String  reply = null;
 
-               if (!can_cancel && remote)
-                       System.out.printf("Uh-oh, reading remote serial device from swing thread\n");
+//             if (!can_cancel && remote)
+//                     System.out.printf("Uh-oh, reading remote serial device from swing thread\n");
 
                if (remote && can_cancel) {
                        timeout = 500;
@@ -354,7 +362,7 @@ public abstract class AltosLink implements Runnable {
                if (frequency == 0)
                        return;
                if (has_frequency)
-                       set_radio_freq((int) Math.floor (frequency * 1000));
+                       set_radio_freq((int) Math.floor (frequency * 1000 + 0.5));
                else if (has_setting)
                        set_radio_setting(AltosConvert.radio_frequency_to_setting(frequency, cal));
                else
@@ -386,7 +394,7 @@ public abstract class AltosLink implements Runnable {
                flush_output();
        }
 
-       public void set_monitor(boolean monitor) {
+       public synchronized void set_monitor(boolean monitor) {
                monitor_mode = monitor;
                if (monitor)
                        printf("m %x\n", telemetry_len());
@@ -395,6 +403,10 @@ public abstract class AltosLink implements Runnable {
                flush_output();
        }
 
+       public synchronized boolean get_monitor() {
+               return monitor_mode;
+       }
+
        private void set_channel(int channel) {
                if (monitor_mode)
                        printf("m 0\nc r %d\nm %x\n",
@@ -427,8 +439,10 @@ public abstract class AltosLink implements Runnable {
 
        public void set_callsign(String callsign) {
                this.callsign = callsign;
-               printf ("c c %s\n", callsign);
-               flush_output();
+               if (callsign != null) {
+                       printf ("c c %s\n", callsign);
+                       flush_output();
+               }
        }
 
        public boolean is_loader() throws InterruptedException {
@@ -467,7 +481,7 @@ public abstract class AltosLink implements Runnable {
                if (telemetry_rate < 0)
                        telemetry_rate = AltosPreferences.telemetry_rate(serial);
                set_telemetry_rate(telemetry_rate);
-               if (callsign.equals(""))
+               if (callsign == null || callsign.equals(""))
                        callsign = AltosPreferences.callsign();
                set_callsign(callsign);
                printf("p\nE 0\n");
@@ -526,21 +540,29 @@ public abstract class AltosLink implements Runnable {
 
                if (config_data.has_monitor_battery()) {
                        try {
-                       String[] items = adc();
-                       for (int i = 0; i < items.length;) {
-                               if (items[i].equals("batt")) {
-                                       monitor_batt = Integer.parseInt(items[i+1]);
-                                       i += 2;
-                                       continue;
+                               String[] items = adc();
+                               for (int i = 0; i < items.length;) {
+                                       if (items[i].equals("batt")) {
+                                               monitor_batt = Integer.parseInt(items[i+1]);
+                                               i += 2;
+                                               continue;
+                                       }
+                                       i++;
                                }
-                               i++;
-                       }
                        } catch (TimeoutException te) {
                        }
                }
                if (monitor_batt == AltosLib.MISSING)
                        return AltosLib.MISSING;
-               return AltosConvert.cc_battery_to_voltage(monitor_batt);
+
+               double  volts = AltosLib.MISSING;
+               if (config_data.product.startsWith("TeleBT-v3") || config_data.product.startsWith("TeleBT-v4")) {
+                       volts = AltosConvert.tele_bt_3_battery(monitor_batt);
+               } else {
+                       volts = AltosConvert.cc_battery_to_voltage(monitor_batt);
+               }
+
+               return volts;
        }
 
        public AltosLink() {