altoslib: Update local callsign/baud rate when using remote protocol
authorKeith Packard <keithp@keithp.com>
Sun, 7 Sep 2014 03:41:58 +0000 (20:41 -0700)
committerKeith Packard <keithp@keithp.com>
Sun, 7 Sep 2014 03:41:58 +0000 (20:41 -0700)
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 <keithp@keithp.com>
altoslib/AltosConfigData.java

index fd38635cc0cd25c1e7e1560c5741e53ac8bafe09..4ada1d3bbb309442a893171712a75340cb89e692 100644 (file)
@@ -386,6 +386,10 @@ public class AltosConfigData implements Iterable<String> {
                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<String> {
                                                        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)