altosui: Deal with altos bug setting radio channel while monitoring
authorKeith Packard <keithp@keithp.com>
Fri, 3 Sep 2010 08:21:57 +0000 (01:21 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 3 Sep 2010 14:04:28 +0000 (07:04 -0700)
If the monitoring thread is active, then setting the radio channel can
sometimes cause the monitoring thread to get stuck. I'm not entirely
sure why though. For now, work around the issue by making sure
monitoring is off, and the monitoring thread has stopped, before
changing the radio channel.

Signed-off-by: Keith Packard <keithp@keithp.com>
ao-tools/altosui/AltosSerial.java

index c3daf3b93cd8c00188ddff48563995d079b65cf0..c4a7ad76a9437117f25091caf9038ced7df1abd0 100644 (file)
@@ -186,10 +186,14 @@ public class AltosSerial implements Runnable {
 
        public void set_channel(int channel) {
                if (altos != null) {
+                       if (monitor_mode) {
+                               printf("m 0\n");
+                               flush_input();
+                       }
+                       printf("c r %d\n", channel);
                        if (monitor_mode)
-                               printf("m 0\nc r %d\nm 1\n", channel);
-                       else
-                               printf("c r %d\n", channel);
+                               printf("m 1\n");
+                       flush_input();
                }
        }
 
@@ -198,8 +202,10 @@ public class AltosSerial implements Runnable {
                if (altos != null) {
                        if (monitor)
                                printf("m 1\n");
-                       else
+                       else {
                                printf("m 0\n");
+                               flush_input();
+                       }
                }
        }