From b25785ee0afebaf516b8a1b8d08d36fbdadd74ca Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 9 May 2016 11:33:48 -0700 Subject: altos/cc1111: Use SW to drive UART RTS pin Can't get the hw to work. Signed-off-by: Keith Packard --- src/cc1111/ao_serial.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/src/cc1111/ao_serial.c b/src/cc1111/ao_serial.c index 81727836..b4f57908 100644 --- a/src/cc1111/ao_serial.c +++ b/src/cc1111/ao_serial.c @@ -42,6 +42,18 @@ const __code struct ao_serial_speed ao_serial_speeds[] = { #define AO_SERIAL_SPEED_MAX AO_SERIAL_SPEED_115200 +#if HAS_SERIAL_1_ALT_1 +#define SERIAL_1_RTS P0_3 +#else +#define SERIAL_1_RTS P1_5 +#endif + +#if HAS_SERIAL_0_ALT_1 +#define SERIAL_0_RTS P0_5 +#else +#define SERIAL_0_RTS P1_3 +#endif + #if HAS_SERIAL_0 volatile __xdata struct ao_fifo ao_serial0_rx_fifo; @@ -56,6 +68,10 @@ ao_serial0_rx_isr(void) __interrupt 2 #if USE_SERIAL_0_STDIN ao_wakeup(&ao_stdin_ready); #endif +#if HAS_SERIAL_0_HW_FLOW + if (ao_fifo_mostly(ao_serial0_rx_fifo)) + SERIAL_0_RTS = 1; +#endif } static __xdata uint8_t ao_serial0_tx_started; @@ -87,6 +103,10 @@ ao_serial0_getchar(void) __critical while (ao_fifo_empty(ao_serial0_rx_fifo)) ao_sleep(&ao_serial0_rx_fifo); ao_fifo_remove(ao_serial0_rx_fifo, c); +#if HAS_SERIAL_0_HW_FLOW + if (ao_fifo_barely(ao_serial0_rx_fifo)) + SERIAL_0_RTS = 0; +#endif return c; } @@ -98,6 +118,10 @@ _ao_serial0_pollchar(void) if (ao_fifo_empty(ao_serial0_rx_fifo)) return AO_READ_AGAIN; ao_fifo_remove(ao_serial0_rx_fifo,c); +#if HAS_SERIAL_0_HW_FLOW + if (ao_fifo_barely(ao_serial0_rx_fifo)) + SERIAL_0_RTS = 0; +#endif return c; } #endif @@ -144,6 +168,10 @@ ao_serial1_rx_isr(void) __interrupt 3 #if USE_SERIAL_1_STDIN ao_wakeup(&ao_stdin_ready); #endif +#if HAS_SERIAL_1_HW_FLOW + if (ao_fifo_mostly(ao_serial1_rx_fifo)) + SERIAL_1_RTS = 1; +#endif } static __xdata uint8_t ao_serial1_tx_started; @@ -175,6 +203,10 @@ ao_serial1_getchar(void) __critical while (ao_fifo_empty(ao_serial1_rx_fifo)) ao_sleep(&ao_serial1_rx_fifo); ao_fifo_remove(ao_serial1_rx_fifo, c); +#if HAS_SERIAL_1_HW_FLOW + if (ao_fifo_barely(ao_serial1_rx_fifo)) + SERIAL_1_RTS = 0; +#endif return c; } @@ -186,6 +218,10 @@ _ao_serial1_pollchar(void) if (ao_fifo_empty(ao_serial1_rx_fifo)) return AO_READ_AGAIN; ao_fifo_remove(ao_serial1_rx_fifo,c); +#if HAS_SERIAL_1_HW_FLOW + if (ao_fifo_barely(ao_serial1_rx_fifo)) + SERIAL_1_RTS = 0; +#endif return c; } #endif @@ -232,7 +268,11 @@ ao_serial_init(void) /* Make the USART pins be controlled by the USART */ P0SEL |= (1 << 2) | (1 << 3); #if HAS_SERIAL_0_HW_FLOW - P0SEL |= (1 << 4) | (1 << 5); + SERIAL_0_RTS = 0; + P0DIR |= (1 << 5); + + P0SEL |= (1 << 4); + P0INP |= (1 << 4); #endif #else /* Set up the USART pin assignment */ @@ -244,7 +284,11 @@ ao_serial_init(void) /* Make the USART pins be controlled by the USART */ P1SEL |= (1 << 5) | (1 << 4); #if HAS_SERIAL_0_HW_FLOW - P1SEL |= (1 << 3) | (1 << 2); + SERIAL_0_RTS = 0; + P1DIR |= (1 << 3); + + P1SEL |= (1 << 2); + P1INP |= (1 << 2); #endif #endif @@ -287,7 +331,13 @@ ao_serial_init(void) /* Make the USART pins be controlled by the USART */ P0SEL |= (1 << 5) | (1 << 4); #if HAS_SERIAL_1_HW_FLOW - P0SEL |= (1 << 3) | (1 << 2); + /* SW RTS control (hw doesn't work) */ + SERIAL_1_RTS = 0; + P0DIR |= 1 << 3; + + /* HW CTS. Maybe this works? */ + P0SEL |= 1 << 2; + P0INP |= 1 << 2; #endif #else /* Set up the USART pin assignment */ @@ -299,7 +349,13 @@ ao_serial_init(void) /* Make the USART pins be controlled by the USART */ P1SEL |= (1 << 6) | (1 << 7); #if HAS_SERIAL_1_HW_FLOW - P1SEL |= (1 << 5) | (1 << 4); + /* SW RTS control (hw doesn't work) */ + SERIAL_1_RTS = 0; + P1DIR |= (1 << 5); + + /* HW CTS. Maybe this works? */ + P1SEL |= (1 << 4); + P1INP |= (1 << 4); #endif #endif -- cgit v1.2.3 From c457c827a7445098ba5effd410de754ff5c65843 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 9 May 2016 11:48:42 -0700 Subject: Bump version to 1.6.3.1 Post 1.6.3 release Signed-off-by: Keith Packard --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index ee3d4225..3f7de9c8 100644 --- a/configure.ac +++ b/configure.ac @@ -18,7 +18,7 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.57) -AC_INIT([altos], 1.6.3) +AC_INIT([altos], 1.6.3.1) ANDROID_VERSION=11 AC_CONFIG_SRCDIR([src/kernel/ao.h]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) -- cgit v1.2.3 From 04759dddeb29e4de9f7e6b3673dc06c633fa2369 Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Mon, 9 May 2016 15:52:21 -0600 Subject: process updates made during 1.6.3 release cycle --- Releasing | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Releasing b/Releasing index fd522797..d95339b5 100644 --- a/Releasing +++ b/Releasing @@ -21,10 +21,10 @@ These are Bdale's notes on how to do a release. git checkout branch- # the x.y parts only - cherry-pick or merge appropriate content from master - - make sure there is a doc/release-notes-.xsl - - make sure that doc/altusmetrum.xsl has the right copyright year, - and add release to the revision history at the front (release notes - will be pulled in automatically) + - make sure there is a doc/release-notes-.inc + - make sure that doc/altusmetrum-docinfo.xml has the right copyright + year, and add release to the revision history at the front (release + notes will be pulled in automatically) - make absolutely sure checked-out tree is "clean" - make absolutely sure the pdclib/ submodule is on the master branch, up to date, and "clean" @@ -89,7 +89,7 @@ These are Bdale's notes on how to do a release. (cd ~/altusmetrumllc ; git add Binaries ; git commit -a) (cd ~/altusmetrumllc ; git push) - - copy the relevant release notes file from doc/ to + - copy the relevant release notes .html file from doc/ to /home/bdale/web/altusmetrum/AltOS/releases/ (cd ~/web/altusmetrum/AltOS/releases/ ; rm *.tar.bz2) -- cgit v1.2.3 From c57d86f6c9b56e90c986f460f93663a3e16cdf7a Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 9 May 2016 17:56:28 -0700 Subject: altosui/telegps: Ship firmware for new hardware TBT v3.0 and Tmega v2.0 Signed-off-by: Keith Packard --- altosui/Makefile.am | 6 ++++-- telegps/Makefile.am | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/altosui/Makefile.am b/altosui/Makefile.am index dce8420e..a6338d38 100644 --- a/altosui/Makefile.am +++ b/altosui/Makefile.am @@ -126,10 +126,12 @@ FIRMWARE_TELEMINI_1_0=$(top_srcdir)/src/telemini-v1.0/telemini-v1.0-$(VERSION).i FIRMWARE_TELEMINI=$(FIRMWARE_TELEMINI_1_0) FIRMWARE_TBT_1_0=$(top_srcdir)/src/telebt-v1.0/telebt-v1.0-$(VERSION).ihx -FIRMWARE_TBT=$(FIRMWARE_TBT_1_0) +FIRMWARE_TBT_3_0=$(top_srcdir)/src/telebt-v3.0/telebt-v3.0-$(VERSION).ihx +FIRMWARE_TBT=$(FIRMWARE_TBT_1_0) $(FIRMWARE_TBT_3_0) FIRMWARE_TMEGA_1_0=$(top_srcdir)/src/telemega-v1.0/telemega-v1.0-$(VERSION).ihx -FIRMWARE_TMEGA=$(FIRMWARE_TMEGA_1_0) +FIRMWARE_TMEGA_2_0=$(top_srcdir)/src/telemega-v2.0/telemega-v2.0-$(VERSION).ihx +FIRMWARE_TMEGA=$(FIRMWARE_TMEGA_1_0) $(FIRMWARE_TMEGA_2_0) FIRMWARE_EMINI_1_0=$(top_srcdir)/src/easymini-v1.0/easymini-v1.0-$(VERSION).ihx FIRMWARE_EMINI=$(FIRMWARE_EMINI_1_0) diff --git a/telegps/Makefile.am b/telegps/Makefile.am index 4caf43f4..0b86329a 100644 --- a/telegps/Makefile.am +++ b/telegps/Makefile.am @@ -101,7 +101,8 @@ FIRMWARE_TD_3_0=$(top_srcdir)/src/teledongle-v3.0/teledongle-v3.0-$(VERSION).ihx FIRMWARE_TD=$(FIRMWARE_TD_0_2) $(FIRMWARE_TD_3_0) FIRMWARE_TBT_1_0=$(top_srcdir)/src/telebt-v1.0/telebt-v1.0-$(VERSION).ihx -FIRMWARE_TBT=$(FIRMWARE_TBT_1_0) +FIRMWARE_TBT_3_0=$(top_srcdir)/src/telebt-v3.0/telebt-v3.0-$(VERSION).ihx +FIRMWARE_TBT=$(FIRMWARE_TBT_1_0) $(FIRMWARE_TBT_3_0) FIRMWARE_TG_1_0=$(top_srcdir)/src/telegps-v1.0/telegps-v1.0-$(VERSION).ihx FIRMWARE_TG=$(FIRMWARE_TG_1_0) -- cgit v1.2.3 From a371253bb5fc25e34d87507dc9b814530f4e28f6 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 9 May 2016 17:57:12 -0700 Subject: altosdroid: Check for closed before writing/reading bluetooth Signed-off-by: Keith Packard --- altosdroid/src/org/altusmetrum/AltosDroid/AltosBluetooth.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosBluetooth.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosBluetooth.java index 15efc0e2..51937b7f 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosBluetooth.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosBluetooth.java @@ -199,6 +199,8 @@ public class AltosBluetooth extends AltosDroidLink { } int write(byte[] buffer, int len) { + if (output == null) + return -1; try { output.write(buffer, 0, len); } catch (IOException ie) { @@ -208,6 +210,8 @@ public class AltosBluetooth extends AltosDroidLink { } int read(byte[] buffer, int len) { + if (input == null) + return -1; try { return input.read(buffer, 0, len); } catch (IOException ie) { -- cgit v1.2.3 From d92ca1cd4dfbacebd7aa1bbcfc671daee35dc808 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 10 May 2016 12:28:51 -0700 Subject: Publish firmware with keithp-fat Signed-off-by: Keith Packard --- Makefile.am | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index 0bb01619..c1ba7535 100644 --- a/Makefile.am +++ b/Makefile.am @@ -42,9 +42,25 @@ fat_android = \ altosdroid/bin/AltosDroid-debug.apk \ altosdroid/bin/AltosDroid-release.apk +fat_altos = \ + src/easymega-v1.0/easymega-v1.0-$(VERSION).ihx \ + src/easymini-v1.0/easymini-v1.0-$(VERSION).ihx \ + src/telebt-v1.0/telebt-v1.0-$(VERSION).ihx \ + src/telebt-v3.0/telebt-v3.0-$(VERSION).ihx \ + src/teledongle-v0.2/teledongle-v0.2-$(VERSION).ihx \ + src/teledongle-v3.0/teledongle-v3.0-$(VERSION).ihx \ + src/telegps-v1.0/telegps-v1.0-$(VERSION).ihx \ + src/telemega-v1.0/telemega-v1.0-$(VERSION).ihx \ + src/telemega-v2.0/telemega-v2.0-$(VERSION).ihx \ + src/telemetrum-v1.0/telemetrum-v1.0-$(VERSION).ihx \ + src/telemetrum-v1.1/telemetrum-v1.1-$(VERSION).ihx \ + src/telemetrum-v1.2/telemetrum-v1.2-$(VERSION).ihx \ + src/telemetrum-v2.0/telemetrum-v2.0-$(VERSION).ihx \ + src/telemini-v1.0/telemini-v1.0-$(VERSION).ihx + keithp-fat: fat ssh keithp.com mkdir -p public_html/altos-$(VERSION) - scp -p $(fat_linux) $(fat_mac) $(fat_windows) $(fat_android) keithp.com:public_html/altos-$(VERSION) + scp -p $(fat_linux) $(fat_mac) $(fat_windows) $(fat_android) $(fat_altos) keithp.com:public_html/altos-$(VERSION) set-java-versions: $(top_srcdir)/fix-java-versions org.altusmetrum.altoslib=$(ALTOSLIB_VERSION) org.altusmetrum.altosuilib=$(ALTOSUILIB_VERSION) -- cgit v1.2.3 From 6a6da23335e6e5864387c7a22946f80f51056a4f Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 10 May 2016 12:29:14 -0700 Subject: Add TeleMega to spec list. Add TeleGPS RF output. Signed-off-by: Keith Packard --- doc/specs.inc | 9 +++++++++ doc/telegps-specs.inc | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/doc/specs.inc b/doc/specs.inc index a6c7b69a..c335b081 100644 --- a/doc/specs.inc +++ b/doc/specs.inc @@ -79,6 +79,15 @@ |8MB |40mW |3.7V + + |TeleMega v2.0 + |MS5607 30km (100k') + |MMA6555 102g + |uBlox Max-7Q + |MPU6000 HMC5883 + |8MB + |40mW + |3.7V endif::telemega[] ifdef::easymega[] diff --git a/doc/telegps-specs.inc b/doc/telegps-specs.inc index 6ff8c76f..417a9708 100644 --- a/doc/telegps-specs.inc +++ b/doc/telegps-specs.inc @@ -5,6 +5,11 @@ TeleGPS uses the u-Blox Max-7Q GPS receiver. + === 70cm Transmitter + + TeleGPS uses a TI CC115L transmitter. This radio + produces 10mW of RF output. + === Micro-controller TeleGPS uses an NXP LPC11U14 micro-controller. This -- cgit v1.2.3 From 60f4d69592c440ab7bb67a04f4c07fc7279d2c20 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 10 May 2016 22:46:58 -0700 Subject: altoslib: Switch distance from m/ft to km/miles for large values This adds lots of infrastructure to deal with making the unit used depend on the value itself, and then uses it only for distances. Signed-off-by: Keith Packard --- .../altusmetrum/AltosDroid/PreloadMapActivity.java | 2 +- altoslib/AltosDistance.java | 56 ++++++- altoslib/AltosPyro.java | 2 +- altoslib/AltosUnits.java | 178 ++++++++++++++++----- altoslib/AltosUnitsRange.java | 46 ++++++ altoslib/Makefile.am | 1 + altosui/AltosConfigPyroUI.java | 2 +- altosui/AltosConfigUI.java | 4 +- altosui/AltosPad.java | 52 +++--- altosuilib/AltosUIAxis.java | 2 +- altosuilib/AltosUIMapPreloadNew.java | 2 +- altosuilib/AltosUISeries.java | 4 +- 12 files changed, 269 insertions(+), 82 deletions(-) create mode 100644 altoslib/AltosUnitsRange.java diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java index 13a44e1f..0bf3aa10 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java @@ -234,7 +234,7 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe private double radius() { double r = value_distance(radius); if (AltosPreferences.imperial_units()) - r = AltosConvert.distance.inverse(r); + r = AltosConvert.miles_to_meters(r); else r = r * 1000; return r; diff --git a/altoslib/AltosDistance.java b/altoslib/AltosDistance.java index b68a4525..1ec39f8d 100644 --- a/altoslib/AltosDistance.java +++ b/altoslib/AltosDistance.java @@ -54,4 +54,58 @@ public class AltosDistance extends AltosUnits { return 1; return 0; } -} \ No newline at end of file + + public AltosDistance() { + range_metric = new AltosUnitsRange[2]; + + range_metric[0] = new AltosUnitsRange(0, "m", "meters") { + double value(double v) { + return v; + } + int show_fraction(int width) { + return width / 9; + } + int say_fraction() { + return 0; + } + }; + range_metric[1] = new AltosUnitsRange(2000, "km", "kilometers") { + double value(double v) { + return v / 1000; + } + int show_fraction(int width) { + return width / 5; + } + int say_fraction() { + return 1; + } + }; + + range_imperial = new AltosUnitsRange[2]; + + range_imperial[0] = new AltosUnitsRange(0, "ft", "feet") { + double value(double v) { + return AltosConvert.meters_to_feet(v); + } + int show_fraction(int width) { + return width / 9; + } + int say_fraction() { + return 0; + } + }; + + range_imperial[1] = new AltosUnitsRange(AltosConvert.feet_to_meters(5280), + "mi", "miles") { + double value(double v) { + return AltosConvert.meters_to_miles(v); + } + int show_fraction(int width) { + return width / 5; + } + int say_fraction() { + return 1; + } + }; + } +} diff --git a/altoslib/AltosPyro.java b/altoslib/AltosPyro.java index 28e65bc2..3afd03e0 100644 --- a/altoslib/AltosPyro.java +++ b/altoslib/AltosPyro.java @@ -138,7 +138,7 @@ public class AltosPyro { units = pyro_to_units.get(flag); if (units == null) return name; - return String.format ("%s (%s)", name, units.show_units()); + return String.format ("%s (%s)", name, units.parse_units()); } public static AltosUnits pyro_to_units(int flag) { diff --git a/altoslib/AltosUnits.java b/altoslib/AltosUnits.java index 13b9dbe6..bc53d4a0 100644 --- a/altoslib/AltosUnits.java +++ b/altoslib/AltosUnits.java @@ -21,6 +21,21 @@ import java.text.*; public abstract class AltosUnits { + AltosUnitsRange[] range_metric, range_imperial; + + private AltosUnitsRange range(double v, boolean imperial_units) { + AltosUnitsRange[] ranges = imperial_units ? range_imperial : range_metric; + + for (int i = ranges.length - 1; i > 0; i--) + if (v >= ranges[i].lower_limit) + return ranges[i]; + return ranges[0]; + } + + private AltosUnitsRange first_range(boolean imperial_units) { + return imperial_units ? range_imperial[0] : range_metric[0]; + } + public abstract double value(double v, boolean imperial_units); public abstract double inverse(double v, boolean imperial_units); @@ -31,89 +46,168 @@ public abstract class AltosUnits { public abstract int show_fraction(int width, boolean imperial_units); - public double parse_locale(String s, boolean imperial_units) throws ParseException { - double v = AltosParse.parse_double_locale(s); - return inverse(v, imperial_units); + private double value(double v) { + return value(v, AltosConvert.imperial_units); } - public double parse_net(String s, boolean imperial_units) throws ParseException { - double v = AltosParse.parse_double_net(s); - return inverse(v, imperial_units); + private double inverse(double v) { + return inverse(v, AltosConvert.imperial_units); } - public double parse_locale(String s) throws ParseException { - return parse_locale(s, AltosConvert.imperial_units); + private String show_units() { + return show_units(AltosConvert.imperial_units); } - public double parse_net(String s) throws ParseException { - return parse_net(s, AltosConvert.imperial_units); + private String say_units() { + return say_units(AltosConvert.imperial_units); } - public double value(double v) { - return value(v, AltosConvert.imperial_units); + private int show_fraction(int width) { + return show_fraction(width, AltosConvert.imperial_units); } - public double inverse(double v) { - return inverse(v, AltosConvert.imperial_units); + private int say_fraction(boolean imperial_units) { + return 0; } - public String show_units() { - return show_units(AltosConvert.imperial_units); + private String show_format(AltosUnitsRange range, int width) { + return String.format("%%%d.%df %s", width, range.show_fraction(width), range.show_units); } - public String say_units() { - return say_units(AltosConvert.imperial_units); + private String say_format(AltosUnitsRange range) { + return String.format("%%1.%df", range.say_fraction()); } - public int show_fraction(int width) { - return show_fraction(width, AltosConvert.imperial_units); + private String say_units_format(AltosUnitsRange range) { + return String.format("%%1.%df %s", range.say_fraction(), range.say_units); } - int say_fraction(boolean imperial_units) { - return 0; + public String show(int width, double v, boolean imperial_units) { + AltosUnitsRange range = range(v, imperial_units); + + return String.format(show_format(range, width), range.value(v)); + } + + public String say(double v, boolean imperial_units) { + AltosUnitsRange range = range(v, imperial_units); + + return String.format(say_format(range), range.value(v)); + } + + public String say_units(double v, boolean imperial_units) { + AltosUnitsRange range = range(v, imperial_units); + + return String.format(say_units_format(range), range.value(v)); + } + + public String show(int width, double v) { + return show(width, v, AltosConvert.imperial_units); + } + + public String say(double v) { + return say(v, AltosConvert.imperial_units); + } + + public String say_units(double v) { + return say_units(v, AltosConvert.imperial_units); + } + + /* Parsing functions. Use the first range of the type */ + public String parse_units(boolean imperial_units) { + return first_range(imperial_units).show_units; + } + + public String parse_units() { + return parse_units(AltosConvert.imperial_units); + } + + public double parse_value(double v, boolean imperial_units) { + return first_range(imperial_units).value(v); + } + + public double parse_value(double v) { + return parse_value(v, AltosConvert.imperial_units); } - private String show_format(int width, boolean imperial_units) { - return String.format("%%%d.%df %s", width, show_fraction(width, imperial_units), show_units(imperial_units)); + /* Graphing functions. Use the first range of the type */ + public String graph_units(boolean imperial_units) { + return first_range(imperial_units).show_units; } - private String say_format(boolean imperial_units) { - return String.format("%%1.%df", say_fraction(imperial_units)); + public String graph_units() { + return graph_units(AltosConvert.imperial_units); } - private String say_units_format(boolean imperial_units) { - return String.format("%%1.%df %s", say_fraction(imperial_units), say_units(imperial_units)); + public double graph_value(double v, boolean imperial_units) { + return first_range(imperial_units).value(v); + } + + public double graph_value(double v) { + return graph_value(v, AltosConvert.imperial_units); + } + + private String graph_format(AltosUnitsRange range, int width) { + return String.format(String.format("%%%d.%df", width, range.show_fraction(width)), 0.0); } public String graph_format(int width, boolean imperial_units) { - return String.format(String.format("%%%d.%df", width, show_fraction(width, imperial_units)), 0.0); + return graph_format(first_range(imperial_units), width); } public String graph_format(int width) { return graph_format(width, AltosConvert.imperial_units); } - public String show(int width, double v, boolean imperial_units) { - return String.format(show_format(width, imperial_units), value(v, imperial_units)); + /* Parsing functions. */ + public double parse_locale(String s, boolean imperial_units) throws ParseException { + double v = AltosParse.parse_double_locale(s); + return inverse(v, imperial_units); } - public String show(int width, double v) { - return show(width, v, AltosConvert.imperial_units); + public double parse_net(String s, boolean imperial_units) throws ParseException { + double v = AltosParse.parse_double_net(s); + return inverse(v, imperial_units); } - public String say(double v, boolean imperial_units) { - return String.format(say_format(imperial_units), value(v, imperial_units)); + public double parse_locale(String s) throws ParseException { + return parse_locale(s, AltosConvert.imperial_units); } - public String say(double v) { - return say(v, AltosConvert.imperial_units); + public double parse_net(String s) throws ParseException { + return parse_net(s, AltosConvert.imperial_units); } - public String say_units(double v, boolean imperial_units) { - return String.format(say_units_format(imperial_units), value(v, imperial_units)); - } + public AltosUnits() { + range_metric = new AltosUnitsRange[1]; - public String say_units(double v) { - return say_units(v, AltosConvert.imperial_units); + range_metric[0] = new AltosUnitsRange(this, false) { + double value(double v) { + return units.value(v, false); + } + + int show_fraction(int width) { + return units.show_fraction(width, false); + } + + int say_fraction() { + return units.say_fraction(false); + } + }; + + range_imperial = new AltosUnitsRange[1]; + + range_imperial[0] = new AltosUnitsRange(this, true) { + double value(double v) { + return units.value(v, true); + } + + int show_fraction(int width) { + return units.show_fraction(width, true); + } + + int say_fraction() { + return units.say_fraction(true); + } + }; } } diff --git a/altoslib/AltosUnitsRange.java b/altoslib/AltosUnitsRange.java new file mode 100644 index 00000000..9239481a --- /dev/null +++ b/altoslib/AltosUnitsRange.java @@ -0,0 +1,46 @@ +/* + * Copyright © 2016 Keith Packard + * + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.altoslib_10; + +import java.text.*; + +public abstract class AltosUnitsRange { + + AltosUnits units; + + double lower_limit; + String show_units; + String say_units; + + abstract double value(double v); + abstract int show_fraction(int width); + abstract int say_fraction(); + + AltosUnitsRange(AltosUnits units, boolean imperial_units) { + this.units = units; + this.show_units = units.show_units(imperial_units); + this.say_units = units.say_units(imperial_units); + } + + AltosUnitsRange(double lower_limit, String show_units, String say_units) { + this.units = null; + this.lower_limit = lower_limit; + this.show_units = show_units; + this.say_units = say_units; + } +} diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am index dc9da8fd..f3219839 100644 --- a/altoslib/Makefile.am +++ b/altoslib/Makefile.am @@ -118,6 +118,7 @@ altoslib_JAVA = \ AltosIMU.java \ AltosMag.java \ AltosUnits.java \ + AltosUnitsRange.java \ AltosDistance.java \ AltosHeight.java \ AltosSpeed.java \ diff --git a/altosui/AltosConfigPyroUI.java b/altosui/AltosConfigPyroUI.java index e0915a17..125866c6 100644 --- a/altosui/AltosConfigPyroUI.java +++ b/altosui/AltosConfigPyroUI.java @@ -105,7 +105,7 @@ public class AltosConfigPyroUI double unit_value = new_value; AltosUnits units = AltosPyro.pyro_to_units(flag); if (units != null) - unit_value = units.value(new_value); + unit_value = units.parse_value(new_value); String format; if (scale >= 100) format = "%6.2f"; diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java index 24167df3..09123f4f 100644 --- a/altosui/AltosConfigUI.java +++ b/altosui/AltosConfigUI.java @@ -976,7 +976,7 @@ public class AltosConfigUI } String get_main_deploy_label() { - return String.format("Main Deploy Altitude(%s):", AltosConvert.height.show_units()); + return String.format("Main Deploy Altitude(%s):", AltosConvert.height.parse_units()); } String[] main_deploy_values() { @@ -1243,7 +1243,7 @@ public class AltosConfigUI } String get_tracker_motion_label() { - return String.format("Logging Trigger Motion (%s):", AltosConvert.height.show_units()); + return String.format("Logging Trigger Motion (%s):", AltosConvert.height.parse_units()); } void set_tracker_tool_tip() { diff --git a/altosui/AltosPad.java b/altosui/AltosPad.java index 4f55636d..9a8c8087 100644 --- a/altosui/AltosPad.java +++ b/altosui/AltosPad.java @@ -101,7 +101,11 @@ public class AltosPad extends AltosUIFlightTab { class ReceiverBattery extends AltosUIVoltageIndicator { - public double voltage(AltosState state) { return AltosLib.MISSING; } + double last_voltage = AltosLib.MISSING; + + public double voltage(AltosState state) { + return last_voltage; + } public double good() { return AltosLib.ao_battery_good; } @@ -111,8 +115,10 @@ public class AltosPad extends AltosUIFlightTab { public double value(AltosState state, AltosListenerState listener_state, int i) { if (listener_state == null) - return AltosLib.MISSING; - return listener_state.battery; + last_voltage = AltosLib.MISSING; + else + last_voltage = listener_state.battery; + return last_voltage; } public ReceiverBattery (AltosUIFlightTab container, int y) { @@ -205,40 +211,26 @@ public class AltosPad extends AltosUIFlightTab { } } - class PadAlt extends AltosUIIndicator { + class PadAlt extends AltosUIUnitsIndicator { - double last_alt = AltosLib.MISSING - 1; + public double value(AltosState state, int i) { + if (report_pad(state)) + return state.pad_alt; + else + return state.gps.alt; + } public void show (AltosState state, AltosListenerState listener_state) { - double alt = AltosLib.MISSING; - String label = null; + String label = "Altitude"; - if (state != null) { - if (report_pad(state)) { - alt = state.pad_alt; - label = "Pad Altitude"; - } else { - alt = state.gps.alt; - label = "Altitude"; - } - } - if (alt != last_alt) { - if (alt != AltosLib.MISSING) { - show(AltosConvert.height.show(5, alt)); - set_label(label); - } else - hide(); - last_alt = alt; - } - } - - public void reset() { - super.reset(); - last_alt = AltosLib.MISSING - 1; + if (state != null && report_pad(state)) + label = "Pad Altitude"; + set_label(label); + super.show(state, listener_state); } public PadAlt (AltosUIFlightTab container, int y) { - super (container, y, "Pad Altitude", 1, false, 2); + super (container, y, AltosConvert.height, "Pad Altitude", 1, false, 2); } } public String getName() { return "Pad"; } diff --git a/altosuilib/AltosUIAxis.java b/altosuilib/AltosUIAxis.java index e307874a..24ea23d3 100644 --- a/altosuilib/AltosUIAxis.java +++ b/altosuilib/AltosUIAxis.java @@ -48,7 +48,7 @@ public class AltosUIAxis extends NumberAxis { public final static int axis_default = axis_include_zero; public void set_units() { - String u = units.show_units(); + String u = units.parse_units(); if (u != null) setLabel(String.format("%s (%s)", label, u)); else diff --git a/altosuilib/AltosUIMapPreloadNew.java b/altosuilib/AltosUIMapPreloadNew.java index 3269bbdd..cce07ab4 100644 --- a/altosuilib/AltosUIMapPreloadNew.java +++ b/altosuilib/AltosUIMapPreloadNew.java @@ -231,7 +231,7 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener Double r = (Double) radius.getSelectedItem(); if (AltosPreferences.imperial_units()) - r = AltosConvert.distance.inverse(r); + r = AltosConvert.miles_to_meters(r); else r = r * 1000; loading = true; diff --git a/altosuilib/AltosUISeries.java b/altosuilib/AltosUISeries.java index b16f046b..c9401be0 100644 --- a/altosuilib/AltosUISeries.java +++ b/altosuilib/AltosUISeries.java @@ -69,7 +69,7 @@ public class AltosUISeries extends XYSeries implements AltosUIGrapher { String example = units.graph_format(7); ttg = new StandardXYToolTipGenerator(String.format("{1}s: {2}%s ({0})", - units.show_units()), + units.graph_units()), new java.text.DecimalFormat(time_example), new java.text.DecimalFormat(example)); renderer.setBaseToolTipGenerator(ttg); @@ -85,7 +85,7 @@ public class AltosUISeries extends XYSeries implements AltosUIGrapher { public void add(AltosUIDataPoint dataPoint) { try { - super.add(dataPoint.x(), units.value(dataPoint.y(fetch))); + super.add(dataPoint.x(), units.graph_value(dataPoint.y(fetch))); } catch (AltosUIDataMissing dm) { } } -- cgit v1.2.3 From 42021d9fdc6f7a74cc9b20ebf3cf60b4c5f4ea82 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 10 May 2016 22:49:04 -0700 Subject: altoslib: Remove some debug printf calls Signed-off-by: Keith Packard --- altoslib/AltosMapCache.java | 3 --- altoslib/AltosMapTile.java | 1 - altoslib/AltosStateIterable.java | 1 - 3 files changed, 5 deletions(-) diff --git a/altoslib/AltosMapCache.java b/altoslib/AltosMapCache.java index 38e0f769..8100704f 100644 --- a/altoslib/AltosMapCache.java +++ b/altoslib/AltosMapCache.java @@ -60,7 +60,6 @@ public class AltosMapCache implements AltosMapCacheListener { public synchronized void notify_tile(AltosMapTile tile, int status) { if (status == AltosMapTile.fetched) { - System.out.printf("tile fetched, loading image\n"); load(); } } @@ -139,8 +138,6 @@ public class AltosMapCache implements AltosMapCacheListener { elements[oldest].flush(); elements[oldest] = element; - System.out.printf("AltosMapCache.get image ? %s\n", - element.image == null ? "false" : "true"); return element.image; } } diff --git a/altoslib/AltosMapTile.java b/altoslib/AltosMapTile.java index fdc8ff65..1d86309c 100644 --- a/altoslib/AltosMapTile.java +++ b/altoslib/AltosMapTile.java @@ -87,7 +87,6 @@ public abstract class AltosMapTile implements AltosFontListener, AltosMapStoreLi } public void notify_store(AltosMapStore store, int status) { -// System.out.printf("AltosMapTile.notify_store %d\n", status); notify_listeners(status); } diff --git a/altoslib/AltosStateIterable.java b/altoslib/AltosStateIterable.java index a7baa85e..2d2d342f 100644 --- a/altoslib/AltosStateIterable.java +++ b/altoslib/AltosStateIterable.java @@ -32,7 +32,6 @@ public abstract class AltosStateIterable implements Iterable { try { in = new FileInputStream(file); } catch (Exception e) { - System.out.printf("Failed to open file '%s'\n", file); return null; } if (file.getName().endsWith("telem")) -- cgit v1.2.3 From 2e551e7c5f82a7e35d39e8f73e8e526e5484cd5d Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 10 May 2016 22:50:23 -0700 Subject: altosuilib: Rate limit map loading pacifier updates Just updating the pacifier was consuming a huge amount of CPU. Update no more than once every 100ms. Signed-off-by: Keith Packard --- altosuilib/AltosUIMapPreloadNew.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/altosuilib/AltosUIMapPreloadNew.java b/altosuilib/AltosUIMapPreloadNew.java index cce07ab4..d6c257e0 100644 --- a/altosuilib/AltosUIMapPreloadNew.java +++ b/altosuilib/AltosUIMapPreloadNew.java @@ -153,8 +153,12 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener double latitude, longitude; + long loader_notify_time; + /* AltosMapLoaderListener interfaces */ public void loader_start(final int max) { + loader_notify_time = System.currentTimeMillis(); + SwingUtilities.invokeLater(new Runnable() { public void run() { pbar.setMaximum(max); @@ -167,6 +171,13 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener } public void loader_notify(final int cur, final int max, final String name) { + long now = System.currentTimeMillis(); + + if (now - loader_notify_time < 100) + return; + + loader_notify_time = now; + SwingUtilities.invokeLater(new Runnable() { public void run() { pbar.setValue(cur); -- cgit v1.2.3 From c5f49d0ac254047f13c6c1ecfb5520eff72109ac Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 10 May 2016 23:02:09 -0700 Subject: altoslib: Allow map preloading to be aborted Close the map preload dialog and it would be nice to stop loading map bits. Signed-off-by: Keith Packard --- .../altusmetrum/AltosDroid/PreloadMapActivity.java | 13 +++++- altoslib/AltosMapLoader.java | 46 ++++++++++++++++------ altoslib/AltosMapTile.java | 5 ++- altosuilib/AltosUIMapPreloadNew.java | 18 +++++---- 4 files changed, 60 insertions(+), 22 deletions(-) diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java index 0bf3aa10..ab5e433d 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java @@ -69,6 +69,10 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe private ProgressBar progress; + private AltosMapLoader loader; + + long loader_notify_time; + /* AltosMapLoaderListener interfaces */ public void loader_start(final int max) { this.runOnUiThread(new Runnable() { @@ -88,6 +92,7 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe } public void loader_done(int max) { + loader = null; this.runOnUiThread(new Runnable() { public void run() { progress.setProgress(0); @@ -254,6 +259,9 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe } private void load() { + if (loader != null) + return; + try { double lat = latitude(); double lon = longitude(); @@ -264,7 +272,7 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe AltosDebug.debug("PreloadMap load %f %f %d %d %f %d\n", lat, lon, min, max, r, t); - new AltosMapLoader(map, this, lat, lon, min, max, r, t); + loader = new AltosMapLoader(map, this, lat, lon, min, max, r, t); } catch (ParseException e) { AltosDebug.debug("PreloadMap load raised exception %s", e.toString()); } @@ -409,6 +417,9 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe protected void onDestroy() { super.onDestroy(); + if (loader != null) + loader.abort(); + // Stop listening for location updates ((LocationManager) getSystemService(Context.LOCATION_SERVICE)).removeUpdates(this); } diff --git a/altoslib/AltosMapLoader.java b/altoslib/AltosMapLoader.java index 7112a1c4..8b856e13 100644 --- a/altoslib/AltosMapLoader.java +++ b/altoslib/AltosMapLoader.java @@ -19,6 +19,7 @@ package org.altusmetrum.altoslib_10; import java.io.*; import java.util.*; +import java.util.concurrent.*; import java.text.*; import java.lang.Math; import java.net.URL; @@ -42,6 +43,12 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { int layers_total; int layers_loaded; + private static final int MAX_LOADING = 200; + + private Semaphore loading = new Semaphore(MAX_LOADING); + + boolean abort; + AltosMap map; int tile_radius(int zoom) { @@ -62,7 +69,7 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { return (tile_radius * 2 + 1) * (tile_radius * 2 + 1); } - public void do_load() { + private boolean do_load() { tiles_this_layer = tiles_per_layer(cur_z); tiles_loaded_layer = 0; listener.debug("tiles_this_layer %d (zoom %d)\n", tiles_this_layer, cur_z); @@ -88,16 +95,24 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { for (int y = (int) upper_left.y; y <= lower_right.y; y += AltosMap.px_size) { for (int x = (int) upper_left.x; x <= lower_right.x; x += AltosMap.px_size) { + try { + loading.acquire(); + } catch (InterruptedException ie) { + return false; + } AltosPointInt point = new AltosPointInt(x, y); AltosLatLon ul = transform.lat_lon(point); AltosLatLon center = transform.lat_lon(new AltosPointDouble(x + AltosMap.px_size/2, y + AltosMap.px_size/2)); - AltosMapTile tile = map.map_interface.new_tile(null, ul, center, zoom, maptype, AltosMap.px_size); + AltosMapTile tile = new AltosMapTile(null, ul, center, zoom, maptype, AltosMap.px_size); tile.add_listener(this); + if (abort) + return false; } } + return true; } - public int next_type(int start) { + private int next_type(int start) { int next_type; for (next_type = start; next_type <= AltosMap.maptype_terrain && (all_types & (1 << next_type)) == 0; @@ -106,19 +121,19 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { return next_type; } - public void next_load() { + private boolean next_load() { int next_type = next_type(cur_type + 1); if (next_type > AltosMap.maptype_terrain) { if (cur_z == max_z) { - return; + return false; } else { cur_z++; } next_type = next_type(0); } cur_type = next_type; - do_load(); + return true; } public void run() { @@ -147,7 +162,12 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { listener.debug("total tiles %d layers %d\n", tiles_total, layers_total); listener.loader_start(tiles_total); - do_load(); + do { + if (!do_load()) + break; + } while (next_load()); + if (abort) + listener.loader_done(tiles_total); } public synchronized void notify_tile(AltosMapTile tile, int status) { @@ -155,6 +175,8 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { if (status == AltosMapTile.fetching) return; + loading.release(); + tile.remove_listener(this); if (layers_loaded >= layers_total) @@ -174,12 +196,13 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { if (tiles_loaded_total == tiles_total) listener.loader_done(tiles_total); - else { + else listener.loader_notify(tiles_loaded_total, tiles_total, tile.store.file.toString()); - if (do_next) - next_load(); - } + } + + public void abort() { + this.abort = true; } public AltosMapLoader(AltosMap map, AltosMapLoaderListener listener, @@ -194,6 +217,7 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { this.max_z = max_z; this.radius = radius; this.all_types = all_types; + this.abort = false; start(); } } diff --git a/altoslib/AltosMapTile.java b/altoslib/AltosMapTile.java index 1d86309c..d921fd10 100644 --- a/altoslib/AltosMapTile.java +++ b/altoslib/AltosMapTile.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_10; import java.io.*; import java.util.*; -public abstract class AltosMapTile implements AltosFontListener, AltosMapStoreListener { +public class AltosMapTile implements AltosFontListener, AltosMapStoreListener { LinkedList listeners = new LinkedList(); public AltosLatLon upper_left, center; public int px_size; @@ -98,7 +98,8 @@ public abstract class AltosMapTile implements AltosFontListener, AltosMapStoreLi notify_listeners(status); } - public abstract void paint(AltosMapTransform t); + public void paint(AltosMapTransform t) { + } public AltosImage get_image() { if (cache == null) diff --git a/altosuilib/AltosUIMapPreloadNew.java b/altosuilib/AltosUIMapPreloadNew.java index d6c257e0..3e4a604f 100644 --- a/altosuilib/AltosUIMapPreloadNew.java +++ b/altosuilib/AltosUIMapPreloadNew.java @@ -131,7 +131,6 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener JComboBox site_list; JToggleButton load_button; - boolean loading; JButton close_button; JCheckBox[] maptypes = new JCheckBox[AltosMap.maptype_terrain - AltosMap.maptype_hybrid + 1]; @@ -147,6 +146,7 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener Double[] radius_km = { 2.0, 5.0, 10.0, 20.0, 30.0 }; Double radius_def_km = 10.0; + AltosMapLoader loader; static final String[] lat_hemi_names = { "N", "S" }; static final String[] lon_hemi_names = { "E", "W" }; @@ -187,12 +187,12 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener } public void loader_done(int max) { + loader = null; SwingUtilities.invokeLater(new Runnable() { public void run() { pbar.setValue(0); pbar.setString(""); load_button.setSelected(false); - loading = false; } }); } @@ -227,11 +227,14 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); - if (cmd.equals("close")) + if (cmd.equals("close")) { + if (loader != null) + loader.abort(); setVisible(false); + } if (cmd.equals("load")) { - if (!loading) { + if (loader == null) { try { latitude = lat.get_value(); longitude = lon.get_value(); @@ -245,11 +248,10 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener r = AltosConvert.miles_to_meters(r); else r = r * 1000; - loading = true; - new AltosMapLoader(map.map, this, - latitude, longitude, - min_z, max_z, r, all_types()); + loader = new AltosMapLoader(map.map, this, + latitude, longitude, + min_z, max_z, r, all_types()); } catch (ParseException pe) { load_button.setSelected(false); -- cgit v1.2.3 From 895cb58a6cd7424ee63c24d791b5988f41f85d31 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 10 May 2016 23:03:45 -0700 Subject: altosdroid: Rate limit map loading pacifier Just like in altosui. Signed-off-by: Keith Packard --- .../src/org/altusmetrum/AltosDroid/PreloadMapActivity.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java index ab5e433d..11d71280 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java @@ -75,6 +75,8 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe /* AltosMapLoaderListener interfaces */ public void loader_start(final int max) { + loader_notify_time = System.currentTimeMillis(); + this.runOnUiThread(new Runnable() { public void run() { progress.setMax(max); @@ -84,6 +86,13 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe } public void loader_notify(final int cur, final int max, final String name) { + long now = System.currentTimeMillis(); + + if (now - loader_notify_time < 100) + return; + + loader_notify_time = now; + this.runOnUiThread(new Runnable() { public void run() { progress.setProgress(cur); -- cgit v1.2.3 From b2710128a715a109745ec40553a3d4149a7f49ab Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 10 May 2016 23:04:23 -0700 Subject: altosuilib: Don't flicker missing voltages when changing units For some reason, a value of MISSING -1 was getting used, which caused displays to light up briefly with a weird value when switching between metric and imperial units. Signed-off-by: Keith Packard --- altosuilib/AltosUIUnitsIndicator.java | 18 ++++++++++++------ altosuilib/AltosUIVoltageIndicator.java | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/altosuilib/AltosUIUnitsIndicator.java b/altosuilib/AltosUIUnitsIndicator.java index a84bd0b2..1b900e54 100644 --- a/altosuilib/AltosUIUnitsIndicator.java +++ b/altosuilib/AltosUIUnitsIndicator.java @@ -46,10 +46,10 @@ public abstract class AltosUIUnitsIndicator extends AltosUIIndicator { public double[] last_values; - public void show(double... v) { + private void show(boolean force, double... v) { show(); for (int i = 0; i < values.length; i++) { - if (v[i] != last_values[i]) { + if (force || v[i] != last_values[i]) { String value_text; boolean good = false; @@ -68,13 +68,19 @@ public abstract class AltosUIUnitsIndicator extends AltosUIIndicator { } } + boolean hide = false; + + public void show(double... v) { + show(false, v); + } + public void units_changed(boolean imperial_units) { - show(last_values); + if (!hide) + show(true, last_values); } public void show (AltosState state, AltosListenerState listener_state) { double[] v = new double[values.length]; - boolean hide = false; for (int i = 0; i < values.length; i++) { if (state != null) @@ -93,7 +99,7 @@ public abstract class AltosUIUnitsIndicator extends AltosUIIndicator { public void reset() { for (int i = 0; i < last_values.length; i++) - last_values[i] = AltosLib.MISSING - 1; + last_values[i] = AltosLib.MISSING; } public AltosUIUnitsIndicator (Container container, int x, int y, int label_width, AltosUnits units, String name, int number_values, boolean has_lights, int width) { @@ -101,7 +107,7 @@ public abstract class AltosUIUnitsIndicator extends AltosUIIndicator { this.units = units; last_values = new double[values.length]; for (int i = 0; i < last_values.length; i++) - last_values[i] = AltosLib.MISSING - 1; + last_values[i] = AltosLib.MISSING; } public AltosUIUnitsIndicator (Container container, int x, int y, AltosUnits units, String name, int number_values, boolean has_lights, int width) { diff --git a/altosuilib/AltosUIVoltageIndicator.java b/altosuilib/AltosUIVoltageIndicator.java index d753b759..ecf8bce9 100644 --- a/altosuilib/AltosUIVoltageIndicator.java +++ b/altosuilib/AltosUIVoltageIndicator.java @@ -30,7 +30,7 @@ public abstract class AltosUIVoltageIndicator extends AltosUIUnitsIndicator { return voltage(state); } - double last_voltage = -1; + double last_voltage = AltosLib.MISSING; public AltosUIVoltageIndicator (Container container, int x, int y, String name, int width) { super(container, x, y, AltosConvert.voltage, name, 1, true, width); -- cgit v1.2.3 From 471091d0fddf09ed69df75e4f2fdd92e5f57b9c5 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 10 May 2016 23:13:14 -0700 Subject: doc: Start update for 1.6.4 Signed-off-by: Keith Packard --- doc/Makefile | 1 + doc/altusmetrum-docinfo.xml | 8 ++++++++ doc/release-notes-1.6.4.inc | 32 ++++++++++++++++++++++++++++++++ doc/release-notes.inc | 5 +++++ doc/telegps-docinfo.xml | 8 ++++++++ 5 files changed, 54 insertions(+) create mode 100644 doc/release-notes-1.6.4.inc diff --git a/doc/Makefile b/doc/Makefile index ed06006a..31bc08d8 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -3,6 +3,7 @@ # RELNOTES_INC=\ + release-notes-1.6.4.inc \ release-notes-1.6.3.inc \ release-notes-1.6.2.inc \ release-notes-1.6.1.inc \ diff --git a/doc/altusmetrum-docinfo.xml b/doc/altusmetrum-docinfo.xml index 5473dd66..1b8ff68d 100644 --- a/doc/altusmetrum-docinfo.xml +++ b/doc/altusmetrum-docinfo.xml @@ -46,6 +46,14 @@ + + 1.6.4 + 10 May 2016 + + Minor release fixing TeleBT v1.0 flow control and a few minor + application bugs. + + 1.6.3 21 April 2016 diff --git a/doc/release-notes-1.6.4.inc b/doc/release-notes-1.6.4.inc new file mode 100644 index 00000000..faa57e94 --- /dev/null +++ b/doc/release-notes-1.6.4.inc @@ -0,0 +1,32 @@ += Release Notes for Version 1.6.4 +:toc!: +:doctype: article + + Version 1.6.4 fixes a bluetooth communication problem with + TeleBT v1.0 devices, along with some altosui and altosdroid + minor nits. Ship firmware for some newer devices. + + == AltOS + + AltOS fixes: + + * Fix hardware flow control on TeleBT v1.0. Hardware RTS/CTS + doesn't seem to work, switch from using the + hardware to driving these pins with software. + + == AltosUI, TeleGPS and AltosDroid Applications + + AltosUI and TeleGPS New Features: + + * Automatically switch from meters or feet to kilometers or + miles for distance units. + + AltosUI and TeleGPS Fixes: + + * Abort map preloading when the preload map dialog is closed. + + == Documentation + + * Mention TeleMega v2.0 in hardware specs table. + + * Document TeleGPS RF output in telegps manual. diff --git a/doc/release-notes.inc b/doc/release-notes.inc index 35ffa0d1..6ac90cfd 100644 --- a/doc/release-notes.inc +++ b/doc/release-notes.inc @@ -1,6 +1,11 @@ [appendix] == Release Notes + :leveloffset: 2 + include::release-notes-1.6.4.raw[] + + <<<< + :leveloffset: 2 include::release-notes-1.6.3.raw[] diff --git a/doc/telegps-docinfo.xml b/doc/telegps-docinfo.xml index 4ba3f73c..1ef088fe 100644 --- a/doc/telegps-docinfo.xml +++ b/doc/telegps-docinfo.xml @@ -37,6 +37,14 @@ + + 1.6.4 + 10 May 2016 + + Minor release fixing TeleBT v1.0 flow control and a few minor + application bugs. + + 1.6.1 15 July 2015 -- cgit v1.2.3 From 0a50669b1fde3e3c1cbc08c4836613b58ead219b Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 11 May 2016 10:47:31 -0700 Subject: altoslib: Clean up map file and url handling move it all to AltosMapStore.java Signed-off-by: Keith Packard --- altoslib/AltosMapStore.java | 46 +++++++++++++++++++++++++++++++++++++++++++-- altoslib/AltosMapTile.java | 41 +--------------------------------------- 2 files changed, 45 insertions(+), 42 deletions(-) diff --git a/altoslib/AltosMapStore.java b/altoslib/AltosMapStore.java index aed365ca..ca4c9c75 100644 --- a/altoslib/AltosMapStore.java +++ b/altoslib/AltosMapStore.java @@ -28,6 +28,45 @@ public class AltosMapStore { int status; + private static File map_file(AltosLatLon center, int zoom, int maptype, int px_size, int scale) { + double lat = center.lat; + double lon = center.lon; + char chlat = lat < 0 ? 'S' : 'N'; + char chlon = lon < 0 ? 'W' : 'E'; + + if (lat < 0) lat = -lat; + if (lon < 0) lon = -lon; + String maptype_string = String.format("%s-", AltosMap.maptype_names[maptype]); + String format_string; + if (maptype == AltosMap.maptype_hybrid || maptype == AltosMap.maptype_satellite || maptype == AltosMap.maptype_terrain) + format_string = "jpg"; + else + format_string = "png"; + return new File(AltosPreferences.mapdir(), + String.format("map-%c%.6f,%c%.6f-%s%d%s.%s", + chlat, lat, chlon, lon, maptype_string, zoom, scale == 1 ? "" : String.format("-%d", scale), format_string)); + } + + private static String map_url(AltosLatLon center, int zoom, int maptype, int px_size, int scale) { + String format_string; + int z = zoom; + + if (maptype == AltosMap.maptype_hybrid || maptype == AltosMap.maptype_satellite || maptype == AltosMap.maptype_terrain) + format_string = "jpg"; + else + format_string = "png32"; + + for (int s = 1; s < scale; s <<= 1) + z--; + + if (AltosVersion.has_google_maps_api_key()) + return String.format("http://maps.google.com/maps/api/staticmap?center=%.6f,%.6f&zoom=%d&size=%dx%d&scale=%d&sensor=false&maptype=%s&format=%s&key=%s", + center.lat, center.lon, z, px_size/scale, px_size/scale, scale, AltosMap.maptype_names[maptype], format_string, AltosVersion.google_maps_api_key); + else + return String.format("http://maps.google.com/maps/api/staticmap?center=%.6f,%.6f&zoom=%d&size=%dx%d&scale=%d&sensor=false&maptype=%s&format=%s", + center.lat, center.lon, z, px_size/scale, px_size/scale, AltosMap.maptype_names[maptype], format_string); + } + public int status() { return status; } @@ -229,16 +268,19 @@ public class AltosMapStore { static HashMap stores = new HashMap(); - public static AltosMapStore get(String url, File file) { + public static AltosMapStore get(AltosLatLon center, int zoom, int maptype, int px_size, int scale) { + String url = map_url(center, zoom, maptype, px_size, scale); + AltosMapStore store; synchronized(stores) { if (stores.containsKey(url)) { store = stores.get(url); } else { - store = new AltosMapStore(url, file); + store = new AltosMapStore(url, map_file(center, zoom, maptype, px_size, scale)); stores.put(url, store); } } return store; } + } diff --git a/altoslib/AltosMapTile.java b/altoslib/AltosMapTile.java index d921fd10..19332de1 100644 --- a/altoslib/AltosMapTile.java +++ b/altoslib/AltosMapTile.java @@ -38,45 +38,6 @@ public class AltosMapTile implements AltosFontListener, AltosMapStoreListener { static public final int bad_request = 4;/* downloading failed */ static public final int forbidden = 5; /* downloading failed */ - private File map_file() { - double lat = center.lat; - double lon = center.lon; - char chlat = lat < 0 ? 'S' : 'N'; - char chlon = lon < 0 ? 'W' : 'E'; - - if (lat < 0) lat = -lat; - if (lon < 0) lon = -lon; - String maptype_string = String.format("%s-", AltosMap.maptype_names[maptype]); - String format_string; - if (maptype == AltosMap.maptype_hybrid || maptype == AltosMap.maptype_satellite || maptype == AltosMap.maptype_terrain) - format_string = "jpg"; - else - format_string = "png"; - return new File(AltosPreferences.mapdir(), - String.format("map-%c%.6f,%c%.6f-%s%d%s.%s", - chlat, lat, chlon, lon, maptype_string, zoom, scale == 1 ? "" : String.format("-%d", scale), format_string)); - } - - private String map_url() { - String format_string; - int z = zoom; - - if (maptype == AltosMap.maptype_hybrid || maptype == AltosMap.maptype_satellite || maptype == AltosMap.maptype_terrain) - format_string = "jpg"; - else - format_string = "png32"; - - for (int s = 1; s < scale; s <<= 1) - z--; - - if (AltosVersion.has_google_maps_api_key()) - return String.format("http://maps.google.com/maps/api/staticmap?center=%.6f,%.6f&zoom=%d&size=%dx%d&scale=%d&sensor=false&maptype=%s&format=%s&key=%s", - center.lat, center.lon, z, px_size/scale, px_size/scale, scale, AltosMap.maptype_names[maptype], format_string, AltosVersion.google_maps_api_key); - else - return String.format("http://maps.google.com/maps/api/staticmap?center=%.6f,%.6f&zoom=%d&size=%dx%d&scale=%d&sensor=false&maptype=%s&format=%s", - center.lat, center.lon, z, px_size/scale, px_size/scale, AltosMap.maptype_names[maptype], format_string); - } - public void font_size_changed(int font_size) { } @@ -132,7 +93,7 @@ public class AltosMapTile implements AltosFontListener, AltosMapStoreListener { this.px_size = px_size; this.scale = scale; - store = AltosMapStore.get(map_url(), map_file()); + store = AltosMapStore.get(center, zoom, maptype, px_size, scale); store.add_listener(this); } -- cgit v1.2.3 From ab905d2f7d8929080042cfd16cc418ea5792c3cb Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 11 May 2016 12:43:51 -0700 Subject: altosdroid: make disconnect stick past pause/restart Clear the active_device preference on disconnect so we don't reconnect anytime the service gets activated. Signed-off-by: Keith Packard --- .../src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java | 9 +++++++-- altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java index dd86c818..16ee4429 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java @@ -57,8 +57,13 @@ public class AltosDroidPreferences extends AltosPreferences { public static void set_active_device(DeviceAddress address) { synchronized(backend) { active_device_address = address; - backend.putString(activeDeviceAddressPreference, active_device_address.address); - backend.putString(activeDeviceNamePreference, active_device_address.name); + if (active_device_address != null) { + backend.putString(activeDeviceAddressPreference, active_device_address.address); + backend.putString(activeDeviceNamePreference, active_device_address.name); + } else { + backend.remove(activeDeviceAddressPreference); + backend.remove(activeDeviceNamePreference); + } flush_preferences(); } } diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java index 3c1a1782..a81e24b0 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java @@ -129,6 +129,7 @@ public class TelemetryService extends Service implements AltosIdleMonitorListene case MSG_DISCONNECT: AltosDebug.debug("Disconnect command received"); s.address = null; + AltosDroidPreferences.set_active_device(null); s.disconnect(true); break; case MSG_DELETE_SERIAL: -- cgit v1.2.3 From 2ec7e14f0104e3a227ff566fa2fc1f6286ddd9d0 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 11 May 2016 12:48:10 -0700 Subject: altoslib: Get rid of AltosMap from AltosMapLoader Cleans up the loader API and eliminates a AltosMapTile for every chunk of map data. Signed-off-by: Keith Packard --- .../altusmetrum/AltosDroid/AltosMapOffline.java | 12 ++-- .../altusmetrum/AltosDroid/PreloadMapActivity.java | 75 ++-------------------- altoslib/AltosMap.java | 11 +++- altoslib/AltosMapInterface.java | 2 +- altoslib/AltosMapLoader.java | 26 ++++---- altoslib/AltosMapTile.java | 23 +++++-- altosuilib/AltosUIMapNew.java | 8 +-- altosuilib/AltosUIMapPreloadNew.java | 8 ++- 8 files changed, 65 insertions(+), 100 deletions(-) diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java index ab142b17..e7edf3c0 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java @@ -85,6 +85,8 @@ public class AltosMapOffline extends View implements ScaleGestureDetector.OnScal AltosMap map; AltosDroid altos_droid; + static int scale = 2; + AltosLatLon here; AltosLatLon there; AltosLatLon pad; @@ -181,14 +183,14 @@ public class AltosMapOffline extends View implements ScaleGestureDetector.OnScal } } - public MapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) { - super(cache, upper_left, center, zoom, maptype, px_size, 2); + public MapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale) { + super(cache, upper_left, center, zoom, maptype, px_size, scale); } } - public AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) { - return new MapTile(cache, upper_left, center, zoom, maptype, px_size); + public AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale) { + return new MapTile(cache, upper_left, center, zoom, maptype, px_size, scale); } public AltosMapPath new_path() { @@ -492,7 +494,7 @@ public class AltosMapOffline extends View implements ScaleGestureDetector.OnScal public void onCreateView(AltosDroid altos_droid) { this.altos_droid = altos_droid; - map = new AltosMap(this); + map = new AltosMap(this, scale); AltosPreferences.register_map_type_listener(this); map.set_maptype(AltosPreferences.map_type()); diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java index 11d71280..9dfc727e 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java @@ -49,7 +49,7 @@ import org.altusmetrum.altoslib_10.*; * by the user, the MAC address of the device is sent back to the parent * Activity in the result Intent. */ -public class PreloadMapActivity extends Activity implements AltosLaunchSiteListener, AltosMapInterface, AltosMapLoaderListener, LocationListener { +public class PreloadMapActivity extends Activity implements AltosLaunchSiteListener, AltosMapLoaderListener, LocationListener { private ArrayAdapter known_sites_adapter; @@ -110,7 +110,12 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe }); } + public void debug(String format, Object ... arguments) { + AltosDebug.debug(format, arguments); + } + /* AltosLaunchSiteListener interface */ + public void notify_launch_sites(final List sites) { this.runOnUiThread(new Runnable() { public void run() { @@ -120,70 +125,6 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe }); } - AltosMap map; - - class PreloadMapImage implements AltosImage { - public void flush() { - } - - public PreloadMapImage(File file) { - } - } - - public AltosMapPath new_path() { - return null; - } - - public AltosMapLine new_line() { - return null; - } - - public AltosImage load_image(File file) throws Exception { - return new PreloadMapImage(file); - } - - public AltosMapMark new_mark(double lat, double lon, int state) { - return null; - } - - class PreloadMapTile extends AltosMapTile { - public void paint(AltosMapTransform t) { - } - - public PreloadMapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) { - super(cache, upper_left, center, zoom, maptype, px_size, 2); - } - - } - - public AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) { - return new PreloadMapTile(cache, upper_left, center, zoom, maptype, px_size); - } - - public int width() { - return AltosMap.px_size; - } - - public int height() { - return AltosMap.px_size; - } - - public void repaint() { - } - - public void repaint(AltosRectangle damage) { - } - - public void set_zoom_label(String label) { - } - - public void select_object(AltosLatLon latlon) { - } - - public void debug(String format, Object ... arguments) { - AltosDebug.debug(format, arguments); - } - /* LocationProvider interface */ AltosLaunchSite current_location_site; @@ -281,7 +222,7 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe AltosDebug.debug("PreloadMap load %f %f %d %d %f %d\n", lat, lon, min, max, r, t); - loader = new AltosMapLoader(map, this, lat, lon, min, max, r, t); + loader = new AltosMapLoader(this, lat, lon, min, max, r, t, AltosMapOffline.scale); } catch (ParseException e) { AltosDebug.debug("PreloadMap load raised exception %s", e.toString()); } @@ -412,8 +353,6 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe known_sites_spinner.setAdapter(known_sites_adapter); known_sites_spinner.setOnItemSelectedListener(new SiteListListener()); - map = new AltosMap(this); - // Listen for GPS and Network position updates LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); diff --git a/altoslib/AltosMap.java b/altoslib/AltosMap.java index 1841277f..08ac5f3c 100644 --- a/altoslib/AltosMap.java +++ b/altoslib/AltosMap.java @@ -51,6 +51,7 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { }; AltosMapInterface map_interface; + int scale; AltosMapCache cache; @@ -328,7 +329,8 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { if (!tiles.containsKey(point)) { AltosLatLon ul = transform.lat_lon(point); AltosLatLon center = transform.lat_lon(new AltosPointDouble(x + AltosMap.px_size/2, y + AltosMap.px_size/2)); - AltosMapTile tile = map_interface.new_tile(cache, ul, center, zoom, maptype, px_size); + AltosMapTile tile = map_interface.new_tile(cache, ul, center, zoom, maptype, px_size, scale); + debug("show state %s url %s\n", AltosMapTile.status_name(tile.store.status()), tile.store.url); tile.add_listener(this); tiles.put(point, tile); } @@ -475,11 +477,16 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { drag_stop(x, y); } - public AltosMap(AltosMapInterface map_interface) { + public AltosMap(AltosMapInterface map_interface, int scale) { this.map_interface = map_interface; + this.scale = scale; cache = new AltosMapCache(map_interface); line = map_interface.new_line(); path = map_interface.new_path(); set_zoom_label(); } + + public AltosMap(AltosMapInterface map_interface) { + this(map_interface, 1); + } } diff --git a/altoslib/AltosMapInterface.java b/altoslib/AltosMapInterface.java index 756a78f2..df09224a 100644 --- a/altoslib/AltosMapInterface.java +++ b/altoslib/AltosMapInterface.java @@ -29,7 +29,7 @@ public interface AltosMapInterface { public abstract AltosMapMark new_mark(double lat, double lon, int state); - public abstract AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size); + public abstract AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale); public abstract int width(); diff --git a/altoslib/AltosMapLoader.java b/altoslib/AltosMapLoader.java index 8b856e13..015c0ad3 100644 --- a/altoslib/AltosMapLoader.java +++ b/altoslib/AltosMapLoader.java @@ -25,7 +25,7 @@ import java.lang.Math; import java.net.URL; import java.net.URLConnection; -public class AltosMapLoader extends Thread implements AltosMapTileListener { +public class AltosMapLoader extends Thread implements AltosMapStoreListener { AltosMapLoaderListener listener; double latitude, longitude; @@ -35,6 +35,7 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { int all_types; int cur_type; double radius; + int scale; int tiles_loaded_layer; int tiles_loaded_total; @@ -49,8 +50,6 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { boolean abort; - AltosMap map; - int tile_radius(int zoom) { double delta_lon = AltosMapTransform.lon_from_distance(latitude, radius); @@ -80,8 +79,6 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { AltosLatLon load_centre = new AltosLatLon(latitude, longitude); AltosMapTransform transform = new AltosMapTransform(256, 256, zoom, load_centre); - map.centre(load_centre); - AltosPointInt upper_left; AltosPointInt lower_right; @@ -103,8 +100,9 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { AltosPointInt point = new AltosPointInt(x, y); AltosLatLon ul = transform.lat_lon(point); AltosLatLon center = transform.lat_lon(new AltosPointDouble(x + AltosMap.px_size/2, y + AltosMap.px_size/2)); - AltosMapTile tile = new AltosMapTile(null, ul, center, zoom, maptype, AltosMap.px_size); - tile.add_listener(this); + AltosMapStore store = AltosMapStore.get(center, zoom, maptype, AltosMap.px_size, scale); + listener.debug("load state %s url %s\n", AltosMapTile.status_name(store.status()), store.url); + store.add_listener(this); if (abort) return false; } @@ -170,14 +168,14 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { listener.loader_done(tiles_total); } - public synchronized void notify_tile(AltosMapTile tile, int status) { + public synchronized void notify_store(AltosMapStore store, int status) { boolean do_next = false; if (status == AltosMapTile.fetching) return; loading.release(); - tile.remove_listener(this); + store.remove_listener(this); if (layers_loaded >= layers_total) return; @@ -185,7 +183,7 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { ++tiles_loaded_total; ++tiles_loaded_layer; - listener.debug("AltosMapLoader.notify_tile status %d total %d of %d layer %d of %d\n", + listener.debug("AltosMapLoader.notify_store status %d total %d of %d layer %d of %d\n", status, tiles_loaded_total, tiles_total, tiles_loaded_layer, tiles_this_layer); if (tiles_loaded_layer == tiles_this_layer) { @@ -198,18 +196,17 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { listener.loader_done(tiles_total); else listener.loader_notify(tiles_loaded_total, - tiles_total, tile.store.file.toString()); + tiles_total, store.file.toString()); } public void abort() { this.abort = true; } - public AltosMapLoader(AltosMap map, AltosMapLoaderListener listener, - double latitude, double longitude, int min_z, int max_z, double radius, int all_types) { + public AltosMapLoader(AltosMapLoaderListener listener, + double latitude, double longitude, int min_z, int max_z, double radius, int all_types, int scale) { listener.debug("lat %f lon %f min_z %d max_z %d radius %f all_types %d\n", latitude, longitude, min_z, max_z, radius, all_types); - this.map = map; this.listener = listener; this.latitude = latitude; this.longitude = longitude; @@ -217,6 +214,7 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener { this.max_z = max_z; this.radius = radius; this.all_types = all_types; + this.scale = scale; this.abort = false; start(); } diff --git a/altoslib/AltosMapTile.java b/altoslib/AltosMapTile.java index 19332de1..b0bac963 100644 --- a/altoslib/AltosMapTile.java +++ b/altoslib/AltosMapTile.java @@ -38,6 +38,25 @@ public class AltosMapTile implements AltosFontListener, AltosMapStoreListener { static public final int bad_request = 4;/* downloading failed */ static public final int forbidden = 5; /* downloading failed */ + static public String status_name(int status) { + switch (status) { + case loaded: + return "loaded"; + case fetched: + return "fetched"; + case fetching: + return "fetching"; + case failed: + return "failed"; + case bad_request: + return "bad_request"; + case forbidden: + return "forbidden"; + default: + return "unknown"; + } + } + public void font_size_changed(int font_size) { } @@ -96,8 +115,4 @@ public class AltosMapTile implements AltosFontListener, AltosMapStoreListener { store = AltosMapStore.get(center, zoom, maptype, px_size, scale); store.add_listener(this); } - - public AltosMapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) { - this(cache, upper_left, center, zoom, maptype, px_size, 1); - } } diff --git a/altosuilib/AltosUIMapNew.java b/altosuilib/AltosUIMapNew.java index a90e8c91..768fd058 100644 --- a/altosuilib/AltosUIMapNew.java +++ b/altosuilib/AltosUIMapNew.java @@ -241,8 +241,8 @@ public class AltosUIMapNew extends JComponent implements AltosFlightDisplay, Alt } class MapTile extends AltosMapTile { - public MapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) { - super(cache, upper_left, center, zoom, maptype, px_size); + public MapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale) { + super(cache, upper_left, center, zoom, maptype, px_size, scale); } public void paint(AltosMapTransform t) { @@ -332,8 +332,8 @@ public class AltosUIMapNew extends JComponent implements AltosFlightDisplay, Alt return new MapMark(lat, lon, state); } - public AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) { - return new MapTile(cache, upper_left, center, zoom, maptype, px_size); + public AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale) { + return new MapTile(cache, upper_left, center, zoom, maptype, px_size, scale); } public int width() { diff --git a/altosuilib/AltosUIMapPreloadNew.java b/altosuilib/AltosUIMapPreloadNew.java index 3e4a604f..7cdba382 100644 --- a/altosuilib/AltosUIMapPreloadNew.java +++ b/altosuilib/AltosUIMapPreloadNew.java @@ -138,6 +138,7 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener JComboBox min_zoom; JComboBox max_zoom; JComboBox radius; + int scale = 1; Integer[] zooms = { -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6 }; @@ -249,9 +250,12 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener else r = r * 1000; - loader = new AltosMapLoader(map.map, this, + map.map.centre(new AltosLatLon(latitude, longitude)); + + loader = new AltosMapLoader(this, latitude, longitude, - min_z, max_z, r, all_types()); + min_z, max_z, r, + all_types(), scale); } catch (ParseException pe) { load_button.setSelected(false); -- cgit v1.2.3 From ba84b9c908d5909ea5a148c249709b21640f1eac Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 11 May 2016 23:31:53 -0700 Subject: telegps: Adapt to distance units switching changes 'show_units' is no longer available; use 'parse_units' instead Signed-off-by: Keith Packard --- telegps/TeleGPSConfigUI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telegps/TeleGPSConfigUI.java b/telegps/TeleGPSConfigUI.java index 0f8a3d25..075fd8bb 100644 --- a/telegps/TeleGPSConfigUI.java +++ b/telegps/TeleGPSConfigUI.java @@ -854,7 +854,7 @@ public class TeleGPSConfigUI } String get_tracker_motion_label() { - return String.format("Logging Trigger Motion (%s):", AltosConvert.height.show_units()); + return String.format("Logging Trigger Motion (%s):", AltosConvert.height.parse_units()); } void set_tracker_tool_tip() { -- cgit v1.2.3 From 3450efdf8bd736a33900493eeda348ec2dacf7e8 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 12 May 2016 12:13:45 -0700 Subject: Bump android app version Prepare for 1.6.4 release Signed-off-by: Keith Packard --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 3f7de9c8..d5284fa1 100644 --- a/configure.ac +++ b/configure.ac @@ -19,7 +19,7 @@ dnl Process this file with autoconf to create configure. AC_PREREQ(2.57) AC_INIT([altos], 1.6.3.1) -ANDROID_VERSION=11 +ANDROID_VERSION=12 AC_CONFIG_SRCDIR([src/kernel/ao.h]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_MAINTAINER_MODE -- cgit v1.2.3 From 97adfff4cfb67c17a96f3ff46606b4e439422b01 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 12 May 2016 12:14:03 -0700 Subject: Bump java library versions Prepare for 1.6.4 release Signed-off-by: Keith Packard --- altosdroid/src/org/altusmetrum/AltosDroid/AltosBluetooth.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/AltosDebug.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidLink.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidMapInterface.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java | 2 +- .../src/org/altusmetrum/AltosDroid/AltosDroidPreferencesBackend.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOnline.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/AltosUsb.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/IdleModeActivity.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/IgniterActivity.java | 2 +- .../src/org/altusmetrum/AltosDroid/ManageFrequenciesActivity.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/MapTypeActivity.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/SetupActivity.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/TabFlight.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/TabRecover.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/TelemetryState.java | 2 +- altoslib/AltosAccel.java | 2 +- altoslib/AltosCRCException.java | 2 +- altoslib/AltosCSV.java | 2 +- altoslib/AltosCompanion.java | 2 +- altoslib/AltosConfigData.java | 2 +- altoslib/AltosConfigDataException.java | 2 +- altoslib/AltosConfigValues.java | 2 +- altoslib/AltosConvert.java | 2 +- altoslib/AltosDebug.java | 2 +- altoslib/AltosDistance.java | 2 +- altoslib/AltosEeprom.java | 2 +- altoslib/AltosEepromChunk.java | 2 +- altoslib/AltosEepromDownload.java | 2 +- altoslib/AltosEepromFile.java | 2 +- altoslib/AltosEepromGPS.java | 2 +- altoslib/AltosEepromHeader.java | 2 +- altoslib/AltosEepromIterable.java | 2 +- altoslib/AltosEepromList.java | 2 +- altoslib/AltosEepromLog.java | 2 +- altoslib/AltosEepromMega.java | 2 +- altoslib/AltosEepromMetrum2.java | 2 +- altoslib/AltosEepromMini.java | 2 +- altoslib/AltosEepromMonitor.java | 2 +- altoslib/AltosEepromTM.java | 2 +- altoslib/AltosEepromTMini.java | 2 +- altoslib/AltosFile.java | 2 +- altoslib/AltosFlash.java | 2 +- altoslib/AltosFlashListener.java | 2 +- altoslib/AltosFlightDisplay.java | 2 +- altoslib/AltosFlightReader.java | 2 +- altoslib/AltosFlightStats.java | 2 +- altoslib/AltosFontListener.java | 2 +- altoslib/AltosFrequency.java | 2 +- altoslib/AltosGPS.java | 2 +- altoslib/AltosGPSSat.java | 2 +- altoslib/AltosGreatCircle.java | 2 +- altoslib/AltosHeight.java | 2 +- altoslib/AltosHexfile.java | 2 +- altoslib/AltosHexsym.java | 2 +- altoslib/AltosIMU.java | 2 +- altoslib/AltosIdle.java | 2 +- altoslib/AltosIdleFetch.java | 2 +- altoslib/AltosIdleMonitor.java | 2 +- altoslib/AltosIdleMonitorListener.java | 2 +- altoslib/AltosIgnite.java | 2 +- altoslib/AltosImage.java | 2 +- altoslib/AltosKML.java | 2 +- altoslib/AltosLatLon.java | 2 +- altoslib/AltosLatitude.java | 2 +- altoslib/AltosLaunchSite.java | 2 +- altoslib/AltosLaunchSiteListener.java | 2 +- altoslib/AltosLaunchSites.java | 2 +- altoslib/AltosLib.java | 2 +- altoslib/AltosLine.java | 2 +- altoslib/AltosLink.java | 2 +- altoslib/AltosListenerState.java | 2 +- altoslib/AltosLocation.java | 2 +- altoslib/AltosLog.java | 2 +- altoslib/AltosLongitude.java | 2 +- altoslib/AltosMag.java | 2 +- altoslib/AltosMap.java | 2 +- altoslib/AltosMapCache.java | 2 +- altoslib/AltosMapCacheListener.java | 2 +- altoslib/AltosMapInterface.java | 2 +- altoslib/AltosMapLine.java | 2 +- altoslib/AltosMapLoader.java | 2 +- altoslib/AltosMapLoaderListener.java | 2 +- altoslib/AltosMapMark.java | 2 +- altoslib/AltosMapPath.java | 2 +- altoslib/AltosMapPathPoint.java | 2 +- altoslib/AltosMapRectangle.java | 2 +- altoslib/AltosMapStore.java | 2 +- altoslib/AltosMapStoreListener.java | 2 +- altoslib/AltosMapTile.java | 2 +- altoslib/AltosMapTileListener.java | 2 +- altoslib/AltosMapTransform.java | 2 +- altoslib/AltosMapTypeListener.java | 2 +- altoslib/AltosMapZoomListener.java | 2 +- altoslib/AltosMma655x.java | 2 +- altoslib/AltosMs5607.java | 2 +- altoslib/AltosNoSymbol.java | 2 +- altoslib/AltosOrient.java | 2 +- altoslib/AltosParse.java | 2 +- altoslib/AltosPointDouble.java | 2 +- altoslib/AltosPointInt.java | 2 +- altoslib/AltosPreferences.java | 2 +- altoslib/AltosPreferencesBackend.java | 2 +- altoslib/AltosProgrammer.java | 2 +- altoslib/AltosPyro.java | 2 +- altoslib/AltosQuaternion.java | 2 +- altoslib/AltosRectangle.java | 2 +- altoslib/AltosReplayReader.java | 2 +- altoslib/AltosRomconfig.java | 2 +- altoslib/AltosRotation.java | 2 +- altoslib/AltosSavedState.java | 2 +- altoslib/AltosSelfFlash.java | 2 +- altoslib/AltosSensorEMini.java | 2 +- altoslib/AltosSensorMM.java | 2 +- altoslib/AltosSensorMega.java | 2 +- altoslib/AltosSensorMetrum.java | 2 +- altoslib/AltosSensorTGPS.java | 2 +- altoslib/AltosSensorTM.java | 2 +- altoslib/AltosSensorTMini.java | 2 +- altoslib/AltosSpeed.java | 2 +- altoslib/AltosState.java | 2 +- altoslib/AltosStateIterable.java | 2 +- altoslib/AltosStateUpdate.java | 2 +- altoslib/AltosTelemetry.java | 2 +- altoslib/AltosTelemetryCompanion.java | 2 +- altoslib/AltosTelemetryConfiguration.java | 2 +- altoslib/AltosTelemetryFile.java | 2 +- altoslib/AltosTelemetryIterable.java | 2 +- altoslib/AltosTelemetryLegacy.java | 2 +- altoslib/AltosTelemetryLocation.java | 2 +- altoslib/AltosTelemetryMap.java | 2 +- altoslib/AltosTelemetryMegaData.java | 2 +- altoslib/AltosTelemetryMegaSensor.java | 2 +- altoslib/AltosTelemetryMetrumData.java | 2 +- altoslib/AltosTelemetryMetrumSensor.java | 2 +- altoslib/AltosTelemetryMini.java | 2 +- altoslib/AltosTelemetryRaw.java | 2 +- altoslib/AltosTelemetryReader.java | 2 +- altoslib/AltosTelemetrySatellite.java | 2 +- altoslib/AltosTelemetrySensor.java | 2 +- altoslib/AltosTelemetryStandard.java | 2 +- altoslib/AltosTemperature.java | 2 +- altoslib/AltosUnits.java | 2 +- altoslib/AltosUnitsListener.java | 2 +- altoslib/AltosUnitsRange.java | 2 +- altoslib/AltosUnknownProduct.java | 2 +- altoslib/AltosVersion.java.in | 2 +- altoslib/AltosVoltage.java | 2 +- altoslib/AltosWriter.java | 2 +- altosui/Altos.java | 4 ++-- altosui/AltosAscent.java | 4 ++-- altosui/AltosCompanionInfo.java | 4 ++-- altosui/AltosConfig.java | 4 ++-- altosui/AltosConfigPyroUI.java | 4 ++-- altosui/AltosConfigTD.java | 4 ++-- altosui/AltosConfigTDUI.java | 4 ++-- altosui/AltosConfigUI.java | 4 ++-- altosui/AltosConfigureUI.java | 2 +- altosui/AltosDescent.java | 4 ++-- altosui/AltosFlightStatus.java | 4 ++-- altosui/AltosFlightStatusTableModel.java | 2 +- altosui/AltosFlightStatusUpdate.java | 2 +- altosui/AltosFlightUI.java | 4 ++-- altosui/AltosGraphUI.java | 4 ++-- altosui/AltosIdleMonitorUI.java | 4 ++-- altosui/AltosIgniteUI.java | 4 ++-- altosui/AltosIgnitor.java | 4 ++-- altosui/AltosLanded.java | 4 ++-- altosui/AltosLaunch.java | 2 +- altosui/AltosLaunchUI.java | 2 +- altosui/AltosPad.java | 4 ++-- altosui/AltosUI.java | 4 ++-- altosuilib/AltosBTDevice.java | 4 ++-- altosuilib/AltosBTDeviceIterator.java | 4 ++-- altosuilib/AltosBTKnown.java | 4 ++-- altosuilib/AltosBTManage.java | 4 ++-- altosuilib/AltosCSVUI.java | 4 ++-- altosuilib/AltosConfigFreqUI.java | 4 ++-- altosuilib/AltosDataChooser.java | 4 ++-- altosuilib/AltosDevice.java | 2 +- altosuilib/AltosDeviceDialog.java | 2 +- altosuilib/AltosDeviceUIDialog.java | 2 +- altosuilib/AltosDisplayThread.java | 4 ++-- altosuilib/AltosEepromDelete.java | 4 ++-- altosuilib/AltosEepromManage.java | 4 ++-- altosuilib/AltosEepromMonitor.java | 2 +- altosuilib/AltosEepromMonitorUI.java | 4 ++-- altosuilib/AltosEepromSelect.java | 4 ++-- altosuilib/AltosFlashUI.java | 4 ++-- altosuilib/AltosFlightInfoTableModel.java | 2 +- altosuilib/AltosFlightStatsTable.java | 4 ++-- altosuilib/AltosGraph.java | 4 ++-- altosuilib/AltosGraphDataPoint.java | 4 ++-- altosuilib/AltosGraphDataSet.java | 4 ++-- altosuilib/AltosInfoTable.java | 4 ++-- altosuilib/AltosLed.java | 2 +- altosuilib/AltosLights.java | 2 +- altosuilib/AltosPositionListener.java | 2 +- altosuilib/AltosRomconfigUI.java | 4 ++-- altosuilib/AltosScanUI.java | 4 ++-- altosuilib/AltosSerial.java | 4 ++-- altosuilib/AltosSerialInUseException.java | 2 +- altosuilib/AltosUIAxis.java | 4 ++-- altosuilib/AltosUIConfigure.java | 4 ++-- altosuilib/AltosUIDataMissing.java | 2 +- altosuilib/AltosUIDataPoint.java | 2 +- altosuilib/AltosUIDataSet.java | 2 +- altosuilib/AltosUIDialog.java | 2 +- altosuilib/AltosUIEnable.java | 4 ++-- altosuilib/AltosUIFlightTab.java | 4 ++-- altosuilib/AltosUIFrame.java | 2 +- altosuilib/AltosUIFreqList.java | 4 ++-- altosuilib/AltosUIGraph.java | 4 ++-- altosuilib/AltosUIGrapher.java | 4 ++-- altosuilib/AltosUIImage.java | 2 +- altosuilib/AltosUIIndicator.java | 4 ++-- altosuilib/AltosUILib.java | 4 ++-- altosuilib/AltosUIListener.java | 2 +- altosuilib/AltosUIMapNew.java | 4 ++-- altosuilib/AltosUIMapPreloadNew.java | 4 ++-- altosuilib/AltosUIMarker.java | 4 ++-- altosuilib/AltosUIPreferences.java | 4 ++-- altosuilib/AltosUIPreferencesBackend.java | 4 ++-- altosuilib/AltosUIRateList.java | 4 ++-- altosuilib/AltosUISeries.java | 4 ++-- altosuilib/AltosUITelemetryList.java | 4 ++-- altosuilib/AltosUIUnitsIndicator.java | 4 ++-- altosuilib/AltosUIVoltageIndicator.java | 4 ++-- altosuilib/AltosUSBDevice.java | 2 +- altosuilib/AltosVoice.java | 2 +- altosuilib/GrabNDrag.java | 2 +- altosuilib/OSXAdapter.java | 2 +- configure.ac | 4 ++-- micropeak/MicroData.java | 4 ++-- micropeak/MicroDataPoint.java | 2 +- micropeak/MicroDeviceDialog.java | 2 +- micropeak/MicroDownload.java | 4 ++-- micropeak/MicroExport.java | 4 ++-- micropeak/MicroFile.java | 4 ++-- micropeak/MicroFileChooser.java | 4 ++-- micropeak/MicroFrame.java | 2 +- micropeak/MicroGraph.java | 4 ++-- micropeak/MicroPeak.java | 4 ++-- micropeak/MicroRaw.java | 4 ++-- micropeak/MicroSave.java | 4 ++-- micropeak/MicroSerial.java | 2 +- micropeak/MicroSerialLog.java | 2 +- micropeak/MicroStats.java | 4 ++-- micropeak/MicroStatsTable.java | 4 ++-- micropeak/MicroUSB.java | 4 ++-- telegps/TeleGPS.java | 4 ++-- telegps/TeleGPSConfig.java | 4 ++-- telegps/TeleGPSConfigUI.java | 4 ++-- telegps/TeleGPSDisplayThread.java | 4 ++-- telegps/TeleGPSGraphUI.java | 4 ++-- telegps/TeleGPSInfo.java | 4 ++-- telegps/TeleGPSPreferences.java | 2 +- telegps/TeleGPSState.java | 4 ++-- telegps/TeleGPSStatus.java | 4 ++-- telegps/TeleGPSStatusUpdate.java | 2 +- 270 files changed, 349 insertions(+), 349 deletions(-) diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosBluetooth.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosBluetooth.java index 51937b7f..246fb0b0 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosBluetooth.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosBluetooth.java @@ -30,7 +30,7 @@ import android.bluetooth.BluetoothSocket; import android.os.Handler; //import android.os.Message; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosBluetooth extends AltosDroidLink { diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDebug.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDebug.java index 64980dc7..eddc83b9 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDebug.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDebug.java @@ -20,7 +20,7 @@ import java.util.Arrays; import java.io.*; import java.lang.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import android.app.Activity; import android.graphics.*; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java index 026e836d..385348ea 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java @@ -51,7 +51,7 @@ import android.hardware.usb.*; import android.graphics.*; import android.graphics.drawable.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosDroid extends FragmentActivity implements AltosUnitsListener, LocationListener { diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidLink.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidLink.java index 0fd9af75..bca70d69 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidLink.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidLink.java @@ -24,7 +24,7 @@ import java.util.UUID; import android.os.Handler; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public abstract class AltosDroidLink extends AltosLink { diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidMapInterface.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidMapInterface.java index 43abef0f..b9b4b50f 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidMapInterface.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidMapInterface.java @@ -20,7 +20,7 @@ package org.altusmetrum.AltosDroid; import java.util.*; import java.io.*; import android.location.Location; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public interface AltosDroidMapInterface { public void onCreateView(AltosDroid altos_droid); diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java index 16ee4429..446bbf04 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java @@ -21,7 +21,7 @@ import java.util.*; import java.text.*; import android.content.Context; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosDroidPreferences extends AltosPreferences { diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferencesBackend.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferencesBackend.java index 5c7ec513..e48b7b2a 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferencesBackend.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferencesBackend.java @@ -24,7 +24,7 @@ import android.content.SharedPreferences; import android.os.Environment; import android.util.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosDroidPreferencesBackend extends AltosPreferencesBackend { public final static String NAME = "org.altusmetrum.AltosDroid"; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java index 77dbbcb1..3e10d3a4 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java @@ -17,7 +17,7 @@ package org.altusmetrum.AltosDroid; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import android.location.Location; import android.app.Activity; import android.graphics.Color; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java index e7edf3c0..0061eba1 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java @@ -20,7 +20,7 @@ package org.altusmetrum.AltosDroid; import java.util.*; import java.io.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import android.app.Activity; import android.graphics.*; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOnline.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOnline.java index fcdb930b..9a828df5 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOnline.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOnline.java @@ -19,7 +19,7 @@ package org.altusmetrum.AltosDroid; import java.util.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import com.google.android.gms.maps.*; import com.google.android.gms.maps.model.*; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosUsb.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosUsb.java index 4660512a..4b007cb1 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosUsb.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosUsb.java @@ -28,7 +28,7 @@ import android.hardware.usb.*; import android.app.*; import android.os.Handler; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosUsb extends AltosDroidLink { diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java index 542ba1f5..d7c0f623 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java @@ -22,7 +22,7 @@ import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech.OnInitListener; import android.location.Location; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosVoice { diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/IdleModeActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/IdleModeActivity.java index ec12c192..c4e950b6 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/IdleModeActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/IdleModeActivity.java @@ -34,7 +34,7 @@ import android.view.View.OnClickListener; import android.widget.*; import android.widget.AdapterView.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class IdleModeActivity extends Activity { private EditText callsign; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/IgniterActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/IgniterActivity.java index 931c3cfd..d9229ad6 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/IgniterActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/IgniterActivity.java @@ -32,7 +32,7 @@ import android.view.View.*; import android.widget.*; import android.widget.AdapterView.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; class IgniterItem { public String name; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/ManageFrequenciesActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/ManageFrequenciesActivity.java index 401cdc9d..1e92b89f 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/ManageFrequenciesActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/ManageFrequenciesActivity.java @@ -32,7 +32,7 @@ import android.view.inputmethod.*; import android.widget.*; import android.widget.AdapterView.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; class FrequencyItem { public AltosFrequency frequency; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/MapTypeActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/MapTypeActivity.java index cfbcdafc..d8bcad75 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/MapTypeActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/MapTypeActivity.java @@ -34,7 +34,7 @@ import android.view.View.OnClickListener; import android.widget.*; import android.widget.AdapterView.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class MapTypeActivity extends Activity { private Button hybrid; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java index 9dfc727e..8e3e7b01 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java @@ -41,7 +41,7 @@ import android.location.LocationManager; import android.location.LocationListener; import android.location.Criteria; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; /** * This Activity appears as a dialog. It lists any paired devices and diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/SetupActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/SetupActivity.java index fdffc2b0..06e74d9b 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/SetupActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/SetupActivity.java @@ -30,7 +30,7 @@ import android.view.View.*; import android.widget.*; import android.widget.AdapterView.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class SetupActivity extends Activity { private Spinner select_rate; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabFlight.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabFlight.java index 9bbdc060..dc8390e3 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TabFlight.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabFlight.java @@ -17,7 +17,7 @@ package org.altusmetrum.AltosDroid; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import android.app.Activity; import android.os.Bundle; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java index 19ce86c9..9e3cb530 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java @@ -20,7 +20,7 @@ package org.altusmetrum.AltosDroid; import java.util.*; import java.io.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import android.app.Activity; import android.graphics.*; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java index 1194eb00..fffc426a 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java @@ -17,7 +17,7 @@ package org.altusmetrum.AltosDroid; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import android.app.Activity; import android.os.Bundle; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabRecover.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabRecover.java index 8742227b..b0fe9e5f 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TabRecover.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabRecover.java @@ -17,7 +17,7 @@ package org.altusmetrum.AltosDroid; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import android.app.Activity; import android.os.Bundle; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java index bdea0986..c379d3d8 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java @@ -1,6 +1,6 @@ package org.altusmetrum.AltosDroid; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import android.content.BroadcastReceiver; import android.content.Context; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java index 0ac6bb5c..21ac0fbf 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java @@ -25,7 +25,7 @@ import java.util.*; import java.util.concurrent.*; import android.os.Handler; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class TelemetryReader extends Thread { diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java index a81e24b0..6519a114 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java @@ -40,7 +40,7 @@ import android.os.Looper; import android.widget.Toast; import android.location.Criteria; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class TelemetryService extends Service implements AltosIdleMonitorListener { diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryState.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryState.java index d3ccf0a9..e7bef92c 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryState.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryState.java @@ -18,7 +18,7 @@ package org.altusmetrum.AltosDroid; import java.util.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import android.location.Location; public class TelemetryState { diff --git a/altoslib/AltosAccel.java b/altoslib/AltosAccel.java index 2c563f66..00f3aefc 100644 --- a/altoslib/AltosAccel.java +++ b/altoslib/AltosAccel.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; diff --git a/altoslib/AltosCRCException.java b/altoslib/AltosCRCException.java index 03dad137..87d84370 100644 --- a/altoslib/AltosCRCException.java +++ b/altoslib/AltosCRCException.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosCRCException extends Exception { public int rssi; diff --git a/altoslib/AltosCSV.java b/altoslib/AltosCSV.java index fa515b31..b38ed8da 100644 --- a/altoslib/AltosCSV.java +++ b/altoslib/AltosCSV.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosCompanion.java b/altoslib/AltosCompanion.java index dc33dacc..381b0a25 100644 --- a/altoslib/AltosCompanion.java +++ b/altoslib/AltosCompanion.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index 812296f3..aa46f118 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_10; +package org.altusmetrum.altoslib_11; import java.util.*; import java.text.*; diff --git a/altoslib/AltosConfigDataException.java b/altoslib/AltosConfigDataException.java index 75cd1695..a55f75c2 100644 --- a/altoslib/AltosConfigDataException.java +++ b/altoslib/AltosConfigDataException.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosConfigDataException extends Exception { diff --git a/altoslib/AltosConfigValues.java b/altoslib/AltosConfigValues.java index aab0892a..babd7a4d 100644 --- a/altoslib/AltosConfigValues.java +++ b/altoslib/AltosConfigValues.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosConfigValues { /* set and get all of the dialog values */ diff --git a/altoslib/AltosConvert.java b/altoslib/AltosConvert.java index 265b5f0f..5498ae98 100644 --- a/altoslib/AltosConvert.java +++ b/altoslib/AltosConvert.java @@ -18,7 +18,7 @@ /* * Sensor data conversion functions */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosConvert { /* diff --git a/altoslib/AltosDebug.java b/altoslib/AltosDebug.java index e93c2d2d..0bb12688 100644 --- a/altoslib/AltosDebug.java +++ b/altoslib/AltosDebug.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; diff --git a/altoslib/AltosDistance.java b/altoslib/AltosDistance.java index 1ec39f8d..d6788fb5 100644 --- a/altoslib/AltosDistance.java +++ b/altoslib/AltosDistance.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosDistance extends AltosUnits { diff --git a/altoslib/AltosEeprom.java b/altoslib/AltosEeprom.java index 5f0a349f..94009b57 100644 --- a/altoslib/AltosEeprom.java +++ b/altoslib/AltosEeprom.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosEepromChunk.java b/altoslib/AltosEepromChunk.java index 7a80e294..4f956636 100644 --- a/altoslib/AltosEepromChunk.java +++ b/altoslib/AltosEepromChunk.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.text.*; import java.util.concurrent.*; diff --git a/altoslib/AltosEepromDownload.java b/altoslib/AltosEepromDownload.java index 1a02cb9c..fa76574c 100644 --- a/altoslib/AltosEepromDownload.java +++ b/altoslib/AltosEepromDownload.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosEepromFile.java b/altoslib/AltosEepromFile.java index 000bb1be..d23116a6 100644 --- a/altoslib/AltosEepromFile.java +++ b/altoslib/AltosEepromFile.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosEepromGPS.java b/altoslib/AltosEepromGPS.java index a0a074ee..a6d2ef32 100644 --- a/altoslib/AltosEepromGPS.java +++ b/altoslib/AltosEepromGPS.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosEepromHeader.java b/altoslib/AltosEepromHeader.java index 6c8c56d4..1f94ac07 100644 --- a/altoslib/AltosEepromHeader.java +++ b/altoslib/AltosEepromHeader.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosEepromIterable.java b/altoslib/AltosEepromIterable.java index 97bb9285..c0311b99 100644 --- a/altoslib/AltosEepromIterable.java +++ b/altoslib/AltosEepromIterable.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosEepromList.java b/altoslib/AltosEepromList.java index 4d511ead..abc30a71 100644 --- a/altoslib/AltosEepromList.java +++ b/altoslib/AltosEepromList.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosEepromLog.java b/altoslib/AltosEepromLog.java index f0ed2db4..9eb5d230 100644 --- a/altoslib/AltosEepromLog.java +++ b/altoslib/AltosEepromLog.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.text.*; import java.util.concurrent.*; diff --git a/altoslib/AltosEepromMega.java b/altoslib/AltosEepromMega.java index 29f0aa90..09fb4288 100644 --- a/altoslib/AltosEepromMega.java +++ b/altoslib/AltosEepromMega.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosEepromMetrum2.java b/altoslib/AltosEepromMetrum2.java index 5662c8e5..f23bffd2 100644 --- a/altoslib/AltosEepromMetrum2.java +++ b/altoslib/AltosEepromMetrum2.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosEepromMini.java b/altoslib/AltosEepromMini.java index f429a0e8..b06e6c84 100644 --- a/altoslib/AltosEepromMini.java +++ b/altoslib/AltosEepromMini.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosEepromMonitor.java b/altoslib/AltosEepromMonitor.java index a966c631..9f6094a5 100644 --- a/altoslib/AltosEepromMonitor.java +++ b/altoslib/AltosEepromMonitor.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosEepromMonitor { diff --git a/altoslib/AltosEepromTM.java b/altoslib/AltosEepromTM.java index 7a27a234..a65bd11e 100644 --- a/altoslib/AltosEepromTM.java +++ b/altoslib/AltosEepromTM.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosEepromTMini.java b/altoslib/AltosEepromTMini.java index 8f01c088..82f5aedf 100644 --- a/altoslib/AltosEepromTMini.java +++ b/altoslib/AltosEepromTMini.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosFile.java b/altoslib/AltosFile.java index d1d17610..dc2dba82 100644 --- a/altoslib/AltosFile.java +++ b/altoslib/AltosFile.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.File; import java.util.*; diff --git a/altoslib/AltosFlash.java b/altoslib/AltosFlash.java index d79edf68..285e31d5 100644 --- a/altoslib/AltosFlash.java +++ b/altoslib/AltosFlash.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; diff --git a/altoslib/AltosFlashListener.java b/altoslib/AltosFlashListener.java index 8d171baf..170bf0b0 100644 --- a/altoslib/AltosFlashListener.java +++ b/altoslib/AltosFlashListener.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosFlashListener { public void position(String label, int percent); diff --git a/altoslib/AltosFlightDisplay.java b/altoslib/AltosFlightDisplay.java index 4b57526a..5a6d88d1 100644 --- a/altoslib/AltosFlightDisplay.java +++ b/altoslib/AltosFlightDisplay.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosFlightDisplay extends AltosUnitsListener, AltosFontListener { void reset(); diff --git a/altoslib/AltosFlightReader.java b/altoslib/AltosFlightReader.java index 62f24e9f..77711a4c 100644 --- a/altoslib/AltosFlightReader.java +++ b/altoslib/AltosFlightReader.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.text.*; import java.io.*; diff --git a/altoslib/AltosFlightStats.java b/altoslib/AltosFlightStats.java index 1c7d67e0..32314b2b 100644 --- a/altoslib/AltosFlightStats.java +++ b/altoslib/AltosFlightStats.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; diff --git a/altoslib/AltosFontListener.java b/altoslib/AltosFontListener.java index 565f50e4..9a1622d9 100644 --- a/altoslib/AltosFontListener.java +++ b/altoslib/AltosFontListener.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosFontListener { void font_size_changed(int font_size); diff --git a/altoslib/AltosFrequency.java b/altoslib/AltosFrequency.java index 9542fe33..ef46bd67 100644 --- a/altoslib/AltosFrequency.java +++ b/altoslib/AltosFrequency.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java index c5290a3a..6f7c40b7 100644 --- a/altoslib/AltosGPS.java +++ b/altoslib/AltosGPS.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.text.*; import java.util.concurrent.*; diff --git a/altoslib/AltosGPSSat.java b/altoslib/AltosGPSSat.java index c853b634..abde1c0c 100644 --- a/altoslib/AltosGPSSat.java +++ b/altoslib/AltosGPSSat.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.text.*; import java.util.concurrent.*; import java.io.*; diff --git a/altoslib/AltosGreatCircle.java b/altoslib/AltosGreatCircle.java index de3904bf..03e05678 100644 --- a/altoslib/AltosGreatCircle.java +++ b/altoslib/AltosGreatCircle.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.lang.Math; import java.io.*; diff --git a/altoslib/AltosHeight.java b/altoslib/AltosHeight.java index 2bae2566..01bd4a6b 100644 --- a/altoslib/AltosHeight.java +++ b/altoslib/AltosHeight.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosHeight extends AltosUnits { diff --git a/altoslib/AltosHexfile.java b/altoslib/AltosHexfile.java index f72d4183..e7f900c4 100644 --- a/altoslib/AltosHexfile.java +++ b/altoslib/AltosHexfile.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.LinkedList; diff --git a/altoslib/AltosHexsym.java b/altoslib/AltosHexsym.java index 1d9cbb18..ab2beff5 100644 --- a/altoslib/AltosHexsym.java +++ b/altoslib/AltosHexsym.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosHexsym { String name; diff --git a/altoslib/AltosIMU.java b/altoslib/AltosIMU.java index 62539e08..26d11591 100644 --- a/altoslib/AltosIMU.java +++ b/altoslib/AltosIMU.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; diff --git a/altoslib/AltosIdle.java b/altoslib/AltosIdle.java index 07a628c3..36a3ca04 100644 --- a/altoslib/AltosIdle.java +++ b/altoslib/AltosIdle.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosIdleFetch.java b/altoslib/AltosIdleFetch.java index 0095bb73..5677916c 100644 --- a/altoslib/AltosIdleFetch.java +++ b/altoslib/AltosIdleFetch.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosIdleMonitor.java b/altoslib/AltosIdleMonitor.java index c67b4d8a..fde8c101 100644 --- a/altoslib/AltosIdleMonitor.java +++ b/altoslib/AltosIdleMonitor.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.concurrent.*; diff --git a/altoslib/AltosIdleMonitorListener.java b/altoslib/AltosIdleMonitorListener.java index 36857f58..27a51466 100644 --- a/altoslib/AltosIdleMonitorListener.java +++ b/altoslib/AltosIdleMonitorListener.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosIdleMonitorListener { public void update(AltosState state, AltosListenerState listener_state); diff --git a/altoslib/AltosIgnite.java b/altoslib/AltosIgnite.java index ab9c2da6..f3c07339 100644 --- a/altoslib/AltosIgnite.java +++ b/altoslib/AltosIgnite.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.util.*; import java.io.*; diff --git a/altoslib/AltosImage.java b/altoslib/AltosImage.java index d54335c7..9a0751b6 100644 --- a/altoslib/AltosImage.java +++ b/altoslib/AltosImage.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; diff --git a/altoslib/AltosKML.java b/altoslib/AltosKML.java index ac5e0257..ba053015 100644 --- a/altoslib/AltosKML.java +++ b/altoslib/AltosKML.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosLatLon.java b/altoslib/AltosLatLon.java index d39fe15f..ed1dd64e 100644 --- a/altoslib/AltosLatLon.java +++ b/altoslib/AltosLatLon.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosLatLon { public double lat; diff --git a/altoslib/AltosLatitude.java b/altoslib/AltosLatitude.java index e0deb504..04931ece 100644 --- a/altoslib/AltosLatitude.java +++ b/altoslib/AltosLatitude.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosLatitude extends AltosLocation { public String pos() { return "N"; } diff --git a/altoslib/AltosLaunchSite.java b/altoslib/AltosLaunchSite.java index ee2a60e9..831fdf64 100644 --- a/altoslib/AltosLaunchSite.java +++ b/altoslib/AltosLaunchSite.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.lang.*; diff --git a/altoslib/AltosLaunchSiteListener.java b/altoslib/AltosLaunchSiteListener.java index c77eadc5..6167b7cf 100644 --- a/altoslib/AltosLaunchSiteListener.java +++ b/altoslib/AltosLaunchSiteListener.java @@ -14,7 +14,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.lang.*; diff --git a/altoslib/AltosLaunchSites.java b/altoslib/AltosLaunchSites.java index 3ebac601..db6a1f80 100644 --- a/altoslib/AltosLaunchSites.java +++ b/altoslib/AltosLaunchSites.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.lang.*; diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index a73a7759..103052cb 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_10; +package org.altusmetrum.altoslib_11; import java.util.*; import java.io.*; diff --git a/altoslib/AltosLine.java b/altoslib/AltosLine.java index 876cb7df..90490192 100644 --- a/altoslib/AltosLine.java +++ b/altoslib/AltosLine.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosLine { public String line; diff --git a/altoslib/AltosLink.java b/altoslib/AltosLink.java index cd8609c0..32766674 100644 --- a/altoslib/AltosLink.java +++ b/altoslib/AltosLink.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.concurrent.*; diff --git a/altoslib/AltosListenerState.java b/altoslib/AltosListenerState.java index 389e392f..f5d1c0cb 100644 --- a/altoslib/AltosListenerState.java +++ b/altoslib/AltosListenerState.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; diff --git a/altoslib/AltosLocation.java b/altoslib/AltosLocation.java index df1c9d63..2ab07ebb 100644 --- a/altoslib/AltosLocation.java +++ b/altoslib/AltosLocation.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public abstract class AltosLocation extends AltosUnits { diff --git a/altoslib/AltosLog.java b/altoslib/AltosLog.java index a6e04215..74017a29 100644 --- a/altoslib/AltosLog.java +++ b/altoslib/AltosLog.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.text.*; diff --git a/altoslib/AltosLongitude.java b/altoslib/AltosLongitude.java index 61d74afc..77fe9c9a 100644 --- a/altoslib/AltosLongitude.java +++ b/altoslib/AltosLongitude.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosLongitude extends AltosLocation { public String pos() { return "E"; } diff --git a/altoslib/AltosMag.java b/altoslib/AltosMag.java index ce5a48c3..3e82f499 100644 --- a/altoslib/AltosMag.java +++ b/altoslib/AltosMag.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; diff --git a/altoslib/AltosMap.java b/altoslib/AltosMap.java index 08ac5f3c..0c775f33 100644 --- a/altoslib/AltosMap.java +++ b/altoslib/AltosMap.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.lang.*; diff --git a/altoslib/AltosMapCache.java b/altoslib/AltosMapCache.java index 8100704f..28f6b116 100644 --- a/altoslib/AltosMapCache.java +++ b/altoslib/AltosMapCache.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.net.*; diff --git a/altoslib/AltosMapCacheListener.java b/altoslib/AltosMapCacheListener.java index 4984d9e5..b010d12f 100644 --- a/altoslib/AltosMapCacheListener.java +++ b/altoslib/AltosMapCacheListener.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosMapCacheListener { public void map_cache_changed(int map_cache); diff --git a/altoslib/AltosMapInterface.java b/altoslib/AltosMapInterface.java index df09224a..78cd70eb 100644 --- a/altoslib/AltosMapInterface.java +++ b/altoslib/AltosMapInterface.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.net.*; diff --git a/altoslib/AltosMapLine.java b/altoslib/AltosMapLine.java index bd590136..ed2c0844 100644 --- a/altoslib/AltosMapLine.java +++ b/altoslib/AltosMapLine.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.lang.Math; diff --git a/altoslib/AltosMapLoader.java b/altoslib/AltosMapLoader.java index 015c0ad3..d715df38 100644 --- a/altoslib/AltosMapLoader.java +++ b/altoslib/AltosMapLoader.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosMapLoaderListener.java b/altoslib/AltosMapLoaderListener.java index 47d7b858..97c8b7f5 100644 --- a/altoslib/AltosMapLoaderListener.java +++ b/altoslib/AltosMapLoaderListener.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosMapLoaderListener { public abstract void loader_start(int max); diff --git a/altoslib/AltosMapMark.java b/altoslib/AltosMapMark.java index db714922..0fac5b37 100644 --- a/altoslib/AltosMapMark.java +++ b/altoslib/AltosMapMark.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.lang.Math; diff --git a/altoslib/AltosMapPath.java b/altoslib/AltosMapPath.java index 6f6db4f4..75664f83 100644 --- a/altoslib/AltosMapPath.java +++ b/altoslib/AltosMapPath.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.lang.Math; diff --git a/altoslib/AltosMapPathPoint.java b/altoslib/AltosMapPathPoint.java index 5b46cb19..89494408 100644 --- a/altoslib/AltosMapPathPoint.java +++ b/altoslib/AltosMapPathPoint.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.lang.Math; diff --git a/altoslib/AltosMapRectangle.java b/altoslib/AltosMapRectangle.java index b6294a4e..566e414f 100644 --- a/altoslib/AltosMapRectangle.java +++ b/altoslib/AltosMapRectangle.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosMapRectangle { AltosLatLon ul, lr; diff --git a/altoslib/AltosMapStore.java b/altoslib/AltosMapStore.java index ca4c9c75..53bfd517 100644 --- a/altoslib/AltosMapStore.java +++ b/altoslib/AltosMapStore.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.net.*; diff --git a/altoslib/AltosMapStoreListener.java b/altoslib/AltosMapStoreListener.java index 65bd6ef8..bfee5f5c 100644 --- a/altoslib/AltosMapStoreListener.java +++ b/altoslib/AltosMapStoreListener.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosMapStoreListener { abstract void notify_store(AltosMapStore store, int status); diff --git a/altoslib/AltosMapTile.java b/altoslib/AltosMapTile.java index b0bac963..b65f6fc1 100644 --- a/altoslib/AltosMapTile.java +++ b/altoslib/AltosMapTile.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosMapTileListener.java b/altoslib/AltosMapTileListener.java index 6d78b205..7939e4bd 100644 --- a/altoslib/AltosMapTileListener.java +++ b/altoslib/AltosMapTileListener.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosMapTileListener { abstract public void notify_tile(AltosMapTile tile, int status); diff --git a/altoslib/AltosMapTransform.java b/altoslib/AltosMapTransform.java index b8901127..53f3abac 100644 --- a/altoslib/AltosMapTransform.java +++ b/altoslib/AltosMapTransform.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.lang.Math; diff --git a/altoslib/AltosMapTypeListener.java b/altoslib/AltosMapTypeListener.java index b82bda3f..20740e7d 100644 --- a/altoslib/AltosMapTypeListener.java +++ b/altoslib/AltosMapTypeListener.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosMapTypeListener { public void map_type_changed(int map_type); diff --git a/altoslib/AltosMapZoomListener.java b/altoslib/AltosMapZoomListener.java index 51f8c3c5..59c91e8e 100644 --- a/altoslib/AltosMapZoomListener.java +++ b/altoslib/AltosMapZoomListener.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosMapZoomListener { abstract public void zoom_changed(int zoom); diff --git a/altoslib/AltosMma655x.java b/altoslib/AltosMma655x.java index b09ec74b..57bc7b91 100644 --- a/altoslib/AltosMma655x.java +++ b/altoslib/AltosMma655x.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.util.concurrent.*; diff --git a/altoslib/AltosMs5607.java b/altoslib/AltosMs5607.java index 1277f267..4f5549a7 100644 --- a/altoslib/AltosMs5607.java +++ b/altoslib/AltosMs5607.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; diff --git a/altoslib/AltosNoSymbol.java b/altoslib/AltosNoSymbol.java index 5451047e..3f3cbbe7 100644 --- a/altoslib/AltosNoSymbol.java +++ b/altoslib/AltosNoSymbol.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosNoSymbol extends Exception { public AltosNoSymbol(String name) { diff --git a/altoslib/AltosOrient.java b/altoslib/AltosOrient.java index 8b22c131..edaa304c 100644 --- a/altoslib/AltosOrient.java +++ b/altoslib/AltosOrient.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosOrient extends AltosUnits { diff --git a/altoslib/AltosParse.java b/altoslib/AltosParse.java index 1cbddcf9..ae88182d 100644 --- a/altoslib/AltosParse.java +++ b/altoslib/AltosParse.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.util.*; import java.text.*; diff --git a/altoslib/AltosPointDouble.java b/altoslib/AltosPointDouble.java index 65bad427..b18c4b48 100644 --- a/altoslib/AltosPointDouble.java +++ b/altoslib/AltosPointDouble.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosPointDouble { public double x, y; diff --git a/altoslib/AltosPointInt.java b/altoslib/AltosPointInt.java index 34eb6fd3..14b0dabf 100644 --- a/altoslib/AltosPointInt.java +++ b/altoslib/AltosPointInt.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosPointInt { public int x, y; diff --git a/altoslib/AltosPreferences.java b/altoslib/AltosPreferences.java index fb3026a4..b853e944 100644 --- a/altoslib/AltosPreferences.java +++ b/altoslib/AltosPreferences.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosPreferencesBackend.java b/altoslib/AltosPreferencesBackend.java index 6e1124e2..1f925914 100644 --- a/altoslib/AltosPreferencesBackend.java +++ b/altoslib/AltosPreferencesBackend.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosProgrammer.java b/altoslib/AltosProgrammer.java index 2f8e3bd0..78be8282 100644 --- a/altoslib/AltosProgrammer.java +++ b/altoslib/AltosProgrammer.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; diff --git a/altoslib/AltosPyro.java b/altoslib/AltosPyro.java index 3afd03e0..a1a903fd 100644 --- a/altoslib/AltosPyro.java +++ b/altoslib/AltosPyro.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.util.*; import java.text.*; diff --git a/altoslib/AltosQuaternion.java b/altoslib/AltosQuaternion.java index bc471c9c..351685f8 100644 --- a/altoslib/AltosQuaternion.java +++ b/altoslib/AltosQuaternion.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosQuaternion { double r; /* real bit */ diff --git a/altoslib/AltosRectangle.java b/altoslib/AltosRectangle.java index 4757687d..e1705548 100644 --- a/altoslib/AltosRectangle.java +++ b/altoslib/AltosRectangle.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosRectangle { public int x, y, width, height; diff --git a/altoslib/AltosReplayReader.java b/altoslib/AltosReplayReader.java index 0f77c979..f420c958 100644 --- a/altoslib/AltosReplayReader.java +++ b/altoslib/AltosReplayReader.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosRomconfig.java b/altoslib/AltosRomconfig.java index af201939..37585879 100644 --- a/altoslib/AltosRomconfig.java +++ b/altoslib/AltosRomconfig.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; diff --git a/altoslib/AltosRotation.java b/altoslib/AltosRotation.java index e53a3a49..411ecbdf 100644 --- a/altoslib/AltosRotation.java +++ b/altoslib/AltosRotation.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosRotation { private AltosQuaternion rotation; diff --git a/altoslib/AltosSavedState.java b/altoslib/AltosSavedState.java index 3dbf59a5..a7954043 100644 --- a/altoslib/AltosSavedState.java +++ b/altoslib/AltosSavedState.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; diff --git a/altoslib/AltosSelfFlash.java b/altoslib/AltosSelfFlash.java index f996d7b1..b6056c9c 100644 --- a/altoslib/AltosSelfFlash.java +++ b/altoslib/AltosSelfFlash.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; diff --git a/altoslib/AltosSensorEMini.java b/altoslib/AltosSensorEMini.java index 884800f8..875dad0b 100644 --- a/altoslib/AltosSensorEMini.java +++ b/altoslib/AltosSensorEMini.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.util.concurrent.TimeoutException; diff --git a/altoslib/AltosSensorMM.java b/altoslib/AltosSensorMM.java index 99eca9d8..654f85bd 100644 --- a/altoslib/AltosSensorMM.java +++ b/altoslib/AltosSensorMM.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.util.concurrent.TimeoutException; diff --git a/altoslib/AltosSensorMega.java b/altoslib/AltosSensorMega.java index a4224311..18474e18 100644 --- a/altoslib/AltosSensorMega.java +++ b/altoslib/AltosSensorMega.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.util.concurrent.TimeoutException; diff --git a/altoslib/AltosSensorMetrum.java b/altoslib/AltosSensorMetrum.java index 1b09647f..5f56a899 100644 --- a/altoslib/AltosSensorMetrum.java +++ b/altoslib/AltosSensorMetrum.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.util.concurrent.TimeoutException; diff --git a/altoslib/AltosSensorTGPS.java b/altoslib/AltosSensorTGPS.java index 9f572eca..80b27824 100644 --- a/altoslib/AltosSensorTGPS.java +++ b/altoslib/AltosSensorTGPS.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.util.concurrent.TimeoutException; diff --git a/altoslib/AltosSensorTM.java b/altoslib/AltosSensorTM.java index bb842b52..e80bac6a 100644 --- a/altoslib/AltosSensorTM.java +++ b/altoslib/AltosSensorTM.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.util.concurrent.TimeoutException; diff --git a/altoslib/AltosSensorTMini.java b/altoslib/AltosSensorTMini.java index 9e01b50c..739670f5 100644 --- a/altoslib/AltosSensorTMini.java +++ b/altoslib/AltosSensorTMini.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.util.concurrent.TimeoutException; diff --git a/altoslib/AltosSpeed.java b/altoslib/AltosSpeed.java index e09bbb7a..73851979 100644 --- a/altoslib/AltosSpeed.java +++ b/altoslib/AltosSpeed.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosSpeed extends AltosUnits { diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index 7b41e98d..ca28a16d 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -19,7 +19,7 @@ * Track flight state from telemetry or eeprom data stream */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; diff --git a/altoslib/AltosStateIterable.java b/altoslib/AltosStateIterable.java index 2d2d342f..bce2a8d9 100644 --- a/altoslib/AltosStateIterable.java +++ b/altoslib/AltosStateIterable.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosStateUpdate.java b/altoslib/AltosStateUpdate.java index 12d4dd41..1209c2a0 100644 --- a/altoslib/AltosStateUpdate.java +++ b/altoslib/AltosStateUpdate.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosStateUpdate { public void update_state(AltosState state) throws InterruptedException, AltosUnknownProduct; diff --git a/altoslib/AltosTelemetry.java b/altoslib/AltosTelemetry.java index 67caa60c..d526e6e5 100644 --- a/altoslib/AltosTelemetry.java +++ b/altoslib/AltosTelemetry.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.text.*; diff --git a/altoslib/AltosTelemetryCompanion.java b/altoslib/AltosTelemetryCompanion.java index b9d32f48..8f0d06b0 100644 --- a/altoslib/AltosTelemetryCompanion.java +++ b/altoslib/AltosTelemetryCompanion.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosTelemetryCompanion extends AltosTelemetryStandard { AltosCompanion companion; diff --git a/altoslib/AltosTelemetryConfiguration.java b/altoslib/AltosTelemetryConfiguration.java index cd2cb8ca..352f1808 100644 --- a/altoslib/AltosTelemetryConfiguration.java +++ b/altoslib/AltosTelemetryConfiguration.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosTelemetryConfiguration extends AltosTelemetryStandard { diff --git a/altoslib/AltosTelemetryFile.java b/altoslib/AltosTelemetryFile.java index b80c2dc9..5f512e14 100644 --- a/altoslib/AltosTelemetryFile.java +++ b/altoslib/AltosTelemetryFile.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosTelemetryIterable.java b/altoslib/AltosTelemetryIterable.java index ff395868..256626f3 100644 --- a/altoslib/AltosTelemetryIterable.java +++ b/altoslib/AltosTelemetryIterable.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.io.*; import java.util.*; diff --git a/altoslib/AltosTelemetryLegacy.java b/altoslib/AltosTelemetryLegacy.java index 6c0fcfeb..df41b7d9 100644 --- a/altoslib/AltosTelemetryLegacy.java +++ b/altoslib/AltosTelemetryLegacy.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.text.*; diff --git a/altoslib/AltosTelemetryLocation.java b/altoslib/AltosTelemetryLocation.java index 33c36449..1cff3cd4 100644 --- a/altoslib/AltosTelemetryLocation.java +++ b/altoslib/AltosTelemetryLocation.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosTelemetryLocation extends AltosTelemetryStandard { diff --git a/altoslib/AltosTelemetryMap.java b/altoslib/AltosTelemetryMap.java index 13b5dbea..8e5bcd1c 100644 --- a/altoslib/AltosTelemetryMap.java +++ b/altoslib/AltosTelemetryMap.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.text.*; import java.util.HashMap; diff --git a/altoslib/AltosTelemetryMegaData.java b/altoslib/AltosTelemetryMegaData.java index d71f2802..ed0211a9 100644 --- a/altoslib/AltosTelemetryMegaData.java +++ b/altoslib/AltosTelemetryMegaData.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosTelemetryMegaData extends AltosTelemetryStandard { int state; diff --git a/altoslib/AltosTelemetryMegaSensor.java b/altoslib/AltosTelemetryMegaSensor.java index f0d16f19..365db92d 100644 --- a/altoslib/AltosTelemetryMegaSensor.java +++ b/altoslib/AltosTelemetryMegaSensor.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosTelemetryMegaSensor extends AltosTelemetryStandard { int accel; diff --git a/altoslib/AltosTelemetryMetrumData.java b/altoslib/AltosTelemetryMetrumData.java index a4e9116f..0d943836 100644 --- a/altoslib/AltosTelemetryMetrumData.java +++ b/altoslib/AltosTelemetryMetrumData.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosTelemetryMetrumData extends AltosTelemetryStandard { diff --git a/altoslib/AltosTelemetryMetrumSensor.java b/altoslib/AltosTelemetryMetrumSensor.java index 1b405f2b..0ccc4e15 100644 --- a/altoslib/AltosTelemetryMetrumSensor.java +++ b/altoslib/AltosTelemetryMetrumSensor.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosTelemetryMetrumSensor extends AltosTelemetryStandard { diff --git a/altoslib/AltosTelemetryMini.java b/altoslib/AltosTelemetryMini.java index 8996d662..8bca55fa 100644 --- a/altoslib/AltosTelemetryMini.java +++ b/altoslib/AltosTelemetryMini.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosTelemetryMini extends AltosTelemetryStandard { diff --git a/altoslib/AltosTelemetryRaw.java b/altoslib/AltosTelemetryRaw.java index 8cf023a4..c28d04d3 100644 --- a/altoslib/AltosTelemetryRaw.java +++ b/altoslib/AltosTelemetryRaw.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosTelemetryRaw extends AltosTelemetryStandard { public AltosTelemetryRaw(int[] bytes) { diff --git a/altoslib/AltosTelemetryReader.java b/altoslib/AltosTelemetryReader.java index 2b0a443c..370610b1 100644 --- a/altoslib/AltosTelemetryReader.java +++ b/altoslib/AltosTelemetryReader.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.text.*; import java.io.*; diff --git a/altoslib/AltosTelemetrySatellite.java b/altoslib/AltosTelemetrySatellite.java index de60e63c..d88e6cac 100644 --- a/altoslib/AltosTelemetrySatellite.java +++ b/altoslib/AltosTelemetrySatellite.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosTelemetrySatellite extends AltosTelemetryStandard { int channels; diff --git a/altoslib/AltosTelemetrySensor.java b/altoslib/AltosTelemetrySensor.java index 74b61d3c..7a4a9f35 100644 --- a/altoslib/AltosTelemetrySensor.java +++ b/altoslib/AltosTelemetrySensor.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosTelemetrySensor extends AltosTelemetryStandard { diff --git a/altoslib/AltosTelemetryStandard.java b/altoslib/AltosTelemetryStandard.java index 7086abfc..dea9c29e 100644 --- a/altoslib/AltosTelemetryStandard.java +++ b/altoslib/AltosTelemetryStandard.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public abstract class AltosTelemetryStandard extends AltosTelemetry { int[] bytes; diff --git a/altoslib/AltosTemperature.java b/altoslib/AltosTemperature.java index a1e485b3..2b261b70 100644 --- a/altoslib/AltosTemperature.java +++ b/altoslib/AltosTemperature.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosTemperature extends AltosUnits { diff --git a/altoslib/AltosUnits.java b/altoslib/AltosUnits.java index bc53d4a0..b46b30ad 100644 --- a/altoslib/AltosUnits.java +++ b/altoslib/AltosUnits.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.text.*; diff --git a/altoslib/AltosUnitsListener.java b/altoslib/AltosUnitsListener.java index bb8451b7..89dbdf77 100644 --- a/altoslib/AltosUnitsListener.java +++ b/altoslib/AltosUnitsListener.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosUnitsListener { public void units_changed(boolean imperial_units); diff --git a/altoslib/AltosUnitsRange.java b/altoslib/AltosUnitsRange.java index 9239481a..f376a463 100644 --- a/altoslib/AltosUnitsRange.java +++ b/altoslib/AltosUnitsRange.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import java.text.*; diff --git a/altoslib/AltosUnknownProduct.java b/altoslib/AltosUnknownProduct.java index ff536f57..fe16f441 100644 --- a/altoslib/AltosUnknownProduct.java +++ b/altoslib/AltosUnknownProduct.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosUnknownProduct extends Exception { public String product; diff --git a/altoslib/AltosVersion.java.in b/altoslib/AltosVersion.java.in index 9ac94dcd..12fecaa0 100644 --- a/altoslib/AltosVersion.java.in +++ b/altoslib/AltosVersion.java.in @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosVersion { public final static String version = "@VERSION@"; diff --git a/altoslib/AltosVoltage.java b/altoslib/AltosVoltage.java index 1738dd86..5c9cea28 100644 --- a/altoslib/AltosVoltage.java +++ b/altoslib/AltosVoltage.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public class AltosVoltage extends AltosUnits { diff --git a/altoslib/AltosWriter.java b/altoslib/AltosWriter.java index 02b5d669..a3a394d3 100644 --- a/altoslib/AltosWriter.java +++ b/altoslib/AltosWriter.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; public interface AltosWriter { diff --git a/altosui/Altos.java b/altosui/Altos.java index 81bc8c28..1c8bfdb7 100644 --- a/altosui/Altos.java +++ b/altosui/Altos.java @@ -20,8 +20,8 @@ package altosui; import java.awt.*; import libaltosJNI.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class Altos extends AltosUILib { diff --git a/altosui/AltosAscent.java b/altosui/AltosAscent.java index 85260a70..99f7e5ad 100644 --- a/altosui/AltosAscent.java +++ b/altosui/AltosAscent.java @@ -21,8 +21,8 @@ import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosAscent extends AltosUIFlightTab { JLabel cur, max; diff --git a/altosui/AltosCompanionInfo.java b/altosui/AltosCompanionInfo.java index 251982ad..8bf25715 100644 --- a/altosui/AltosCompanionInfo.java +++ b/altosui/AltosCompanionInfo.java @@ -19,8 +19,8 @@ package altosui; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosCompanionInfo extends JTable implements AltosFlightDisplay { private AltosFlightInfoTableModel model; diff --git a/altosui/AltosConfig.java b/altosui/AltosConfig.java index e47b0e22..63f50206 100644 --- a/altosui/AltosConfig.java +++ b/altosui/AltosConfig.java @@ -22,8 +22,8 @@ import javax.swing.*; import java.io.*; import java.util.concurrent.*; import java.text.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosConfig implements ActionListener { diff --git a/altosui/AltosConfigPyroUI.java b/altosui/AltosConfigPyroUI.java index 125866c6..4bfdb663 100644 --- a/altosui/AltosConfigPyroUI.java +++ b/altosui/AltosConfigPyroUI.java @@ -22,8 +22,8 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosConfigPyroUI extends AltosUIDialog diff --git a/altosui/AltosConfigTD.java b/altosui/AltosConfigTD.java index eedc18c5..61727498 100644 --- a/altosui/AltosConfigTD.java +++ b/altosui/AltosConfigTD.java @@ -21,8 +21,8 @@ import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosConfigTD implements ActionListener { diff --git a/altosui/AltosConfigTDUI.java b/altosui/AltosConfigTDUI.java index 9a76fbe2..1c0e0fef 100644 --- a/altosui/AltosConfigTDUI.java +++ b/altosui/AltosConfigTDUI.java @@ -21,8 +21,8 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosConfigTDUI extends AltosUIDialog diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java index 09123f4f..cb7af829 100644 --- a/altosui/AltosConfigUI.java +++ b/altosui/AltosConfigUI.java @@ -22,8 +22,8 @@ import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.text.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosConfigUI extends AltosUIDialog diff --git a/altosui/AltosConfigureUI.java b/altosui/AltosConfigureUI.java index 52c50352..b4f423d9 100644 --- a/altosui/AltosConfigureUI.java +++ b/altosui/AltosConfigureUI.java @@ -22,7 +22,7 @@ import java.awt.event.*; import java.beans.*; import javax.swing.*; import javax.swing.event.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altosuilib_11.*; public class AltosConfigureUI extends AltosUIConfigure diff --git a/altosui/AltosDescent.java b/altosui/AltosDescent.java index eeaed19e..44bcecee 100644 --- a/altosui/AltosDescent.java +++ b/altosui/AltosDescent.java @@ -21,8 +21,8 @@ import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosDescent extends AltosUIFlightTab { diff --git a/altosui/AltosFlightStatus.java b/altosui/AltosFlightStatus.java index 4229e4fc..82c63396 100644 --- a/altosui/AltosFlightStatus.java +++ b/altosui/AltosFlightStatus.java @@ -19,8 +19,8 @@ package altosui; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosFlightStatus extends JComponent implements AltosFlightDisplay { GridBagLayout layout; diff --git a/altosui/AltosFlightStatusTableModel.java b/altosui/AltosFlightStatusTableModel.java index 7bf2bb78..dc5b96a9 100644 --- a/altosui/AltosFlightStatusTableModel.java +++ b/altosui/AltosFlightStatusTableModel.java @@ -27,7 +27,7 @@ import java.util.*; import java.text.*; import java.util.prefs.*; import java.util.concurrent.LinkedBlockingQueue; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosFlightStatusTableModel extends AbstractTableModel { private String[] columnNames = { diff --git a/altosui/AltosFlightStatusUpdate.java b/altosui/AltosFlightStatusUpdate.java index d39366da..88d6f0ff 100644 --- a/altosui/AltosFlightStatusUpdate.java +++ b/altosui/AltosFlightStatusUpdate.java @@ -18,7 +18,7 @@ package altosui; import java.awt.event.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosFlightStatusUpdate implements ActionListener { diff --git a/altosui/AltosFlightUI.java b/altosui/AltosFlightUI.java index a1526cb5..9b4a18bc 100644 --- a/altosui/AltosFlightUI.java +++ b/altosui/AltosFlightUI.java @@ -22,8 +22,8 @@ import java.awt.event.*; import javax.swing.*; import java.util.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay { AltosVoice voice; diff --git a/altosui/AltosGraphUI.java b/altosui/AltosGraphUI.java index 34d56b24..be63c6e6 100644 --- a/altosui/AltosGraphUI.java +++ b/altosui/AltosGraphUI.java @@ -23,8 +23,8 @@ import java.util.ArrayList; import java.awt.*; import java.awt.event.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java index d789de77..8d0d807e 100644 --- a/altosui/AltosIdleMonitorUI.java +++ b/altosui/AltosIdleMonitorUI.java @@ -24,8 +24,8 @@ import javax.swing.event.*; import java.io.*; import java.util.concurrent.*; import java.util.Arrays; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDisplay, AltosIdleMonitorListener, DocumentListener { AltosDevice device; diff --git a/altosui/AltosIgniteUI.java b/altosui/AltosIgniteUI.java index eca2a668..84dc54db 100644 --- a/altosui/AltosIgniteUI.java +++ b/altosui/AltosIgniteUI.java @@ -24,8 +24,8 @@ import java.io.*; import java.text.*; import java.util.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosIgniteUI extends AltosUIDialog diff --git a/altosui/AltosIgnitor.java b/altosui/AltosIgnitor.java index 903da5a9..13d99124 100644 --- a/altosui/AltosIgnitor.java +++ b/altosui/AltosIgnitor.java @@ -20,8 +20,8 @@ package altosui; import java.awt.*; import java.awt.event.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosIgnitor extends AltosUIFlightTab { diff --git a/altosui/AltosLanded.java b/altosui/AltosLanded.java index b704651d..77c504b8 100644 --- a/altosui/AltosLanded.java +++ b/altosui/AltosLanded.java @@ -21,8 +21,8 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosLanded extends AltosUIFlightTab implements ActionListener { diff --git a/altosui/AltosLaunch.java b/altosui/AltosLaunch.java index 503b0621..46a29d45 100644 --- a/altosui/AltosLaunch.java +++ b/altosui/AltosLaunch.java @@ -20,7 +20,7 @@ package altosui; import java.io.*; import java.util.concurrent.*; import java.awt.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altosuilib_11.*; public class AltosLaunch { AltosDevice device; diff --git a/altosui/AltosLaunchUI.java b/altosui/AltosLaunchUI.java index 127a33a3..22608c1b 100644 --- a/altosui/AltosLaunchUI.java +++ b/altosui/AltosLaunchUI.java @@ -23,7 +23,7 @@ import javax.swing.*; import java.io.*; import java.text.*; import java.util.concurrent.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altosuilib_11.*; class FireButton extends JButton { protected void processMouseEvent(MouseEvent e) { diff --git a/altosui/AltosPad.java b/altosui/AltosPad.java index 9a8c8087..b6f1f3c9 100644 --- a/altosui/AltosPad.java +++ b/altosui/AltosPad.java @@ -18,8 +18,8 @@ package altosui; import java.util.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosPad extends AltosUIFlightTab { diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java index 4a390ee6..88ae8530 100644 --- a/altosui/AltosUI.java +++ b/altosui/AltosUI.java @@ -22,8 +22,8 @@ import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosUI extends AltosUIFrame { public AltosVoice voice = new AltosVoice(); diff --git a/altosuilib/AltosBTDevice.java b/altosuilib/AltosBTDevice.java index 8c2e0d75..df00bcee 100644 --- a/altosuilib/AltosBTDevice.java +++ b/altosuilib/AltosBTDevice.java @@ -15,10 +15,10 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import libaltosJNI.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosBTDevice extends altos_bt_device implements AltosDevice { diff --git a/altosuilib/AltosBTDeviceIterator.java b/altosuilib/AltosBTDeviceIterator.java index ea29b055..75ca18ed 100644 --- a/altosuilib/AltosBTDeviceIterator.java +++ b/altosuilib/AltosBTDeviceIterator.java @@ -15,11 +15,11 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.util.*; import libaltosJNI.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosBTDeviceIterator implements Iterator { AltosBTDevice current; diff --git a/altosuilib/AltosBTKnown.java b/altosuilib/AltosBTKnown.java index 8ae11f67..11b0d48d 100644 --- a/altosuilib/AltosBTKnown.java +++ b/altosuilib/AltosBTKnown.java @@ -15,10 +15,10 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.util.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosBTKnown implements Iterable { LinkedList devices = new LinkedList(); diff --git a/altosuilib/AltosBTManage.java b/altosuilib/AltosBTManage.java index e6a1ef64..bdb35d49 100644 --- a/altosuilib/AltosBTManage.java +++ b/altosuilib/AltosBTManage.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; @@ -23,7 +23,7 @@ import javax.swing.*; import javax.swing.plaf.basic.*; import java.util.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosBTManage extends AltosUIDialog implements ActionListener, Iterable { LinkedBlockingQueue found_devices; diff --git a/altosuilib/AltosCSVUI.java b/altosuilib/AltosCSVUI.java index 3846d3fd..9d67ce8d 100644 --- a/altosuilib/AltosCSVUI.java +++ b/altosuilib/AltosCSVUI.java @@ -15,13 +15,13 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosCSVUI extends AltosUIDialog diff --git a/altosuilib/AltosConfigFreqUI.java b/altosuilib/AltosConfigFreqUI.java index 5a689a39..b8477ecd 100644 --- a/altosuilib/AltosConfigFreqUI.java +++ b/altosuilib/AltosConfigFreqUI.java @@ -15,14 +15,14 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.text.*; import java.awt.event.*; import javax.swing.*; import java.util.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; class AltosEditFreqUI extends AltosUIDialog implements ActionListener { Frame frame; diff --git a/altosuilib/AltosDataChooser.java b/altosuilib/AltosDataChooser.java index 3dfadfe1..f1a5610e 100644 --- a/altosuilib/AltosDataChooser.java +++ b/altosuilib/AltosDataChooser.java @@ -15,12 +15,12 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import java.io.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosDataChooser extends JFileChooser { JFrame frame; diff --git a/altosuilib/AltosDevice.java b/altosuilib/AltosDevice.java index dbaf2e36..f51c76c2 100644 --- a/altosuilib/AltosDevice.java +++ b/altosuilib/AltosDevice.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import libaltosJNI.*; diff --git a/altosuilib/AltosDeviceDialog.java b/altosuilib/AltosDeviceDialog.java index 21a8a23f..0cd658c0 100644 --- a/altosuilib/AltosDeviceDialog.java +++ b/altosuilib/AltosDeviceDialog.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import javax.swing.*; import java.awt.*; diff --git a/altosuilib/AltosDeviceUIDialog.java b/altosuilib/AltosDeviceUIDialog.java index 75c3e691..7d1e3618 100644 --- a/altosuilib/AltosDeviceUIDialog.java +++ b/altosuilib/AltosDeviceUIDialog.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import javax.swing.*; import java.awt.*; diff --git a/altosuilib/AltosDisplayThread.java b/altosuilib/AltosDisplayThread.java index 968a0b75..ba48ab82 100644 --- a/altosuilib/AltosDisplayThread.java +++ b/altosuilib/AltosDisplayThread.java @@ -15,13 +15,13 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import javax.swing.*; import java.io.*; import java.text.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosDisplayThread extends Thread { diff --git a/altosuilib/AltosEepromDelete.java b/altosuilib/AltosEepromDelete.java index 442cee88..026b5da4 100644 --- a/altosuilib/AltosEepromDelete.java +++ b/altosuilib/AltosEepromDelete.java @@ -15,13 +15,13 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosEepromDelete implements Runnable { AltosEepromList flights; diff --git a/altosuilib/AltosEepromManage.java b/altosuilib/AltosEepromManage.java index 5f83e6f4..a4b62ff0 100644 --- a/altosuilib/AltosEepromManage.java +++ b/altosuilib/AltosEepromManage.java @@ -15,13 +15,13 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosEepromManage implements ActionListener { diff --git a/altosuilib/AltosEepromMonitor.java b/altosuilib/AltosEepromMonitor.java index 508e3e3f..7fe5be18 100644 --- a/altosuilib/AltosEepromMonitor.java +++ b/altosuilib/AltosEepromMonitor.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; diff --git a/altosuilib/AltosEepromMonitorUI.java b/altosuilib/AltosEepromMonitorUI.java index 905780a5..9492bc31 100644 --- a/altosuilib/AltosEepromMonitorUI.java +++ b/altosuilib/AltosEepromMonitorUI.java @@ -15,12 +15,12 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMonitor { JFrame owner; diff --git a/altosuilib/AltosEepromSelect.java b/altosuilib/AltosEepromSelect.java index 67bff710..28b3982b 100644 --- a/altosuilib/AltosEepromSelect.java +++ b/altosuilib/AltosEepromSelect.java @@ -15,13 +15,13 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; class AltosEepromItem implements ActionListener { AltosEepromLog log; diff --git a/altosuilib/AltosFlashUI.java b/altosuilib/AltosFlashUI.java index 07f04c3e..6574bd99 100644 --- a/altosuilib/AltosFlashUI.java +++ b/altosuilib/AltosFlashUI.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; @@ -23,7 +23,7 @@ import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosFlashUI extends AltosUIDialog diff --git a/altosuilib/AltosFlightInfoTableModel.java b/altosuilib/AltosFlightInfoTableModel.java index 9a430743..ca3728a5 100644 --- a/altosuilib/AltosFlightInfoTableModel.java +++ b/altosuilib/AltosFlightInfoTableModel.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import javax.swing.table.*; diff --git a/altosuilib/AltosFlightStatsTable.java b/altosuilib/AltosFlightStatsTable.java index 6171f61a..c0f1ecb6 100644 --- a/altosuilib/AltosFlightStatsTable.java +++ b/altosuilib/AltosFlightStatsTable.java @@ -15,12 +15,12 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import javax.swing.*; import java.util.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosFlightStatsTable extends JComponent implements AltosFontListener { GridBagLayout layout; diff --git a/altosuilib/AltosGraph.java b/altosuilib/AltosGraph.java index a4334cc6..ad843f7f 100644 --- a/altosuilib/AltosGraph.java +++ b/altosuilib/AltosGraph.java @@ -15,14 +15,14 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.io.*; import java.util.ArrayList; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import org.jfree.ui.*; import org.jfree.chart.*; diff --git a/altosuilib/AltosGraphDataPoint.java b/altosuilib/AltosGraphDataPoint.java index e4a065c6..fcb88388 100644 --- a/altosuilib/AltosGraphDataPoint.java +++ b/altosuilib/AltosGraphDataPoint.java @@ -15,9 +15,9 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosGraphDataPoint implements AltosUIDataPoint { diff --git a/altosuilib/AltosGraphDataSet.java b/altosuilib/AltosGraphDataSet.java index 673d1de9..3e3bf479 100644 --- a/altosuilib/AltosGraphDataSet.java +++ b/altosuilib/AltosGraphDataSet.java @@ -15,12 +15,12 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.lang.*; import java.io.*; import java.util.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; class AltosGraphIterator implements Iterator { AltosGraphDataSet dataSet; diff --git a/altosuilib/AltosInfoTable.java b/altosuilib/AltosInfoTable.java index 3833b37a..3509f65d 100644 --- a/altosuilib/AltosInfoTable.java +++ b/altosuilib/AltosInfoTable.java @@ -15,13 +15,13 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosInfoTable extends JTable implements AltosFlightDisplay, HierarchyListener { private AltosFlightInfoTableModel model; diff --git a/altosuilib/AltosLed.java b/altosuilib/AltosLed.java index 07485cc4..b1dc3220 100644 --- a/altosuilib/AltosLed.java +++ b/altosuilib/AltosLed.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import javax.swing.*; diff --git a/altosuilib/AltosLights.java b/altosuilib/AltosLights.java index f445199c..34293bb4 100644 --- a/altosuilib/AltosLights.java +++ b/altosuilib/AltosLights.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import javax.swing.*; diff --git a/altosuilib/AltosPositionListener.java b/altosuilib/AltosPositionListener.java index 06ba4188..8eb4594a 100644 --- a/altosuilib/AltosPositionListener.java +++ b/altosuilib/AltosPositionListener.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; public interface AltosPositionListener { public void position_changed(int position); diff --git a/altosuilib/AltosRomconfigUI.java b/altosuilib/AltosRomconfigUI.java index 3a5188f8..33686b4f 100644 --- a/altosuilib/AltosRomconfigUI.java +++ b/altosuilib/AltosRomconfigUI.java @@ -15,12 +15,12 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosRomconfigUI extends AltosUIDialog diff --git a/altosuilib/AltosScanUI.java b/altosuilib/AltosScanUI.java index 1d176e82..ee68fbc9 100644 --- a/altosuilib/AltosScanUI.java +++ b/altosuilib/AltosScanUI.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; @@ -25,7 +25,7 @@ import java.io.*; import java.util.*; import java.text.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; class AltosScanResult { String callsign; diff --git a/altosuilib/AltosSerial.java b/altosuilib/AltosSerial.java index 85ab4654..1bf4dbbe 100644 --- a/altosuilib/AltosSerial.java +++ b/altosuilib/AltosSerial.java @@ -19,13 +19,13 @@ * Deal with TeleDongle on a serial port */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.io.*; import java.util.*; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import libaltosJNI.*; /* diff --git a/altosuilib/AltosSerialInUseException.java b/altosuilib/AltosSerialInUseException.java index af7edb65..cba5cac0 100644 --- a/altosuilib/AltosSerialInUseException.java +++ b/altosuilib/AltosSerialInUseException.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; public class AltosSerialInUseException extends Exception { public AltosDevice device; diff --git a/altosuilib/AltosUIAxis.java b/altosuilib/AltosUIAxis.java index 24ea23d3..8ec8a114 100644 --- a/altosuilib/AltosUIAxis.java +++ b/altosuilib/AltosUIAxis.java @@ -15,14 +15,14 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.io.*; import java.util.ArrayList; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import org.jfree.ui.*; import org.jfree.chart.*; diff --git a/altosuilib/AltosUIConfigure.java b/altosuilib/AltosUIConfigure.java index 89114c7e..de070473 100644 --- a/altosuilib/AltosUIConfigure.java +++ b/altosuilib/AltosUIConfigure.java @@ -15,14 +15,14 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; import java.beans.*; import javax.swing.*; import javax.swing.event.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; class DelegatingRenderer implements ListCellRenderer { diff --git a/altosuilib/AltosUIDataMissing.java b/altosuilib/AltosUIDataMissing.java index 585289ed..44668dff 100644 --- a/altosuilib/AltosUIDataMissing.java +++ b/altosuilib/AltosUIDataMissing.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; public class AltosUIDataMissing extends Exception { public int id; diff --git a/altosuilib/AltosUIDataPoint.java b/altosuilib/AltosUIDataPoint.java index 7feb6d8e..7d905b46 100644 --- a/altosuilib/AltosUIDataPoint.java +++ b/altosuilib/AltosUIDataPoint.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; public interface AltosUIDataPoint { public abstract double x() throws AltosUIDataMissing; diff --git a/altosuilib/AltosUIDataSet.java b/altosuilib/AltosUIDataSet.java index 82809aa5..8c7bcf03 100644 --- a/altosuilib/AltosUIDataSet.java +++ b/altosuilib/AltosUIDataSet.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; public interface AltosUIDataSet { public abstract String name(); diff --git a/altosuilib/AltosUIDialog.java b/altosuilib/AltosUIDialog.java index a2625975..2fd46498 100644 --- a/altosuilib/AltosUIDialog.java +++ b/altosuilib/AltosUIDialog.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; diff --git a/altosuilib/AltosUIEnable.java b/altosuilib/AltosUIEnable.java index 7bb80bc1..74de4bf5 100644 --- a/altosuilib/AltosUIEnable.java +++ b/altosuilib/AltosUIEnable.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; @@ -23,7 +23,7 @@ import javax.swing.*; import java.io.*; import java.util.concurrent.*; import java.util.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import org.jfree.ui.*; import org.jfree.chart.*; diff --git a/altosuilib/AltosUIFlightTab.java b/altosuilib/AltosUIFlightTab.java index e098b76f..1e324450 100644 --- a/altosuilib/AltosUIFlightTab.java +++ b/altosuilib/AltosUIFlightTab.java @@ -15,13 +15,13 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public abstract class AltosUIFlightTab extends JComponent implements AltosFlightDisplay, HierarchyListener { public GridBagLayout layout; diff --git a/altosuilib/AltosUIFrame.java b/altosuilib/AltosUIFrame.java index 295225d6..05266f8d 100644 --- a/altosuilib/AltosUIFrame.java +++ b/altosuilib/AltosUIFrame.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; diff --git a/altosuilib/AltosUIFreqList.java b/altosuilib/AltosUIFreqList.java index 7d49e692..c770f654 100644 --- a/altosuilib/AltosUIFreqList.java +++ b/altosuilib/AltosUIFreqList.java @@ -15,10 +15,10 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosUIFreqList extends JComboBox { diff --git a/altosuilib/AltosUIGraph.java b/altosuilib/AltosUIGraph.java index dca12854..9c257763 100644 --- a/altosuilib/AltosUIGraph.java +++ b/altosuilib/AltosUIGraph.java @@ -15,14 +15,14 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.io.*; import java.util.ArrayList; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import org.jfree.ui.*; import org.jfree.chart.*; diff --git a/altosuilib/AltosUIGrapher.java b/altosuilib/AltosUIGrapher.java index a30609fd..1acf5c46 100644 --- a/altosuilib/AltosUIGrapher.java +++ b/altosuilib/AltosUIGrapher.java @@ -15,14 +15,14 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.io.*; import java.util.ArrayList; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import org.jfree.ui.*; import org.jfree.chart.*; diff --git a/altosuilib/AltosUIImage.java b/altosuilib/AltosUIImage.java index 1907e155..700e095f 100644 --- a/altosuilib/AltosUIImage.java +++ b/altosuilib/AltosUIImage.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_11; import javax.swing.*; import javax.imageio.ImageIO; diff --git a/altosuilib/AltosUIIndicator.java b/altosuilib/AltosUIIndicator.java index 819123a7..a91a7e66 100644 --- a/altosuilib/AltosUIIndicator.java +++ b/altosuilib/AltosUIIndicator.java @@ -15,11 +15,11 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public abstract class AltosUIIndicator implements AltosFontListener, AltosUnitsListener { JLabel label; diff --git a/altosuilib/AltosUILib.java b/altosuilib/AltosUILib.java index ff9fd72a..5eefdc98 100644 --- a/altosuilib/AltosUILib.java +++ b/altosuilib/AltosUILib.java @@ -15,12 +15,12 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import libaltosJNI.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosUILib extends AltosLib { diff --git a/altosuilib/AltosUIListener.java b/altosuilib/AltosUIListener.java index 98d7452f..581711ad 100644 --- a/altosuilib/AltosUIListener.java +++ b/altosuilib/AltosUIListener.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; public interface AltosUIListener { public void ui_changed(String look_and_feel); diff --git a/altosuilib/AltosUIMapNew.java b/altosuilib/AltosUIMapNew.java index 768fd058..42c9aa7a 100644 --- a/altosuilib/AltosUIMapNew.java +++ b/altosuilib/AltosUIMapNew.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; @@ -27,7 +27,7 @@ import java.awt.geom.*; import java.util.*; import java.util.concurrent.*; import javax.imageio.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosUIMapNew extends JComponent implements AltosFlightDisplay, AltosMapInterface { diff --git a/altosuilib/AltosUIMapPreloadNew.java b/altosuilib/AltosUIMapPreloadNew.java index 7cdba382..b16659da 100644 --- a/altosuilib/AltosUIMapPreloadNew.java +++ b/altosuilib/AltosUIMapPreloadNew.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; @@ -26,7 +26,7 @@ import java.text.*; import java.lang.Math; import java.net.URL; import java.net.URLConnection; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; class AltosUIMapPos extends Box { AltosUIFrame owner; diff --git a/altosuilib/AltosUIMarker.java b/altosuilib/AltosUIMarker.java index dc96357a..84130562 100644 --- a/altosuilib/AltosUIMarker.java +++ b/altosuilib/AltosUIMarker.java @@ -15,14 +15,14 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.io.*; import java.util.ArrayList; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import org.jfree.ui.*; import org.jfree.chart.*; diff --git a/altosuilib/AltosUIPreferences.java b/altosuilib/AltosUIPreferences.java index 5fc5f15e..84172711 100644 --- a/altosuilib/AltosUIPreferences.java +++ b/altosuilib/AltosUIPreferences.java @@ -15,13 +15,13 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.io.*; import java.util.*; import java.awt.Component; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosUIPreferences extends AltosPreferences { diff --git a/altosuilib/AltosUIPreferencesBackend.java b/altosuilib/AltosUIPreferencesBackend.java index d232edf7..3d212dc5 100644 --- a/altosuilib/AltosUIPreferencesBackend.java +++ b/altosuilib/AltosUIPreferencesBackend.java @@ -15,11 +15,11 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.io.File; import java.util.prefs.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import javax.swing.filechooser.FileSystemView; public class AltosUIPreferencesBackend extends AltosPreferencesBackend { diff --git a/altosuilib/AltosUIRateList.java b/altosuilib/AltosUIRateList.java index 5a18b32f..8919804e 100644 --- a/altosuilib/AltosUIRateList.java +++ b/altosuilib/AltosUIRateList.java @@ -15,10 +15,10 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosUIRateList extends JComboBox { diff --git a/altosuilib/AltosUISeries.java b/altosuilib/AltosUISeries.java index c9401be0..3a1dde03 100644 --- a/altosuilib/AltosUISeries.java +++ b/altosuilib/AltosUISeries.java @@ -15,14 +15,14 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.io.*; import java.util.ArrayList; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; import org.jfree.ui.*; import org.jfree.chart.*; diff --git a/altosuilib/AltosUITelemetryList.java b/altosuilib/AltosUITelemetryList.java index bba14678..a2599acd 100644 --- a/altosuilib/AltosUITelemetryList.java +++ b/altosuilib/AltosUITelemetryList.java @@ -15,11 +15,11 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.util.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class AltosUITelemetryList extends JComboBox { diff --git a/altosuilib/AltosUIUnitsIndicator.java b/altosuilib/AltosUIUnitsIndicator.java index 1b900e54..63af5725 100644 --- a/altosuilib/AltosUIUnitsIndicator.java +++ b/altosuilib/AltosUIUnitsIndicator.java @@ -15,11 +15,11 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public abstract class AltosUIUnitsIndicator extends AltosUIIndicator { diff --git a/altosuilib/AltosUIVoltageIndicator.java b/altosuilib/AltosUIVoltageIndicator.java index ecf8bce9..852b594d 100644 --- a/altosuilib/AltosUIVoltageIndicator.java +++ b/altosuilib/AltosUIVoltageIndicator.java @@ -15,11 +15,11 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public abstract class AltosUIVoltageIndicator extends AltosUIUnitsIndicator { diff --git a/altosuilib/AltosUSBDevice.java b/altosuilib/AltosUSBDevice.java index c93a3211..ea4f9f3c 100644 --- a/altosuilib/AltosUSBDevice.java +++ b/altosuilib/AltosUSBDevice.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.util.*; import libaltosJNI.*; diff --git a/altosuilib/AltosVoice.java b/altosuilib/AltosVoice.java index 1b65acdc..33a06a4e 100644 --- a/altosuilib/AltosVoice.java +++ b/altosuilib/AltosVoice.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import com.sun.speech.freetts.Voice; import com.sun.speech.freetts.VoiceManager; diff --git a/altosuilib/GrabNDrag.java b/altosuilib/GrabNDrag.java index 725bbab6..804425a3 100644 --- a/altosuilib/GrabNDrag.java +++ b/altosuilib/GrabNDrag.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; diff --git a/altosuilib/OSXAdapter.java b/altosuilib/OSXAdapter.java index c2915081..de5d5836 100755 --- a/altosuilib/OSXAdapter.java +++ b/altosuilib/OSXAdapter.java @@ -55,7 +55,7 @@ Copyright © 2003-2007 Apple, Inc., All Rights Reserved */ -package org.altusmetrum.altosuilib_10; +package org.altusmetrum.altosuilib_11; import java.lang.reflect.*; import java.util.HashMap; diff --git a/configure.ac b/configure.ac index d5284fa1..0eff4fb1 100644 --- a/configure.ac +++ b/configure.ac @@ -31,8 +31,8 @@ AC_SUBST(ANDROID_VERSION) dnl ========================================================================== dnl Java library versions -ALTOSUILIB_VERSION=10 -ALTOSLIB_VERSION=10 +ALTOSUILIB_VERSION=11 +ALTOSLIB_VERSION=11 AC_SUBST(ALTOSLIB_VERSION) AC_DEFINE(ALTOSLIB_VERSION,$ALTOSLIB_VERSION,[Version of the AltosLib package]) diff --git a/micropeak/MicroData.java b/micropeak/MicroData.java index 60bf8ad7..e763be27 100644 --- a/micropeak/MicroData.java +++ b/micropeak/MicroData.java @@ -20,8 +20,8 @@ package org.altusmetrum.micropeak; import java.lang.*; import java.io.*; import java.util.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; class MicroIterator implements Iterator { int i; diff --git a/micropeak/MicroDataPoint.java b/micropeak/MicroDataPoint.java index 2775165f..fd6b4a8b 100644 --- a/micropeak/MicroDataPoint.java +++ b/micropeak/MicroDataPoint.java @@ -17,7 +17,7 @@ package org.altusmetrum.micropeak; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altosuilib_11.*; public class MicroDataPoint implements AltosUIDataPoint { public double time; diff --git a/micropeak/MicroDeviceDialog.java b/micropeak/MicroDeviceDialog.java index 005e154e..8b2c747f 100644 --- a/micropeak/MicroDeviceDialog.java +++ b/micropeak/MicroDeviceDialog.java @@ -21,7 +21,7 @@ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altosuilib_11.*; public class MicroDeviceDialog extends AltosDeviceDialog { diff --git a/micropeak/MicroDownload.java b/micropeak/MicroDownload.java index 49bcaf54..9e0299b0 100644 --- a/micropeak/MicroDownload.java +++ b/micropeak/MicroDownload.java @@ -23,8 +23,8 @@ import javax.swing.*; import java.io.*; import java.util.concurrent.*; import java.util.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class MicroDownload extends AltosUIDialog implements Runnable, ActionListener, MicroSerialLog, WindowListener { MicroPeak owner; diff --git a/micropeak/MicroExport.java b/micropeak/MicroExport.java index 1c48a0d3..406f7286 100644 --- a/micropeak/MicroExport.java +++ b/micropeak/MicroExport.java @@ -23,8 +23,8 @@ import java.util.ArrayList; import java.awt.*; import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class MicroExport extends JFileChooser { diff --git a/micropeak/MicroFile.java b/micropeak/MicroFile.java index 0ef021a1..00c59931 100644 --- a/micropeak/MicroFile.java +++ b/micropeak/MicroFile.java @@ -19,8 +19,8 @@ package org.altusmetrum.micropeak; import java.io.*; import java.util.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class MicroFile { diff --git a/micropeak/MicroFileChooser.java b/micropeak/MicroFileChooser.java index 013d1128..394b4317 100644 --- a/micropeak/MicroFileChooser.java +++ b/micropeak/MicroFileChooser.java @@ -20,8 +20,8 @@ package org.altusmetrum.micropeak; import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import java.io.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class MicroFileChooser extends JFileChooser { JFrame frame; diff --git a/micropeak/MicroFrame.java b/micropeak/MicroFrame.java index 9f3c0426..618c839e 100644 --- a/micropeak/MicroFrame.java +++ b/micropeak/MicroFrame.java @@ -21,7 +21,7 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altosuilib_11.*; public class MicroFrame extends AltosUIFrame { static String[] micro_icon_names = { diff --git a/micropeak/MicroGraph.java b/micropeak/MicroGraph.java index 4941070c..bc9fb0dc 100644 --- a/micropeak/MicroGraph.java +++ b/micropeak/MicroGraph.java @@ -22,8 +22,8 @@ import java.util.ArrayList; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; import org.jfree.ui.*; import org.jfree.chart.*; diff --git a/micropeak/MicroPeak.java b/micropeak/MicroPeak.java index fb4fe1cb..c624246f 100644 --- a/micropeak/MicroPeak.java +++ b/micropeak/MicroPeak.java @@ -23,8 +23,8 @@ import javax.swing.*; import java.io.*; import java.util.concurrent.*; import java.util.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class MicroPeak extends MicroFrame implements ActionListener, ItemListener { diff --git a/micropeak/MicroRaw.java b/micropeak/MicroRaw.java index 767ff9e1..8857958f 100644 --- a/micropeak/MicroRaw.java +++ b/micropeak/MicroRaw.java @@ -20,8 +20,8 @@ package org.altusmetrum.micropeak; import java.awt.*; import java.io.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class MicroRaw extends JTextArea { diff --git a/micropeak/MicroSave.java b/micropeak/MicroSave.java index a38e2b46..6822a961 100644 --- a/micropeak/MicroSave.java +++ b/micropeak/MicroSave.java @@ -24,8 +24,8 @@ import javax.swing.filechooser.FileNameExtensionFilter; import java.io.*; import java.util.concurrent.*; import java.util.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class MicroSave extends JFileChooser { diff --git a/micropeak/MicroSerial.java b/micropeak/MicroSerial.java index ea68aa1a..93c40d71 100644 --- a/micropeak/MicroSerial.java +++ b/micropeak/MicroSerial.java @@ -20,7 +20,7 @@ package org.altusmetrum.micropeak; import java.util.*; import java.io.*; import libaltosJNI.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altosuilib_11.*; public class MicroSerial extends InputStream { SWIGTYPE_p_altos_file file; diff --git a/micropeak/MicroSerialLog.java b/micropeak/MicroSerialLog.java index e8accaeb..55d759e5 100644 --- a/micropeak/MicroSerialLog.java +++ b/micropeak/MicroSerialLog.java @@ -20,7 +20,7 @@ package org.altusmetrum.micropeak; import java.util.*; import java.io.*; import libaltosJNI.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altosuilib_11.*; public interface MicroSerialLog { diff --git a/micropeak/MicroStats.java b/micropeak/MicroStats.java index d2f80a8f..75480445 100644 --- a/micropeak/MicroStats.java +++ b/micropeak/MicroStats.java @@ -18,8 +18,8 @@ package org.altusmetrum.micropeak; import java.io.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class MicroStats { double coast_height; diff --git a/micropeak/MicroStatsTable.java b/micropeak/MicroStatsTable.java index 1adef54a..7ffae2f2 100644 --- a/micropeak/MicroStatsTable.java +++ b/micropeak/MicroStatsTable.java @@ -19,8 +19,8 @@ package org.altusmetrum.micropeak; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class MicroStatsTable extends JComponent implements AltosFontListener { GridBagLayout layout; diff --git a/micropeak/MicroUSB.java b/micropeak/MicroUSB.java index 9ceae1cb..4a72ba58 100644 --- a/micropeak/MicroUSB.java +++ b/micropeak/MicroUSB.java @@ -19,8 +19,8 @@ package org.altusmetrum.micropeak; import java.util.*; import libaltosJNI.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class MicroUSB extends altos_device implements AltosDevice { diff --git a/telegps/TeleGPS.java b/telegps/TeleGPS.java index 122b1182..c97ef5e4 100644 --- a/telegps/TeleGPS.java +++ b/telegps/TeleGPS.java @@ -24,8 +24,8 @@ import java.io.*; import java.util.concurrent.*; import java.util.*; import java.text.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class TeleGPS extends AltosUIFrame diff --git a/telegps/TeleGPSConfig.java b/telegps/TeleGPSConfig.java index daef1cac..f8bb1cf1 100644 --- a/telegps/TeleGPSConfig.java +++ b/telegps/TeleGPSConfig.java @@ -22,8 +22,8 @@ import javax.swing.*; import java.io.*; import java.util.concurrent.*; import java.text.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class TeleGPSConfig implements ActionListener { diff --git a/telegps/TeleGPSConfigUI.java b/telegps/TeleGPSConfigUI.java index 075fd8bb..fcba6195 100644 --- a/telegps/TeleGPSConfigUI.java +++ b/telegps/TeleGPSConfigUI.java @@ -22,8 +22,8 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class TeleGPSConfigUI extends AltosUIDialog diff --git a/telegps/TeleGPSDisplayThread.java b/telegps/TeleGPSDisplayThread.java index e44b4fed..0daccc20 100644 --- a/telegps/TeleGPSDisplayThread.java +++ b/telegps/TeleGPSDisplayThread.java @@ -21,8 +21,8 @@ import java.awt.*; import javax.swing.*; import java.io.*; import java.text.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class TeleGPSDisplayThread extends Thread { diff --git a/telegps/TeleGPSGraphUI.java b/telegps/TeleGPSGraphUI.java index 233c8c1a..701a7e30 100644 --- a/telegps/TeleGPSGraphUI.java +++ b/telegps/TeleGPSGraphUI.java @@ -26,8 +26,8 @@ import javax.swing.*; import java.io.*; import java.util.concurrent.*; import java.util.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; diff --git a/telegps/TeleGPSInfo.java b/telegps/TeleGPSInfo.java index 590f1d1a..e17bdbaa 100644 --- a/telegps/TeleGPSInfo.java +++ b/telegps/TeleGPSInfo.java @@ -21,8 +21,8 @@ import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class TeleGPSInfo extends AltosUIFlightTab { diff --git a/telegps/TeleGPSPreferences.java b/telegps/TeleGPSPreferences.java index c03b42d3..2a5b2b69 100644 --- a/telegps/TeleGPSPreferences.java +++ b/telegps/TeleGPSPreferences.java @@ -22,7 +22,7 @@ import java.awt.event.*; import java.beans.*; import javax.swing.*; import javax.swing.event.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altosuilib_11.*; public class TeleGPSPreferences extends AltosUIConfigure diff --git a/telegps/TeleGPSState.java b/telegps/TeleGPSState.java index 46e48fc4..a0ff5727 100644 --- a/telegps/TeleGPSState.java +++ b/telegps/TeleGPSState.java @@ -21,8 +21,8 @@ import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class TeleGPSState extends AltosUIFlightTab { diff --git a/telegps/TeleGPSStatus.java b/telegps/TeleGPSStatus.java index 81a1b305..765a8ce4 100644 --- a/telegps/TeleGPSStatus.java +++ b/telegps/TeleGPSStatus.java @@ -19,8 +19,8 @@ package org.altusmetrum.telegps; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_10.*; -import org.altusmetrum.altosuilib_10.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class TeleGPSStatus extends JComponent implements AltosFlightDisplay { GridBagLayout layout; diff --git a/telegps/TeleGPSStatusUpdate.java b/telegps/TeleGPSStatusUpdate.java index 6740ff70..6cd440c5 100644 --- a/telegps/TeleGPSStatusUpdate.java +++ b/telegps/TeleGPSStatusUpdate.java @@ -18,7 +18,7 @@ package org.altusmetrum.telegps; import java.awt.event.*; -import org.altusmetrum.altoslib_10.*; +import org.altusmetrum.altoslib_11.*; public class TeleGPSStatusUpdate implements ActionListener { -- cgit v1.2.3 From 64ed56fe3132faa8585c9cd7b0261ac85f70a7bd Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 12 May 2016 18:05:14 -0700 Subject: Automatically run 'git submodule update' if necessary This makes sure pdclib exists by updating for the all and all-recursive targets Signed-off-by: Keith Packard --- Makefile.am | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Makefile.am b/Makefile.am index c1ba7535..4145946e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -6,6 +6,12 @@ MAINTAINERCLEANFILES = ChangeLog .PHONY: ChangeLog +all: pdclib/Makefile +all-recursive: pdclib/Makefile + +pdclib/Makefile: + git submodule update + ChangeLog: (GIT_DIR=$(top_srcdir)/.git git log > .changelog.tmp && mv .changelog.tmp ChangeLog; rm -f .changelog.tmp) || \ (touch ChangeLog; echo 'git directory not found: installing possibly empty changelog.' >&2) -- cgit v1.2.3 From 2f4903f903223312d0a3a03dfd413059f24a07f5 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 12 May 2016 19:10:19 -0700 Subject: altosui/telegps/micropeak: Handle both MULTI_LIB and non-MULTI_LIB builds On x86 systems with -m32 and -m64 compilers, both libaltos32.so and libaltos64.so are built. Otherwise, we should use libaltos.so altosui only dealt with libaltos32.so and libaltos64.so, so it only worked on MULTI_LIB systems. telegps and micropeak only used libaltos.so, so they wouldn't work correctly on multi-lib systems. Fix all of them to work either way. Signed-off-by: Keith Packard --- altosui/Makefile.am | 23 ++++++++++++++++++----- micropeak/Makefile.am | 25 +++++++++++++++++++++---- telegps/Makefile.am | 27 ++++++++++++++++++++++----- 3 files changed, 61 insertions(+), 14 deletions(-) diff --git a/altosui/Makefile.am b/altosui/Makefile.am index a6338d38..cfe3bb5b 100644 --- a/altosui/Makefile.am +++ b/altosui/Makefile.am @@ -56,11 +56,17 @@ ALTOSLIB_CLASS=\ ALTOSUILIB_CLASS=\ altosuilib_$(ALTOSUILIB_VERSION).jar +if MULTI_ARCH +LIBALTOS_LINUX=libaltos32.so libaltos64.so +else +LIBALTOS_LINUX=libaltos.so +endif + LIBALTOS= \ - libaltos32.so \ - libaltos64.so \ + $(LIBALTOS_LINUX) \ libaltos.dylib \ - altos.dll + altos.dll \ + altos64.dll desktopdir = $(datadir)/applications desktop_file = altusmetrum-altosui.desktop @@ -163,7 +169,7 @@ WINDOWS_DIST=Altos-Windows-$(VERSION_DASH).exe FAT_FILES=$(FATJAR) $(ALTOSLIB_CLASS) $(ALTOSUILIB_CLASS) $(FREETTS_CLASS) $(JFREECHART_CLASS) $(JCOMMON_CLASS) -LINUX_LIBS=libaltos32.so libaltos64.so +LINUX_LIBS=$(LIBALTOS_LINUX) LINUX_FILES=$(FAT_FILES) $(LINUX_LIBS) $(FIRMWARE) $(DOC) $(desktop_file).in $(LINUX_ICONS) $(LINUX_MIMETYPE) LINUX_EXTRA=altosui-fat @@ -178,7 +184,8 @@ all-local: classes/altosui $(JAR) altosui altosui-test altosui-jdb clean-local: -rm -rf classes $(JAR) $(FATJAR) \ - $(LINUX_DIST) $(LINUX_SH) $(MACOSX_DIST) windows $(WINDOWS_DIST) $(ALTOSLIB_CLASS) $(ALTOSUILIB_CLASS) $(FREETTS_CLASS) \ + Altos-Linux-*.tar.bz2 Altos-Linux-*.sh Altos-Mac-*.dmg Altos-Windows-*.exe \ + windows altoslib_*.jar altosuilib_*.jar $(FREETTS_CLASS) \ $(JFREECHART_CLASS) $(JCOMMON_CLASS) $(LIBALTOS) Manifest.txt Manifest-fat.txt altos-windows.log altos-windows.nsi \ altosui altosui-test altosui-jdb macosx linux *.desktop @@ -269,6 +276,10 @@ altosui-jdb: Makefile echo 'exec jdb -classpath "classes:./*:../libaltos:$(FREETTS)/freetts.jar:$(JCOMMON)/jcommon.jar:$(JFREECHART)/jfreechart.jar" -Djava.library.path="../libaltos/.libs" altosui/AltosUI "$$@"' >> $@ chmod +x $@ +libaltos.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + libaltos32.so: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/.libs/"$@" . @@ -293,6 +304,8 @@ altos64.dll: ../libaltos/altos64.dll ../libaltos/.libs/libaltos32.so: build-libaltos +../libaltos/.libs/libaltos.so: build-libaltos + ../libaltos/altos.dll: build-altos-dll ../libaltos/altos64.dll: build-altos64-dll diff --git a/micropeak/Makefile.am b/micropeak/Makefile.am index a8834a66..7ad2c102 100644 --- a/micropeak/Makefile.am +++ b/micropeak/Makefile.am @@ -40,8 +40,14 @@ JAR=micropeak.jar FATJAR=micropeak-fat.jar +if MULTI_ARCH +LIBALTOS_LINUX=libaltos32.so libaltos64.so +else +LIBALTOS_LINUX=libaltos.so +endif + LIBALTOS= \ - libaltos.so \ + $(LIBALTOS_LINUX) \ libaltos.dylib \ altos64.dll \ altos.dll @@ -98,8 +104,7 @@ all-local: micropeak-test micropeak-jdb $(JAR) clean-local: -rm -rf classes $(JAR) $(FATJAR) \ MicroPeak-Linux-*.tar.bz2 MicroPeak-Mac-*.dmg MicroPeak-Windows-*.exe \ - $(ALTOSLIB_CLASS) \ - $(ALTOSUILIB_CLASS) \ + altoslib_*.jar altosuilib_*.jar \ $(JFREECHART_CLASS) $(JCOMMON_CLASS) $(LIBALTOS) Manifest.txt Manifest-fat.txt \ micropeak micropeak-test micropeak-jdb macosx linux windows micropeak-windows.log \ micropeak-windows.nsi *.desktop @@ -121,7 +126,7 @@ DOC=$(MICROPEAK_DOC) FAT_FILES=$(FATJAR) $(ALTOSLIB_CLASS) $(ALTOSUILIB_CLASS) $(FREETTS_CLASS) $(JFREECHART_CLASS) $(JCOMMON_CLASS) -LINUX_FILES=$(FAT_FILES) libaltos.so $(FIRMWARE) $(DOC) $(desktop_file).in $(LINUX_ICONS) $(LINUX_MIMETYPE) +LINUX_FILES=$(FAT_FILES) $(LIBALTOS_LINUX) $(FIRMWARE) $(DOC) $(desktop_file).in $(LINUX_ICONS) $(LINUX_MIMETYPE) LINUX_EXTRA=micropeak-fat $(desktop_file).in MACOSX_DRIVER_0_URL=http://www.ftdichip.com/Drivers/VCP/MacOSX/FTDIUSBSerialDriver_v2_2_18.dmg @@ -220,6 +225,14 @@ libaltos.so: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/.libs/"$@" . +libaltos32.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + +libaltos64.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + libaltos.dylib: -rm -f "$@" $(LN_S) ../libaltos/"$@" . @@ -232,6 +245,10 @@ altos64.dll: ../libaltos/altos64.dll -rm -f "$@" $(LN_S) ../libaltos/"$@" . +../libaltos/.libs/libaltos64.so: ../libaltos/.libs/libaltos32.so + +../libaltos/.libs/libaltos32.so: build-libaltos + ../libaltos/.libs/libaltos.so: build-libaltos ../libaltos/altos.dll: build-altos-dll diff --git a/telegps/Makefile.am b/telegps/Makefile.am index 0b86329a..3484b951 100644 --- a/telegps/Makefile.am +++ b/telegps/Makefile.am @@ -42,8 +42,14 @@ JAR=telegps.jar FATJAR=telegps-fat.jar +if MULTI_ARCH +LIBALTOS_LINUX=libaltos32.so libaltos64.so +else +LIBALTOS_LINUX=libaltos.so +endif + LIBALTOS= \ - libaltos.so \ + $(LIBALTOS_LINUX) \ libaltos.dylib \ altos64.dll \ altos.dll @@ -118,9 +124,8 @@ all-local: telegps-test telegps-jdb $(JAR) clean-local: -rm -rf classes $(JAR) $(FATJAR) \ TeleGPS-Linux-*.tar.bz2 TeleGPS-Mac-*.dmg TeleGPS-Windows-*.exe \ - $(ALTOSLIB_CLASS) \ - $(ALTOSUILIB_CLASS) \ - $(JFREECHART_CLASS) $(JCOMMON_CLASS) $(LIBALTOS) Manifest.txt Manifest-fat.txt \ + altoslib_*.jar altosuilib_*.jar \ + $(JFREECHART_CLASS) $(JCOMMON_CLASS) $(FREETTS_CLASS) $(LIBALTOS) Manifest.txt Manifest-fat.txt \ telegps telegps-test telegps-jdb macosx linux windows telegps-windows.log \ telegps-windows.nsi *.desktop @@ -141,7 +146,7 @@ DOC=$(TELEGPS_DOC) FAT_FILES=$(FATJAR) $(ALTOSLIB_CLASS) $(ALTOSUILIB_CLASS) $(FREETTS_CLASS) $(JFREECHART_CLASS) $(JCOMMON_CLASS) -LINUX_FILES=$(FAT_FILES) libaltos.so $(FIRMWARE) $(DOC) $(desktop_file).in $(LINUX_ICONS) $(LINUX_MIMETYPE) +LINUX_FILES=$(FAT_FILES) $(LIBALTOS_LINUX) $(FIRMWARE) $(DOC) $(desktop_file).in $(LINUX_ICONS) $(LINUX_MIMETYPE) LINUX_EXTRA=telegps-fat $(desktop_file).in MACOSX_INFO_PLIST=Info.plist @@ -219,6 +224,14 @@ libaltos.so: build-libaltos -rm -f "$@" $(LN_S) ../libaltos/.libs/"$@" . +libaltos32.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + +libaltos64.so: build-libaltos + -rm -f "$@" + $(LN_S) ../libaltos/.libs/"$@" . + libaltos.dylib: -rm -f "$@" $(LN_S) ../libaltos/"$@" . @@ -231,6 +244,10 @@ altos64.dll: ../libaltos/altos64.dll -rm -f "$@" $(LN_S) ../libaltos/"$@" . +../libaltos/.libs/libaltos64.so: ../libaltos/.libs/libaltos32.so + +../libaltos/.libs/libaltos32.so: build-libaltos + ../libaltos/.libs/libaltos.so: build-libaltos ../libaltos/altos.dll: build-altos-dll -- cgit v1.2.3 From b13037fad0905c5933d1ff579122ba1357b02eea Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 12 May 2016 19:13:05 -0700 Subject: altoslib: Store common frequencies in library version-independent form Serializable Objects in java are very specific to the class being serialized. As we bump the name of the library on a regular basis to note API/ABI issues, this mean a saved a Serializable object in the preferences database will fail to load across library version upgrades. The saved tracker state and saved common frequencies were the only objects saved in this form; this patch adds infrastructure for writing objects in a version-independent form, and then adds support for saving frequencies in that form. Signed-off-by: Keith Packard --- altoslib/AltosFrequency.java | 13 ++++ altoslib/AltosHashSet.java | 173 +++++++++++++++++++++++++++++++++++++++++ altoslib/AltosParse.java | 8 ++ altoslib/AltosPreferences.java | 29 ++++++- altoslib/Makefile.am | 1 + 5 files changed, 220 insertions(+), 4 deletions(-) create mode 100644 altoslib/AltosHashSet.java diff --git a/altoslib/AltosFrequency.java b/altoslib/AltosFrequency.java index ef46bd67..88997152 100644 --- a/altoslib/AltosFrequency.java +++ b/altoslib/AltosFrequency.java @@ -58,8 +58,21 @@ public class AltosFrequency implements Serializable { return diff < 0.010; } + public AltosHashSet hashSet() { + AltosHashSet h = new AltosHashSet(); + + h.putDouble("frequency", frequency); + h.putString("description", description); + return h; + } + public AltosFrequency(double f, String d) { frequency = f; description = d; } + + public AltosFrequency(AltosHashSet h) { + frequency = h.getDouble("frequency", 0.0); + description = h.getString("description", ""); + } } diff --git a/altoslib/AltosHashSet.java b/altoslib/AltosHashSet.java new file mode 100644 index 00000000..488d52e8 --- /dev/null +++ b/altoslib/AltosHashSet.java @@ -0,0 +1,173 @@ +/* + * Copyright © 2016 Keith Packard + * + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.altoslib_11; + +import java.io.*; +import java.util.*; +import java.text.*; + +public class AltosHashSet extends Hashtable { + private StringWriter writer; + + static private int get(StringReader reader) throws IOException { + return reader.read(); + } + + static private String get_token(StringReader reader) throws IOException { + int c = get(reader); + + if (c == -1) + return null; + + ArrayList chars = new ArrayList(); + + for (;;) { + chars.add(c); + c = get(reader); + if (c == -1 || c == ';') + break; + if (c == '\\') + c = get(reader); + } + int[] ch = new int[chars.size()]; + for (int i = 0; i < ch.length; i++) + ch[i] = chars.get(i); + return new String(ch, 0, ch.length); + } + + static private void put(StringWriter writer, int c) throws IOException { + writer.write(c); + } + + static private void put_token(StringWriter writer, String token) throws IOException { + for (int i = 0; i < token.length(); i++) { + int c = token.codePointAt(i); + + switch (c) { + case ';': + case '\\': + put(writer, '\\'); + } + put(writer, c); + } + put(writer, ';'); + } + + public String toString() { + try { + StringWriter writer = new StringWriter(); + + for (String key : keySet()) { + String value = get(key); + put_token(writer, key); + put_token(writer, value); + } + return writer.toString(); + } catch (IOException ie) { + return null; + } + } + + public void putInt(String key, int value) { + put(key, Integer.toString(value)); + } + + public int getInt(String key, int def) { + String value = get(key); + + if (value == null) + return def; + try { + return AltosParse.parse_int(value); + } catch (ParseException pe) { + return def; + } + } + + public void putDouble(String key, double value) { + put(key, AltosParse.format_double_net(value)); + } + + public double getDouble(String key, double def) { + String value = get(key); + + if (value == null) + return def; + try { + return AltosParse.parse_double_net(value); + } catch (ParseException pe) { + return def; + } + } + + public String getString(String key, String def) { + String value = get(key); + + if (value == null) + return def; + return value; + } + + public void putString(String key, String value) { + put(key, value); + } + + public AltosHashSet (String string) throws IOException { + StringReader reader = new StringReader(string); + String key, value; + + for (;;) { + key = get_token(reader); + value = get_token(reader); + if (key == null || value == null) + break; + put(key, value); + } + } + + public AltosHashSet() { + } + + static public AltosHashSet[] array(String string) throws IOException { + + if (string == null) + return null; + + StringReader reader = new StringReader(string); + ArrayList array = new ArrayList(); + String element; + + while ((element = get_token(reader)) != null) + array.add(new AltosHashSet(element)); + return array.toArray(new AltosHashSet[0]); + } + + static public String toString(AltosHashSet[] sets) throws IOException { + + if (sets == null) + return null; + + StringWriter writer = new StringWriter(); + + for (AltosHashSet h : sets) { + String element = h.toString(); + put_token(writer, element); + } + return writer.toString(); + } +} diff --git a/altoslib/AltosParse.java b/altoslib/AltosParse.java index ae88182d..12499b7b 100644 --- a/altoslib/AltosParse.java +++ b/altoslib/AltosParse.java @@ -53,6 +53,10 @@ public class AltosParse { } } + public static String format_double_locale(double number) { + return nf_locale.format(number); + } + public static double parse_double_net(String str) throws ParseException { try { return nf_net.parse(str.trim()).doubleValue(); @@ -61,6 +65,10 @@ public class AltosParse { } } + public static String format_double_net(double number) { + return nf_net.format(number); + } + public static double parse_coord(String coord) throws ParseException { String[] dsf = coord.split("\\D+"); diff --git a/altoslib/AltosPreferences.java b/altoslib/AltosPreferences.java index b853e944..f8101ce6 100644 --- a/altoslib/AltosPreferences.java +++ b/altoslib/AltosPreferences.java @@ -116,7 +116,7 @@ public class AltosPreferences { public final static String frequency_count = "COUNT"; public final static String frequency_format = "FREQUENCY-%d"; public final static String description_format = "DESCRIPTION-%d"; - public final static String frequenciesPreference = "FREQUENCIES"; + public final static String frequenciesPreference = "FREQUENCIES-1"; /* Units preference */ @@ -136,7 +136,17 @@ public class AltosPreferences { AltosFrequency[] frequencies = null; - frequencies = (AltosFrequency[]) backend.getSerializable(frequenciesPreference, null); + try { + AltosHashSet[] sets = AltosHashSet.array(backend.getString(frequenciesPreference,null)); + if (sets != null) { + frequencies = new AltosFrequency[sets.length]; + for (int i = 0; i < frequencies.length; i++) + frequencies[i] = new AltosFrequency(sets[i]); + } + + } catch (IOException ie) { + frequencies = null; + } if (frequencies == null) { if (backend.nodeExists(common_frequencies_node_name)) { @@ -165,6 +175,17 @@ public class AltosPreferences { return frequencies; } + public static void save_common_frequencies() { + try { + AltosHashSet[] sets = new AltosHashSet[common_frequencies.length]; + for (int i = 0; i < sets.length; i++) + sets[i] = common_frequencies[i].hashSet(); + backend.putString(frequenciesPreference, AltosHashSet.toString(sets)); + } catch (IOException ie) { + } + flush_preferences(); + } + public static int launcher_serial; public static int launcher_channel; @@ -512,8 +533,8 @@ public class AltosPreferences { public static void set_common_frequencies(AltosFrequency[] frequencies) { synchronized(backend) { common_frequencies = frequencies; - backend.putSerializable(frequenciesPreference, frequencies); - flush_preferences(); + + save_common_frequencies(); } } diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am index f3219839..512e1cca 100644 --- a/altoslib/Makefile.am +++ b/altoslib/Makefile.am @@ -160,6 +160,7 @@ altoslib_JAVA = \ AltosMapLoaderListener.java \ AltosMapLoader.java \ AltosMapTypeListener.java \ + AltosHashSet.java \ AltosVersion.java JAR=altoslib_$(ALTOSLIB_VERSION).jar -- cgit v1.2.3 From b1a90adac9f6e2a609ce1ccd6749462bb5c9adbe Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 12 May 2016 23:33:53 -0700 Subject: altoslib: Store saved state in version-independent format Use AltosHashSet for AltosState so that AltosDroid doesn't lose tracker information when the application is upgraded. Signed-off-by: Keith Packard --- .../src/org/altusmetrum/AltosDroid/AltosDroid.java | 8 +- .../altusmetrum/AltosDroid/TelemetryService.java | 6 +- altoslib/AltosAccel.java | 2 +- altoslib/AltosCompanion.java | 28 +- altoslib/AltosConfigData.java | 2 +- altoslib/AltosFrequency.java | 10 +- altoslib/AltosGPS.java | 63 +++- altoslib/AltosGPSSat.java | 62 +++- altoslib/AltosGreatCircle.java | 29 +- altoslib/AltosHashSet.java | 183 ++++++++-- altoslib/AltosHashable.java | 25 ++ altoslib/AltosIMU.java | 37 +- altoslib/AltosLib.java | 7 +- altoslib/AltosListenerState.java | 2 +- altoslib/AltosMag.java | 28 +- altoslib/AltosMs5607.java | 44 ++- altoslib/AltosParse.java | 8 + altoslib/AltosPreferences.java | 50 +-- altoslib/AltosPreferencesBackend.java | 40 +-- altoslib/AltosPyro.java | 2 +- altoslib/AltosQuaternion.java | 22 +- altoslib/AltosRotation.java | 20 +- altoslib/AltosSavedState.java | 2 +- altoslib/AltosState.java | 398 ++++++++++++++++++++- altoslib/Makefile.am | 1 + altosui/AltosLaunch.java | 4 +- 26 files changed, 965 insertions(+), 118 deletions(-) create mode 100644 altoslib/AltosHashable.java diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java index 385348ea..a62bf7fe 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java @@ -825,9 +825,9 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, } } - private void disconnectDevice() { + private void disconnectDevice(boolean remember) { try { - mService.send(Message.obtain(null, TelemetryService.MSG_DISCONNECT, null)); + mService.send(Message.obtain(null, TelemetryService.MSG_DISCONNECT, (Boolean) remember)); } catch (RemoteException e) { } } @@ -978,11 +978,11 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, case R.id.disconnect: /* Disconnect the device */ - disconnectDevice(); + disconnectDevice(false); return true; case R.id.quit: AltosDebug.debug("R.id.quit"); - disconnectDevice(); + disconnectDevice(true); finish(); return true; case R.id.setup: diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java index 6519a114..dc39c899 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java @@ -129,7 +129,8 @@ public class TelemetryService extends Service implements AltosIdleMonitorListene case MSG_DISCONNECT: AltosDebug.debug("Disconnect command received"); s.address = null; - AltosDroidPreferences.set_active_device(null); + if (!(Boolean) msg.obj) + AltosDroidPreferences.set_active_device(null); s.disconnect(true); break; case MSG_DELETE_SERIAL: @@ -613,6 +614,8 @@ public class TelemetryService extends Service implements AltosIdleMonitorListene telemetry_state.latest_serial = AltosPreferences.latest_state(); + AltosDebug.debug("latest serial %d\n", telemetry_state.latest_serial); + for (int serial : serials) { AltosState saved_state = AltosPreferences.state(serial); if (saved_state != null) { @@ -629,6 +632,7 @@ public class TelemetryService extends Service implements AltosIdleMonitorListene telemetry_state.states.put(serial, saved_state); } else { AltosDebug.debug("Failed to recover state for %d", serial); + AltosPreferences.remove_state(serial); } } } diff --git a/altoslib/AltosAccel.java b/altoslib/AltosAccel.java index 00f3aefc..c6a2da11 100644 --- a/altoslib/AltosAccel.java +++ b/altoslib/AltosAccel.java @@ -19,7 +19,7 @@ package org.altusmetrum.altoslib_11; import java.io.*; -public class AltosAccel extends AltosUnits implements Serializable { +public class AltosAccel extends AltosUnits { public double value(double v, boolean imperial_units) { if (imperial_units) diff --git a/altoslib/AltosCompanion.java b/altoslib/AltosCompanion.java index 381b0a25..6f18d93e 100644 --- a/altoslib/AltosCompanion.java +++ b/altoslib/AltosCompanion.java @@ -19,7 +19,7 @@ package org.altusmetrum.altoslib_11; import java.io.*; -public class AltosCompanion implements Serializable { +public class AltosCompanion implements AltosHashable { public final static int board_id_telescience = 0x0a; public final static int MAX_CHANNELS = 12; @@ -37,4 +37,30 @@ public class AltosCompanion implements Serializable { channels = MAX_CHANNELS; companion_data = new int[channels]; } + + public AltosHashSet hashSet() { + AltosHashSet h = new AltosHashSet(); + + h.putInt("tick", tick); + h.putInt("board_id", board_id); + h.putInt("update_period", update_period); + h.putInt("channels", channels); + h.putIntArray("companion_data", companion_data); + return h; + } + + public AltosCompanion(AltosHashSet h) { + tick = h.getInt("tick", tick); + board_id = h.getInt("board_id", board_id); + update_period = h.getInt("update_period", update_period); + channels = h.getInt("channels", channels); + companion_data = h.getIntArray("companion_data", new int[channels]); + } + + public static AltosCompanion fromHashSet(AltosHashSet h, AltosCompanion def) { + if (h == null) + return def; + + return new AltosCompanion(h); + } } diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index aa46f118..ce430d7a 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -204,7 +204,7 @@ public class AltosConfigData implements Iterable { for (int i = 0; i < parts.length; i++) { try { - r[i] = AltosLib.fromdec(parts[i]); + r[i] = (int) AltosLib.fromdec(parts[i]); } catch (NumberFormatException n) { r[i] = 0; } diff --git a/altoslib/AltosFrequency.java b/altoslib/AltosFrequency.java index 88997152..f9aa6de6 100644 --- a/altoslib/AltosFrequency.java +++ b/altoslib/AltosFrequency.java @@ -21,7 +21,7 @@ import java.io.*; import java.util.*; import java.text.*; -public class AltosFrequency implements Serializable { +public class AltosFrequency { public double frequency; public String description; @@ -71,8 +71,14 @@ public class AltosFrequency implements Serializable { description = d; } - public AltosFrequency(AltosHashSet h) { + private AltosFrequency(AltosHashSet h) { frequency = h.getDouble("frequency", 0.0); description = h.getString("description", ""); } + + public static AltosFrequency fromHashSet(AltosHashSet h, AltosFrequency def) { + if (h == null) + return def; + return new AltosFrequency(h); + } } diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java index 6f7c40b7..371fd7bf 100644 --- a/altoslib/AltosGPS.java +++ b/altoslib/AltosGPS.java @@ -21,7 +21,7 @@ import java.text.*; import java.util.concurrent.*; import java.io.*; -public class AltosGPS implements Cloneable, Serializable { +public class AltosGPS implements Cloneable, AltosHashable { public final static int MISSING = AltosLib.MISSING; @@ -388,4 +388,65 @@ public class AltosGPS implements Cloneable, Serializable { break; } } + + public AltosHashSet hashSet() { + AltosHashSet h = new AltosHashSet(); + + h.putInt("nsat", nsat); + h.putBoolean("locked", locked); + h.putBoolean("connected", connected); + h.putDouble("lat", lat); + h.putDouble("lon", lon); + h.putDouble("alt", alt); + h.putInt("year", year); + h.putInt("month", month); + h.putInt("day", day); + h.putInt("hour", hour); + h.putInt("minute", minute); + h.putInt("second", second); + + h.putDouble("ground_speed", ground_speed); + h.putInt("course", course); + h.putDouble("climb_rate", climb_rate); + h.putDouble("pdop", pdop); + h.putDouble("hdop", hdop); + h.putDouble("vdop", vdop); + h.putDouble("h_error", h_error); + h.putDouble("v_error", v_error); + h.putString("cc_gps_sat", AltosGPSSat.toString(cc_gps_sat)); + return h; + } + + public AltosGPS(AltosHashSet h) { + init(); + nsat = h.getInt("nsat", nsat); + locked = h.getBoolean("locked", locked); + connected = h.getBoolean("connected", connected); + lat = h.getDouble("lat", lat); + lon = h.getDouble("lon", lon); + alt = h.getDouble("alt", alt); + year = h.getInt("year", year); + month = h.getInt("month", month); + day = h.getInt("day", day); + hour = h.getInt("hour", hour); + minute = h.getInt("minute", minute); + second = h.getInt("second", second); + + ground_speed = h.getDouble("ground_speed", ground_speed); + course = h.getInt("course", course); + climb_rate = h.getDouble("climb_rate", climb_rate); + pdop = h.getDouble("pdop", pdop); + hdop = h.getDouble("hdop", hdop); + vdop = h.getDouble("vdop", vdop); + h_error = h.getDouble("h_error", h_error); + v_error = h.getDouble("v_error", v_error); + cc_gps_sat = AltosGPSSat.array(h.getString("cc_gps_sat", null)); + } + + public static AltosGPS fromHashSet(AltosHashSet h, AltosGPS def) { + if (h == null) + return def; + + return new AltosGPS(h); + } } diff --git a/altoslib/AltosGPSSat.java b/altoslib/AltosGPSSat.java index abde1c0c..ad7a8647 100644 --- a/altoslib/AltosGPSSat.java +++ b/altoslib/AltosGPSSat.java @@ -16,11 +16,13 @@ */ package org.altusmetrum.altoslib_11; + +import java.io.*; import java.text.*; +import java.util.*; import java.util.concurrent.*; -import java.io.*; -public class AltosGPSSat implements Serializable { +public class AltosGPSSat { public int svid; public int c_n0; @@ -31,5 +33,61 @@ public class AltosGPSSat implements Serializable { public AltosGPSSat() { } + + public AltosHashSet hashSet() { + AltosHashSet h = new AltosHashSet(); + h.putInt("svid", svid); + h.putInt("c_n0", c_n0); + return h; + } + + private AltosGPSSat(AltosHashSet h) { + svid = h.getInt("svid", 0); + c_n0 = h.getInt("c_n0", 0); + } + + static public AltosGPSSat fromHashSet(AltosHashSet h, AltosGPSSat def) { + if (h == null) + return def; + return new AltosGPSSat(h); + } + + static public AltosGPSSat[] array(String string) { + + if (string == null) + return null; + + try { + StringReader reader = new StringReader(string); + ArrayList array = new ArrayList(); + String element; + + while ((element = AltosHashSet.get_token(reader)) != null) { + AltosGPSSat sat = AltosGPSSat.fromHashSet(AltosHashSet.fromString(element), null); + if (sat != null) + array.add(sat); + } + return array.toArray(new AltosGPSSat[0]); + } catch (IOException ie) { + return null; + } + } + + public static String toString(AltosGPSSat[] sats) { + if (sats == null) + return null; + + try { + StringWriter writer = new StringWriter(); + + for (AltosGPSSat g : sats) { + String element = g.hashSet().toString(); + AltosHashSet.put_token(writer, element); + } + return writer.toString(); + } catch (IOException ie) { + return null; + } + } } diff --git a/altoslib/AltosGreatCircle.java b/altoslib/AltosGreatCircle.java index 03e05678..9ec808a5 100644 --- a/altoslib/AltosGreatCircle.java +++ b/altoslib/AltosGreatCircle.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.lang.Math; import java.io.*; -public class AltosGreatCircle implements Cloneable, Serializable { +public class AltosGreatCircle implements Cloneable, AltosHashable { public double distance; public double bearing; public double range; @@ -103,4 +103,31 @@ public class AltosGreatCircle implements Cloneable, Serializable { range = 0; elevation = 0; } + + public AltosHashSet hashSet() { + AltosHashSet h = new AltosHashSet(); + + h.putDouble("distance", distance); + h.putDouble("bearing", bearing); + h.putDouble("range", range); + h.putDouble("elevation", elevation); + + return h; + } + + public AltosGreatCircle(AltosHashSet h) { + this(); + + distance = h.getDouble("distance", distance); + bearing = h.getDouble("bearing", bearing); + range = h.getDouble("range", range); + elevation = h.getDouble("elevation", elevation); + } + + public static AltosGreatCircle fromHashSet(AltosHashSet h, AltosGreatCircle def) { + if (h == null) + return def; + + return new AltosGreatCircle(h); + } } diff --git a/altoslib/AltosHashSet.java b/altoslib/AltosHashSet.java index 488d52e8..4b89f8cc 100644 --- a/altoslib/AltosHashSet.java +++ b/altoslib/AltosHashSet.java @@ -22,13 +22,11 @@ import java.util.*; import java.text.*; public class AltosHashSet extends Hashtable { - private StringWriter writer; - static private int get(StringReader reader) throws IOException { return reader.read(); } - static private String get_token(StringReader reader) throws IOException { + static public String get_token(StringReader reader) throws IOException { int c = get(reader); if (c == -1) @@ -54,7 +52,7 @@ public class AltosHashSet extends Hashtable { writer.write(c); } - static private void put_token(StringWriter writer, String token) throws IOException { + static public void put_token(StringWriter writer, String token) throws IOException { for (int i = 0; i < token.length(); i++) { int c = token.codePointAt(i); @@ -83,6 +81,22 @@ public class AltosHashSet extends Hashtable { } } + public void putBoolean(String key, boolean value) { + put(key, value ? "t" : "f"); + } + + public boolean getBoolean(String key, boolean def) { + String value = get(key); + + if (value == null) + return def; + if (value.equals("t")) + return true; + if (value.equals("f")) + return false; + return def; + } + public void putInt(String key, int value) { put(key, Integer.toString(value)); } @@ -99,6 +113,59 @@ public class AltosHashSet extends Hashtable { } } + public void putIntArray(String key, int value[]) { + if (value == null) + return; + + StringWriter writer = new StringWriter(); + + try { + for (int i = 0; i < value.length; i++) + put_token(writer, Integer.toString(value[i])); + put(key, writer.toString()); + } catch (IOException ie) { + } + } + + public int[] getIntArray(String key, int[] def) { + String value = get(key); + + if (value == null) + return def; + try { + StringReader reader = new StringReader(value); + ArrayList array = new ArrayList(); + String elt; + + while ((elt = get_token(reader)) != null) + array.add(AltosParse.parse_int(elt)); + int[] ret = new int[array.size()]; + for (int i = 0; i < ret.length; i++) + ret[i] = array.get(i); + return ret; + } catch (ParseException pe) { + return def; + } catch (IOException ie) { + return def; + } + } + + public void putLong(String key, long value) { + put(key, Long.toString(value)); + } + + public long getLong(String key, long def) { + String value = get(key); + + if (value == null) + return def; + try { + return AltosParse.parse_long(value); + } catch (ParseException pe) { + return def; + } + } + public void putDouble(String key, double value) { put(key, AltosParse.format_double_net(value)); } @@ -115,6 +182,43 @@ public class AltosHashSet extends Hashtable { } } + public void putDoubleArray(String key, double value[]) { + if (value == null) + return; + + StringWriter writer = new StringWriter(); + + try { + for (int i = 0; i < value.length; i++) + put_token(writer, AltosParse.format_double_net(value[i])); + put(key, writer.toString()); + } catch (IOException ie) { + } + } + + public double[] getDoubleArray(String key, double[] def) { + String value = get(key); + + if (value == null) + return def; + try { + StringReader reader = new StringReader(value); + ArrayList array = new ArrayList(); + String elt; + + while ((elt = get_token(reader)) != null) + array.add(AltosParse.parse_double_net(elt)); + double[] ret = new double[array.size()]; + for (int i = 0; i < ret.length; i++) + ret[i] = array.get(i); + return ret; + } catch (ParseException pe) { + return def; + } catch (IOException ie) { + return def; + } + } + public String getString(String key, String def) { String value = get(key); @@ -124,10 +228,34 @@ public class AltosHashSet extends Hashtable { } public void putString(String key, String value) { - put(key, value); + if (value != null) + put(key, value); } - public AltosHashSet (String string) throws IOException { + public AltosHashSet getHash(String key) { + String value = get(key); + + if (value == null) + return null; + try { + return new AltosHashSet(value); + } catch (IOException ie) { + return null; + } + } + + public void putHash(String key, AltosHashSet h) { + put(key, h.toString()); + } + + public void putHashable(String key, AltosHashable h) { + if (h == null) + return; + + put(key, h.hashSet().toString()); + } + + private AltosHashSet (String string) throws IOException { StringReader reader = new StringReader(string); String key, value; @@ -143,31 +271,46 @@ public class AltosHashSet extends Hashtable { public AltosHashSet() { } - static public AltosHashSet[] array(String string) throws IOException { + static public AltosHashSet fromString(String string) { + try { + return new AltosHashSet(string); + } catch (IOException ie) { + return null; + } + } + + static public AltosHashSet[] array(String string) { if (string == null) return null; - StringReader reader = new StringReader(string); - ArrayList array = new ArrayList(); - String element; + try { + StringReader reader = new StringReader(string); + ArrayList array = new ArrayList(); + String element; - while ((element = get_token(reader)) != null) - array.add(new AltosHashSet(element)); - return array.toArray(new AltosHashSet[0]); + while ((element = get_token(reader)) != null) + array.add(new AltosHashSet(element)); + return array.toArray(new AltosHashSet[0]); + } catch (IOException ie) { + return null; + } } - static public String toString(AltosHashSet[] sets) throws IOException { - + static public String toString(AltosHashSet[] sets) { if (sets == null) return null; - StringWriter writer = new StringWriter(); + try { + StringWriter writer = new StringWriter(); - for (AltosHashSet h : sets) { - String element = h.toString(); - put_token(writer, element); + for (AltosHashSet h : sets) { + String element = h.toString(); + put_token(writer, element); + } + return writer.toString(); + } catch (IOException ie) { + return null; } - return writer.toString(); } } diff --git a/altoslib/AltosHashable.java b/altoslib/AltosHashable.java new file mode 100644 index 00000000..e228543d --- /dev/null +++ b/altoslib/AltosHashable.java @@ -0,0 +1,25 @@ +/* + * Copyright © 2016 Keith Packard + * + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.altoslib_11; + +import java.io.*; + +public interface AltosHashable { + + public AltosHashSet hashSet(); +} diff --git a/altoslib/AltosIMU.java b/altoslib/AltosIMU.java index 26d11591..df6c4ed3 100644 --- a/altoslib/AltosIMU.java +++ b/altoslib/AltosIMU.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; -public class AltosIMU implements Cloneable, Serializable { +public class AltosIMU implements Cloneable, AltosHashable { public int accel_along; public int accel_across; public int accel_through; @@ -29,13 +29,13 @@ public class AltosIMU implements Cloneable, Serializable { public int gyro_pitch; public int gyro_yaw; - public static double counts_per_g = 2048.0; + public static final double counts_per_g = 2048.0; public static double convert_accel(double counts) { return counts / counts_per_g * (-AltosConvert.GRAVITATIONAL_ACCELERATION); } - public static double counts_per_degsec = 16.4; + public static final double counts_per_degsec = 16.4; public static double convert_gyro(double counts) { return counts / counts_per_degsec; @@ -115,4 +115,35 @@ public class AltosIMU implements Cloneable, Serializable { break; } } + + public AltosIMU (AltosHashSet h) { + this(); + + accel_along = h.getInt("accel_along", accel_along); + accel_across = h.getInt("accel_across", accel_across); + accel_through = h.getInt("accel_through", accel_through); + + gyro_roll = h.getInt("gyro_roll", gyro_roll); + gyro_pitch = h.getInt("gyro_pitch", gyro_pitch); + gyro_yaw = h.getInt("gyro_yaw", gyro_yaw); + } + + static public AltosIMU fromHashSet(AltosHashSet h, AltosIMU def) { + if (h == null) + return def; + return new AltosIMU(h); + } + + public AltosHashSet hashSet() { + AltosHashSet h = new AltosHashSet(); + + h.putInt("accel_along", accel_along); + h.putInt("accel_across", accel_across); + h.putInt("accel_through", accel_through); + + h.putInt("gyro_roll", gyro_roll); + h.putInt("gyro_pitch", gyro_pitch); + h.putInt("gyro_yaw", gyro_yaw); + return h; + } } diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index 103052cb..044caf8d 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -493,9 +493,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 == '-') { diff --git a/altoslib/AltosListenerState.java b/altoslib/AltosListenerState.java index f5d1c0cb..7d9ec2a4 100644 --- a/altoslib/AltosListenerState.java +++ b/altoslib/AltosListenerState.java @@ -19,7 +19,7 @@ package org.altusmetrum.altoslib_11; import java.io.*; -public class AltosListenerState implements Serializable { +public class AltosListenerState { public int crc_errors; public double battery; public boolean running; diff --git a/altoslib/AltosMag.java b/altoslib/AltosMag.java index 3e82f499..c350ae46 100644 --- a/altoslib/AltosMag.java +++ b/altoslib/AltosMag.java @@ -20,12 +20,12 @@ package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; -public class AltosMag implements Cloneable, Serializable { +public class AltosMag implements Cloneable, AltosHashable { public int along; public int across; public int through; - public static double counts_per_gauss = 1090; + public static final double counts_per_gauss = 1090; public static double convert_gauss(double counts) { return counts / counts_per_gauss; @@ -93,4 +93,28 @@ public class AltosMag implements Cloneable, Serializable { break; } } + + public AltosHashSet hashSet() { + AltosHashSet h = new AltosHashSet(); + + h.putInt("along", along); + h.putInt("across", across); + h.putInt("through", through); + return h; + } + + public AltosMag(AltosHashSet h) { + this(); + + along = h.getInt("along", along); + across = h.getInt("across", across); + through = h.getInt("through", through); + } + + public static AltosMag fromHashSet(AltosHashSet h, AltosMag def) { + if (h == null) + return def; + + return new AltosMag(h); + } } diff --git a/altoslib/AltosMs5607.java b/altoslib/AltosMs5607.java index 4f5549a7..88a97828 100644 --- a/altoslib/AltosMs5607.java +++ b/altoslib/AltosMs5607.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; -public class AltosMs5607 implements Serializable { +public class AltosMs5607 implements AltosHashable { public int reserved; public int sens; public int off; @@ -166,4 +166,46 @@ public class AltosMs5607 implements Serializable { } convert(); } + + public AltosHashSet hashSet() { + AltosHashSet h = new AltosHashSet(); + + h.putInt("reserved", reserved); + h.putInt("sens", sens); + h.putInt("off", off); + h.putInt("tcs", tcs); + h.putInt("tco", tco); + h.putInt("tref", tref); + h.putInt("tempsens", tempsens); + h.putInt("crc", crc); + h.putInt("raw_pres", raw_pres); + h.putInt("raw_temp", raw_temp); + h.putInt("pa", pa); + h.putInt("cc", cc); + return h; + } + + public AltosMs5607(AltosHashSet h) { + this(); + + reserved = h.getInt("reserved", reserved); + sens = h.getInt("sens", sens); + off = h.getInt("off", off); + tcs = h.getInt("tcs", tcs); + tco = h.getInt("tco", tco); + tref = h.getInt("tref", tref); + tempsens = h.getInt("tempsens", tempsens); + crc = h.getInt("crc", crc); + raw_pres = h.getInt("raw_pres", raw_pres); + raw_temp = h.getInt("raw_temp", raw_temp); + pa = h.getInt("pa", pa); + cc = h.getInt("cc", cc); + } + + public static AltosMs5607 fromHashSet(AltosHashSet h, AltosMs5607 def) { + if (h == null) + return def; + + return new AltosMs5607(h); + } } diff --git a/altoslib/AltosParse.java b/altoslib/AltosParse.java index 12499b7b..fbd049ae 100644 --- a/altoslib/AltosParse.java +++ b/altoslib/AltosParse.java @@ -26,6 +26,14 @@ public class AltosParse { } public static int parse_int(String v) throws ParseException { + try { + return (int) AltosLib.fromdec(v); + } catch (NumberFormatException e) { + throw new ParseException("error parsing int " + v, 0); + } + } + + public static long parse_long(String v) throws ParseException { try { return AltosLib.fromdec(v); } catch (NumberFormatException e) { diff --git a/altoslib/AltosPreferences.java b/altoslib/AltosPreferences.java index f8101ce6..3f8e7a07 100644 --- a/altoslib/AltosPreferences.java +++ b/altoslib/AltosPreferences.java @@ -136,16 +136,16 @@ public class AltosPreferences { AltosFrequency[] frequencies = null; - try { - AltosHashSet[] sets = AltosHashSet.array(backend.getString(frequenciesPreference,null)); - if (sets != null) { - frequencies = new AltosFrequency[sets.length]; - for (int i = 0; i < frequencies.length; i++) - frequencies[i] = new AltosFrequency(sets[i]); + AltosHashSet[] sets = AltosHashSet.array(backend.getString(frequenciesPreference,null)); + if (sets != null) { + ArrayList freqs = new ArrayList(); + + for (int i = 0; i < sets.length; i++) { + AltosFrequency f = AltosFrequency.fromHashSet(sets[i], null); + if (f != null) + freqs.add(f); } - - } catch (IOException ie) { - frequencies = null; + frequencies = freqs.toArray(new AltosFrequency[0]); } if (frequencies == null) { @@ -153,14 +153,16 @@ public class AltosPreferences { AltosPreferencesBackend node = backend.node(common_frequencies_node_name); int count = node.getInt(frequency_count, 0); - frequencies = new AltosFrequency[count]; - for (int i = 0; i < count; i++) { - double frequency; - String description; + if (count > 0) { + frequencies = new AltosFrequency[count]; + for (int i = 0; i < count; i++) { + double frequency; + String description; - frequency = node.getDouble(String.format(frequency_format, i), 0.0); - description = node.getString(String.format(description_format, i), null); - frequencies[i] = new AltosFrequency(frequency, description); + frequency = node.getDouble(String.format(frequency_format, i), 0.0); + description = node.getString(String.format(description_format, i), null); + frequencies[i] = new AltosFrequency(frequency, description); + } } } } @@ -176,13 +178,10 @@ public class AltosPreferences { } public static void save_common_frequencies() { - try { - AltosHashSet[] sets = new AltosHashSet[common_frequencies.length]; - for (int i = 0; i < sets.length; i++) - sets[i] = common_frequencies[i].hashSet(); - backend.putString(frequenciesPreference, AltosHashSet.toString(sets)); - } catch (IOException ie) { - } + AltosHashSet[] sets = new AltosHashSet[common_frequencies.length]; + for (int i = 0; i < sets.length; i++) + sets[i] = common_frequencies[i].hashSet(); + backend.putString(frequenciesPreference, AltosHashSet.toString(sets)); flush_preferences(); } @@ -374,7 +373,7 @@ public class AltosPreferences { public static void set_state(AltosState state) { synchronized(backend) { - backend.putSerializable(String.format(statePreferenceFormat, state.serial), state); + backend.putHashSet(String.format(statePreferenceFormat, state.serial), state.hashSet()); backend.putInt(statePreferenceLatest, state.serial); flush_preferences(); } @@ -399,6 +398,7 @@ public class AltosPreferences { public static void remove_state(int serial) { synchronized(backend) { backend.remove(String.format(statePreferenceFormat, serial)); + flush_preferences(); } } @@ -413,7 +413,7 @@ public class AltosPreferences { public static AltosState state(int serial) { synchronized(backend) { try { - return (AltosState) backend.getSerializable(String.format(statePreferenceFormat, serial), null); + return AltosState.fromHashSet(backend.getHashSet(String.format(statePreferenceFormat, serial))); } catch (Exception e) { return null; } diff --git a/altoslib/AltosPreferencesBackend.java b/altoslib/AltosPreferencesBackend.java index 1f925914..9131ad39 100644 --- a/altoslib/AltosPreferencesBackend.java +++ b/altoslib/AltosPreferencesBackend.java @@ -38,40 +38,16 @@ public abstract class AltosPreferencesBackend { public abstract byte[] getBytes(String key, byte[] def); public abstract void putBytes(String key, byte[] value); - public Serializable getSerializable(String key, Serializable def) { - byte[] bytes = null; - - bytes = getBytes(key, null); - if (bytes == null) - return def; - - ByteArrayInputStream bais = new ByteArrayInputStream(bytes); - - try { - ObjectInputStream ois = new ObjectInputStream(bais); - Serializable object = (Serializable) ois.readObject(); - return object; - } catch (IOException ie) { - debug("IO exception %s\n", ie.toString()); - } catch (ClassNotFoundException ce) { - debug("ClassNotFoundException %s\n", ce.toString()); - } - return def; - } - - public void putSerializable(String key, Serializable object) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); + public AltosHashSet getHashSet(String key) { + String value = getString(key, null); - try { - ObjectOutputStream oos = new ObjectOutputStream(baos); - - oos.writeObject(object); - byte[] bytes = baos.toByteArray(); + if (value == null) + return null; + return AltosHashSet.fromString(value); + } - putBytes(key, bytes); - } catch (IOException ie) { - debug("set_state failed %s\n", ie.toString()); - } + public void putHashSet(String key, AltosHashSet h) { + putString(key, h.toString()); } public abstract boolean nodeExists(String key); diff --git a/altoslib/AltosPyro.java b/altoslib/AltosPyro.java index a1a903fd..c948ce21 100644 --- a/altoslib/AltosPyro.java +++ b/altoslib/AltosPyro.java @@ -277,7 +277,7 @@ public class AltosPyro { int value = 0; ++i; try { - value = AltosLib.fromdec(tokens[i]); + value = (int) AltosLib.fromdec(tokens[i]); } catch (NumberFormatException n) { throw new ParseException(String.format("Invalid pyro value \"%s\"", tokens[i]), i); diff --git a/altoslib/AltosQuaternion.java b/altoslib/AltosQuaternion.java index 351685f8..af9eb475 100644 --- a/altoslib/AltosQuaternion.java +++ b/altoslib/AltosQuaternion.java @@ -17,7 +17,7 @@ package org.altusmetrum.altoslib_11; -public class AltosQuaternion { +public class AltosQuaternion implements AltosHashable { double r; /* real bit */ double x, y, z; /* imaginary bits */ @@ -147,4 +147,24 @@ public class AltosQuaternion { c_x * s_y * c_z + s_x * c_y * s_z, c_x * c_y * s_z - s_x * s_y * c_z); } + + public AltosHashSet hashSet() { + AltosHashSet h = new AltosHashSet(); + + h.putDouble("r", r); + h.putDouble("x", x); + h.putDouble("y", y); + h.putDouble("z", z); + return h; + } + + public AltosQuaternion(AltosHashSet h) { + if (h == null) + return; + + r = h.getDouble("r", 1); + x = h.getDouble("x", 0); + y = h.getDouble("y", 0); + z = h.getDouble("z", 0); + } } diff --git a/altoslib/AltosRotation.java b/altoslib/AltosRotation.java index 411ecbdf..e9c447ad 100644 --- a/altoslib/AltosRotation.java +++ b/altoslib/AltosRotation.java @@ -17,7 +17,7 @@ package org.altusmetrum.altoslib_11; -public class AltosRotation { +public class AltosRotation implements AltosHashable { private AltosQuaternion rotation; public double tilt() { @@ -47,4 +47,22 @@ public class AltosRotation { AltosQuaternion up = new AltosQuaternion(0, 0, 0, sky); rotation = up.vectors_to_rotation(orient); } + + public AltosHashSet hashSet() { + AltosHashSet h = new AltosHashSet(); + + h.putHashable("rotation", rotation); + return h; + } + + public AltosRotation(AltosHashSet h) { + rotation = new AltosQuaternion(h.getHash("rotation")); + } + + public static AltosRotation fromHashSet(AltosHashSet h, AltosRotation def) { + if (h == null) + return def; + + return new AltosRotation(h); + } } diff --git a/altoslib/AltosSavedState.java b/altoslib/AltosSavedState.java index a7954043..f1d3e993 100644 --- a/altoslib/AltosSavedState.java +++ b/altoslib/AltosSavedState.java @@ -19,7 +19,7 @@ package org.altusmetrum.altoslib_11; import java.io.*; -public class AltosSavedState implements Serializable { +public class AltosSavedState { public AltosState state; public AltosListenerState listener_state; diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index ca28a16d..0970a88e 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -23,7 +23,7 @@ package org.altusmetrum.altoslib_11; import java.io.*; -public class AltosState implements Cloneable, Serializable { +public class AltosState implements Cloneable, AltosHashable { public static final int set_position = 1; public static final int set_gps = 2; @@ -46,7 +46,7 @@ public class AltosState implements Cloneable, Serializable { private int prev_tick; public int boost_tick; - class AltosValue implements Serializable{ + class AltosValue implements AltosHashable { double value; double prev_value; private double max_value; @@ -177,19 +177,56 @@ public class AltosState implements Cloneable, Serializable { prev_set_time = set_time; } + public AltosHashSet hashSet() { + AltosHashSet h = new AltosHashSet(); + + h.putDouble("value", value); + h.putDouble("prev_value", prev_value); + h.putDouble("max_value", max_value); + h.putDouble("set_time", set_time); + h.putDouble("prev_set_time", prev_set_time); + return h; + } + + AltosValue(AltosHashSet h) { + this(); + if (h != null) { + value = h.getDouble("value", value); + prev_value = h.getDouble("prev_value", prev_value); + max_value = h.getDouble("max_value", max_value); + set_time = h.getDouble("set_time", 0); + prev_set_time = h.getDouble("prev_set_time", 0); + } + } + AltosValue() { value = AltosLib.MISSING; prev_value = AltosLib.MISSING; max_value = AltosLib.MISSING; } + + } + + AltosValue AltosValue_fromHashSet(AltosHashSet h, AltosValue def) { + if (h == null) + return def; + return new AltosValue(h); } - class AltosCValue implements Serializable { + class AltosCValue implements AltosHashable { - class AltosIValue extends AltosValue implements Serializable { + class AltosIValue extends AltosValue implements AltosHashable { boolean can_max() { return c_can_max(); } + + AltosIValue() { + super(); + } + + AltosIValue(AltosHashSet h) { + super(h); + } }; public AltosIValue measured; @@ -282,6 +319,26 @@ public class AltosState implements Cloneable, Serializable { measured = new AltosIValue(); computed = new AltosIValue(); } + + + public AltosHashSet hashSet() { + AltosHashSet h = new AltosHashSet(); + + h.putHashable("measured", measured); + h.putHashable("computed", computed); + return h; + } + + AltosCValue(AltosHashSet h) { + measured = new AltosIValue(h.getHash("measured")); + computed = new AltosIValue(h.getHash("computed")); + } + } + + AltosCValue AltosCValue_fromHashSet(AltosHashSet h, AltosCValue def) { + if (h == null) + return def; + return new AltosCValue(h); } private int state; @@ -317,7 +374,7 @@ public class AltosState implements Cloneable, Serializable { ground_altitude.set_measured(a, time); } - class AltosGpsGroundAltitude extends AltosValue implements Serializable { + class AltosGpsGroundAltitude extends AltosValue { void set(double a, double t) { super.set(a, t); pad_alt = value(); @@ -329,6 +386,19 @@ public class AltosState implements Cloneable, Serializable { pad_alt = value(); gps_altitude.set_gps_height(); } + + AltosGpsGroundAltitude() { + super(); + } + + AltosGpsGroundAltitude (AltosHashSet h) { + super(h); + } + } + + AltosGpsGroundAltitude AltosGpsGroundAltitude_fromHashSet(AltosHashSet h, AltosGpsGroundAltitude def) { + if (h == null) return def; + return new AltosGpsGroundAltitude(h); } private AltosGpsGroundAltitude gps_ground_altitude; @@ -341,7 +411,7 @@ public class AltosState implements Cloneable, Serializable { gps_ground_altitude.set(a, time); } - class AltosGroundPressure extends AltosCValue implements Serializable { + class AltosGroundPressure extends AltosCValue { void set_filtered(double p, double time) { computed.set_filtered(p, time); if (!is_measured()) @@ -352,6 +422,19 @@ public class AltosState implements Cloneable, Serializable { super.set_measured(p, time); ground_altitude.set_computed(pressure_to_altitude(p), time); } + + AltosGroundPressure () { + super(); + } + + AltosGroundPressure (AltosHashSet h) { + super(h); + } + } + + AltosGroundPressure AltosGroundPressure_fromHashSet(AltosHashSet h, AltosGroundPressure def) { + if (h == null) return def; + return new AltosGroundPressure(h); } private AltosGroundPressure ground_pressure; @@ -364,7 +447,7 @@ public class AltosState implements Cloneable, Serializable { ground_pressure.set_measured(pressure, time); } - class AltosAltitude extends AltosCValue implements Serializable { + class AltosAltitude extends AltosCValue implements AltosHashable { private void set_speed(AltosValue v) { if (!acceleration.is_measured() || !ascent) @@ -382,11 +465,24 @@ public class AltosState implements Cloneable, Serializable { set_speed(measured); set |= set_position; } + + AltosAltitude() { + super(); + } + + AltosAltitude (AltosHashSet h) { + super(h); + } + } + + AltosAltitude AltosAltitude_fromHashSet(AltosHashSet h, AltosAltitude def) { + if (h == null) return def; + return new AltosAltitude(h); } private AltosAltitude altitude; - class AltosGpsAltitude extends AltosValue implements Serializable { + class AltosGpsAltitude extends AltosValue implements AltosHashable { private void set_gps_height() { double a = value(); @@ -402,6 +498,19 @@ public class AltosState implements Cloneable, Serializable { super.set(a, t); set_gps_height(); } + + AltosGpsAltitude() { + super(); + } + + AltosGpsAltitude (AltosHashSet h) { + super(h); + } + } + + AltosGpsAltitude AltosGpsAltitude_fromHashSet(AltosHashSet h, AltosGpsAltitude def) { + if (h == null) return def; + return new AltosGpsAltitude(h); } private AltosGpsAltitude gps_altitude; @@ -469,7 +578,7 @@ public class AltosState implements Cloneable, Serializable { return gps_speed.max(); } - class AltosPressure extends AltosValue implements Serializable { + class AltosPressure extends AltosValue { void set(double p, double time) { super.set(p, time); if (state == AltosLib.ao_flight_pad) @@ -477,6 +586,19 @@ public class AltosState implements Cloneable, Serializable { double a = pressure_to_altitude(p); altitude.set_computed(a, time); } + + AltosPressure() { + super(); + } + + AltosPressure (AltosHashSet h) { + super(h); + } + } + + AltosPressure AltosPressure_fromHashSet(AltosHashSet h, AltosPressure def) { + if (h == null) return def; + return new AltosPressure(h); } private AltosPressure pressure; @@ -539,7 +661,7 @@ public class AltosState implements Cloneable, Serializable { return AltosLib.MISSING; } - class AltosSpeed extends AltosCValue implements Serializable { + class AltosSpeed extends AltosCValue implements AltosHashable { boolean can_max() { return state < AltosLib.ao_flight_fast || state == AltosLib.ao_flight_stateless; @@ -563,6 +685,19 @@ public class AltosState implements Cloneable, Serializable { super.set_measured(new_value, time); set_accel(); } + + AltosSpeed() { + super(); + } + + AltosSpeed (AltosHashSet h) { + super(h); + } + } + + AltosSpeed AltosSpeed_fromHashSet(AltosHashSet h, AltosSpeed def) { + if (h == null) return def; + return new AltosSpeed(h); } private AltosSpeed speed; @@ -593,7 +728,7 @@ public class AltosState implements Cloneable, Serializable { return AltosLib.MISSING; } - class AltosAccel extends AltosCValue implements Serializable { + class AltosAccel extends AltosCValue implements AltosHashable { boolean can_max() { return state < AltosLib.ao_flight_fast || state == AltosLib.ao_flight_stateless; @@ -604,6 +739,19 @@ public class AltosState implements Cloneable, Serializable { if (ascent) speed.set_integral(this.measured); } + + AltosAccel() { + super(); + } + + AltosAccel (AltosHashSet h) { + super(h); + } + } + + AltosAccel AltosAccel_fromHashSet(AltosHashSet h, AltosAccel def) { + if (h == null) return def; + return new AltosAccel(h); } AltosAccel acceleration; @@ -1483,10 +1631,238 @@ public class AltosState implements Cloneable, Serializable { public AltosState clone() { AltosState s = new AltosState(); s.copy(this); + + AltosHashSet hash = hashSet(); + String onetrip = hash.toString(); + AltosHashSet back = AltosHashSet.fromString(onetrip); + AltosState tripstate = AltosState.fromHashSet(back); + AltosHashSet triphash = tripstate.hashSet(); + String twotrip = triphash.toString(); + + if (!onetrip.equals(twotrip)) { + System.out.printf("%s\n%s\n", onetrip, twotrip); + System.exit(1); + } return s; } public AltosState () { init(); } + + public AltosHashSet hashSet() { + AltosHashSet h = new AltosHashSet(); + + h.putBoolean("valid", true); + h.putInt("set", set); + h.putLong("received_time", received_time); + h.putDouble("time", time); + h.putDouble("prev_time", prev_time); + h.putDouble("time_change", time_change); + h.putInt("tick", tick); + h.putInt("prev_tick", prev_tick); + h.putInt("boost_tick", boost_tick); + h.putInt("state", state); + h.putInt("flight", flight); + h.putInt("serial", serial); + h.putInt("altitude_32", altitude_32); + h.putInt("receiver_serial", receiver_serial); + h.putBoolean("landed", landed); + h.putBoolean("ascent", ascent); + h.putBoolean("boost", boost); + h.putInt("rssi", rssi); + h.putInt("status", status); + h.putInt("device_type", device_type); + h.putInt("config_major", config_major); + h.putInt("config_minor", config_minor); + h.putInt("apogee_delay", apogee_delay); + h.putInt("main_deploy", main_deploy); + h.putInt("flight_log_max", flight_log_max); + h.putHashable("ground_altitude", ground_altitude); + h.putHashable("gps_ground_altitude", gps_ground_altitude); + h.putHashable("ground_pressure", ground_pressure); + h.putHashable("altitude", altitude); + h.putHashable("gps_altitude", gps_altitude); + h.putHashable("gps_ground_speed", gps_ground_speed); + h.putHashable("gps_ascent_rate", gps_ascent_rate); + h.putHashable("gps_course", gps_course); + h.putHashable("gps_speed", gps_speed); + h.putHashable("pressure", pressure); + h.putHashable("speed", speed); + h.putHashable("acceleration", acceleration); + h.putHashable("orient", orient); + h.putHashable("kalman_height", kalman_height); + h.putHashable("kalman_speed", kalman_speed); + h.putHashable("kalman_acceleration", kalman_acceleration); + + h.putDouble("battery_voltage",battery_voltage); + h.putDouble("pyro_voltage",pyro_voltage); + h.putDouble("temperature",temperature); + h.putDouble("apogee_voltage",apogee_voltage); + h.putDouble("main_voltage",main_voltage); + h.putDoubleArray("ignitor_voltage",ignitor_voltage); + h.putHashable("gps", gps); + h.putHashable("temp_gps", temp_gps); + h.putInt("temp_gps_sat_tick", temp_gps_sat_tick); + h.putBoolean("gps_pending", gps_pending); + h.putInt("gps_sequence", gps_sequence); + h.putHashable("imu", imu); + h.putHashable("mag", mag); + + h.putInt("npad", npad); + h.putInt("gps_waiting", gps_waiting); + h.putBoolean("gps_ready", gps_ready); + h.putInt("ngps", ngps); + h.putHashable("from_pad", from_pad); + h.putDouble("elevation", elevation); + h.putDouble("range", range); + h.putDouble("gps_height", gps_height); + h.putDouble("pad_lat", pad_lat); + h.putDouble("pad_lon", pad_lon); + h.putDouble("pad_alt", pad_alt); + h.putInt("speak_tick", speak_tick); + h.putDouble("speak_altitude", speak_altitude); + h.putString("callsign", callsign); + h.putString("firmware_version", firmware_version); + h.putDouble("accel_plus_g", accel_plus_g); + h.putDouble("accel_minus_g", accel_minus_g); + h.putDouble("accel", accel); + h.putDouble("ground_accel", ground_accel); + h.putDouble("ground_accel_avg", ground_accel_avg); + h.putInt("log_format", log_format); + h.putString("product", product); + h.putHashable("baro", baro); + h.putHashable("companion", companion); + h.putInt("pyro_fired", pyro_fired); + h.putDouble("accel_zero_along", accel_zero_along); + h.putDouble("accel_zero_across", accel_zero_across); + h.putDouble("accel_zero_through", accel_zero_through); + + h.putHashable("rotation", rotation); + h.putHashable("ground_rotation", ground_rotation); + + h.putInt("pad_orientation", pad_orientation); + + h.putDouble("accel_ground_along", accel_ground_along); + h.putDouble("accel_ground_across", accel_ground_across); + h.putDouble("accel_ground_through", accel_ground_through); + + h.putDouble("gyro_zero_roll", gyro_zero_roll); + h.putDouble("gyro_zero_pitch", gyro_zero_pitch); + h.putDouble("gyro_zero_yaw", gyro_zero_yaw); + + h.putDouble("last_imu_time", last_imu_time); + return h; + } + + public AltosState(AltosHashSet h) { + this(); + + set = h.getInt("set", set); + received_time = h.getLong("received_time", received_time); + time = h.getDouble("time", time); + prev_time = h.getDouble("prev_time", prev_time); + time_change = h.getDouble("time_change", time_change); + tick = h.getInt("tick", tick); + prev_tick = h.getInt("prev_tick", prev_tick); + boost_tick = h.getInt("boost_tick", boost_tick); + state = h.getInt("state", state); + flight = h.getInt("flight", flight); + serial = h.getInt("serial", serial); + altitude_32 = h.getInt("altitude_32", altitude_32); + receiver_serial = h.getInt("receiver_serial", receiver_serial); + landed = h.getBoolean("landed", landed); + ascent = h.getBoolean("ascent", ascent); + boost = h.getBoolean("boost", boost); + rssi = h.getInt("rssi", rssi); + status = h.getInt("status", status); + device_type = h.getInt("device_type", device_type); + config_major = h.getInt("config_major", config_major); + config_minor = h.getInt("config_minor", config_minor); + apogee_delay = h.getInt("apogee_delay", apogee_delay); + main_deploy = h.getInt("main_deploy", main_deploy); + flight_log_max = h.getInt("flight_log_max", flight_log_max); + ground_altitude = AltosCValue_fromHashSet(h.getHash("ground_altitude"), ground_altitude); + gps_ground_altitude = AltosGpsGroundAltitude_fromHashSet(h.getHash("gps_ground_altitude"), gps_ground_altitude); + ground_pressure = AltosGroundPressure_fromHashSet(h.getHash("ground_pressure"), ground_pressure); + altitude = AltosAltitude_fromHashSet(h.getHash("altitude"), altitude); + gps_altitude = AltosGpsAltitude_fromHashSet(h.getHash("gps_altitude"), gps_altitude); + gps_ground_speed = AltosValue_fromHashSet(h.getHash("gps_ground_speed"), gps_ground_speed); + gps_ascent_rate = AltosValue_fromHashSet(h.getHash("gps_ascent_rate"), gps_ascent_rate); + gps_course = AltosValue_fromHashSet(h.getHash("gps_course"), gps_course); + gps_speed = AltosValue_fromHashSet(h.getHash("gps_speed"), gps_speed); + pressure = AltosPressure_fromHashSet(h.getHash("pressure"), pressure); + speed = AltosSpeed_fromHashSet(h.getHash("speed"), speed); + acceleration = AltosAccel_fromHashSet(h.getHash("acceleration"), acceleration); + orient = AltosCValue_fromHashSet(h.getHash("orient"), orient); + kalman_height = AltosValue_fromHashSet(h.getHash("kalman_height"), kalman_height); + kalman_speed = AltosValue_fromHashSet(h.getHash("kalman_speed"), kalman_speed); + kalman_acceleration = AltosValue_fromHashSet(h.getHash("kalman_acceleration"), kalman_acceleration); + + battery_voltage = h.getDouble("battery_voltage", battery_voltage); + pyro_voltage = h.getDouble("pyro_voltage", pyro_voltage); + temperature = h.getDouble("temperature", temperature); + apogee_voltage = h.getDouble("apogee_voltage", apogee_voltage); + main_voltage= h.getDouble("main_voltage", main_voltage); + ignitor_voltage = h.getDoubleArray("ignitor_voltage", ignitor_voltage); + gps = AltosGPS.fromHashSet(h.getHash("gps"), gps); + temp_gps = AltosGPS.fromHashSet(h.getHash("temp_gps"), temp_gps); + temp_gps_sat_tick = h.getInt("temp_gps_sat_tick", temp_gps_sat_tick); + gps_pending = h.getBoolean("gps_pending", gps_pending); + gps_sequence = h.getInt("gps_sequence", gps_sequence); + imu = AltosIMU.fromHashSet(h.getHash("imu"), imu); + mag = AltosMag.fromHashSet(h.getHash("mag"), mag); + + npad = h.getInt("npad", npad); + gps_waiting = h.getInt("gps_waiting", gps_waiting); + gps_ready = h.getBoolean("gps_ready", gps_ready); + ngps = h.getInt("ngps", ngps); + from_pad = AltosGreatCircle.fromHashSet(h.getHash("from_pad"), from_pad); + elevation = h.getDouble("elevation", elevation); + range = h.getDouble("range", range); + gps_height = h.getDouble("gps_height", gps_height); + pad_lat = h.getDouble("pad_lat", pad_lat); + pad_lon = h.getDouble("pad_lon", pad_lon); + pad_alt = h.getDouble("pad_alt", pad_alt); + speak_tick = h.getInt("speak_tick", speak_tick); + speak_altitude = h.getDouble("speak_altitude", speak_altitude); + callsign = h.getString("callsign", callsign); + firmware_version = h.getString("firmware_version", firmware_version); + accel_plus_g = h.getDouble("accel_plus_g", accel_plus_g); + accel_minus_g = h.getDouble("accel_minus_g", accel_minus_g); + accel = h.getDouble("accel", accel); + ground_accel = h.getDouble("ground_accel", ground_accel); + ground_accel_avg = h.getDouble("ground_accel_avg", ground_accel_avg); + log_format = h.getInt("log_format", log_format); + product = h.getString("product", product); + baro = AltosMs5607.fromHashSet(h.getHash("baro"), baro); + companion = AltosCompanion.fromHashSet(h.getHash("companion"), companion); + pyro_fired = h.getInt("pyro_fired", pyro_fired); + accel_zero_along = h.getDouble("accel_zero_along", accel_zero_along); + accel_zero_across = h.getDouble("accel_zero_across", accel_zero_across); + accel_zero_through = h.getDouble("accel_zero_through", accel_zero_through); + + rotation = AltosRotation.fromHashSet(h.getHash("rotation"), rotation); + ground_rotation = AltosRotation.fromHashSet(h.getHash("ground_rotation"), ground_rotation); + + pad_orientation = h.getInt("pad_orientation", pad_orientation); + + accel_ground_along = h.getDouble("accel_ground_along", accel_ground_along); + accel_ground_across = h.getDouble("accel_ground_across", accel_ground_across); + accel_ground_through = h.getDouble("accel_ground_through", accel_ground_through); + + gyro_zero_roll = h.getDouble("gyro_zero_roll", gyro_zero_roll); + gyro_zero_pitch = h.getDouble("gyro_zero_pitch", gyro_zero_pitch); + gyro_zero_yaw = h.getDouble("gyro_zero_yaw", gyro_zero_yaw); + + last_imu_time = h.getDouble("last_imu_time", last_imu_time); + } + + public static AltosState fromHashSet(AltosHashSet h) { + if (h == null) + return null; + if (!h.getBoolean("valid", false)) + return null; + return new AltosState(h); + } } diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am index 512e1cca..edc443b0 100644 --- a/altoslib/Makefile.am +++ b/altoslib/Makefile.am @@ -161,6 +161,7 @@ altoslib_JAVA = \ AltosMapLoader.java \ AltosMapTypeListener.java \ AltosHashSet.java \ + AltosHashable.java \ AltosVersion.java JAR=altoslib_$(ALTOSLIB_VERSION).jar diff --git a/altosui/AltosLaunch.java b/altosui/AltosLaunch.java index 46a29d45..fb2cd883 100644 --- a/altosui/AltosLaunch.java +++ b/altosui/AltosLaunch.java @@ -91,7 +91,7 @@ public class AltosLaunch { throw new TimeoutException(); if (get_string(line, "Rssi: ", status_name)) { try { - rssi = Altos.fromdec(status_name.get()); + rssi = (int) Altos.fromdec(status_name.get()); } catch (NumberFormatException ne) { } break; @@ -194,4 +194,4 @@ public class AltosLaunch { device = in_device; serial = new AltosSerial(device); } -} \ No newline at end of file +} -- cgit v1.2.3 From 29123a60272777916e5aae08369d0f03c2f135b6 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 15 May 2016 13:53:38 -0700 Subject: altoslib: Allow empty values in AltosHashSet representation Check for value termination before appending the first character. Signed-off-by: Keith Packard --- altoslib/AltosHashSet.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/altoslib/AltosHashSet.java b/altoslib/AltosHashSet.java index 4b89f8cc..77bd48c2 100644 --- a/altoslib/AltosHashSet.java +++ b/altoslib/AltosHashSet.java @@ -35,12 +35,12 @@ public class AltosHashSet extends Hashtable { ArrayList chars = new ArrayList(); for (;;) { - chars.add(c); - c = get(reader); if (c == -1 || c == ';') break; if (c == '\\') c = get(reader); + chars.add(c); + c = get(reader); } int[] ch = new int[chars.size()]; for (int i = 0; i < ch.length; i++) -- cgit v1.2.3 From f484216e72f81decb2aaa7289d6f69678990b7af Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 15 May 2016 13:55:12 -0700 Subject: altoslib: Set version and log space from AltosIdleFetch Just more data for monitor idle mode Signed-off-by: Keith Packard --- altoslib/AltosIdleFetch.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/altoslib/AltosIdleFetch.java b/altoslib/AltosIdleFetch.java index 5677916c..5102c16b 100644 --- a/altoslib/AltosIdleFetch.java +++ b/altoslib/AltosIdleFetch.java @@ -134,9 +134,6 @@ public class AltosIdleFetch implements AltosStateUpdate { AltosLink link; - double frequency; - String callsign; - public void update_state(AltosState state) throws InterruptedException, AltosUnknownProduct { try { boolean matched = false; @@ -148,6 +145,8 @@ public class AltosIdleFetch implements AltosStateUpdate { state.set_ground_accel(config_data.accel_cal_plus); state.set_accel_g(config_data.accel_cal_plus, config_data.accel_cal_minus); state.set_product(config_data.product); + state.set_firmware_version(config_data.version); + state.set_log_space(config_data.log_space); for (AltosIdler idler : idlers) { if (idler.matches(config_data)) { idler.update_state(state, link, config_data); -- cgit v1.2.3 From 3c4278a29082a2af5911e22e59f8f52549f549e3 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 15 May 2016 13:56:21 -0700 Subject: altoslib: Add log_space to AltosState TeleGPS doesn't have flight_log_max value, but does have log_space which we can use for the same thing in monitor idle mode. Signed-off-by: Keith Packard --- altoslib/AltosState.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index 0970a88e..d359d67a 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -832,6 +832,7 @@ public class AltosState implements Cloneable, AltosHashable { public double ground_accel_avg; public int log_format; + public int log_space; public String product; public AltosMs5607 baro; @@ -949,6 +950,7 @@ public class AltosState implements Cloneable, AltosHashable { ground_accel_avg = AltosLib.MISSING; log_format = AltosLib.MISSING; + log_space = AltosLib.MISSING; product = null; serial = AltosLib.MISSING; receiver_serial = AltosLib.MISSING; @@ -1108,6 +1110,7 @@ public class AltosState implements Cloneable, AltosHashable { ground_accel_avg = old.ground_accel_avg; log_format = old.log_format; + log_space = old.log_space; product = old.product; serial = old.serial; receiver_serial = old.receiver_serial; @@ -1226,6 +1229,10 @@ public class AltosState implements Cloneable, AltosHashable { } } + public void set_log_space(int log_space) { + this.log_space = log_space; + } + public void set_flight_params(int apogee_delay, int main_deploy) { this.apogee_delay = apogee_delay; this.main_deploy = main_deploy; @@ -1730,6 +1737,7 @@ public class AltosState implements Cloneable, AltosHashable { h.putDouble("ground_accel", ground_accel); h.putDouble("ground_accel_avg", ground_accel_avg); h.putInt("log_format", log_format); + h.putInt("log_space", log_space); h.putString("product", product); h.putHashable("baro", baro); h.putHashable("companion", companion); @@ -1834,6 +1842,7 @@ public class AltosState implements Cloneable, AltosHashable { ground_accel = h.getDouble("ground_accel", ground_accel); ground_accel_avg = h.getDouble("ground_accel_avg", ground_accel_avg); log_format = h.getInt("log_format", log_format); + log_space = h.getInt("log_space", log_space); product = h.getString("product", product); baro = AltosMs5607.fromHashSet(h.getHash("baro"), baro); companion = AltosCompanion.fromHashSet(h.getHash("companion"), companion); -- cgit v1.2.3 From 9287122edc0e2dec6b2542f4cc8cb9cf2900bb33 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 15 May 2016 13:57:28 -0700 Subject: altoslib: Add AltosIdleReader This provides an AltosFlightReader interface for monitor idle mode, making that easier to provide in TeleGPS Signed-off-by: Keith Packard --- altoslib/AltosIdleReader.java | 121 ++++++++++++++++++++++++++++++++++++++++++ altoslib/Makefile.am | 1 + 2 files changed, 122 insertions(+) create mode 100644 altoslib/AltosIdleReader.java diff --git a/altoslib/AltosIdleReader.java b/altoslib/AltosIdleReader.java new file mode 100644 index 00000000..795593f7 --- /dev/null +++ b/altoslib/AltosIdleReader.java @@ -0,0 +1,121 @@ +/* + * Copyright © 2016 Keith Packard + * + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.altoslib_11; + +import java.text.*; +import java.io.*; +import java.util.concurrent.*; + +public class AltosIdleReader extends AltosFlightReader { + AltosLink link; + boolean remote; + AltosState state = null; + AltosIdleFetch fetch; + long next_millis; + static final long report_interval = 5 * 1000; + static final long minimum_delay = 1 * 1000; + + private void start_link() throws InterruptedException, TimeoutException { + if (remote) { + link.start_remote(); + } else + link.flush_input(); + } + + private boolean stop_link() throws InterruptedException, TimeoutException { + if (remote) + link.stop_remote(); + return link.reply_abort; + } + + public AltosState read() throws InterruptedException, ParseException, AltosCRCException, IOException { + boolean worked = false; + boolean aborted = false; + + if (state == null) + state = new AltosState(); + else + state = state.clone(); + + long delay = next_millis - System.currentTimeMillis(); + + if (delay > 0) + Thread.sleep(delay); + next_millis = System.currentTimeMillis() + report_interval; + try { + try { + start_link(); + fetch.update_state(state); + if (!link.has_error && !link.reply_abort) + worked = true; + } catch (TimeoutException te) { + } catch (AltosUnknownProduct ue) { + worked = true; + } + } finally { + try { + aborted = stop_link(); + } catch (TimeoutException te) { + aborted = true; + } + if (worked) { + if (remote) { + try { + state.set_rssi(link.rssi(), 0); + } catch (TimeoutException te) { + state.set_rssi(0, 0); + } + } + } + } + + long finish = System.currentTimeMillis(); + + if (next_millis - finish < minimum_delay) + next_millis = finish + minimum_delay; + + return state; + } + + public void close(boolean interrupted) { + try { + link.close(); + } catch (InterruptedException ie) { + } + } + + public void set_frequency(double frequency) throws InterruptedException, TimeoutException { + link.set_radio_frequency(frequency); + } + + public void save_frequency() { + AltosPreferences.set_frequency(link.serial, link.frequency); + } + + public void set_callsign(String callsign) throws InterruptedException, TimeoutException { + link.set_callsign(callsign); + } + + public AltosIdleReader (AltosLink link, boolean remote) + throws IOException, InterruptedException, TimeoutException { + this.link = link; + this.remote = remote; + this.next_millis = System.currentTimeMillis(); + fetch = new AltosIdleFetch(link); + } +} diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am index edc443b0..d4554df3 100644 --- a/altoslib/Makefile.am +++ b/altoslib/Makefile.am @@ -64,6 +64,7 @@ altoslib_JAVA = \ AltosIdleFetch.java \ AltosIdleMonitor.java \ AltosIdleMonitorListener.java \ + AltosIdleReader.java \ AltosIgnite.java \ AltosIMU.java \ AltosKML.java \ -- cgit v1.2.3 From df276262900551a5eecd94903eefe9a264b161ec Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 15 May 2016 13:58:41 -0700 Subject: telegps: Use log_space when flight_log_max is missing TeleGPS has this, but not flight_log_max Signed-off-by: Keith Packard --- telegps/TeleGPSState.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/telegps/TeleGPSState.java b/telegps/TeleGPSState.java index a0ff5727..e01ef47e 100644 --- a/telegps/TeleGPSState.java +++ b/telegps/TeleGPSState.java @@ -136,10 +136,13 @@ public class TeleGPSState extends AltosUIFlightTab { class FlightLogMax extends AltosUIIndicator { public void show(AltosState state, AltosListenerState listener_state) { - if (state.flight_log_max == AltosLib.MISSING) + int storage = state.flight_log_max; + if (storage == AltosLib.MISSING) + storage = state.log_space >> 10; + if (storage == AltosLib.MISSING) show("Missing"); else - show(String.format("%dkB", state.flight_log_max)); + show(String.format("%dkB", storage)); } public FlightLogMax(Container container, int y) { -- cgit v1.2.3 From 1ea855f95772a8a394407e0070be1ed9cc0f6650 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 15 May 2016 13:59:12 -0700 Subject: telegps: Add monitor idle mode This monitors directly connected devices. No support for doing monitor idle using packet mode, as TeleGPS doesn't support that. Signed-off-by: Keith Packard --- telegps/TeleGPS.java | 69 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 58 insertions(+), 11 deletions(-) diff --git a/telegps/TeleGPS.java b/telegps/TeleGPS.java index c97ef5e4..d347fe41 100644 --- a/telegps/TeleGPS.java +++ b/telegps/TeleGPS.java @@ -53,6 +53,7 @@ public class TeleGPS AltosFlightReader reader; TeleGPSDisplayThread thread; + boolean idle_mode; JMenuBar menu_bar; @@ -186,12 +187,43 @@ public class TeleGPS disable_rate_menu(); } - void connect(AltosDevice device) { - if (reader != null) - disconnect(); + void connect_flight(AltosDevice device) { try { AltosFlightReader reader = new AltosTelemetryReader(new AltosSerial(device)); - set_reader(reader, device); + set_reader(reader, device, false); + } catch (FileNotFoundException ee) { + JOptionPane.showMessageDialog(this, + ee.getMessage(), + String.format ("Cannot open %s", device.toShortString()), + JOptionPane.ERROR_MESSAGE); + } catch (AltosSerialInUseException si) { + JOptionPane.showMessageDialog(this, + String.format("Device \"%s\" already in use", + device.toShortString()), + "Device in use", + JOptionPane.ERROR_MESSAGE); + } catch (IOException ee) { + JOptionPane.showMessageDialog(this, + String.format ("Unknown I/O error on %s", device.toShortString()), + "Unknown I/O error", + JOptionPane.ERROR_MESSAGE); + } catch (TimeoutException te) { + JOptionPane.showMessageDialog(this, + String.format ("Timeout on %s", device.toShortString()), + "Timeout error", + JOptionPane.ERROR_MESSAGE); + } catch (InterruptedException ie) { + JOptionPane.showMessageDialog(this, + String.format("Interrupted %s", device.toShortString()), + "Interrupted exception", + JOptionPane.ERROR_MESSAGE); + } + } + + void connect_idle(AltosDevice device) { + try { + AltosFlightReader reader = new AltosIdleReader(new AltosSerial(device), false); + set_reader(reader, device, true); } catch (FileNotFoundException ee) { JOptionPane.showMessageDialog(this, ee.getMessage(), @@ -221,9 +253,18 @@ public class TeleGPS } } + void connect(AltosDevice device) { + if (reader != null) + disconnect(); + if (device.matchProduct(AltosLib.product_basestation)) + connect_flight(device); + else + connect_idle(device); + } + void connect() { AltosDevice device = AltosDeviceUIDialog.show(this, - AltosLib.product_basestation); + AltosLib.product_any); if (device == null) return; connect(device); @@ -397,7 +438,8 @@ public class TeleGPS } - public void set_reader(AltosFlightReader reader, AltosDevice device) { + public void set_reader(AltosFlightReader reader, AltosDevice device, boolean idle_mode) { + this.idle_mode = idle_mode; status_update = new TeleGPSStatusUpdate(telegps_status); telegps_status.start(status_update); @@ -407,8 +449,13 @@ public class TeleGPS thread.start(); if (device != null) { - enable_frequency_menu(device.getSerial(), reader); - enable_rate_menu(device.getSerial(), reader); + if (idle_mode) { + disable_frequency_menu(); + disable_rate_menu(); + } else { + enable_frequency_menu(device.getSerial(), reader); + enable_rate_menu(device.getSerial(), reader); + } } } @@ -554,9 +601,9 @@ public class TeleGPS add_window(); } - public TeleGPS(AltosFlightReader reader) { + public TeleGPS(AltosFlightReader reader, boolean idle_mode) { this(); - set_reader(reader, null); + set_reader(reader, null, idle_mode); } public TeleGPS(AltosDevice device) { @@ -602,7 +649,7 @@ public class TeleGPS if (new_reader == null) return false; - new TeleGPS(new_reader); + new TeleGPS(new_reader, true); return true; } -- cgit v1.2.3 From 7b5521966119fcc290591bf1b397506ef44cedea Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 24 May 2016 23:40:03 -0700 Subject: altoslib: use miles for distances > 1000ft. This makes both the map line and the other distance displays use miles for distances greater than 1000 feet. Signed-off-by: Keith Packard --- altoslib/AltosDistance.java | 2 +- altoslib/AltosMapLine.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/altoslib/AltosDistance.java b/altoslib/AltosDistance.java index d6788fb5..1ade5abb 100644 --- a/altoslib/AltosDistance.java +++ b/altoslib/AltosDistance.java @@ -95,7 +95,7 @@ public class AltosDistance extends AltosUnits { } }; - range_imperial[1] = new AltosUnitsRange(AltosConvert.feet_to_meters(5280), + range_imperial[1] = new AltosUnitsRange(AltosConvert.feet_to_meters(1000), "mi", "miles") { double value(double v) { return AltosConvert.meters_to_miles(v); diff --git a/altoslib/AltosMapLine.java b/altoslib/AltosMapLine.java index ed2c0844..187aa6d9 100644 --- a/altoslib/AltosMapLine.java +++ b/altoslib/AltosMapLine.java @@ -50,7 +50,7 @@ public abstract class AltosMapLine { if (AltosConvert.imperial_units) { distance = AltosConvert.meters_to_feet(distance); - if (distance < 10000) { + if (distance < 1000) { format = "%4.0fft"; } else { distance /= 5280; @@ -64,7 +64,7 @@ public abstract class AltosMapLine { format = "%5.0fmi"; } } else { - if (distance < 10000) { + if (distance < 1000) { format = "%4.0fm"; } else { distance /= 1000; -- cgit v1.2.3 From 59a9bdd73b580a9c934a574be7bf45c5033e14b5 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 24 May 2016 23:40:47 -0700 Subject: altosuilib: Have map preload respond to units and font size changes Just add suitable listeners so that the display updates when preferences change. Signed-off-by: Keith Packard --- altosuilib/AltosUIMapPreloadNew.java | 60 ++++++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 12 deletions(-) diff --git a/altosuilib/AltosUIMapPreloadNew.java b/altosuilib/AltosUIMapPreloadNew.java index b16659da..d043e9e3 100644 --- a/altosuilib/AltosUIMapPreloadNew.java +++ b/altosuilib/AltosUIMapPreloadNew.java @@ -118,7 +118,7 @@ class AltosUIMapPos extends Box { } } -public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener, ItemListener, AltosLaunchSiteListener, AltosMapLoaderListener { +public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener, ItemListener, AltosLaunchSiteListener, AltosMapLoaderListener, AltosUnitsListener, AltosFontListener { AltosUIFrame owner; AltosUIMapNew map; @@ -137,6 +137,7 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener JComboBox min_zoom; JComboBox max_zoom; + JLabel radius_label; JComboBox radius; int scale = 1; @@ -276,6 +277,35 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener }); } + private void set_radius_values() { + radius_label.setText(String.format("Map Radius (%s)", + AltosPreferences.imperial_units() ? "mi" : "km")); + + Double[] radii; + + if (AltosPreferences.imperial_units()) + radii = radius_mi; + else + radii = radius_km; + + radius.removeAllItems(); + for (Double r : radii) { + System.out.printf("adding radius %f\n",r); + radius.addItem(r); + } + radius.setSelectedItem(radii[2]); + radius.setMaximumRowCount(radii.length); + } + + public void units_changed(boolean imperial_units) { + map.units_changed(imperial_units); + set_radius_values(); + } + + public void font_size_changed(int font_size) { + map.font_size_changed(font_size); + } + public AltosUIMapPreloadNew(AltosUIFrame in_owner) { owner = in_owner; @@ -287,6 +317,18 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener pane.setLayout(new GridBagLayout()); + addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + AltosUIPreferences.unregister_font_listener(AltosUIMapPreloadNew.this); + AltosPreferences.unregister_units_listener(AltosUIMapPreloadNew.this); + } + }); + + + AltosPreferences.register_units_listener(this); + AltosUIPreferences.register_font_listener(this); + map = new AltosUIMapNew(); c.fill = GridBagConstraints.BOTH; @@ -462,26 +504,20 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener c.gridy = 3; pane.add(max_zoom, c); - JLabel radius_label = new JLabel(String.format("Map Radius (%s)", - AltosPreferences.imperial_units() ? "miles" : "km")); + radius_label = new JLabel(); + c.gridx = 4; c.gridy = 4; pane.add(radius_label, c); - Double[] radii; - Double radius_default; - - if (AltosPreferences.imperial_units()) - radii = radius_mi; - else - radii = radius_km; - radius = new JComboBox(radii); - radius.setSelectedItem(radii[2]); + radius = new JComboBox(); radius.setEditable(true); c.gridx = 5; c.gridy = 4; pane.add(radius, c); + set_radius_values(); + pack(); setLocationRelativeTo(owner); setVisible(true); -- cgit v1.2.3 From 0d966b74f756e88e5dffa92400b105f540429262 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 24 May 2016 23:44:50 -0700 Subject: altosuilib: Rename AltosUIMap*New.java to AltosUIMap*.java This code isn't really new anymore... Signed-off-by: Keith Packard --- altosui/AltosFlightUI.java | 4 +- altosui/AltosGraphUI.java | 4 +- altosui/AltosIdleMonitorUI.java | 4 +- altosui/AltosUI.java | 2 +- altosuilib/AltosUIMap.java | 536 +++++++++++++++++++++++++++++++++++ altosuilib/AltosUIMapNew.java | 536 ----------------------------------- altosuilib/AltosUIMapPreload.java | 524 ++++++++++++++++++++++++++++++++++ altosuilib/AltosUIMapPreloadNew.java | 525 ---------------------------------- altosuilib/Makefile.am | 4 +- telegps/TeleGPS.java | 6 +- telegps/TeleGPSGraphUI.java | 4 +- 11 files changed, 1074 insertions(+), 1075 deletions(-) create mode 100644 altosuilib/AltosUIMap.java delete mode 100644 altosuilib/AltosUIMapNew.java create mode 100644 altosuilib/AltosUIMapPreload.java delete mode 100644 altosuilib/AltosUIMapPreloadNew.java diff --git a/altosui/AltosFlightUI.java b/altosui/AltosFlightUI.java index 9b4a18bc..63f8c670 100644 --- a/altosui/AltosFlightUI.java +++ b/altosui/AltosFlightUI.java @@ -40,7 +40,7 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay { AltosDescent descent; AltosLanded landed; AltosCompanionInfo companion; - AltosUIMapNew sitemap; + AltosUIMap sitemap; boolean has_map; boolean has_companion; boolean has_state; @@ -289,7 +289,7 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay { has_companion = false; has_state = false; - sitemap = new AltosUIMapNew(); + sitemap = new AltosUIMap(); displays.add(sitemap); has_map = false; diff --git a/altosui/AltosGraphUI.java b/altosui/AltosGraphUI.java index be63c6e6..32b59977 100644 --- a/altosui/AltosGraphUI.java +++ b/altosui/AltosGraphUI.java @@ -35,7 +35,7 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt JTabbedPane pane; AltosGraph graph; AltosUIEnable enable; - AltosUIMapNew map; + AltosUIMap map; AltosState state; AltosGraphDataSet graphDataSet; AltosFlightStats stats; @@ -47,7 +47,7 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt for (AltosState state : states) { if (state.gps != null && state.gps.locked && state.gps.nsat >= 4) { if (map == null) - map = new AltosUIMapNew(); + map = new AltosUIMap(); map.show(state, null); has_gps = true; } diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java index 8d0d807e..1a992946 100644 --- a/altosui/AltosIdleMonitorUI.java +++ b/altosui/AltosIdleMonitorUI.java @@ -35,7 +35,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl AltosFlightStatus flightStatus; AltosIgnitor ignitor; AltosIdleMonitor thread; - AltosUIMapNew sitemap; + AltosUIMap sitemap; int serial; boolean remote; boolean has_ignitor; @@ -275,7 +275,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl ignitor = new AltosIgnitor(); - sitemap = new AltosUIMapNew(); + sitemap = new AltosUIMap(); /* Make the tabbed pane use the rest of the window space */ bag.add(pane, constraints(0, 4, GridBagConstraints.BOTH)); diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java index 88ae8530..5768fd49 100644 --- a/altosui/AltosUI.java +++ b/altosui/AltosUI.java @@ -295,7 +295,7 @@ public class AltosUI extends AltosUIFrame { } void LoadMaps() { - new AltosUIMapPreloadNew(AltosUI.this); + new AltosUIMapPreload(AltosUI.this); } void LaunchController() { diff --git a/altosuilib/AltosUIMap.java b/altosuilib/AltosUIMap.java new file mode 100644 index 00000000..36454054 --- /dev/null +++ b/altosuilib/AltosUIMap.java @@ -0,0 +1,536 @@ +/* + * Copyright © 2010 Anthony Towns + * + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.altosuilib_11; + +import java.awt.*; +import java.awt.event.*; +import java.awt.image.*; +import javax.swing.*; +import java.io.*; +import java.lang.Math; +import java.awt.geom.*; +import java.util.*; +import java.util.concurrent.*; +import javax.imageio.*; +import org.altusmetrum.altoslib_11.*; + +public class AltosUIMap extends JComponent implements AltosFlightDisplay, AltosMapInterface { + + AltosMap map; + Graphics2D g; + Font tile_font; + Font line_font; + + static Point2D.Double point2d(AltosPointDouble pt) { + return new Point2D.Double(pt.x, pt.y); + } + + static final AltosPointDouble point_double(Point pt) { + return new AltosPointDouble(pt.x, pt.y); + } + + class MapMark extends AltosMapMark { + public void paint(AltosMapTransform t) { + AltosPointDouble pt = t.screen(lat_lon); + + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + g.setStroke(new BasicStroke(stroke_width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); + + if (0 <= state && state < AltosUIMap.stateColors.length) + g.setColor(AltosUIMap.stateColors[state]); + else + g.setColor(AltosUIMap.stateColors[AltosLib.ao_flight_invalid]); + + g.drawOval((int)pt.x-5, (int)pt.y-5, 10, 10); + g.drawOval((int)pt.x-20, (int)pt.y-20, 40, 40); + g.drawOval((int)pt.x-35, (int)pt.y-35, 70, 70); + } + + MapMark(double lat, double lon, int state) { + super(lat, lon, state); + } + } + + class MapView extends JComponent implements MouseMotionListener, MouseListener, ComponentListener, MouseWheelListener { + + private VolatileImage create_back_buffer() { + return getGraphicsConfiguration().createCompatibleVolatileImage(getWidth(), getHeight()); + } + + private void do_paint(Graphics my_g) { + g = (Graphics2D) my_g; + + map.paint(); + } + + public void paint(Graphics my_g) { + VolatileImage back_buffer = create_back_buffer(); + + Graphics2D top_g = (Graphics2D) my_g; + + do { + GraphicsConfiguration gc = getGraphicsConfiguration(); + int code = back_buffer.validate(gc); + if (code == VolatileImage.IMAGE_INCOMPATIBLE) + back_buffer = create_back_buffer(); + + Graphics g_back = back_buffer.getGraphics(); + g_back.setClip(top_g.getClip()); + do_paint(g_back); + g_back.dispose(); + + top_g.drawImage(back_buffer, 0, 0, this); + } while (back_buffer.contentsLost()); + back_buffer.flush(); + } + + public void repaint(AltosRectangle damage) { + repaint(damage.x, damage.y, damage.width, damage.height); + } + + private boolean is_drag_event(MouseEvent e) { + return e.getModifiers() == InputEvent.BUTTON1_MASK; + } + + /* MouseMotionListener methods */ + + public void mouseDragged(MouseEvent e) { + map.touch_continue(e.getPoint().x, e.getPoint().y, is_drag_event(e)); + } + + public void mouseMoved(MouseEvent e) { + } + + /* MouseListener methods */ + public void mouseClicked(MouseEvent e) { + } + + public void mouseEntered(MouseEvent e) { + } + + public void mouseExited(MouseEvent e) { + } + + public void mousePressed(MouseEvent e) { + map.touch_start(e.getPoint().x, e.getPoint().y, is_drag_event(e)); + } + + public void mouseReleased(MouseEvent e) { + } + + /* MouseWheelListener methods */ + + public void mouseWheelMoved(MouseWheelEvent e) { + int zoom_change = e.getWheelRotation(); + + map.set_zoom_centre(map.get_zoom() - zoom_change, new AltosPointInt(e.getPoint().x, e.getPoint().y)); + } + + /* ComponentListener methods */ + + public void componentHidden(ComponentEvent e) { + } + + public void componentMoved(ComponentEvent e) { + } + + public void componentResized(ComponentEvent e) { + map.set_transform(); + } + + public void componentShown(ComponentEvent e) { + map.set_transform(); + } + + MapView() { + addComponentListener(this); + addMouseMotionListener(this); + addMouseListener(this); + addMouseWheelListener(this); + } + } + + class MapLine extends AltosMapLine { + + public void paint(AltosMapTransform t) { + + if (start == null || end == null) + return; + + g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + + Line2D.Double line = new Line2D.Double(point2d(t.screen(start)), + point2d(t.screen(end))); + + g.setColor(Color.WHITE); + g.setStroke(new BasicStroke(stroke_width+4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); + g.draw(line); + + g.setColor(Color.BLUE); + g.setStroke(new BasicStroke(stroke_width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); + g.draw(line); + + String message = line_dist(); + Rectangle2D bounds; + bounds = line_font.getStringBounds(message, g.getFontRenderContext()); + + float x = (float) line.x1; + float y = (float) line.y1 + (float) bounds.getHeight() / 2.0f; + + if (line.x1 < line.x2) { + x -= (float) bounds.getWidth() + 2.0f; + } else { + x += 2.0f; + } + + g.setFont(line_font); + g.setColor(Color.WHITE); + for (int dy = -2; dy <= 2; dy += 2) + for (int dx = -2; dx <= 2; dx += 2) + g.drawString(message, x + dx, y + dy); + g.setColor(Color.BLUE); + g.drawString(message, x, y); + } + + public MapLine() { + } + } + + class MapPath extends AltosMapPath { + public void paint(AltosMapTransform t) { + Point2D.Double prev = null; + + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + g.setStroke(new BasicStroke(stroke_width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); + + for (AltosMapPathPoint point : points) { + Point2D.Double cur = point2d(t.screen(point.lat_lon)); + if (prev != null) { + Line2D.Double line = new Line2D.Double (prev, cur); + Rectangle bounds = line.getBounds(); + + if (g.hitClip(bounds.x, bounds.y, bounds.width, bounds.height)) { + if (0 <= point.state && point.state < AltosUIMap.stateColors.length) + g.setColor(AltosUIMap.stateColors[point.state]); + else + g.setColor(AltosUIMap.stateColors[AltosLib.ao_flight_invalid]); + + g.draw(line); + } + } + prev = cur; + } + } + } + + class MapTile extends AltosMapTile { + public MapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale) { + super(cache, upper_left, center, zoom, maptype, px_size, scale); + } + + public void paint(AltosMapTransform t) { + + AltosPointDouble point_double = t.screen(upper_left); + Point point = new Point((int) (point_double.x + 0.5), + (int) (point_double.y + 0.5)); + + if (!g.hitClip(point.x, point.y, px_size, px_size)) + return; + + AltosImage altos_image = get_image(); + AltosUIImage ui_image = (AltosUIImage) altos_image; + Image image = null; + + if (ui_image != null) + image = ui_image.image; + + if (image != null) { + g.drawImage(image, point.x, point.y, null); + } else { + g.setColor(Color.GRAY); + g.fillRect(point.x, point.y, px_size, px_size); + + if (t.has_location()) { + String message = null; + switch (status) { + case AltosMapTile.fetching: + message = "Fetching..."; + break; + case AltosMapTile.bad_request: + message = "Internal error"; + break; + case AltosMapTile.failed: + message = "Network error, check connection"; + break; + case AltosMapTile.forbidden: + message = "Too many requests, try later"; + break; + } + if (message != null && tile_font != null) { + g.setFont(tile_font); + g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + Rectangle2D bounds = tile_font.getStringBounds(message, g.getFontRenderContext()); + + float x = px_size / 2.0f; + float y = px_size / 2.0f; + x = x - (float) bounds.getWidth() / 2.0f; + y = y + (float) bounds.getHeight() / 2.0f; + g.setColor(Color.BLACK); + g.drawString(message, (float) point_double.x + x, (float) point_double.y + y); + } + } + } + } + } + + public static final Color stateColors[] = { + Color.WHITE, // startup + Color.WHITE, // idle + Color.WHITE, // pad + Color.RED, // boost + Color.PINK, // fast + Color.YELLOW, // coast + Color.CYAN, // drogue + Color.BLUE, // main + Color.BLACK, // landed + Color.BLACK, // invalid + Color.CYAN, // stateless + }; + + /* AltosMapInterface functions */ + + public AltosMapPath new_path() { + return new MapPath(); + } + + public AltosMapLine new_line() { + return new MapLine(); + } + + public AltosImage load_image(File file) throws Exception { + return new AltosUIImage(ImageIO.read(file)); + } + + public AltosMapMark new_mark(double lat, double lon, int state) { + return new MapMark(lat, lon, state); + } + + public AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale) { + return new MapTile(cache, upper_left, center, zoom, maptype, px_size, scale); + } + + public int width() { + return view.getWidth(); + } + + public int height() { + return view.getHeight(); + } + + public void repaint() { + view.repaint(); + } + + public void repaint(AltosRectangle damage) { + view.repaint(damage); + } + + public void set_zoom_label(String label) { + zoom_label.setText(label); + } + + public void select_object(AltosLatLon latlon) { + debug("select at %f,%f\n", latlon.lat, latlon.lon); + } + + public void debug(String format, Object ... arguments) { + System.out.printf(format, arguments); + } + + + /* AltosFlightDisplay interface */ + + public void set_font() { + tile_font = AltosUILib.value_font; + line_font = AltosUILib.status_font; + } + + public void font_size_changed(int font_size) { + set_font(); + repaint(); + } + + public void units_changed(boolean imperial_units) { + repaint(); + } + + JLabel zoom_label; + + public void set_maptype(int type) { + map.set_maptype(type); + maptype_combo.setSelectedIndex(type); + } + + /* AltosUIMapPreload functions */ + + public void set_zoom(int zoom) { + map.set_zoom(zoom); + } + + public void add_mark(double lat, double lon, int status) { + map.add_mark(lat, lon, status); + } + + public void clear_marks() { + map.clear_marks(); + } + + /* AltosFlightDisplay interface */ + public void reset() { + // nothing + } + + public void show(AltosState state, AltosListenerState listener_state) { + map.show(state, listener_state); + } + + public String getName() { + return "Map"; + } + + /* AltosGraphUI interface */ + public void centre(AltosState state) { + map.centre(state); + } + + /* internal layout bits */ + private GridBagLayout layout = new GridBagLayout(); + + JComboBox maptype_combo; + + MapView view; + + public AltosUIMap() { + + set_font(); + + view = new MapView(); + + view.setPreferredSize(new Dimension(500,500)); + view.setVisible(true); + view.setEnabled(true); + + GridBagLayout my_layout = new GridBagLayout(); + + setLayout(my_layout); + + GridBagConstraints c = new GridBagConstraints(); + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.BOTH; + c.gridx = 0; + c.gridy = 0; + c.gridwidth = 1; + c.gridheight = 10; + c.weightx = 1; + c.weighty = 1; + add(view, c); + + int y = 0; + + zoom_label = new JLabel("", JLabel.CENTER); + + c = new GridBagConstraints(); + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.HORIZONTAL; + c.gridx = 1; + c.gridy = y++; + c.weightx = 0; + c.weighty = 0; + add(zoom_label, c); + + JButton zoom_reset = new JButton("0"); + zoom_reset.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + map.set_zoom(map.default_zoom); + } + }); + + c = new GridBagConstraints(); + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.HORIZONTAL; + c.gridx = 1; + c.gridy = y++; + c.weightx = 0; + c.weighty = 0; + add(zoom_reset, c); + + JButton zoom_in = new JButton("+"); + zoom_in.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + map.set_zoom(map.get_zoom() + 1); + } + }); + + c = new GridBagConstraints(); + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.HORIZONTAL; + c.gridx = 1; + c.gridy = y++; + c.weightx = 0; + c.weighty = 0; + add(zoom_in, c); + + JButton zoom_out = new JButton("-"); + zoom_out.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + map.set_zoom(map.get_zoom() - 1); + } + }); + c = new GridBagConstraints(); + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.HORIZONTAL; + c.gridx = 1; + c.gridy = y++; + c.weightx = 0; + c.weighty = 0; + add(zoom_out, c); + + maptype_combo = new JComboBox(map.maptype_labels); + + maptype_combo.setEditable(false); + maptype_combo.setMaximumRowCount(maptype_combo.getItemCount()); + maptype_combo.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent e) { + map.set_maptype(maptype_combo.getSelectedIndex()); + } + }); + + c = new GridBagConstraints(); + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.HORIZONTAL; + c.gridx = 1; + c.gridy = y++; + c.weightx = 0; + c.weighty = 0; + add(maptype_combo, c); + + map = new AltosMap(this); + } +} diff --git a/altosuilib/AltosUIMapNew.java b/altosuilib/AltosUIMapNew.java deleted file mode 100644 index 42c9aa7a..00000000 --- a/altosuilib/AltosUIMapNew.java +++ /dev/null @@ -1,536 +0,0 @@ -/* - * Copyright © 2010 Anthony Towns - * - * 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. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -package org.altusmetrum.altosuilib_11; - -import java.awt.*; -import java.awt.event.*; -import java.awt.image.*; -import javax.swing.*; -import java.io.*; -import java.lang.Math; -import java.awt.geom.*; -import java.util.*; -import java.util.concurrent.*; -import javax.imageio.*; -import org.altusmetrum.altoslib_11.*; - -public class AltosUIMapNew extends JComponent implements AltosFlightDisplay, AltosMapInterface { - - AltosMap map; - Graphics2D g; - Font tile_font; - Font line_font; - - static Point2D.Double point2d(AltosPointDouble pt) { - return new Point2D.Double(pt.x, pt.y); - } - - static final AltosPointDouble point_double(Point pt) { - return new AltosPointDouble(pt.x, pt.y); - } - - class MapMark extends AltosMapMark { - public void paint(AltosMapTransform t) { - AltosPointDouble pt = t.screen(lat_lon); - - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - g.setStroke(new BasicStroke(stroke_width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); - - if (0 <= state && state < AltosUIMapNew.stateColors.length) - g.setColor(AltosUIMapNew.stateColors[state]); - else - g.setColor(AltosUIMapNew.stateColors[AltosLib.ao_flight_invalid]); - - g.drawOval((int)pt.x-5, (int)pt.y-5, 10, 10); - g.drawOval((int)pt.x-20, (int)pt.y-20, 40, 40); - g.drawOval((int)pt.x-35, (int)pt.y-35, 70, 70); - } - - MapMark(double lat, double lon, int state) { - super(lat, lon, state); - } - } - - class MapView extends JComponent implements MouseMotionListener, MouseListener, ComponentListener, MouseWheelListener { - - private VolatileImage create_back_buffer() { - return getGraphicsConfiguration().createCompatibleVolatileImage(getWidth(), getHeight()); - } - - private void do_paint(Graphics my_g) { - g = (Graphics2D) my_g; - - map.paint(); - } - - public void paint(Graphics my_g) { - VolatileImage back_buffer = create_back_buffer(); - - Graphics2D top_g = (Graphics2D) my_g; - - do { - GraphicsConfiguration gc = getGraphicsConfiguration(); - int code = back_buffer.validate(gc); - if (code == VolatileImage.IMAGE_INCOMPATIBLE) - back_buffer = create_back_buffer(); - - Graphics g_back = back_buffer.getGraphics(); - g_back.setClip(top_g.getClip()); - do_paint(g_back); - g_back.dispose(); - - top_g.drawImage(back_buffer, 0, 0, this); - } while (back_buffer.contentsLost()); - back_buffer.flush(); - } - - public void repaint(AltosRectangle damage) { - repaint(damage.x, damage.y, damage.width, damage.height); - } - - private boolean is_drag_event(MouseEvent e) { - return e.getModifiers() == InputEvent.BUTTON1_MASK; - } - - /* MouseMotionListener methods */ - - public void mouseDragged(MouseEvent e) { - map.touch_continue(e.getPoint().x, e.getPoint().y, is_drag_event(e)); - } - - public void mouseMoved(MouseEvent e) { - } - - /* MouseListener methods */ - public void mouseClicked(MouseEvent e) { - } - - public void mouseEntered(MouseEvent e) { - } - - public void mouseExited(MouseEvent e) { - } - - public void mousePressed(MouseEvent e) { - map.touch_start(e.getPoint().x, e.getPoint().y, is_drag_event(e)); - } - - public void mouseReleased(MouseEvent e) { - } - - /* MouseWheelListener methods */ - - public void mouseWheelMoved(MouseWheelEvent e) { - int zoom_change = e.getWheelRotation(); - - map.set_zoom_centre(map.get_zoom() - zoom_change, new AltosPointInt(e.getPoint().x, e.getPoint().y)); - } - - /* ComponentListener methods */ - - public void componentHidden(ComponentEvent e) { - } - - public void componentMoved(ComponentEvent e) { - } - - public void componentResized(ComponentEvent e) { - map.set_transform(); - } - - public void componentShown(ComponentEvent e) { - map.set_transform(); - } - - MapView() { - addComponentListener(this); - addMouseMotionListener(this); - addMouseListener(this); - addMouseWheelListener(this); - } - } - - class MapLine extends AltosMapLine { - - public void paint(AltosMapTransform t) { - - if (start == null || end == null) - return; - - g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); - - Line2D.Double line = new Line2D.Double(point2d(t.screen(start)), - point2d(t.screen(end))); - - g.setColor(Color.WHITE); - g.setStroke(new BasicStroke(stroke_width+4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); - g.draw(line); - - g.setColor(Color.BLUE); - g.setStroke(new BasicStroke(stroke_width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); - g.draw(line); - - String message = line_dist(); - Rectangle2D bounds; - bounds = line_font.getStringBounds(message, g.getFontRenderContext()); - - float x = (float) line.x1; - float y = (float) line.y1 + (float) bounds.getHeight() / 2.0f; - - if (line.x1 < line.x2) { - x -= (float) bounds.getWidth() + 2.0f; - } else { - x += 2.0f; - } - - g.setFont(line_font); - g.setColor(Color.WHITE); - for (int dy = -2; dy <= 2; dy += 2) - for (int dx = -2; dx <= 2; dx += 2) - g.drawString(message, x + dx, y + dy); - g.setColor(Color.BLUE); - g.drawString(message, x, y); - } - - public MapLine() { - } - } - - class MapPath extends AltosMapPath { - public void paint(AltosMapTransform t) { - Point2D.Double prev = null; - - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - g.setStroke(new BasicStroke(stroke_width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); - - for (AltosMapPathPoint point : points) { - Point2D.Double cur = point2d(t.screen(point.lat_lon)); - if (prev != null) { - Line2D.Double line = new Line2D.Double (prev, cur); - Rectangle bounds = line.getBounds(); - - if (g.hitClip(bounds.x, bounds.y, bounds.width, bounds.height)) { - if (0 <= point.state && point.state < AltosUIMapNew.stateColors.length) - g.setColor(AltosUIMapNew.stateColors[point.state]); - else - g.setColor(AltosUIMapNew.stateColors[AltosLib.ao_flight_invalid]); - - g.draw(line); - } - } - prev = cur; - } - } - } - - class MapTile extends AltosMapTile { - public MapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale) { - super(cache, upper_left, center, zoom, maptype, px_size, scale); - } - - public void paint(AltosMapTransform t) { - - AltosPointDouble point_double = t.screen(upper_left); - Point point = new Point((int) (point_double.x + 0.5), - (int) (point_double.y + 0.5)); - - if (!g.hitClip(point.x, point.y, px_size, px_size)) - return; - - AltosImage altos_image = get_image(); - AltosUIImage ui_image = (AltosUIImage) altos_image; - Image image = null; - - if (ui_image != null) - image = ui_image.image; - - if (image != null) { - g.drawImage(image, point.x, point.y, null); - } else { - g.setColor(Color.GRAY); - g.fillRect(point.x, point.y, px_size, px_size); - - if (t.has_location()) { - String message = null; - switch (status) { - case AltosMapTile.fetching: - message = "Fetching..."; - break; - case AltosMapTile.bad_request: - message = "Internal error"; - break; - case AltosMapTile.failed: - message = "Network error, check connection"; - break; - case AltosMapTile.forbidden: - message = "Too many requests, try later"; - break; - } - if (message != null && tile_font != null) { - g.setFont(tile_font); - g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); - Rectangle2D bounds = tile_font.getStringBounds(message, g.getFontRenderContext()); - - float x = px_size / 2.0f; - float y = px_size / 2.0f; - x = x - (float) bounds.getWidth() / 2.0f; - y = y + (float) bounds.getHeight() / 2.0f; - g.setColor(Color.BLACK); - g.drawString(message, (float) point_double.x + x, (float) point_double.y + y); - } - } - } - } - } - - public static final Color stateColors[] = { - Color.WHITE, // startup - Color.WHITE, // idle - Color.WHITE, // pad - Color.RED, // boost - Color.PINK, // fast - Color.YELLOW, // coast - Color.CYAN, // drogue - Color.BLUE, // main - Color.BLACK, // landed - Color.BLACK, // invalid - Color.CYAN, // stateless - }; - - /* AltosMapInterface functions */ - - public AltosMapPath new_path() { - return new MapPath(); - } - - public AltosMapLine new_line() { - return new MapLine(); - } - - public AltosImage load_image(File file) throws Exception { - return new AltosUIImage(ImageIO.read(file)); - } - - public AltosMapMark new_mark(double lat, double lon, int state) { - return new MapMark(lat, lon, state); - } - - public AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale) { - return new MapTile(cache, upper_left, center, zoom, maptype, px_size, scale); - } - - public int width() { - return view.getWidth(); - } - - public int height() { - return view.getHeight(); - } - - public void repaint() { - view.repaint(); - } - - public void repaint(AltosRectangle damage) { - view.repaint(damage); - } - - public void set_zoom_label(String label) { - zoom_label.setText(label); - } - - public void select_object(AltosLatLon latlon) { - debug("select at %f,%f\n", latlon.lat, latlon.lon); - } - - public void debug(String format, Object ... arguments) { - System.out.printf(format, arguments); - } - - - /* AltosFlightDisplay interface */ - - public void set_font() { - tile_font = AltosUILib.value_font; - line_font = AltosUILib.status_font; - } - - public void font_size_changed(int font_size) { - set_font(); - repaint(); - } - - public void units_changed(boolean imperial_units) { - repaint(); - } - - JLabel zoom_label; - - public void set_maptype(int type) { - map.set_maptype(type); - maptype_combo.setSelectedIndex(type); - } - - /* AltosUIMapPreload functions */ - - public void set_zoom(int zoom) { - map.set_zoom(zoom); - } - - public void add_mark(double lat, double lon, int status) { - map.add_mark(lat, lon, status); - } - - public void clear_marks() { - map.clear_marks(); - } - - /* AltosFlightDisplay interface */ - public void reset() { - // nothing - } - - public void show(AltosState state, AltosListenerState listener_state) { - map.show(state, listener_state); - } - - public String getName() { - return "Map"; - } - - /* AltosGraphUI interface */ - public void centre(AltosState state) { - map.centre(state); - } - - /* internal layout bits */ - private GridBagLayout layout = new GridBagLayout(); - - JComboBox maptype_combo; - - MapView view; - - public AltosUIMapNew() { - - set_font(); - - view = new MapView(); - - view.setPreferredSize(new Dimension(500,500)); - view.setVisible(true); - view.setEnabled(true); - - GridBagLayout my_layout = new GridBagLayout(); - - setLayout(my_layout); - - GridBagConstraints c = new GridBagConstraints(); - c.anchor = GridBagConstraints.CENTER; - c.fill = GridBagConstraints.BOTH; - c.gridx = 0; - c.gridy = 0; - c.gridwidth = 1; - c.gridheight = 10; - c.weightx = 1; - c.weighty = 1; - add(view, c); - - int y = 0; - - zoom_label = new JLabel("", JLabel.CENTER); - - c = new GridBagConstraints(); - c.anchor = GridBagConstraints.CENTER; - c.fill = GridBagConstraints.HORIZONTAL; - c.gridx = 1; - c.gridy = y++; - c.weightx = 0; - c.weighty = 0; - add(zoom_label, c); - - JButton zoom_reset = new JButton("0"); - zoom_reset.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - map.set_zoom(map.default_zoom); - } - }); - - c = new GridBagConstraints(); - c.anchor = GridBagConstraints.CENTER; - c.fill = GridBagConstraints.HORIZONTAL; - c.gridx = 1; - c.gridy = y++; - c.weightx = 0; - c.weighty = 0; - add(zoom_reset, c); - - JButton zoom_in = new JButton("+"); - zoom_in.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - map.set_zoom(map.get_zoom() + 1); - } - }); - - c = new GridBagConstraints(); - c.anchor = GridBagConstraints.CENTER; - c.fill = GridBagConstraints.HORIZONTAL; - c.gridx = 1; - c.gridy = y++; - c.weightx = 0; - c.weighty = 0; - add(zoom_in, c); - - JButton zoom_out = new JButton("-"); - zoom_out.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - map.set_zoom(map.get_zoom() - 1); - } - }); - c = new GridBagConstraints(); - c.anchor = GridBagConstraints.CENTER; - c.fill = GridBagConstraints.HORIZONTAL; - c.gridx = 1; - c.gridy = y++; - c.weightx = 0; - c.weighty = 0; - add(zoom_out, c); - - maptype_combo = new JComboBox(map.maptype_labels); - - maptype_combo.setEditable(false); - maptype_combo.setMaximumRowCount(maptype_combo.getItemCount()); - maptype_combo.addItemListener(new ItemListener() { - public void itemStateChanged(ItemEvent e) { - map.set_maptype(maptype_combo.getSelectedIndex()); - } - }); - - c = new GridBagConstraints(); - c.anchor = GridBagConstraints.CENTER; - c.fill = GridBagConstraints.HORIZONTAL; - c.gridx = 1; - c.gridy = y++; - c.weightx = 0; - c.weighty = 0; - add(maptype_combo, c); - - map = new AltosMap(this); - } -} diff --git a/altosuilib/AltosUIMapPreload.java b/altosuilib/AltosUIMapPreload.java new file mode 100644 index 00000000..42fdd301 --- /dev/null +++ b/altosuilib/AltosUIMapPreload.java @@ -0,0 +1,524 @@ +/* + * Copyright © 2011 Keith Packard + * + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.altosuilib_11; + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +import java.io.*; +import java.util.*; +import java.text.*; +import java.lang.Math; +import java.net.URL; +import java.net.URLConnection; +import org.altusmetrum.altoslib_11.*; + +class AltosUIMapPos extends Box { + AltosUIFrame owner; + JLabel label; + JComboBox hemi; + JTextField deg; + JLabel deg_label; + JTextField min; + JLabel min_label; + + public void set_value(double new_value) { + double d, m; + int h; + + h = 0; + if (new_value < 0) { + h = 1; + new_value = -new_value; + } + d = Math.floor(new_value); + deg.setText(String.format("%3.0f", d)); + m = (new_value - d) * 60.0; + min.setText(String.format("%7.4f", m)); + hemi.setSelectedIndex(h); + } + + public double get_value() throws ParseException { + int h = hemi.getSelectedIndex(); + String d_t = deg.getText(); + String m_t = min.getText(); + double d, m, v; + try { + d = AltosParse.parse_double_locale(d_t); + } catch (ParseException pe) { + JOptionPane.showMessageDialog(owner, + String.format("Invalid degrees \"%s\"", + d_t), + "Invalid number", + JOptionPane.ERROR_MESSAGE); + throw pe; + } + try { + if (m_t.equals("")) + m = 0; + else + m = AltosParse.parse_double_locale(m_t); + } catch (ParseException pe) { + JOptionPane.showMessageDialog(owner, + String.format("Invalid minutes \"%s\"", + m_t), + "Invalid number", + JOptionPane.ERROR_MESSAGE); + throw pe; + } + v = d + m/60.0; + if (h == 1) + v = -v; + return v; + } + + public AltosUIMapPos(AltosUIFrame in_owner, + String label_value, + String[] hemi_names, + double default_value) { + super(BoxLayout.X_AXIS); + owner = in_owner; + label = new JLabel(label_value); + hemi = new JComboBox(hemi_names); + hemi.setEditable(false); + deg = new JTextField(5); + deg.setMinimumSize(deg.getPreferredSize()); + deg.setHorizontalAlignment(JTextField.RIGHT); + deg_label = new JLabel("°"); + min = new JTextField(9); + min.setMinimumSize(min.getPreferredSize()); + min_label = new JLabel("'"); + set_value(default_value); + add(label); + add(Box.createRigidArea(new Dimension(5, 0))); + add(hemi); + add(Box.createRigidArea(new Dimension(5, 0))); + add(deg); + add(Box.createRigidArea(new Dimension(5, 0))); + add(deg_label); + add(Box.createRigidArea(new Dimension(5, 0))); + add(min); + add(Box.createRigidArea(new Dimension(5, 0))); + add(min_label); + } +} + +public class AltosUIMapPreload extends AltosUIFrame implements ActionListener, ItemListener, AltosLaunchSiteListener, AltosMapLoaderListener, AltosUnitsListener, AltosFontListener { + AltosUIFrame owner; + AltosUIMap map; + + AltosUIMapPos lat; + AltosUIMapPos lon; + + JProgressBar pbar; + + JLabel site_list_label; + JComboBox site_list; + + JToggleButton load_button; + JButton close_button; + + JCheckBox[] maptypes = new JCheckBox[AltosMap.maptype_terrain - AltosMap.maptype_hybrid + 1]; + + JComboBox min_zoom; + JComboBox max_zoom; + JLabel radius_label; + JComboBox radius; + int scale = 1; + + Integer[] zooms = { -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6 }; + + Double[] radius_mi = { 1.0, 2.0, 5.0, 10.0, 20.0 }; + Double radius_def_mi = 5.0; + Double[] radius_km = { 2.0, 5.0, 10.0, 20.0, 30.0 }; + Double radius_def_km = 10.0; + + AltosMapLoader loader; + + static final String[] lat_hemi_names = { "N", "S" }; + static final String[] lon_hemi_names = { "E", "W" }; + + double latitude, longitude; + + long loader_notify_time; + + /* AltosMapLoaderListener interfaces */ + public void loader_start(final int max) { + loader_notify_time = System.currentTimeMillis(); + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + pbar.setMaximum(max); + pbar.setValue(0); + pbar.setString(""); + map.clear_marks(); + map.add_mark(latitude, longitude, AltosLib.ao_flight_boost); + } + }); + } + + public void loader_notify(final int cur, final int max, final String name) { + long now = System.currentTimeMillis(); + + if (now - loader_notify_time < 100) + return; + + loader_notify_time = now; + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + pbar.setValue(cur); + pbar.setString(name); + } + }); + } + + public void loader_done(int max) { + loader = null; + SwingUtilities.invokeLater(new Runnable() { + public void run() { + pbar.setValue(0); + pbar.setString(""); + load_button.setSelected(false); + } + }); + } + + public void debug(String format, Object ... arguments) { + if (AltosSerial.debug) + System.out.printf(format, arguments); + } + + + private int all_types() { + int all_types = 0; + for (int t = AltosMap.maptype_hybrid; t <= AltosMap.maptype_terrain; t++) + if (maptypes[t].isSelected()) + all_types |= (1 << t); + return all_types; + } + + public void itemStateChanged(ItemEvent e) { + int state = e.getStateChange(); + + if (state == ItemEvent.SELECTED) { + Object o = e.getItem(); + if (o instanceof AltosLaunchSite) { + AltosLaunchSite site = (AltosLaunchSite) o; + lat.set_value(site.latitude); + lon.set_value(site.longitude); + } + } + } + + public void actionPerformed(ActionEvent e) { + String cmd = e.getActionCommand(); + + if (cmd.equals("close")) { + if (loader != null) + loader.abort(); + setVisible(false); + } + + if (cmd.equals("load")) { + if (loader == null) { + try { + latitude = lat.get_value(); + longitude = lon.get_value(); + int min_z = (Integer) min_zoom.getSelectedItem(); + int max_z = (Integer) max_zoom.getSelectedItem(); + if (max_z < min_z) + max_z = min_z; + Double r = (Double) radius.getSelectedItem(); + + if (AltosPreferences.imperial_units()) + r = AltosConvert.miles_to_meters(r); + else + r = r * 1000; + + map.map.centre(new AltosLatLon(latitude, longitude)); + + loader = new AltosMapLoader(this, + latitude, longitude, + min_z, max_z, r, + all_types(), scale); + + } catch (ParseException pe) { + load_button.setSelected(false); + } + } + } + } + + public void notify_launch_sites(final java.util.List sites) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + int i = 1; + for (AltosLaunchSite site : sites) { + site_list.insertItemAt(site, i); + i++; + } + } + }); + } + + private void set_radius_values() { + radius_label.setText(String.format("Map Radius (%s)", + AltosPreferences.imperial_units() ? "mi" : "km")); + + Double[] radii; + + if (AltosPreferences.imperial_units()) + radii = radius_mi; + else + radii = radius_km; + + radius.removeAllItems(); + for (Double r : radii) { + radius.addItem(r); + } + radius.setSelectedItem(radii[2]); + radius.setMaximumRowCount(radii.length); + } + + public void units_changed(boolean imperial_units) { + map.units_changed(imperial_units); + set_radius_values(); + } + + public void font_size_changed(int font_size) { + map.font_size_changed(font_size); + } + + public AltosUIMapPreload(AltosUIFrame in_owner) { + owner = in_owner; + + Container pane = getContentPane(); + GridBagConstraints c = new GridBagConstraints(); + Insets i = new Insets(4,4,4,4); + + setTitle("AltOS Load Maps"); + + pane.setLayout(new GridBagLayout()); + + addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + AltosUIPreferences.unregister_font_listener(AltosUIMapPreload.this); + AltosPreferences.unregister_units_listener(AltosUIMapPreload.this); + } + }); + + + AltosPreferences.register_units_listener(this); + AltosUIPreferences.register_font_listener(this); + + map = new AltosUIMap(); + + c.fill = GridBagConstraints.BOTH; + c.anchor = GridBagConstraints.CENTER; + c.insets = i; + c.weightx = 1; + c.weighty = 1; + + c.gridx = 0; + c.gridy = 0; + c.gridwidth = 10; + c.anchor = GridBagConstraints.CENTER; + + pane.add(map, c); + + pbar = new JProgressBar(); + pbar.setMinimum(0); + pbar.setMaximum(1); + pbar.setValue(0); + pbar.setString(""); + pbar.setStringPainted(true); + + c.fill = GridBagConstraints.HORIZONTAL; + c.anchor = GridBagConstraints.CENTER; + c.insets = i; + c.weightx = 1; + c.weighty = 0; + + c.gridx = 0; + c.gridy = 1; + c.gridwidth = 10; + + pane.add(pbar, c); + + site_list_label = new JLabel ("Known Launch Sites:"); + + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.CENTER; + c.insets = i; + c.weightx = 1; + c.weighty = 0; + + c.gridx = 0; + c.gridy = 2; + c.gridwidth = 1; + + pane.add(site_list_label, c); + + site_list = new JComboBox(new AltosLaunchSite[] { new AltosLaunchSite("Site List", 0, 0) }); + site_list.addItemListener(this); + + new AltosLaunchSites(this); + + c.fill = GridBagConstraints.HORIZONTAL; + c.anchor = GridBagConstraints.CENTER; + c.insets = i; + c.weightx = 1; + c.weighty = 0; + + c.gridx = 1; + c.gridy = 2; + c.gridwidth = 1; + + pane.add(site_list, c); + + lat = new AltosUIMapPos(owner, + "Latitude:", + lat_hemi_names, + 37.167833333); + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.CENTER; + c.insets = i; + c.weightx = 0; + c.weighty = 0; + + c.gridx = 0; + c.gridy = 3; + c.gridwidth = 1; + c.anchor = GridBagConstraints.CENTER; + + pane.add(lat, c); + + lon = new AltosUIMapPos(owner, + "Longitude:", + lon_hemi_names, + -97.73975); + + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.CENTER; + c.insets = i; + c.weightx = 0; + c.weighty = 0; + + c.gridx = 1; + c.gridy = 3; + c.gridwidth = 1; + c.anchor = GridBagConstraints.CENTER; + + pane.add(lon, c); + + load_button = new JToggleButton("Load Map"); + load_button.addActionListener(this); + load_button.setActionCommand("load"); + + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.CENTER; + c.insets = i; + c.weightx = 1; + c.weighty = 0; + + c.gridx = 0; + c.gridy = 4; + c.gridwidth = 1; + c.anchor = GridBagConstraints.CENTER; + + pane.add(load_button, c); + + close_button = new JButton("Close"); + close_button.addActionListener(this); + close_button.setActionCommand("close"); + + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.CENTER; + c.insets = i; + c.weightx = 1; + c.weighty = 0; + + c.gridx = 1; + c.gridy = 4; + c.gridwidth = 1; + c.anchor = GridBagConstraints.CENTER; + + pane.add(close_button, c); + + JLabel types_label = new JLabel("Map Types"); + c.gridx = 2; + c.gridwidth = 2; + c.gridy = 2; + pane.add(types_label, c); + + c.gridwidth = 1; + + for (int type = AltosMap.maptype_hybrid; type <= AltosMap.maptype_terrain; type++) { + maptypes[type] = new JCheckBox(AltosMap.maptype_labels[type], + type == AltosMap.maptype_hybrid); + c.gridx = 2 + (type >> 1); + c.fill = GridBagConstraints.HORIZONTAL; + c.gridy = (type & 1) + 3; + pane.add(maptypes[type], c); + } + + JLabel min_zoom_label = new JLabel("Minimum Zoom"); + c.gridx = 4; + c.gridy = 2; + pane.add(min_zoom_label, c); + + min_zoom = new JComboBox(zooms); + min_zoom.setSelectedItem(zooms[10]); + min_zoom.setEditable(false); + c.gridx = 5; + c.gridy = 2; + pane.add(min_zoom, c); + + JLabel max_zoom_label = new JLabel("Maximum Zoom"); + c.gridx = 4; + c.gridy = 3; + pane.add(max_zoom_label, c); + + max_zoom = new JComboBox(zooms); + max_zoom.setSelectedItem(zooms[14]); + max_zoom.setEditable(false); + c.gridx = 5; + c.gridy = 3; + pane.add(max_zoom, c); + + radius_label = new JLabel(); + + c.gridx = 4; + c.gridy = 4; + pane.add(radius_label, c); + + radius = new JComboBox(); + radius.setEditable(true); + c.gridx = 5; + c.gridy = 4; + pane.add(radius, c); + + set_radius_values(); + + pack(); + setLocationRelativeTo(owner); + setVisible(true); + } +} diff --git a/altosuilib/AltosUIMapPreloadNew.java b/altosuilib/AltosUIMapPreloadNew.java deleted file mode 100644 index d043e9e3..00000000 --- a/altosuilib/AltosUIMapPreloadNew.java +++ /dev/null @@ -1,525 +0,0 @@ -/* - * Copyright © 2011 Keith Packard - * - * 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. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -package org.altusmetrum.altosuilib_11; - -import java.awt.*; -import java.awt.event.*; -import javax.swing.*; -import java.io.*; -import java.util.*; -import java.text.*; -import java.lang.Math; -import java.net.URL; -import java.net.URLConnection; -import org.altusmetrum.altoslib_11.*; - -class AltosUIMapPos extends Box { - AltosUIFrame owner; - JLabel label; - JComboBox hemi; - JTextField deg; - JLabel deg_label; - JTextField min; - JLabel min_label; - - public void set_value(double new_value) { - double d, m; - int h; - - h = 0; - if (new_value < 0) { - h = 1; - new_value = -new_value; - } - d = Math.floor(new_value); - deg.setText(String.format("%3.0f", d)); - m = (new_value - d) * 60.0; - min.setText(String.format("%7.4f", m)); - hemi.setSelectedIndex(h); - } - - public double get_value() throws ParseException { - int h = hemi.getSelectedIndex(); - String d_t = deg.getText(); - String m_t = min.getText(); - double d, m, v; - try { - d = AltosParse.parse_double_locale(d_t); - } catch (ParseException pe) { - JOptionPane.showMessageDialog(owner, - String.format("Invalid degrees \"%s\"", - d_t), - "Invalid number", - JOptionPane.ERROR_MESSAGE); - throw pe; - } - try { - if (m_t.equals("")) - m = 0; - else - m = AltosParse.parse_double_locale(m_t); - } catch (ParseException pe) { - JOptionPane.showMessageDialog(owner, - String.format("Invalid minutes \"%s\"", - m_t), - "Invalid number", - JOptionPane.ERROR_MESSAGE); - throw pe; - } - v = d + m/60.0; - if (h == 1) - v = -v; - return v; - } - - public AltosUIMapPos(AltosUIFrame in_owner, - String label_value, - String[] hemi_names, - double default_value) { - super(BoxLayout.X_AXIS); - owner = in_owner; - label = new JLabel(label_value); - hemi = new JComboBox(hemi_names); - hemi.setEditable(false); - deg = new JTextField(5); - deg.setMinimumSize(deg.getPreferredSize()); - deg.setHorizontalAlignment(JTextField.RIGHT); - deg_label = new JLabel("°"); - min = new JTextField(9); - min.setMinimumSize(min.getPreferredSize()); - min_label = new JLabel("'"); - set_value(default_value); - add(label); - add(Box.createRigidArea(new Dimension(5, 0))); - add(hemi); - add(Box.createRigidArea(new Dimension(5, 0))); - add(deg); - add(Box.createRigidArea(new Dimension(5, 0))); - add(deg_label); - add(Box.createRigidArea(new Dimension(5, 0))); - add(min); - add(Box.createRigidArea(new Dimension(5, 0))); - add(min_label); - } -} - -public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener, ItemListener, AltosLaunchSiteListener, AltosMapLoaderListener, AltosUnitsListener, AltosFontListener { - AltosUIFrame owner; - AltosUIMapNew map; - - AltosUIMapPos lat; - AltosUIMapPos lon; - - JProgressBar pbar; - - JLabel site_list_label; - JComboBox site_list; - - JToggleButton load_button; - JButton close_button; - - JCheckBox[] maptypes = new JCheckBox[AltosMap.maptype_terrain - AltosMap.maptype_hybrid + 1]; - - JComboBox min_zoom; - JComboBox max_zoom; - JLabel radius_label; - JComboBox radius; - int scale = 1; - - Integer[] zooms = { -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6 }; - - Double[] radius_mi = { 1.0, 2.0, 5.0, 10.0, 20.0 }; - Double radius_def_mi = 5.0; - Double[] radius_km = { 2.0, 5.0, 10.0, 20.0, 30.0 }; - Double radius_def_km = 10.0; - - AltosMapLoader loader; - - static final String[] lat_hemi_names = { "N", "S" }; - static final String[] lon_hemi_names = { "E", "W" }; - - double latitude, longitude; - - long loader_notify_time; - - /* AltosMapLoaderListener interfaces */ - public void loader_start(final int max) { - loader_notify_time = System.currentTimeMillis(); - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - pbar.setMaximum(max); - pbar.setValue(0); - pbar.setString(""); - map.clear_marks(); - map.add_mark(latitude, longitude, AltosLib.ao_flight_boost); - } - }); - } - - public void loader_notify(final int cur, final int max, final String name) { - long now = System.currentTimeMillis(); - - if (now - loader_notify_time < 100) - return; - - loader_notify_time = now; - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - pbar.setValue(cur); - pbar.setString(name); - } - }); - } - - public void loader_done(int max) { - loader = null; - SwingUtilities.invokeLater(new Runnable() { - public void run() { - pbar.setValue(0); - pbar.setString(""); - load_button.setSelected(false); - } - }); - } - - public void debug(String format, Object ... arguments) { - if (AltosSerial.debug) - System.out.printf(format, arguments); - } - - - private int all_types() { - int all_types = 0; - for (int t = AltosMap.maptype_hybrid; t <= AltosMap.maptype_terrain; t++) - if (maptypes[t].isSelected()) - all_types |= (1 << t); - return all_types; - } - - public void itemStateChanged(ItemEvent e) { - int state = e.getStateChange(); - - if (state == ItemEvent.SELECTED) { - Object o = e.getItem(); - if (o instanceof AltosLaunchSite) { - AltosLaunchSite site = (AltosLaunchSite) o; - lat.set_value(site.latitude); - lon.set_value(site.longitude); - } - } - } - - public void actionPerformed(ActionEvent e) { - String cmd = e.getActionCommand(); - - if (cmd.equals("close")) { - if (loader != null) - loader.abort(); - setVisible(false); - } - - if (cmd.equals("load")) { - if (loader == null) { - try { - latitude = lat.get_value(); - longitude = lon.get_value(); - int min_z = (Integer) min_zoom.getSelectedItem(); - int max_z = (Integer) max_zoom.getSelectedItem(); - if (max_z < min_z) - max_z = min_z; - Double r = (Double) radius.getSelectedItem(); - - if (AltosPreferences.imperial_units()) - r = AltosConvert.miles_to_meters(r); - else - r = r * 1000; - - map.map.centre(new AltosLatLon(latitude, longitude)); - - loader = new AltosMapLoader(this, - latitude, longitude, - min_z, max_z, r, - all_types(), scale); - - } catch (ParseException pe) { - load_button.setSelected(false); - } - } - } - } - - public void notify_launch_sites(final java.util.List sites) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - int i = 1; - for (AltosLaunchSite site : sites) { - site_list.insertItemAt(site, i); - i++; - } - } - }); - } - - private void set_radius_values() { - radius_label.setText(String.format("Map Radius (%s)", - AltosPreferences.imperial_units() ? "mi" : "km")); - - Double[] radii; - - if (AltosPreferences.imperial_units()) - radii = radius_mi; - else - radii = radius_km; - - radius.removeAllItems(); - for (Double r : radii) { - System.out.printf("adding radius %f\n",r); - radius.addItem(r); - } - radius.setSelectedItem(radii[2]); - radius.setMaximumRowCount(radii.length); - } - - public void units_changed(boolean imperial_units) { - map.units_changed(imperial_units); - set_radius_values(); - } - - public void font_size_changed(int font_size) { - map.font_size_changed(font_size); - } - - public AltosUIMapPreloadNew(AltosUIFrame in_owner) { - owner = in_owner; - - Container pane = getContentPane(); - GridBagConstraints c = new GridBagConstraints(); - Insets i = new Insets(4,4,4,4); - - setTitle("AltOS Load Maps"); - - pane.setLayout(new GridBagLayout()); - - addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent e) { - AltosUIPreferences.unregister_font_listener(AltosUIMapPreloadNew.this); - AltosPreferences.unregister_units_listener(AltosUIMapPreloadNew.this); - } - }); - - - AltosPreferences.register_units_listener(this); - AltosUIPreferences.register_font_listener(this); - - map = new AltosUIMapNew(); - - c.fill = GridBagConstraints.BOTH; - c.anchor = GridBagConstraints.CENTER; - c.insets = i; - c.weightx = 1; - c.weighty = 1; - - c.gridx = 0; - c.gridy = 0; - c.gridwidth = 10; - c.anchor = GridBagConstraints.CENTER; - - pane.add(map, c); - - pbar = new JProgressBar(); - pbar.setMinimum(0); - pbar.setMaximum(1); - pbar.setValue(0); - pbar.setString(""); - pbar.setStringPainted(true); - - c.fill = GridBagConstraints.HORIZONTAL; - c.anchor = GridBagConstraints.CENTER; - c.insets = i; - c.weightx = 1; - c.weighty = 0; - - c.gridx = 0; - c.gridy = 1; - c.gridwidth = 10; - - pane.add(pbar, c); - - site_list_label = new JLabel ("Known Launch Sites:"); - - c.fill = GridBagConstraints.NONE; - c.anchor = GridBagConstraints.CENTER; - c.insets = i; - c.weightx = 1; - c.weighty = 0; - - c.gridx = 0; - c.gridy = 2; - c.gridwidth = 1; - - pane.add(site_list_label, c); - - site_list = new JComboBox(new AltosLaunchSite[] { new AltosLaunchSite("Site List", 0, 0) }); - site_list.addItemListener(this); - - new AltosLaunchSites(this); - - c.fill = GridBagConstraints.HORIZONTAL; - c.anchor = GridBagConstraints.CENTER; - c.insets = i; - c.weightx = 1; - c.weighty = 0; - - c.gridx = 1; - c.gridy = 2; - c.gridwidth = 1; - - pane.add(site_list, c); - - lat = new AltosUIMapPos(owner, - "Latitude:", - lat_hemi_names, - 37.167833333); - c.fill = GridBagConstraints.NONE; - c.anchor = GridBagConstraints.CENTER; - c.insets = i; - c.weightx = 0; - c.weighty = 0; - - c.gridx = 0; - c.gridy = 3; - c.gridwidth = 1; - c.anchor = GridBagConstraints.CENTER; - - pane.add(lat, c); - - lon = new AltosUIMapPos(owner, - "Longitude:", - lon_hemi_names, - -97.73975); - - c.fill = GridBagConstraints.NONE; - c.anchor = GridBagConstraints.CENTER; - c.insets = i; - c.weightx = 0; - c.weighty = 0; - - c.gridx = 1; - c.gridy = 3; - c.gridwidth = 1; - c.anchor = GridBagConstraints.CENTER; - - pane.add(lon, c); - - load_button = new JToggleButton("Load Map"); - load_button.addActionListener(this); - load_button.setActionCommand("load"); - - c.fill = GridBagConstraints.NONE; - c.anchor = GridBagConstraints.CENTER; - c.insets = i; - c.weightx = 1; - c.weighty = 0; - - c.gridx = 0; - c.gridy = 4; - c.gridwidth = 1; - c.anchor = GridBagConstraints.CENTER; - - pane.add(load_button, c); - - close_button = new JButton("Close"); - close_button.addActionListener(this); - close_button.setActionCommand("close"); - - c.fill = GridBagConstraints.NONE; - c.anchor = GridBagConstraints.CENTER; - c.insets = i; - c.weightx = 1; - c.weighty = 0; - - c.gridx = 1; - c.gridy = 4; - c.gridwidth = 1; - c.anchor = GridBagConstraints.CENTER; - - pane.add(close_button, c); - - JLabel types_label = new JLabel("Map Types"); - c.gridx = 2; - c.gridwidth = 2; - c.gridy = 2; - pane.add(types_label, c); - - c.gridwidth = 1; - - for (int type = AltosMap.maptype_hybrid; type <= AltosMap.maptype_terrain; type++) { - maptypes[type] = new JCheckBox(AltosMap.maptype_labels[type], - type == AltosMap.maptype_hybrid); - c.gridx = 2 + (type >> 1); - c.fill = GridBagConstraints.HORIZONTAL; - c.gridy = (type & 1) + 3; - pane.add(maptypes[type], c); - } - - JLabel min_zoom_label = new JLabel("Minimum Zoom"); - c.gridx = 4; - c.gridy = 2; - pane.add(min_zoom_label, c); - - min_zoom = new JComboBox(zooms); - min_zoom.setSelectedItem(zooms[10]); - min_zoom.setEditable(false); - c.gridx = 5; - c.gridy = 2; - pane.add(min_zoom, c); - - JLabel max_zoom_label = new JLabel("Maximum Zoom"); - c.gridx = 4; - c.gridy = 3; - pane.add(max_zoom_label, c); - - max_zoom = new JComboBox(zooms); - max_zoom.setSelectedItem(zooms[14]); - max_zoom.setEditable(false); - c.gridx = 5; - c.gridy = 3; - pane.add(max_zoom, c); - - radius_label = new JLabel(); - - c.gridx = 4; - c.gridy = 4; - pane.add(radius_label, c); - - radius = new JComboBox(); - radius.setEditable(true); - c.gridx = 5; - c.gridy = 4; - pane.add(radius, c); - - set_radius_values(); - - pack(); - setLocationRelativeTo(owner); - setVisible(true); - } -} diff --git a/altosuilib/Makefile.am b/altosuilib/Makefile.am index a00e4a12..d18006b5 100644 --- a/altosuilib/Makefile.am +++ b/altosuilib/Makefile.am @@ -57,8 +57,8 @@ altosuilib_JAVA = \ AltosBTDeviceIterator.java \ AltosBTManage.java \ AltosBTKnown.java \ - AltosUIMapNew.java \ - AltosUIMapPreloadNew.java \ + AltosUIMap.java \ + AltosUIMapPreload.java \ AltosUIFlightTab.java \ AltosUIIndicator.java \ AltosUIUnitsIndicator.java \ diff --git a/telegps/TeleGPS.java b/telegps/TeleGPS.java index d347fe41..2897e06a 100644 --- a/telegps/TeleGPS.java +++ b/telegps/TeleGPS.java @@ -72,7 +72,7 @@ public class TeleGPS JTabbedPane pane; - AltosUIMapNew map; + AltosUIMap map; TeleGPSInfo gps_info; TeleGPSState gps_state; AltosInfoTable info_table; @@ -174,7 +174,7 @@ public class TeleGPS } void load_maps() { - new AltosUIMapPreloadNew(this); + new AltosUIMapPreload(this); } void disconnect() { @@ -567,7 +567,7 @@ public class TeleGPS /* Make the tabbed pane use the rest of the window space */ bag.add(pane, constraints(0, 3, GridBagConstraints.BOTH)); - map = new AltosUIMapNew(); + map = new AltosUIMap(); pane.add(map.getName(), map); displays.add(map); diff --git a/telegps/TeleGPSGraphUI.java b/telegps/TeleGPSGraphUI.java index 701a7e30..8e2f6627 100644 --- a/telegps/TeleGPSGraphUI.java +++ b/telegps/TeleGPSGraphUI.java @@ -38,7 +38,7 @@ public class TeleGPSGraphUI extends AltosUIFrame JTabbedPane pane; AltosGraph graph; AltosUIEnable enable; - AltosUIMapNew map; + AltosUIMap map; AltosState state; AltosFlightStats stats; AltosGraphDataSet graphDataSet; @@ -69,7 +69,7 @@ public class TeleGPSGraphUI extends AltosUIFrame graph = new AltosGraph(enable, stats, graphDataSet); statsTable = new AltosFlightStatsTable(stats); - map = new AltosUIMapNew(); + map = new AltosUIMap(); pane.add("Graph", graph.panel); pane.add("Configure Graph", enable); -- cgit v1.2.3 From f5944ba4eb3f419f8cad461872d048b5adf7b566 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 26 May 2016 14:33:44 -0700 Subject: doc: pad/idle indicator table was busted I stuck a pile of extra '|' characters in the table by mistake. Reported-by: Stan Signed-off-by: Keith Packard --- doc/usage.inc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/usage.inc b/doc/usage.inc index 25fdd6d3..29587b7e 100644 --- a/doc/usage.inc +++ b/doc/usage.inc @@ -167,13 +167,15 @@ signals, but no record of the flight will be stored in on-board flash. + ifdef::easymega,telemega[] |Additional Igniters |four very short beeps |Continuity indication for the four additional pyro - |channels on TeleMega and EasyMega. One high tone for - |no continuity, one low tone for continuity. These are - |produced after the continuity indicators for the two - |primary igniter channels. + channels on TeleMega and EasyMega. One high tone for + no continuity, one low tone for continuity. These are + produced after the continuity indicators for the two + primary igniter channels. + endif::easymega,telemega[] |==== -- cgit v1.2.3 From f982248573c1b646ac53fde980a60ada5404f6aa Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 27 May 2016 20:30:18 -0700 Subject: altosuilib: Fill preload map on site or lat/lon change This loads the map view with the selected area when the site entry is changed or the user hits return in the lat/lon fields. This lets you see the target launch site without having to load the whole preload set. Signed-off-by: Keith Packard --- altosuilib/AltosUIMapPreload.java | 40 ++++++++++++++++++++++++++++++--------- src/drivers/ao_trng_send.c | 10 +++++++++- 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/altosuilib/AltosUIMapPreload.java b/altosuilib/AltosUIMapPreload.java index 42fdd301..32690037 100644 --- a/altosuilib/AltosUIMapPreload.java +++ b/altosuilib/AltosUIMapPreload.java @@ -28,7 +28,8 @@ import java.net.URL; import java.net.URLConnection; import org.altusmetrum.altoslib_11.*; -class AltosUIMapPos extends Box { +class AltosUIMapPos extends Box implements ActionListener { + AltosUIMapPreload preload; AltosUIFrame owner; JLabel label; JComboBox hemi; @@ -37,6 +38,11 @@ class AltosUIMapPos extends Box { JTextField min; JLabel min_label; + /* ActionListener interface */ + public void actionPerformed(ActionEvent e) { + preload.center_map(); + } + public void set_value(double new_value) { double d, m; int h; @@ -88,19 +94,23 @@ class AltosUIMapPos extends Box { } public AltosUIMapPos(AltosUIFrame in_owner, - String label_value, - String[] hemi_names, - double default_value) { + AltosUIMapPreload preload, + String label_value, + String[] hemi_names, + double default_value) { super(BoxLayout.X_AXIS); owner = in_owner; + this.preload = preload; label = new JLabel(label_value); hemi = new JComboBox(hemi_names); hemi.setEditable(false); deg = new JTextField(5); + deg.addActionListener(this); deg.setMinimumSize(deg.getPreferredSize()); deg.setHorizontalAlignment(JTextField.RIGHT); deg_label = new JLabel("°"); min = new JTextField(9); + min.addActionListener(this); min.setMinimumSize(min.getPreferredSize()); min_label = new JLabel("'"); set_value(default_value); @@ -166,8 +176,6 @@ public class AltosUIMapPreload extends AltosUIFrame implements ActionListener, I pbar.setMaximum(max); pbar.setValue(0); pbar.setString(""); - map.clear_marks(); - map.add_mark(latitude, longitude, AltosLib.ao_flight_boost); } }); } @@ -213,6 +221,19 @@ public class AltosUIMapPreload extends AltosUIFrame implements ActionListener, I return all_types; } + void center_map(double latitude, double longitude) { + map.map.centre(new AltosLatLon(latitude, longitude)); + map.clear_marks(); + map.add_mark(latitude, longitude, AltosLib.ao_flight_boost); + } + + void center_map() { + try { + center_map(lat.get_value(), lon.get_value()); + } catch (ParseException pe) { + } + } + public void itemStateChanged(ItemEvent e) { int state = e.getStateChange(); @@ -222,6 +243,7 @@ public class AltosUIMapPreload extends AltosUIFrame implements ActionListener, I AltosLaunchSite site = (AltosLaunchSite) o; lat.set_value(site.latitude); lon.set_value(site.longitude); + center_map(site.latitude, site.longitude); } } } @@ -251,7 +273,7 @@ public class AltosUIMapPreload extends AltosUIFrame implements ActionListener, I else r = r * 1000; - map.map.centre(new AltosLatLon(latitude, longitude)); + center_map(latitude, longitude); loader = new AltosMapLoader(this, latitude, longitude, @@ -393,7 +415,7 @@ public class AltosUIMapPreload extends AltosUIFrame implements ActionListener, I pane.add(site_list, c); - lat = new AltosUIMapPos(owner, + lat = new AltosUIMapPos(owner, this, "Latitude:", lat_hemi_names, 37.167833333); @@ -410,7 +432,7 @@ public class AltosUIMapPreload extends AltosUIFrame implements ActionListener, I pane.add(lat, c); - lon = new AltosUIMapPos(owner, + lon = new AltosUIMapPos(owner, this, "Longitude:", lon_hemi_names, -97.73975); diff --git a/src/drivers/ao_trng_send.c b/src/drivers/ao_trng_send.c index 171a345f..4ac6ee5e 100644 --- a/src/drivers/ao_trng_send.c +++ b/src/drivers/ao_trng_send.c @@ -22,7 +22,7 @@ #include #include -static struct ao_task ao_trng_send_task, ao_trng_send_raw_task; +static struct ao_task ao_trng_send_task; static uint8_t trng_running; static AO_TICK_TYPE trng_power_time; @@ -30,6 +30,10 @@ static AO_TICK_TYPE trng_power_time; static uint8_t random_mutex; +#if AO_USB_HAS_IN2 + +static struct ao_task ao_trng_send_raw_task; + static void ao_trng_get_raw(uint16_t *buf) { @@ -90,6 +94,8 @@ ao_trng_send_raw(void) } } +#endif + /* Make sure there's at least 8 bits of variance in the samples */ #define MIN_VARIANCE (128 * 128) @@ -181,7 +187,9 @@ ao_trng_send(void) if (failed > AO_TRNG_START_CHECK / 4) ao_panic(AO_PANIC_DMA); +#if AO_USB_HAS_IN2 ao_add_task(&ao_trng_send_raw_task, ao_trng_send_raw, "trng_send_raw"); +#endif #ifdef AO_USB_START_DISABLED ao_usb_enable(); -- cgit v1.2.3 From 4d57c8b87f29f23beb0d88f1cef179209b1c5992 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 5 Jun 2016 09:17:12 -0700 Subject: altosuilib: Only display map debugging when serial_debug is enabled This keeps the application quiet for most users. Signed-off-by: Keith Packard --- altosuilib/AltosUIMap.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/altosuilib/AltosUIMap.java b/altosuilib/AltosUIMap.java index 36454054..8c90bcd8 100644 --- a/altosuilib/AltosUIMap.java +++ b/altosuilib/AltosUIMap.java @@ -361,7 +361,8 @@ public class AltosUIMap extends JComponent implements AltosFlightDisplay, AltosM } public void debug(String format, Object ... arguments) { - System.out.printf(format, arguments); + if (AltosUIPreferences.serial_debug()) + System.out.printf(format, arguments); } -- cgit v1.2.3 From 55c8e5aff2cc7b941503a04970f7d368261af52a Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 9 Jun 2016 22:03:45 -0700 Subject: telegps-v1.0: Document how SN 1959 was fixed SN1959 was fixed by jumpering pin 8 to pin 10 so that the DONE_INT_PIN could be switched from PIO 2 to PIO 4 as pin 8 appeared to have failed. Signed-off-by: Keith Packard --- src/telegps-v1.0/ao_pins.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/telegps-v1.0/ao_pins.h b/src/telegps-v1.0/ao_pins.h index d2382a56..eb1033da 100644 --- a/src/telegps-v1.0/ao_pins.h +++ b/src/telegps-v1.0/ao_pins.h @@ -105,6 +105,16 @@ #define AO_CC115L_DONE_INT_PORT 0 #define AO_CC115L_DONE_INT_PIN 2 +/* SN 1959, owned by J. Patrick Bowers, had a hard landing and appears to have broken the + * internal connection between pin 8 and the chip. This board + * has been fixed by jumpering pin 8 to pin 10, which means that + * the DONE_INT_PIN is now 4 instead of 2. When building custom firmware for + * this board, just adjust the ao_pins.h value before compiling + + #define AO_CC115L_DONE_INT_PIN_SN_1959 4 + + */ + /* * Flash (M25) */ -- cgit v1.2.3 From 2970de9f92243b11d3beef56f3b1df3ef3579b95 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 9 Jun 2016 22:05:24 -0700 Subject: stmf0: Clear all USB state when resetting chip. Wakeup all sleepers When USB is reset, but the board is not power cycled, all of the internal USB state needs to be reset, and any tasks blocked on sending or receiving packets need to be awoken so they can go wait for USB to start running again. Signed-off-by: Keith Packard --- src/stmf0/ao_usb_stm.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/stmf0/ao_usb_stm.c b/src/stmf0/ao_usb_stm.c index 253506d5..a67fc868 100644 --- a/src/stmf0/ao_usb_stm.c +++ b/src/stmf0/ao_usb_stm.c @@ -437,6 +437,17 @@ ao_usb_set_ep0(void) ao_usb_set_address(0); ao_usb_running = 0; + + /* Reset our internal state + */ + + ao_usb_ep0_state = AO_USB_EP0_IDLE; + + ao_usb_ep0_in_data = NULL; + ao_usb_ep0_in_len = 0; + + ao_usb_ep0_out_data = 0; + ao_usb_ep0_out_len = 0; } static void @@ -493,6 +504,20 @@ ao_usb_set_configuration(void) STM_USB_EPR_STAT_TX_NAK); #endif + ao_usb_in_flushed = 0; + ao_usb_in_pending = 0; + ao_wakeup(&ao_usb_in_pending); +#if AO_USB_HAS_IN2 + ao_usb_in2_flushed = 0; + ao_usb_in2_pending = 0; + ao_wakeup(&ao_usb_in2_pending); +#endif + + ao_usb_out_avail = 0; + ao_usb_configuration = 0; + + ao_wakeup(AO_USB_OUT_SLEEP_ADDR); + ao_usb_running = 1; #if AO_USB_DIRECTIO ao_wakeup(&ao_usb_running); -- cgit v1.2.3 From 36ba97fabbed2f2a4a89da5be221c630ea3ff66f Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 9 Jun 2016 22:06:30 -0700 Subject: stmf0: Do not send more data than requested for GET_DESCRIPTOR When Linux boots, it asks for only the first 8 bytes of the device descriptor; we must limit the amount of data sent back to that amount or USB will get wedged. Signed-off-by: Keith Packard --- src/stmf0/ao_usb_stm.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/stmf0/ao_usb_stm.c b/src/stmf0/ao_usb_stm.c index a67fc868..63b35b24 100644 --- a/src/stmf0/ao_usb_stm.c +++ b/src/stmf0/ao_usb_stm.c @@ -683,7 +683,7 @@ ao_usb_serial_init(void) /* Walk through the list of descriptors and find a match */ static void -ao_usb_get_descriptor(uint16_t value) +ao_usb_get_descriptor(uint16_t value, uint16_t length) { const uint8_t *descriptor; uint8_t type = value >> 8; @@ -704,6 +704,8 @@ ao_usb_get_descriptor(uint16_t value) len = sizeof (ao_usb_serial); } #endif + if (len > length) + len = length; ao_usb_ep0_in_set(descriptor, len); break; } @@ -748,7 +750,7 @@ ao_usb_ep0_setup(void) break; case AO_USB_REQ_GET_DESCRIPTOR: debug ("get descriptor %d\n", ao_usb_setup.value); - ao_usb_get_descriptor(ao_usb_setup.value); + ao_usb_get_descriptor(ao_usb_setup.value, ao_usb_setup.length); break; case AO_USB_REQ_GET_CONFIGURATION: debug ("get configuration %d\n", ao_usb_configuration); -- cgit v1.2.3 From 54f8d53584d0a902676b441cd122c01cd54f2283 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 10 Jun 2016 14:33:50 -0700 Subject: altos/lpc: Handle USB reset by resetting internal state Just like stmf0, this clears internal state at USB reset time so the driver can survive host OS reboots. Signed-off-by: Keith Packard --- src/lpc/ao_usb_lpc.c | 72 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 30 deletions(-) diff --git a/src/lpc/ao_usb_lpc.c b/src/lpc/ao_usb_lpc.c index 0dfaece4..3b3226ad 100644 --- a/src/lpc/ao_usb_lpc.c +++ b/src/lpc/ao_usb_lpc.c @@ -269,13 +269,10 @@ ao_usb_epn_in_count(uint8_t n) return ao_usb_ep_count(ao_usb_epn_in(n, 0)); } -static uint8_t * -ao_usb_enable_ep(vuint32_t *ep, uint16_t nbytes, uint16_t set_nbytes) +static void +ao_usb_enable_ep(vuint32_t *ep, uint8_t *addr, uint16_t set_nbytes) { - uint8_t *addr = ao_usb_alloc_sram(nbytes); - ao_usb_set_ep(ep, addr, set_nbytes); - return addr; } static void @@ -293,23 +290,13 @@ ao_usb_disable_ep(vuint32_t *ep) static void ao_usb_enable_epn(uint8_t n, - uint16_t out_bytes, uint8_t *out_addrs[2], - uint16_t in_bytes, uint8_t *in_addrs[2]) + uint16_t out_bytes, uint8_t *out_addr, + uint8_t *in_addr) { - uint8_t *addr; - - addr = ao_usb_enable_ep(ao_usb_epn_out(n, 0), out_bytes * 2, out_bytes); - if (out_addrs) { - out_addrs[0] = addr; - out_addrs[1] = addr + out_bytes; - } + ao_usb_enable_ep(ao_usb_epn_out(n, 0), out_addr, out_bytes); ao_usb_disable_ep(ao_usb_epn_out(n, 1)); - addr = ao_usb_enable_ep(ao_usb_epn_in(n, 0), in_bytes * 2, 0); - if (in_addrs) { - in_addrs[0] = addr; - in_addrs[1] = addr + in_bytes; - } + ao_usb_enable_ep(ao_usb_epn_in(n, 0), in_addr, 0); ao_usb_disable_ep(ao_usb_epn_in(n, 1)); } @@ -327,6 +314,14 @@ ao_usb_reset(void) { ao_usb_set_address(0); ao_usb_configuration = 0; + + ao_usb_ep0_state = AO_USB_EP0_IDLE; + ao_usb_ep0_in_data = NULL; + ao_usb_ep0_in_len = 0; + ao_usb_ep0_in_max = 0; + + ao_usb_ep0_out_data = NULL; + ao_usb_ep0_out_len = 0; } static void @@ -341,17 +336,14 @@ ao_usb_set_ep0(void) lpc_usb.intstat = 0xc00003ff; - ao_usb_sram = lpc_usb_sram; - lpc_usb.epliststart = (uint32_t) (intptr_t) &lpc_usb_endpoint; lpc_usb.databufstart = ((uint32_t) (intptr_t) ao_usb_sram) & 0xffc00000; /* Set up EP 0 - a Control end point with 32 bytes of in and out buffers */ - ao_usb_ep0_rx_buffer = ao_usb_enable_ep(ao_usb_ep0_out(), AO_USB_CONTROL_SIZE, AO_USB_CONTROL_SIZE); - ao_usb_ep0_setup_buffer = ao_usb_alloc_sram(AO_USB_CONTROL_SIZE); + ao_usb_enable_ep(ao_usb_ep0_out(), ao_usb_ep0_rx_buffer, AO_USB_CONTROL_SIZE); lpc_usb_endpoint.setup = ao_usb_sram_offset(ao_usb_ep0_setup_buffer); - ao_usb_ep0_tx_buffer = ao_usb_enable_ep(ao_usb_ep0_in(), AO_USB_CONTROL_SIZE, 0); + ao_usb_enable_ep(ao_usb_ep0_in(), ao_usb_ep0_tx_buffer, 0); /* Clear all of the other endpoints */ for (e = 1; e <= 4; e++) @@ -365,10 +357,10 @@ ao_usb_set_configuration(void) debug ("ao_usb_set_configuration\n"); /* Set up the INT end point */ - ao_usb_enable_epn(AO_USB_INT_EP, 0, NULL, 0, NULL); + ao_usb_enable_epn(AO_USB_INT_EP, 0, NULL, NULL); /* Set up the OUT end point */ - ao_usb_enable_epn(AO_USB_OUT_EP, AO_USB_OUT_SIZE, ao_usb_out_rx_buffer, 0, NULL); + ao_usb_enable_epn(AO_USB_OUT_EP, AO_USB_OUT_SIZE, ao_usb_out_rx_buffer[0], NULL); /* Set the current RX pointer to the *other* buffer so that when buffer 0 gets * data, we'll switch to it and pull bytes from there @@ -376,10 +368,18 @@ ao_usb_set_configuration(void) ao_usb_out_rx_cur = 1; /* Set up the IN end point */ - ao_usb_enable_epn(AO_USB_IN_EP, 0, NULL, AO_USB_IN_SIZE, ao_usb_in_tx_buffer); + ao_usb_enable_epn(AO_USB_IN_EP, 0, NULL, ao_usb_in_tx_buffer[0]); ao_usb_in_tx_cur = 0; + ao_usb_in_flushed = 0; + ao_usb_in_pending = 0; + ao_wakeup(&ao_usb_in_pending); + + ao_usb_out_avail = 0; + ao_usb_configuration = 0; + ao_usb_running = 1; + ao_wakeup(&ao_usb_running); } /* Send an IN data packet */ @@ -481,7 +481,7 @@ static struct ao_usb_line_coding ao_usb_line_coding = {115200, 0, 0, 8}; /* Walk through the list of descriptors and find a match */ static void -ao_usb_get_descriptor(uint16_t value) +ao_usb_get_descriptor(uint16_t value, uint16_t length) { const uint8_t *descriptor; uint8_t type = value >> 8; @@ -495,6 +495,8 @@ ao_usb_get_descriptor(uint16_t value) len = descriptor[2]; else len = descriptor[0]; + if (len > length) + len = length; ao_usb_ep0_in_set(descriptor, len); break; } @@ -539,7 +541,7 @@ ao_usb_ep0_setup(void) break; case AO_USB_REQ_GET_DESCRIPTOR: debug ("get descriptor %d\n", ao_usb_setup.value); - ao_usb_get_descriptor(ao_usb_setup.value); + ao_usb_get_descriptor(ao_usb_setup.value, ao_usb_setup.length); break; case AO_USB_REQ_GET_CONFIGURATION: debug ("get configuration %d\n", ao_usb_configuration); @@ -958,6 +960,17 @@ ao_usb_enable(void) for (t = 0; t < 1000; t++) ao_arch_nop(); + ao_usb_sram = lpc_usb_sram; + + ao_usb_ep0_rx_buffer = ao_usb_alloc_sram(AO_USB_CONTROL_SIZE); + ao_usb_ep0_tx_buffer = ao_usb_alloc_sram(AO_USB_CONTROL_SIZE); + ao_usb_ep0_setup_buffer = ao_usb_alloc_sram(AO_USB_CONTROL_SIZE); + + ao_usb_out_rx_buffer[0] = ao_usb_alloc_sram(AO_USB_OUT_SIZE); + ao_usb_out_rx_buffer[1] = ao_usb_alloc_sram(AO_USB_OUT_SIZE); + ao_usb_in_tx_buffer[0] = ao_usb_alloc_sram(AO_USB_IN_SIZE); + ao_usb_in_tx_buffer[1] = ao_usb_alloc_sram(AO_USB_IN_SIZE); + ao_usb_set_ep0(); #if HAS_USB_PULLUP @@ -1001,7 +1014,6 @@ ao_usb_init(void) #if HAS_USB_PULLUP ao_enable_output(AO_USB_PULLUP_PORT, AO_USB_PULLUP_PIN, AO_USB_PULLUP, 0); #endif - ao_usb_enable(); debug ("ao_usb_init\n"); -- cgit v1.2.3 From 7d21ff641a7bc35318f0f637589eabb5bb6c5152 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 10 Jun 2016 14:39:25 -0700 Subject: altos/stm: Handle USB reset in STM32L usb driver Just like lpc and stmf0, deal with the host resetting the bus while rebooting by restoring all usb-related data to the initial values. Signed-off-by: Keith Packard --- src/stm/ao_usb_stm.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/stm/ao_usb_stm.c b/src/stm/ao_usb_stm.c index 4e9d1f14..3d26466b 100644 --- a/src/stm/ao_usb_stm.c +++ b/src/stm/ao_usb_stm.c @@ -349,6 +349,19 @@ ao_usb_set_ep0(void) } ao_usb_set_address(0); + + ao_usb_running = 0; + + /* Reset our internal state + */ + + ao_usb_ep0_state = AO_USB_EP0_IDLE; + + ao_usb_ep0_in_data = NULL; + ao_usb_ep0_in_len = 0; + + ao_usb_ep0_out_data = 0; + ao_usb_ep0_out_len = 0; } static void @@ -393,7 +406,15 @@ ao_usb_set_configuration(void) STM_USB_EPR_STAT_RX_DISABLED, STM_USB_EPR_STAT_TX_NAK); + ao_usb_in_flushed = 0; + ao_usb_in_pending = 0; + ao_wakeup(&ao_usb_in_pending); + + ao_usb_out_avail = 0; + ao_usb_configuration = 0; + ao_usb_running = 1; + ao_wakeup(&ao_usb_running); } static uint16_t control_count; @@ -581,7 +602,7 @@ static struct ao_usb_line_coding ao_usb_line_coding = {115200, 0, 0, 8}; /* Walk through the list of descriptors and find a match */ static void -ao_usb_get_descriptor(uint16_t value) +ao_usb_get_descriptor(uint16_t value, uint16_t length) { const uint8_t *descriptor; uint8_t type = value >> 8; @@ -595,6 +616,8 @@ ao_usb_get_descriptor(uint16_t value) len = descriptor[2]; else len = descriptor[0]; + if (len > length) + len = length; ao_usb_ep0_in_set(descriptor, len); break; } @@ -639,7 +662,7 @@ ao_usb_ep0_setup(void) break; case AO_USB_REQ_GET_DESCRIPTOR: debug ("get descriptor %d\n", ao_usb_setup.value); - ao_usb_get_descriptor(ao_usb_setup.value); + ao_usb_get_descriptor(ao_usb_setup.value, ao_usb_setup.length); break; case AO_USB_REQ_GET_CONFIGURATION: debug ("get configuration %d\n", ao_usb_configuration); -- cgit v1.2.3 From 36a08dc89ece6e2a2f0f69e3b31da17d66ceb2e2 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 10 Jun 2016 14:40:26 -0700 Subject: altos/cc1115l: Reduce trace buffer size A 32-element trace buffer is all the larger we can fit in teledongle. Signed-off-by: Keith Packard --- src/drivers/ao_cc115l.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drivers/ao_cc115l.c b/src/drivers/ao_cc115l.c index 0246ba02..24180f34 100644 --- a/src/drivers/ao_cc115l.c +++ b/src/drivers/ao_cc115l.c @@ -70,7 +70,7 @@ struct ao_cc115l_trace { const char *comment; }; -#define NUM_TRACE 256 +#define NUM_TRACE 32 static struct ao_cc115l_trace trace[NUM_TRACE]; static int trace_i; -- cgit v1.2.3 From 1704d27248f1845c545ec61cf1bad58bf41189af Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 11 Jun 2016 22:16:12 -0700 Subject: altos/stmf0: Rework the sram allocation to save a few text bytes Boot loaders were going over 4096 bytes of ROM. I suspect we'll need more serious work soon. Signed-off-by: Keith Packard --- src/stmf0/ao_usb_stm.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/stmf0/ao_usb_stm.c b/src/stmf0/ao_usb_stm.c index 63b35b24..6393ee44 100644 --- a/src/stmf0/ao_usb_stm.c +++ b/src/stmf0/ao_usb_stm.c @@ -83,7 +83,9 @@ static uint8_t ao_usb_ep0_out_len; /* Buffer description tables */ static union stm_usb_bdt *ao_usb_bdt; /* USB address of end of allocated storage */ +#if AO_USB_DIRECTIO static uint16_t ao_usb_sram_addr; +#endif /* Pointer to ep0 tx/rx buffers in USB memory */ static uint16_t *ao_usb_ep0_tx_buffer; @@ -362,39 +364,43 @@ ao_usb_init_ep(uint8_t ep, uint32_t addr, uint32_t type, uint32_t stat_rx, uint3 static void ao_usb_alloc_buffers(void) { - ao_usb_sram_addr = 0; + uint16_t sram_addr = 0; ao_usb_bdt = (void *) stm_usb_sram; - ao_usb_sram_addr += 8 * STM_USB_BDT_SIZE; + sram_addr += 8 * STM_USB_BDT_SIZE; - ao_usb_ep0_tx_buffer = ao_usb_packet_buffer_addr(ao_usb_sram_addr); - ao_usb_sram_addr += AO_USB_CONTROL_SIZE; + ao_usb_ep0_tx_buffer = ao_usb_packet_buffer_addr(sram_addr); + sram_addr += AO_USB_CONTROL_SIZE; - ao_usb_ep0_rx_buffer = ao_usb_packet_buffer_addr(ao_usb_sram_addr); - ao_usb_sram_addr += AO_USB_CONTROL_SIZE; + ao_usb_ep0_rx_buffer = ao_usb_packet_buffer_addr(sram_addr); + sram_addr += AO_USB_CONTROL_SIZE; #if AO_USB_HAS_INT - ao_usb_int_tx_offset = ao_usb_sram_addr; - ao_usb_sram_addr += AO_USB_INT_SIZE; + ao_usb_int_tx_offset = sram_addr; + sram_addr += AO_USB_INT_SIZE; #endif #if AO_USB_HAS_OUT - ao_usb_out_rx_buffer = ao_usb_packet_buffer_addr(ao_usb_sram_addr); - ao_usb_out_rx_offset = ao_usb_sram_addr; - ao_usb_sram_addr += AO_USB_OUT_SIZE; + ao_usb_out_rx_buffer = ao_usb_packet_buffer_addr(sram_addr); + ao_usb_out_rx_offset = sram_addr; + sram_addr += AO_USB_OUT_SIZE; #endif #if AO_USB_HAS_IN - ao_usb_in_tx_buffer = ao_usb_packet_buffer_addr(ao_usb_sram_addr); - ao_usb_in_tx_offset = ao_usb_sram_addr; - ao_usb_sram_addr += AO_USB_IN_SIZE; + ao_usb_in_tx_buffer = ao_usb_packet_buffer_addr(sram_addr); + ao_usb_in_tx_offset = sram_addr; + sram_addr += AO_USB_IN_SIZE; #endif #if AO_USB_HAS_IN2 - ao_usb_in2_tx_buffer = ao_usb_packet_buffer_addr(ao_usb_sram_addr); - ao_usb_in2_tx_offset = ao_usb_sram_addr; - ao_usb_sram_addr += AO_USB_IN_SIZE; + ao_usb_in2_tx_buffer = ao_usb_packet_buffer_addr(sram_addr); + ao_usb_in2_tx_offset = sram_addr; + sram_addr += AO_USB_IN_SIZE; +#endif + +#if AO_USB_DIRECTIO + ao_usb_sram_addr = sram_addr; #endif } -- cgit v1.2.3 From eee7fa303fb0d80ac5d7b9c5a86af60333f61951 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 11 Jun 2016 22:17:01 -0700 Subject: altos/stmf0: Remove ao_usb_free This can't work without a lot more effort. Signed-off-by: Keith Packard --- src/stmf0/ao_arch_funcs.h | 3 --- src/stmf0/ao_usb_stm.c | 8 -------- 2 files changed, 11 deletions(-) diff --git a/src/stmf0/ao_arch_funcs.h b/src/stmf0/ao_arch_funcs.h index ccfa3fc7..64311b23 100644 --- a/src/stmf0/ao_arch_funcs.h +++ b/src/stmf0/ao_arch_funcs.h @@ -408,9 +408,6 @@ static inline void ao_arch_start_scheduler(void) { uint16_t * ao_usb_alloc(void); -void -ao_usb_free(uint16_t *buffer); - void ao_usb_write(uint16_t *buffer, uint16_t len); diff --git a/src/stmf0/ao_usb_stm.c b/src/stmf0/ao_usb_stm.c index 6393ee44..fb3d8c85 100644 --- a/src/stmf0/ao_usb_stm.c +++ b/src/stmf0/ao_usb_stm.c @@ -1191,14 +1191,6 @@ ao_usb_alloc(void) return buffer; } -void -ao_usb_free(uint16_t *addr) -{ - uint16_t offset = ao_usb_packet_buffer_offset(addr); - if (offset < ao_usb_sram_addr) - ao_usb_sram_addr = offset; -} - void ao_usb_write(uint16_t *buffer, uint16_t len) { -- cgit v1.2.3 From 96eb350d3dfc83f6dfb31bbab1427f9206acde79 Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Sun, 12 Jun 2016 09:23:36 -0600 Subject: extend "ok" temp range to 40C, since battery charger on bench can drive temp above 35C at times in Bdale and Robert's production testing --- ao-tools/ao-test-baro/ao-test-baro.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ao-tools/ao-test-baro/ao-test-baro.c b/ao-tools/ao-test-baro/ao-test-baro.c index e883de4a..b3058b80 100644 --- a/ao-tools/ao-test-baro/ao-test-baro.c +++ b/ao-tools/ao-test-baro/ao-test-baro.c @@ -169,7 +169,7 @@ do_baro(struct cc_usb *usb) { return 0; } - if (temperature < 20 || 35 < temperature) { + if (temperature < 20 || 40 < temperature) { printf ("weird temperature %f\n", temperature); free_baro(b); return 0; -- cgit v1.2.3 From 7fd28830b6f7a20b35d85a92047ccb94c965fe29 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 15 Jun 2016 22:33:55 -0700 Subject: altosdroid: Auto save freq changes on 'ok' Add any pending changes in the edit entries to the frequency set when the user selects 'ok'. Signed-off-by: Keith Packard --- .../AltosDroid/ManageFrequenciesActivity.java | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/ManageFrequenciesActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/ManageFrequenciesActivity.java index 1e92b89f..d8fd92df 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/ManageFrequenciesActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/ManageFrequenciesActivity.java @@ -125,6 +125,8 @@ public class ManageFrequenciesActivity extends Activity { private void done() { + set(); + if (changed) { AltosFrequency[] frequencies = new AltosFrequency[frequencies_adapter.count()]; for (int i = 0; i < frequencies.length; i++) @@ -164,6 +166,16 @@ public class ManageFrequenciesActivity extends Activity { load_item(); } + private int find(AltosFrequency frequency) { + for (int pos = 0; pos < frequencies_adapter.getCount(); pos++) { + FrequencyItem item = frequencies_adapter.getItem(pos); + if (item.frequency.frequency == frequency.frequency && + item.frequency.description.equals(frequency.description)) + return pos; + } + return -1; + } + private int insert_item(AltosFrequency frequency) { FrequencyItem new_item = new FrequencyItem(frequency); int pos; @@ -200,11 +212,16 @@ public class ManageFrequenciesActivity extends Activity { try { double f = AltosParse.parse_double_locale(frequency_text); + AltosFrequency frequency = new AltosFrequency(f, description_text); + int pos; - int pos = insert_item(new AltosFrequency(f, description_text)); + pos = find(frequency); + if (pos < 0) { + pos = insert_item(frequency); + changed = true; + } frequencies_adapter.selected_item = -1; select_item(pos); - changed = true; } catch (ParseException pe) { } hide_keyboard(); -- cgit v1.2.3 From 04c6f4c54ac10f6464ffb8cab2186ac2b2eafb00 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 15 Jun 2016 22:36:35 -0700 Subject: altosui: Remove missing items from --summary output Check all values for MISSING before printing them. Signed-off-by: Keith Packard --- altosui/AltosUI.java | 49 ++++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java index 5768fd49..74e07463 100644 --- a/altosui/AltosUI.java +++ b/altosui/AltosUI.java @@ -493,38 +493,46 @@ public class AltosUI extends AltosUIFrame { return false; try { AltosFlightStats stats = new AltosFlightStats(states); - if (stats.serial > 0) + System.out.printf("%s:\n", file.toString()); + if (stats.serial != AltosLib.MISSING) System.out.printf("Serial: %5d\n", stats.serial); - if (stats.flight > 0) + if (stats.flight != AltosLib.MISSING) System.out.printf("Flight: %5d\n", stats.flight); - if (stats.year > 0) + if (stats.year != AltosLib.MISSING) System.out.printf("Date: %04d-%02d-%02d\n", stats.year, stats.month, stats.day); - if (stats.hour > 0) + if (stats.hour != AltosLib.MISSING) System.out.printf("Time: %02d:%02d:%02d UTC\n", stats.hour, stats.minute, stats.second); - System.out.printf("Max height: %6.0f m %6.0f ft\n", - stats.max_height, - AltosConvert.meters_to_feet(stats.max_height)); - System.out.printf("Max speed: %6.0f m/s %6.0f ft/s %6.4f Mach\n", - stats.max_speed, - AltosConvert.meters_to_feet(stats.max_speed), - AltosConvert.meters_to_mach(stats.max_speed)); + if (stats.max_height != AltosLib.MISSING) + System.out.printf("Max height: %6.0f m %6.0f ft\n", + stats.max_height, + AltosConvert.meters_to_feet(stats.max_height)); + if (stats.max_speed != AltosLib.MISSING) + System.out.printf("Max speed: %6.0f m/s %6.0f ft/s %6.4f Mach\n", + stats.max_speed, + AltosConvert.meters_to_feet(stats.max_speed), + AltosConvert.meters_to_mach(stats.max_speed)); if (stats.max_acceleration != AltosLib.MISSING) { System.out.printf("Max accel: %6.0f m/s² %6.0f ft/s² %6.2f g\n", stats.max_acceleration, AltosConvert.meters_to_feet(stats.max_acceleration), AltosConvert.meters_to_g(stats.max_acceleration)); } - System.out.printf("Drogue rate: %6.0f m/s %6.0f ft/s\n", - stats.state_speed[Altos.ao_flight_drogue], - AltosConvert.meters_to_feet(stats.state_speed[Altos.ao_flight_drogue])); - System.out.printf("Main rate: %6.0f m/s %6.0f ft/s\n", - stats.state_speed[Altos.ao_flight_main], - AltosConvert.meters_to_feet(stats.state_speed[Altos.ao_flight_main])); - System.out.printf("Flight time: %6.0f s\n", - stats.state_end[Altos.ao_flight_main] - - stats.state_start[Altos.ao_flight_boost]); + if (stats.state_speed[Altos.ao_flight_drogue] != AltosLib.MISSING) + System.out.printf("Drogue rate: %6.0f m/s %6.0f ft/s\n", + stats.state_speed[Altos.ao_flight_drogue], + AltosConvert.meters_to_feet(stats.state_speed[Altos.ao_flight_drogue])); + if (stats.state_speed[Altos.ao_flight_main] != AltosLib.MISSING) + System.out.printf("Main rate: %6.0f m/s %6.0f ft/s\n", + stats.state_speed[Altos.ao_flight_main], + AltosConvert.meters_to_feet(stats.state_speed[Altos.ao_flight_main])); + if (stats.state_end[Altos.ao_flight_main] != AltosLib.MISSING && + stats.state_start[Altos.ao_flight_boost] != AltosLib.MISSING) + System.out.printf("Flight time: %6.0f s\n", + stats.state_end[Altos.ao_flight_main] - + stats.state_start[Altos.ao_flight_boost]); + System.out.printf("\n"); return true; } catch (InterruptedException ie) { } catch (IOException ie) { @@ -536,7 +544,6 @@ public class AltosUI extends AltosUIFrame { try { AltosStateIterable eef = record_iterable(file); - System.out.printf ("process cat\n"); for (AltosState state : eef) { System.out.printf ("tick %d state %d height %g\n", state.tick, state.state(), state.height()); -- cgit v1.2.3 From 2a4d741872449b5332f28e018fa3acc53ed7d891 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 15 Jun 2016 22:37:39 -0700 Subject: altosuilib: Track open frames, exit when none remain This will let us not have the altosui window open by causing the application to shut down when the last frame closes. Signed-off-by: Keith Packard --- altosui/AltosGraphUI.java | 2 -- altosuilib/AltosUIFrame.java | 20 +++++++++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/altosui/AltosGraphUI.java b/altosui/AltosGraphUI.java index 32b59977..4f394d73 100644 --- a/altosui/AltosGraphUI.java +++ b/altosui/AltosGraphUI.java @@ -100,8 +100,6 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { - setVisible(false); - dispose(); AltosUIPreferences.unregister_font_listener(AltosGraphUI.this); AltosPreferences.unregister_units_listener(AltosGraphUI.this); } diff --git a/altosuilib/AltosUIFrame.java b/altosuilib/AltosUIFrame.java index 05266f8d..ac440190 100644 --- a/altosuilib/AltosUIFrame.java +++ b/altosuilib/AltosUIFrame.java @@ -23,8 +23,13 @@ import javax.swing.*; import java.util.*; class AltosUIFrameListener extends WindowAdapter { + @Override public void windowClosing (WindowEvent e) { - AltosUIPreferences.unregister_ui_listener((AltosUIFrame) e.getWindow()); + AltosUIFrame frame = (AltosUIFrame) e.getWindow(); + AltosUIPreferences.unregister_ui_listener(frame); + AltosUIFrame.frame_closed(); + frame.setVisible(false); + frame.dispose(); } } @@ -263,10 +268,23 @@ public class AltosUIFrame extends JFrame implements AltosUIListener, AltosPositi return constraints(x, width, GridBagConstraints.NONE); } + static int open_frames; + + public static void frame_opened() { + ++open_frames; + } + + public static void frame_closed() { + --open_frames; + if (open_frames == 0) + System.exit(0); + } + void init() { AltosUIPreferences.register_ui_listener(this); AltosUIPreferences.register_position_listener(this); position = AltosUIPreferences.position(); + frame_opened(); addWindowListener(new AltosUIFrameListener()); /* Try to make menus live in the menu bar like regular Mac apps */ -- cgit v1.2.3 From f28db1102685c87b9f4278268f7e91f5df18374a Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 15 Jun 2016 22:38:32 -0700 Subject: altosui: Don't open command window when --graph is provided When the user explicitly asks to open a graph, don't bring up the command button window too. Signed-off-by: Keith Packard --- altosui/AltosUI.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java index 74e07463..f50c32e3 100644 --- a/altosui/AltosUI.java +++ b/altosui/AltosUI.java @@ -612,15 +612,13 @@ public class AltosUI extends AltosUIFrame { File file = new File(args[i]); switch (process) { case process_none: - case process_graph: if (altosui == null) altosui = new AltosUI(); + case process_graph: if (!process_graph(file)) ++errors; break; case process_replay: - if (altosui == null) - altosui = new AltosUI(); if (!process_replay(file)) ++errors; break; -- cgit v1.2.3 From 1de8b6c340cec0b5a327392686c5a4e00f201e98 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 15 Jun 2016 22:39:31 -0700 Subject: doc: Updates to 1.6.4 release notes. Note USB fixes for host reboot and other changes. Signed-off-by: Keith Packard --- doc/release-notes-1.6.4.inc | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/doc/release-notes-1.6.4.inc b/doc/release-notes-1.6.4.inc index faa57e94..f976a69d 100644 --- a/doc/release-notes-1.6.4.inc +++ b/doc/release-notes-1.6.4.inc @@ -4,27 +4,37 @@ Version 1.6.4 fixes a bluetooth communication problem with TeleBT v1.0 devices, along with some altosui and altosdroid - minor nits. Ship firmware for some newer devices. + minor nits. It also now ships firmware for some newer devices. == AltOS AltOS fixes: * Fix hardware flow control on TeleBT v1.0. Hardware RTS/CTS - doesn't seem to work, switch from using the - hardware to driving these pins with software. + doesn't seem to work, switch from using the hardware to + driving these pins with software. + + * Fix ARM USB drivers to deal with OS restarts. Needed to + reset all USB-related state when the USB bus is reset. These + fixes affect all STM32L, STM32F0 and LPC11U14 based devices. == AltosUI, TeleGPS and AltosDroid Applications - AltosUI and TeleGPS New Features: + AltosUI, TeleGPS and AltosDroid New Features: * Automatically switch from meters or feet to kilometers or miles for distance units. - AltosUI and TeleGPS Fixes: + * Add Monitor Idle mode to TeleGPS application. + + AltosUI, TeleGPS and AltosDroid Fixes: * Abort map preloading when the preload map dialog is closed. + * In AltosDroid, Don't reconnect to last device if the user + had disconnected it the last time the application was + active. + == Documentation * Mention TeleMega v2.0 in hardware specs table. -- cgit v1.2.3 From 1b5ea911049a8afae6af475a4a2bf62a6e3aa57b Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 15 Jun 2016 22:40:27 -0700 Subject: altoslib: Switch preserved state format to JSON This is much easier to debug than the icky strings with backslashes everywhere. Signed-off-by: Keith Packard --- altoslib/AltosCompanion.java | 28 ++- altoslib/AltosFrequency.java | 21 +- altoslib/AltosGPS.java | 63 +++++- altoslib/AltosGPSSat.java | 25 ++- altoslib/AltosGreatCircle.java | 29 ++- altoslib/AltosIMU.java | 33 ++- altoslib/AltosMag.java | 26 ++- altoslib/AltosMs5607.java | 44 +++- altoslib/AltosParse.java | 26 ++- altoslib/AltosPreferences.java | 34 ++-- altoslib/AltosPreferencesBackend.java | 16 ++ altoslib/AltosQuaternion.java | 22 +- altoslib/AltosRotation.java | 17 +- altoslib/AltosState.java | 373 ++++++++++++++++++++++++++++++++-- altoslib/Makefile.am | 2 + 15 files changed, 716 insertions(+), 43 deletions(-) diff --git a/altoslib/AltosCompanion.java b/altoslib/AltosCompanion.java index 6f18d93e..abb98830 100644 --- a/altoslib/AltosCompanion.java +++ b/altoslib/AltosCompanion.java @@ -19,7 +19,7 @@ package org.altusmetrum.altoslib_11; import java.io.*; -public class AltosCompanion implements AltosHashable { +public class AltosCompanion implements AltosHashable, AltosJsonable { public final static int board_id_telescience = 0x0a; public final static int MAX_CHANNELS = 12; @@ -49,6 +49,17 @@ public class AltosCompanion implements AltosHashable { return h; } + public AltosJson json() { + AltosJson j = new AltosJson(); + + j.put("tick", tick); + j.put("board_id", board_id); + j.put("update_period", update_period); + j.put("channels", channels); + j.put("companion_data", companion_data); + return j; + } + public AltosCompanion(AltosHashSet h) { tick = h.getInt("tick", tick); board_id = h.getInt("board_id", board_id); @@ -63,4 +74,19 @@ public class AltosCompanion implements AltosHashable { return new AltosCompanion(h); } + + public AltosCompanion(AltosJson j) { + tick = j.get_int("tick", tick); + board_id = j.get_int("board_id", board_id); + update_period = j.get_int("update_period", update_period); + channels = j.get_int("channels", channels); + companion_data = j.get_int_array("companion_data", new int[channels]); + } + + public static AltosCompanion fromJson(AltosJson j, AltosCompanion def) { + if (j == null) + return def; + + return new AltosCompanion(j); + } } diff --git a/altoslib/AltosFrequency.java b/altoslib/AltosFrequency.java index f9aa6de6..99828d53 100644 --- a/altoslib/AltosFrequency.java +++ b/altoslib/AltosFrequency.java @@ -21,7 +21,7 @@ import java.io.*; import java.util.*; import java.text.*; -public class AltosFrequency { +public class AltosFrequency implements AltosJsonable { public double frequency; public String description; @@ -66,6 +66,14 @@ public class AltosFrequency { return h; } + public AltosJson json() { + AltosJson j = new AltosJson(); + + j.put("frequency", frequency); + j.put("description", description); + return j; + } + public AltosFrequency(double f, String d) { frequency = f; description = d; @@ -81,4 +89,15 @@ public class AltosFrequency { return def; return new AltosFrequency(h); } + + private AltosFrequency(AltosJson j) { + frequency = j.get_double("frequency", 0.0); + description = j.get_string("description", ""); + } + + public static AltosFrequency fromJson(AltosJson j, AltosFrequency def) { + if (j == null) + return def; + return new AltosFrequency(j); + } } diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java index 371fd7bf..d3710e4e 100644 --- a/altoslib/AltosGPS.java +++ b/altoslib/AltosGPS.java @@ -21,7 +21,7 @@ import java.text.*; import java.util.concurrent.*; import java.io.*; -public class AltosGPS implements Cloneable, AltosHashable { +public class AltosGPS implements Cloneable, AltosHashable, AltosJsonable { public final static int MISSING = AltosLib.MISSING; @@ -417,6 +417,34 @@ public class AltosGPS implements Cloneable, AltosHashable { return h; } + public AltosJson json() { + AltosJson j = new AltosJson(); + + j.put("nsat", nsat); + j.put("locked", locked); + j.put("connected", connected); + j.put("lat", lat); + j.put("lon", lon); + j.put("alt", alt); + j.put("year", year); + j.put("month", month); + j.put("day", day); + j.put("hour", hour); + j.put("minute", minute); + j.put("second", second); + + j.put("ground_speed", ground_speed); + j.put("course", course); + j.put("climb_rate", climb_rate); + j.put("pdop", pdop); + j.put("hdop", hdop); + j.put("vdop", vdop); + j.put("h_error", h_error); + j.put("v_error", v_error); + j.put("cc_gps_sat", cc_gps_sat); + return j; + } + public AltosGPS(AltosHashSet h) { init(); nsat = h.getInt("nsat", nsat); @@ -443,10 +471,43 @@ public class AltosGPS implements Cloneable, AltosHashable { cc_gps_sat = AltosGPSSat.array(h.getString("cc_gps_sat", null)); } + public AltosGPS(AltosJson j) { + init(); + nsat = j.get_int("nsat", nsat); + locked = j.get_boolean("locked", locked); + connected = j.get_boolean("connected", connected); + lat = j.get_double("lat", lat); + lon = j.get_double("lon", lon); + alt = j.get_double("alt", alt); + year = j.get_int("year", year); + month = j.get_int("month", month); + day = j.get_int("day", day); + hour = j.get_int("hour", hour); + minute = j.get_int("minute", minute); + second = j.get_int("second", second); + + ground_speed = j.get_double("ground_speed", ground_speed); + course = j.get_int("course", course); + climb_rate = j.get_double("climb_rate", climb_rate); + pdop = j.get_double("pdop", pdop); + hdop = j.get_double("hdop", hdop); + vdop = j.get_double("vdop", vdop); + h_error = j.get_double("h_error", h_error); + v_error = j.get_double("v_error", v_error); + cc_gps_sat = AltosGPSSat.json_array(j.get("cc_gps_sat")); + } + public static AltosGPS fromHashSet(AltosHashSet h, AltosGPS def) { if (h == null) return def; return new AltosGPS(h); } + + public static AltosGPS fromJson(AltosJson j, AltosGPS def) { + if (j == null) + return def; + + return new AltosGPS(j); + } } diff --git a/altoslib/AltosGPSSat.java b/altoslib/AltosGPSSat.java index ad7a8647..319fe7f1 100644 --- a/altoslib/AltosGPSSat.java +++ b/altoslib/AltosGPSSat.java @@ -22,7 +22,7 @@ import java.text.*; import java.util.*; import java.util.concurrent.*; -public class AltosGPSSat { +public class AltosGPSSat implements AltosJsonable { public int svid; public int c_n0; @@ -41,17 +41,40 @@ public class AltosGPSSat { return h; } + public AltosJson json() { + AltosJson j = new AltosJson(); + j.put("svid", svid); + j.put("c_n0", c_n0); + return j; + } + private AltosGPSSat(AltosHashSet h) { svid = h.getInt("svid", 0); c_n0 = h.getInt("c_n0", 0); } + private AltosGPSSat(AltosJson j) { + svid = j.get_int("svid", 0); + c_n0 = j.get_int("c_n0", 0); + } + static public AltosGPSSat fromHashSet(AltosHashSet h, AltosGPSSat def) { if (h == null) return def; return new AltosGPSSat(h); } + static public AltosGPSSat[] json_array(AltosJson j) { + if (j == null) + return null; + + int size = j.size(); + AltosGPSSat[] sats = new AltosGPSSat[size]; + for (int i = 0; i < size; i++) + sats[i] = new AltosGPSSat(j.get(i)); + return sats; + } + static public AltosGPSSat[] array(String string) { if (string == null) diff --git a/altoslib/AltosGreatCircle.java b/altoslib/AltosGreatCircle.java index 9ec808a5..8fd380a1 100644 --- a/altoslib/AltosGreatCircle.java +++ b/altoslib/AltosGreatCircle.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.lang.Math; import java.io.*; -public class AltosGreatCircle implements Cloneable, AltosHashable { +public class AltosGreatCircle implements Cloneable, AltosHashable, AltosJsonable { public double distance; public double bearing; public double range; @@ -115,6 +115,17 @@ public class AltosGreatCircle implements Cloneable, AltosHashable { return h; } + public AltosJson json() { + AltosJson j = new AltosJson(); + + j.put("distance", distance); + j.put("bearing", bearing); + j.put("range", range); + j.put("elevation", elevation); + + return j; + } + public AltosGreatCircle(AltosHashSet h) { this(); @@ -130,4 +141,20 @@ public class AltosGreatCircle implements Cloneable, AltosHashable { return new AltosGreatCircle(h); } + + public AltosGreatCircle(AltosJson j) { + this(); + + distance = j.get_double("distance", distance); + bearing = j.get_double("bearing", bearing); + range = j.get_double("range", range); + elevation = j.get_double("elevation", elevation); + } + + public static AltosGreatCircle fromJson(AltosJson j, AltosGreatCircle def) { + if (j == null) + return def; + + return new AltosGreatCircle(j); + } } diff --git a/altoslib/AltosIMU.java b/altoslib/AltosIMU.java index df6c4ed3..ecc02f15 100644 --- a/altoslib/AltosIMU.java +++ b/altoslib/AltosIMU.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; -public class AltosIMU implements Cloneable, AltosHashable { +public class AltosIMU implements Cloneable, AltosHashable, AltosJsonable { public int accel_along; public int accel_across; public int accel_through; @@ -128,12 +128,30 @@ public class AltosIMU implements Cloneable, AltosHashable { gyro_yaw = h.getInt("gyro_yaw", gyro_yaw); } + public AltosIMU (AltosJson j) { + this(); + + accel_along = j.get_int("accel_along", accel_along); + accel_across = j.get_int("accel_across", accel_across); + accel_through = j.get_int("accel_through", accel_through); + + gyro_roll = j.get_int("gyro_roll", gyro_roll); + gyro_pitch = j.get_int("gyro_pitch", gyro_pitch); + gyro_yaw = j.get_int("gyro_yaw", gyro_yaw); + } + static public AltosIMU fromHashSet(AltosHashSet h, AltosIMU def) { if (h == null) return def; return new AltosIMU(h); } + static public AltosIMU fromJson(AltosJson j, AltosIMU def) { + if (j == null) + return def; + return new AltosIMU(j); + } + public AltosHashSet hashSet() { AltosHashSet h = new AltosHashSet(); @@ -146,4 +164,17 @@ public class AltosIMU implements Cloneable, AltosHashable { h.putInt("gyro_yaw", gyro_yaw); return h; } + + public AltosJson json() { + AltosJson j = new AltosJson(); + + j.put("accel_along", accel_along); + j.put("accel_across", accel_across); + j.put("accel_through", accel_through); + + j.put("gyro_roll", gyro_roll); + j.put("gyro_pitch", gyro_pitch); + j.put("gyro_yaw", gyro_yaw); + return j; + } } diff --git a/altoslib/AltosMag.java b/altoslib/AltosMag.java index c350ae46..ec98882f 100644 --- a/altoslib/AltosMag.java +++ b/altoslib/AltosMag.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; -public class AltosMag implements Cloneable, AltosHashable { +public class AltosMag implements Cloneable, AltosHashable, AltosJsonable { public int along; public int across; public int through; @@ -103,6 +103,15 @@ public class AltosMag implements Cloneable, AltosHashable { return h; } + public AltosJson json() { + AltosJson j = new AltosJson(); + + j.put("along", along); + j.put("across", across); + j.put("through", through); + return j; + } + public AltosMag(AltosHashSet h) { this(); @@ -117,4 +126,19 @@ public class AltosMag implements Cloneable, AltosHashable { return new AltosMag(h); } + + public AltosMag(AltosJson j) { + this(); + + along = j.get_int("along", along); + across = j.get_int("across", across); + through = j.get_int("through", through); + } + + public static AltosMag fromJson(AltosJson j, AltosMag def) { + if (j == null) + return def; + + return new AltosMag(j); + } } diff --git a/altoslib/AltosMs5607.java b/altoslib/AltosMs5607.java index 88a97828..6d2f2203 100644 --- a/altoslib/AltosMs5607.java +++ b/altoslib/AltosMs5607.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; -public class AltosMs5607 implements AltosHashable { +public class AltosMs5607 implements AltosHashable, AltosJsonable { public int reserved; public int sens; public int off; @@ -185,6 +185,24 @@ public class AltosMs5607 implements AltosHashable { return h; } + public AltosJson json() { + AltosJson j = new AltosJson(); + + j.put("reserved", reserved); + j.put("sens", sens); + j.put("off", off); + j.put("tcs", tcs); + j.put("tco", tco); + j.put("tref", tref); + j.put("tempsens", tempsens); + j.put("crc", crc); + j.put("raw_pres", raw_pres); + j.put("raw_temp", raw_temp); + j.put("pa", pa); + j.put("cc", cc); + return j; + } + public AltosMs5607(AltosHashSet h) { this(); @@ -208,4 +226,28 @@ public class AltosMs5607 implements AltosHashable { return new AltosMs5607(h); } + + public AltosMs5607(AltosJson j) { + this(); + + reserved = j.get_int("reserved", reserved); + sens = j.get_int("sens", sens); + off = j.get_int("off", off); + tcs = j.get_int("tcs", tcs); + tco = j.get_int("tco", tco); + tref = j.get_int("tref", tref); + tempsens = j.get_int("tempsens", tempsens); + crc = j.get_int("crc", crc); + raw_pres = j.get_int("raw_pres", raw_pres); + raw_temp = j.get_int("raw_temp", raw_temp); + pa = j.get_int("pa", pa); + cc = j.get_int("cc", cc); + } + + public static AltosMs5607 fromJson(AltosJson j, AltosMs5607 def) { + if (j == null) + return def; + + return new AltosMs5607(j); + } } diff --git a/altoslib/AltosParse.java b/altoslib/AltosParse.java index fbd049ae..45ef7dac 100644 --- a/altoslib/AltosParse.java +++ b/altoslib/AltosParse.java @@ -49,9 +49,23 @@ public class AltosParse { } } - static NumberFormat nf_locale = NumberFormat.getInstance(); + static NumberFormat get_nf_locale() { + NumberFormat nf = NumberFormat.getInstance(); + nf.setParseIntegerOnly(false); + nf.setGroupingUsed(false); + return nf; + } + + static NumberFormat nf_locale = get_nf_locale(); + + static NumberFormat get_nf_net() { + NumberFormat nf = NumberFormat.getInstance(Locale.ROOT); + nf.setParseIntegerOnly(false); + nf.setGroupingUsed(false); + return nf; + } - static NumberFormat nf_net = NumberFormat.getInstance(Locale.ROOT); + static NumberFormat nf_net = get_nf_net(); public static double parse_double_locale(String str) throws ParseException { try { @@ -67,14 +81,18 @@ public class AltosParse { public static double parse_double_net(String str) throws ParseException { try { - return nf_net.parse(str.trim()).doubleValue(); + String t = str.trim(); +// System.out.printf("Parse string \"%s\" trim \"%s\"\n", str, t); + return nf_net.parse(t).doubleValue(); } catch (ParseException pe) { throw new ParseException("error parsing double " + str, 0); } } public static String format_double_net(double number) { - return nf_net.format(number); + String ret = nf_net.format(number); +// System.out.printf("format double %f \"%s\"\n", number, ret); + return ret; } public static double parse_coord(String coord) throws ParseException { diff --git a/altoslib/AltosPreferences.java b/altoslib/AltosPreferences.java index 3f8e7a07..8e625674 100644 --- a/altoslib/AltosPreferences.java +++ b/altoslib/AltosPreferences.java @@ -133,19 +133,25 @@ public class AltosPreferences { static int map_type; public static AltosFrequency[] load_common_frequencies() { - AltosFrequency[] frequencies = null; - AltosHashSet[] sets = AltosHashSet.array(backend.getString(frequenciesPreference,null)); - if (sets != null) { - ArrayList freqs = new ArrayList(); + AltosJson sets; + + try { + sets = AltosJson.fromString(backend.getString(frequenciesPreference,null)); - for (int i = 0; i < sets.length; i++) { - AltosFrequency f = AltosFrequency.fromHashSet(sets[i], null); - if (f != null) - freqs.add(f); + if (sets != null) { + ArrayList freqs = new ArrayList(); + + for (int i = 0; i < sets.size(); i++) { + AltosFrequency f = AltosFrequency.fromJson(sets.get(i), null); + if (f != null) + freqs.add(f); + } + frequencies = freqs.toArray(new AltosFrequency[0]); } - frequencies = freqs.toArray(new AltosFrequency[0]); + } catch (Exception e) { + sets = null; } if (frequencies == null) { @@ -178,10 +184,8 @@ public class AltosPreferences { } public static void save_common_frequencies() { - AltosHashSet[] sets = new AltosHashSet[common_frequencies.length]; - for (int i = 0; i < sets.length; i++) - sets[i] = common_frequencies[i].hashSet(); - backend.putString(frequenciesPreference, AltosHashSet.toString(sets)); + AltosJson json = new AltosJson(common_frequencies); + backend.putString(frequenciesPreference, json.toString()); flush_preferences(); } @@ -373,7 +377,7 @@ public class AltosPreferences { public static void set_state(AltosState state) { synchronized(backend) { - backend.putHashSet(String.format(statePreferenceFormat, state.serial), state.hashSet()); + backend.putJson(String.format(statePreferenceFormat, state.serial), state.json()); backend.putInt(statePreferenceLatest, state.serial); flush_preferences(); } @@ -413,7 +417,7 @@ public class AltosPreferences { public static AltosState state(int serial) { synchronized(backend) { try { - return AltosState.fromHashSet(backend.getHashSet(String.format(statePreferenceFormat, serial))); + return AltosState.fromJson(backend.getJson(String.format(statePreferenceFormat, serial))); } catch (Exception e) { return null; } diff --git a/altoslib/AltosPreferencesBackend.java b/altoslib/AltosPreferencesBackend.java index 9131ad39..d4c3d7e5 100644 --- a/altoslib/AltosPreferencesBackend.java +++ b/altoslib/AltosPreferencesBackend.java @@ -50,6 +50,22 @@ public abstract class AltosPreferencesBackend { putString(key, h.toString()); } + public AltosJson getJson(String key) { + String value = getString(key, null); + + if (value == null) + return null; + try { + return AltosJson.fromString(value); + } catch (IllegalArgumentException ie) { + return null; + } + } + + public void putJson(String key, AltosJson j) { + putString(key, j.toString()); + } + public abstract boolean nodeExists(String key); public abstract AltosPreferencesBackend node(String key); diff --git a/altoslib/AltosQuaternion.java b/altoslib/AltosQuaternion.java index af9eb475..6a09bb8e 100644 --- a/altoslib/AltosQuaternion.java +++ b/altoslib/AltosQuaternion.java @@ -17,7 +17,7 @@ package org.altusmetrum.altoslib_11; -public class AltosQuaternion implements AltosHashable { +public class AltosQuaternion implements AltosHashable, AltosJsonable { double r; /* real bit */ double x, y, z; /* imaginary bits */ @@ -158,6 +158,16 @@ public class AltosQuaternion implements AltosHashable { return h; } + public AltosJson json() { + AltosJson j = new AltosJson(); + + j.put("r", r); + j.put("x", x); + j.put("y", y); + j.put("z", z); + return j; + } + public AltosQuaternion(AltosHashSet h) { if (h == null) return; @@ -167,4 +177,14 @@ public class AltosQuaternion implements AltosHashable { y = h.getDouble("y", 0); z = h.getDouble("z", 0); } + + public AltosQuaternion(AltosJson j) { + if (j == null) + return; + + r = j.get_double("r", 1); + x = j.get_double("x", 0); + y = j.get_double("y", 0); + z = j.get_double("z", 0); + } } diff --git a/altoslib/AltosRotation.java b/altoslib/AltosRotation.java index e9c447ad..4b7ab407 100644 --- a/altoslib/AltosRotation.java +++ b/altoslib/AltosRotation.java @@ -17,7 +17,7 @@ package org.altusmetrum.altoslib_11; -public class AltosRotation implements AltosHashable { +public class AltosRotation implements AltosHashable, AltosJsonable { private AltosQuaternion rotation; public double tilt() { @@ -55,6 +55,10 @@ public class AltosRotation implements AltosHashable { return h; } + public AltosJson json() { + return rotation.json(); + } + public AltosRotation(AltosHashSet h) { rotation = new AltosQuaternion(h.getHash("rotation")); } @@ -65,4 +69,15 @@ public class AltosRotation implements AltosHashable { return new AltosRotation(h); } + + public AltosRotation(AltosJson j) { + rotation = new AltosQuaternion(j); + } + + public static AltosRotation fromJson(AltosJson j, AltosRotation def) { + if (j == null) + return def; + + return new AltosRotation(j); + } } diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index d359d67a..a3c6cc34 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -46,7 +46,7 @@ public class AltosState implements Cloneable, AltosHashable { private int prev_tick; public int boost_tick; - class AltosValue implements AltosHashable { + class AltosValue implements AltosHashable, AltosJsonable { double value; double prev_value; private double max_value; @@ -188,6 +188,17 @@ public class AltosState implements Cloneable, AltosHashable { return h; } + public AltosJson json() { + AltosJson j = new AltosJson(); + + j.put("value", value); + j.put("prev_value", prev_value); + j.put("max_value", max_value); + j.put("set_time", set_time); + j.put("prev_set_time", prev_set_time); + return j; + } + AltosValue(AltosHashSet h) { this(); if (h != null) { @@ -199,6 +210,17 @@ public class AltosState implements Cloneable, AltosHashable { } } + AltosValue(AltosJson j) { + this(); + if (j != null) { + value = j.get_double("value", value); + prev_value = j.get_double("prev_value", prev_value); + max_value = j.get_double("max_value", max_value); + set_time = j.get_double("set_time", 0); + prev_set_time = j.get_double("prev_set_time", 0); + } + } + AltosValue() { value = AltosLib.MISSING; prev_value = AltosLib.MISSING; @@ -213,9 +235,15 @@ public class AltosState implements Cloneable, AltosHashable { return new AltosValue(h); } - class AltosCValue implements AltosHashable { + AltosValue AltosValue_fromJson(AltosJson j, AltosValue def) { + if (j == null) + return def; + return new AltosValue(j); + } + + class AltosCValue implements AltosHashable, AltosJsonable { - class AltosIValue extends AltosValue implements AltosHashable { + class AltosIValue extends AltosValue implements AltosHashable, AltosJsonable { boolean can_max() { return c_can_max(); } @@ -227,6 +255,10 @@ public class AltosState implements Cloneable, AltosHashable { AltosIValue(AltosHashSet h) { super(h); } + + AltosIValue(AltosJson j) { + super(j); + } }; public AltosIValue measured; @@ -320,7 +352,6 @@ public class AltosState implements Cloneable, AltosHashable { computed = new AltosIValue(); } - public AltosHashSet hashSet() { AltosHashSet h = new AltosHashSet(); @@ -329,10 +360,23 @@ public class AltosState implements Cloneable, AltosHashable { return h; } + public AltosJson json() { + AltosJson j = new AltosJson(); + + j.put("measured", measured.json()); + j.put("computed", computed.json()); + return j; + } + AltosCValue(AltosHashSet h) { measured = new AltosIValue(h.getHash("measured")); computed = new AltosIValue(h.getHash("computed")); } + + AltosCValue(AltosJson j) { + measured = new AltosIValue(j.get("measured")); + computed = new AltosIValue(j.get("computed")); + } } AltosCValue AltosCValue_fromHashSet(AltosHashSet h, AltosCValue def) { @@ -341,6 +385,12 @@ public class AltosState implements Cloneable, AltosHashable { return new AltosCValue(h); } + AltosCValue AltosCValue_fromJson(AltosJson j, AltosCValue def) { + if (j == null) + return def; + return new AltosCValue(j); + } + private int state; public int flight; public int serial; @@ -394,6 +444,10 @@ public class AltosState implements Cloneable, AltosHashable { AltosGpsGroundAltitude (AltosHashSet h) { super(h); } + + AltosGpsGroundAltitude (AltosJson j) { + super(j); + } } AltosGpsGroundAltitude AltosGpsGroundAltitude_fromHashSet(AltosHashSet h, AltosGpsGroundAltitude def) { @@ -401,6 +455,11 @@ public class AltosState implements Cloneable, AltosHashable { return new AltosGpsGroundAltitude(h); } + AltosGpsGroundAltitude AltosGpsGroundAltitude_fromJson(AltosJson j, AltosGpsGroundAltitude def) { + if (j == null) return def; + return new AltosGpsGroundAltitude(j); + } + private AltosGpsGroundAltitude gps_ground_altitude; public double gps_ground_altitude() { @@ -430,6 +489,10 @@ public class AltosState implements Cloneable, AltosHashable { AltosGroundPressure (AltosHashSet h) { super(h); } + + AltosGroundPressure (AltosJson j) { + super(j); + } } AltosGroundPressure AltosGroundPressure_fromHashSet(AltosHashSet h, AltosGroundPressure def) { @@ -437,6 +500,11 @@ public class AltosState implements Cloneable, AltosHashable { return new AltosGroundPressure(h); } + AltosGroundPressure AltosGroundPressure_fromJson(AltosJson j, AltosGroundPressure def) { + if (j == null) return def; + return new AltosGroundPressure(j); + } + private AltosGroundPressure ground_pressure; public double ground_pressure() { @@ -473,6 +541,10 @@ public class AltosState implements Cloneable, AltosHashable { AltosAltitude (AltosHashSet h) { super(h); } + + AltosAltitude (AltosJson j) { + super(j); + } } AltosAltitude AltosAltitude_fromHashSet(AltosHashSet h, AltosAltitude def) { @@ -480,6 +552,11 @@ public class AltosState implements Cloneable, AltosHashable { return new AltosAltitude(h); } + AltosAltitude AltosAltitude_fromJson(AltosJson j, AltosAltitude def) { + if (j == null) return def; + return new AltosAltitude(j); + } + private AltosAltitude altitude; class AltosGpsAltitude extends AltosValue implements AltosHashable { @@ -506,6 +583,10 @@ public class AltosState implements Cloneable, AltosHashable { AltosGpsAltitude (AltosHashSet h) { super(h); } + + AltosGpsAltitude (AltosJson j) { + super(j); + } } AltosGpsAltitude AltosGpsAltitude_fromHashSet(AltosHashSet h, AltosGpsAltitude def) { @@ -513,6 +594,11 @@ public class AltosState implements Cloneable, AltosHashable { return new AltosGpsAltitude(h); } + AltosGpsAltitude AltosGpsAltitude_fromJson(AltosJson j, AltosGpsAltitude def) { + if (j == null) return def; + return new AltosGpsAltitude(j); + } + private AltosGpsAltitude gps_altitude; private AltosValue gps_ground_speed; @@ -594,6 +680,10 @@ public class AltosState implements Cloneable, AltosHashable { AltosPressure (AltosHashSet h) { super(h); } + + AltosPressure (AltosJson j) { + super(j); + } } AltosPressure AltosPressure_fromHashSet(AltosHashSet h, AltosPressure def) { @@ -601,6 +691,11 @@ public class AltosState implements Cloneable, AltosHashable { return new AltosPressure(h); } + AltosPressure AltosPressure_fromJson(AltosJson j, AltosPressure def) { + if (j == null) return def; + return new AltosPressure(j); + } + private AltosPressure pressure; public double pressure() { @@ -693,6 +788,10 @@ public class AltosState implements Cloneable, AltosHashable { AltosSpeed (AltosHashSet h) { super(h); } + + AltosSpeed (AltosJson j) { + super(j); + } } AltosSpeed AltosSpeed_fromHashSet(AltosHashSet h, AltosSpeed def) { @@ -700,6 +799,11 @@ public class AltosState implements Cloneable, AltosHashable { return new AltosSpeed(h); } + AltosSpeed AltosSpeed_fromJson(AltosJson j, AltosSpeed def) { + if (j == null) return def; + return new AltosSpeed(j); + } + private AltosSpeed speed; public double speed() { @@ -747,6 +851,10 @@ public class AltosState implements Cloneable, AltosHashable { AltosAccel (AltosHashSet h) { super(h); } + + AltosAccel (AltosJson j) { + super(j); + } } AltosAccel AltosAccel_fromHashSet(AltosHashSet h, AltosAccel def) { @@ -754,6 +862,11 @@ public class AltosState implements Cloneable, AltosHashable { return new AltosAccel(h); } + AltosAccel AltosAccel_fromJson(AltosJson j, AltosAccel def) { + if (j == null) return def; + return new AltosAccel(j); + } + AltosAccel acceleration; public double acceleration() { @@ -1639,16 +1752,31 @@ public class AltosState implements Cloneable, AltosHashable { AltosState s = new AltosState(); s.copy(this); - AltosHashSet hash = hashSet(); - String onetrip = hash.toString(); - AltosHashSet back = AltosHashSet.fromString(onetrip); - AltosState tripstate = AltosState.fromHashSet(back); - AltosHashSet triphash = tripstate.hashSet(); - String twotrip = triphash.toString(); - - if (!onetrip.equals(twotrip)) { - System.out.printf("%s\n%s\n", onetrip, twotrip); - System.exit(1); + if (false) { + AltosJson json = json(); + String onetrip = json.toPrettyString(); + AltosJson back = AltosJson.fromString(onetrip); + AltosState tripstate = AltosState.fromJson(back); + AltosJson tripjson = tripstate.json(); + String twotrip = tripjson.toPrettyString(); + + if (!onetrip.equals(twotrip)) { + System.out.printf("one:\n%s\ntwo:\n%s\n", onetrip, twotrip); + System.exit(1); + } + } + if (false) { + AltosHashSet hash = hashSet(); + String onetrip = hash.toString(); + AltosHashSet back = AltosHashSet.fromString(onetrip); + AltosState tripstate = AltosState.fromHashSet(back); + AltosHashSet triphash = tripstate.hashSet(); + String twotrip = triphash.toString(); + + if (!onetrip.equals(twotrip)) { + System.out.printf("%s\n%s\n", onetrip, twotrip); + System.exit(1); + } } return s; } @@ -1763,6 +1891,112 @@ public class AltosState implements Cloneable, AltosHashable { return h; } + public AltosJson json() { + AltosJson j = new AltosJson(); + + j.put("valid", true); + j.put("set", set); + j.put("received_time", received_time); + j.put("time", time); + j.put("prev_time", prev_time); + j.put("time_change", time_change); + j.put("tick", tick); + j.put("prev_tick", prev_tick); + j.put("boost_tick", boost_tick); + j.put("state", state); + j.put("flight", flight); + j.put("serial", serial); + j.put("altitude_32", altitude_32); + j.put("receiver_serial", receiver_serial); + j.put("landed", landed); + j.put("ascent", ascent); + j.put("boost", boost); + j.put("rssi", rssi); + j.put("status", status); + j.put("device_type", device_type); + j.put("config_major", config_major); + j.put("config_minor", config_minor); + j.put("apogee_delay", apogee_delay); + j.put("main_deploy", main_deploy); + j.put("flight_log_max", flight_log_max); + j.put("ground_altitude", ground_altitude); + j.put("gps_ground_altitude", gps_ground_altitude); + j.put("ground_pressure", ground_pressure); + j.put("altitude", altitude); + j.put("gps_altitude", gps_altitude); + j.put("gps_ground_speed", gps_ground_speed); + j.put("gps_ascent_rate", gps_ascent_rate); + j.put("gps_course", gps_course); + j.put("gps_speed", gps_speed); + j.put("pressure", pressure); + j.put("speed", speed); + j.put("acceleration", acceleration); + j.put("orient", orient); + j.put("kalman_height", kalman_height); + j.put("kalman_speed", kalman_speed); + j.put("kalman_acceleration", kalman_acceleration); + + j.put("battery_voltage",battery_voltage); + j.put("pyro_voltage",pyro_voltage); + j.put("temperature",temperature); + j.put("apogee_voltage",apogee_voltage); + j.put("main_voltage",main_voltage); + j.put("ignitor_voltage",ignitor_voltage); + j.put("gps", gps); + j.put("temp_gps", temp_gps); + j.put("temp_gps_sat_tick", temp_gps_sat_tick); + j.put("gps_pending", gps_pending); + j.put("gps_sequence", gps_sequence); + j.put("imu", imu); + j.put("mag", mag); + + j.put("npad", npad); + j.put("gps_waiting", gps_waiting); + j.put("gps_ready", gps_ready); + j.put("ngps", ngps); + j.put("from_pad", from_pad); + j.put("elevation", elevation); + j.put("range", range); + j.put("gps_height", gps_height); + j.put("pad_lat", pad_lat); + j.put("pad_lon", pad_lon); + j.put("pad_alt", pad_alt); + j.put("speak_tick", speak_tick); + j.put("speak_altitude", speak_altitude); + j.put("callsign", callsign); + j.put("firmware_version", firmware_version); + j.put("accel_plus_g", accel_plus_g); + j.put("accel_minus_g", accel_minus_g); + j.put("accel", accel); + j.put("ground_accel", ground_accel); + j.put("ground_accel_avg", ground_accel_avg); + j.put("log_format", log_format); + j.put("log_space", log_space); + j.put("product", product); + j.put("baro", baro); + j.put("companion", companion); + j.put("pyro_fired", pyro_fired); + j.put("accel_zero_along", accel_zero_along); + j.put("accel_zero_across", accel_zero_across); + j.put("accel_zero_through", accel_zero_through); + + j.put("rotation", rotation); + j.put("ground_rotation", ground_rotation); + + j.put("pad_orientation", pad_orientation); + + j.put("accel_ground_along", accel_ground_along); + j.put("accel_ground_across", accel_ground_across); + j.put("accel_ground_through", accel_ground_through); + + j.put("gyro_zero_roll", gyro_zero_roll); + j.put("gyro_zero_pitch", gyro_zero_pitch); + j.put("gyro_zero_yaw", gyro_zero_yaw); + + j.put("last_imu_time", last_imu_time); + return j; + } + public AltosState(AltosHashSet h) { this(); @@ -1867,6 +2101,109 @@ public class AltosState implements Cloneable, AltosHashable { last_imu_time = h.getDouble("last_imu_time", last_imu_time); } + public AltosState(AltosJson j) { + this(); + + set = j.get_int("set", set); + received_time = j.get_long("received_time", received_time); + time = j.get_double("time", time); + prev_time = j.get_double("prev_time", prev_time); + time_change = j.get_double("time_change", time_change); + tick = j.get_int("tick", tick); + prev_tick = j.get_int("prev_tick", prev_tick); + boost_tick = j.get_int("boost_tick", boost_tick); + state = j.get_int("state", state); + flight = j.get_int("flight", flight); + serial = j.get_int("serial", serial); + altitude_32 = j.get_int("altitude_32", altitude_32); + receiver_serial = j.get_int("receiver_serial", receiver_serial); + landed = j.get_boolean("landed", landed); + ascent = j.get_boolean("ascent", ascent); + boost = j.get_boolean("boost", boost); + rssi = j.get_int("rssi", rssi); + status = j.get_int("status", status); + device_type = j.get_int("device_type", device_type); + config_major = j.get_int("config_major", config_major); + config_minor = j.get_int("config_minor", config_minor); + apogee_delay = j.get_int("apogee_delay", apogee_delay); + main_deploy = j.get_int("main_deploy", main_deploy); + flight_log_max = j.get_int("flight_log_max", flight_log_max); + ground_altitude = AltosCValue_fromJson(j.get("ground_altitude"), ground_altitude); + gps_ground_altitude = AltosGpsGroundAltitude_fromJson(j.get("gps_ground_altitude"), gps_ground_altitude); + ground_pressure = AltosGroundPressure_fromJson(j.get("ground_pressure"), ground_pressure); + altitude = AltosAltitude_fromJson(j.get("altitude"), altitude); + gps_altitude = AltosGpsAltitude_fromJson(j.get("gps_altitude"), gps_altitude); + gps_ground_speed = AltosValue_fromJson(j.get("gps_ground_speed"), gps_ground_speed); + gps_ascent_rate = AltosValue_fromJson(j.get("gps_ascent_rate"), gps_ascent_rate); + gps_course = AltosValue_fromJson(j.get("gps_course"), gps_course); + gps_speed = AltosValue_fromJson(j.get("gps_speed"), gps_speed); + pressure = AltosPressure_fromJson(j.get("pressure"), pressure); + speed = AltosSpeed_fromJson(j.get("speed"), speed); + acceleration = AltosAccel_fromJson(j.get("acceleration"), acceleration); + orient = AltosCValue_fromJson(j.get("orient"), orient); + kalman_height = AltosValue_fromJson(j.get("kalman_height"), kalman_height); + kalman_speed = AltosValue_fromJson(j.get("kalman_speed"), kalman_speed); + kalman_acceleration = AltosValue_fromJson(j.get("kalman_acceleration"), kalman_acceleration); + + battery_voltage = j.get_double("battery_voltage", battery_voltage); + pyro_voltage = j.get_double("pyro_voltage", pyro_voltage); + temperature = j.get_double("temperature", temperature); + apogee_voltage = j.get_double("apogee_voltage", apogee_voltage); + main_voltage= j.get_double("main_voltage", main_voltage); + ignitor_voltage = j.get_double_array("ignitor_voltage", ignitor_voltage); + gps = AltosGPS.fromJson(j.get("gps"), gps); + temp_gps = AltosGPS.fromJson(j.get("temp_gps"), temp_gps); + temp_gps_sat_tick = j.get_int("temp_gps_sat_tick", temp_gps_sat_tick); + gps_pending = j.get_boolean("gps_pending", gps_pending); + gps_sequence = j.get_int("gps_sequence", gps_sequence); + imu = AltosIMU.fromJson(j.get("imu"), imu); + mag = AltosMag.fromJson(j.get("mag"), mag); + + npad = j.get_int("npad", npad); + gps_waiting = j.get_int("gps_waiting", gps_waiting); + gps_ready = j.get_boolean("gps_ready", gps_ready); + ngps = j.get_int("ngps", ngps); + from_pad = AltosGreatCircle.fromJson(j.get("from_pad"), from_pad); + elevation = j.get_double("elevation", elevation); + range = j.get_double("range", range); + gps_height = j.get_double("gps_height", gps_height); + pad_lat = j.get_double("pad_lat", pad_lat); + pad_lon = j.get_double("pad_lon", pad_lon); + pad_alt = j.get_double("pad_alt", pad_alt); + speak_tick = j.get_int("speak_tick", speak_tick); + speak_altitude = j.get_double("speak_altitude", speak_altitude); + callsign = j.get_string("callsign", callsign); + firmware_version = j.get_string("firmware_version", firmware_version); + accel_plus_g = j.get_double("accel_plus_g", accel_plus_g); + accel_minus_g = j.get_double("accel_minus_g", accel_minus_g); + accel = j.get_double("accel", accel); + ground_accel = j.get_double("ground_accel", ground_accel); + ground_accel_avg = j.get_double("ground_accel_avg", ground_accel_avg); + log_format = j.get_int("log_format", log_format); + log_space = j.get_int("log_space", log_space); + product = j.get_string("product", product); + baro = AltosMs5607.fromJson(j.get("baro"), baro); + companion = AltosCompanion.fromJson(j.get("companion"), companion); + pyro_fired = j.get_int("pyro_fired", pyro_fired); + accel_zero_along = j.get_double("accel_zero_along", accel_zero_along); + accel_zero_across = j.get_double("accel_zero_across", accel_zero_across); + accel_zero_through = j.get_double("accel_zero_through", accel_zero_through); + + rotation = AltosRotation.fromJson(j.get("rotation"), rotation); + ground_rotation = AltosRotation.fromJson(j.get("ground_rotation"), ground_rotation); + + pad_orientation = j.get_int("pad_orientation", pad_orientation); + + accel_ground_along = j.get_double("accel_ground_along", accel_ground_along); + accel_ground_across = j.get_double("accel_ground_across", accel_ground_across); + accel_ground_through = j.get_double("accel_ground_through", accel_ground_through); + + gyro_zero_roll = j.get_double("gyro_zero_roll", gyro_zero_roll); + gyro_zero_pitch = j.get_double("gyro_zero_pitch", gyro_zero_pitch); + gyro_zero_yaw = j.get_double("gyro_zero_yaw", gyro_zero_yaw); + + last_imu_time = j.get_double("last_imu_time", last_imu_time); + } public static AltosState fromHashSet(AltosHashSet h) { if (h == null) return null; @@ -1874,4 +2211,12 @@ public class AltosState implements Cloneable, AltosHashable { return null; return new AltosState(h); } + + public static AltosState fromJson(AltosJson j) { + if (j == null) + return null; + if (!j.get_boolean("valid", false)) + return null; + return new AltosState(j); + } } diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am index d4554df3..534d2047 100644 --- a/altoslib/Makefile.am +++ b/altoslib/Makefile.am @@ -163,6 +163,8 @@ altoslib_JAVA = \ AltosMapTypeListener.java \ AltosHashSet.java \ AltosHashable.java \ + AltosJson.java \ + AltosJsonable.java \ AltosVersion.java JAR=altoslib_$(ALTOSLIB_VERSION).jar -- cgit v1.2.3 From f7e2f7f430e612c682bf55478860054ce94b995f Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 15 Jun 2016 22:52:08 -0700 Subject: altoslib: Remove AltosHashSet code Everything has switched to JSON now. Signed-off-by: Keith Packard --- altoslib/AltosCompanion.java | 28 +-- altoslib/AltosFrequency.java | 19 -- altoslib/AltosGPS.java | 63 +----- altoslib/AltosGPSSat.java | 56 ------ altoslib/AltosGreatCircle.java | 29 +-- altoslib/AltosHashSet.java | 316 ----------------------------- altoslib/AltosHashable.java | 25 --- altoslib/AltosIMU.java | 33 +--- altoslib/AltosMag.java | 26 +-- altoslib/AltosMs5607.java | 44 +---- altoslib/AltosPreferencesBackend.java | 12 -- altoslib/AltosQuaternion.java | 22 +-- altoslib/AltosRotation.java | 20 +- altoslib/AltosState.java | 360 +--------------------------------- altoslib/Makefile.am | 2 - 15 files changed, 16 insertions(+), 1039 deletions(-) delete mode 100644 altoslib/AltosHashSet.java delete mode 100644 altoslib/AltosHashable.java diff --git a/altoslib/AltosCompanion.java b/altoslib/AltosCompanion.java index abb98830..2db8ea1b 100644 --- a/altoslib/AltosCompanion.java +++ b/altoslib/AltosCompanion.java @@ -19,7 +19,7 @@ package org.altusmetrum.altoslib_11; import java.io.*; -public class AltosCompanion implements AltosHashable, AltosJsonable { +public class AltosCompanion implements AltosJsonable { public final static int board_id_telescience = 0x0a; public final static int MAX_CHANNELS = 12; @@ -38,17 +38,6 @@ public class AltosCompanion implements AltosHashable, AltosJsonable { companion_data = new int[channels]; } - public AltosHashSet hashSet() { - AltosHashSet h = new AltosHashSet(); - - h.putInt("tick", tick); - h.putInt("board_id", board_id); - h.putInt("update_period", update_period); - h.putInt("channels", channels); - h.putIntArray("companion_data", companion_data); - return h; - } - public AltosJson json() { AltosJson j = new AltosJson(); @@ -60,21 +49,6 @@ public class AltosCompanion implements AltosHashable, AltosJsonable { return j; } - public AltosCompanion(AltosHashSet h) { - tick = h.getInt("tick", tick); - board_id = h.getInt("board_id", board_id); - update_period = h.getInt("update_period", update_period); - channels = h.getInt("channels", channels); - companion_data = h.getIntArray("companion_data", new int[channels]); - } - - public static AltosCompanion fromHashSet(AltosHashSet h, AltosCompanion def) { - if (h == null) - return def; - - return new AltosCompanion(h); - } - public AltosCompanion(AltosJson j) { tick = j.get_int("tick", tick); board_id = j.get_int("board_id", board_id); diff --git a/altoslib/AltosFrequency.java b/altoslib/AltosFrequency.java index 99828d53..3c1631a8 100644 --- a/altoslib/AltosFrequency.java +++ b/altoslib/AltosFrequency.java @@ -58,14 +58,6 @@ public class AltosFrequency implements AltosJsonable { return diff < 0.010; } - public AltosHashSet hashSet() { - AltosHashSet h = new AltosHashSet(); - - h.putDouble("frequency", frequency); - h.putString("description", description); - return h; - } - public AltosJson json() { AltosJson j = new AltosJson(); @@ -79,17 +71,6 @@ public class AltosFrequency implements AltosJsonable { description = d; } - private AltosFrequency(AltosHashSet h) { - frequency = h.getDouble("frequency", 0.0); - description = h.getString("description", ""); - } - - public static AltosFrequency fromHashSet(AltosHashSet h, AltosFrequency def) { - if (h == null) - return def; - return new AltosFrequency(h); - } - private AltosFrequency(AltosJson j) { frequency = j.get_double("frequency", 0.0); description = j.get_string("description", ""); diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java index d3710e4e..ba2eda1b 100644 --- a/altoslib/AltosGPS.java +++ b/altoslib/AltosGPS.java @@ -21,7 +21,7 @@ import java.text.*; import java.util.concurrent.*; import java.io.*; -public class AltosGPS implements Cloneable, AltosHashable, AltosJsonable { +public class AltosGPS implements Cloneable, AltosJsonable { public final static int MISSING = AltosLib.MISSING; @@ -389,34 +389,6 @@ public class AltosGPS implements Cloneable, AltosHashable, AltosJsonable { } } - public AltosHashSet hashSet() { - AltosHashSet h = new AltosHashSet(); - - h.putInt("nsat", nsat); - h.putBoolean("locked", locked); - h.putBoolean("connected", connected); - h.putDouble("lat", lat); - h.putDouble("lon", lon); - h.putDouble("alt", alt); - h.putInt("year", year); - h.putInt("month", month); - h.putInt("day", day); - h.putInt("hour", hour); - h.putInt("minute", minute); - h.putInt("second", second); - - h.putDouble("ground_speed", ground_speed); - h.putInt("course", course); - h.putDouble("climb_rate", climb_rate); - h.putDouble("pdop", pdop); - h.putDouble("hdop", hdop); - h.putDouble("vdop", vdop); - h.putDouble("h_error", h_error); - h.putDouble("v_error", v_error); - h.putString("cc_gps_sat", AltosGPSSat.toString(cc_gps_sat)); - return h; - } - public AltosJson json() { AltosJson j = new AltosJson(); @@ -445,32 +417,6 @@ public class AltosGPS implements Cloneable, AltosHashable, AltosJsonable { return j; } - public AltosGPS(AltosHashSet h) { - init(); - nsat = h.getInt("nsat", nsat); - locked = h.getBoolean("locked", locked); - connected = h.getBoolean("connected", connected); - lat = h.getDouble("lat", lat); - lon = h.getDouble("lon", lon); - alt = h.getDouble("alt", alt); - year = h.getInt("year", year); - month = h.getInt("month", month); - day = h.getInt("day", day); - hour = h.getInt("hour", hour); - minute = h.getInt("minute", minute); - second = h.getInt("second", second); - - ground_speed = h.getDouble("ground_speed", ground_speed); - course = h.getInt("course", course); - climb_rate = h.getDouble("climb_rate", climb_rate); - pdop = h.getDouble("pdop", pdop); - hdop = h.getDouble("hdop", hdop); - vdop = h.getDouble("vdop", vdop); - h_error = h.getDouble("h_error", h_error); - v_error = h.getDouble("v_error", v_error); - cc_gps_sat = AltosGPSSat.array(h.getString("cc_gps_sat", null)); - } - public AltosGPS(AltosJson j) { init(); nsat = j.get_int("nsat", nsat); @@ -497,13 +443,6 @@ public class AltosGPS implements Cloneable, AltosHashable, AltosJsonable { cc_gps_sat = AltosGPSSat.json_array(j.get("cc_gps_sat")); } - public static AltosGPS fromHashSet(AltosHashSet h, AltosGPS def) { - if (h == null) - return def; - - return new AltosGPS(h); - } - public static AltosGPS fromJson(AltosJson j, AltosGPS def) { if (j == null) return def; diff --git a/altoslib/AltosGPSSat.java b/altoslib/AltosGPSSat.java index 319fe7f1..8cdeed0e 100644 --- a/altoslib/AltosGPSSat.java +++ b/altoslib/AltosGPSSat.java @@ -34,13 +34,6 @@ public class AltosGPSSat implements AltosJsonable { public AltosGPSSat() { } - public AltosHashSet hashSet() { - AltosHashSet h = new AltosHashSet(); - h.putInt("svid", svid); - h.putInt("c_n0", c_n0); - return h; - } - public AltosJson json() { AltosJson j = new AltosJson(); j.put("svid", svid); @@ -48,22 +41,11 @@ public class AltosGPSSat implements AltosJsonable { return j; } - private AltosGPSSat(AltosHashSet h) { - svid = h.getInt("svid", 0); - c_n0 = h.getInt("c_n0", 0); - } - private AltosGPSSat(AltosJson j) { svid = j.get_int("svid", 0); c_n0 = j.get_int("c_n0", 0); } - static public AltosGPSSat fromHashSet(AltosHashSet h, AltosGPSSat def) { - if (h == null) - return def; - return new AltosGPSSat(h); - } - static public AltosGPSSat[] json_array(AltosJson j) { if (j == null) return null; @@ -74,43 +56,5 @@ public class AltosGPSSat implements AltosJsonable { sats[i] = new AltosGPSSat(j.get(i)); return sats; } - - static public AltosGPSSat[] array(String string) { - - if (string == null) - return null; - - try { - StringReader reader = new StringReader(string); - ArrayList array = new ArrayList(); - String element; - - while ((element = AltosHashSet.get_token(reader)) != null) { - AltosGPSSat sat = AltosGPSSat.fromHashSet(AltosHashSet.fromString(element), null); - if (sat != null) - array.add(sat); - } - return array.toArray(new AltosGPSSat[0]); - } catch (IOException ie) { - return null; - } - } - - public static String toString(AltosGPSSat[] sats) { - if (sats == null) - return null; - - try { - StringWriter writer = new StringWriter(); - - for (AltosGPSSat g : sats) { - String element = g.hashSet().toString(); - AltosHashSet.put_token(writer, element); - } - return writer.toString(); - } catch (IOException ie) { - return null; - } - } } diff --git a/altoslib/AltosGreatCircle.java b/altoslib/AltosGreatCircle.java index 8fd380a1..f2c1783d 100644 --- a/altoslib/AltosGreatCircle.java +++ b/altoslib/AltosGreatCircle.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.lang.Math; import java.io.*; -public class AltosGreatCircle implements Cloneable, AltosHashable, AltosJsonable { +public class AltosGreatCircle implements Cloneable, AltosJsonable { public double distance; public double bearing; public double range; @@ -104,17 +104,6 @@ public class AltosGreatCircle implements Cloneable, AltosHashable, AltosJsonable elevation = 0; } - public AltosHashSet hashSet() { - AltosHashSet h = new AltosHashSet(); - - h.putDouble("distance", distance); - h.putDouble("bearing", bearing); - h.putDouble("range", range); - h.putDouble("elevation", elevation); - - return h; - } - public AltosJson json() { AltosJson j = new AltosJson(); @@ -126,22 +115,6 @@ public class AltosGreatCircle implements Cloneable, AltosHashable, AltosJsonable return j; } - public AltosGreatCircle(AltosHashSet h) { - this(); - - distance = h.getDouble("distance", distance); - bearing = h.getDouble("bearing", bearing); - range = h.getDouble("range", range); - elevation = h.getDouble("elevation", elevation); - } - - public static AltosGreatCircle fromHashSet(AltosHashSet h, AltosGreatCircle def) { - if (h == null) - return def; - - return new AltosGreatCircle(h); - } - public AltosGreatCircle(AltosJson j) { this(); diff --git a/altoslib/AltosHashSet.java b/altoslib/AltosHashSet.java deleted file mode 100644 index 77bd48c2..00000000 --- a/altoslib/AltosHashSet.java +++ /dev/null @@ -1,316 +0,0 @@ -/* - * Copyright © 2016 Keith Packard - * - * 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. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -package org.altusmetrum.altoslib_11; - -import java.io.*; -import java.util.*; -import java.text.*; - -public class AltosHashSet extends Hashtable { - static private int get(StringReader reader) throws IOException { - return reader.read(); - } - - static public String get_token(StringReader reader) throws IOException { - int c = get(reader); - - if (c == -1) - return null; - - ArrayList chars = new ArrayList(); - - for (;;) { - if (c == -1 || c == ';') - break; - if (c == '\\') - c = get(reader); - chars.add(c); - c = get(reader); - } - int[] ch = new int[chars.size()]; - for (int i = 0; i < ch.length; i++) - ch[i] = chars.get(i); - return new String(ch, 0, ch.length); - } - - static private void put(StringWriter writer, int c) throws IOException { - writer.write(c); - } - - static public void put_token(StringWriter writer, String token) throws IOException { - for (int i = 0; i < token.length(); i++) { - int c = token.codePointAt(i); - - switch (c) { - case ';': - case '\\': - put(writer, '\\'); - } - put(writer, c); - } - put(writer, ';'); - } - - public String toString() { - try { - StringWriter writer = new StringWriter(); - - for (String key : keySet()) { - String value = get(key); - put_token(writer, key); - put_token(writer, value); - } - return writer.toString(); - } catch (IOException ie) { - return null; - } - } - - public void putBoolean(String key, boolean value) { - put(key, value ? "t" : "f"); - } - - public boolean getBoolean(String key, boolean def) { - String value = get(key); - - if (value == null) - return def; - if (value.equals("t")) - return true; - if (value.equals("f")) - return false; - return def; - } - - public void putInt(String key, int value) { - put(key, Integer.toString(value)); - } - - public int getInt(String key, int def) { - String value = get(key); - - if (value == null) - return def; - try { - return AltosParse.parse_int(value); - } catch (ParseException pe) { - return def; - } - } - - public void putIntArray(String key, int value[]) { - if (value == null) - return; - - StringWriter writer = new StringWriter(); - - try { - for (int i = 0; i < value.length; i++) - put_token(writer, Integer.toString(value[i])); - put(key, writer.toString()); - } catch (IOException ie) { - } - } - - public int[] getIntArray(String key, int[] def) { - String value = get(key); - - if (value == null) - return def; - try { - StringReader reader = new StringReader(value); - ArrayList array = new ArrayList(); - String elt; - - while ((elt = get_token(reader)) != null) - array.add(AltosParse.parse_int(elt)); - int[] ret = new int[array.size()]; - for (int i = 0; i < ret.length; i++) - ret[i] = array.get(i); - return ret; - } catch (ParseException pe) { - return def; - } catch (IOException ie) { - return def; - } - } - - public void putLong(String key, long value) { - put(key, Long.toString(value)); - } - - public long getLong(String key, long def) { - String value = get(key); - - if (value == null) - return def; - try { - return AltosParse.parse_long(value); - } catch (ParseException pe) { - return def; - } - } - - public void putDouble(String key, double value) { - put(key, AltosParse.format_double_net(value)); - } - - public double getDouble(String key, double def) { - String value = get(key); - - if (value == null) - return def; - try { - return AltosParse.parse_double_net(value); - } catch (ParseException pe) { - return def; - } - } - - public void putDoubleArray(String key, double value[]) { - if (value == null) - return; - - StringWriter writer = new StringWriter(); - - try { - for (int i = 0; i < value.length; i++) - put_token(writer, AltosParse.format_double_net(value[i])); - put(key, writer.toString()); - } catch (IOException ie) { - } - } - - public double[] getDoubleArray(String key, double[] def) { - String value = get(key); - - if (value == null) - return def; - try { - StringReader reader = new StringReader(value); - ArrayList array = new ArrayList(); - String elt; - - while ((elt = get_token(reader)) != null) - array.add(AltosParse.parse_double_net(elt)); - double[] ret = new double[array.size()]; - for (int i = 0; i < ret.length; i++) - ret[i] = array.get(i); - return ret; - } catch (ParseException pe) { - return def; - } catch (IOException ie) { - return def; - } - } - - public String getString(String key, String def) { - String value = get(key); - - if (value == null) - return def; - return value; - } - - public void putString(String key, String value) { - if (value != null) - put(key, value); - } - - public AltosHashSet getHash(String key) { - String value = get(key); - - if (value == null) - return null; - try { - return new AltosHashSet(value); - } catch (IOException ie) { - return null; - } - } - - public void putHash(String key, AltosHashSet h) { - put(key, h.toString()); - } - - public void putHashable(String key, AltosHashable h) { - if (h == null) - return; - - put(key, h.hashSet().toString()); - } - - private AltosHashSet (String string) throws IOException { - StringReader reader = new StringReader(string); - String key, value; - - for (;;) { - key = get_token(reader); - value = get_token(reader); - if (key == null || value == null) - break; - put(key, value); - } - } - - public AltosHashSet() { - } - - static public AltosHashSet fromString(String string) { - try { - return new AltosHashSet(string); - } catch (IOException ie) { - return null; - } - } - - static public AltosHashSet[] array(String string) { - - if (string == null) - return null; - - try { - StringReader reader = new StringReader(string); - ArrayList array = new ArrayList(); - String element; - - while ((element = get_token(reader)) != null) - array.add(new AltosHashSet(element)); - return array.toArray(new AltosHashSet[0]); - } catch (IOException ie) { - return null; - } - } - - static public String toString(AltosHashSet[] sets) { - if (sets == null) - return null; - - try { - StringWriter writer = new StringWriter(); - - for (AltosHashSet h : sets) { - String element = h.toString(); - put_token(writer, element); - } - return writer.toString(); - } catch (IOException ie) { - return null; - } - } -} diff --git a/altoslib/AltosHashable.java b/altoslib/AltosHashable.java deleted file mode 100644 index e228543d..00000000 --- a/altoslib/AltosHashable.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright © 2016 Keith Packard - * - * 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. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -package org.altusmetrum.altoslib_11; - -import java.io.*; - -public interface AltosHashable { - - public AltosHashSet hashSet(); -} diff --git a/altoslib/AltosIMU.java b/altoslib/AltosIMU.java index ecc02f15..672c6111 100644 --- a/altoslib/AltosIMU.java +++ b/altoslib/AltosIMU.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; -public class AltosIMU implements Cloneable, AltosHashable, AltosJsonable { +public class AltosIMU implements Cloneable, AltosJsonable { public int accel_along; public int accel_across; public int accel_through; @@ -116,18 +116,6 @@ public class AltosIMU implements Cloneable, AltosHashable, AltosJsonable { } } - public AltosIMU (AltosHashSet h) { - this(); - - accel_along = h.getInt("accel_along", accel_along); - accel_across = h.getInt("accel_across", accel_across); - accel_through = h.getInt("accel_through", accel_through); - - gyro_roll = h.getInt("gyro_roll", gyro_roll); - gyro_pitch = h.getInt("gyro_pitch", gyro_pitch); - gyro_yaw = h.getInt("gyro_yaw", gyro_yaw); - } - public AltosIMU (AltosJson j) { this(); @@ -140,31 +128,12 @@ public class AltosIMU implements Cloneable, AltosHashable, AltosJsonable { gyro_yaw = j.get_int("gyro_yaw", gyro_yaw); } - static public AltosIMU fromHashSet(AltosHashSet h, AltosIMU def) { - if (h == null) - return def; - return new AltosIMU(h); - } - static public AltosIMU fromJson(AltosJson j, AltosIMU def) { if (j == null) return def; return new AltosIMU(j); } - public AltosHashSet hashSet() { - AltosHashSet h = new AltosHashSet(); - - h.putInt("accel_along", accel_along); - h.putInt("accel_across", accel_across); - h.putInt("accel_through", accel_through); - - h.putInt("gyro_roll", gyro_roll); - h.putInt("gyro_pitch", gyro_pitch); - h.putInt("gyro_yaw", gyro_yaw); - return h; - } - public AltosJson json() { AltosJson j = new AltosJson(); diff --git a/altoslib/AltosMag.java b/altoslib/AltosMag.java index ec98882f..8d40bc60 100644 --- a/altoslib/AltosMag.java +++ b/altoslib/AltosMag.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; -public class AltosMag implements Cloneable, AltosHashable, AltosJsonable { +public class AltosMag implements Cloneable, AltosJsonable { public int along; public int across; public int through; @@ -94,15 +94,6 @@ public class AltosMag implements Cloneable, AltosHashable, AltosJsonable { } } - public AltosHashSet hashSet() { - AltosHashSet h = new AltosHashSet(); - - h.putInt("along", along); - h.putInt("across", across); - h.putInt("through", through); - return h; - } - public AltosJson json() { AltosJson j = new AltosJson(); @@ -112,21 +103,6 @@ public class AltosMag implements Cloneable, AltosHashable, AltosJsonable { return j; } - public AltosMag(AltosHashSet h) { - this(); - - along = h.getInt("along", along); - across = h.getInt("across", across); - through = h.getInt("through", through); - } - - public static AltosMag fromHashSet(AltosHashSet h, AltosMag def) { - if (h == null) - return def; - - return new AltosMag(h); - } - public AltosMag(AltosJson j) { this(); diff --git a/altoslib/AltosMs5607.java b/altoslib/AltosMs5607.java index 6d2f2203..a769223e 100644 --- a/altoslib/AltosMs5607.java +++ b/altoslib/AltosMs5607.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; -public class AltosMs5607 implements AltosHashable, AltosJsonable { +public class AltosMs5607 implements AltosJsonable { public int reserved; public int sens; public int off; @@ -167,24 +167,6 @@ public class AltosMs5607 implements AltosHashable, AltosJsonable { convert(); } - public AltosHashSet hashSet() { - AltosHashSet h = new AltosHashSet(); - - h.putInt("reserved", reserved); - h.putInt("sens", sens); - h.putInt("off", off); - h.putInt("tcs", tcs); - h.putInt("tco", tco); - h.putInt("tref", tref); - h.putInt("tempsens", tempsens); - h.putInt("crc", crc); - h.putInt("raw_pres", raw_pres); - h.putInt("raw_temp", raw_temp); - h.putInt("pa", pa); - h.putInt("cc", cc); - return h; - } - public AltosJson json() { AltosJson j = new AltosJson(); @@ -203,30 +185,6 @@ public class AltosMs5607 implements AltosHashable, AltosJsonable { return j; } - public AltosMs5607(AltosHashSet h) { - this(); - - reserved = h.getInt("reserved", reserved); - sens = h.getInt("sens", sens); - off = h.getInt("off", off); - tcs = h.getInt("tcs", tcs); - tco = h.getInt("tco", tco); - tref = h.getInt("tref", tref); - tempsens = h.getInt("tempsens", tempsens); - crc = h.getInt("crc", crc); - raw_pres = h.getInt("raw_pres", raw_pres); - raw_temp = h.getInt("raw_temp", raw_temp); - pa = h.getInt("pa", pa); - cc = h.getInt("cc", cc); - } - - public static AltosMs5607 fromHashSet(AltosHashSet h, AltosMs5607 def) { - if (h == null) - return def; - - return new AltosMs5607(h); - } - public AltosMs5607(AltosJson j) { this(); diff --git a/altoslib/AltosPreferencesBackend.java b/altoslib/AltosPreferencesBackend.java index d4c3d7e5..0580652e 100644 --- a/altoslib/AltosPreferencesBackend.java +++ b/altoslib/AltosPreferencesBackend.java @@ -38,18 +38,6 @@ public abstract class AltosPreferencesBackend { public abstract byte[] getBytes(String key, byte[] def); public abstract void putBytes(String key, byte[] value); - public AltosHashSet getHashSet(String key) { - String value = getString(key, null); - - if (value == null) - return null; - return AltosHashSet.fromString(value); - } - - public void putHashSet(String key, AltosHashSet h) { - putString(key, h.toString()); - } - public AltosJson getJson(String key) { String value = getString(key, null); diff --git a/altoslib/AltosQuaternion.java b/altoslib/AltosQuaternion.java index 6a09bb8e..1b4a9419 100644 --- a/altoslib/AltosQuaternion.java +++ b/altoslib/AltosQuaternion.java @@ -17,7 +17,7 @@ package org.altusmetrum.altoslib_11; -public class AltosQuaternion implements AltosHashable, AltosJsonable { +public class AltosQuaternion implements AltosJsonable { double r; /* real bit */ double x, y, z; /* imaginary bits */ @@ -148,16 +148,6 @@ public class AltosQuaternion implements AltosHashable, AltosJsonable { c_x * c_y * s_z - s_x * s_y * c_z); } - public AltosHashSet hashSet() { - AltosHashSet h = new AltosHashSet(); - - h.putDouble("r", r); - h.putDouble("x", x); - h.putDouble("y", y); - h.putDouble("z", z); - return h; - } - public AltosJson json() { AltosJson j = new AltosJson(); @@ -168,16 +158,6 @@ public class AltosQuaternion implements AltosHashable, AltosJsonable { return j; } - public AltosQuaternion(AltosHashSet h) { - if (h == null) - return; - - r = h.getDouble("r", 1); - x = h.getDouble("x", 0); - y = h.getDouble("y", 0); - z = h.getDouble("z", 0); - } - public AltosQuaternion(AltosJson j) { if (j == null) return; diff --git a/altoslib/AltosRotation.java b/altoslib/AltosRotation.java index 4b7ab407..321a0f30 100644 --- a/altoslib/AltosRotation.java +++ b/altoslib/AltosRotation.java @@ -17,7 +17,7 @@ package org.altusmetrum.altoslib_11; -public class AltosRotation implements AltosHashable, AltosJsonable { +public class AltosRotation implements AltosJsonable { private AltosQuaternion rotation; public double tilt() { @@ -48,28 +48,10 @@ public class AltosRotation implements AltosHashable, AltosJsonable { rotation = up.vectors_to_rotation(orient); } - public AltosHashSet hashSet() { - AltosHashSet h = new AltosHashSet(); - - h.putHashable("rotation", rotation); - return h; - } - public AltosJson json() { return rotation.json(); } - public AltosRotation(AltosHashSet h) { - rotation = new AltosQuaternion(h.getHash("rotation")); - } - - public static AltosRotation fromHashSet(AltosHashSet h, AltosRotation def) { - if (h == null) - return def; - - return new AltosRotation(h); - } - public AltosRotation(AltosJson j) { rotation = new AltosQuaternion(j); } diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index a3c6cc34..26cedce9 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -23,7 +23,7 @@ package org.altusmetrum.altoslib_11; import java.io.*; -public class AltosState implements Cloneable, AltosHashable { +public class AltosState implements Cloneable, AltosJsonable { public static final int set_position = 1; public static final int set_gps = 2; @@ -46,7 +46,7 @@ public class AltosState implements Cloneable, AltosHashable { private int prev_tick; public int boost_tick; - class AltosValue implements AltosHashable, AltosJsonable { + class AltosValue implements AltosJsonable { double value; double prev_value; private double max_value; @@ -177,17 +177,6 @@ public class AltosState implements Cloneable, AltosHashable { prev_set_time = set_time; } - public AltosHashSet hashSet() { - AltosHashSet h = new AltosHashSet(); - - h.putDouble("value", value); - h.putDouble("prev_value", prev_value); - h.putDouble("max_value", max_value); - h.putDouble("set_time", set_time); - h.putDouble("prev_set_time", prev_set_time); - return h; - } - public AltosJson json() { AltosJson j = new AltosJson(); @@ -199,17 +188,6 @@ public class AltosState implements Cloneable, AltosHashable { return j; } - AltosValue(AltosHashSet h) { - this(); - if (h != null) { - value = h.getDouble("value", value); - prev_value = h.getDouble("prev_value", prev_value); - max_value = h.getDouble("max_value", max_value); - set_time = h.getDouble("set_time", 0); - prev_set_time = h.getDouble("prev_set_time", 0); - } - } - AltosValue(AltosJson j) { this(); if (j != null) { @@ -229,21 +207,15 @@ public class AltosState implements Cloneable, AltosHashable { } - AltosValue AltosValue_fromHashSet(AltosHashSet h, AltosValue def) { - if (h == null) - return def; - return new AltosValue(h); - } - AltosValue AltosValue_fromJson(AltosJson j, AltosValue def) { if (j == null) return def; return new AltosValue(j); } - class AltosCValue implements AltosHashable, AltosJsonable { + class AltosCValue implements AltosJsonable { - class AltosIValue extends AltosValue implements AltosHashable, AltosJsonable { + class AltosIValue extends AltosValue implements AltosJsonable { boolean can_max() { return c_can_max(); } @@ -252,10 +224,6 @@ public class AltosState implements Cloneable, AltosHashable { super(); } - AltosIValue(AltosHashSet h) { - super(h); - } - AltosIValue(AltosJson j) { super(j); } @@ -352,14 +320,6 @@ public class AltosState implements Cloneable, AltosHashable { computed = new AltosIValue(); } - public AltosHashSet hashSet() { - AltosHashSet h = new AltosHashSet(); - - h.putHashable("measured", measured); - h.putHashable("computed", computed); - return h; - } - public AltosJson json() { AltosJson j = new AltosJson(); @@ -368,23 +328,12 @@ public class AltosState implements Cloneable, AltosHashable { return j; } - AltosCValue(AltosHashSet h) { - measured = new AltosIValue(h.getHash("measured")); - computed = new AltosIValue(h.getHash("computed")); - } - AltosCValue(AltosJson j) { measured = new AltosIValue(j.get("measured")); computed = new AltosIValue(j.get("computed")); } } - AltosCValue AltosCValue_fromHashSet(AltosHashSet h, AltosCValue def) { - if (h == null) - return def; - return new AltosCValue(h); - } - AltosCValue AltosCValue_fromJson(AltosJson j, AltosCValue def) { if (j == null) return def; @@ -441,20 +390,11 @@ public class AltosState implements Cloneable, AltosHashable { super(); } - AltosGpsGroundAltitude (AltosHashSet h) { - super(h); - } - AltosGpsGroundAltitude (AltosJson j) { super(j); } } - AltosGpsGroundAltitude AltosGpsGroundAltitude_fromHashSet(AltosHashSet h, AltosGpsGroundAltitude def) { - if (h == null) return def; - return new AltosGpsGroundAltitude(h); - } - AltosGpsGroundAltitude AltosGpsGroundAltitude_fromJson(AltosJson j, AltosGpsGroundAltitude def) { if (j == null) return def; return new AltosGpsGroundAltitude(j); @@ -486,20 +426,11 @@ public class AltosState implements Cloneable, AltosHashable { super(); } - AltosGroundPressure (AltosHashSet h) { - super(h); - } - AltosGroundPressure (AltosJson j) { super(j); } } - AltosGroundPressure AltosGroundPressure_fromHashSet(AltosHashSet h, AltosGroundPressure def) { - if (h == null) return def; - return new AltosGroundPressure(h); - } - AltosGroundPressure AltosGroundPressure_fromJson(AltosJson j, AltosGroundPressure def) { if (j == null) return def; return new AltosGroundPressure(j); @@ -515,7 +446,7 @@ public class AltosState implements Cloneable, AltosHashable { ground_pressure.set_measured(pressure, time); } - class AltosAltitude extends AltosCValue implements AltosHashable { + class AltosAltitude extends AltosCValue { private void set_speed(AltosValue v) { if (!acceleration.is_measured() || !ascent) @@ -538,20 +469,11 @@ public class AltosState implements Cloneable, AltosHashable { super(); } - AltosAltitude (AltosHashSet h) { - super(h); - } - AltosAltitude (AltosJson j) { super(j); } } - AltosAltitude AltosAltitude_fromHashSet(AltosHashSet h, AltosAltitude def) { - if (h == null) return def; - return new AltosAltitude(h); - } - AltosAltitude AltosAltitude_fromJson(AltosJson j, AltosAltitude def) { if (j == null) return def; return new AltosAltitude(j); @@ -559,7 +481,7 @@ public class AltosState implements Cloneable, AltosHashable { private AltosAltitude altitude; - class AltosGpsAltitude extends AltosValue implements AltosHashable { + class AltosGpsAltitude extends AltosValue { private void set_gps_height() { double a = value(); @@ -580,20 +502,11 @@ public class AltosState implements Cloneable, AltosHashable { super(); } - AltosGpsAltitude (AltosHashSet h) { - super(h); - } - AltosGpsAltitude (AltosJson j) { super(j); } } - AltosGpsAltitude AltosGpsAltitude_fromHashSet(AltosHashSet h, AltosGpsAltitude def) { - if (h == null) return def; - return new AltosGpsAltitude(h); - } - AltosGpsAltitude AltosGpsAltitude_fromJson(AltosJson j, AltosGpsAltitude def) { if (j == null) return def; return new AltosGpsAltitude(j); @@ -677,20 +590,11 @@ public class AltosState implements Cloneable, AltosHashable { super(); } - AltosPressure (AltosHashSet h) { - super(h); - } - AltosPressure (AltosJson j) { super(j); } } - AltosPressure AltosPressure_fromHashSet(AltosHashSet h, AltosPressure def) { - if (h == null) return def; - return new AltosPressure(h); - } - AltosPressure AltosPressure_fromJson(AltosJson j, AltosPressure def) { if (j == null) return def; return new AltosPressure(j); @@ -756,7 +660,7 @@ public class AltosState implements Cloneable, AltosHashable { return AltosLib.MISSING; } - class AltosSpeed extends AltosCValue implements AltosHashable { + class AltosSpeed extends AltosCValue { boolean can_max() { return state < AltosLib.ao_flight_fast || state == AltosLib.ao_flight_stateless; @@ -785,20 +689,11 @@ public class AltosState implements Cloneable, AltosHashable { super(); } - AltosSpeed (AltosHashSet h) { - super(h); - } - AltosSpeed (AltosJson j) { super(j); } } - AltosSpeed AltosSpeed_fromHashSet(AltosHashSet h, AltosSpeed def) { - if (h == null) return def; - return new AltosSpeed(h); - } - AltosSpeed AltosSpeed_fromJson(AltosJson j, AltosSpeed def) { if (j == null) return def; return new AltosSpeed(j); @@ -832,7 +727,7 @@ public class AltosState implements Cloneable, AltosHashable { return AltosLib.MISSING; } - class AltosAccel extends AltosCValue implements AltosHashable { + class AltosAccel extends AltosCValue { boolean can_max() { return state < AltosLib.ao_flight_fast || state == AltosLib.ao_flight_stateless; @@ -848,20 +743,11 @@ public class AltosState implements Cloneable, AltosHashable { super(); } - AltosAccel (AltosHashSet h) { - super(h); - } - AltosAccel (AltosJson j) { super(j); } } - AltosAccel AltosAccel_fromHashSet(AltosHashSet h, AltosAccel def) { - if (h == null) return def; - return new AltosAccel(h); - } - AltosAccel AltosAccel_fromJson(AltosJson j, AltosAccel def) { if (j == null) return def; return new AltosAccel(j); @@ -1765,19 +1651,6 @@ public class AltosState implements Cloneable, AltosHashable { System.exit(1); } } - if (false) { - AltosHashSet hash = hashSet(); - String onetrip = hash.toString(); - AltosHashSet back = AltosHashSet.fromString(onetrip); - AltosState tripstate = AltosState.fromHashSet(back); - AltosHashSet triphash = tripstate.hashSet(); - String twotrip = triphash.toString(); - - if (!onetrip.equals(twotrip)) { - System.out.printf("%s\n%s\n", onetrip, twotrip); - System.exit(1); - } - } return s; } @@ -1785,112 +1658,6 @@ public class AltosState implements Cloneable, AltosHashable { init(); } - public AltosHashSet hashSet() { - AltosHashSet h = new AltosHashSet(); - - h.putBoolean("valid", true); - h.putInt("set", set); - h.putLong("received_time", received_time); - h.putDouble("time", time); - h.putDouble("prev_time", prev_time); - h.putDouble("time_change", time_change); - h.putInt("tick", tick); - h.putInt("prev_tick", prev_tick); - h.putInt("boost_tick", boost_tick); - h.putInt("state", state); - h.putInt("flight", flight); - h.putInt("serial", serial); - h.putInt("altitude_32", altitude_32); - h.putInt("receiver_serial", receiver_serial); - h.putBoolean("landed", landed); - h.putBoolean("ascent", ascent); - h.putBoolean("boost", boost); - h.putInt("rssi", rssi); - h.putInt("status", status); - h.putInt("device_type", device_type); - h.putInt("config_major", config_major); - h.putInt("config_minor", config_minor); - h.putInt("apogee_delay", apogee_delay); - h.putInt("main_deploy", main_deploy); - h.putInt("flight_log_max", flight_log_max); - h.putHashable("ground_altitude", ground_altitude); - h.putHashable("gps_ground_altitude", gps_ground_altitude); - h.putHashable("ground_pressure", ground_pressure); - h.putHashable("altitude", altitude); - h.putHashable("gps_altitude", gps_altitude); - h.putHashable("gps_ground_speed", gps_ground_speed); - h.putHashable("gps_ascent_rate", gps_ascent_rate); - h.putHashable("gps_course", gps_course); - h.putHashable("gps_speed", gps_speed); - h.putHashable("pressure", pressure); - h.putHashable("speed", speed); - h.putHashable("acceleration", acceleration); - h.putHashable("orient", orient); - h.putHashable("kalman_height", kalman_height); - h.putHashable("kalman_speed", kalman_speed); - h.putHashable("kalman_acceleration", kalman_acceleration); - - h.putDouble("battery_voltage",battery_voltage); - h.putDouble("pyro_voltage",pyro_voltage); - h.putDouble("temperature",temperature); - h.putDouble("apogee_voltage",apogee_voltage); - h.putDouble("main_voltage",main_voltage); - h.putDoubleArray("ignitor_voltage",ignitor_voltage); - h.putHashable("gps", gps); - h.putHashable("temp_gps", temp_gps); - h.putInt("temp_gps_sat_tick", temp_gps_sat_tick); - h.putBoolean("gps_pending", gps_pending); - h.putInt("gps_sequence", gps_sequence); - h.putHashable("imu", imu); - h.putHashable("mag", mag); - - h.putInt("npad", npad); - h.putInt("gps_waiting", gps_waiting); - h.putBoolean("gps_ready", gps_ready); - h.putInt("ngps", ngps); - h.putHashable("from_pad", from_pad); - h.putDouble("elevation", elevation); - h.putDouble("range", range); - h.putDouble("gps_height", gps_height); - h.putDouble("pad_lat", pad_lat); - h.putDouble("pad_lon", pad_lon); - h.putDouble("pad_alt", pad_alt); - h.putInt("speak_tick", speak_tick); - h.putDouble("speak_altitude", speak_altitude); - h.putString("callsign", callsign); - h.putString("firmware_version", firmware_version); - h.putDouble("accel_plus_g", accel_plus_g); - h.putDouble("accel_minus_g", accel_minus_g); - h.putDouble("accel", accel); - h.putDouble("ground_accel", ground_accel); - h.putDouble("ground_accel_avg", ground_accel_avg); - h.putInt("log_format", log_format); - h.putInt("log_space", log_space); - h.putString("product", product); - h.putHashable("baro", baro); - h.putHashable("companion", companion); - h.putInt("pyro_fired", pyro_fired); - h.putDouble("accel_zero_along", accel_zero_along); - h.putDouble("accel_zero_across", accel_zero_across); - h.putDouble("accel_zero_through", accel_zero_through); - - h.putHashable("rotation", rotation); - h.putHashable("ground_rotation", ground_rotation); - - h.putInt("pad_orientation", pad_orientation); - - h.putDouble("accel_ground_along", accel_ground_along); - h.putDouble("accel_ground_across", accel_ground_across); - h.putDouble("accel_ground_through", accel_ground_through); - - h.putDouble("gyro_zero_roll", gyro_zero_roll); - h.putDouble("gyro_zero_pitch", gyro_zero_pitch); - h.putDouble("gyro_zero_yaw", gyro_zero_yaw); - - h.putDouble("last_imu_time", last_imu_time); - return h; - } - public AltosJson json() { AltosJson j = new AltosJson(); @@ -1997,110 +1764,6 @@ public class AltosState implements Cloneable, AltosHashable { return j; } - public AltosState(AltosHashSet h) { - this(); - - set = h.getInt("set", set); - received_time = h.getLong("received_time", received_time); - time = h.getDouble("time", time); - prev_time = h.getDouble("prev_time", prev_time); - time_change = h.getDouble("time_change", time_change); - tick = h.getInt("tick", tick); - prev_tick = h.getInt("prev_tick", prev_tick); - boost_tick = h.getInt("boost_tick", boost_tick); - state = h.getInt("state", state); - flight = h.getInt("flight", flight); - serial = h.getInt("serial", serial); - altitude_32 = h.getInt("altitude_32", altitude_32); - receiver_serial = h.getInt("receiver_serial", receiver_serial); - landed = h.getBoolean("landed", landed); - ascent = h.getBoolean("ascent", ascent); - boost = h.getBoolean("boost", boost); - rssi = h.getInt("rssi", rssi); - status = h.getInt("status", status); - device_type = h.getInt("device_type", device_type); - config_major = h.getInt("config_major", config_major); - config_minor = h.getInt("config_minor", config_minor); - apogee_delay = h.getInt("apogee_delay", apogee_delay); - main_deploy = h.getInt("main_deploy", main_deploy); - flight_log_max = h.getInt("flight_log_max", flight_log_max); - ground_altitude = AltosCValue_fromHashSet(h.getHash("ground_altitude"), ground_altitude); - gps_ground_altitude = AltosGpsGroundAltitude_fromHashSet(h.getHash("gps_ground_altitude"), gps_ground_altitude); - ground_pressure = AltosGroundPressure_fromHashSet(h.getHash("ground_pressure"), ground_pressure); - altitude = AltosAltitude_fromHashSet(h.getHash("altitude"), altitude); - gps_altitude = AltosGpsAltitude_fromHashSet(h.getHash("gps_altitude"), gps_altitude); - gps_ground_speed = AltosValue_fromHashSet(h.getHash("gps_ground_speed"), gps_ground_speed); - gps_ascent_rate = AltosValue_fromHashSet(h.getHash("gps_ascent_rate"), gps_ascent_rate); - gps_course = AltosValue_fromHashSet(h.getHash("gps_course"), gps_course); - gps_speed = AltosValue_fromHashSet(h.getHash("gps_speed"), gps_speed); - pressure = AltosPressure_fromHashSet(h.getHash("pressure"), pressure); - speed = AltosSpeed_fromHashSet(h.getHash("speed"), speed); - acceleration = AltosAccel_fromHashSet(h.getHash("acceleration"), acceleration); - orient = AltosCValue_fromHashSet(h.getHash("orient"), orient); - kalman_height = AltosValue_fromHashSet(h.getHash("kalman_height"), kalman_height); - kalman_speed = AltosValue_fromHashSet(h.getHash("kalman_speed"), kalman_speed); - kalman_acceleration = AltosValue_fromHashSet(h.getHash("kalman_acceleration"), kalman_acceleration); - - battery_voltage = h.getDouble("battery_voltage", battery_voltage); - pyro_voltage = h.getDouble("pyro_voltage", pyro_voltage); - temperature = h.getDouble("temperature", temperature); - apogee_voltage = h.getDouble("apogee_voltage", apogee_voltage); - main_voltage= h.getDouble("main_voltage", main_voltage); - ignitor_voltage = h.getDoubleArray("ignitor_voltage", ignitor_voltage); - gps = AltosGPS.fromHashSet(h.getHash("gps"), gps); - temp_gps = AltosGPS.fromHashSet(h.getHash("temp_gps"), temp_gps); - temp_gps_sat_tick = h.getInt("temp_gps_sat_tick", temp_gps_sat_tick); - gps_pending = h.getBoolean("gps_pending", gps_pending); - gps_sequence = h.getInt("gps_sequence", gps_sequence); - imu = AltosIMU.fromHashSet(h.getHash("imu"), imu); - mag = AltosMag.fromHashSet(h.getHash("mag"), mag); - - npad = h.getInt("npad", npad); - gps_waiting = h.getInt("gps_waiting", gps_waiting); - gps_ready = h.getBoolean("gps_ready", gps_ready); - ngps = h.getInt("ngps", ngps); - from_pad = AltosGreatCircle.fromHashSet(h.getHash("from_pad"), from_pad); - elevation = h.getDouble("elevation", elevation); - range = h.getDouble("range", range); - gps_height = h.getDouble("gps_height", gps_height); - pad_lat = h.getDouble("pad_lat", pad_lat); - pad_lon = h.getDouble("pad_lon", pad_lon); - pad_alt = h.getDouble("pad_alt", pad_alt); - speak_tick = h.getInt("speak_tick", speak_tick); - speak_altitude = h.getDouble("speak_altitude", speak_altitude); - callsign = h.getString("callsign", callsign); - firmware_version = h.getString("firmware_version", firmware_version); - accel_plus_g = h.getDouble("accel_plus_g", accel_plus_g); - accel_minus_g = h.getDouble("accel_minus_g", accel_minus_g); - accel = h.getDouble("accel", accel); - ground_accel = h.getDouble("ground_accel", ground_accel); - ground_accel_avg = h.getDouble("ground_accel_avg", ground_accel_avg); - log_format = h.getInt("log_format", log_format); - log_space = h.getInt("log_space", log_space); - product = h.getString("product", product); - baro = AltosMs5607.fromHashSet(h.getHash("baro"), baro); - companion = AltosCompanion.fromHashSet(h.getHash("companion"), companion); - pyro_fired = h.getInt("pyro_fired", pyro_fired); - accel_zero_along = h.getDouble("accel_zero_along", accel_zero_along); - accel_zero_across = h.getDouble("accel_zero_across", accel_zero_across); - accel_zero_through = h.getDouble("accel_zero_through", accel_zero_through); - - rotation = AltosRotation.fromHashSet(h.getHash("rotation"), rotation); - ground_rotation = AltosRotation.fromHashSet(h.getHash("ground_rotation"), ground_rotation); - - pad_orientation = h.getInt("pad_orientation", pad_orientation); - - accel_ground_along = h.getDouble("accel_ground_along", accel_ground_along); - accel_ground_across = h.getDouble("accel_ground_across", accel_ground_across); - accel_ground_through = h.getDouble("accel_ground_through", accel_ground_through); - - gyro_zero_roll = h.getDouble("gyro_zero_roll", gyro_zero_roll); - gyro_zero_pitch = h.getDouble("gyro_zero_pitch", gyro_zero_pitch); - gyro_zero_yaw = h.getDouble("gyro_zero_yaw", gyro_zero_yaw); - - last_imu_time = h.getDouble("last_imu_time", last_imu_time); - } - public AltosState(AltosJson j) { this(); @@ -2204,13 +1867,6 @@ public class AltosState implements Cloneable, AltosHashable { last_imu_time = j.get_double("last_imu_time", last_imu_time); } - public static AltosState fromHashSet(AltosHashSet h) { - if (h == null) - return null; - if (!h.getBoolean("valid", false)) - return null; - return new AltosState(h); - } public static AltosState fromJson(AltosJson j) { if (j == null) diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am index 534d2047..912976f9 100644 --- a/altoslib/Makefile.am +++ b/altoslib/Makefile.am @@ -161,8 +161,6 @@ altoslib_JAVA = \ AltosMapLoaderListener.java \ AltosMapLoader.java \ AltosMapTypeListener.java \ - AltosHashSet.java \ - AltosHashable.java \ AltosJson.java \ AltosJsonable.java \ AltosVersion.java -- cgit v1.2.3 From 2a1b7c6c509d4d19de21abf02b63aeacba269d13 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 16 Jun 2016 23:59:06 -0700 Subject: altoslib: Add null constructors to AltosQuaternion and AltosRotation These will be used in the reflection-based JSON code Signed-off-by: Keith Packard --- altoslib/AltosQuaternion.java | 15 +++++++++++---- altoslib/AltosRotation.java | 12 ++++++++---- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/altoslib/AltosQuaternion.java b/altoslib/AltosQuaternion.java index 1b4a9419..98c2fe51 100644 --- a/altoslib/AltosQuaternion.java +++ b/altoslib/AltosQuaternion.java @@ -115,10 +115,17 @@ public class AltosQuaternion implements AltosJsonable { } public AltosQuaternion(AltosQuaternion q) { - this.r = q.r; - this.x = q.x; - this.y = q.y; - this.z = q.z; + r = q.r; + x = q.x; + y = q.y; + z = q.z; + } + + public AltosQuaternion() { + r = 1; + x = 0; + y = 0; + z = 0; } static public AltosQuaternion vector(double x, double y, double z) { diff --git a/altoslib/AltosRotation.java b/altoslib/AltosRotation.java index 321a0f30..6db0b541 100644 --- a/altoslib/AltosRotation.java +++ b/altoslib/AltosRotation.java @@ -48,14 +48,18 @@ public class AltosRotation implements AltosJsonable { rotation = up.vectors_to_rotation(orient); } - public AltosJson json() { - return rotation.json(); - } - public AltosRotation(AltosJson j) { rotation = new AltosQuaternion(j); } + public AltosRotation() { + rotation = new AltosQuaternion(); + } + + public AltosJson json() { + return rotation.json(); + } + public static AltosRotation fromJson(AltosJson j, AltosRotation def) { if (j == null) return def; -- cgit v1.2.3 From 93de1d7ec841c55f5a1a63d34b422780a6fbe3c3 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 17 Jun 2016 00:00:09 -0700 Subject: altoslib: Add JSON-based object saving/restoring code This uses Java reflection to construct JSON strings for most Java objects. Signed-off-by: Keith Packard --- altoslib/AltosJson.java | 1268 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1268 insertions(+) create mode 100644 altoslib/AltosJson.java diff --git a/altoslib/AltosJson.java b/altoslib/AltosJson.java new file mode 100644 index 00000000..6ae7e7dc --- /dev/null +++ b/altoslib/AltosJson.java @@ -0,0 +1,1268 @@ +/* + * Copyright © 2016 Keith Packard + * + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.altoslib_11; + +import java.io.*; +import java.util.*; +import java.text.*; +import java.lang.*; +import java.lang.reflect.*; + +class JsonUtil { + StringBuffer quote(StringBuffer result, String a) { + result.append("\""); + for (int i = 0; i < a.length(); i++) { + char c = a.charAt(i); + + switch (c) { + case '"': + case '\\': + result.append('\\').append(c); + break; + case '\n': + result.append("\\n"); + break; + default: + result.append(c); + break; + } + } + result.append("\""); + return result; + } + + StringBuffer append(StringBuffer result, AltosJson value, int indent, boolean pretty) { + value.append(result, indent, pretty); + return result; + } + + StringBuffer append(StringBuffer result, String string) { + result.append(string); + return result; + } + + StringBuffer indent(StringBuffer result, int indent) { + result.append("\n"); + for (int i = 0; i < indent; i++) + result.append("\t"); + return result; + } + static NumberFormat get_nf_json() { + DecimalFormat nf = (DecimalFormat) NumberFormat.getNumberInstance(Locale.ROOT); + nf.setParseIntegerOnly(false); + nf.setGroupingUsed(false); + nf.setMaximumFractionDigits(17); + nf.setMinimumFractionDigits(0); + nf.setMinimumIntegerDigits(1); + nf.setDecimalSeparatorAlwaysShown(false); + return nf; + } + + static NumberFormat nf_json = get_nf_json(); +} + +class JsonHash extends JsonUtil { + Hashtable hash; + + void append_hash(StringBuffer result, int indent, boolean pretty) { + boolean first = true; + + result.append("{"); + + ArrayList key_list = new ArrayList(hash.keySet()); + + Collections.sort(key_list, new Comparator() { + @Override + public int compare(String a, String b) { return a.compareTo(b); } + }); + + for (String key : key_list) { + AltosJson value = hash.get(key); + + if (!first) + result.append(","); + first = false; + if (pretty) + indent(result, indent+1); + quote(result, key); + append(result, ": "); + append(result, value, indent+1, pretty); + } + if (pretty) + indent(result, indent); + append(result, "}"); + } + + void put(String key, AltosJson value) { + hash.put(key, value); + } + + AltosJson get(String key) { + return hash.get(key); + } + + JsonHash() { + hash = new Hashtable(); + } +} + +class JsonArray extends JsonUtil { + ArrayList array; + + void append_array(StringBuffer result, int indent, boolean pretty) { + boolean first = true; + + append(result, "["); + for (int i = 0; i < array.size(); i++) { + AltosJson value = array.get(i); + + if (!first) + append(result, ","); + first = false; + if (pretty) + indent(result, indent+1); + append(result, value, indent+1, pretty); + } + if (pretty) + indent(result, indent); + append(result, "]"); + } + + void put(int index, AltosJson value) { + if (index >= array.size()) + array.add(index, value); + else + array.set(index, value); + } + + AltosJson get(int index) { + if (index < 0 || index > array.size()) + return null; + return array.get(index); + } + + int size() { + return array.size(); + } + + JsonArray() { + array = new ArrayList(); + } +} + +class JsonToken { + double dval; + long lval; + String sval; + boolean bval; + int token; + + static final int _string = 0; + static final int _double = 1; + static final int _long = 2; + static final int _boolean = 3; + static final int _oc = 4; + static final int _cc = 5; + static final int _os = 6; + static final int _cs = 7; + static final int _comma = 8; + static final int _colon = 9; + static final int _end = 10; + static final int _error = 11; + + static String token_name(int token) { + switch (token) { + case _string: + return "string"; + case _double: + return "number"; + case _long: + return "number"; + case _boolean: + return "boolean"; + case _oc: + return "{"; + case _cc: + return "}"; + case _os: + return "["; + case _cs: + return "]"; + case _comma: + return ","; + case _colon: + return ":"; + case _end: + return ""; + case _error: + return ""; + default: + return ""; + } + } + + String token_name() { + return token_name(token); + } + + JsonToken(int token) { + this.token = token; + } + + JsonToken(int token, boolean bval) { + this.token = token; + this.bval = bval; + } + + JsonToken(int token, double dval) { + this.token = token; + this.dval = dval; + } + + JsonToken(int token, long lval) { + this.token = token; + this.lval = lval; + } + + JsonToken(int token, String sval) { + this.token = token; + this.sval = sval; + } + + JsonToken(int token, StringBuffer bval) { + this(token, bval.toString()); + } +} + +/* + * Lexer for json + */ +class JsonLexer extends JsonUtil { + StringReader f; + int line; + int ungot = -2; + StringBuffer pending_token; + JsonToken token; + + static class keyword { + String word; + JsonToken token; + + JsonToken match(String value) { + if (word.equals(value)) + return token; + return null; + } + + keyword(String word, JsonToken token) { + this.word = word; + this.token = token; + } + } + + /* boolean values are the only keywords in json + */ + static keyword[] keywords = { + new keyword("true", new JsonToken(JsonToken._boolean, true)), + new keyword("false", new JsonToken(JsonToken._boolean, false)), + }; + + static JsonToken keyword(String word) { + for (int i = 0; i < keywords.length; i++) { + JsonToken token = keywords[i].match(word); + if (token != null) + return token; + } + return null; + } + + /* Get the next char (-1 for EOF) */ + int ch() throws IOException { + int c; + if (ungot != -2) { + c = ungot; + ungot = -2; + } else + c = f.read(); + if (c != -1) + pending_token.append((char) c); + if (c == '\n') + ++line; + return c; + } + + void unch(int c) { + if (ungot != -2) + throw new IllegalArgumentException("ungot buffer full"); + pending_token.deleteCharAt( pending_token.length()-1); + if (c == '\n') + --line; + ungot = c; + } + + String last_token_string() { + if (pending_token == null) + return null; + + return pending_token.toString(); + } + + static boolean is_long_range(double d) { + return -9223372036854775808.0 <= d && d <= 9223372036854775807.0; + } + + JsonToken lex() { + pending_token = new StringBuffer(); + + try { + for (;;) { + int c = ch(); + + switch (c) { + case -1: + return new JsonToken(JsonToken._end); + case '\n': + case ' ': + case '\t': + continue; + case '{': + return new JsonToken(JsonToken._oc); + case '}': + return new JsonToken(JsonToken._cc); + case '[': + return new JsonToken(JsonToken._os); + case ']': + return new JsonToken(JsonToken._cs); + case ',': + return new JsonToken(JsonToken._comma); + case ':': + return new JsonToken(JsonToken._colon); + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case '.': case '-': case '+': + StringBuffer dbuf = new StringBuffer(); + boolean is_double = false; + while (Character.isDigit(c) || c == '.' || c == '+' || c == '-' || c == 'e' || c == 'E') { + if (c == '.' || c == 'E') + is_double = true; + dbuf.appendCodePoint(c); + c = ch(); + } + unch(c); + String dstr = dbuf.toString(); + double dval; + try { + dval = nf_json.parse(dstr).doubleValue(); + } catch (ParseException pe) { + return new JsonToken(JsonToken._error, dstr); + } + if (is_double || !is_long_range(dval)) + return new JsonToken(JsonToken._double, dval); + else { + long lval = Long.parseLong(dstr); + return new JsonToken(JsonToken._long, lval); + } + case '"': + StringBuffer bval = new StringBuffer(); + for (;;) { + c = ch(); + if (c == '"') + break; + if (c == '\\') { + c = ch(); + switch (c) { + case 'n': + c = '\n'; + break; + case 't': + c = '\t'; + break; + default: + break; + } + } + bval.appendCodePoint(c); + } + return new JsonToken(JsonToken._string, bval); + default: + if (Character.isLetter(c)) { + StringBuffer tbuf = new StringBuffer(); + do { + tbuf.appendCodePoint(c); + c = ch(); + } while (Character.isLetter(c)); + unch(c); + JsonToken token = keyword(tbuf.toString()); + if (token != null) + return token; + } + break; + } + } + } catch (IOException ie) { + return new JsonToken(JsonToken._error, ""); + } + } + + void next() { + token = lex(); + } + + JsonToken expect(int e) { + JsonToken t = token; + if (t.token != e) + throw new IllegalArgumentException(String.format("got \"%s\" while expecting \"%s\"", + token.token_name(), + JsonToken.token_name(e))); + next(); + return t; + } + + JsonLexer(String s) { + f = new StringReader(s); + line = 1; + token = null; + } +} + +/* + * Parse a json string into a AltosJson object + */ +class JsonParse { + JsonLexer lexer; + + void parse_error(String format, Object ... arguments) { + throw new IllegalArgumentException(String.format("line %d: JSON parse error %s\n", + lexer.line, + String.format(format, arguments))); + } + + /* Hashes are { string: value ... } */ + JsonHash hash() { + JsonHash hash = new JsonHash(); + + /* skip the open brace */ + lexer.next(); + for (;;) { + /* Allow for empty hashes */ + if (lexer.token.token == JsonToken._cc) { + lexer.next(); + return hash; + } + + /* string : value */ + String key = lexer.expect(JsonToken._string).sval; + lexer.expect(JsonToken._colon); + AltosJson value = value(); + hash.put(key, value); + + switch (lexer.token.token) { + case JsonToken._comma: + lexer.next(); + break; + case JsonToken._cc: + lexer.next(); + return hash; + default: + parse_error("got %s expect \",\" or \"}\"", lexer.token.token_name()); + return null; + } + } + } + + /* Arrays are [ value ... ] */ + JsonArray array() { + JsonArray array = new JsonArray(); + + lexer.next(); + for (int i = 0;; i++) { + /* Allow for empty arrays */ + if (lexer.token.token == JsonToken._cs) { + lexer.next(); + return array; + } + + AltosJson value = value(); + array.put(i, value); + switch (lexer.token.token) { + case JsonToken._comma: + lexer.next(); + break; + case JsonToken._cs: + lexer.next(); + return array; + default: + parse_error("got %s expect \",\" or \"]\"", lexer.token.token_name()); + return null; + } + } + } + + /* Json is a simple LL language; one token is sufficient to + * identify the next object in the input + */ + AltosJson value() { + switch (lexer.token.token) { + case JsonToken._oc: + return new AltosJson(hash()); + case JsonToken._os: + return new AltosJson(array()); + case JsonToken._double: + double dval = lexer.token.dval; + lexer.next(); + return new AltosJson(dval); + case JsonToken._long: + long lval = lexer.token.lval; + lexer.next(); + return new AltosJson(lval); + case JsonToken._string: + String sval = lexer.token.sval; + lexer.next(); + return new AltosJson(sval); + case JsonToken._boolean: + boolean bval = lexer.token.bval; + lexer.next(); + return new AltosJson(bval); + default: + parse_error("Unexpected token \"%s\"", lexer.token.token_name()); + } + return null; + } + + AltosJson parse() { + lexer.next(); + return value(); + } + + JsonParse(String s) { + lexer = new JsonLexer(s); + } +} + +public class AltosJson extends JsonUtil { + private static final int type_none = 0; + private static final int type_hash = 1; + private static final int type_array = 2; + private static final int type_double = 3; + private static final int type_long = 4; + private static final int type_string = 5; + private static final int type_boolean = 6; + + private int type; + + private JsonHash hash; + private JsonArray array; + private double d_number; + private long l_number; + private String string; + private boolean bool; + + /* Generate string representation of the value + */ + StringBuffer append(StringBuffer result, int indent, boolean pretty) { + switch (type) { + case type_hash: + hash.append_hash(result, indent, pretty); + break; + case type_array: + array.append_array(result, indent, pretty); + break; + case type_double: + String dval = nf_json.format(d_number); + if (dval.equals("-0")) + dval = "0"; + result.append(dval); + break; + case type_long: + result.append(new Long(l_number).toString()); + break; + case type_string: + quote(result, string); + break; + case type_boolean: + result.append(bool ? "true" : "false"); + break; + } + return result; + } + + private String toString(int indent, boolean pretty) { + StringBuffer result = new StringBuffer(); + append(result, indent, pretty); + return result.toString(); + } + + public String toString() { + return toString(0, false); + } + + public String toPrettyString() { + return toString(0, true); + } + + /* Parse string representation to a value + */ + + public static AltosJson fromString(String string) { + JsonParse parse = new JsonParse(string); + try { + return parse.parse(); + } catch (IllegalArgumentException ie) { + System.out.printf("json:\n%s\n%s\n", string, ie.getMessage()); + return null; + } + } + + /* Accessor functions + */ + private boolean assert_type(boolean setting, int type, int other_type, String error) { + if (setting && this.type == type_none) { + this.type = type; + return false; + } + if (this.type != type && this.type != other_type) + throw new IllegalArgumentException(error); + return true; + } + + private boolean assert_type(boolean setting, int type, String error) { + return assert_type(setting, type, type, error); + } + + private void assert_hash(boolean setting) { + if (!assert_type(setting, type_hash, "not a hash")) + hash = new JsonHash(); + } + + private void assert_array(boolean setting) { + if (!assert_type(setting, type_array, "not an array")) + array = new JsonArray(); + } + + private void assert_number() { + assert_type(false, type_double, type_long, "not a number"); + } + + private void assert_double() { + assert_type(true, type_double, type_long, "not a number"); + } + + private void assert_long() { + assert_type(true, type_long, type_double, "not a number"); + } + + private void assert_string(boolean setting) { + assert_type(setting, type_string, "not a string"); + } + + private void assert_boolean(boolean setting) { + assert_type(setting, type_boolean, "not a boolean"); + } + + /* Primitive accessors + */ + public double number() { + assert_number(); + if (type == type_double) + return d_number; + else + return (double) l_number; + } + + public long l_number() { + assert_number(); + if (type == type_double) + return (long) d_number; + else + return l_number; + } + + public String string() { + assert_string(false); + return string; + } + + public boolean bool() { + assert_boolean(false); + return bool; + } + + public AltosJson get(int index) { + assert_array(false); + return array.get(index); + } + + public AltosJson get(String key) { + assert_hash(false); + return hash.get(key); + } + + public int size() { + assert_array(false); + return array.size(); + } + + /* Typed accessors with defaulting + */ + public double get_double(String key, double def) { + AltosJson value = get(key); + if (value != null) { + return value.number(); + } + return def; + } + + public long get_long(String key, long def) { + AltosJson value = get(key); + if (value != null) + return value.l_number(); + return def; + } + + public int get_int(String key, int def) { + AltosJson value = get(key); + if (value != null) + return (int) value.l_number(); + return def; + } + + public String get_string(String key, String def) { + AltosJson value = get(key); + if (value != null) + return value.string(); + return def; + } + + public boolean get_boolean(String key, boolean def) { + AltosJson value = get(key); + if (value != null) + return value.bool(); + return def; + } + + public double get_double(int index, double def) { + AltosJson value = get(index); + if (value != null) + return value.number(); + return def; + } + + public long get_long(int index, long def) { + AltosJson value = get(index); + if (value != null) + return value.l_number(); + return def; + } + + public int get_int(int index, int def) { + AltosJson value = get(index); + if (value != null) + return (int) value.l_number(); + return def; + } + + public String get_string(int index, String def) { + AltosJson value = get(index); + if (value != null) + return value.string(); + return def; + } + + public boolean get_boolean(int index, boolean def) { + AltosJson value = get(index); + if (value != null) + return value.bool(); + return def; + } + + public double[] get_double_array(String key, double[] def) { + AltosJson value = get(key); + if (value != null) { + double[] ret = new double[value.size()]; + for (int i = 0; i < value.size(); i++) + ret[i] = value.get_double(i, def == null ? 0 : def[i]); + return ret; + } + return def; + } + + public int[] get_int_array(String key, int[] def) { + AltosJson value = get(key); + if (value != null) { + int[] ret = new int[value.size()]; + for (int i = 0; i < value.size(); i++) + ret[i] = value.get_int(i, def == null ? 0 : def[i]); + return ret; + } + return def; + } + + /* Array setter functions + */ + public AltosJson put(int index, AltosJson value) { + assert_array(true); + array.put(index, value); + return value; + } + + public Object put(int index, Object value) { + assert_array(true); + if (value != null) + array.put(index, new AltosJson(value)); + return value; + } + + public double put(int index, double value) { + assert_array(true); + array.put(index, new AltosJson(value)); + return value; + } + + public AltosJson put(int index, double[] value) { + if (value != null) { + assert_array(true); + array.put(index, new AltosJson(value)); + } + return this; + } + + public int[] put(int index, int[] value) { + if (value != null) { + assert_array(true); + array.put(index, new AltosJson(value)); + } + return value; + } + + public String put(int index, String value) { + if (value != null) { + assert_array(true); + array.put(index, new AltosJson(value)); + } + return value; + } + + public boolean put(int index, boolean value) { + assert_array(true); + array.put(index, new AltosJson(value)); + return value; + } + + /* Hash setter functions + */ + public AltosJson put(String key, AltosJson value) { + assert_hash(true); + hash.put(key, value); + return value; + } + + public Object put(String key, Object value) { + assert_hash(true); + if (value != null) + hash.put(key, new AltosJson(value)); + return value; + } + + public double put(String key, double value) { + assert_hash(true); + hash.put(key, new AltosJson(value)); + return value; + } + + public String put(String key, String value) { + if (value != null) { + assert_hash(true); + hash.put(key, new AltosJson(value)); + } + return value; + } + + public boolean put(String key, boolean value) { + assert_hash(true); + hash.put(key, new AltosJson(value)); + return value; + } + + public AltosJson[] put(String key, AltosJson[] value) { + if (value != null) { + assert_hash(true); + hash.put(key, new AltosJson(value)); + } + return value; + } + + public double[] put(String key, double[] value) { + if (value != null) { + assert_hash(true); + hash.put(key, new AltosJson(value)); + } + return value; + } + + public int[] put(String key, int[] value) { + if (value != null) { + assert_hash(true); + hash.put(key, new AltosJson(value)); + } + return value; + } + + /* Primitive setter functions + */ + public double put(double value) { + assert_double(); + d_number = value; + return value; + } + + public byte put(byte value) { + assert_long(); + l_number = value; + return value; + } + + public char put(char value) { + assert_long(); + l_number = value; + return value; + } + + public int put(int value) { + assert_long(); + l_number = value; + return value; + } + + public long put(long value) { + assert_long(); + l_number = value; + return value; + } + + public String put(String value) { + assert_string(true); + string = value; + return value; + } + + public boolean put(boolean value) { + assert_boolean(true); + bool = value; + return value; + } + + private boolean isInnerClass(Class c) { + for (Field field : c.getDeclaredFields()) + if (field.isSynthetic()) + return true; + return false; + } + + /* Construct an object of the specified class from the JSON + * representation. + * + * This works as long as the structure is non-recursive, and + * all inner classes are only members of their immediate outer + * class + */ + private Object make(Class c, Class enclosing_class, Object enclosing_object) { + Object ret; + if (c == Boolean.TYPE) { + ret = bool(); + } else if (c == Byte.TYPE) { + ret = (Byte) (byte) l_number(); + } else if (c == Character.TYPE) { + ret = (Character) (char) l_number(); + } else if (c == Integer.TYPE) { + ret = (Integer) (int) l_number(); + } else if (c == Long.TYPE) { + ret = l_number(); + } else if (c == Double.TYPE) { + ret = number(); + } else if (c == String.class) { + ret = string(); + } else if (c.isArray()) { + assert_array(false); + + Class element_class = c.getComponentType(); + if (element_class == Double.TYPE) { + double[] array = (double[]) Array.newInstance(element_class, size()); + for (int i = 0; i < array.length; i++) + array[i] = (Double) get(i).make(element_class); + ret = array; + } else { + Object[] array = (Object[]) Array.newInstance(element_class, size()); + for (int i = 0; i < array.length; i++) + array[i] = get(i).make(element_class); + ret = array; + } + } else { + assert_hash(false); + Object object = null; + try { + /* Inner classes have a hidden extra parameter + * to the constructor. Assume that the enclosing object is + * of the enclosing class and construct the object + * based on that. + */ + if (enclosing_class != null && isInnerClass(c)) { + Constructor ctor = ((Class)c).getDeclaredConstructor((Class) enclosing_class); + object = ctor.newInstance(enclosing_object); + } else { + object = c.newInstance(); + } + for (; c != null; c = c.getSuperclass()) { + for (Field field : c.getDeclaredFields()) { + String fieldName = field.getName(); + Class fieldClass = field.getType(); + String className = fieldClass.getName(); + + if (Modifier.isStatic(field.getModifiers())) + continue; + if (field.isSynthetic()) + continue; + try { + AltosJson json = get(fieldName); + if (json != null) { + Object val = json.make(fieldClass, c, object); + field.setAccessible(true); + field.set(object, val); + } + } catch (IllegalAccessException ie) { + } + } + } + ret = object; + } catch (InvocationTargetException ie) { + ret = null; + } catch (NoSuchMethodException ie) { + ret = null; + } catch (InstantiationException ie) { + ret = null; + } catch (IllegalAccessException ie) { + ret = null; + } + } + return ret; + } + + /* This is the public API for the + * above function which doesn't handle + * inner classes + */ + public Object make(Class c) { + return make(c, null, null); + } + + /* Constructors, one for each primitive type, String and Object */ + public AltosJson(boolean bool) { + type = type_boolean; + this.bool = bool; + } + + public AltosJson(byte number) { + type = type_long; + this.l_number = number; + } + + public AltosJson(char number) { + type = type_long; + this.l_number = number; + } + + public AltosJson(int number) { + type = type_long; + this.l_number = number; + } + + public AltosJson(long number) { + type = type_long; + this.l_number = number; + } + + public AltosJson(double number) { + type = type_double; + this.d_number = number; + } + + public AltosJson(String string) { + type = type_string; + this.string = string; + } + + public AltosJson(Object object) { + if (object instanceof Boolean) { + type = type_boolean; + bool = (Boolean) object; + } else if (object instanceof Byte) { + type = type_long; + l_number = (Byte) object; + } else if (object instanceof Character) { + type = type_long; + l_number = (Character) object; + } else if (object instanceof Integer) { + type = type_long; + l_number = (Integer) object; + } else if (object instanceof Long) { + type = type_long; + l_number = (Long) object; + } else if (object instanceof Double) { + type = type_double; + d_number = (Double) object; + } else if (object instanceof String) { + type = type_string; + string = (String) object; + } else if (object.getClass().isArray()) { + assert_array(true); + + Class component_class = object.getClass().getComponentType(); + if (component_class == Boolean.TYPE) { + boolean[] array = (boolean[]) object; + for (int i = 0; i < array.length; i++) + put(i, new AltosJson(array[i])); + } else if (component_class == Byte.TYPE) { + byte[] array = (byte[]) object; + for (int i = 0; i < array.length; i++) + put(i, new AltosJson(array[i])); + } else if (component_class == Character.TYPE) { + char[] array = (char[]) object; + for (int i = 0; i < array.length; i++) + put(i, new AltosJson(array[i])); + } else if (component_class == Integer.TYPE) { + int[] array = (int[]) object; + for (int i = 0; i < array.length; i++) + put(i, new AltosJson(array[i])); + } else if (component_class == Long.TYPE) { + long[] array = (long[]) object; + for (int i = 0; i < array.length; i++) + put(i, new AltosJson(array[i])); + } else if (component_class == Double.TYPE) { + double[] array = (double[]) object; + for (int i = 0; i < array.length; i++) + put(i, new AltosJson(array[i])); + } else { + Object[] array = (Object[]) object; + for (int i = 0; i < array.length; i++) + put(i, new AltosJson(array[i])); + } + } else { + assert_hash(true); + for (Class c = object.getClass(); c != null; c = c.getSuperclass()) { + for (Field field : c.getDeclaredFields()) { + String fieldName = field.getName(); + Class fieldClass = field.getType(); + String className = fieldClass.getName(); + + /* Skip static fields */ + if (Modifier.isStatic(field.getModifiers())) + continue; + + /* Skip synthetic fields. We're assuming + * those are always an inner class reference + * to the outer class object + */ + if (field.isSynthetic()) + continue; + try { + /* We may need to force the field to be accessible if + * it is private + */ + field.setAccessible(true); + Object val = field.get(object); + if (val != null) { + AltosJson json = new AltosJson(val); + put(fieldName, json); + } + } catch (IllegalAccessException ie) { + } + } + } + } + } + + /* Array constructors, one for each primitive type, String and Object */ + public AltosJson(boolean[] bools) { + assert_array(true); + for(int i = 0; i < bools.length; i++) + put(i, new AltosJson(bools[i])); + } + + public AltosJson(byte[] numbers) { + assert_array(true); + for(int i = 0; i < numbers.length; i++) + put(i, new AltosJson(numbers[i])); + } + + public AltosJson(char[] numbers) { + assert_array(true); + for(int i = 0; i < numbers.length; i++) + put(i, new AltosJson(numbers[i])); + } + + public AltosJson(int[] numbers) { + assert_array(true); + for(int i = 0; i < numbers.length; i++) + put(i, new AltosJson(numbers[i])); + } + + public AltosJson(long[] numbers) { + assert_array(true); + for(int i = 0; i < numbers.length; i++) + put(i, new AltosJson(numbers[i])); + } + + public AltosJson(double[] numbers) { + assert_array(true); + for(int i = 0; i < numbers.length; i++) + put(i, new AltosJson(numbers[i])); + } + + public AltosJson(String[] strings) { + assert_array(true); + for(int i = 0; i < strings.length; i++) + put(i, new AltosJson(strings[i])); + } + + public AltosJson(AltosJson[] jsons) { + assert_array(true); + for (int i = 0; i < jsons.length; i++) + put(i, jsons[i]); + } + + public AltosJson(Object[] array) { + assert_array(true); + for (int i = 0; i < array.length; i++) + put(i, new AltosJson(array[i])); + } + + /* Empty constructor + */ + public AltosJson() { + type = type_none; + } + + public AltosJson(JsonHash hash) { + type = type_hash; + this.hash = hash; + } + + public AltosJson(JsonArray array) { + type = type_array; + this.array = array; + } +} -- cgit v1.2.3 From 8df6afe843e184e98e5d965cee3af562dfa30a3b Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 17 Jun 2016 00:01:15 -0700 Subject: altoslib: Use reflection JSON code for frequency preferences This replaces the non-reflective JSON code with reflective code, which is much shorter. Signed-off-by: Keith Packard --- altoslib/AltosPreferences.java | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/altoslib/AltosPreferences.java b/altoslib/AltosPreferences.java index 8e625674..51fc4205 100644 --- a/altoslib/AltosPreferences.java +++ b/altoslib/AltosPreferences.java @@ -135,23 +135,11 @@ public class AltosPreferences { public static AltosFrequency[] load_common_frequencies() { AltosFrequency[] frequencies = null; - AltosJson sets; - try { - sets = AltosJson.fromString(backend.getString(frequenciesPreference,null)); - - if (sets != null) { - ArrayList freqs = new ArrayList(); - - for (int i = 0; i < sets.size(); i++) { - AltosFrequency f = AltosFrequency.fromJson(sets.get(i), null); - if (f != null) - freqs.add(f); - } - frequencies = freqs.toArray(new AltosFrequency[0]); - } + AltosJson json = AltosJson.fromString(backend.getString(frequenciesPreference, + null)); + frequencies = (AltosFrequency[]) json.make(frequencies.getClass()); } catch (Exception e) { - sets = null; } if (frequencies == null) { -- cgit v1.2.3 From 7175774c4f60ed3efd54417f2035b50ea0108c7b Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 17 Jun 2016 00:02:05 -0700 Subject: altoslib: Improve AltosState save/restore debugging When save/restore generate different values, write out the two versions to one.json and two.json for easy comparison. Signed-off-by: Keith Packard --- altoslib/AltosState.java | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index 26cedce9..93586e8c 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -315,7 +315,7 @@ public class AltosState implements Cloneable, AltosJsonable { computed.finish_update(); } - AltosCValue() { + public AltosCValue() { measured = new AltosIValue(); computed = new AltosIValue(); } @@ -1638,16 +1638,27 @@ public class AltosState implements Cloneable, AltosJsonable { AltosState s = new AltosState(); s.copy(this); + /* Code to test state save/restore. Enable only for that purpose + */ if (false) { - AltosJson json = json(); + AltosJson json = new AltosJson(this); String onetrip = json.toPrettyString(); AltosJson back = AltosJson.fromString(onetrip); - AltosState tripstate = AltosState.fromJson(back); - AltosJson tripjson = tripstate.json(); + AltosState tripstate = (AltosState) back.make(this.getClass()); + AltosJson tripjson = new AltosJson(tripstate); String twotrip = tripjson.toPrettyString(); if (!onetrip.equals(twotrip)) { - System.out.printf("one:\n%s\ntwo:\n%s\n", onetrip, twotrip); + try { + FileWriter one_file = new FileWriter("one.json", true); + one_file.write(onetrip); + one_file.flush(); + FileWriter two_file = new FileWriter("two.json", true); + two_file.write(twotrip); + two_file.flush(); + } catch (Exception e) { + } + System.out.printf("json error\n"); System.exit(1); } } -- cgit v1.2.3 From 1dce20f7eee56166ac61798ca26eeb323dc8f012 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 17 Jun 2016 00:52:38 -0700 Subject: altoslib: Get rid of manual JSON encoding stuff Now that the reflective JSON stuff is working, we can delete all of the manual code. Signed-off-by: Keith Packard --- altoslib/AltosCompanion.java | 28 +--- altoslib/AltosFrequency.java | 22 +-- altoslib/AltosGPS.java | 63 +------- altoslib/AltosGPSSat.java | 25 +-- altoslib/AltosGreatCircle.java | 34 +---- altoslib/AltosIMU.java | 33 +--- altoslib/AltosJson.java | 23 ++- altoslib/AltosMag.java | 26 +--- altoslib/AltosMs5607.java | 44 +----- altoslib/AltosPreferences.java | 8 +- altoslib/AltosQuaternion.java | 22 +-- altoslib/AltosRotation.java | 17 +-- altoslib/AltosState.java | 340 +---------------------------------------- altoslib/Makefile.am | 1 - 14 files changed, 39 insertions(+), 647 deletions(-) diff --git a/altoslib/AltosCompanion.java b/altoslib/AltosCompanion.java index 2db8ea1b..d517fd4f 100644 --- a/altoslib/AltosCompanion.java +++ b/altoslib/AltosCompanion.java @@ -19,7 +19,7 @@ package org.altusmetrum.altoslib_11; import java.io.*; -public class AltosCompanion implements AltosJsonable { +public class AltosCompanion { public final static int board_id_telescience = 0x0a; public final static int MAX_CHANNELS = 12; @@ -37,30 +37,4 @@ public class AltosCompanion implements AltosJsonable { channels = MAX_CHANNELS; companion_data = new int[channels]; } - - public AltosJson json() { - AltosJson j = new AltosJson(); - - j.put("tick", tick); - j.put("board_id", board_id); - j.put("update_period", update_period); - j.put("channels", channels); - j.put("companion_data", companion_data); - return j; - } - - public AltosCompanion(AltosJson j) { - tick = j.get_int("tick", tick); - board_id = j.get_int("board_id", board_id); - update_period = j.get_int("update_period", update_period); - channels = j.get_int("channels", channels); - companion_data = j.get_int_array("companion_data", new int[channels]); - } - - public static AltosCompanion fromJson(AltosJson j, AltosCompanion def) { - if (j == null) - return def; - - return new AltosCompanion(j); - } } diff --git a/altoslib/AltosFrequency.java b/altoslib/AltosFrequency.java index 3c1631a8..874a9bcc 100644 --- a/altoslib/AltosFrequency.java +++ b/altoslib/AltosFrequency.java @@ -21,7 +21,7 @@ import java.io.*; import java.util.*; import java.text.*; -public class AltosFrequency implements AltosJsonable { +public class AltosFrequency { public double frequency; public String description; @@ -57,28 +57,8 @@ public class AltosFrequency implements AltosJsonable { return diff < 0.010; } - - public AltosJson json() { - AltosJson j = new AltosJson(); - - j.put("frequency", frequency); - j.put("description", description); - return j; - } - public AltosFrequency(double f, String d) { frequency = f; description = d; } - - private AltosFrequency(AltosJson j) { - frequency = j.get_double("frequency", 0.0); - description = j.get_string("description", ""); - } - - public static AltosFrequency fromJson(AltosJson j, AltosFrequency def) { - if (j == null) - return def; - return new AltosFrequency(j); - } } diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java index ba2eda1b..d29ccdd1 100644 --- a/altoslib/AltosGPS.java +++ b/altoslib/AltosGPS.java @@ -21,7 +21,7 @@ import java.text.*; import java.util.concurrent.*; import java.io.*; -public class AltosGPS implements Cloneable, AltosJsonable { +public class AltosGPS implements Cloneable { public final static int MISSING = AltosLib.MISSING; @@ -388,65 +388,4 @@ public class AltosGPS implements Cloneable, AltosJsonable { break; } } - - public AltosJson json() { - AltosJson j = new AltosJson(); - - j.put("nsat", nsat); - j.put("locked", locked); - j.put("connected", connected); - j.put("lat", lat); - j.put("lon", lon); - j.put("alt", alt); - j.put("year", year); - j.put("month", month); - j.put("day", day); - j.put("hour", hour); - j.put("minute", minute); - j.put("second", second); - - j.put("ground_speed", ground_speed); - j.put("course", course); - j.put("climb_rate", climb_rate); - j.put("pdop", pdop); - j.put("hdop", hdop); - j.put("vdop", vdop); - j.put("h_error", h_error); - j.put("v_error", v_error); - j.put("cc_gps_sat", cc_gps_sat); - return j; - } - - public AltosGPS(AltosJson j) { - init(); - nsat = j.get_int("nsat", nsat); - locked = j.get_boolean("locked", locked); - connected = j.get_boolean("connected", connected); - lat = j.get_double("lat", lat); - lon = j.get_double("lon", lon); - alt = j.get_double("alt", alt); - year = j.get_int("year", year); - month = j.get_int("month", month); - day = j.get_int("day", day); - hour = j.get_int("hour", hour); - minute = j.get_int("minute", minute); - second = j.get_int("second", second); - - ground_speed = j.get_double("ground_speed", ground_speed); - course = j.get_int("course", course); - climb_rate = j.get_double("climb_rate", climb_rate); - pdop = j.get_double("pdop", pdop); - hdop = j.get_double("hdop", hdop); - vdop = j.get_double("vdop", vdop); - h_error = j.get_double("h_error", h_error); - v_error = j.get_double("v_error", v_error); - cc_gps_sat = AltosGPSSat.json_array(j.get("cc_gps_sat")); - } - - public static AltosGPS fromJson(AltosJson j, AltosGPS def) { - if (j == null) - return def; - - return new AltosGPS(j); - } } diff --git a/altoslib/AltosGPSSat.java b/altoslib/AltosGPSSat.java index 8cdeed0e..8b95c150 100644 --- a/altoslib/AltosGPSSat.java +++ b/altoslib/AltosGPSSat.java @@ -22,7 +22,7 @@ import java.text.*; import java.util.*; import java.util.concurrent.*; -public class AltosGPSSat implements AltosJsonable { +public class AltosGPSSat { public int svid; public int c_n0; @@ -33,28 +33,5 @@ public class AltosGPSSat implements AltosJsonable { public AltosGPSSat() { } - - public AltosJson json() { - AltosJson j = new AltosJson(); - j.put("svid", svid); - j.put("c_n0", c_n0); - return j; - } - - private AltosGPSSat(AltosJson j) { - svid = j.get_int("svid", 0); - c_n0 = j.get_int("c_n0", 0); - } - - static public AltosGPSSat[] json_array(AltosJson j) { - if (j == null) - return null; - - int size = j.size(); - AltosGPSSat[] sats = new AltosGPSSat[size]; - for (int i = 0; i < size; i++) - sats[i] = new AltosGPSSat(j.get(i)); - return sats; - } } diff --git a/altoslib/AltosGreatCircle.java b/altoslib/AltosGreatCircle.java index f2c1783d..a2f12807 100644 --- a/altoslib/AltosGreatCircle.java +++ b/altoslib/AltosGreatCircle.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.lang.Math; import java.io.*; -public class AltosGreatCircle implements Cloneable, AltosJsonable { +public class AltosGreatCircle implements Cloneable { public double distance; public double bearing; public double range; @@ -71,7 +71,10 @@ public class AltosGreatCircle implements Cloneable, AltosJsonable { course = 2 * Math.PI-course; } distance = d * earth_radius; - bearing = course * 180/Math.PI; + if (Double.isNaN(course) || Double.isInfinite(course)) + bearing = 0; + else + bearing = course * 180/Math.PI; double height_diff = end_alt - start_alt; range = Math.sqrt(distance * distance + height_diff * height_diff); @@ -103,31 +106,4 @@ public class AltosGreatCircle implements Cloneable, AltosJsonable { range = 0; elevation = 0; } - - public AltosJson json() { - AltosJson j = new AltosJson(); - - j.put("distance", distance); - j.put("bearing", bearing); - j.put("range", range); - j.put("elevation", elevation); - - return j; - } - - public AltosGreatCircle(AltosJson j) { - this(); - - distance = j.get_double("distance", distance); - bearing = j.get_double("bearing", bearing); - range = j.get_double("range", range); - elevation = j.get_double("elevation", elevation); - } - - public static AltosGreatCircle fromJson(AltosJson j, AltosGreatCircle def) { - if (j == null) - return def; - - return new AltosGreatCircle(j); - } } diff --git a/altoslib/AltosIMU.java b/altoslib/AltosIMU.java index 672c6111..dbadcf89 100644 --- a/altoslib/AltosIMU.java +++ b/altoslib/AltosIMU.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; -public class AltosIMU implements Cloneable, AltosJsonable { +public class AltosIMU implements Cloneable { public int accel_along; public int accel_across; public int accel_through; @@ -115,35 +115,4 @@ public class AltosIMU implements Cloneable, AltosJsonable { break; } } - - public AltosIMU (AltosJson j) { - this(); - - accel_along = j.get_int("accel_along", accel_along); - accel_across = j.get_int("accel_across", accel_across); - accel_through = j.get_int("accel_through", accel_through); - - gyro_roll = j.get_int("gyro_roll", gyro_roll); - gyro_pitch = j.get_int("gyro_pitch", gyro_pitch); - gyro_yaw = j.get_int("gyro_yaw", gyro_yaw); - } - - static public AltosIMU fromJson(AltosJson j, AltosIMU def) { - if (j == null) - return def; - return new AltosIMU(j); - } - - public AltosJson json() { - AltosJson j = new AltosJson(); - - j.put("accel_along", accel_along); - j.put("accel_across", accel_across); - j.put("accel_through", accel_through); - - j.put("gyro_roll", gyro_roll); - j.put("gyro_pitch", gyro_pitch); - j.put("gyro_yaw", gyro_yaw); - return j; - } } diff --git a/altoslib/AltosJson.java b/altoslib/AltosJson.java index 6ae7e7dc..e979a459 100644 --- a/altoslib/AltosJson.java +++ b/altoslib/AltosJson.java @@ -280,6 +280,9 @@ class JsonLexer extends JsonUtil { static keyword[] keywords = { new keyword("true", new JsonToken(JsonToken._boolean, true)), new keyword("false", new JsonToken(JsonToken._boolean, false)), + new keyword("NegInfinity", new JsonToken(JsonToken._double, Double.NEGATIVE_INFINITY)), + new keyword("Infinity", new JsonToken(JsonToken._double, Double.POSITIVE_INFINITY)), + new keyword("NaN", new JsonToken(JsonToken._double, Double.NaN)) }; static JsonToken keyword(String word) { @@ -583,10 +586,19 @@ public class AltosJson extends JsonUtil { array.append_array(result, indent, pretty); break; case type_double: - String dval = nf_json.format(d_number); - if (dval.equals("-0")) - dval = "0"; - result.append(dval); + if (Double.isInfinite(d_number)) { + if (d_number < 0) + result.append("NegInfinity"); + else + result.append("Infinity"); + } else if (Double.isNaN(d_number)) { + result.append("NaN"); + } else { + String dval = nf_json.format(d_number); + if (dval.equals("-0")) + dval = "0"; + result.append(dval); + } break; case type_long: result.append(new Long(l_number).toString()); @@ -1030,7 +1042,6 @@ public class AltosJson extends JsonUtil { for (Field field : c.getDeclaredFields()) { String fieldName = field.getName(); Class fieldClass = field.getType(); - String className = fieldClass.getName(); if (Modifier.isStatic(field.getModifiers())) continue; @@ -1165,8 +1176,6 @@ public class AltosJson extends JsonUtil { for (Class c = object.getClass(); c != null; c = c.getSuperclass()) { for (Field field : c.getDeclaredFields()) { String fieldName = field.getName(); - Class fieldClass = field.getType(); - String className = fieldClass.getName(); /* Skip static fields */ if (Modifier.isStatic(field.getModifiers())) diff --git a/altoslib/AltosMag.java b/altoslib/AltosMag.java index 8d40bc60..5864529f 100644 --- a/altoslib/AltosMag.java +++ b/altoslib/AltosMag.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; -public class AltosMag implements Cloneable, AltosJsonable { +public class AltosMag implements Cloneable { public int along; public int across; public int through; @@ -93,28 +93,4 @@ public class AltosMag implements Cloneable, AltosJsonable { break; } } - - public AltosJson json() { - AltosJson j = new AltosJson(); - - j.put("along", along); - j.put("across", across); - j.put("through", through); - return j; - } - - public AltosMag(AltosJson j) { - this(); - - along = j.get_int("along", along); - across = j.get_int("across", across); - through = j.get_int("through", through); - } - - public static AltosMag fromJson(AltosJson j, AltosMag def) { - if (j == null) - return def; - - return new AltosMag(j); - } } diff --git a/altoslib/AltosMs5607.java b/altoslib/AltosMs5607.java index a769223e..e40479b1 100644 --- a/altoslib/AltosMs5607.java +++ b/altoslib/AltosMs5607.java @@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_11; import java.util.concurrent.*; import java.io.*; -public class AltosMs5607 implements AltosJsonable { +public class AltosMs5607 { public int reserved; public int sens; public int off; @@ -166,46 +166,4 @@ public class AltosMs5607 implements AltosJsonable { } convert(); } - - public AltosJson json() { - AltosJson j = new AltosJson(); - - j.put("reserved", reserved); - j.put("sens", sens); - j.put("off", off); - j.put("tcs", tcs); - j.put("tco", tco); - j.put("tref", tref); - j.put("tempsens", tempsens); - j.put("crc", crc); - j.put("raw_pres", raw_pres); - j.put("raw_temp", raw_temp); - j.put("pa", pa); - j.put("cc", cc); - return j; - } - - public AltosMs5607(AltosJson j) { - this(); - - reserved = j.get_int("reserved", reserved); - sens = j.get_int("sens", sens); - off = j.get_int("off", off); - tcs = j.get_int("tcs", tcs); - tco = j.get_int("tco", tco); - tref = j.get_int("tref", tref); - tempsens = j.get_int("tempsens", tempsens); - crc = j.get_int("crc", crc); - raw_pres = j.get_int("raw_pres", raw_pres); - raw_temp = j.get_int("raw_temp", raw_temp); - pa = j.get_int("pa", pa); - cc = j.get_int("cc", cc); - } - - public static AltosMs5607 fromJson(AltosJson j, AltosMs5607 def) { - if (j == null) - return def; - - return new AltosMs5607(j); - } } diff --git a/altoslib/AltosPreferences.java b/altoslib/AltosPreferences.java index 51fc4205..569aaa54 100644 --- a/altoslib/AltosPreferences.java +++ b/altoslib/AltosPreferences.java @@ -365,7 +365,7 @@ public class AltosPreferences { public static void set_state(AltosState state) { synchronized(backend) { - backend.putJson(String.format(statePreferenceFormat, state.serial), state.json()); + backend.putJson(String.format(statePreferenceFormat, state.serial), new AltosJson(state)); backend.putInt(statePreferenceLatest, state.serial); flush_preferences(); } @@ -405,10 +405,12 @@ public class AltosPreferences { public static AltosState state(int serial) { synchronized(backend) { try { - return AltosState.fromJson(backend.getJson(String.format(statePreferenceFormat, serial))); + AltosJson json = backend.getJson(String.format(statePreferenceFormat, serial)); + if (json != null) + return (AltosState) (json.make(AltosState.class)); } catch (Exception e) { - return null; } + return null; } } diff --git a/altoslib/AltosQuaternion.java b/altoslib/AltosQuaternion.java index 98c2fe51..79559429 100644 --- a/altoslib/AltosQuaternion.java +++ b/altoslib/AltosQuaternion.java @@ -17,7 +17,7 @@ package org.altusmetrum.altoslib_11; -public class AltosQuaternion implements AltosJsonable { +public class AltosQuaternion { double r; /* real bit */ double x, y, z; /* imaginary bits */ @@ -154,24 +154,4 @@ public class AltosQuaternion implements AltosJsonable { c_x * s_y * c_z + s_x * c_y * s_z, c_x * c_y * s_z - s_x * s_y * c_z); } - - public AltosJson json() { - AltosJson j = new AltosJson(); - - j.put("r", r); - j.put("x", x); - j.put("y", y); - j.put("z", z); - return j; - } - - public AltosQuaternion(AltosJson j) { - if (j == null) - return; - - r = j.get_double("r", 1); - x = j.get_double("x", 0); - y = j.get_double("y", 0); - z = j.get_double("z", 0); - } } diff --git a/altoslib/AltosRotation.java b/altoslib/AltosRotation.java index 6db0b541..97cf7896 100644 --- a/altoslib/AltosRotation.java +++ b/altoslib/AltosRotation.java @@ -17,7 +17,7 @@ package org.altusmetrum.altoslib_11; -public class AltosRotation implements AltosJsonable { +public class AltosRotation extends AltosQuaternion { private AltosQuaternion rotation; public double tilt() { @@ -48,22 +48,7 @@ public class AltosRotation implements AltosJsonable { rotation = up.vectors_to_rotation(orient); } - public AltosRotation(AltosJson j) { - rotation = new AltosQuaternion(j); - } - public AltosRotation() { rotation = new AltosQuaternion(); } - - public AltosJson json() { - return rotation.json(); - } - - public static AltosRotation fromJson(AltosJson j, AltosRotation def) { - if (j == null) - return def; - - return new AltosRotation(j); - } } diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index 93586e8c..15cf7d64 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -23,7 +23,7 @@ package org.altusmetrum.altoslib_11; import java.io.*; -public class AltosState implements Cloneable, AltosJsonable { +public class AltosState implements Cloneable { public static final int set_position = 1; public static final int set_gps = 2; @@ -46,7 +46,7 @@ public class AltosState implements Cloneable, AltosJsonable { private int prev_tick; public int boost_tick; - class AltosValue implements AltosJsonable { + class AltosValue { double value; double prev_value; private double max_value; @@ -177,28 +177,6 @@ public class AltosState implements Cloneable, AltosJsonable { prev_set_time = set_time; } - public AltosJson json() { - AltosJson j = new AltosJson(); - - j.put("value", value); - j.put("prev_value", prev_value); - j.put("max_value", max_value); - j.put("set_time", set_time); - j.put("prev_set_time", prev_set_time); - return j; - } - - AltosValue(AltosJson j) { - this(); - if (j != null) { - value = j.get_double("value", value); - prev_value = j.get_double("prev_value", prev_value); - max_value = j.get_double("max_value", max_value); - set_time = j.get_double("set_time", 0); - prev_set_time = j.get_double("prev_set_time", 0); - } - } - AltosValue() { value = AltosLib.MISSING; prev_value = AltosLib.MISSING; @@ -207,15 +185,9 @@ public class AltosState implements Cloneable, AltosJsonable { } - AltosValue AltosValue_fromJson(AltosJson j, AltosValue def) { - if (j == null) - return def; - return new AltosValue(j); - } - - class AltosCValue implements AltosJsonable { + class AltosCValue { - class AltosIValue extends AltosValue implements AltosJsonable { + class AltosIValue extends AltosValue { boolean can_max() { return c_can_max(); } @@ -223,10 +195,6 @@ public class AltosState implements Cloneable, AltosJsonable { AltosIValue() { super(); } - - AltosIValue(AltosJson j) { - super(j); - } }; public AltosIValue measured; @@ -319,25 +287,6 @@ public class AltosState implements Cloneable, AltosJsonable { measured = new AltosIValue(); computed = new AltosIValue(); } - - public AltosJson json() { - AltosJson j = new AltosJson(); - - j.put("measured", measured.json()); - j.put("computed", computed.json()); - return j; - } - - AltosCValue(AltosJson j) { - measured = new AltosIValue(j.get("measured")); - computed = new AltosIValue(j.get("computed")); - } - } - - AltosCValue AltosCValue_fromJson(AltosJson j, AltosCValue def) { - if (j == null) - return def; - return new AltosCValue(j); } private int state; @@ -389,15 +338,6 @@ public class AltosState implements Cloneable, AltosJsonable { AltosGpsGroundAltitude() { super(); } - - AltosGpsGroundAltitude (AltosJson j) { - super(j); - } - } - - AltosGpsGroundAltitude AltosGpsGroundAltitude_fromJson(AltosJson j, AltosGpsGroundAltitude def) { - if (j == null) return def; - return new AltosGpsGroundAltitude(j); } private AltosGpsGroundAltitude gps_ground_altitude; @@ -425,15 +365,6 @@ public class AltosState implements Cloneable, AltosJsonable { AltosGroundPressure () { super(); } - - AltosGroundPressure (AltosJson j) { - super(j); - } - } - - AltosGroundPressure AltosGroundPressure_fromJson(AltosJson j, AltosGroundPressure def) { - if (j == null) return def; - return new AltosGroundPressure(j); } private AltosGroundPressure ground_pressure; @@ -468,15 +399,6 @@ public class AltosState implements Cloneable, AltosJsonable { AltosAltitude() { super(); } - - AltosAltitude (AltosJson j) { - super(j); - } - } - - AltosAltitude AltosAltitude_fromJson(AltosJson j, AltosAltitude def) { - if (j == null) return def; - return new AltosAltitude(j); } private AltosAltitude altitude; @@ -501,15 +423,6 @@ public class AltosState implements Cloneable, AltosJsonable { AltosGpsAltitude() { super(); } - - AltosGpsAltitude (AltosJson j) { - super(j); - } - } - - AltosGpsAltitude AltosGpsAltitude_fromJson(AltosJson j, AltosGpsAltitude def) { - if (j == null) return def; - return new AltosGpsAltitude(j); } private AltosGpsAltitude gps_altitude; @@ -589,15 +502,6 @@ public class AltosState implements Cloneable, AltosJsonable { AltosPressure() { super(); } - - AltosPressure (AltosJson j) { - super(j); - } - } - - AltosPressure AltosPressure_fromJson(AltosJson j, AltosPressure def) { - if (j == null) return def; - return new AltosPressure(j); } private AltosPressure pressure; @@ -688,15 +592,6 @@ public class AltosState implements Cloneable, AltosJsonable { AltosSpeed() { super(); } - - AltosSpeed (AltosJson j) { - super(j); - } - } - - AltosSpeed AltosSpeed_fromJson(AltosJson j, AltosSpeed def) { - if (j == null) return def; - return new AltosSpeed(j); } private AltosSpeed speed; @@ -742,15 +637,6 @@ public class AltosState implements Cloneable, AltosJsonable { AltosAccel() { super(); } - - AltosAccel (AltosJson j) { - super(j); - } - } - - AltosAccel AltosAccel_fromJson(AltosJson j, AltosAccel def) { - if (j == null) return def; - return new AltosAccel(j); } AltosAccel acceleration; @@ -1668,222 +1554,4 @@ public class AltosState implements Cloneable, AltosJsonable { public AltosState () { init(); } - - public AltosJson json() { - AltosJson j = new AltosJson(); - - j.put("valid", true); - j.put("set", set); - j.put("received_time", received_time); - j.put("time", time); - j.put("prev_time", prev_time); - j.put("time_change", time_change); - j.put("tick", tick); - j.put("prev_tick", prev_tick); - j.put("boost_tick", boost_tick); - j.put("state", state); - j.put("flight", flight); - j.put("serial", serial); - j.put("altitude_32", altitude_32); - j.put("receiver_serial", receiver_serial); - j.put("landed", landed); - j.put("ascent", ascent); - j.put("boost", boost); - j.put("rssi", rssi); - j.put("status", status); - j.put("device_type", device_type); - j.put("config_major", config_major); - j.put("config_minor", config_minor); - j.put("apogee_delay", apogee_delay); - j.put("main_deploy", main_deploy); - j.put("flight_log_max", flight_log_max); - j.put("ground_altitude", ground_altitude); - j.put("gps_ground_altitude", gps_ground_altitude); - j.put("ground_pressure", ground_pressure); - j.put("altitude", altitude); - j.put("gps_altitude", gps_altitude); - j.put("gps_ground_speed", gps_ground_speed); - j.put("gps_ascent_rate", gps_ascent_rate); - j.put("gps_course", gps_course); - j.put("gps_speed", gps_speed); - j.put("pressure", pressure); - j.put("speed", speed); - j.put("acceleration", acceleration); - j.put("orient", orient); - j.put("kalman_height", kalman_height); - j.put("kalman_speed", kalman_speed); - j.put("kalman_acceleration", kalman_acceleration); - - j.put("battery_voltage",battery_voltage); - j.put("pyro_voltage",pyro_voltage); - j.put("temperature",temperature); - j.put("apogee_voltage",apogee_voltage); - j.put("main_voltage",main_voltage); - j.put("ignitor_voltage",ignitor_voltage); - j.put("gps", gps); - j.put("temp_gps", temp_gps); - j.put("temp_gps_sat_tick", temp_gps_sat_tick); - j.put("gps_pending", gps_pending); - j.put("gps_sequence", gps_sequence); - j.put("imu", imu); - j.put("mag", mag); - - j.put("npad", npad); - j.put("gps_waiting", gps_waiting); - j.put("gps_ready", gps_ready); - j.put("ngps", ngps); - j.put("from_pad", from_pad); - j.put("elevation", elevation); - j.put("range", range); - j.put("gps_height", gps_height); - j.put("pad_lat", pad_lat); - j.put("pad_lon", pad_lon); - j.put("pad_alt", pad_alt); - j.put("speak_tick", speak_tick); - j.put("speak_altitude", speak_altitude); - j.put("callsign", callsign); - j.put("firmware_version", firmware_version); - j.put("accel_plus_g", accel_plus_g); - j.put("accel_minus_g", accel_minus_g); - j.put("accel", accel); - j.put("ground_accel", ground_accel); - j.put("ground_accel_avg", ground_accel_avg); - j.put("log_format", log_format); - j.put("log_space", log_space); - j.put("product", product); - j.put("baro", baro); - j.put("companion", companion); - j.put("pyro_fired", pyro_fired); - j.put("accel_zero_along", accel_zero_along); - j.put("accel_zero_across", accel_zero_across); - j.put("accel_zero_through", accel_zero_through); - - j.put("rotation", rotation); - j.put("ground_rotation", ground_rotation); - - j.put("pad_orientation", pad_orientation); - - j.put("accel_ground_along", accel_ground_along); - j.put("accel_ground_across", accel_ground_across); - j.put("accel_ground_through", accel_ground_through); - - j.put("gyro_zero_roll", gyro_zero_roll); - j.put("gyro_zero_pitch", gyro_zero_pitch); - j.put("gyro_zero_yaw", gyro_zero_yaw); - - j.put("last_imu_time", last_imu_time); - return j; - } - - public AltosState(AltosJson j) { - this(); - - set = j.get_int("set", set); - received_time = j.get_long("received_time", received_time); - time = j.get_double("time", time); - prev_time = j.get_double("prev_time", prev_time); - time_change = j.get_double("time_change", time_change); - tick = j.get_int("tick", tick); - prev_tick = j.get_int("prev_tick", prev_tick); - boost_tick = j.get_int("boost_tick", boost_tick); - state = j.get_int("state", state); - flight = j.get_int("flight", flight); - serial = j.get_int("serial", serial); - altitude_32 = j.get_int("altitude_32", altitude_32); - receiver_serial = j.get_int("receiver_serial", receiver_serial); - landed = j.get_boolean("landed", landed); - ascent = j.get_boolean("ascent", ascent); - boost = j.get_boolean("boost", boost); - rssi = j.get_int("rssi", rssi); - status = j.get_int("status", status); - device_type = j.get_int("device_type", device_type); - config_major = j.get_int("config_major", config_major); - config_minor = j.get_int("config_minor", config_minor); - apogee_delay = j.get_int("apogee_delay", apogee_delay); - main_deploy = j.get_int("main_deploy", main_deploy); - flight_log_max = j.get_int("flight_log_max", flight_log_max); - ground_altitude = AltosCValue_fromJson(j.get("ground_altitude"), ground_altitude); - gps_ground_altitude = AltosGpsGroundAltitude_fromJson(j.get("gps_ground_altitude"), gps_ground_altitude); - ground_pressure = AltosGroundPressure_fromJson(j.get("ground_pressure"), ground_pressure); - altitude = AltosAltitude_fromJson(j.get("altitude"), altitude); - gps_altitude = AltosGpsAltitude_fromJson(j.get("gps_altitude"), gps_altitude); - gps_ground_speed = AltosValue_fromJson(j.get("gps_ground_speed"), gps_ground_speed); - gps_ascent_rate = AltosValue_fromJson(j.get("gps_ascent_rate"), gps_ascent_rate); - gps_course = AltosValue_fromJson(j.get("gps_course"), gps_course); - gps_speed = AltosValue_fromJson(j.get("gps_speed"), gps_speed); - pressure = AltosPressure_fromJson(j.get("pressure"), pressure); - speed = AltosSpeed_fromJson(j.get("speed"), speed); - acceleration = AltosAccel_fromJson(j.get("acceleration"), acceleration); - orient = AltosCValue_fromJson(j.get("orient"), orient); - kalman_height = AltosValue_fromJson(j.get("kalman_height"), kalman_height); - kalman_speed = AltosValue_fromJson(j.get("kalman_speed"), kalman_speed); - kalman_acceleration = AltosValue_fromJson(j.get("kalman_acceleration"), kalman_acceleration); - - battery_voltage = j.get_double("battery_voltage", battery_voltage); - pyro_voltage = j.get_double("pyro_voltage", pyro_voltage); - temperature = j.get_double("temperature", temperature); - apogee_voltage = j.get_double("apogee_voltage", apogee_voltage); - main_voltage= j.get_double("main_voltage", main_voltage); - ignitor_voltage = j.get_double_array("ignitor_voltage", ignitor_voltage); - gps = AltosGPS.fromJson(j.get("gps"), gps); - temp_gps = AltosGPS.fromJson(j.get("temp_gps"), temp_gps); - temp_gps_sat_tick = j.get_int("temp_gps_sat_tick", temp_gps_sat_tick); - gps_pending = j.get_boolean("gps_pending", gps_pending); - gps_sequence = j.get_int("gps_sequence", gps_sequence); - imu = AltosIMU.fromJson(j.get("imu"), imu); - mag = AltosMag.fromJson(j.get("mag"), mag); - - npad = j.get_int("npad", npad); - gps_waiting = j.get_int("gps_waiting", gps_waiting); - gps_ready = j.get_boolean("gps_ready", gps_ready); - ngps = j.get_int("ngps", ngps); - from_pad = AltosGreatCircle.fromJson(j.get("from_pad"), from_pad); - elevation = j.get_double("elevation", elevation); - range = j.get_double("range", range); - gps_height = j.get_double("gps_height", gps_height); - pad_lat = j.get_double("pad_lat", pad_lat); - pad_lon = j.get_double("pad_lon", pad_lon); - pad_alt = j.get_double("pad_alt", pad_alt); - speak_tick = j.get_int("speak_tick", speak_tick); - speak_altitude = j.get_double("speak_altitude", speak_altitude); - callsign = j.get_string("callsign", callsign); - firmware_version = j.get_string("firmware_version", firmware_version); - accel_plus_g = j.get_double("accel_plus_g", accel_plus_g); - accel_minus_g = j.get_double("accel_minus_g", accel_minus_g); - accel = j.get_double("accel", accel); - ground_accel = j.get_double("ground_accel", ground_accel); - ground_accel_avg = j.get_double("ground_accel_avg", ground_accel_avg); - log_format = j.get_int("log_format", log_format); - log_space = j.get_int("log_space", log_space); - product = j.get_string("product", product); - baro = AltosMs5607.fromJson(j.get("baro"), baro); - companion = AltosCompanion.fromJson(j.get("companion"), companion); - pyro_fired = j.get_int("pyro_fired", pyro_fired); - accel_zero_along = j.get_double("accel_zero_along", accel_zero_along); - accel_zero_across = j.get_double("accel_zero_across", accel_zero_across); - accel_zero_through = j.get_double("accel_zero_through", accel_zero_through); - - rotation = AltosRotation.fromJson(j.get("rotation"), rotation); - ground_rotation = AltosRotation.fromJson(j.get("ground_rotation"), ground_rotation); - - pad_orientation = j.get_int("pad_orientation", pad_orientation); - - accel_ground_along = j.get_double("accel_ground_along", accel_ground_along); - accel_ground_across = j.get_double("accel_ground_across", accel_ground_across); - accel_ground_through = j.get_double("accel_ground_through", accel_ground_through); - - gyro_zero_roll = j.get_double("gyro_zero_roll", gyro_zero_roll); - gyro_zero_pitch = j.get_double("gyro_zero_pitch", gyro_zero_pitch); - gyro_zero_yaw = j.get_double("gyro_zero_yaw", gyro_zero_yaw); - - last_imu_time = j.get_double("last_imu_time", last_imu_time); - } - - public static AltosState fromJson(AltosJson j) { - if (j == null) - return null; - if (!j.get_boolean("valid", false)) - return null; - return new AltosState(j); - } } diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am index 912976f9..2a9eb9c9 100644 --- a/altoslib/Makefile.am +++ b/altoslib/Makefile.am @@ -162,7 +162,6 @@ altoslib_JAVA = \ AltosMapLoader.java \ AltosMapTypeListener.java \ AltosJson.java \ - AltosJsonable.java \ AltosVersion.java JAR=altoslib_$(ALTOSLIB_VERSION).jar -- cgit v1.2.3 From 1ed6a3fb6356415c0d57ce2ce556435c6ff06e73 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 17 Jun 2016 08:17:15 -0700 Subject: altoslib: Add null constructor for AltosCompanion This lets it be used by the JSON code. Signed-off-by: Keith Packard --- altoslib/AltosCompanion.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/altoslib/AltosCompanion.java b/altoslib/AltosCompanion.java index d517fd4f..e228b074 100644 --- a/altoslib/AltosCompanion.java +++ b/altoslib/AltosCompanion.java @@ -37,4 +37,9 @@ public class AltosCompanion { channels = MAX_CHANNELS; companion_data = new int[channels]; } + + public AltosCompanion() { + channels = 0; + companion_data = new int[0]; + } } -- cgit v1.2.3 From a46df4f69984e3ef0064c2b211438c8d8ffaab68 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 17 Jun 2016 08:17:57 -0700 Subject: altoslib: Add construction for remaining primitive array types to JSON AltosCompanion has an array of ints, which was missed until I tried a telemetry file with companion data. Signed-off-by: Keith Packard --- altoslib/AltosJson.java | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/altoslib/AltosJson.java b/altoslib/AltosJson.java index e979a459..80d83e48 100644 --- a/altoslib/AltosJson.java +++ b/altoslib/AltosJson.java @@ -1012,7 +1012,32 @@ public class AltosJson extends JsonUtil { assert_array(false); Class element_class = c.getComponentType(); - if (element_class == Double.TYPE) { + if (element_class == Boolean.TYPE) { + boolean[] array = (boolean[]) Array.newInstance(element_class, size()); + for (int i = 0; i < array.length; i++) + array[i] = (Boolean) get(i).make(element_class); + ret = array; + } else if (element_class == Byte.TYPE) { + byte[] array = (byte[]) Array.newInstance(element_class, size()); + for (int i = 0; i < array.length; i++) + array[i] = (Byte) get(i).make(element_class); + ret = array; + } else if (element_class == Character.TYPE) { + char[] array = (char[]) Array.newInstance(element_class, size()); + for (int i = 0; i < array.length; i++) + array[i] = (Character) get(i).make(element_class); + ret = array; + } else if (element_class == Integer.TYPE) { + int[] array = (int[]) Array.newInstance(element_class, size()); + for (int i = 0; i < array.length; i++) + array[i] = (Integer) get(i).make(element_class); + ret = array; + } else if (element_class == Long.TYPE) { + long[] array = (long[]) Array.newInstance(element_class, size()); + for (int i = 0; i < array.length; i++) + array[i] = (Long) get(i).make(element_class); + ret = array; + } else if (element_class == Double.TYPE) { double[] array = (double[]) Array.newInstance(element_class, size()); for (int i = 0; i < array.length; i++) array[i] = (Double) get(i).make(element_class); -- cgit v1.2.3 From e8250fcb267a34fbbd8b88c6dcc8eec419bbcc68 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 17 Jun 2016 08:26:31 -0700 Subject: altoslib: Add back some JSON exception debugging printfs These make it possible to figure out where the JSON code went wrong. Signed-off-by: Keith Packard --- altoslib/AltosJson.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/altoslib/AltosJson.java b/altoslib/AltosJson.java index 80d83e48..346144d9 100644 --- a/altoslib/AltosJson.java +++ b/altoslib/AltosJson.java @@ -1080,17 +1080,27 @@ public class AltosJson extends JsonUtil { field.set(object, val); } } catch (IllegalAccessException ie) { + System.out.printf("%s:%s %s\n", + c.getName(), fieldName, ie.toString()); } } } ret = object; } catch (InvocationTargetException ie) { + System.out.printf("%s: %s\n", + c.getName(), ie.toString()); ret = null; } catch (NoSuchMethodException ie) { + System.out.printf("%s: %s\n", + c.getName(), ie.toString()); ret = null; } catch (InstantiationException ie) { + System.out.printf("%s: %s\n", + c.getName(), ie.toString()); ret = null; } catch (IllegalAccessException ie) { + System.out.printf("%s: %s\n", + c.getName(), ie.toString()); ret = null; } } @@ -1223,6 +1233,8 @@ public class AltosJson extends JsonUtil { put(fieldName, json); } } catch (IllegalAccessException ie) { + System.out.printf("%s:%s %s\n", + c.getName(), fieldName, ie.toString()); } } } -- cgit v1.2.3 From 383dec4449f8160c06804fba06290e7a07335934 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 17 Jun 2016 08:27:12 -0700 Subject: altosui: Print filename before attempting to parse in --summary mode Any problems handling the file are easier to debug if the filename is visible above the error message. Signed-off-by: Keith Packard --- altosui/AltosUI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java index f50c32e3..fa259906 100644 --- a/altosui/AltosUI.java +++ b/altosui/AltosUI.java @@ -492,8 +492,8 @@ public class AltosUI extends AltosUIFrame { if (states == null) return false; try { - AltosFlightStats stats = new AltosFlightStats(states); System.out.printf("%s:\n", file.toString()); + AltosFlightStats stats = new AltosFlightStats(states); if (stats.serial != AltosLib.MISSING) System.out.printf("Serial: %5d\n", stats.serial); if (stats.flight != AltosLib.MISSING) -- cgit v1.2.3 From 0c5a1bea3ffa7c4b6b1503733e33911cbfcb3e80 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 17 Jun 2016 08:54:19 -0700 Subject: altoslib: Stop reflective JSON class walk at Object instead of null Android has classes above Object which are all tied together which cause the object walking to fail in pretty spectacular ways. As Object has no interesting fields, that serves as a fine barrier to the super class walk and works on both android and real java. Signed-off-by: Keith Packard --- altoslib/AltosJson.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/altoslib/AltosJson.java b/altoslib/AltosJson.java index 346144d9..67f3a00a 100644 --- a/altoslib/AltosJson.java +++ b/altoslib/AltosJson.java @@ -1063,7 +1063,7 @@ public class AltosJson extends JsonUtil { } else { object = c.newInstance(); } - for (; c != null; c = c.getSuperclass()) { + for (; c != Object.class; c = c.getSuperclass()) { for (Field field : c.getDeclaredFields()) { String fieldName = field.getName(); Class fieldClass = field.getType(); @@ -1208,7 +1208,7 @@ public class AltosJson extends JsonUtil { } } else { assert_hash(true); - for (Class c = object.getClass(); c != null; c = c.getSuperclass()) { + for (Class c = object.getClass(); c != Object.class; c = c.getSuperclass()) { for (Field field : c.getDeclaredFields()) { String fieldName = field.getName(); -- cgit v1.2.3 From afe74c067a31ce420d0d4cdac2069c1d258a5114 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 17 Jun 2016 08:58:06 -0700 Subject: Bump version to 1.6.4 Signed-off-by: Keith Packard --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 0eff4fb1..6745b012 100644 --- a/configure.ac +++ b/configure.ac @@ -18,7 +18,7 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.57) -AC_INIT([altos], 1.6.3.1) +AC_INIT([altos], 1.6.4) ANDROID_VERSION=12 AC_CONFIG_SRCDIR([src/kernel/ao.h]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) -- cgit v1.2.3