summaryrefslogtreecommitdiff
path: root/altosui/AltosScanUI.java
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-07-18 00:01:51 -0700
committerKeith Packard <keithp@keithp.com>2012-07-18 00:01:51 -0700
commitf164e48cbeff521d45737794e2046a08322951d6 (patch)
tree4ca4c9786519633212255e111f4f3efb7c9f7cd6 /altosui/AltosScanUI.java
parenta698cd68968fc0be5f96b1729cdea2f65d2ccbf6 (diff)
altosui: Make scan UI handle incremental telem data
The new telem format doesn't send everything in each telem packet, so we need to handle updating information incrementally in the scan results. This involved clearing old scan data when switching frequencies and then updating existing entries with new data as it arrives. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altosui/AltosScanUI.java')
-rw-r--r--altosui/AltosScanUI.java42
1 files changed, 32 insertions, 10 deletions
diff --git a/altosui/AltosScanUI.java b/altosui/AltosScanUI.java
index 44eeda6d..ef6389b6 100644
--- a/altosui/AltosScanUI.java
+++ b/altosui/AltosScanUI.java
@@ -59,29 +59,50 @@ class AltosScanResult {
}
public boolean equals(AltosScanResult other) {
- return (callsign.equals(other.callsign) &&
- serial == other.serial &&
- flight == other.flight &&
+ return (serial == other.serial &&
frequency.frequency == other.frequency.frequency &&
telemetry == other.telemetry);
}
+
+ public boolean up_to_date(AltosScanResult other) {
+ if (flight == 0 && other.flight != 0) {
+ flight = other.flight;
+ return false;
+ }
+ if (callsign.equals("N0CALL") && !other.callsign.equals("N0CALL")) {
+ callsign = other.callsign;
+ return false;
+ }
+ return true;
+ }
}
class AltosScanResults extends LinkedList<AltosScanResult> implements ListModel {
LinkedList<ListDataListener> listeners = new LinkedList<ListDataListener>();
+ void changed(ListDataEvent de) {
+ for (ListDataListener l : listeners)
+ l.contentsChanged(de);
+ }
+
public boolean add(AltosScanResult r) {
- for (AltosScanResult old : this)
- if (old.equals(r))
+ int i = 0;
+ for (AltosScanResult old : this) {
+ if (old.equals(r)) {
+ if (!old.up_to_date(r))
+ changed (new ListDataEvent(this,
+ ListDataEvent.CONTENTS_CHANGED,
+ i, i));
return true;
+ }
+ i++;
+ }
super.add(r);
- ListDataEvent de = new ListDataEvent(this,
- ListDataEvent.INTERVAL_ADDED,
- this.size() - 2, this.size() - 1);
- for (ListDataListener l : listeners)
- l.contentsChanged(de);
+ changed(new ListDataEvent(this,
+ ListDataEvent.INTERVAL_ADDED,
+ this.size() - 2, this.size() - 1));
return true;
}
@@ -205,6 +226,7 @@ public class AltosScanUI
void set_frequency() throws InterruptedException, TimeoutException {
reader.set_frequency(frequencies[frequency_index].frequency);
+ reader.reset();
}
void next() throws InterruptedException, TimeoutException {