X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosLib.java;h=cf1fa1ed4e9b096949f83502a0fcdd67bd9210c0;hp=e82b1c73bf990f52883fe98cdbb6a48a78b89b12;hb=HEAD;hpb=87c8bb3956897830da1f7aaca2990a9571767b73 diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index e82b1c73..dd2a4bae 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -3,7 +3,8 @@ * * 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. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -15,7 +16,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_8; +package org.altusmetrum.altoslib_14; import java.util.*; import java.io.*; @@ -37,6 +38,20 @@ public class AltosLib { public static final int AO_LOG_GPS_DATE = 'Y'; public static final int AO_LOG_PRESSURE = 'P'; + public static boolean is_gps_cmd(int cmd) { + switch (cmd) { + case AltosLib.AO_LOG_GPS_POS: + case AltosLib.AO_LOG_GPS_TIME: + case AltosLib.AO_LOG_GPS_LAT: + case AltosLib.AO_LOG_GPS_LON: + case AltosLib.AO_LOG_GPS_ALT: + case AltosLib.AO_LOG_GPS_SAT: + case AltosLib.AO_LOG_GPS_DATE: + return true; + } + return false; + } + /* Added for header fields in eeprom files */ public static final int AO_LOG_CONFIG_VERSION = 1000; public static final int AO_LOG_MAIN_DEPLOY = 1001; @@ -102,7 +117,7 @@ public class AltosLib { public final static int product_altusmetrum = 0x000a; public final static int product_telemetrum = 0x000b; public final static int product_teledongle = 0x000c; - public final static int product_teleterra = 0x000d; + public final static int product_easytimer = 0x000d; public final static int product_telebt = 0x000e; public final static int product_telelaunch = 0x000f; public final static int product_telelco = 0x0010; @@ -117,6 +132,7 @@ public class AltosLib { public final static int product_usbtrng = 0x0029; public final static int product_usbrelay = 0x002a; public final static int product_mpusb = 0x002b; + public final static int product_easymotor = 0x002c; public final static int product_altusmetrum_min = 0x000a; public final static int product_altusmetrum_max = 0x002c; @@ -124,6 +140,13 @@ public class AltosLib { public final static int product_basestation = 0x10000 + 1; public final static int product_altimeter = 0x10000 + 2; + public final static int gps_builtin = 0; + public final static int gps_mosaic = 1; + + public final static String[] gps_receiver_names = { + "Builtin", "Mosaic-X5" + }; + private static class Product { final String name; final int product; @@ -138,7 +161,7 @@ public class AltosLib { new Product("telemetrum", product_telemetrum), new Product("teleballoon", product_telemetrum), new Product("teledongle", product_teledongle), - new Product("teleterra", product_teledongle), + new Product("easytimer", product_easytimer), new Product("telebt", product_telebt), new Product("telelaunch", product_telelaunch), new Product("telelco", product_telelco), @@ -149,7 +172,8 @@ public class AltosLib { new Product("telegps", product_telegps), new Product("easymini", product_easymini), new Product("telemini", product_telemini), - new Product("easymega", product_easymega) + new Product("easymega", product_easymega), + new Product("easymotor", product_easymotor) }; public static int name_to_product(String name) { @@ -161,6 +185,20 @@ public class AltosLib { return product_any; } + public static boolean has_9dof(int device_type) { + return device_type == product_telemega || device_type == product_easymega; + } + + public static boolean has_radio(int device_type) { + return device_type != product_easymini && device_type != product_easymega; + } + + public static boolean has_gps(int device_type) { + return device_type == product_telemetrum || + device_type == product_telemega || + device_type == product_telegps; + } + /* Bluetooth "identifier" (bluetooth sucks) */ public final static String bt_product_telebt = "TeleBT"; @@ -197,9 +235,37 @@ public class AltosLib { "Compressed", "Uncompressed" }; - public static final String launch_sites_url = "http://www.altusmetrum.org/AltOS/launch-sites.txt"; + public static final String[] ignite_mode_values = { + "Dual Deploy", + "Redundant Apogee", + "Redundant Main", + "Separation & Apogee", + }; + + public static final String[] pad_orientation_values_radio = { + "Antenna Up", + "Antenna Down", + }; + + public static final String[] pad_orientation_values_no_radio = { + "Beeper Up", + "Beeper Down", + }; + + public static String[] pad_orientation_values(boolean radio) { + if (radio) + return pad_orientation_values_radio; + else + return pad_orientation_values_no_radio; + } + + public static final String launch_sites_url = "https://maps.altusmetrum.org/launch-sites.txt"; + public static final String launch_sites_env = "LAUNCH_SITES"; // public static final String launch_sites_url = "file:///home/keithp/misc/text/altusmetrum/AltOS/launch-sites.txt"; + public static final String unit_info_url = "https://altusmetrum.org/cgi-bin/unitinfo.cgi?sn=%d"; + public static final String unit_info_env = "UNIT_INFO"; + public static final int ao_telemetry_standard_len = 32; public static final int ao_telemetry_0_9_len = 95; public static final int ao_telemetry_0_8_len = 94; @@ -322,19 +388,48 @@ public class AltosLib { public static final int AO_GPS_NUM_SAT_SHIFT = 0; public static final int AO_GPS_NUM_SAT_MASK = 0xf; + public static final int AO_PAD_ORIENTATION_ANTENNA_UP = 0; + public static final int AO_PAD_ORIENTATION_ANTENNA_DOWN = 1; + public static final int AO_PAD_ORIENTATION_WORDS_UPRIGHT = 2; + public static final int AO_PAD_ORIENTATION_WORDS_UPSIDEDOWN = 3; + public static final int AO_PAD_ORIENTATION_BIG_PARTS_UP = 4; + public static final int AO_PAD_ORIENTATION_BIG_PARTS_DOWN = 5; + public static final int AO_LOG_FORMAT_UNKNOWN = 0; public static final int AO_LOG_FORMAT_FULL = 1; public static final int AO_LOG_FORMAT_TINY = 2; public static final int AO_LOG_FORMAT_TELEMETRY = 3; public static final int AO_LOG_FORMAT_TELESCIENCE = 4; public static final int AO_LOG_FORMAT_TELEMEGA_OLD = 5; - public static final int AO_LOG_FORMAT_EASYMINI = 6; + public static final int AO_LOG_FORMAT_EASYMINI1 = 6; public static final int AO_LOG_FORMAT_TELEMETRUM = 7; - public static final int AO_LOG_FORMAT_TELEMINI = 8; + public static final int AO_LOG_FORMAT_TELEMINI2 = 8; public static final int AO_LOG_FORMAT_TELEGPS = 9; public static final int AO_LOG_FORMAT_TELEMEGA = 10; + public static final int AO_LOG_FORMAT_DETHERM = 11; + public static final int AO_LOG_FORMAT_TELEMINI3 = 12; + public static final int AO_LOG_FORMAT_TELEFIRETWO = 13; + public static final int AO_LOG_FORMAT_EASYMINI2 = 14; + public static final int AO_LOG_FORMAT_TELEMEGA_3 = 15; + public static final int AO_LOG_FORMAT_EASYMEGA_2 = 16; + public static final int AO_LOG_FORMAT_TELESTATIC = 17; + public static final int AO_LOG_FORMAT_MICROPEAK2 = 18; + public static final int AO_LOG_FORMAT_TELEMEGA_4 = 19; + public static final int AO_LOG_FORMAT_EASYMOTOR = 20; + public static final int AO_LOG_FORMAT_TELEMEGA_5 = 21; + public static final int AO_LOG_FORMAT_TELEMEGA_6 = 22; + public static final int AO_LOG_FORMAT_EASYTIMER_2 = 23; + public static final int AO_LOG_FORMAT_EASYMEGA_3 = 24; public static final int AO_LOG_FORMAT_NONE = 127; + public static final int model_mpu6000 = 0; + public static final int model_mpu9250 = 1; + public static final int model_adxl375 = 2; + public static final int model_bmx160 = 3; + public static final int model_hmc5883 = 4; + public static final int model_mmc5983 = 5; + public static final int model_bmi088 = 6; + public static boolean isspace(int c) { switch (c) { case ' ': @@ -492,9 +587,10 @@ public class AltosLib { return r; } - public static int fromdec(String s) throws NumberFormatException { - int c, v = 0; - int sign = 1; + public static long fromdec(String s) throws NumberFormatException { + int c; + long v = 0; + long sign = 1; for (int i = 0; i < s.length(); i++) { c = s.charAt(i); if (i == 0 && c == '-') { @@ -540,7 +636,7 @@ public class AltosLib { case product_altusmetrum: return "AltusMetrum"; case product_telemetrum: return "TeleMetrum"; case product_teledongle: return "TeleDongle"; - case product_teleterra: return "TeleTerra"; + case product_easytimer: return "EasyTimer"; case product_telebt: return "TeleBT"; case product_telelaunch: return "TeleLaunch"; case product_telelco: return "TeleLco"; @@ -551,11 +647,97 @@ public class AltosLib { case product_telegps: return "TeleGPS"; case product_easymini: return "EasyMini"; case product_telemini: return "TeleMini"; + case product_easymega: return "EasyMega"; + case product_easymotor: return "EasyMotor"; default: return "unknown"; } } - public static String ignitor_name(int i) { - return String.format("Ignitor %c", 'A' + i); + public static int product_id_from_log_format(int log_format) { + switch (log_format){ + case AO_LOG_FORMAT_UNKNOWN: + return product_altusmetrum; + case AO_LOG_FORMAT_FULL: + return product_telemetrum; + case AO_LOG_FORMAT_TINY: + return product_telemini; + case AO_LOG_FORMAT_TELEMETRY: + return product_altusmetrum; + case AO_LOG_FORMAT_TELESCIENCE: + return product_telescience; + case AO_LOG_FORMAT_TELEMEGA_OLD: + return product_telemega; + case AO_LOG_FORMAT_EASYMINI1: + return product_easymini; + case AO_LOG_FORMAT_TELEMETRUM: + return product_telemetrum; + case AO_LOG_FORMAT_TELEMINI2: + return product_telemini; + case AO_LOG_FORMAT_TELEGPS: + return product_telegps; + case AO_LOG_FORMAT_TELEMEGA: + return product_telemega; + case AO_LOG_FORMAT_DETHERM: + return product_altusmetrum; + case AO_LOG_FORMAT_TELEMINI3: + return product_telemini; + case AO_LOG_FORMAT_TELEFIRETWO: + return product_altusmetrum; + case AO_LOG_FORMAT_EASYMINI2: + return product_easymini; + case AO_LOG_FORMAT_TELEMEGA_3: + return product_telemega; + case AO_LOG_FORMAT_EASYMEGA_2: + case AO_LOG_FORMAT_EASYMEGA_3: + return product_easymega; + case AO_LOG_FORMAT_TELESTATIC: + return product_altusmetrum; + case AO_LOG_FORMAT_MICROPEAK2: + return product_altusmetrum; + case AO_LOG_FORMAT_TELEMEGA_4: + return product_telemega; + case AO_LOG_FORMAT_EASYMOTOR: + return product_easymotor; + case AO_LOG_FORMAT_TELEMEGA_5: + return product_telemega; + case AO_LOG_FORMAT_TELEMEGA_6: + return product_telemega; + case AO_LOG_FORMAT_NONE: + return product_altusmetrum; + default: + return product_altusmetrum; + } } + + public static String igniter_name(int i) { + return String.format("Igniter %c", 'A' + i); + } + + public static String igniter_short_name(int i) { + return String.format("igniter_%c", 'a' + i); + } + + public static AltosRecordSet record_set(File file) throws FileNotFoundException, IOException { + FileInputStream in; + in = new FileInputStream(file); + if (file.getName().endsWith("telem")) { + return new AltosTelemetryFile(in); + } else if (file.getName().endsWith("eeprom")) { + return new AltosEepromFile(in); + } else { + String name = file.getName(); + int dot = name.lastIndexOf('.'); + String extension; + + if (dot == -1) + throw new IOException(String.format("%s (Missing extension)", file.toString())); + else { + extension = name.substring(dot); + throw new IOException(String.format("%s (Invalid extension '%s')", + file.toString(), + extension)); + } + } + } + }