From e5dd00ef0014364fc059970cc020f209b3b16cf8 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 15 Nov 2014 22:46:01 -0800 Subject: altosdroid: Don't display MISSING flight number Just check and clear the entry if we end up seeing that value Signed-off-by: Keith Packard --- altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'altosdroid/src') diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java index f6cceac9..e883322c 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java @@ -337,7 +337,10 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener { } if (saved_state == null || state.flight != saved_state.flight) { Log.d(TAG, "update flight"); - mFlightView.setText(String.format("%d", state.flight)); + if (state.flight == AltosLib.MISSING) + mFlightView.setText(""); + else + mFlightView.setText(String.format("%d", state.flight)); } if (saved_state == null || state.state != saved_state.state) { Log.d(TAG, "update state"); -- cgit v1.2.3 From deda23963586eb07a32f9a3c83a0355178e19340 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 15 Nov 2014 22:48:15 -0800 Subject: altoslib: Add getBytes/putBytes interface to AltosPreferencesBackend This lets us store arbitrary binary data in the preferences database Signed-off-by: Keith Packard --- .../AltosDroid/AltosDroidPreferencesBackend.java | 16 ++++++++++++++++ altoslib/AltosPreferencesBackend.java | 3 +++ altosuilib/AltosUIPreferencesBackend.java | 8 ++++++++ 3 files changed, 27 insertions(+) (limited to 'altosdroid/src') diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferencesBackend.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferencesBackend.java index be41ae7c..09a2a7a2 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferencesBackend.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferencesBackend.java @@ -22,6 +22,7 @@ import java.util.Map; import android.content.Context; import android.content.SharedPreferences; import android.os.Environment; +import android.util.*; import org.altusmetrum.altoslib_5.*; @@ -71,6 +72,16 @@ public class AltosDroidPreferencesBackend implements AltosPreferencesBackend { return prefs.getString(key, def); } + public byte[] getBytes(String key, byte[] def) { + String save = prefs.getString(key, null); + + if (save == null) + return def; + + byte[] bytes = Base64.decode(save, Base64.DEFAULT); + return bytes; + } + public void putBoolean(String key, boolean value) { editor.putBoolean(key, value); } @@ -87,6 +98,11 @@ public class AltosDroidPreferencesBackend implements AltosPreferencesBackend { editor.putString(key, value); } + public void putBytes(String key, byte[] bytes) { + String save = Base64.encodeToString(bytes, Base64.DEFAULT); + editor.putString(key, save); + } + public void remove(String key) { editor.remove(key); } diff --git a/altoslib/AltosPreferencesBackend.java b/altoslib/AltosPreferencesBackend.java index 76a99acb..9bb4c99b 100644 --- a/altoslib/AltosPreferencesBackend.java +++ b/altoslib/AltosPreferencesBackend.java @@ -33,6 +33,9 @@ public interface AltosPreferencesBackend { public boolean getBoolean(String key, boolean def); public void putBoolean(String key, boolean value); + public byte[] getBytes(String key, byte[] def); + public void putBytes(String key, byte[] value); + public boolean nodeExists(String key); public AltosPreferencesBackend node(String key); diff --git a/altosuilib/AltosUIPreferencesBackend.java b/altosuilib/AltosUIPreferencesBackend.java index 4048fd83..8d4431f1 100644 --- a/altosuilib/AltosUIPreferencesBackend.java +++ b/altosuilib/AltosUIPreferencesBackend.java @@ -62,6 +62,14 @@ public class AltosUIPreferencesBackend implements AltosPreferencesBackend { _preferences.putBoolean(key, value); } + public byte[] getBytes(String key, byte[] def) { + return _preferences.getByteArray(key, def); + } + + public void putBytes(String key, byte[] value) { + _preferences.putByteArray(key, value); + } + public boolean nodeExists(String key) { try { return _preferences.nodeExists(key); -- cgit v1.2.3 From a488da3ca72fe0778b2d79a8cac935621d1d789d Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 15 Nov 2014 22:49:06 -0800 Subject: altosdroid: TabMap needs to expose () constructor Otherwise we get an exception at startup time for some reason. Signed-off-by: Keith Packard --- altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java | 3 +++ 1 file changed, 3 insertions(+) (limited to 'altosdroid/src') diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java index ab338ac2..5cbd7469 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java @@ -198,4 +198,7 @@ public class TabMap extends AltosDroidTab { } } + + public TabMap() { + } } -- cgit v1.2.3 From 5aae1446026a08bf8f09c56b960545eff30a8bd1 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 15 Nov 2014 22:52:42 -0800 Subject: altosdroid: Save AltosState and restore at startup Instead of re-parsing the old logfile, save the current state in the preferences database and restore at restart of the TelemetryService. This makes the state get restored even before the BT connection is recovered. Signed-off-by: Keith Packard --- .../altusmetrum/AltosDroid/TelemetryReader.java | 47 +--------------------- .../altusmetrum/AltosDroid/TelemetryService.java | 15 ++++++- 2 files changed, 16 insertions(+), 46 deletions(-) (limited to 'altosdroid/src') diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java index 971c3e80..03abeec6 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java @@ -40,8 +40,6 @@ public class TelemetryReader extends Thread { AltosLink link; AltosState state = null; - AltosFlightReader stacked; - LinkedBlockingQueue telemQueue; public AltosState read() throws ParseException, AltosCRCException, InterruptedException, IOException { @@ -59,10 +57,6 @@ public class TelemetryReader extends Thread { public void close() { state = null; - if (stacked != null) { - stacked.close(false); - stacked = null; - } link.remove_monitor(telemQueue); link = null; telemQueue.clear(); @@ -73,25 +67,6 @@ public class TelemetryReader extends Thread { AltosState state = null; try { - if (D) Log.d(TAG, "starting reader"); - while (stacked != null) { - AltosState stacked_state = null; - try { - stacked_state = stacked.read(); - } catch (ParseException pe) { - continue; - } catch (AltosCRCException ce) { - continue; - } - if (stacked_state != null) - state = stacked_state; - else - stacked = null; - } - if (state != null) { - if (D) Log.d(TAG, "Send initial state"); - handler.obtainMessage(TelemetryService.MSG_TELEMETRY, state).sendToTarget(); - } if (D) Log.d(TAG, "starting loop"); while (telemQueue != null) { try { @@ -111,34 +86,16 @@ public class TelemetryReader extends Thread { } } - public TelemetryReader (AltosLink in_link, Handler in_handler, AltosFlightReader in_stacked) { + public TelemetryReader (AltosLink in_link, Handler in_handler, AltosState in_state) { if (D) Log.d(TAG, "connected TelemetryReader create started"); link = in_link; handler = in_handler; - stacked = in_stacked; - state = null; + state = in_state; telemQueue = new LinkedBlockingQueue(); link.add_monitor(telemQueue); link.set_telemetry(AltosLib.ao_telemetry_standard); if (D) Log.d(TAG, "connected TelemetryReader created"); } - - private static AltosFlightReader existing_data(AltosLink link) { - if (link == null) - return null; - - File file = AltosPreferences.logfile(link.serial); - if (file != null) { - AltosStateIterable iterable = AltosStateIterable.iterable(file); - if (iterable != null) - return new AltosReplayReader(iterable.iterator(), file, false); - } - return null; - } - - public TelemetryReader(AltosLink link, Handler handler) { - this(link, handler, existing_data(link)); - } } diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java index 30d94409..e029c75c 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java @@ -139,6 +139,10 @@ public class TelemetryService extends Service implements LocationListener { case MSG_TELEMETRY: // forward telemetry messages s.telemetry_state.state = (AltosState) msg.obj; + if (s.telemetry_state.state != null) { + if (D) Log.d(TAG, "Save state"); + AltosPreferences.set_state(0, s.telemetry_state.state, null); + } if (D) Log.d(TAG, "MSG_TELEMETRY"); s.sendMessageToClients(); break; @@ -179,6 +183,8 @@ public class TelemetryService extends Service implements LocationListener { private Message message() { if (telemetry_state == null) Log.d(TAG, "telemetry_state null!"); + if (telemetry_state.state == null) + Log.d(TAG, "telemetry_state.state null!"); return Message.obtain(null, AltosDroid.MSG_STATE, telemetry_state); } @@ -262,7 +268,7 @@ public class TelemetryService extends Service implements LocationListener { if (D) Log.d(TAG, "connected bluetooth configured"); telemetry_state.connect = TelemetryState.CONNECT_CONNECTED; - mTelemetryReader = new TelemetryReader(mAltosBluetooth, mHandler); + mTelemetryReader = new TelemetryReader(mAltosBluetooth, mHandler, telemetry_state.state); mTelemetryReader.start(); if (D) Log.d(TAG, "connected TelemetryReader started"); @@ -306,6 +312,13 @@ public class TelemetryService extends Service implements LocationListener { telemetry_state.connect = TelemetryState.CONNECT_READY; + AltosSavedState saved_state = AltosPreferences.state(0); + + if (saved_state != null) { + if (D) Log.d(TAG, String.format("recovered old state flight %d\n", saved_state.state.flight)); + telemetry_state.state = saved_state.state; + } + // Start our timer - first event in 10 seconds, then every 10 seconds after that. timer.scheduleAtFixedRate(new TimerTask(){ public void run() {onTimerTick();}}, 10000L, 10000L); -- cgit v1.2.3 From 47956ac01397c0a7fafc6b0a4840113186924b2e Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 16 Nov 2014 13:17:55 -0800 Subject: altosdroid: East and West were flipped in all GPS output East is positive, West is negative Signed-off-by: Keith Packard --- altosdroid/src/org/altusmetrum/AltosDroid/TabAscent.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/TabDescent.java | 2 +- altosdroid/src/org/altusmetrum/AltosDroid/TabLanded.java | 4 ++-- altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java | 4 ++-- altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) (limited to 'altosdroid/src') diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabAscent.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabAscent.java index fa4e3c8b..2c406339 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TabAscent.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabAscent.java @@ -101,7 +101,7 @@ public class TabAscent extends AltosDroidTab { if (state.gps != null) { mLatitudeView.setText(AltosDroid.pos(state.gps.lat, "N", "S")); - mLongitudeView.setText(AltosDroid.pos(state.gps.lon, "W", "E")); + mLongitudeView.setText(AltosDroid.pos(state.gps.lon, "E", "W")); } else { mLatitudeView.setText(""); mLongitudeView.setText(""); diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabDescent.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabDescent.java index 28068666..cc5b2183 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TabDescent.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabDescent.java @@ -110,7 +110,7 @@ public class TabDescent extends AltosDroidTab { } if (state.gps != null) { mLatitudeView.setText(AltosDroid.pos(state.gps.lat, "N", "S")); - mLongitudeView.setText(AltosDroid.pos(state.gps.lon, "W", "E")); + mLongitudeView.setText(AltosDroid.pos(state.gps.lon, "E", "W")); } mApogeeVoltageView.setText(AltosDroid.number("%4.2f V", state.apogee_voltage)); diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabLanded.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabLanded.java index b257b936..013be0cd 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TabLanded.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabLanded.java @@ -82,12 +82,12 @@ public class TabLanded extends AltosDroidTab { } if (state != null && state.gps != null) { mTargetLatitudeView.setText(AltosDroid.pos(state.gps.lat, "N", "S")); - mTargetLongitudeView.setText(AltosDroid.pos(state.gps.lon, "W", "E")); + mTargetLongitudeView.setText(AltosDroid.pos(state.gps.lon, "E", "W")); } if (receiver != null) { mReceiverLatitudeView.setText(AltosDroid.pos(receiver.getLatitude(), "N", "S")); - mReceiverLongitudeView.setText(AltosDroid.pos(receiver.getLongitude(), "W", "E")); + mReceiverLongitudeView.setText(AltosDroid.pos(receiver.getLongitude(), "E", "W")); } if (state != null) { diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java index 5cbd7469..a625aa19 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java @@ -179,7 +179,7 @@ public class TabMap extends AltosDroidTab { } if (state.gps != null) { mTargetLatitudeView.setText(AltosDroid.pos(state.gps.lat, "N", "S")); - mTargetLongitudeView.setText(AltosDroid.pos(state.gps.lon, "W", "E")); + mTargetLongitudeView.setText(AltosDroid.pos(state.gps.lon, "E", "W")); if (state.gps.locked && state.gps.nsat >= 4) center (state.gps.lat, state.gps.lon, 10); } @@ -193,7 +193,7 @@ public class TabMap extends AltosDroidTab { else accuracy = 1000; mReceiverLatitudeView.setText(AltosDroid.pos(receiver.getLatitude(), "N", "S")); - mReceiverLongitudeView.setText(AltosDroid.pos(receiver.getLongitude(), "W", "E")); + mReceiverLongitudeView.setText(AltosDroid.pos(receiver.getLongitude(), "E", "W")); center (receiver.getLatitude(), receiver.getLongitude(), accuracy); } diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java index 32df71d7..c8e2ed64 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java @@ -163,7 +163,7 @@ public class TabPad extends AltosDroidTab { if (receiver.hasAltitude()) altitude = receiver.getAltitude(); mPadLatitudeView.setText(AltosDroid.pos(receiver.getLatitude(), "N", "S")); - mPadLongitudeView.setText(AltosDroid.pos(receiver.getLongitude(), "W", "E")); + mPadLongitudeView.setText(AltosDroid.pos(receiver.getLongitude(), "E", "W")); set_value(mPadAltitudeView, AltosConvert.height, 6, altitude); } } -- cgit v1.2.3