import java.awt.*;
import java.util.*;
import java.text.*;
+import java.nio.charset.Charset;
import libaltosJNI.*;
static final int AO_LOG_MANUFACTURER = 2000;
static final int AO_LOG_PRODUCT = 2001;
static final int AO_LOG_SERIAL_NUMBER = 2002;
+ static final int AO_LOG_LOG_FORMAT = 2003;
+
+ /* Added for header fields in megametrum files */
+ static final int AO_LOG_BARO_RESERVED = 3000;
+ static final int AO_LOG_BARO_SENS = 3001;
+ static final int AO_LOG_BARO_OFF = 3002;
+ static final int AO_LOG_BARO_TCS = 3004;
+ static final int AO_LOG_BARO_TCO = 3005;
+ static final int AO_LOG_BARO_TREF = 3006;
+ static final int AO_LOG_BARO_TEMPSENS = 3007;
+ static final int AO_LOG_BARO_CRC = 3008;
+
static final int AO_LOG_SOFTWARE_VERSION = 9999;
/* Added to flag invalid records */
/* Telemetry modes */
static final int ao_telemetry_off = 0;
- static final int ao_telemetry_full = 1;
- static final int ao_telemetry_tiny = 2;
+ static final int ao_telemetry_min = 1;
+ static final int ao_telemetry_standard = 1;
+ static final int ao_telemetry_0_9 = 2;
+ static final int ao_telemetry_0_8 = 3;
+ static final int ao_telemetry_max = 3;
+
+ static final String[] ao_telemetry_name = {
+ "Off", "Standard Telemetry", "TeleMetrum v0.9", "TeleMetrum v0.8"
+ };
+
+ static final String launch_sites_url = "http://www.altusmetrum.org/AltOS/launch-sites.txt";
+
+ static final int ao_telemetry_standard_len = 32;
+ static final int ao_telemetry_0_9_len = 95;
+ static final int ao_telemetry_0_8_len = 94;
+
+ static final int[] ao_telemetry_len = {
+ 0, 32, 95, 94
+ };
static HashMap<String,Integer> string_to_state = new HashMap<String,Integer>();
static final int tab_elt_pad = 5;
- static final Font label_font = new Font("Dialog", Font.PLAIN, 22);
- static final Font value_font = new Font("Monospaced", Font.PLAIN, 22);
- static final Font status_font = new Font("SansSerif", Font.BOLD, 24);
+ static Font label_font;
+ static Font value_font;
+ static Font status_font;
+ static Font table_label_font;
+ static Font table_value_font;
+
+ final static int font_size_small = 1;
+ final static int font_size_medium = 2;
+ final static int font_size_large = 3;
+
+ static void set_fonts(int size) {
+ int brief_size;
+ int table_size;
+ int status_size;
+
+ switch (size) {
+ case font_size_small:
+ brief_size = 16;
+ status_size = 18;
+ table_size = 11;
+ break;
+ default:
+ case font_size_medium:
+ brief_size = 22;
+ status_size = 24;
+ table_size = 14;
+ break;
+ case font_size_large:
+ brief_size = 26;
+ status_size = 30;
+ table_size = 17;
+ break;
+ }
+ label_font = new Font("Dialog", Font.PLAIN, brief_size);
+ value_font = new Font("Monospaced", Font.PLAIN, brief_size);
+ status_font = new Font("SansSerif", Font.BOLD, status_size);
+ table_label_font = new Font("SansSerif", Font.PLAIN, table_size);
+ table_value_font = new Font("Monospaced", Font.PLAIN, table_size);
+ }
- static final int text_width = 16;
+ static final int text_width = 20;
static void initialize_map()
{
string_to_state.put("fast", ao_flight_fast);
string_to_state.put("coast", ao_flight_coast);
string_to_state.put("drogue", ao_flight_drogue);
+ string_to_state.put("apogee", ao_flight_coast);
string_to_state.put("main", ao_flight_main);
string_to_state.put("landed", ao_flight_landed);
string_to_state.put("invalid", ao_flight_invalid);
map_initialized = true;
}
+ static int telemetry_len(int telemetry) {
+ if (telemetry <= ao_telemetry_max)
+ return ao_telemetry_len[telemetry];
+ throw new IllegalArgumentException(String.format("Invalid telemetry %d",
+ telemetry));
+ }
+
+ static String telemetry_name(int telemetry) {
+ if (telemetry <= ao_telemetry_max)
+ return ao_telemetry_name[telemetry];
+ throw new IllegalArgumentException(String.format("Invalid telemetry %d",
+ telemetry));
+ }
+
static String[] state_to_string = {
"startup",
"idle",
"invalid",
};
+ static String[] state_to_string_capital = {
+ "Startup",
+ "Idle",
+ "Pad",
+ "Boost",
+ "Fast",
+ "Coast",
+ "Drogue",
+ "Main",
+ "Landed",
+ "Invalid",
+ };
+
static public int state(String state) {
if (!map_initialized)
initialize_map();
static final int AO_GPS_NUM_SAT_SHIFT = 0;
static final int AO_GPS_NUM_SAT_MASK = 0xf;
+ static final int AO_LOG_FORMAT_UNKNOWN = 0;
+ static final int AO_LOG_FORMAT_FULL = 1;
+ static final int AO_LOG_FORMAT_TINY = 2;
+ static final int AO_LOG_FORMAT_TELEMETRY = 3;
+ static final int AO_LOG_FORMAT_TELESCIENCE = 4;
+ static final int AO_LOG_FORMAT_MEGAMETRUM = 5;
+ static final int AO_LOG_FORMAT_NONE = 127;
+
static boolean isspace(int c) {
switch (c) {
case ' ':
return -1;
}
+ static int int8(int[] bytes, int i) {
+ return (int) (byte) bytes[i];
+ }
+
+ static int uint8(int[] bytes, int i) {
+ return bytes[i];
+ }
+
+ static int int16(int[] bytes, int i) {
+ return (int) (short) (bytes[i] + (bytes[i+1] << 8));
+ }
+
+ static int uint16(int[] bytes, int i) {
+ return bytes[i] + (bytes[i+1] << 8);
+ }
+
+ static int uint32(int[] bytes, int i) {
+ return bytes[i] +
+ (bytes[i+1] << 8) +
+ (bytes[i+2] << 16) +
+ (bytes[i+3] << 24);
+ }
+
+ static final Charset unicode_set = Charset.forName("UTF-8");
+
+ static String string(int[] bytes, int s, int l) {
+ if (s + l > bytes.length) {
+ if (s > bytes.length) {
+ s = bytes.length;
+ l = 0;
+ } else {
+ l = bytes.length - s;
+ }
+ }
+
+ int i;
+ for (i = l - 1; i >= 0; i--)
+ if (bytes[s+i] != 0)
+ break;
+
+ l = i + 1;
+ byte[] b = new byte[l];
+
+ for (i = 0; i < l; i++)
+ b[i] = (byte) bytes[s+i];
+ String n = new String(b, unicode_set);
+ return n;
+ }
+
+ static int hexbyte(String s, int i) {
+ int c0, c1;
+
+ if (s.length() < i + 2)
+ throw new NumberFormatException(String.format("invalid hex \"%s\"", s));
+ c0 = s.charAt(i);
+ if (!Altos.ishex(c0))
+ throw new NumberFormatException(String.format("invalid hex \"%c\"", c0));
+ c1 = s.charAt(i+1);
+ if (!Altos.ishex(c1))
+ throw new NumberFormatException(String.format("invalid hex \"%c\"", c1));
+ return Altos.fromhex(c0) * 16 + Altos.fromhex(c1);
+ }
+
+ static int[] hexbytes(String s) {
+ int n;
+ int[] r;
+ int i;
+
+ if ((s.length() & 1) != 0)
+ throw new NumberFormatException(String.format("invalid line \"%s\"", s));
+ n = s.length() / 2;
+ r = new int[n];
+ for (i = 0; i < n; i++)
+ r[i] = Altos.hexbyte(s, i * 2);
+ return r;
+ }
+
static int fromdec(String s) throws NumberFormatException {
int c, v = 0;
int sign = 1;
libaltos.altos_init();
loaded_library = true;
} catch (UnsatisfiedLinkError e) {
- loaded_library = false;
+ try {
+ System.loadLibrary("altos64");
+ libaltos.altos_init();
+ loaded_library = true;
+ } catch (UnsatisfiedLinkError e2) {
+ loaded_library = false;
+ }
}
initialized = true;
}
}
static int usb_vendor_altusmetrum() {
- if (load_library())
- return libaltosConstants.USB_VENDOR_ALTUSMETRUM;
- return 0x000a;
+ load_library();
+ return 0xfffe;
}
static int usb_product_altusmetrum() {
- if (load_library())
- return libaltosConstants.USB_PRODUCT_ALTUSMETRUM;
+ load_library();
return 0x000a;
}
static int usb_product_altusmetrum_min() {
- if (load_library())
- return libaltosConstants.USB_PRODUCT_ALTUSMETRUM_MIN;
+ load_library();
return 0x000a;
}
static int usb_product_altusmetrum_max() {
- if (load_library())
- return libaltosConstants.USB_PRODUCT_ALTUSMETRUM_MAX;
- return 0x000d;
+ load_library();
+ return 0x0013;
}
static int usb_product_telemetrum() {
- if (load_library())
- return libaltosConstants.USB_PRODUCT_TELEMETRUM;
+ load_library();
return 0x000b;
}
static int usb_product_teledongle() {
- if (load_library())
- return libaltosConstants.USB_PRODUCT_TELEDONGLE;
+ load_library();
return 0x000c;
}
static int usb_product_teleterra() {
- if (load_library())
- return libaltosConstants.USB_PRODUCT_TELETERRA;
+ load_library();
return 0x000d;
}
static int usb_product_telebt() {
- if (load_library())
- return libaltosConstants.USB_PRODUCT_TELEBT;
+ load_library();
return 0x000e;
}
+ static int usb_product_telelaunch() {
+ load_library();
+ return 0x000f;
+ }
+
+ static int usb_product_telelco() {
+ load_library();
+ return 0x0010;
+ }
+
+ static int usb_product_telescience() {
+ load_library();
+ return 0x0011;
+ }
+
+ static int usb_product_telepyro() {
+ load_library();
+ return 0x0012;
+ }
+
public final static int vendor_altusmetrum = usb_vendor_altusmetrum();
public final static int product_altusmetrum = usb_product_altusmetrum();
public final static int product_telemetrum = usb_product_telemetrum();
public final static int product_teledongle = usb_product_teledongle();
public final static int product_teleterra = usb_product_teleterra();
public final static int product_telebt = usb_product_telebt();
+ public final static int product_telelaunch = usb_product_telelaunch();
+ public final static int product_tele10 = usb_product_telelco();
+ public final static int product_telescience = usb_product_telescience();
+ public final static int product_telepyro = usb_product_telepyro();
public final static int product_altusmetrum_min = usb_product_altusmetrum_min();
public final static int product_altusmetrum_max = usb_product_altusmetrum_max();
public final static int product_basestation = 0x10000 + 1;
static String bt_product_telebt() {
- if (load_library())
- return libaltosConstants.BLUETOOTH_PRODUCT_TELEBT;
+ load_library();
return "TeleBT";
}