summaryrefslogtreecommitdiff
path: root/altoslib/AltosLink.java
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-10-14 12:18:26 -0700
committerKeith Packard <keithp@keithp.com>2017-10-14 12:18:26 -0700
commite98235e314ac764509af26c93da9e6d1de8184ea (patch)
tree88b237b9838c05c0f5dbb8e446c248ee5309be7f /altoslib/AltosLink.java
parent964a14568b73296194f84c728cc7e01d6f0e2f64 (diff)
altoslib: Save separate config for local and remote. Use in idle
When using the remote link, there are two separate configuration data blocks, that for the local device and for remote. Make the link report both versions, depending on whether it is in remote mode or not. Request config data in remote mode when running idle monitoring so that the presented data is for the remote device, not the local one. Signed-off-by: Keith Packard <keithp@keithp.com>
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;
}