altoslib/altosui: Adapt monitor idle to new AltosListenerState
[fw/altos] / altoslib / AltosIdleMonitor.java
index 6b20b3f17342b0b3f528969e973a946a57da537b..c379547f22e8efc480c6b14342ac41de9f87e264 100644 (file)
@@ -27,7 +27,9 @@ public class AltosIdleMonitor extends Thread {
        AltosState              state;
        boolean                 remote;
        double                  frequency;
+       String                  callsign;
        AltosState              previous_state;
+       AltosListenerState      listener_state;
        AltosConfigData         config_data;
        AltosGPS                gps;
 
@@ -87,6 +89,7 @@ public class AltosIdleMonitor extends Thread {
                try {
                        if (remote) {
                                link.set_radio_frequency(frequency);
+                               link.set_callsign(callsign);
                                link.start_remote();
                        } else
                                link.flush_input();
@@ -114,8 +117,10 @@ public class AltosIdleMonitor extends Thread {
                } finally {
                        if (remote) {
                                link.stop_remote();
-                               if (record != null)
-                                       record.rssi = AltosRSSI();
+                               if (record != null) {
+                                       record.rssi = link.rssi();
+                                       listener_state.battery = link.monitor_battery();
+                               }
                        } else {
                                if (record != null)
                                        record.rssi = 0;
@@ -126,10 +131,27 @@ public class AltosIdleMonitor extends Thread {
 
        public void set_frequency(double in_frequency) {
                frequency = in_frequency;
+               link.abort_reply();
+       }
+
+       public void set_callsign(String in_callsign) {
+               callsign = in_callsign;
+               link.abort_reply();
        }
 
        public void post_state() {
-               listener.update(state);
+               listener.update(state, listener_state);
+       }
+
+       public void abort() {
+               if (isAlive()) {
+                       interrupt();
+                       link.abort_reply();
+                       try {
+                               join();
+                       } catch (InterruptedException ie) {
+                       }
+               }
        }
 
        public void run() {
@@ -153,5 +175,6 @@ public class AltosIdleMonitor extends Thread {
                link = in_link;
                remote = in_remote;
                state = null;
+               listener_state = new AltosListenerState();
        }
 }