From 46f08f8709c538f3fee8e166598f0bb930df6e3c Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 6 Sep 2014 20:41:58 -0700 Subject: altoslib: Update local callsign/baud rate when using remote protocol We've had code to synchronously update the local and remote radio frequencies when doing configuration over the remote link. This patch adds the same code when changing the call sign and baud rate. Signed-off-by: Keith Packard --- altoslib/AltosConfigData.java | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'altoslib') diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index fd38635c..4ada1d3b 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -386,6 +386,10 @@ public class AltosConfigData implements Iterable { return radio_frequency >= 0 || radio_setting >= 0 || radio_channel >= 0; } + public boolean has_telemetry_rate() { + return telemetry_rate >= 0; + } + public void set_frequency(double freq) { int frequency = radio_frequency; int setting = radio_setting; @@ -558,20 +562,39 @@ public class AltosConfigData implements Iterable { radio_calibration); /* When remote, reset the dongle frequency at the same time */ if (remote) { + link.flush_output(); link.stop_remote(); link.set_radio_frequency(frequency); + link.flush_output(); link.start_remote(); } } - if (callsign != null) + if (telemetry_rate >= 0) { + link.printf("c T %d\n", telemetry_rate); + if (remote) { + link.flush_output(); + link.stop_remote(); + link.set_telemetry_rate(telemetry_rate); + link.flush_output(); + link.start_remote(); + } + } + + if (callsign != null) { link.printf("c c %s\n", callsign); + if (remote) { + link.flush_output(); + link.stop_remote(); + link.set_callsign(callsign); + link.flush_output(); + link.start_remote(); + } + } + if (radio_enable >= 0) link.printf("c e %d\n", radio_enable); - if (telemetry_rate >= 0) - link.printf("c T %d\n", telemetry_rate); - /* HAS_ACCEL */ /* UI doesn't support accel cal */ if (pad_orientation >= 0) -- cgit v1.2.3 From e7515e3a88d53c50dd9b962cc8f43ce5376ccd0b Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 6 Sep 2014 20:43:32 -0700 Subject: altoslib: Increase timeouts when using low baud rate remote protocol When using 2400 or 9600 baud remote link rates, we need to increase the packet timeout from 500ms to much longer values to avoid annoying the user with timeout warnings. Signed-off-by: Keith Packard --- altoslib/AltosLink.java | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'altoslib') diff --git a/altoslib/AltosLink.java b/altoslib/AltosLink.java index eadab5df..62bd82b9 100644 --- a/altoslib/AltosLink.java +++ b/altoslib/AltosLink.java @@ -163,8 +163,21 @@ public abstract class AltosLink implements Runnable { if (!can_cancel && remote) System.out.printf("Uh-oh, reading remote serial device from swing thread\n"); - if (remote && can_cancel) + if (remote && can_cancel) { timeout = 500; + switch (telemetry_rate) { + case AltosLib.ao_telemetry_rate_38400: + default: + timeout = 500; + break; + case AltosLib.ao_telemetry_rate_9600: + timeout = 2000; + break; + case AltosLib.ao_telemetry_rate_2400: + timeout = 8000; + break; + } + } try { ++in_reply; @@ -307,7 +320,7 @@ public abstract class AltosLink implements Runnable { */ public boolean monitor_mode = false; public int telemetry = AltosLib.ao_telemetry_standard; - public int telemetry_rate = AltosLib.ao_telemetry_rate_38400; + public int telemetry_rate = -1; public double frequency; public String callsign; AltosConfigData config_data; @@ -446,7 +459,12 @@ public abstract class AltosLink implements Runnable { if (debug) System.out.printf("start remote %7.3f\n", frequency); set_radio_frequency(frequency); - set_callsign(AltosPreferences.callsign()); + if (telemetry_rate < 0) + telemetry_rate = AltosPreferences.telemetry_rate(serial); + set_telemetry_rate(telemetry_rate); + if (callsign.equals("")) + callsign = AltosPreferences.callsign(); + set_callsign(callsign); printf("p\nE 0\n"); flush_input(); remote = true; -- cgit v1.2.3