summaryrefslogtreecommitdiff
path: root/altoslib
diff options
context:
space:
mode:
Diffstat (limited to 'altoslib')
-rw-r--r--altoslib/AltosEeprom.java1
-rw-r--r--altoslib/AltosEepromDownload.java42
-rw-r--r--altoslib/AltosEepromList.java4
-rw-r--r--altoslib/AltosEepromLog.java18
-rw-r--r--altoslib/AltosEepromMonitor.java6
-rw-r--r--altoslib/AltosEepromRecord.java25
-rw-r--r--altoslib/AltosEepromRecordSet.java6
-rw-r--r--altoslib/AltosFile.java17
8 files changed, 87 insertions, 32 deletions
diff --git a/altoslib/AltosEeprom.java b/altoslib/AltosEeprom.java
index ad7bf881..124bd478 100644
--- a/altoslib/AltosEeprom.java
+++ b/altoslib/AltosEeprom.java
@@ -22,6 +22,7 @@ public class AltosEeprom {
private AltosJson config;
ArrayList<Byte> data;
private AltosConfigData config_data;
+ int errors = 0;
/*
* Public accessor APIs
diff --git a/altoslib/AltosEepromDownload.java b/altoslib/AltosEepromDownload.java
index 3df8a5b4..547b523f 100644
--- a/altoslib/AltosEepromDownload.java
+++ b/altoslib/AltosEepromDownload.java
@@ -200,25 +200,47 @@ public class AltosEepromDownload implements Runnable {
AltosFile f = MakeFile(flights.config_data.serial, log.flight, name_data);
- monitor.set_filename(f.toString());
+ log.set_file(f);
- FileWriter w = new FileWriter(f);
+ boolean do_write = true;
- eeprom.write(w);
- w.close();
+ if (f.exists())
+ do_write = monitor.check_overwrite(f);
+
+ if (do_write) {
+ FileWriter w = new FileWriter(f);
+
+ eeprom.write(w);
+ w.close();
+ }
+
+ if (eeprom.errors != 0)
+ throw new ParseException(String.format("%d CRC Errors", eeprom.errors), 0);
+ }
+
+ static String label(int flight) {
+ if (flight < 0)
+ return "Corrupt";
+ else
+ return "Flight";
+ }
+
+ static int flight(int flight) {
+ if (flight < 0)
+ return -flight;
+ return flight;
}
public void run () {
boolean success = false;
try {
- boolean failed = false;
if (remote)
link.start_remote();
for (AltosEepromLog log : flights) {
parse_errors = null;
- if (log.selected) {
+ if (log.download_selected) {
monitor.reset();
try {
CaptureLog(log);
@@ -226,16 +248,16 @@ public class AltosEepromDownload implements Runnable {
LogError(e.getMessage());
}
}
+ success = true;
if (parse_errors != null) {
- failed = true;
- monitor.show_message(String.format("Flight %d download error. Valid log data saved\n%s",
- log.flight,
+ monitor.show_message(String.format("%s %d download error. Valid log data saved\n%s",
+ label(log.flight),
+ flight(log.flight),
parse_errors),
link.name,
AltosEepromMonitor.WARNING_MESSAGE);
}
}
- success = !failed;
} catch (IOException ee) {
monitor.show_message(ee.getLocalizedMessage(),
link.name,
diff --git a/altoslib/AltosEepromList.java b/altoslib/AltosEepromList.java
index 55d47e20..c55bcaaa 100644
--- a/altoslib/AltosEepromList.java
+++ b/altoslib/AltosEepromList.java
@@ -87,7 +87,7 @@ public class AltosEepromList extends ArrayList<AltosEepromLog> {
start = AltosParse.parse_hex(tokens[3]);
if (tokens[4].equals("end"))
end = AltosParse.parse_hex(tokens[5]);
- if (flight > 0 && start >= 0 && end > 0)
+ if (flight != 0 && start >= 0 && end > 0)
flights.add(new AltosEepromFlight(flight, start, end));
} catch (ParseException pe) { System.out.printf("Parse error %s\n", pe.toString()); }
}
@@ -115,4 +115,4 @@ public class AltosEepromList extends ArrayList<AltosEepromLog> {
link.flush_output();
}
}
-} \ No newline at end of file
+}
diff --git a/altoslib/AltosEepromLog.java b/altoslib/AltosEepromLog.java
index 8d1f3fc4..ba722b89 100644
--- a/altoslib/AltosEepromLog.java
+++ b/altoslib/AltosEepromLog.java
@@ -18,6 +18,7 @@
package org.altusmetrum.altoslib_12;
+import java.io.*;
import java.text.*;
import java.util.concurrent.*;
@@ -32,7 +33,15 @@ public class AltosEepromLog {
public int start_block;
public int end_block;
- public boolean selected;
+ public boolean download_selected;
+ public boolean delete_selected;
+ public boolean graph_selected;
+
+ public File file;
+
+ public void set_file(File file) {
+ this.file = file;
+ }
public AltosEepromLog(AltosConfigData config_data,
AltosLink link,
@@ -50,8 +59,11 @@ public class AltosEepromLog {
serial = config_data.serial;
/*
- * Select all flights for download
+ * Select all flights for download and graph, but not
+ * for delete
*/
- selected = true;
+ download_selected = true;
+ delete_selected = false;
+ graph_selected = true;
}
}
diff --git a/altoslib/AltosEepromMonitor.java b/altoslib/AltosEepromMonitor.java
index a99ec687..11144a3a 100644
--- a/altoslib/AltosEepromMonitor.java
+++ b/altoslib/AltosEepromMonitor.java
@@ -18,6 +18,8 @@
package org.altusmetrum.altoslib_12;
+import java.io.*;
+
public interface AltosEepromMonitor {
public void set_block(int in_block);
@@ -28,8 +30,6 @@ public interface AltosEepromMonitor {
public void set_flight(int in_flight);
- public void set_filename(String in_file);
-
public void set_thread(Thread eeprom_thread);
final static int INFO_MESSAGE = 0;
@@ -38,6 +38,8 @@ public interface AltosEepromMonitor {
public void show_message(String message, String title, int message_type);
+ public Boolean check_overwrite(File file);
+
public void start();
public void done(boolean success);
diff --git a/altoslib/AltosEepromRecord.java b/altoslib/AltosEepromRecord.java
index 12519e6b..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() {
@@ -100,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;
}
}
diff --git a/altoslib/AltosEepromRecordSet.java b/altoslib/AltosEepromRecordSet.java
index d91ae3ac..82a5ea2a 100644
--- a/altoslib/AltosEepromRecordSet.java
+++ b/altoslib/AltosEepromRecordSet.java
@@ -97,7 +97,7 @@ public class AltosEepromRecordSet implements AltosRecordSet {
int tick = 0;
boolean first = true;
- for (;;) {
+ do {
int t = record.tick();
if (first) {
@@ -110,10 +110,8 @@ public class AltosEepromRecordSet implements AltosRecordSet {
}
record.wide_tick = tick;
ordered.add(record);
- if (!record.hasNext())
- break;
record = record.next();
- }
+ } while (record != null);
}
public AltosEepromRecordSet(InputStream input) throws IOException {
diff --git a/altoslib/AltosFile.java b/altoslib/AltosFile.java
index 69f779c1..6f98b87a 100644
--- a/altoslib/AltosFile.java
+++ b/altoslib/AltosFile.java
@@ -36,10 +36,23 @@ public class AltosFile extends File {
return String.format("-via-%04d", receiver);
}
+ static private String label(int flight) {
+ if (flight < 0)
+ return "corrupt";
+ else
+ return "flight";
+ }
+
+ static private int flight(int flight) {
+ if (flight < 0)
+ return -flight;
+ return flight;
+ }
+
public AltosFile(int year, int month, int day, int serial, int flight, int receiver, String extension) {
super (AltosPreferences.logdir(),
- String.format("%04d-%02d-%02d-serial-%s-flight-%s%s.%s",
- year, month, day, number(serial), number(flight), receiver(receiver), extension));
+ String.format("%04d-%02d-%02d-serial-%s-%s-%s%s.%s",
+ year, month, day, number(serial), label(flight), number(flight(flight)), receiver(receiver), extension));
}
public AltosFile(int year, int month, int day, int serial, int flight, String extension) {