X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosLink.java;h=b1bf525b1af48b6aae09f4ca8793ddbe8a1e8643;hb=effc62354fc82bb937c6f445a147fc92153a0731;hp=1b722026067b5bccfea4521bfdfb317cd3a5755a;hpb=59f355f5288b42b2e47743d06e41e55819a55f64;p=fw%2Faltos diff --git a/altoslib/AltosLink.java b/altoslib/AltosLink.java index 1b722026..b1bf525b 100644 --- a/altoslib/AltosLink.java +++ b/altoslib/AltosLink.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.AltosLib; +package org.altusmetrum.altoslib_2; import java.io.*; import java.util.concurrent.*; @@ -32,6 +32,9 @@ public abstract class AltosLink implements Runnable { public static boolean debug = false; public static void set_debug(boolean in_debug) { debug = in_debug; } + + public boolean has_error; + LinkedList pending_output = new LinkedList(); public LinkedList> monitors = new LinkedList> ();; @@ -107,6 +110,7 @@ public abstract class AltosLink implements Runnable { if (c == ERROR) { if (debug) System.out.printf("ERROR\n"); + has_error = true; add_telem (new AltosLine()); add_reply (new AltosLine()); break; @@ -249,6 +253,7 @@ public abstract class AltosLink implements Runnable { public boolean monitor_mode = false; public int telemetry = AltosLib.ao_telemetry_standard; public double frequency; + public String callsign; AltosConfigData config_data; private int telemetry_len() { @@ -330,6 +335,7 @@ public abstract class AltosLink implements Runnable { } public void set_callsign(String callsign) { + this.callsign = callsign; printf ("c c %s\n", callsign); flush_output(); } @@ -362,6 +368,65 @@ public abstract class AltosLink implements Runnable { remote = false; } + public int rssi() throws TimeoutException, InterruptedException { + if (remote) + return 0; + printf("s\n"); + String line = get_reply_no_dialog(5000); + if (line == null) + throw new TimeoutException(); + String[] items = line.split("\\s+"); + if (items.length < 2) + return 0; + if (!items[0].equals("RSSI:")) + return 0; + int rssi = Integer.parseInt(items[1]); + return rssi; + } + + public String[] adc() throws TimeoutException, InterruptedException { + printf("a\n"); + for (;;) { + String line = get_reply_no_dialog(5000); + if (line == null) { + throw new TimeoutException(); + } + if (!line.startsWith("tick:")) + continue; + String[] items = line.split("\\s+"); + return items; + } + } + + public boolean has_monitor_battery() { + return config_data.has_monitor_battery(); + } + + public double monitor_battery() { + int monitor_batt = AltosLib.MISSING; + + 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; + } + i++; + } + } catch (InterruptedException ie) { + } catch (TimeoutException te) { + } + } + if (monitor_batt == AltosLib.MISSING) + return AltosLib.MISSING; + return AltosConvert.cc_battery_to_voltage(monitor_batt); + } + public AltosLink() { + callsign = ""; + has_error = false; } }