diff options
Diffstat (limited to 'altosui/altoslib/src')
4 files changed, 131 insertions, 29 deletions
diff --git a/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosConfigData.java b/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosConfigData.java index bb2efebf..55ade0a0 100644 --- a/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosConfigData.java +++ b/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosConfigData.java @@ -27,32 +27,32 @@ import org.altusmetrum.AltosLib.*; public class AltosConfigData implements Iterable<String> { /* Version information */ - String manufacturer; - String product; - String version; - int log_format; - int serial; + public String manufacturer; + public String product; + public String version; + public int log_format; + public int serial; /* Strings returned */ - LinkedList<String> lines; + public LinkedList<String> lines; /* Config information */ - int config_major; - int config_minor; - int main_deploy; - int apogee_delay; - int radio_channel; - int radio_setting; - String callsign; - int accel_cal_plus, accel_cal_minus; - int radio_calibration; - int flight_log_max; - int ignite_mode; - int stored_flight; - int storage_size; - int storage_erase_unit; - - static String get_string(String line, String label) throws ParseException { + public int config_major; + public int config_minor; + public int main_deploy; + public int apogee_delay; + public int radio_channel; + public int radio_setting; + public String callsign; + public int accel_cal_plus, accel_cal_minus; + public int radio_calibration; + public int flight_log_max; + public int ignite_mode; + public int stored_flight; + public int storage_size; + public int storage_erase_unit; + + public static String get_string(String line, String label) throws ParseException { if (line.startsWith(label)) { String quoted = line.substring(label.length()).trim(); @@ -65,7 +65,7 @@ public class AltosConfigData implements Iterable<String> { throw new ParseException("mismatch", 0); } - static int get_int(String line, String label) throws NumberFormatException, ParseException { + public static int get_int(String line, String label) throws NumberFormatException, ParseException { if (line.startsWith(label)) { String tail = line.substring(label.length()).trim(); String[] tokens = tail.split("\\s+"); diff --git a/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromChunk.java b/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromChunk.java index 5cc5cea0..0568c462 100644 --- a/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromChunk.java +++ b/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromChunk.java @@ -24,8 +24,8 @@ import java.util.concurrent.*; public class AltosEepromChunk { - static final int chunk_size = 256; - static final int per_line = 8; + public static final int chunk_size = 256; + public static final int per_line = 8; public int data[]; public int address; @@ -44,15 +44,15 @@ public class AltosEepromChunk { return array; } - int data(int offset) { + public int data(int offset) { return data[offset]; } - int data16(int offset) { + public int data16(int offset) { return data[offset] | (data[offset + 1] << 8); } - boolean erased(int start, int len) { + public boolean erased(int start, int len) { for (int i = 0; i < len; i++) if (data[start+i] != 0xff) return false; diff --git a/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromLog.java b/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromLog.java new file mode 100644 index 00000000..83b776b7 --- /dev/null +++ b/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromLog.java @@ -0,0 +1,102 @@ +/* + * Copyright © 2011 Keith Packard <keithp@keithp.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.AltosLib; + +import java.io.*; +import java.util.*; +import java.text.*; +import java.util.prefs.*; +import java.util.concurrent.*; + +/* + * Extract a bit of information from an eeprom-stored flight log. + */ + +public class AltosEepromLog { + public int serial; + public boolean has_flight; + public int flight; + public int start_block; + public int end_block; + + public int year, month, day; + + public boolean download; + public boolean delete; + + public AltosEepromLog(AltosConfigData config_data, + AltosLink link, + int in_flight, int in_start_block, + int in_end_block) + throws InterruptedException, TimeoutException { + + int block; + boolean has_date = false; + + flight = in_flight; + if (flight != 0) + has_flight = true; + start_block = in_start_block; + end_block = in_end_block; + serial = config_data.serial; + + /* + * By default, request that every log be downloaded but not deleted + */ + download = true; + delete = false; + + /* + * Look in TeleMetrum log data for date + */ + if (config_data.log_format == AltosLib.AO_LOG_FORMAT_UNKNOWN || + config_data.log_format == AltosLib.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(link, 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 == AltosLib.AO_LOG_FLIGHT) { + flight = r.b; + has_flight = true; + } + if (r.cmd == AltosLib.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; + } + } + } +} diff --git a/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromRecord.java b/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromRecord.java index b2f23c52..1e845f46 100644 --- a/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromRecord.java +++ b/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromRecord.java @@ -31,7 +31,7 @@ public class AltosEepromRecord { public String data; public boolean tick_valid; - static final int record_length = 8; + public static final int record_length = 8; public AltosEepromRecord (AltosEepromChunk chunk, int start) throws ParseException { |
