summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java42
1 files changed, 36 insertions, 6 deletions
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
index 942ebbd5..8fe97187 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
@@ -248,9 +248,14 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
}
}
- boolean registered_units_listener;
-
int current_serial;
+ long switch_time;
+
+ void set_switch_time() {
+ switch_time = System.currentTimeMillis();
+ }
+
+ boolean registered_units_listener;
void update_state(TelemetryState new_telemetry_state) {
@@ -269,11 +274,35 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
update_title(telemetry_state);
- AltosDebug.debug("update state current serial %d\n", current_serial);
-
AltosState state = null;
- if (telemetry_state.states.containsKey(current_serial))
+ boolean aged = true;
+
+ if (telemetry_state.states.containsKey(current_serial)) {
state = telemetry_state.states.get(current_serial);
+ int age = state_age(state);
+ if (age < 20)
+ aged = false;
+ if (switch_time != 0 && (switch_time - state.received_time) > 0)
+ aged = true;
+ }
+
+ if (aged) {
+ AltosState newest_state = null;
+ int newest_age = 0;
+
+ for (int serial : telemetry_state.states.keySet()) {
+ AltosState existing = telemetry_state.states.get(serial);
+ int existing_age = state_age(existing);
+
+ if (newest_state == null || existing_age < newest_age) {
+ newest_state = existing;
+ newest_age = existing_age;
+ }
+ }
+
+ if (newest_state != null)
+ state = newest_state;
+ }
update_ui(telemetry_state, state, telemetry_state.location);
@@ -750,6 +779,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
void setFrequency(double freq) {
try {
mService.send(Message.obtain(null, TelemetryService.MSG_SETFREQUENCY, freq));
+ set_switch_time();
} catch (RemoteException e) {
}
}
@@ -764,6 +794,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
void setBaud(int baud) {
try {
mService.send(Message.obtain(null, TelemetryService.MSG_SETBAUD, baud));
+ set_switch_time();
} catch (RemoteException e) {
}
}
@@ -796,7 +827,6 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
if (i == serials.length)
return;
- AltosDebug.debug("Switching to serial %d\n", serial);
current_serial = serial;
update_state(null);
}