X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altosui%2FAltosConfigData.java;h=0608b4d396ef2b98d7190a8d6529ec3e6f0a2689;hb=d77a4ea206d627635159f35c76c744687d4e633b;hp=710231d74c827fb7380c40f698dd5a04e6d8582f;hpb=bf06af154e232d4caa1585a1d6d5279a075292e4;p=fw%2Faltos diff --git a/altosui/AltosConfigData.java b/altosui/AltosConfigData.java index 710231d7..0608b4d3 100644 --- a/altosui/AltosConfigData.java +++ b/altosui/AltosConfigData.java @@ -49,12 +49,15 @@ public class AltosConfigData implements Iterable { int apogee_delay; int radio_channel; int radio_setting; + int radio_frequency; 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 { if (line.startsWith(label)) { @@ -83,10 +86,63 @@ public class AltosConfigData implements Iterable { return lines.iterator(); } + public int log_available() { + switch (log_format) { + case Altos.AO_LOG_FORMAT_TINY: + if (stored_flight == 0) + return 1; + return 0; + default: + if (flight_log_max <= 0) + return 1; + int log_space = storage_size - storage_erase_unit; + int log_used = stored_flight * flight_log_max; + + if (log_used >= log_space) + return 0; + return (log_space - log_used) / flight_log_max; + } + } + + int[] parse_version(String v) { + String[] parts = v.split("\\."); + int r[] = new int[parts.length]; + + for (int i = 0; i < parts.length; i++) { + try { + r[i] = Altos.fromdec(parts[i]); + } catch (NumberFormatException n) { + r[i] = 0; + } + } + + return r; + } + + public int compare_version(String other) { + int[] me = parse_version(version); + int[] them = parse_version(other); + + int l = Math.min(me.length, them.length); + + for (int i = 0; i < l; i++) { + int d = me[i] - them[i]; + if (d != 0) + return d; + } + if (me.length > l) + return 1; + if (them.length > l) + return -1; + return 0; + } + public AltosConfigData(AltosSerial serial_line) throws InterruptedException, TimeoutException { - serial_line.printf("c s\nv\n"); + serial_line.printf("c s\nf\nl\nv\n"); lines = new LinkedList(); radio_setting = 0; + radio_frequency = 0; + stored_flight = 0; for (;;) { String line = serial_line.get_reply(); if (line == null) @@ -100,6 +156,7 @@ public class AltosConfigData implements Iterable { try { apogee_delay = get_int(line, "Apogee delay:"); } catch (Exception e) {} try { radio_channel = get_int(line, "Radio channel:"); } catch (Exception e) {} try { radio_setting = get_int(line, "Radio setting:"); } catch (Exception e) {} + try { radio_frequency = get_int(line, "Frequency:"); } catch (Exception e) {} try { if (line.startsWith("Accel cal")) { String[] bits = line.split("\\s+"); @@ -116,6 +173,10 @@ public class AltosConfigData implements Iterable { try { version = get_string(line,"software-version"); } catch (Exception e) {} try { product = get_string(line,"product"); } catch (Exception e) {} + try { get_int(line, "flight"); stored_flight++; } catch (Exception e) {} + try { storage_size = get_int(line, "Storage size:"); } catch (Exception e) {} + try { storage_erase_unit = get_int(line, "Storage erase unit"); } catch (Exception e) {} + /* signals the end of the version info */ if (line.startsWith("software-version")) break;