public String data;
public boolean tick_valid;
- int[] ParseHex(String line) {
- String[] tokens = line.split("\\s+");
- int[] array = new int[tokens.length];
+ static final int record_length = 8;
- for (int i = 0; i < tokens.length; i++)
- try {
- array[i] = Integer.parseInt(tokens[i], 16);
- } catch (NumberFormatException ne) {
- return null;
- }
- return array;
- }
+ public AltosEepromRecord (AltosEepromChunk chunk, int start) throws ParseException {
- int checksum(int[] line) {
- int csum = 0x5a;
- for (int i = 1; i < line.length; i++)
- csum += line[i];
- return csum & 0xff;
- }
+ cmd = chunk.data(start);
+ tick_valid = true;
- public AltosEepromRecord (AltosSerial serial_line, int addr)
- throws TimeoutException, ParseException, InterruptedException {
- String line = serial_line.get_reply(5000);
- if (line == null)
- throw new TimeoutException();
- int[] values = ParseHex(line);
+ tick_valid = !chunk.erased(start, record_length);
+ if (tick_valid) {
+ if (AltosConvert.checksum(chunk.data, start, record_length) != 0)
+ throw new ParseException(String.format("invalid checksum at 0x%x",
+ chunk.address + start), 0);
+ } else {
+ cmd = Altos.AO_LOG_INVALID;
+ }
- if (values == null)
- throw new ParseException(String.format("invalid line %s", line), 0);
- if (values[0] != (addr & 0xff))
- throw new ParseException(String.format("data address out of sync at 0x%x",
- addr), 0);
- if (checksum(values) != 0)
- throw new ParseException(String.format("invalid checksum at 0x%x", addr), 0);
+ tick = chunk.data16(start + 2);
+ a = chunk.data16(start + 4);
+ b = chunk.data16(start + 6);
- cmd = values[1];
- tick = values[3] + (values[4] << 8);
- a = values[5] + (values[6] << 8);
- b = values[7] + (values[8] << 8);
data = null;
- tick_valid = true;
}
public AltosEepromRecord (String line) {
} else if (tokens[0].equals("Radio") && tokens[1].equals("cal:")) {
cmd = Altos.AO_LOG_RADIO_CAL;
a = Integer.parseInt(tokens[2]);
+ } else if (tokens[0].equals("Max") && tokens[1].equals("flight") && tokens[2].equals("log:")) {
+ cmd = Altos.AO_LOG_MAX_FLIGHT_LOG;
+ a = Integer.parseInt(tokens[3]);
} else if (tokens[0].equals("manufacturer")) {
cmd = Altos.AO_LOG_MANUFACTURER;
data = tokens[1];
} else if (tokens[0].equals("serial-number")) {
cmd = Altos.AO_LOG_SERIAL_NUMBER;
a = Integer.parseInt(tokens[1]);
+ } else if (tokens[0].equals("log-format")) {
+ cmd = Altos.AO_LOG_LOG_FORMAT;
+ a = Integer.parseInt(tokens[1]);
} else if (tokens[0].equals("software-version")) {
cmd = Altos.AO_LOG_SOFTWARE_VERSION;
data = tokens[1];