summaryrefslogtreecommitdiff
path: root/altoslib/AltosTelemetryReader.java
diff options
context:
space:
mode:
authorBdale Garbee <bdale@gag.com>2014-09-06 13:41:36 -0600
committerBdale Garbee <bdale@gag.com>2014-09-06 13:41:36 -0600
commit8c212cd5bfa03f71a31d84bd0051314e77d88461 (patch)
tree5be036b3510b8b474ad829caea20fcbc75b56839 /altoslib/AltosTelemetryReader.java
parente9714e34091abe657aa1b30aeda9466331aa39c1 (diff)
parentdd26ec2e706bdd29090759deeb90090a0e3b74f0 (diff)
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Conflicts: ao-bringup/turnon_telemega
Diffstat (limited to 'altoslib/AltosTelemetryReader.java')
-rw-r--r--altoslib/AltosTelemetryReader.java34
1 files changed, 33 insertions, 1 deletions
diff --git a/altoslib/AltosTelemetryReader.java b/altoslib/AltosTelemetryReader.java
index 5ed50134..7539452d 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<AltosLine> 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,22 @@ public class AltosTelemetryReader extends AltosFlightReader {
close(true);
}
}
+
+ 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 AltosTelemetryReader(AltosLink link)
+ throws IOException, InterruptedException, TimeoutException {
+ this(link, existing_data(link));
+ }
}