X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosEepromLog.java;h=ee77e5c84046fee5f1e4a4fa75e00b7cd8932948;hp=36289b427f48c8a8d5a3786488df4300d691e4ad;hb=74d5dea5d5ef91db823018b631613d15c6da085d;hpb=440d52e34364fdeeddc76a2d744cc6d1c934364f diff --git a/altosui/AltosEepromLog.java b/altosui/AltosEepromLog.java index 36289b42..ee77e5c8 100644 --- a/altosui/AltosEepromLog.java +++ b/altosui/AltosEepromLog.java @@ -30,6 +30,10 @@ import java.util.concurrent.*; import libaltosJNI.*; +/* + * Extract a bit of information from an eeprom-stored flight log. + */ + public class AltosEepromLog { int serial; boolean has_flight; @@ -37,62 +41,69 @@ public class AltosEepromLog { int start_block; int end_block; - boolean has_gps; int year, month, day; - int hour, minute, second; - double lat, lon; - public AltosEepromLog(AltosSerial serial_line, int in_serial, - int in_start_block, int in_end_block) + boolean download; + boolean delete; + + public AltosEepromLog(AltosConfigData config_data, + AltosSerial serial_line, + int in_flight, int in_start_block, + int in_end_block) throws InterruptedException, TimeoutException { int block; - boolean has_date = false, has_time = false, has_lat = false, has_lon = false; + boolean has_date = false; + flight = in_flight; + if (flight != 0) + has_flight = true; start_block = in_start_block; end_block = in_end_block; - serial = in_serial; + serial = config_data.serial; - if (in_end_block > in_start_block + 2) - in_end_block = in_start_block + 2; + /* + * By default, request that every log be downloaded but not deleted + */ + download = true; + delete = false; - for (block = in_start_block; block < in_end_block; block++) { - AltosEepromBlock eeblock = new AltosEepromBlock(serial_line, block); - if (eeblock.has_flight) { - flight = eeblock.flight; - has_flight = true; - } - if (eeblock.has_date) { - year = eeblock.year; - month = eeblock.month; - day = eeblock.day; - has_date = true; - } - if (eeblock.has_time) { - hour = eeblock.hour; - minute = eeblock.minute; - second = eeblock.second; - has_time = true; - } - if (eeblock.has_lat) { - lat = eeblock.lat; - has_lat = true; - } - if (eeblock.has_lon) { - lon = eeblock.lon; - has_lon = true; + /* + * Look in TeleMetrum log data for date + */ + if (config_data.log_format == Altos.AO_LOG_FORMAT_UNKNOWN || + config_data.log_format == Altos.AO_LOG_FORMAT_FULL) + { + /* + * Only look in the first two blocks so that this + * process doesn't take a long time + */ + if (in_end_block > in_start_block + 2) + in_end_block = in_start_block + 2; + + for (block = in_start_block; block < in_end_block; block++) { + AltosEepromChunk eechunk = new AltosEepromChunk(serial_line, block, block == in_start_block); + + for (int i = 0; i < eechunk.chunk_size; i += AltosEepromRecord.record_length) { + try { + AltosEepromRecord r = new AltosEepromRecord(eechunk, i); + + if (r.cmd == Altos.AO_LOG_FLIGHT) { + flight = r.b; + has_flight = true; + } + if (r.cmd == Altos.AO_LOG_GPS_DATE) { + year = 2000 + (r.a & 0xff); + month = (r.a >> 8) & 0xff; + day = (r.b & 0xff); + has_date = true; + } + } catch (ParseException pe) { + } + } + if (has_date && has_flight) + break; } - if (has_date && has_time && has_lat && has_lon) - has_gps = true; - if (has_gps && has_flight) - break; } - System.out.printf("Serial %d start block %d end block %d\n", - serial, start_block, end_block); - if (has_flight) - System.out.printf("Flight %d\n", flight); - if (has_gps) - System.out.printf("%d-%d-%d %d:%02d:%02d Lat %f Lon %f\n", - year, month, day, hour, minute, second, lat, lon); } }