package altosui;
-import java.io.*;
-import java.util.*;
+import java.lang.*;
import java.text.*;
-import altosui.AltosTelemetry;
+import java.io.*;
+import java.util.concurrent.*;
-public class AltosTelemetryReader extends AltosReader {
- LinkedList<AltosRecord> records;
+class AltosTelemetryReader extends AltosFlightReader {
+ AltosDevice device;
+ AltosSerial serial;
+ AltosLog log;
- Iterator<AltosRecord> record_iterator;
+ LinkedBlockingQueue<AltosLine> telem;
- int boost_tick;
+ AltosRecord read() throws InterruptedException, ParseException, AltosCRCException, IOException {
+ AltosLine l = telem.take();
+ if (l.line == null)
+ throw new IOException("IO error");
+ return new AltosTelemetry(l.line);
+ }
- public AltosRecord read() throws IOException, ParseException {
- AltosRecord r;
- if (!record_iterator.hasNext())
- return null;
+ void close(boolean interrupted) {
+ serial.remove_monitor(telem);
+ log.close();
+ serial.close();
+ }
- r = record_iterator.next();
- r.time = (r.tick - boost_tick) / 100.0;
- return r;
+ void set_channel(int channel) {
+ serial.set_channel(channel);
}
- public AltosTelemetryReader (FileInputStream input) {
- boolean saw_boost = false;
+ void set_callsign(String callsign) {
+ serial.set_callsign(callsign);
+ }
- records = new LinkedList<AltosRecord> ();
+ public AltosTelemetryReader (AltosDevice in_device) throws FileNotFoundException, IOException {
+ device = in_device;
+ serial = new AltosSerial();
+ log = new AltosLog(serial);
+ name = device.getPath();
- try {
- for (;;) {
- String line = AltosRecord.gets(input);
- if (line == null)
- break;
- AltosTelemetry record = new AltosTelemetry(line);
- if (record == null)
- break;
- if (!saw_boost && record.state >= Altos.ao_flight_boost)
- {
- saw_boost = true;
- boost_tick = record.tick;
- }
- records.add(record);
- }
- } catch (IOException io) {
- } catch (ParseException pe) {
- }
- record_iterator = records.iterator();
- try {
- input.close();
- } catch (IOException ie) {
- }
+ telem = new LinkedBlockingQueue<AltosLine>();
+ serial.add_monitor(telem);
}
}