X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosLink.java;h=5413de9dea7740fcaf56dcc2a19450d416c54f41;hb=558a143315f0345b79cc4f22aa4b643fedcded9c;hp=327666743396ef0ce21b9ef97f7180c6d718cadd;hpb=97adfff4cfb67c17a96f3ff46606b4e439422b01;p=fw%2Faltos diff --git a/altoslib/AltosLink.java b/altoslib/AltosLink.java index 32766674..5413de9d 100644 --- a/altoslib/AltosLink.java +++ b/altoslib/AltosLink.java @@ -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_11; +package org.altusmetrum.altoslib_12; import java.io.*; import java.util.concurrent.*; @@ -42,6 +43,8 @@ public abstract class AltosLink implements Runnable { public LinkedBlockingQueue reply_queue = new LinkedBlockingQueue(); public LinkedBlockingQueue binary_queue = new LinkedBlockingQueue(); + private String match_string = null; + public synchronized void add_monitor(LinkedBlockingQueue q) { set_monitor(true); monitors.add(q); @@ -111,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; @@ -158,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; + } } } } @@ -165,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(); @@ -555,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);