Move telemetry constants to Altos class, adding functions to compute
names and lengths. Generalize users of these values to use all of the
known values.
Add support for v0.8 TeleMetrum telemetry
Signed-off-by: Keith Packard <keithp@keithp.com>
/* Telemetry modes */
static final int ao_telemetry_off = 0;
/* Telemetry modes */
static final int ao_telemetry_off = 0;
- static final int ao_telemetry_legacy = 1;
- static final int ao_telemetry_split = 2;
+ static final int ao_telemetry_min = 1;
+ static final int ao_telemetry_standard = 1;
+ static final int ao_telemetry_0_9 = 2;
+ static final int ao_telemetry_0_8 = 3;
+ static final int ao_telemetry_max = 3;
+
+ static final String[] ao_telemetry_name = {
+ "Off", "Standard Telemetry", "TeleMetrum v0.9", "TeleMetrum v0.8"
+ };
+
+ static final int ao_telemetry_standard_len = 32;
+ static final int ao_telemetry_0_9_len = 95;
+ static final int ao_telemetry_0_8_len = 94;
- static final int ao_telemetry_split_len = 32;
- static final int ao_telemetry_legacy_len = 95;
+ static final int[] ao_telemetry_len = {
+ 0, 32, 95, 94
+ };
static HashMap<String,Integer> string_to_state = new HashMap<String,Integer>();
static HashMap<String,Integer> string_to_state = new HashMap<String,Integer>();
map_initialized = true;
}
map_initialized = true;
}
+ static int telemetry_len(int telemetry) {
+ if (telemetry <= ao_telemetry_max)
+ return ao_telemetry_len[telemetry];
+ throw new IllegalArgumentException(String.format("Invalid telemetry %d",
+ telemetry));
+ }
+
+ static String telemetry_name(int telemetry) {
+ if (telemetry <= ao_telemetry_max)
+ return ao_telemetry_name[telemetry];
+ throw new IllegalArgumentException(String.format("Invalid telemetry %d",
+ telemetry));
+ }
+
static String[] state_to_string = {
"startup",
"idle",
static String[] state_to_string = {
"startup",
"idle",
// Telemetry format menu
telemetries = new JComboBox();
// Telemetry format menu
telemetries = new JComboBox();
- telemetries.addItem("Original TeleMetrum Telemetry");
- telemetries.addItem("Standard AltOS Telemetry");
- int telemetry = 1;
- telemetry = AltosPreferences.telemetry(serial);
- if (telemetry > Altos.ao_telemetry_split)
- telemetry = Altos.ao_telemetry_split;
+ for (int i = 1; i <= Altos.ao_telemetry_max; i++)
+ telemetries.addItem(Altos.telemetry_name(i));
+ int telemetry = AltosPreferences.telemetry(serial);
+ if (telemetry <= Altos.ao_telemetry_off ||
+ telemetry > Altos.ao_telemetry_max)
+ telemetry = Altos.ao_telemetry_standard;
telemetries.setSelectedIndex(telemetry - 1);
telemetries.setSelectedIndex(telemetry - 1);
- telemetries.setMaximumRowCount(2);
+ telemetries.setMaximumRowCount(Altos.ao_telemetry_max);
telemetries.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int telemetry = telemetries.getSelectedIndex() + 1;
telemetries.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int telemetry = telemetries.getSelectedIndex() + 1;
if (telemetries.containsKey(serial))
return telemetries.get(serial);
int telemetry = preferences.getInt(String.format(telemetryPreferenceFormat, serial),
if (telemetries.containsKey(serial))
return telemetries.get(serial);
int telemetry = preferences.getInt(String.format(telemetryPreferenceFormat, serial),
- Altos.ao_telemetry_split);
+ Altos.ao_telemetry_standard);
telemetries.put(serial, telemetry);
return telemetry;
}
telemetries.put(serial, telemetry);
return telemetry;
}
int flight;
int channel;
int telemetry;
int flight;
int channel;
int telemetry;
- static final String[] short_monitor_names = { "Standard", "Original" };
boolean interrupted = false;
public String toString() {
boolean interrupted = false;
public String toString() {
- return String.format("%-9.9s serial %-4d flight %-4d (channel %-2d telemetry %s)",
- callsign, serial, flight, channel, short_monitor_names[telemetry]);
+ return String.format("%-9.9s serial %-4d flight %-4d (channel %-2d %s)",
+ callsign, serial, flight, channel, Altos.telemetry_name(telemetry));
}
public String toShortString() {
}
public String toShortString() {
javax.swing.Timer timer;
AltosScanResults results = new AltosScanResults();
javax.swing.Timer timer;
AltosScanResults results = new AltosScanResults();
- static final String[] monitor_names = { "Standard AltOS Telemetry", "Original TeleMetrum Telemetry" };
- static final int[] monitors = { 2, 1 };
- int monitor;
int channel;
final static int timeout = 1200;
int channel;
final static int timeout = 1200;
record.serial,
record.flight,
channel,
record.serial,
record.flight,
channel,
Runnable r = new Runnable() {
public void run() {
results.add(result);
Runnable r = new Runnable() {
public void run() {
results.add(result);
void set_label() {
scanning_label.setText(String.format("Scanning: channel %d %s",
channel,
void set_label() {
scanning_label.setText(String.format("Scanning: channel %d %s",
channel,
- monitor_names[monitor]));
+ Altos.telemetry_name(telemetry)));
++channel;
if (channel > 9) {
channel = 0;
++channel;
if (channel > 9) {
channel = 0;
- ++monitor;
- if (monitor == monitors.length)
- monitor = 0;
- reader.serial.set_telemetry(monitors[monitor]);
+ ++telemetry;
+ if (telemetry > Altos.ao_telemetry_max)
+ telemetry = Altos.ao_telemetry_min;
+ reader.serial.set_telemetry(telemetry);
}
reader.serial.set_channel(channel);
set_label();
}
reader.serial.set_channel(channel);
set_label();
if (r != null) {
if (device != null) {
if (reader != null) {
if (r != null) {
if (device != null) {
if (reader != null) {
- reader.set_telemetry(monitors[r.telemetry]);
+ reader.set_telemetry(r.telemetry);
reader.set_channel(r.channel);
owner.telemetry_window(device);
}
reader.set_channel(r.channel);
owner.telemetry_window(device);
}
try {
reader = new AltosTelemetryReader(device);
reader.serial.set_channel(channel);
try {
reader = new AltosTelemetryReader(device);
reader.serial.set_channel(channel);
- reader.serial.set_telemetry(monitors[monitor]);
+ reader.serial.set_telemetry(telemetry);
handler = new TelemetryHandler();
thread = new Thread(handler);
thread.start();
handler = new TelemetryHandler();
thread = new Thread(handler);
thread.start();
pane.setLayout(new GridBagLayout());
pane.setLayout(new GridBagLayout());
+ channel = 0;
+ telemetry = Altos.ao_telemetry_min;
+
scanning_label = new JLabel("Scanning:");
set_label();
scanning_label = new JLabel("Scanning:");
set_label();
}
private int telemetry_len() {
}
private int telemetry_len() {
- switch (telemetry) {
- case 1:
- default:
- return Altos.ao_telemetry_legacy_len;
- case 2:
- return Altos.ao_telemetry_split_len;
- }
+ return Altos.telemetry_len(telemetry);
}
public void set_channel(int in_channel) {
}
public void set_channel(int in_channel) {
line = "";
monitor_mode = false;
frame = null;
line = "";
monitor_mode = false;
frame = null;
- telemetry = Altos.ao_telemetry_split;
+ telemetry = Altos.ao_telemetry_standard;
monitors = new LinkedList<LinkedBlockingQueue<AltosLine>> ();
reply_queue = new LinkedBlockingQueue<AltosLine> ();
open();
monitors = new LinkedList<LinkedBlockingQueue<AltosLine>> ();
reply_queue = new LinkedBlockingQueue<AltosLine> ();
open();
private int int8(int i) {
private int int8(int i) {
- return Altos.int8(bytes, i + 1);
+ return Altos.int8(bytes, i + 1 + adjust);
}
private int uint8(int i) {
}
private int uint8(int i) {
- return Altos.uint8(bytes, i + 1);
+ return Altos.uint8(bytes, i + 1 + adjust);
}
private int int16(int i) {
}
private int int16(int i) {
- return Altos.int16(bytes, i + 1);
+ return Altos.int16(bytes, i + 1 + adjust);
}
private int uint16(int i) {
}
private int uint16(int i) {
- return Altos.uint16(bytes, i + 1);
+ return Altos.uint16(bytes, i + 1 + adjust);
}
private int uint32(int i) {
}
private int uint32(int i) {
- return Altos.uint32(bytes, i + 1);
+ return Altos.uint32(bytes, i + 1 + adjust);
}
private String string(int i, int l) {
}
private String string(int i, int l) {
- return Altos.string(bytes, i + 1, l);
+ return Altos.string(bytes, i + 1 + adjust, l);
}
static final int AO_GPS_NUM_SAT_MASK = (0xf << 0);
}
static final int AO_GPS_NUM_SAT_MASK = (0xf << 0);
- callsign = string(62, 8);
+
+ if (bytes.length == Altos.ao_telemetry_0_8_len + 4)
+ adjust = -1;
+
+ callsign = string(62, 8);
flight = uint16(2);
rssi = in_rssi;
status = in_status;
flight = uint16(2);
rssi = in_rssi;
status = in_status;
/* length, data ..., rssi, status, checksum -- 4 bytes extra */
switch (bytes.length) {
/* length, data ..., rssi, status, checksum -- 4 bytes extra */
switch (bytes.length) {
- case Altos.ao_telemetry_split_len + 4:
+ case Altos.ao_telemetry_standard_len + 4:
int type = Altos.uint8(bytes, 4 + 1);
switch (type) {
case packet_type_TM_sensor:
int type = Altos.uint8(bytes, 4 + 1);
switch (type) {
case packet_type_TM_sensor:
- case Altos.ao_telemetry_legacy_len + 4:
+ case Altos.ao_telemetry_0_9_len + 4:
+ r = new AltosTelemetryRecordLegacy(bytes, rssi, status);
+ break;
+ case Altos.ao_telemetry_0_8_len + 4:
r = new AltosTelemetryRecordLegacy(bytes, rssi, status);
break;
default:
r = new AltosTelemetryRecordLegacy(bytes, rssi, status);
break;
default: