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>
- for (int i = 0; i < sense.length; i++)
- System.out.printf("sense[%d]: %d\n", i, sense[i]);
+ public void reset() {
+ previous = null;
+ flush();
+ }
+
public void close(boolean interrupted) {
link.remove_monitor(telem);
log.close();
public void close(boolean interrupted) {
link.remove_monitor(telem);
log.close();
}
public boolean equals(AltosScanResult other) {
}
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);
}
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>();
}
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) {
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));
- 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));
void set_frequency() throws InterruptedException, TimeoutException {
reader.set_frequency(frequencies[frequency_index].frequency);
void set_frequency() throws InterruptedException, TimeoutException {
reader.set_frequency(frequencies[frequency_index].frequency);
}
void next() throws InterruptedException, TimeoutException {
}
void next() throws InterruptedException, TimeoutException {