altosui: Initial accel calibration UI
[fw/altos] / altoslib / AltosLink.java
index 76a4eb31c6cc1e6eef952088dbb25a451bf4fa70..5413de9dea7740fcaf56dcc2a19450d416c54f41 100644 (file)
@@ -16,7 +16,7 @@
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
-package org.altusmetrum.altoslib_11;
+package org.altusmetrum.altoslib_12;
 
 import java.io.*;
 import java.util.concurrent.*;
@@ -43,6 +43,8 @@ public abstract class AltosLink implements Runnable {
        public LinkedBlockingQueue<AltosLine> reply_queue = new LinkedBlockingQueue<AltosLine>();
        public LinkedBlockingQueue<byte[]> binary_queue = new LinkedBlockingQueue<byte[]>();
 
+       private String match_string = null;
+
        public synchronized void add_monitor(LinkedBlockingQueue<AltosLine> q) {
                set_monitor(true);
                monitors.add(q);
@@ -112,6 +114,15 @@ public abstract class AltosLink implements Runnable {
 
        private int     len_read = 0;
 
+       private boolean match_bytes(byte[] bytes, int byte_count, String match) {
+               if (byte_count < match.length())
+                       return false;
+               String  line = new String(bytes, 0, byte_count, AltosLib.unicode_set);
+               if (line == null)
+                       return false;
+               return line.indexOf(match) >= 0;
+       }
+
        public void run () {
                int c;
                byte[] line_bytes = null;
@@ -159,6 +170,11 @@ public abstract class AltosLink implements Runnable {
                                                        line_count = 0;
                                                        len_read = 0;
                                                }
+                                               if (match_string != null && match_bytes(line_bytes, line_count, match_string)) {
+                                                       match_string = null;
+                                                       add_bytes(line_bytes, line_count);
+                                                       line_count = 0;
+                                               }
                                        }
                                }
                        }
@@ -166,6 +182,9 @@ public abstract class AltosLink implements Runnable {
                }
        }
 
+       public void set_match(String match) {
+               match_string = match;
+       }
 
        public String get_reply(int timeout) throws InterruptedException {
                boolean can_cancel = can_cancel_reply();
@@ -556,7 +575,7 @@ public abstract class AltosLink implements Runnable {
                        return AltosLib.MISSING;
 
                double  volts = AltosLib.MISSING;
-               if (config_data.product.startsWith("TeleBT-v3")) {
+               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);