summaryrefslogtreecommitdiff
path: root/altoslib/AltosEepromRecord.java
diff options
context:
space:
mode:
authorBdale Garbee <bdale@gag.com>2017-12-11 21:37:48 -0700
committerBdale Garbee <bdale@gag.com>2017-12-11 21:37:48 -0700
commitea0aa97fb93e669868a6f2c49c5d4b46e7615b1f (patch)
treef16b9a9ccd8b4a7bcde7d5cc64e6f0a52c4f3436 /altoslib/AltosEepromRecord.java
parent216ea6388a75c46891dc4687a2eb0c97dc63b136 (diff)
parent9adf8b23aac8256f230b10adcab9dd323266caaa (diff)
Merge branch 'master' into branch-1.8
Diffstat (limited to 'altoslib/AltosEepromRecord.java')
-rw-r--r--altoslib/AltosEepromRecord.java33
1 files changed, 19 insertions, 14 deletions
diff --git a/altoslib/AltosEepromRecord.java b/altoslib/AltosEepromRecord.java
index 094584fe..43e8ea4d 100644
--- a/altoslib/AltosEepromRecord.java
+++ b/altoslib/AltosEepromRecord.java
@@ -50,8 +50,22 @@ public abstract class AltosEepromRecord implements Comparable<AltosEepromRecord>
return data8(i) | (data8(i+1) << 8) | (data8(i+2) << 16) | (data8(i+3) << 24);
}
+ public boolean empty(int s) {
+ for (int i = 0; i < length; i++)
+ if (eeprom.data8(s + i) != 0xff)
+ return false;
+ return true;
+ }
+
public boolean valid(int s) {
- return AltosConvert.checksum(eeprom.data, s, length) == 0;
+ int ck = AltosConvert.checksum(eeprom.data, s, length);
+
+ if (ck != 0) {
+ ++eeprom.errors;
+ System.out.printf("invalid checksum 0x%x at 0x%x\n", ck, s);
+ return false;
+ }
+ return true;
}
public boolean valid() {
@@ -83,18 +97,16 @@ public abstract class AltosEepromRecord implements Comparable<AltosEepromRecord>
/* AltosDataProvider */
public void provide_data(AltosDataListener listener, AltosCalData cal_data) {
- cal_data.set_tick(tick());
+ listener.set_tick(tick());
if (cmd() == AltosLib.AO_LOG_FLIGHT)
cal_data.set_boost_tick();
listener.set_time(cal_data.time());
/* Flush any pending GPS changes */
if (!AltosLib.is_gps_cmd(cmd())) {
- AltosGPS gps = cal_data.temp_gps();
- if (gps != null) {
+ AltosGPS gps = listener.temp_gps();
+ if (gps != null)
listener.set_gps(gps);
- cal_data.reset_temp_gps();
- }
}
}
@@ -102,25 +114,18 @@ public abstract class AltosEepromRecord implements Comparable<AltosEepromRecord>
int s = start + length;
while (s + length <= eeprom.data.size()) {
- if (valid(s))
+ if (!empty(s) && valid(s))
return s;
s += length;
}
return -1;
}
- public boolean hasNext() {
- return next_start() >= 0;
- }
-
public abstract AltosEepromRecord next();
public AltosEepromRecord(AltosEeprom eeprom, int start, int length) {
this.eeprom = eeprom;
this.start = start;
this.length = length;
-
- while (start + length < eeprom.data.size() && !valid())
- start += length;
}
}