package altosui;
-import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
-import javax.swing.filechooser.FileNameExtensionFilter;
-import javax.swing.table.*;
import java.io.*;
import java.util.*;
import java.text.*;
-import java.util.prefs.*;
import java.util.concurrent.*;
-
-import libaltosJNI.*;
+import org.altusmetrum.altoslib_1.*;
public class AltosEepromDownload implements Runnable {
extension = "eeprom";
set_serial(flights.config_data.serial);
- for (int i = 0; i < eechunk.chunk_size && !done; i += AltosEepromRecord.record_length) {
+ for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromRecord.record_length) {
try {
AltosEepromRecord r = new AltosEepromRecord(eechunk, i);
if (r.cmd == Altos.AO_LOG_FLIGHT)
}
if (r.cmd == Altos.AO_LOG_STATE && r.a == Altos.ao_flight_landed)
done = true;
- any_valid = true;
+ if (r.cmd != AltosLib.AO_LOG_INVALID)
+ any_valid = true;
Log(r);
} catch (ParseException pe) {
if (parse_exception == null)
boolean any_valid = false;
extension = "science";
- for (int i = 0; i < eechunk.chunk_size && !done; i += AltosEepromTeleScience.record_length) {
+ for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromTeleScience.record_length) {
try {
AltosEepromTeleScience r = new AltosEepromTeleScience(eechunk, i);
if (r.type == AltosEepromTeleScience.AO_LOG_TELESCIENCE_START) {
done = true;
}
+ void LogMega(AltosEepromMega r) throws IOException {
+ if (r.cmd != Altos.AO_LOG_INVALID) {
+ String log_line = String.format("%c %4x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x\n",
+ r.cmd, r.tick,
+ r.data8[0], r.data8[1], r.data8[2], r.data8[3],
+ r.data8[4], r.data8[5], r.data8[6], r.data8[7],
+ r.data8[8], r.data8[9], r.data8[10], r.data8[11],
+ r.data8[12], r.data8[13], r.data8[14], r.data8[15],
+ r.data8[16], r.data8[17], r.data8[18], r.data8[19],
+ r.data8[20], r.data8[21], r.data8[22], r.data8[23],
+ r.data8[24], r.data8[25], r.data8[26], r.data8[27]);
+ if (eeprom_file != null)
+ eeprom_file.write(log_line);
+ else
+ eeprom_pending.add(log_line);
+ }
+ }
+
+ void CaptureMega(AltosEepromChunk eechunk) throws IOException {
+ boolean any_valid = false;
+
+ extension = "mega";
+ set_serial(flights.config_data.serial);
+ for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromMega.record_length) {
+ try {
+ AltosEepromMega r = new AltosEepromMega(eechunk, i);
+ if (r.cmd == Altos.AO_LOG_FLIGHT)
+ set_flight(r.data16(0));
+
+ /* Monitor state transitions to update display */
+ if (r.cmd == Altos.AO_LOG_STATE && r.data16(0) <= Altos.ao_flight_landed) {
+ state = r.data16(0);
+ if (state > Altos.ao_flight_pad)
+ want_file = true;
+ }
+
+ if (r.cmd == Altos.AO_LOG_GPS_TIME) {
+ year = 2000 + r.data8(14);
+ month = r.data8(15);
+ day = r.data8(16);
+ want_file = true;
+ }
+
+ if (r.cmd == Altos.AO_LOG_STATE && r.data16(0) == Altos.ao_flight_landed)
+ done = true;
+ any_valid = true;
+ LogMega(r);
+ } catch (ParseException pe) {
+ if (parse_exception == null)
+ parse_exception = pe;
+ }
+ }
+ if (!any_valid)
+ done = true;
+
+ CheckFile(false);
+ }
+
void CaptureTelemetry(AltosEepromChunk eechunk) throws IOException {
}
done = false;
start = true;
- if (flights.config_data.serial == 0)
+ if (flights.config_data.serial < 0)
throw new IOException("no serial number found");
/* Reset per-capture variables */
state = 0; state_block = log.start_block;
for (block = log.start_block; !done && block < log.end_block; block++) {
- monitor.set_value(Altos.state_to_string[state], state, block - state_block);
+ monitor.set_value(AltosLib.state_name(state), state, block - state_block, block - log.start_block);
AltosEepromChunk eechunk = new AltosEepromChunk(serial_line, block, block == log.start_block);
}
switch (log_format) {
- case Altos.AO_LOG_FORMAT_FULL:
+ case AltosLib.AO_LOG_FORMAT_FULL:
extension = "eeprom";
CaptureFull(eechunk);
break;
- case Altos.AO_LOG_FORMAT_TINY:
+ case AltosLib.AO_LOG_FORMAT_TINY:
extension = "eeprom";
CaptureTiny(eechunk);
break;
- case Altos.AO_LOG_FORMAT_TELEMETRY:
+ case AltosLib.AO_LOG_FORMAT_TELEMETRY:
extension = "telem";
CaptureTelemetry(eechunk);
break;
- case Altos.AO_LOG_FORMAT_TELESCIENCE:
+ case AltosLib.AO_LOG_FORMAT_TELESCIENCE:
extension = "science";
CaptureTeleScience(eechunk);
break;
+ case AltosLib.AO_LOG_FORMAT_TELEMEGA:
+ extension = "mega";
+ CaptureMega(eechunk);
}
}
CheckFile(true);
for (AltosEepromLog log : flights) {
parse_exception = null;
- if (log.download) {
+ if (log.selected) {
monitor.reset();
CaptureLog(log);
}