summaryrefslogtreecommitdiff
path: root/altoslib/AltosLink.java
diff options
context:
space:
mode:
authorBdale Garbee <bdale@gag.com>2017-12-11 21:37:48 -0700
committerBdale Garbee <bdale@gag.com>2017-12-11 21:37:48 -0700
commitea0aa97fb93e669868a6f2c49c5d4b46e7615b1f (patch)
treef16b9a9ccd8b4a7bcde7d5cc64e6f0a52c4f3436 /altoslib/AltosLink.java
parent216ea6388a75c46891dc4687a2eb0c97dc63b136 (diff)
parent9adf8b23aac8256f230b10adcab9dd323266caaa (diff)
Merge branch 'master' into branch-1.8
Diffstat (limited to 'altoslib/AltosLink.java')
-rw-r--r--altoslib/AltosLink.java63
1 files changed, 42 insertions, 21 deletions
diff --git a/altoslib/AltosLink.java b/altoslib/AltosLink.java
index 5413de9d..829a1a63 100644
--- a/altoslib/AltosLink.java
+++ b/altoslib/AltosLink.java
@@ -355,7 +355,8 @@ public abstract class AltosLink implements Runnable {
public int telemetry_rate = -1;
public double frequency;
public String callsign;
- AltosConfigData config_data;
+ private AltosConfigData config_data_local;
+ private AltosConfigData config_data_remote;
private Object config_data_lock = new Object();
@@ -390,7 +391,7 @@ public abstract class AltosLink implements Runnable {
public void set_radio_frequency(double in_frequency) throws InterruptedException, TimeoutException {
frequency = in_frequency;
- config_data();
+ AltosConfigData config_data = config_data();
set_radio_frequency(frequency,
config_data.radio_frequency > 0,
config_data.radio_setting > 0,
@@ -446,11 +447,24 @@ public abstract class AltosLink implements Runnable {
public AltosConfigData config_data() throws InterruptedException, TimeoutException {
synchronized(config_data_lock) {
- if (config_data == null) {
- printf("m 0\n");
- config_data = new AltosConfigData(this);
- if (monitor_mode)
- set_monitor(true);
+ AltosConfigData config_data;
+
+ if (remote) {
+ if (config_data_remote == null) {
+ printf("m 0\n");
+ config_data_remote = new AltosConfigData(this);
+ if (monitor_mode)
+ set_monitor(true);
+ }
+ config_data = config_data_remote;
+ } else {
+ if (config_data_local == null) {
+ printf("m 0\n");
+ config_data_local = new AltosConfigData(this);
+ if (monitor_mode)
+ set_monitor(true);
+ }
+ config_data = config_data_local;
}
return config_data;
}
@@ -551,14 +565,23 @@ public abstract class AltosLink implements Runnable {
}
public boolean has_monitor_battery() {
- return config_data.has_monitor_battery();
+ try {
+ return config_data().has_monitor_battery();
+ } catch (InterruptedException ie) {
+ return false;
+ } catch (TimeoutException te) {
+ return false;
+ }
}
public double monitor_battery() throws InterruptedException {
- int monitor_batt = AltosLib.MISSING;
+ double volts = AltosLib.MISSING;
- if (config_data.has_monitor_battery()) {
- try {
+ try {
+ AltosConfigData config_data = config_data();
+ int monitor_batt = AltosLib.MISSING;
+
+ if (config_data.has_monitor_battery()) {
String[] items = adc();
for (int i = 0; i < items.length;) {
if (items[i].equals("batt")) {
@@ -568,19 +591,17 @@ public abstract class AltosLink implements Runnable {
}
i++;
}
- } catch (TimeoutException te) {
}
- }
- if (monitor_batt == AltosLib.MISSING)
- return AltosLib.MISSING;
+ if (monitor_batt != 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);
+ }
+ }
- 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);
+ } catch (TimeoutException te) {
}
-
return volts;
}