From 810f9a4f79b0480973d84595140d3f8948ce26d9 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 29 Aug 2014 15:22:43 -0500 Subject: altosdroid: start restoring from log data on startup Remember which flight was last being received and reload that file Signed-off-by: Keith Packard --- altoslib/AltosTelemetryReader.java | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'altoslib/AltosTelemetryReader.java') diff --git a/altoslib/AltosTelemetryReader.java b/altoslib/AltosTelemetryReader.java index 5ed50134..8803e19f 100644 --- a/altoslib/AltosTelemetryReader.java +++ b/altoslib/AltosTelemetryReader.java @@ -28,10 +28,17 @@ public class AltosTelemetryReader extends AltosFlightReader { int telemetry; int telemetry_rate; AltosState state = null; + AltosFlightReader stacked; LinkedBlockingQueue telem; public AltosState read() throws InterruptedException, ParseException, AltosCRCException, IOException { + if (stacked != null) { + state = stacked.read(); + if (state != null) + return state; + stacked = null; + } AltosLine l = telem.take(); if (l.line == null) throw new IOException("IO error"); @@ -53,6 +60,12 @@ public class AltosTelemetryReader extends AltosFlightReader { } public void close(boolean interrupted) { + + if (stacked != null) { + stacked.close(interrupted); + stacked = null; + } + link.remove_monitor(telem); log.close(); try { @@ -148,9 +161,10 @@ public class AltosTelemetryReader extends AltosFlightReader { return link.monitor_battery(); } - public AltosTelemetryReader (AltosLink in_link) + public AltosTelemetryReader (AltosLink in_link, AltosFlightReader in_stacked) throws IOException, InterruptedException, TimeoutException { link = in_link; + stacked = in_stacked; boolean success = false; try { log = new AltosLog(link); @@ -169,4 +183,19 @@ public class AltosTelemetryReader extends AltosFlightReader { close(true); } } + + private static AltosFlightReader existing_data(AltosLink link) { + 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 AltosTelemetryReader(AltosLink link) + throws IOException, InterruptedException, TimeoutException { + this(link, existing_data(link)); + } } -- cgit v1.2.3 From a5e348905a510bb2dcf6d7734f5681fb8338cd87 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 31 Aug 2014 00:11:28 -0500 Subject: altoslib: create logfiles preference object. check link in existing_data The logfiles preference hash wasn't getting created, resulting in crashes. When there was no link, don't try to load existing data. Signed-off-by: Keith Packard --- altoslib/AltosPreferences.java | 2 ++ altoslib/AltosTelemetryReader.java | 3 +++ 2 files changed, 5 insertions(+) (limited to 'altoslib/AltosTelemetryReader.java') diff --git a/altoslib/AltosPreferences.java b/altoslib/AltosPreferences.java index 0e91e4f4..af87b213 100644 --- a/altoslib/AltosPreferences.java +++ b/altoslib/AltosPreferences.java @@ -178,6 +178,8 @@ public class AltosPreferences { telemetry_rates = new Hashtable(); + logfiles = new Hashtable(); + voice = backend.getBoolean(voicePreference, true); callsign = backend.getString(callsignPreference,"N0CALL"); diff --git a/altoslib/AltosTelemetryReader.java b/altoslib/AltosTelemetryReader.java index 8803e19f..7539452d 100644 --- a/altoslib/AltosTelemetryReader.java +++ b/altoslib/AltosTelemetryReader.java @@ -185,6 +185,9 @@ public class AltosTelemetryReader extends AltosFlightReader { } 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); -- cgit v1.2.3