X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosConfigData.java;h=edaf4601bbebc9632fb6b9ee8a8e83bc10cdf613;hp=24ab255602b2afe2cf22baf9db3cc873aca67b2f;hb=99c729495a8cc589718607ee35d22454c6af2994;hpb=bf88c5f829ea5d32043431945e862a9f6c96740a diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index 24ab2556..edaf4601 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_1; +package org.altusmetrum.altoslib_3; import java.util.*; import java.text.*; @@ -116,15 +116,31 @@ public class AltosConfigData implements Iterable { default: if (flight_log_max <= 0) return 1; + int log_max = flight_log_max * 1024; int log_space = storage_size - storage_erase_unit; - int log_used = stored_flight * flight_log_max; + int log_used; + + if (stored_flight <= 0) + log_used = 0; + else + log_used = stored_flight * log_max; + int log_avail; if (log_used >= log_space) - return 0; - return (log_space - log_used) / flight_log_max; + log_avail = 0; + else + log_avail = (log_space - log_used) / log_max; + + return log_avail; } } + public boolean has_monitor_battery() { + if (product.startsWith("TeleBT")) + return true; + return false; + } + int[] parse_version(String v) { String[] parts = v.split("\\."); int r[] = new int[parts.length]; @@ -196,7 +212,7 @@ public class AltosConfigData implements Iterable { storage_size = -1; storage_erase_unit = -1; - stored_flight = -1; + stored_flight = 0; } public void parse_line(String line) { @@ -272,7 +288,7 @@ public class AltosConfigData implements Iterable { /* Storage info replies */ try { storage_size = get_int(line, "Storage size:"); } catch (Exception e) {} - try { storage_erase_unit = get_int(line, "Storage erase unit"); } catch (Exception e) {} + try { storage_erase_unit = get_int(line, "Storage erase unit:"); } catch (Exception e) {} /* Log listing replies */ try { get_int(line, "flight"); stored_flight++; } catch (Exception e) {} @@ -320,6 +336,10 @@ public class AltosConfigData implements Iterable { public double frequency() { int channel = radio_channel; int setting = radio_setting; + + if (radio_frequency < 0 && channel < 0 && setting < 0) + return -1; + if (channel < 0) channel = 0; if (setting < 0) @@ -331,9 +351,22 @@ public class AltosConfigData implements Iterable { channel); } + boolean use_flash_for_config() { + if (product.startsWith("TeleMega")) + return false; + if (product.startsWith("TeleMetrum-v2")) + return false; + return true; + } + + public int log_limit() { - if (storage_size > 0 && storage_erase_unit > 0) { - int log_limit = storage_size - storage_erase_unit; + if (storage_size > 0) { + int log_limit = storage_size; + + if (storage_erase_unit > 0 && use_flash_for_config()) + log_limit -= storage_erase_unit; + if (log_limit > 0) return log_limit / 1024; } @@ -390,15 +423,20 @@ public class AltosConfigData implements Iterable { dest.set_radio_calibration(radio_calibration); dest.set_radio_frequency(frequency()); boolean max_enabled = true; + + if (log_limit() == 0) + max_enabled = false; + switch (log_format) { case AltosLib.AO_LOG_FORMAT_TINY: max_enabled = false; break; default: - if (stored_flight >= 0) + if (stored_flight > 0) max_enabled = false; break; } + dest.set_flight_log_max_enabled(max_enabled); dest.set_radio_enable(radio_enable); dest.set_flight_log_max_limit(log_limit()); @@ -466,7 +504,7 @@ public class AltosConfigData implements Iterable { /* UI doesn't support AES key config */ /* AO_PYRO_NUM */ - if (pyros.length > 0) { + if (npyro > 0) { for (int p = 0; p < pyros.length; p++) { link.printf("c P %s\n", pyros[p].toString()); @@ -485,11 +523,10 @@ public class AltosConfigData implements Iterable { reset(); link.printf("c s\nf\nv\n"); read_link(link, "software-version"); - System.out.printf("Log format %d\n", log_format); switch (log_format) { case AltosLib.AO_LOG_FORMAT_FULL: case AltosLib.AO_LOG_FORMAT_TINY: - case AltosLib.AO_LOG_FORMAT_MEGAMETRUM: + case AltosLib.AO_LOG_FORMAT_TELEMEGA: link.printf("l\n"); read_link(link, "done"); default: