summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBdale Garbee <bdale@gag.com>2016-06-17 10:00:10 -0600
committerBdale Garbee <bdale@gag.com>2016-06-17 10:00:10 -0600
commit31cf047113ec72a78f4b500223a2c6be23bc86fd (patch)
tree4f171ddf642fb06bd1b520cd98a242efe5f8320f
parent2f0c977c747824d0798550ac64eceb1d66c50efd (diff)
parentafe74c067a31ce420d0d4cdac2069c1d258a5114 (diff)
Merge branch 'master' into branch-1.6
-rw-r--r--Makefile.am24
-rw-r--r--Releasing10
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosBluetooth.java6
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosDebug.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java10
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidLink.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidMapInterface.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java11
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferencesBackend.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java14
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOnline.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosUsb.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/IdleModeActivity.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/IgniterActivity.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/ManageFrequenciesActivity.java23
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/MapTypeActivity.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java99
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/SetupActivity.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TabFlight.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TabRecover.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java2
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java7
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TelemetryState.java2
-rw-r--r--altoslib/AltosAccel.java4
-rw-r--r--altoslib/AltosCRCException.java2
-rw-r--r--altoslib/AltosCSV.java2
-rw-r--r--altoslib/AltosCompanion.java9
-rw-r--r--altoslib/AltosConfigData.java4
-rw-r--r--altoslib/AltosConfigDataException.java2
-rw-r--r--altoslib/AltosConfigValues.java2
-rw-r--r--altoslib/AltosConvert.java2
-rw-r--r--altoslib/AltosDebug.java2
-rw-r--r--altoslib/AltosDistance.java58
-rw-r--r--altoslib/AltosEeprom.java2
-rw-r--r--altoslib/AltosEepromChunk.java2
-rw-r--r--altoslib/AltosEepromDownload.java2
-rw-r--r--altoslib/AltosEepromFile.java2
-rw-r--r--altoslib/AltosEepromGPS.java2
-rw-r--r--altoslib/AltosEepromHeader.java2
-rw-r--r--altoslib/AltosEepromIterable.java2
-rw-r--r--altoslib/AltosEepromList.java2
-rw-r--r--altoslib/AltosEepromLog.java2
-rw-r--r--altoslib/AltosEepromMega.java2
-rw-r--r--altoslib/AltosEepromMetrum2.java2
-rw-r--r--altoslib/AltosEepromMini.java2
-rw-r--r--altoslib/AltosEepromMonitor.java2
-rw-r--r--altoslib/AltosEepromTM.java2
-rw-r--r--altoslib/AltosEepromTMini.java2
-rw-r--r--altoslib/AltosFile.java2
-rw-r--r--altoslib/AltosFlash.java2
-rw-r--r--altoslib/AltosFlashListener.java2
-rw-r--r--altoslib/AltosFlightDisplay.java2
-rw-r--r--altoslib/AltosFlightReader.java2
-rw-r--r--altoslib/AltosFlightStats.java2
-rw-r--r--altoslib/AltosFontListener.java2
-rw-r--r--altoslib/AltosFrequency.java5
-rw-r--r--altoslib/AltosGPS.java4
-rw-r--r--altoslib/AltosGPSSat.java8
-rw-r--r--altoslib/AltosGreatCircle.java9
-rw-r--r--altoslib/AltosHeight.java2
-rw-r--r--altoslib/AltosHexfile.java2
-rw-r--r--altoslib/AltosHexsym.java2
-rw-r--r--altoslib/AltosIMU.java8
-rw-r--r--altoslib/AltosIdle.java2
-rw-r--r--altoslib/AltosIdleFetch.java7
-rw-r--r--altoslib/AltosIdleMonitor.java2
-rw-r--r--altoslib/AltosIdleMonitorListener.java2
-rw-r--r--altoslib/AltosIdleReader.java121
-rw-r--r--altoslib/AltosIgnite.java2
-rw-r--r--altoslib/AltosImage.java2
-rw-r--r--altoslib/AltosJson.java1314
-rw-r--r--altoslib/AltosKML.java2
-rw-r--r--altoslib/AltosLatLon.java2
-rw-r--r--altoslib/AltosLatitude.java2
-rw-r--r--altoslib/AltosLaunchSite.java2
-rw-r--r--altoslib/AltosLaunchSiteListener.java2
-rw-r--r--altoslib/AltosLaunchSites.java2
-rw-r--r--altoslib/AltosLib.java9
-rw-r--r--altoslib/AltosLine.java2
-rw-r--r--altoslib/AltosLink.java2
-rw-r--r--altoslib/AltosListenerState.java4
-rw-r--r--altoslib/AltosLocation.java2
-rw-r--r--altoslib/AltosLog.java2
-rw-r--r--altoslib/AltosLongitude.java2
-rw-r--r--altoslib/AltosMag.java6
-rw-r--r--altoslib/AltosMap.java13
-rw-r--r--altoslib/AltosMapCache.java5
-rw-r--r--altoslib/AltosMapCacheListener.java2
-rw-r--r--altoslib/AltosMapInterface.java4
-rw-r--r--altoslib/AltosMapLine.java6
-rw-r--r--altoslib/AltosMapLoader.java70
-rw-r--r--altoslib/AltosMapLoaderListener.java2
-rw-r--r--altoslib/AltosMapMark.java2
-rw-r--r--altoslib/AltosMapPath.java2
-rw-r--r--altoslib/AltosMapPathPoint.java2
-rw-r--r--altoslib/AltosMapRectangle.java2
-rw-r--r--altoslib/AltosMapStore.java48
-rw-r--r--altoslib/AltosMapStoreListener.java2
-rw-r--r--altoslib/AltosMapTile.java68
-rw-r--r--altoslib/AltosMapTileListener.java2
-rw-r--r--altoslib/AltosMapTransform.java2
-rw-r--r--altoslib/AltosMapTypeListener.java2
-rw-r--r--altoslib/AltosMapZoomListener.java2
-rw-r--r--altoslib/AltosMma655x.java2
-rw-r--r--altoslib/AltosMs5607.java4
-rw-r--r--altoslib/AltosNoSymbol.java2
-rw-r--r--altoslib/AltosOrient.java2
-rw-r--r--altoslib/AltosParse.java42
-rw-r--r--altoslib/AltosPointDouble.java2
-rw-r--r--altoslib/AltosPointInt.java2
-rw-r--r--altoslib/AltosPreferences.java47
-rw-r--r--altoslib/AltosPreferencesBackend.java40
-rw-r--r--altoslib/AltosProgrammer.java2
-rw-r--r--altoslib/AltosPyro.java6
-rw-r--r--altoslib/AltosQuaternion.java17
-rw-r--r--altoslib/AltosRectangle.java2
-rw-r--r--altoslib/AltosReplayReader.java2
-rw-r--r--altoslib/AltosRomconfig.java2
-rw-r--r--altoslib/AltosRotation.java8
-rw-r--r--altoslib/AltosSavedState.java4
-rw-r--r--altoslib/AltosSelfFlash.java2
-rw-r--r--altoslib/AltosSensorEMini.java2
-rw-r--r--altoslib/AltosSensorMM.java2
-rw-r--r--altoslib/AltosSensorMega.java2
-rw-r--r--altoslib/AltosSensorMetrum.java2
-rw-r--r--altoslib/AltosSensorTGPS.java2
-rw-r--r--altoslib/AltosSensorTM.java2
-rw-r--r--altoslib/AltosSensorTMini.java2
-rw-r--r--altoslib/AltosSpeed.java2
-rw-r--r--altoslib/AltosState.java91
-rw-r--r--altoslib/AltosStateIterable.java3
-rw-r--r--altoslib/AltosStateUpdate.java2
-rw-r--r--altoslib/AltosTelemetry.java2
-rw-r--r--altoslib/AltosTelemetryCompanion.java2
-rw-r--r--altoslib/AltosTelemetryConfiguration.java2
-rw-r--r--altoslib/AltosTelemetryFile.java2
-rw-r--r--altoslib/AltosTelemetryIterable.java2
-rw-r--r--altoslib/AltosTelemetryLegacy.java2
-rw-r--r--altoslib/AltosTelemetryLocation.java2
-rw-r--r--altoslib/AltosTelemetryMap.java2
-rw-r--r--altoslib/AltosTelemetryMegaData.java2
-rw-r--r--altoslib/AltosTelemetryMegaSensor.java2
-rw-r--r--altoslib/AltosTelemetryMetrumData.java2
-rw-r--r--altoslib/AltosTelemetryMetrumSensor.java2
-rw-r--r--altoslib/AltosTelemetryMini.java2
-rw-r--r--altoslib/AltosTelemetryRaw.java2
-rw-r--r--altoslib/AltosTelemetryReader.java2
-rw-r--r--altoslib/AltosTelemetrySatellite.java2
-rw-r--r--altoslib/AltosTelemetrySensor.java2
-rw-r--r--altoslib/AltosTelemetryStandard.java2
-rw-r--r--altoslib/AltosTemperature.java2
-rw-r--r--altoslib/AltosUnits.java180
-rw-r--r--altoslib/AltosUnitsListener.java2
-rw-r--r--altoslib/AltosUnitsRange.java46
-rw-r--r--altoslib/AltosUnknownProduct.java2
-rw-r--r--altoslib/AltosVersion.java.in2
-rw-r--r--altoslib/AltosVoltage.java2
-rw-r--r--altoslib/AltosWriter.java2
-rw-r--r--altoslib/Makefile.am3
-rw-r--r--altosui/Altos.java4
-rw-r--r--altosui/AltosAscent.java4
-rw-r--r--altosui/AltosCompanionInfo.java4
-rw-r--r--altosui/AltosConfig.java4
-rw-r--r--altosui/AltosConfigPyroUI.java6
-rw-r--r--altosui/AltosConfigTD.java4
-rw-r--r--altosui/AltosConfigTDUI.java4
-rw-r--r--altosui/AltosConfigUI.java8
-rw-r--r--altosui/AltosConfigureUI.java2
-rw-r--r--altosui/AltosDescent.java4
-rw-r--r--altosui/AltosFlightStatus.java4
-rw-r--r--altosui/AltosFlightStatusTableModel.java2
-rw-r--r--altosui/AltosFlightStatusUpdate.java2
-rw-r--r--altosui/AltosFlightUI.java8
-rw-r--r--altosui/AltosGraphUI.java10
-rw-r--r--altosui/AltosIdleMonitorUI.java8
-rw-r--r--altosui/AltosIgniteUI.java4
-rw-r--r--altosui/AltosIgnitor.java4
-rw-r--r--altosui/AltosLanded.java4
-rw-r--r--altosui/AltosLaunch.java6
-rw-r--r--altosui/AltosLaunchUI.java2
-rw-r--r--altosui/AltosPad.java56
-rw-r--r--altosui/AltosUI.java59
-rw-r--r--altosui/Makefile.am29
-rw-r--r--altosuilib/AltosBTDevice.java4
-rw-r--r--altosuilib/AltosBTDeviceIterator.java4
-rw-r--r--altosuilib/AltosBTKnown.java4
-rw-r--r--altosuilib/AltosBTManage.java4
-rw-r--r--altosuilib/AltosCSVUI.java4
-rw-r--r--altosuilib/AltosConfigFreqUI.java4
-rw-r--r--altosuilib/AltosDataChooser.java4
-rw-r--r--altosuilib/AltosDevice.java2
-rw-r--r--altosuilib/AltosDeviceDialog.java2
-rw-r--r--altosuilib/AltosDeviceUIDialog.java2
-rw-r--r--altosuilib/AltosDisplayThread.java4
-rw-r--r--altosuilib/AltosEepromDelete.java4
-rw-r--r--altosuilib/AltosEepromManage.java4
-rw-r--r--altosuilib/AltosEepromMonitor.java2
-rw-r--r--altosuilib/AltosEepromMonitorUI.java4
-rw-r--r--altosuilib/AltosEepromSelect.java4
-rw-r--r--altosuilib/AltosFlashUI.java4
-rw-r--r--altosuilib/AltosFlightInfoTableModel.java2
-rw-r--r--altosuilib/AltosFlightStatsTable.java4
-rw-r--r--altosuilib/AltosGraph.java4
-rw-r--r--altosuilib/AltosGraphDataPoint.java4
-rw-r--r--altosuilib/AltosGraphDataSet.java4
-rw-r--r--altosuilib/AltosInfoTable.java4
-rw-r--r--altosuilib/AltosLed.java2
-rw-r--r--altosuilib/AltosLights.java2
-rw-r--r--altosuilib/AltosPositionListener.java2
-rw-r--r--altosuilib/AltosRomconfigUI.java4
-rw-r--r--altosuilib/AltosScanUI.java4
-rw-r--r--altosuilib/AltosSerial.java4
-rw-r--r--altosuilib/AltosSerialInUseException.java2
-rw-r--r--altosuilib/AltosUIAxis.java6
-rw-r--r--altosuilib/AltosUIConfigure.java4
-rw-r--r--altosuilib/AltosUIDataMissing.java2
-rw-r--r--altosuilib/AltosUIDataPoint.java2
-rw-r--r--altosuilib/AltosUIDataSet.java2
-rw-r--r--altosuilib/AltosUIDialog.java2
-rw-r--r--altosuilib/AltosUIEnable.java4
-rw-r--r--altosuilib/AltosUIFlightTab.java4
-rw-r--r--altosuilib/AltosUIFrame.java22
-rw-r--r--altosuilib/AltosUIFreqList.java4
-rw-r--r--altosuilib/AltosUIGraph.java4
-rw-r--r--altosuilib/AltosUIGrapher.java4
-rw-r--r--altosuilib/AltosUIImage.java2
-rw-r--r--altosuilib/AltosUIIndicator.java4
-rw-r--r--altosuilib/AltosUILib.java4
-rw-r--r--altosuilib/AltosUIListener.java2
-rw-r--r--altosuilib/AltosUIMap.java (renamed from altosuilib/AltosUIMapNew.java)31
-rw-r--r--altosuilib/AltosUIMapPreload.java (renamed from altosuilib/AltosUIMapPreloadNew.java)142
-rw-r--r--altosuilib/AltosUIMarker.java4
-rw-r--r--altosuilib/AltosUIPreferences.java4
-rw-r--r--altosuilib/AltosUIPreferencesBackend.java4
-rw-r--r--altosuilib/AltosUIRateList.java4
-rw-r--r--altosuilib/AltosUISeries.java8
-rw-r--r--altosuilib/AltosUITelemetryList.java4
-rw-r--r--altosuilib/AltosUIUnitsIndicator.java22
-rw-r--r--altosuilib/AltosUIVoltageIndicator.java6
-rw-r--r--altosuilib/AltosUSBDevice.java2
-rw-r--r--altosuilib/AltosVoice.java2
-rw-r--r--altosuilib/GrabNDrag.java2
-rw-r--r--altosuilib/Makefile.am4
-rwxr-xr-xaltosuilib/OSXAdapter.java2
-rw-r--r--ao-tools/ao-test-baro/ao-test-baro.c2
-rw-r--r--configure.ac8
-rw-r--r--doc/Makefile1
-rw-r--r--doc/altusmetrum-docinfo.xml8
-rw-r--r--doc/release-notes-1.6.4.inc42
-rw-r--r--doc/release-notes.inc5
-rw-r--r--doc/specs.inc9
-rw-r--r--doc/telegps-docinfo.xml8
-rw-r--r--doc/telegps-specs.inc5
-rw-r--r--doc/usage.inc10
-rw-r--r--micropeak/Makefile.am25
-rw-r--r--micropeak/MicroData.java4
-rw-r--r--micropeak/MicroDataPoint.java2
-rw-r--r--micropeak/MicroDeviceDialog.java2
-rw-r--r--micropeak/MicroDownload.java4
-rw-r--r--micropeak/MicroExport.java4
-rw-r--r--micropeak/MicroFile.java4
-rw-r--r--micropeak/MicroFileChooser.java4
-rw-r--r--micropeak/MicroFrame.java2
-rw-r--r--micropeak/MicroGraph.java4
-rw-r--r--micropeak/MicroPeak.java4
-rw-r--r--micropeak/MicroRaw.java4
-rw-r--r--micropeak/MicroSave.java4
-rw-r--r--micropeak/MicroSerial.java2
-rw-r--r--micropeak/MicroSerialLog.java2
-rw-r--r--micropeak/MicroStats.java4
-rw-r--r--micropeak/MicroStatsTable.java4
-rw-r--r--micropeak/MicroUSB.java4
-rw-r--r--src/cc1111/ao_serial.c64
-rw-r--r--src/drivers/ao_cc115l.c2
-rw-r--r--src/drivers/ao_trng_send.c10
-rw-r--r--src/lpc/ao_usb_lpc.c72
-rw-r--r--src/stm/ao_usb_stm.c27
-rw-r--r--src/stmf0/ao_arch_funcs.h3
-rw-r--r--src/stmf0/ao_usb_stm.c79
-rw-r--r--src/telegps-v1.0/ao_pins.h10
-rw-r--r--telegps/Makefile.am30
-rw-r--r--telegps/TeleGPS.java79
-rw-r--r--telegps/TeleGPSConfig.java4
-rw-r--r--telegps/TeleGPSConfigUI.java6
-rw-r--r--telegps/TeleGPSDisplayThread.java4
-rw-r--r--telegps/TeleGPSGraphUI.java8
-rw-r--r--telegps/TeleGPSInfo.java4
-rw-r--r--telegps/TeleGPSPreferences.java2
-rw-r--r--telegps/TeleGPSState.java11
-rw-r--r--telegps/TeleGPSStatus.java4
-rw-r--r--telegps/TeleGPSStatusUpdate.java2
296 files changed, 3093 insertions, 885 deletions
diff --git a/Makefile.am b/Makefile.am
index 0bb01619..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)
@@ -42,9 +48,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)
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-<version> # the x.y parts only
- cherry-pick or merge appropriate content from master
- - make sure there is a doc/release-notes-<version>.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-<version>.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/<rev>
(cd ~/web/altusmetrum/AltOS/releases/<rev> ; rm *.tar.bz2)
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosBluetooth.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosBluetooth.java
index 15efc0e2..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 {
@@ -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) {
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..a62bf7fe 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 {
@@ -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/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 dd86c818..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 {
@@ -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/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 ab142b17..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.*;
@@ -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/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..d8fd92df 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;
@@ -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();
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 13a44e1f..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
@@ -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<AltosLaunchSite> known_sites_adapter;
@@ -69,8 +69,14 @@ 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) {
+ loader_notify_time = System.currentTimeMillis();
+
this.runOnUiThread(new Runnable() {
public void run() {
progress.setMax(max);
@@ -80,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);
@@ -88,6 +101,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);
@@ -96,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<AltosLaunchSite> sites) {
this.runOnUiThread(new Runnable() {
public void run() {
@@ -106,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;
@@ -234,7 +189,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;
@@ -254,6 +209,9 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe
}
private void load() {
+ if (loader != null)
+ return;
+
try {
double lat = latitude();
double lon = longitude();
@@ -264,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);
- 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());
}
@@ -395,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);
@@ -409,6 +365,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/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 3c1a1782..dc39c899 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 {
@@ -129,6 +129,8 @@ public class TelemetryService extends Service implements AltosIdleMonitorListene
case MSG_DISCONNECT:
AltosDebug.debug("Disconnect command received");
s.address = null;
+ if (!(Boolean) msg.obj)
+ AltosDroidPreferences.set_active_device(null);
s.disconnect(true);
break;
case MSG_DELETE_SERIAL:
@@ -612,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) {
@@ -628,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/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..c6a2da11 100644
--- a/altoslib/AltosAccel.java
+++ b/altoslib/AltosAccel.java
@@ -15,11 +15,11 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_10;
+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/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..e228b074 100644
--- a/altoslib/AltosCompanion.java
+++ b/altoslib/AltosCompanion.java
@@ -15,11 +15,11 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_10;
+package org.altusmetrum.altoslib_11;
import java.io.*;
-public class AltosCompanion implements Serializable {
+public class AltosCompanion {
public final static int board_id_telescience = 0x0a;
public final static int MAX_CHANNELS = 12;
@@ -37,4 +37,9 @@ public class AltosCompanion implements Serializable {
channels = MAX_CHANNELS;
companion_data = new int[channels];
}
+
+ public AltosCompanion() {
+ channels = 0;
+ companion_data = new int[0];
+ }
}
diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java
index 812296f3..ce430d7a 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.*;
@@ -204,7 +204,7 @@ public class AltosConfigData implements Iterable<String> {
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/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 b68a4525..1ade5abb 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 {
@@ -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(1000),
+ "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/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..874a9bcc 100644
--- a/altoslib/AltosFrequency.java
+++ b/altoslib/AltosFrequency.java
@@ -15,13 +15,13 @@
* 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.*;
import java.text.*;
-public class AltosFrequency implements Serializable {
+public class AltosFrequency {
public double frequency;
public String description;
@@ -57,7 +57,6 @@ public class AltosFrequency implements Serializable {
return diff < 0.010;
}
-
public AltosFrequency(double f, String d) {
frequency = f;
description = d;
diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java
index c5290a3a..d29ccdd1 100644
--- a/altoslib/AltosGPS.java
+++ b/altoslib/AltosGPS.java
@@ -15,13 +15,13 @@
* 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.*;
-public class AltosGPS implements Cloneable, Serializable {
+public class AltosGPS implements Cloneable {
public final static int MISSING = AltosLib.MISSING;
diff --git a/altoslib/AltosGPSSat.java b/altoslib/AltosGPSSat.java
index c853b634..8b95c150 100644
--- a/altoslib/AltosGPSSat.java
+++ b/altoslib/AltosGPSSat.java
@@ -15,12 +15,14 @@
* 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.*;
+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;
diff --git a/altoslib/AltosGreatCircle.java b/altoslib/AltosGreatCircle.java
index de3904bf..a2f12807 100644
--- a/altoslib/AltosGreatCircle.java
+++ b/altoslib/AltosGreatCircle.java
@@ -15,12 +15,12 @@
* 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.*;
-public class AltosGreatCircle implements Cloneable, Serializable {
+public class AltosGreatCircle implements Cloneable {
public double distance;
public double bearing;
public double range;
@@ -71,7 +71,10 @@ public class AltosGreatCircle implements Cloneable, Serializable {
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);
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..dbadcf89 100644
--- a/altoslib/AltosIMU.java
+++ b/altoslib/AltosIMU.java
@@ -15,12 +15,12 @@
* 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.*;
-public class AltosIMU implements Cloneable, Serializable {
+public class AltosIMU implements Cloneable {
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;
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..5102c16b 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.*;
@@ -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);
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/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 <keithp@keithp.com>
+ *
+ * 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/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/AltosJson.java b/altoslib/AltosJson.java
new file mode 100644
index 00000000..67f3a00a
--- /dev/null
+++ b/altoslib/AltosJson.java
@@ -0,0 +1,1314 @@
+/*
+ * Copyright © 2016 Keith Packard <keithp@keithp.com>
+ *
+ * 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<String,AltosJson> hash;
+
+ void append_hash(StringBuffer result, int indent, boolean pretty) {
+ boolean first = true;
+
+ result.append("{");
+
+ ArrayList<String> key_list = new ArrayList<String>(hash.keySet());
+
+ Collections.sort(key_list, new Comparator<String>() {
+ @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<String,AltosJson>();
+ }
+}
+
+class JsonArray extends JsonUtil {
+ ArrayList<AltosJson> 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<AltosJson>();
+ }
+}
+
+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 "<EOF>";
+ case _error:
+ return "<ERROR>";
+ default:
+ return "<UNKNOWN>";
+ }
+ }
+
+ 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)),
+ 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) {
+ 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, "<EIO>");
+ }
+ }
+
+ 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:
+ 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());
+ 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 == 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);
+ 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 != Object.class; c = c.getSuperclass()) {
+ for (Field field : c.getDeclaredFields()) {
+ String fieldName = field.getName();
+ Class fieldClass = field.getType();
+
+ 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) {
+ 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;
+ }
+ }
+ 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 != Object.class; c = c.getSuperclass()) {
+ for (Field field : c.getDeclaredFields()) {
+ String fieldName = field.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) {
+ System.out.printf("%s:%s %s\n",
+ c.getName(), fieldName, ie.toString());
+ }
+ }
+ }
+ }
+ }
+
+ /* 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;
+ }
+}
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..044caf8d 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.*;
@@ -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/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..7d9ec2a4 100644
--- a/altoslib/AltosListenerState.java
+++ b/altoslib/AltosListenerState.java
@@ -15,11 +15,11 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_10;
+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/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..5864529f 100644
--- a/altoslib/AltosMag.java
+++ b/altoslib/AltosMag.java
@@ -15,17 +15,17 @@
* 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.*;
-public class AltosMag implements Cloneable, Serializable {
+public class AltosMag implements Cloneable {
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;
diff --git a/altoslib/AltosMap.java b/altoslib/AltosMap.java
index 1841277f..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.*;
@@ -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/AltosMapCache.java b/altoslib/AltosMapCache.java
index 38e0f769..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.*;
@@ -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/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 756a78f2..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.*;
@@ -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/AltosMapLine.java b/altoslib/AltosMapLine.java
index bd590136..187aa6d9 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;
@@ -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;
diff --git a/altoslib/AltosMapLoader.java b/altoslib/AltosMapLoader.java
index 7112a1c4..d715df38 100644
--- a/altoslib/AltosMapLoader.java
+++ b/altoslib/AltosMapLoader.java
@@ -15,16 +15,17 @@
* 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.*;
+import java.util.concurrent.*;
import java.text.*;
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;
@@ -34,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;
@@ -42,7 +44,11 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener {
int layers_total;
int layers_loaded;
- AltosMap map;
+ private static final int MAX_LOADING = 200;
+
+ private Semaphore loading = new Semaphore(MAX_LOADING);
+
+ boolean abort;
int tile_radius(int zoom) {
double delta_lon = AltosMapTransform.lon_from_distance(latitude, radius);
@@ -62,7 +68,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);
@@ -73,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;
@@ -88,16 +92,25 @@ 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);
- 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;
}
}
+ 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 +119,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,15 +160,22 @@ 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) {
+ public synchronized void notify_store(AltosMapStore store, int status) {
boolean do_next = false;
if (status == AltosMapTile.fetching)
return;
- tile.remove_listener(this);
+ loading.release();
+
+ store.remove_listener(this);
if (layers_loaded >= layers_total)
return;
@@ -163,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) {
@@ -174,19 +194,19 @@ 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();
- }
+ 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;
@@ -194,6 +214,8 @@ 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/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 aed365ca..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.*;
@@ -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<String,AltosMapStore> stores = new HashMap<String,AltosMapStore>();
- 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/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 fdc8ff65..b65f6fc1 100644
--- a/altoslib/AltosMapTile.java
+++ b/altoslib/AltosMapTile.java
@@ -15,12 +15,12 @@
* 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.*;
-public abstract class AltosMapTile implements AltosFontListener, AltosMapStoreListener {
+public class AltosMapTile implements AltosFontListener, AltosMapStoreListener {
LinkedList<AltosMapTileListener> listeners = new LinkedList<AltosMapTileListener>();
public AltosLatLon upper_left, center;
public int px_size;
@@ -38,43 +38,23 @@ public abstract class AltosMapTile implements AltosFontListener, AltosMapStoreLi
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);
+ 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) {
@@ -87,7 +67,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);
}
@@ -99,7 +78,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)
@@ -132,11 +112,7 @@ public abstract class AltosMapTile implements AltosFontListener, AltosMapStoreLi
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);
}
-
- 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/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..e40479b1 100644
--- a/altoslib/AltosMs5607.java
+++ b/altoslib/AltosMs5607.java
@@ -15,12 +15,12 @@
* 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.*;
-public class AltosMs5607 implements Serializable {
+public class AltosMs5607 {
public int reserved;
public int sens;
public int off;
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..45ef7dac 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.*;
@@ -27,6 +27,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) {
throw new ParseException("error parsing int " + v, 0);
@@ -41,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 {
@@ -53,14 +75,26 @@ 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();
+ 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) {
+ 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 {
String[] dsf = coord.split("\\D+");
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..569aaa54 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.*;
@@ -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 */
@@ -133,24 +133,30 @@ public class AltosPreferences {
static int map_type;
public static AltosFrequency[] load_common_frequencies() {
-
AltosFrequency[] frequencies = null;
- frequencies = (AltosFrequency[]) backend.getSerializable(frequenciesPreference, null);
+ try {
+ AltosJson json = AltosJson.fromString(backend.getString(frequenciesPreference,
+ null));
+ frequencies = (AltosFrequency[]) json.make(frequencies.getClass());
+ } catch (Exception e) {
+ }
if (frequencies == null) {
if (backend.nodeExists(common_frequencies_node_name)) {
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);
+ }
}
}
}
@@ -165,6 +171,12 @@ public class AltosPreferences {
return frequencies;
}
+ public static void save_common_frequencies() {
+ AltosJson json = new AltosJson(common_frequencies);
+ backend.putString(frequenciesPreference, json.toString());
+ flush_preferences();
+ }
+
public static int launcher_serial;
public static int launcher_channel;
@@ -353,7 +365,7 @@ public class AltosPreferences {
public static void set_state(AltosState state) {
synchronized(backend) {
- backend.putSerializable(String.format(statePreferenceFormat, state.serial), state);
+ backend.putJson(String.format(statePreferenceFormat, state.serial), new AltosJson(state));
backend.putInt(statePreferenceLatest, state.serial);
flush_preferences();
}
@@ -378,6 +390,7 @@ public class AltosPreferences {
public static void remove_state(int serial) {
synchronized(backend) {
backend.remove(String.format(statePreferenceFormat, serial));
+ flush_preferences();
}
}
@@ -392,10 +405,12 @@ public class AltosPreferences {
public static AltosState state(int serial) {
synchronized(backend) {
try {
- return (AltosState) backend.getSerializable(String.format(statePreferenceFormat, serial), null);
+ AltosJson json = backend.getJson(String.format(statePreferenceFormat, serial));
+ if (json != null)
+ return (AltosState) (json.make(AltosState.class));
} catch (Exception e) {
- return null;
}
+ return null;
}
}
@@ -512,8 +527,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/AltosPreferencesBackend.java b/altoslib/AltosPreferencesBackend.java
index 6e1124e2..0580652e 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.*;
@@ -38,40 +38,20 @@ 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);
+ public AltosJson getJson(String key) {
+ String value = getString(key, null);
+ if (value == null)
+ return null;
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 AltosJson.fromString(value);
+ } catch (IllegalArgumentException ie) {
+ return null;
}
- return def;
}
- public void putSerializable(String key, Serializable object) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- try {
- ObjectOutputStream oos = new ObjectOutputStream(baos);
-
- oos.writeObject(object);
- byte[] bytes = baos.toByteArray();
-
- putBytes(key, bytes);
- } catch (IOException ie) {
- debug("set_state failed %s\n", ie.toString());
- }
+ public void putJson(String key, AltosJson j) {
+ putString(key, j.toString());
}
public abstract boolean nodeExists(String key);
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 28e65bc2..c948ce21 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.*;
@@ -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) {
@@ -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 bc471c9c..79559429 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 */
@@ -115,10 +115,17 @@ public class AltosQuaternion {
}
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/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..97cf7896 100644
--- a/altoslib/AltosRotation.java
+++ b/altoslib/AltosRotation.java
@@ -15,9 +15,9 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_10;
+package org.altusmetrum.altoslib_11;
-public class AltosRotation {
+public class AltosRotation extends AltosQuaternion {
private AltosQuaternion rotation;
public double tilt() {
@@ -47,4 +47,8 @@ public class AltosRotation {
AltosQuaternion up = new AltosQuaternion(0, 0, 0, sky);
rotation = up.vectors_to_rotation(orient);
}
+
+ public AltosRotation() {
+ rotation = new AltosQuaternion();
+ }
}
diff --git a/altoslib/AltosSavedState.java b/altoslib/AltosSavedState.java
index 3dbf59a5..f1d3e993 100644
--- a/altoslib/AltosSavedState.java
+++ b/altoslib/AltosSavedState.java
@@ -15,11 +15,11 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_10;
+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/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..15cf7d64 100644
--- a/altoslib/AltosState.java
+++ b/altoslib/AltosState.java
@@ -19,11 +19,11 @@
* Track flight state from telemetry or eeprom data stream
*/
-package org.altusmetrum.altoslib_10;
+package org.altusmetrum.altoslib_11;
import java.io.*;
-public class AltosState implements Cloneable, Serializable {
+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, Serializable {
private int prev_tick;
public int boost_tick;
- class AltosValue implements Serializable{
+ class AltosValue {
double value;
double prev_value;
private double max_value;
@@ -182,14 +182,19 @@ public class AltosState implements Cloneable, Serializable {
prev_value = AltosLib.MISSING;
max_value = AltosLib.MISSING;
}
+
}
- class AltosCValue implements Serializable {
+ class AltosCValue {
- class AltosIValue extends AltosValue implements Serializable {
+ class AltosIValue extends AltosValue {
boolean can_max() {
return c_can_max();
}
+
+ AltosIValue() {
+ super();
+ }
};
public AltosIValue measured;
@@ -278,7 +283,7 @@ public class AltosState implements Cloneable, Serializable {
computed.finish_update();
}
- AltosCValue() {
+ public AltosCValue() {
measured = new AltosIValue();
computed = new AltosIValue();
}
@@ -317,7 +322,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 +334,10 @@ public class AltosState implements Cloneable, Serializable {
pad_alt = value();
gps_altitude.set_gps_height();
}
+
+ AltosGpsGroundAltitude() {
+ super();
+ }
}
private AltosGpsGroundAltitude gps_ground_altitude;
@@ -341,7 +350,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 +361,10 @@ public class AltosState implements Cloneable, Serializable {
super.set_measured(p, time);
ground_altitude.set_computed(pressure_to_altitude(p), time);
}
+
+ AltosGroundPressure () {
+ super();
+ }
}
private AltosGroundPressure ground_pressure;
@@ -364,7 +377,7 @@ public class AltosState implements Cloneable, Serializable {
ground_pressure.set_measured(pressure, time);
}
- class AltosAltitude extends AltosCValue implements Serializable {
+ class AltosAltitude extends AltosCValue {
private void set_speed(AltosValue v) {
if (!acceleration.is_measured() || !ascent)
@@ -382,11 +395,15 @@ public class AltosState implements Cloneable, Serializable {
set_speed(measured);
set |= set_position;
}
+
+ AltosAltitude() {
+ super();
+ }
}
private AltosAltitude altitude;
- class AltosGpsAltitude extends AltosValue implements Serializable {
+ class AltosGpsAltitude extends AltosValue {
private void set_gps_height() {
double a = value();
@@ -402,6 +419,10 @@ public class AltosState implements Cloneable, Serializable {
super.set(a, t);
set_gps_height();
}
+
+ AltosGpsAltitude() {
+ super();
+ }
}
private AltosGpsAltitude gps_altitude;
@@ -469,7 +490,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 +498,10 @@ public class AltosState implements Cloneable, Serializable {
double a = pressure_to_altitude(p);
altitude.set_computed(a, time);
}
+
+ AltosPressure() {
+ super();
+ }
}
private AltosPressure pressure;
@@ -539,7 +564,7 @@ public class AltosState implements Cloneable, Serializable {
return AltosLib.MISSING;
}
- class AltosSpeed extends AltosCValue implements Serializable {
+ class AltosSpeed extends AltosCValue {
boolean can_max() {
return state < AltosLib.ao_flight_fast || state == AltosLib.ao_flight_stateless;
@@ -563,6 +588,10 @@ public class AltosState implements Cloneable, Serializable {
super.set_measured(new_value, time);
set_accel();
}
+
+ AltosSpeed() {
+ super();
+ }
}
private AltosSpeed speed;
@@ -593,7 +622,7 @@ public class AltosState implements Cloneable, Serializable {
return AltosLib.MISSING;
}
- class AltosAccel extends AltosCValue implements Serializable {
+ class AltosAccel extends AltosCValue {
boolean can_max() {
return state < AltosLib.ao_flight_fast || state == AltosLib.ao_flight_stateless;
@@ -604,6 +633,10 @@ public class AltosState implements Cloneable, Serializable {
if (ascent)
speed.set_integral(this.measured);
}
+
+ AltosAccel() {
+ super();
+ }
}
AltosAccel acceleration;
@@ -684,6 +717,7 @@ public class AltosState implements Cloneable, Serializable {
public double ground_accel_avg;
public int log_format;
+ public int log_space;
public String product;
public AltosMs5607 baro;
@@ -801,6 +835,7 @@ public class AltosState implements Cloneable, Serializable {
ground_accel_avg = AltosLib.MISSING;
log_format = AltosLib.MISSING;
+ log_space = AltosLib.MISSING;
product = null;
serial = AltosLib.MISSING;
receiver_serial = AltosLib.MISSING;
@@ -960,6 +995,7 @@ public class AltosState implements Cloneable, Serializable {
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;
@@ -1078,6 +1114,10 @@ public class AltosState implements Cloneable, Serializable {
}
}
+ 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;
@@ -1483,6 +1523,31 @@ public class AltosState implements Cloneable, Serializable {
public AltosState clone() {
AltosState s = new AltosState();
s.copy(this);
+
+ /* Code to test state save/restore. Enable only for that purpose
+ */
+ if (false) {
+ AltosJson json = new AltosJson(this);
+ String onetrip = json.toPrettyString();
+ AltosJson back = AltosJson.fromString(onetrip);
+ AltosState tripstate = (AltosState) back.make(this.getClass());
+ AltosJson tripjson = new AltosJson(tripstate);
+ String twotrip = tripjson.toPrettyString();
+
+ if (!onetrip.equals(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);
+ }
+ }
return s;
}
diff --git a/altoslib/AltosStateIterable.java b/altoslib/AltosStateIterable.java
index a7baa85e..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.*;
@@ -32,7 +32,6 @@ public abstract class AltosStateIterable implements Iterable<AltosState> {
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"))
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 13b9dbe6..b46b30ad 100644
--- a/altoslib/AltosUnits.java
+++ b/altoslib/AltosUnits.java
@@ -15,12 +15,27 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_10;
+package org.altusmetrum.altoslib_11;
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/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
new file mode 100644
index 00000000..f376a463
--- /dev/null
+++ b/altoslib/AltosUnitsRange.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright © 2016 Keith Packard <keithp@keithp.com>
+ *
+ * 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.*;
+
+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/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/altoslib/Makefile.am b/altoslib/Makefile.am
index dc9da8fd..2a9eb9c9 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 \
@@ -118,6 +119,7 @@ altoslib_JAVA = \
AltosIMU.java \
AltosMag.java \
AltosUnits.java \
+ AltosUnitsRange.java \
AltosDistance.java \
AltosHeight.java \
AltosSpeed.java \
@@ -159,6 +161,7 @@ altoslib_JAVA = \
AltosMapLoaderListener.java \
AltosMapLoader.java \
AltosMapTypeListener.java \
+ AltosJson.java \
AltosVersion.java
JAR=altoslib_$(ALTOSLIB_VERSION).jar
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 e0915a17..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
@@ -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/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 24167df3..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
@@ -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/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..63f8c670 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;
@@ -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 34d56b24..4f394d73 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;
@@ -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;
}
@@ -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/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java
index d789de77..1a992946 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;
@@ -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/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..fb2cd883 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;
@@ -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
+}
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 4f55636d..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 {
@@ -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/altosui/AltosUI.java b/altosui/AltosUI.java
index 4a390ee6..fa259906 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();
@@ -295,7 +295,7 @@ public class AltosUI extends AltosUIFrame {
}
void LoadMaps() {
- new AltosUIMapPreloadNew(AltosUI.this);
+ new AltosUIMapPreload(AltosUI.this);
}
void LaunchController() {
@@ -492,39 +492,47 @@ public class AltosUI extends AltosUIFrame {
if (states == null)
return false;
try {
+ System.out.printf("%s:\n", file.toString());
AltosFlightStats stats = new AltosFlightStats(states);
- if (stats.serial > 0)
+ 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());
@@ -605,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;
diff --git a/altosui/Makefile.am b/altosui/Makefile.am
index dce8420e..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
@@ -126,10 +132,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)
@@ -161,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
@@ -176,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
@@ -267,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/"$@" .
@@ -291,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/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> {
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<AltosBTDevice> {
LinkedList<AltosBTDevice> devices = new LinkedList<AltosBTDevice>();
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<AltosBTDevice> {
LinkedBlockingQueue<AltosBTDevice> 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<AltosUIDataPoint> {
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 e307874a..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.*;
@@ -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/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<Object> {
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..ac440190 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.*;
@@ -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 */
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<AltosFrequency> {
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/AltosUIMap.java
index a90e8c91..8c90bcd8 100644
--- a/altosuilib/AltosUIMapNew.java
+++ b/altosuilib/AltosUIMap.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,9 +27,9 @@ 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 {
+public class AltosUIMap extends JComponent implements AltosFlightDisplay, AltosMapInterface {
AltosMap map;
Graphics2D g;
@@ -52,10 +52,10 @@ public class AltosUIMapNew extends JComponent implements AltosFlightDisplay, Alt
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]);
+ if (0 <= state && state < AltosUIMap.stateColors.length)
+ g.setColor(AltosUIMap.stateColors[state]);
else
- g.setColor(AltosUIMapNew.stateColors[AltosLib.ao_flight_invalid]);
+ 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);
@@ -227,10 +227,10 @@ public class AltosUIMapNew extends JComponent implements AltosFlightDisplay, Alt
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]);
+ if (0 <= point.state && point.state < AltosUIMap.stateColors.length)
+ g.setColor(AltosUIMap.stateColors[point.state]);
else
- g.setColor(AltosUIMapNew.stateColors[AltosLib.ao_flight_invalid]);
+ g.setColor(AltosUIMap.stateColors[AltosLib.ao_flight_invalid]);
g.draw(line);
}
@@ -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() {
@@ -361,7 +361,8 @@ public class AltosUIMapNew extends JComponent implements AltosFlightDisplay, Alt
}
public void debug(String format, Object ... arguments) {
- System.out.printf(format, arguments);
+ if (AltosUIPreferences.serial_debug())
+ System.out.printf(format, arguments);
}
@@ -427,7 +428,7 @@ public class AltosUIMapNew extends JComponent implements AltosFlightDisplay, Alt
MapView view;
- public AltosUIMapNew() {
+ public AltosUIMap() {
set_font();
diff --git a/altosuilib/AltosUIMapPreloadNew.java b/altosuilib/AltosUIMapPreload.java
index 3269bbdd..32690037 100644
--- a/altosuilib/AltosUIMapPreloadNew.java
+++ b/altosuilib/AltosUIMapPreload.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,9 +26,10 @@ 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 {
+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<String>(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);
@@ -118,9 +128,9 @@ class AltosUIMapPos extends Box {
}
}
-public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener, ItemListener, AltosLaunchSiteListener, AltosMapLoaderListener {
+public class AltosUIMapPreload extends AltosUIFrame implements ActionListener, ItemListener, AltosLaunchSiteListener, AltosMapLoaderListener, AltosUnitsListener, AltosFontListener {
AltosUIFrame owner;
- AltosUIMapNew map;
+ AltosUIMap map;
AltosUIMapPos lat;
AltosUIMapPos lon;
@@ -131,14 +141,15 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener
JComboBox<AltosLaunchSite> site_list;
JToggleButton load_button;
- boolean loading;
JButton close_button;
JCheckBox[] maptypes = new JCheckBox[AltosMap.maptype_terrain - AltosMap.maptype_hybrid + 1];
JComboBox<Integer> min_zoom;
JComboBox<Integer> max_zoom;
+ JLabel radius_label;
JComboBox<Double> 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 };
@@ -147,26 +158,36 @@ 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" };
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);
@@ -176,12 +197,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;
}
});
}
@@ -200,6 +221,19 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener
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();
@@ -209,6 +243,7 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener
AltosLaunchSite site = (AltosLaunchSite) o;
lat.set_value(site.latitude);
lon.set_value(site.longitude);
+ center_map(site.latitude, site.longitude);
}
}
}
@@ -216,11 +251,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();
@@ -231,14 +269,16 @@ 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;
- new AltosMapLoader(map.map, this,
- latitude, longitude,
- min_z, max_z, r, all_types());
+ center_map(latitude, longitude);
+
+ loader = new AltosMapLoader(this,
+ latitude, longitude,
+ min_z, max_z, r,
+ all_types(), scale);
} catch (ParseException pe) {
load_button.setSelected(false);
@@ -259,7 +299,35 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener
});
}
- public AltosUIMapPreloadNew(AltosUIFrame in_owner) {
+ 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();
@@ -270,7 +338,19 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener
pane.setLayout(new GridBagLayout());
- map = new AltosUIMapNew();
+ 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;
@@ -335,7 +415,7 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener
pane.add(site_list, c);
- lat = new AltosUIMapPos(owner,
+ lat = new AltosUIMapPos(owner, this,
"Latitude:",
lat_hemi_names,
37.167833333);
@@ -352,7 +432,7 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener
pane.add(lat, c);
- lon = new AltosUIMapPos(owner,
+ lon = new AltosUIMapPos(owner, this,
"Longitude:",
lon_hemi_names,
-97.73975);
@@ -445,26 +525,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<Double>(radii);
- radius.setSelectedItem(radii[2]);
+ radius = new JComboBox<Double>();
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/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<String> {
diff --git a/altosuilib/AltosUISeries.java b/altosuilib/AltosUISeries.java
index b16f046b..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.*;
@@ -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) {
}
}
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<String> {
diff --git a/altosuilib/AltosUIUnitsIndicator.java b/altosuilib/AltosUIUnitsIndicator.java
index a84bd0b2..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 {
@@ -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..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 {
@@ -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);
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/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/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/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;
diff --git a/configure.ac b/configure.ac
index ee3d4225..6745b012 100644
--- a/configure.ac
+++ b/configure.ac
@@ -18,8 +18,8 @@ dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ(2.57)
-AC_INIT([altos], 1.6.3)
-ANDROID_VERSION=11
+AC_INIT([altos], 1.6.4)
+ANDROID_VERSION=12
AC_CONFIG_SRCDIR([src/kernel/ao.h])
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE
@@ -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/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
@@ -47,6 +47,14 @@
<revhistory>
<?dbhtml filename="altusmetrum-revhistory.html"?>
<revision>
+ <revnumber>1.6.4</revnumber>
+ <date>10 May 2016</date>
+ <revremark>
+ Minor release fixing TeleBT v1.0 flow control and a few minor
+ application bugs.
+ </revremark>
+ </revision>
+ <revision>
<revnumber>1.6.3</revnumber>
<date>21 April 2016</date>
<revremark>
diff --git a/doc/release-notes-1.6.4.inc b/doc/release-notes-1.6.4.inc
new file mode 100644
index 00000000..f976a69d
--- /dev/null
+++ b/doc/release-notes-1.6.4.inc
@@ -0,0 +1,42 @@
+= 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. 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.
+
+ * 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, TeleGPS and AltosDroid New Features:
+
+ * Automatically switch from meters or feet to kilometers or
+ miles for distance units.
+
+ * 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.
+
+ * 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
@@ -2,6 +2,11 @@
== Release Notes
:leveloffset: 2
+ include::release-notes-1.6.4.raw[]
+
+ <<<<
+
+ :leveloffset: 2
include::release-notes-1.6.3.raw[]
<<<<
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-docinfo.xml b/doc/telegps-docinfo.xml
index 4ba3f73c..1ef088fe 100644
--- a/doc/telegps-docinfo.xml
+++ b/doc/telegps-docinfo.xml
@@ -38,6 +38,14 @@
<revhistory>
<?dbhtml filename="telegps-revhistory.html"?>
<revision>
+ <revnumber>1.6.4</revnumber>
+ <date>10 May 2016</date>
+ <revremark>
+ Minor release fixing TeleBT v1.0 flow control and a few minor
+ application bugs.
+ </revremark>
+ </revision>
+ <revision>
<revnumber>1.6.1</revnumber>
<date>15 July 2015</date>
<revremark>
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
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[]
|====
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/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<MicroDataPoint> {
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/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
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;
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 <ao_exti.h>
#include <ao_power.h>
-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();
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");
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);
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
@@ -409,9 +409,6 @@ uint16_t *
ao_usb_alloc(void);
void
-ao_usb_free(uint16_t *buffer);
-
-void
ao_usb_write(uint16_t *buffer, uint16_t len);
void
diff --git a/src/stmf0/ao_usb_stm.c b/src/stmf0/ao_usb_stm.c
index 253506d5..fb3d8c85 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
}
@@ -437,6 +443,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 +510,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);
@@ -658,7 +689,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;
@@ -679,6 +710,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;
}
@@ -723,7 +756,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);
@@ -1159,14 +1192,6 @@ ao_usb_alloc(void)
}
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)
{
ao_arch_block_interrupts();
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)
*/
diff --git a/telegps/Makefile.am b/telegps/Makefile.am
index 4caf43f4..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
@@ -101,7 +107,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)
@@ -117,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
@@ -140,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
@@ -218,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/"$@" .
@@ -230,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
diff --git a/telegps/TeleGPS.java b/telegps/TeleGPS.java
index 122b1182..2897e06a 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
@@ -53,6 +53,7 @@ public class TeleGPS
AltosFlightReader reader;
TeleGPSDisplayThread thread;
+ boolean idle_mode;
JMenuBar menu_bar;
@@ -71,7 +72,7 @@ public class TeleGPS
JTabbedPane pane;
- AltosUIMapNew map;
+ AltosUIMap map;
TeleGPSInfo gps_info;
TeleGPSState gps_state;
AltosInfoTable info_table;
@@ -173,7 +174,7 @@ public class TeleGPS
}
void load_maps() {
- new AltosUIMapPreloadNew(this);
+ new AltosUIMapPreload(this);
}
void disconnect() {
@@ -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);
+ }
}
}
@@ -520,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);
@@ -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;
}
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 0f8a3d25..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
@@ -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() {
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..8e2f6627 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;
@@ -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);
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..e01ef47e 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 {
@@ -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) {
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 {