static String number(int n) {
if (n == AltosLib.MISSING)
- return "unk";
+ return "unkn";
else
- return String.format("%03d", n);
+ return String.format("%04d", n);
}
- public AltosFile(int year, int month, int day, int serial, int flight, String extension) {
+ static String receiver(int receiver) {
+ if (receiver == AltosLib.MISSING)
+ return "";
+ return String.format("-via-%04d", receiver);
+ }
+
+ public AltosFile(int year, int month, int day, int serial, int flight, int receiver, String extension) {
super (AltosPreferences.logdir(),
- String.format("%04d-%02d-%02d-serial-%s-flight-%s.%s",
- year, month, day, number(serial), number(flight), extension));
+ String.format("%04d-%02d-%02d-serial-%s-flight-%s%s.%s",
+ year, month, day, number(serial), number(flight), receiver(receiver), extension));
+ }
+
+ public AltosFile(int year, int month, int day, int serial, int flight, String extension) {
+ this(year, month, day, serial, flight, AltosLib.MISSING, extension);
+ }
+
+ public AltosFile(int serial, int flight, int receiver, String extension) {
+ this(Calendar.getInstance().get(Calendar.YEAR),
+ Calendar.getInstance().get(Calendar.MONTH) + 1,
+ Calendar.getInstance().get(Calendar.DAY_OF_MONTH),
+ serial,
+ flight,
+ receiver,
+ extension);
}
public AltosFile(int serial, int flight, String extension) {
Calendar.getInstance().get(Calendar.DAY_OF_MONTH),
serial,
flight,
+ AltosLib.MISSING,
extension);
}
public AltosFile(AltosState state) {
- this(state.serial, state.flight, "telem");
+ this(state.serial, state.flight, state.receiver_serial, "telem");
}
}
package org.altusmetrum.altoslib_2;
import java.io.*;
-import java.text.ParseException;
-import java.util.concurrent.LinkedBlockingQueue;
+import java.text.*;
+import java.util.concurrent.*;
/*
* This creates a thread to capture telemetry data and write it to
LinkedBlockingQueue<String> pending_queue;
int serial;
int flight;
+ int receiver_serial;
FileWriter log_file;
Thread log_thread;
AltosFile file;
+ AltosLink link;
private void close_log_file() {
if (log_file != null) {
public void run () {
try {
- AltosState state = null;
+ AltosState state = new AltosState();
+ AltosConfigData receiver_config = link.config_data();
+ state.set_receiver_serial(receiver_config.serial);
for (;;) {
AltosLine line = input_queue.take();
if (line.line == null)
continue;
try {
AltosTelemetry telem = AltosTelemetry.parse(line.line);
- if (state != null)
- state = state.clone();
- else
- state = new AltosState();
+ state = state.clone();
telem.update_state(state);
if (state.serial != serial || state.flight != flight || log_file == null)
{
pending_queue.put(line.line);
}
} catch (InterruptedException ie) {
+ } catch (TimeoutException te) {
} catch (IOException ie) {
}
close();
link.add_monitor(input_queue);
serial = -1;
flight = -1;
+ this.link = link;
log_file = null;
log_thread = new Thread(this);
log_thread.start();
public int state;
public int flight;
public int serial;
+ public int receiver_serial;
public boolean landed;
public boolean ascent; /* going up? */
public boolean boost; /* under power */
log_format = AltosLib.MISSING;
serial = AltosLib.MISSING;
+ receiver_serial = AltosLib.MISSING;
baro = null;
companion = null;
log_format = old.log_format;
serial = old.serial;
+ receiver_serial = old.receiver_serial;
baro = old.baro;
companion = old.companion;
}
}
+ public void set_receiver_serial(int serial) {
+ if (serial != AltosLib.MISSING)
+ receiver_serial = serial;
+ }
+
public int rssi() {
if (rssi == AltosLib.MISSING)
return 0;