From c8078d352a7f54a4a97d25af080155d3f875536a Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 16 Jun 2014 22:49:34 -0700 Subject: java: Bump java library versions for next release Prepare for future release by bumping java versions now Signed-off-by: Keith Packard --- altoslib/AltosLib.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'altoslib/AltosLib.java') diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index 69c6d604..ec32fffc 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_4; +package org.altusmetrum.altoslib_5; import java.util.*; import java.io.*; -- cgit v1.2.3 From 55e6558fa7cb23fb1363a86c83fbd6abf67ea324 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 2 Jul 2014 22:48:13 -0700 Subject: altoslib: Support multiple telemetry rates Altos now supports 2400 and 9600 baud in addition to the classic 38400 baud rate. Add support to altoslib for these as well Signed-off-by: Keith Packard --- altoslib/AltosConfigData.java | 9 +++++++ altoslib/AltosConfigValues.java | 4 ++++ altoslib/AltosFlightReader.java | 6 +++++ altoslib/AltosLib.java | 9 +++++++ altoslib/AltosLink.java | 14 ++++++++++- altoslib/AltosPreferences.java | 48 ++++++++++++++++++++++++++++++++++++++ altoslib/AltosTelemetryReader.java | 29 +++++++++++++++++++++++ 7 files changed, 118 insertions(+), 1 deletion(-) (limited to 'altoslib/AltosLib.java') diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index 3bf8ea43..847436cd 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -46,6 +46,7 @@ public class AltosConfigData implements Iterable { public String callsign; public int radio_enable; public int radio_calibration; + public int telemetry_rate; /* Old HAS_RADIO values */ public int radio_channel; public int radio_setting; @@ -235,6 +236,7 @@ public class AltosConfigData implements Iterable { radio_calibration = -1; radio_channel = -1; radio_setting = -1; + telemetry_rate = -1; accel_cal_plus = -1; accel_cal_minus = -1; @@ -292,6 +294,7 @@ public class AltosConfigData implements Iterable { try { callsign = get_string(line, "Callsign:"); } catch (Exception e) {} try { radio_enable = get_int(line, "Radio enable:"); } catch (Exception e) {} try { radio_calibration = get_int(line, "Radio cal:"); } catch (Exception e) {} + try { telemetry_rate = get_int(line, "Telemetry rate:"); } catch (Exception e) {} /* Old HAS_RADIO values */ try { radio_channel = get_int(line, "Radio channel:"); } catch (Exception e) {} @@ -440,6 +443,8 @@ public class AltosConfigData implements Iterable { callsign = source.callsign(); if (radio_calibration >= 0) radio_calibration = source.radio_calibration(); + if (telemetry_rate >= 0) + telemetry_rate = source.telemetry_rate(); /* HAS_ACCEL */ if (pad_orientation >= 0) @@ -484,6 +489,7 @@ public class AltosConfigData implements Iterable { dest.set_apogee_lockout(apogee_lockout); dest.set_radio_calibration(radio_calibration); dest.set_radio_frequency(frequency()); + dest.set_telemetry_rate(telemetry_rate); boolean max_enabled = true; if (log_space() == 0) @@ -554,6 +560,9 @@ public class AltosConfigData implements Iterable { if (radio_enable >= 0) link.printf("c e %d\n", radio_enable); + if (telemetry_rate >= 0) + link.printf("c T %d\n", telemetry_rate); + /* HAS_ACCEL */ /* UI doesn't support accel cal */ if (pad_orientation >= 0) diff --git a/altoslib/AltosConfigValues.java b/altoslib/AltosConfigValues.java index b0c49e98..987da53b 100644 --- a/altoslib/AltosConfigValues.java +++ b/altoslib/AltosConfigValues.java @@ -53,6 +53,10 @@ public interface AltosConfigValues { public abstract String callsign(); + public abstract void set_telemetry_rate(int new_telemetry_rate); + + public abstract int telemetry_rate() throws AltosConfigDataException; + public abstract void set_flight_log_max(int new_flight_log_max); public abstract void set_flight_log_max_enabled(boolean enable); diff --git a/altoslib/AltosFlightReader.java b/altoslib/AltosFlightReader.java index ac151396..c0565e88 100644 --- a/altoslib/AltosFlightReader.java +++ b/altoslib/AltosFlightReader.java @@ -38,12 +38,18 @@ public class AltosFlightReader { public void set_telemetry(int telemetry) { } + public void set_telemetry_rate(int telemetry_rate) throws InterruptedException, TimeoutException { } + public void save_telemetry() { } + public void save_telemetry_rate() { } + public void update(AltosState state) throws InterruptedException { } public boolean supports_telemetry(int telemetry) { return false; } + public boolean supports_telemetry_rate(int telemetry_rate) { return false; } + public File backing_file() { return null; } public boolean has_monitor_battery() throws InterruptedException { return false; } diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index ec32fffc..c2ec0e3b 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -161,6 +161,15 @@ public class AltosLib { "Off", "Standard Telemetry", "TeleMetrum v0.9", "TeleMetrum v0.8" }; + public static final int ao_telemetry_rate_38400 = 0; + public static final int ao_telemetry_rate_9600 = 1; + public static final int ao_telemetry_rate_2400 = 2; + public static final int ao_telemetry_rate_max = 2; + + public static final Integer[] ao_telemetry_rate_values = { + 38400, 9600, 2400 + }; + public static final String launch_sites_url = "http://www.altusmetrum.org/AltOS/launch-sites.txt"; public static final int ao_telemetry_standard_len = 32; diff --git a/altoslib/AltosLink.java b/altoslib/AltosLink.java index ef40c8cb..eadab5df 100644 --- a/altoslib/AltosLink.java +++ b/altoslib/AltosLink.java @@ -274,6 +274,8 @@ public abstract class AltosLink implements Runnable { } public void flush_output() { + if (pending_output == null) + return; for (String s : pending_output) System.out.print(s); pending_output.clear(); @@ -305,6 +307,7 @@ public abstract class AltosLink implements Runnable { */ public boolean monitor_mode = false; public int telemetry = AltosLib.ao_telemetry_standard; + public int telemetry_rate = AltosLib.ao_telemetry_rate_38400; public double frequency; public String callsign; AltosConfigData config_data; @@ -356,6 +359,15 @@ public abstract class AltosLink implements Runnable { flush_output(); } + public void set_telemetry_rate(int in_telemetry_rate) { + telemetry_rate = in_telemetry_rate; + if (monitor_mode) + printf("m 0\nc T %d\nm %x\n", telemetry_rate, telemetry_len()); + else + printf("c T %d\n", telemetry_rate); + flush_output(); + } + public void set_monitor(boolean monitor) { monitor_mode = monitor; if (monitor) @@ -383,7 +395,7 @@ public abstract class AltosLink implements Runnable { flush_output(); } - public AltosConfigData config_data() throws InterruptedException, TimeoutException { + public AltosConfigData config_data() throws InterruptedException, TimeoutException { synchronized(config_data_lock) { if (config_data == null) { printf("m 0\n"); diff --git a/altoslib/AltosPreferences.java b/altoslib/AltosPreferences.java index 159951e4..72cfeb4b 100644 --- a/altoslib/AltosPreferences.java +++ b/altoslib/AltosPreferences.java @@ -35,6 +35,9 @@ public class AltosPreferences { /* telemetry format preference name */ public final static String telemetryPreferenceFormat = "TELEMETRY-%d"; + /* telemetry rate format preference name */ + public final static String telemetryRatePreferenceFormat = "RATE-%d"; + /* voice preference name */ public final static String voicePreference = "VOICE"; @@ -50,6 +53,9 @@ public class AltosPreferences { /* scanning telemetry preferences name */ public final static String scanningTelemetryPreference = "SCANNING-TELEMETRY"; + /* scanning telemetry rate preferences name */ + public final static String scanningTelemetryRatePreference = "SCANNING-RATE"; + /* Launcher serial preference name */ public final static String launcherSerialPreference = "LAUNCHER-SERIAL"; @@ -74,6 +80,9 @@ public class AltosPreferences { /* Telemetry (map serial to telemetry format) */ public static Hashtable telemetries; + /* Telemetry rate (map serial to telemetry format) */ + public static Hashtable telemetry_rates; + /* Voice preference */ public static boolean voice; @@ -86,6 +95,8 @@ public class AltosPreferences { /* Scanning telemetry */ public static int scanning_telemetry; + public static int scanning_telemetry_rate; + /* List of frequencies */ public final static String common_frequencies_node_name = "COMMON-FREQUENCIES"; public static AltosFrequency[] common_frequencies; @@ -159,12 +170,16 @@ public class AltosPreferences { telemetries = new Hashtable(); + telemetry_rates = new Hashtable(); + voice = backend.getBoolean(voicePreference, true); callsign = backend.getString(callsignPreference,"N0CALL"); scanning_telemetry = backend.getInt(scanningTelemetryPreference,(1 << AltosLib.ao_telemetry_standard)); + scanning_telemetry_rate = backend.getInt(scanningTelemetryRatePreference,(1 << AltosLib.ao_telemetry_rate_38400)); + launcher_serial = backend.getInt(launcherSerialPreference, 0); launcher_channel = backend.getInt(launcherChannelPreference, 0); @@ -266,6 +281,25 @@ public class AltosPreferences { } } + public static void set_telemetry_rate(int serial, int new_telemetry_rate) { + synchronized (backend) { + telemetry_rates.put(serial, new_telemetry_rate); + backend.putInt(String.format(telemetryRatePreferenceFormat, serial), new_telemetry_rate); + flush_preferences(); + } + } + + public static int telemetry_rate(int serial) { + synchronized (backend) { + if (telemetry_rates.containsKey(serial)) + return telemetry_rates.get(serial); + int telemetry_rate = backend.getInt(String.format(telemetryRatePreferenceFormat, serial), + AltosLib.ao_telemetry_rate_38400); + telemetry_rates.put(serial, telemetry_rate); + return telemetry_rate; + } + } + public static void set_scanning_telemetry(int new_scanning_telemetry) { synchronized (backend) { scanning_telemetry = new_scanning_telemetry; @@ -280,6 +314,20 @@ public class AltosPreferences { } } + public static void set_scanning_telemetry_rate(int new_scanning_telemetry_rate) { + synchronized (backend) { + scanning_telemetry_rate = new_scanning_telemetry_rate; + backend.putInt(scanningTelemetryRatePreference, scanning_telemetry_rate); + flush_preferences(); + } + } + + public static int scanning_telemetry_rate() { + synchronized(backend) { + return scanning_telemetry_rate; + } + } + public static void set_voice(boolean new_voice) { synchronized (backend) { voice = new_voice; diff --git a/altoslib/AltosTelemetryReader.java b/altoslib/AltosTelemetryReader.java index 589f57f2..5ed50134 100644 --- a/altoslib/AltosTelemetryReader.java +++ b/altoslib/AltosTelemetryReader.java @@ -26,6 +26,7 @@ public class AltosTelemetryReader extends AltosFlightReader { AltosLog log; double frequency; int telemetry; + int telemetry_rate; AltosState state = null; LinkedBlockingQueue telem; @@ -92,6 +93,23 @@ public class AltosTelemetryReader extends AltosFlightReader { } } + public boolean supports_telemetry_rate(int telemetry_rate) { + try { + /* Version 1.4.1.1 supports all rates, older versions don't */ + if (link.config_data().compare_version("1.4.1.1") >= 0) + return true; + + if (telemetry_rate == AltosLib.ao_telemetry_rate_38400) + return true; + else + return false; + } catch (InterruptedException ie) { + return false; + } catch (TimeoutException te) { + return true; + } + } + public void save_frequency() { AltosPreferences.set_frequency(link.serial, frequency); } @@ -105,6 +123,15 @@ public class AltosTelemetryReader extends AltosFlightReader { AltosPreferences.set_telemetry(link.serial, telemetry); } + public void set_telemetry_rate(int in_telemetry_rate) { + telemetry_rate = in_telemetry_rate; + link.set_telemetry_rate(telemetry_rate); + } + + public void save_telemetry_rate() { + AltosPreferences.set_telemetry_rate(link.serial, telemetry_rate); + } + public void set_monitor(boolean monitor) { link.set_monitor(monitor); } @@ -133,6 +160,8 @@ public class AltosTelemetryReader extends AltosFlightReader { set_frequency(frequency); telemetry = AltosPreferences.telemetry(link.serial); set_telemetry(telemetry); + telemetry_rate = AltosPreferences.telemetry_rate(link.serial); + set_telemetry_rate(telemetry_rate); link.add_monitor(telem); success = true; } finally { -- cgit v1.2.3 From b8fa4e9a077e8e04b922d0c434c139ad0a57ee66 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 10 Jul 2014 16:15:52 -0700 Subject: altoslib: Clean up GPS DOP support in AltosState Parse out hdop/pdop/vdop from telem and eeprom. Deal with legacy eeprom files that have dop/100 instead of dop/10 values. Clear state DOP values to MISSING at startup Signed-off-by: Keith Packard --- altoslib/AltosEepromGPS.java | 17 +++++++++++++++-- altoslib/AltosEepromMega.java | 17 +++++++++++++++-- altoslib/AltosEepromMetrum2.java | 2 ++ altoslib/AltosGPS.java | 36 +++++++++++++++++++++++++----------- altoslib/AltosLib.java | 25 +++++++++++++++++++++++++ altoslib/AltosState.java | 6 ++++++ altoslib/AltosTelemetryLegacy.java | 2 ++ altoslib/AltosTelemetryLocation.java | 5 +++-- altoslib/AltosWriter.java | 2 -- 9 files changed, 93 insertions(+), 19 deletions(-) (limited to 'altoslib/AltosLib.java') diff --git a/altoslib/AltosEepromGPS.java b/altoslib/AltosEepromGPS.java index 2514b4fc..46a2173d 100644 --- a/altoslib/AltosEepromGPS.java +++ b/altoslib/AltosEepromGPS.java @@ -118,8 +118,21 @@ public class AltosEepromGPS extends AltosEeprom { gps.ground_speed = ground_speed() * 1.0e-2; gps.course = course() * 2; gps.climb_rate = climb_rate() * 1.0e-2; - gps.hdop = hdop(); - gps.vdop = vdop(); + if (state.compare_version("1.4.9") >= 0) { + gps.pdop = pdop() / 10.0; + gps.hdop = hdop() / 10.0; + gps.vdop = vdop() / 10.0; + } else { + gps.pdop = pdop() / 100.0; + if (gps.pdop < 0.8) + gps.pdop += 2.56; + gps.hdop = hdop() / 100.0; + if (gps.hdop < 0.8) + gps.hdop += 2.56; + gps.vdop = vdop() / 100.0; + if (gps.vdop < 0.8) + gps.vdop += 2.56; + } break; } } diff --git a/altoslib/AltosEepromMega.java b/altoslib/AltosEepromMega.java index 5d5f3fef..1616de77 100644 --- a/altoslib/AltosEepromMega.java +++ b/altoslib/AltosEepromMega.java @@ -187,8 +187,21 @@ public class AltosEepromMega extends AltosEeprom { gps.ground_speed = ground_speed() * 1.0e-2; gps.course = course() * 2; gps.climb_rate = climb_rate() * 1.0e-2; - gps.hdop = hdop(); - gps.vdop = vdop(); + if (state.compare_version("1.4.9") >= 0) { + gps.pdop = pdop() / 10.0; + gps.hdop = hdop() / 10.0; + gps.vdop = vdop() / 10.0; + } else { + gps.pdop = pdop() / 100.0; + if (gps.pdop < 0.8) + gps.pdop += 2.56; + gps.hdop = hdop() / 100.0; + if (gps.hdop < 0.8) + gps.hdop += 2.56; + gps.vdop = vdop() / 100.0; + if (gps.vdop < 0.8) + gps.vdop += 2.56; + } break; case AltosLib.AO_LOG_GPS_SAT: state.set_tick(tick); diff --git a/altoslib/AltosEepromMetrum2.java b/altoslib/AltosEepromMetrum2.java index 24277118..2f43879e 100644 --- a/altoslib/AltosEepromMetrum2.java +++ b/altoslib/AltosEepromMetrum2.java @@ -59,6 +59,7 @@ public class AltosEepromMetrum2 extends AltosEeprom { public int year() { return data8(4); } public int month() { return data8(5); } public int day() { return data8(6); } + public int pdop() { return data8(7); } /* AO_LOG_GPS_SAT elements */ public int nsat() { return data8(0); } @@ -136,6 +137,7 @@ public class AltosEepromMetrum2 extends AltosEeprom { gps.year = 2000 + year(); gps.month = month(); gps.day = day(); + gps.pdop = pdop() / 10.0; break; case AltosLib.AO_LOG_GPS_SAT: gps = state.make_temp_gps(true); diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java index aabcfc5b..0154e95d 100644 --- a/altoslib/AltosGPS.java +++ b/altoslib/AltosGPS.java @@ -40,10 +40,11 @@ public class AltosGPS implements Cloneable { public double ground_speed; /* m/s */ public int course; /* degrees */ public double climb_rate; /* m/s */ + public double pdop; /* unitless */ public double hdop; /* unitless */ public double vdop; /* unitless */ - public int h_error; /* m */ - public int v_error; /* m */ + public double h_error; /* m */ + public double v_error; /* m */ public AltosGPSSat[] cc_gps_sat; /* tracking data */ @@ -95,6 +96,7 @@ public class AltosGPS implements Cloneable { AltosLib.MISSING, 1/100.0); course = map.get_int(AltosTelemetryLegacy.AO_TELEM_GPS_COURSE, AltosLib.MISSING); + pdop = map.get_double(AltosTelemetryLegacy.AO_TELEM_GPS_PDOP, MISSING, 1.0); hdop = map.get_double(AltosTelemetryLegacy.AO_TELEM_GPS_HDOP, MISSING, 1.0); vdop = map.get_double(AltosTelemetryLegacy.AO_TELEM_GPS_VDOP, MISSING, 1.0); h_error = map.get_int(AltosTelemetryLegacy.AO_TELEM_GPS_HERROR, MISSING); @@ -268,14 +270,26 @@ public class AltosGPS implements Cloneable { cc_gps_sat[cc_gps_sat.length - 1] = sat; } - public AltosGPS() { + private void init() { lat = AltosLib.MISSING; lon = AltosLib.MISSING; alt = AltosLib.MISSING; + ground_speed = AltosLib.MISSING; + course = AltosLib.MISSING; + climb_rate = AltosLib.MISSING; + pdop = AltosLib.MISSING; + hdop = AltosLib.MISSING; + vdop = AltosLib.MISSING; + h_error = AltosLib.MISSING; + v_error = AltosLib.MISSING; ClearGPSTime(); cc_gps_sat = null; } + public AltosGPS() { + init(); + } + public AltosGPS clone() { AltosGPS g = new AltosGPS(); @@ -295,7 +309,9 @@ public class AltosGPS implements Cloneable { g.ground_speed = ground_speed; /* m/s */ g.course = course; /* degrees */ g.climb_rate = climb_rate; /* m/s */ - g.hdop = hdop; /* unitless? */ + g.pdop = pdop; /* unitless */ + g.hdop = hdop; /* unitless */ + g.vdop = vdop; /* unitless */ g.h_error = h_error; /* m */ g.v_error = v_error; /* m */ @@ -327,9 +343,11 @@ public class AltosGPS implements Cloneable { ground_speed = old.ground_speed; /* m/s */ course = old.course; /* degrees */ climb_rate = old.climb_rate; /* m/s */ + pdop = old.pdop; /* unitless? */ hdop = old.hdop; /* unitless? */ - h_error = old.h_error; /* m */ - v_error = old.v_error; /* m */ + vdop = old.vdop; /* unitless? */ + h_error = old.h_error; /* m */ + v_error = old.v_error; /* m */ if (old.cc_gps_sat != null) { cc_gps_sat = new AltosGPSSat[old.cc_gps_sat.length]; @@ -340,11 +358,7 @@ public class AltosGPS implements Cloneable { } } } else { - lat = AltosLib.MISSING; - lon = AltosLib.MISSING; - alt = AltosLib.MISSING; - ClearGPSTime(); - cc_gps_sat = null; + init(); } } diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index c2ec0e3b..eb188d6b 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -215,6 +215,31 @@ public class AltosLib { telemetry)); } + private static int[] split_version(String version) { + String[] tokens = version.split("\\."); + int[] ret = new int[tokens.length]; + for (int i = 0; i < tokens.length; i++) + ret[i] = Integer.parseInt(tokens[i]); + return ret; + } + + public static int compare_version(String version_a, String version_b) { + int[] a = split_version(version_a); + int[] b = split_version(version_b); + + for (int i = 0; i < Math.min(a.length, b.length); i++) { + if (a[i] < b[i]) + return -1; + if (a[i] > b[i]) + return 1; + } + if (a.length < b.length) + return -1; + if (a.length > b.length) + return 1; + return 0; + } + private static String[] state_to_string = { "startup", "idle", diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index 5e7908af..2fc13b44 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -1024,6 +1024,12 @@ public class AltosState implements Cloneable { firmware_version = version; } + public int compare_version(String other_version) { + if (firmware_version == null) + return AltosLib.MISSING; + return AltosLib.compare_version(firmware_version, other_version); + } + private void re_init() { int bt = boost_tick; int rs = receiver_serial; diff --git a/altoslib/AltosTelemetryLegacy.java b/altoslib/AltosTelemetryLegacy.java index b7aae3c4..72a8bc4a 100644 --- a/altoslib/AltosTelemetryLegacy.java +++ b/altoslib/AltosTelemetryLegacy.java @@ -186,6 +186,7 @@ public class AltosTelemetryLegacy extends AltosTelemetry { * g_v GPS vertical speed (integer, cm/sec) * g_s GPS horizontal speed (integer, cm/sec) * g_c GPS course (integer, 0-359) + * g_pd GPS pdop (integer * 10) * g_hd GPS hdop (integer * 10) * g_vd GPS vdop (integer * 10) * g_he GPS h error (integer) @@ -209,6 +210,7 @@ public class AltosTelemetryLegacy extends AltosTelemetry { final static String AO_TELEM_GPS_VERTICAL_SPEED = "g_v"; final static String AO_TELEM_GPS_HORIZONTAL_SPEED = "g_g"; final static String AO_TELEM_GPS_COURSE = "g_c"; + final static String AO_TELEM_GPS_PDOP = "g_pd"; final static String AO_TELEM_GPS_HDOP = "g_hd"; final static String AO_TELEM_GPS_VDOP = "g_vd"; final static String AO_TELEM_GPS_HERROR = "g_he"; diff --git a/altoslib/AltosTelemetryLocation.java b/altoslib/AltosTelemetryLocation.java index 32ca7608..9d50e2fa 100644 --- a/altoslib/AltosTelemetryLocation.java +++ b/altoslib/AltosTelemetryLocation.java @@ -80,8 +80,9 @@ public class AltosTelemetryLocation extends AltosTelemetryStandard { gps.ground_speed = ground_speed * 1.0e-2; gps.course = course * 2; gps.climb_rate = climb_rate * 1.0e-2; - gps.hdop = hdop; - gps.vdop = vdop; + gps.pdop = pdop / 10.0; + gps.hdop = hdop / 10.0; + gps.vdop = vdop / 10.0; } state.set_temp_gps(); } diff --git a/altoslib/AltosWriter.java b/altoslib/AltosWriter.java index 9df52250..fb208b02 100644 --- a/altoslib/AltosWriter.java +++ b/altoslib/AltosWriter.java @@ -19,8 +19,6 @@ package org.altusmetrum.altoslib_5; public interface AltosWriter { - public void write(AltosState state); - public void write(AltosStateIterable states); public void close(); -- cgit v1.2.3 From 9e9151c3b4bb9ce329e1b44440a7aceb9f39b9a0 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 14 Jul 2014 00:45:13 -0700 Subject: altoslib: Parse eeprom 'altitude-32' fields This lets us tell if the altimeter supports 32-bit GPS altitudes in the eeprom log. Signed-off-by: Keith Packard --- altoslib/AltosEepromHeader.java | 35 +++++++++++++++++++++++++++++++++++ altoslib/AltosLib.java | 14 ++++++++++++++ 2 files changed, 49 insertions(+) (limited to 'altoslib/AltosLib.java') diff --git a/altoslib/AltosEepromHeader.java b/altoslib/AltosEepromHeader.java index 47e9eceb..71030655 100644 --- a/altoslib/AltosEepromHeader.java +++ b/altoslib/AltosEepromHeader.java @@ -96,6 +96,22 @@ public class AltosEepromHeader extends AltosEeprom { case AltosLib.AO_LOG_SOFTWARE_VERSION: state.set_firmware_version(data); break; + case AltosLib.AO_LOG_FREQUENCY: + case AltosLib.AO_LOG_APOGEE_LOCKOUT: + case AltosLib.AO_LOG_RADIO_RATE: + case AltosLib.AO_LOG_IGNITE_MODE: + case AltosLib.AO_LOG_PAD_ORIENTATION: + case AltosLib.AO_LOG_RADIO_ENABLE: + case AltosLib.AO_LOG_AES_KEY: + case AltosLib.AO_LOG_APRS: + case AltosLib.AO_LOG_BEEP_SETTING: + case AltosLib.AO_LOG_TRACKER_SETTING: + case AltosLib.AO_LOG_PYRO_TIME: + case AltosLib.AO_LOG_APRS_ID: + break; + case AltosLib.AO_LOG_ALTITUDE_32: + state.set_altitude_32(config_a); + break; } } @@ -161,6 +177,22 @@ public class AltosEepromHeader extends AltosEeprom { case AltosLib.AO_LOG_BARO_CRC: out.printf ("# Baro crc: %d\n", config_a); break; + case AltosLib.AO_LOG_FREQUENCY: + case AltosLib.AO_LOG_APOGEE_LOCKOUT: + case AltosLib.AO_LOG_RADIO_RATE: + case AltosLib.AO_LOG_IGNITE_MODE: + case AltosLib.AO_LOG_PAD_ORIENTATION: + case AltosLib.AO_LOG_RADIO_ENABLE: + case AltosLib.AO_LOG_AES_KEY: + case AltosLib.AO_LOG_APRS: + case AltosLib.AO_LOG_BEEP_SETTING: + case AltosLib.AO_LOG_TRACKER_SETTING: + case AltosLib.AO_LOG_PYRO_TIME: + case AltosLib.AO_LOG_APRS_ID: + break; + case AltosLib.AO_LOG_ALTITUDE_32: + out.printf("# Altitude-32: %d\n", config_a); + break; } } @@ -205,6 +237,9 @@ public class AltosEepromHeader extends AltosEeprom { } else if (tokens[0].equals("log-format")) { cmd = AltosLib.AO_LOG_LOG_FORMAT; config_a = Integer.parseInt(tokens[1]); + } else if (tokens[0].equals("altitude-32")) { + cmd = AltosLib.AO_LOG_ALTITUDE_32; + config_a = Integer.parseInt(tokens[1]); } else if (tokens[0].equals("software-version")) { cmd = AltosLib.AO_LOG_SOFTWARE_VERSION; data = tokens[1]; diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index eb188d6b..68bdd17f 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -51,6 +51,20 @@ public class AltosLib { public static final int AO_LOG_SERIAL_NUMBER = 2002; public static final int AO_LOG_LOG_FORMAT = 2003; + public static final int AO_LOG_FREQUENCY = 2004; + public static final int AO_LOG_APOGEE_LOCKOUT = 2005; + public static final int AO_LOG_RADIO_RATE = 2006; + public static final int AO_LOG_IGNITE_MODE = 2007; + public static final int AO_LOG_PAD_ORIENTATION = 2008; + public static final int AO_LOG_RADIO_ENABLE = 2009; + public static final int AO_LOG_AES_KEY = 2010; + public static final int AO_LOG_APRS = 2011; + public static final int AO_LOG_BEEP_SETTING = 2012; + public static final int AO_LOG_TRACKER_SETTING = 2013; + public static final int AO_LOG_PYRO_TIME = 2014; + public static final int AO_LOG_APRS_ID = 2015; + public static final int AO_LOG_ALTITUDE_32 = 2016; + /* Added for header fields in telemega files */ public static final int AO_LOG_BARO_RESERVED = 3000; public static final int AO_LOG_BARO_SENS = 3001; -- cgit v1.2.3 From ef1dd370564b99da033109f2fb5f7bf29711a13f Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 17 Aug 2014 20:53:31 -0700 Subject: altoslib: Improve performance of AltosLib.hexbytes On an android device, this function was spending quite a bit of time calling hexbyte. Open code the conversion to improve performance. Signed-off-by: Keith Packard --- altoslib/AltosLib.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'altoslib/AltosLib.java') diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index 68bdd17f..c3c1226e 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -329,7 +329,7 @@ public class AltosLib { return false; } - public static boolean ishex(int c) { + public static final boolean ishex(int c) { if ('0' <= c && c <= '9') return true; if ('a' <= c && c <= 'f') @@ -339,7 +339,7 @@ public class AltosLib { return false; } - public static boolean ishex(String s) { + public static final boolean ishex(String s) { for (int i = 0; i < s.length(); i++) if (!ishex(s.charAt(i))) return false; @@ -463,10 +463,17 @@ public class AltosLib { if ((s.length() & 1) != 0) throw new NumberFormatException(String.format("invalid line \"%s\"", s)); - n = s.length() / 2; + byte[] bytes = s.getBytes(unicode_set); + n = bytes.length / 2; r = new int[n]; - for (i = 0; i < n; i++) - r[i] = hexbyte(s, i * 2); + for (i = 0; i < n; i++) { + int h = fromhex(bytes[(i << 1)]); + int l = fromhex(bytes[(i << 1) + 1]); + if (h < 0 || l < 0) + throw new NumberFormatException(String.format("invalid hex \"%c%c\"", + bytes[(i<<1)], bytes[(i<<1) + 1])); + r[i] = (h << 4) + l; + } return r; } -- cgit v1.2.3 From cef3be371cb3a9e481c2bd6abdf22c51953773f1 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 9 Sep 2014 09:37:13 -0700 Subject: altoslib/altosuilib: Add EasyMega support This makes flashing find the right files, and Monitor Idle show all of the state data. Signed-off-by: Keith Packard --- altoslib/AltosConfigData.java | 2 ++ altoslib/AltosIdleFetch.java | 4 ++++ altoslib/AltosLib.java | 4 +++- altosuilib/AltosFlashUI.java | 1 + altosuilib/AltosUSBDevice.java | 1 + 5 files changed, 11 insertions(+), 1 deletion(-) (limited to 'altoslib/AltosLib.java') diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index 4ada1d3b..fc1f2442 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -429,6 +429,8 @@ public class AltosConfigData implements Iterable { return false; if (product.startsWith("TeleMetrum-v2")) return false; + if (product.startsWith("EasyMega")) + return false; return true; } diff --git a/altoslib/AltosIdleFetch.java b/altoslib/AltosIdleFetch.java index 1cb43d6d..50745d97 100644 --- a/altoslib/AltosIdleFetch.java +++ b/altoslib/AltosIdleFetch.java @@ -118,6 +118,10 @@ public class AltosIdleFetch implements AltosStateUpdate { AltosIdler.idle_ms5607, AltosIdler.idle_mma655x, AltosIdler.idle_imu, AltosIdler.idle_mag, AltosIdler.idle_sensor_mega), + new AltosIdler("EasyMega", + AltosIdler.idle_ms5607, AltosIdler.idle_mma655x, + AltosIdler.idle_imu, AltosIdler.idle_mag, + AltosIdler.idle_sensor_mega), }; AltosLink link; diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index c3c1226e..2e9dc648 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -112,6 +112,7 @@ public class AltosLib { public final static int product_telegps = 0x0025; public final static int product_easymini = 0x0026; public final static int product_telemini = 0x0027; + public final static int product_easymega = 0x0028; public final static int product_altusmetrum_min = 0x000a; public final static int product_altusmetrum_max = 0x002c; @@ -143,7 +144,8 @@ public class AltosLib { new Product("megadongle", product_megadongle), new Product("telegps", product_telegps), new Product("easymini", product_easymini), - new Product("telemini", product_telemini) + new Product("telemini", product_telemini), + new Product("easymega", product_easymega) }; public static int name_to_product(String name) { diff --git a/altosuilib/AltosFlashUI.java b/altosuilib/AltosFlashUI.java index 0ed4e75d..44be2a90 100644 --- a/altosuilib/AltosFlashUI.java +++ b/altosuilib/AltosFlashUI.java @@ -213,6 +213,7 @@ public class AltosFlashUI new AltosHexfileFilter(AltosLib.product_teledongle, "teledongle", "TeleDongle Image"), new AltosHexfileFilter(AltosLib.product_telemega, "telemega", "TeleMega Image"), new AltosHexfileFilter(AltosLib.product_easymini, "easymini", "EasyMini Image"), + new AltosHexfileFilter(AltosLib.product_easymega, "easymega", "EasyMega Image"), }; boolean select_source_file() { diff --git a/altosuilib/AltosUSBDevice.java b/altosuilib/AltosUSBDevice.java index a8323704..f4906a73 100644 --- a/altosuilib/AltosUSBDevice.java +++ b/altosuilib/AltosUSBDevice.java @@ -79,6 +79,7 @@ public class AltosUSBDevice extends altos_device implements AltosDevice { if (want_product == AltosUILib.product_altimeter) return have_product == AltosUILib.product_telemetrum || have_product == AltosUILib.product_telemega || + have_product == AltosUILib.product_easymega || have_product == AltosUILib.product_telegps || have_product == AltosUILib.product_easymini || have_product == AltosUILib.product_telemini; -- cgit v1.2.3