//import android.os.Message;
import android.util.Log;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosBluetooth extends AltosLink {
import android.app.AlertDialog;
import android.location.Location;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosDroid extends FragmentActivity {
// Debugging
static String pos(double p, String pos, String neg) {
String h = pos;
- if (p == AltosRecord.MISSING)
+ if (p == AltosLib.MISSING)
return "";
if (p < 0) {
h = neg;
}
static String number(String format, double value) {
- if (value == AltosRecord.MISSING)
+ if (value == AltosLib.MISSING)
return "";
return String.format(format, value);
}
static String integer(String format, int value) {
- if (value == AltosRecord.MISSING)
+ if (value == AltosLib.MISSING)
return "";
return String.format(format, value);
}
import android.content.SharedPreferences;
import android.os.Environment;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosDroidPreferences implements AltosPreferencesBackend {
public final static String NAME = "org.altusmetrum.AltosDroid";
package org.altusmetrum.AltosDroid;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import android.location.Location;
public interface AltosDroidTab {
import android.speech.tts.TextToSpeech;\r
import android.speech.tts.TextToSpeech.OnInitListener;\r
\r
-import org.altusmetrum.altoslib_1.*;\r
+import org.altusmetrum.altoslib_2.*;\r
\r
public class AltosVoice {\r
\r
package org.altusmetrum.AltosDroid;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import android.app.Activity;
import android.os.Bundle;
}
mApogeeVoltageView.setText(AltosDroid.number("%4.2f V", state.drogue_sense));
- mApogeeLights.set(state.drogue_sense > 3.2, state.drogue_sense == AltosRecord.MISSING);
+ mApogeeLights.set(state.drogue_sense > 3.2, state.drogue_sense == AltosLib.MISSING);
mMainVoltageView.setText(AltosDroid.number("%4.2f V", state.main_sense));
- mMainLights.set(state.main_sense > 3.2, state.main_sense == AltosRecord.MISSING);
+ mMainLights.set(state.main_sense > 3.2, state.main_sense == AltosLib.MISSING);
}
}
}
package org.altusmetrum.AltosDroid;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import android.app.Activity;
import android.os.Bundle;
}
mApogeeVoltageView.setText(AltosDroid.number("%4.2f V", state.drogue_sense));
- mApogeeLights.set(state.drogue_sense > 3.2, state.drogue_sense == AltosRecord.MISSING);
+ mApogeeLights.set(state.drogue_sense > 3.2, state.drogue_sense == AltosLib.MISSING);
mMainVoltageView.setText(AltosDroid.number("%4.2f V", state.main_sense));
- mMainLights.set(state.main_sense > 3.2, state.main_sense == AltosRecord.MISSING);
+ mMainLights.set(state.main_sense > 3.2, state.main_sense == AltosLib.MISSING);
}
}
package org.altusmetrum.AltosDroid;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import android.app.Activity;
import android.os.Bundle;
import java.util.Arrays;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
package org.altusmetrum.AltosDroid;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import android.app.Activity;
import android.os.Bundle;
public void update_ui(AltosState state, AltosGreatCircle from_receiver, Location receiver) {
if (state != null) {
mBatteryVoltageView.setText(AltosDroid.number("%4.2f V", state.battery));
- mBatteryLights.set(state.battery > 3.7, state.battery == AltosRecord.MISSING);
+ mBatteryLights.set(state.battery > 3.7, state.battery == AltosLib.MISSING);
mApogeeVoltageView.setText(AltosDroid.number("%4.2f V", state.drogue_sense));
- mApogeeLights.set(state.drogue_sense > 3.2, state.drogue_sense == AltosRecord.MISSING);
+ mApogeeLights.set(state.drogue_sense > 3.2, state.drogue_sense == AltosLib.MISSING);
mMainVoltageView.setText(AltosDroid.number("%4.2f V", state.main_sense));
- mMainLights.set(state.main_sense > 3.2, state.main_sense == AltosRecord.MISSING);
+ mMainLights.set(state.main_sense > 3.2, state.main_sense == AltosLib.MISSING);
if (state.data.flight != 0) {
if (state.data.state <= AltosLib.ao_flight_pad)
} else {
mDataLoggingView.setText("Storage full");
}
- mDataLoggingLights.set(state.data.flight != 0, state.data.flight == AltosRecord.MISSING);
+ mDataLoggingLights.set(state.data.flight != 0, state.data.flight == AltosLib.MISSING);
if (state.gps != null) {
mGPSLockedView.setText(AltosDroid.integer("%4d sats", state.gps.nsat));
package org.altusmetrum.AltosDroid;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.util.Log;\r
import android.os.Handler;\r
\r
-import org.altusmetrum.altoslib_1.*;\r
+import org.altusmetrum.altoslib_2.*;\r
\r
\r
public class TelemetryReader extends Thread {\r
import android.location.LocationListener;
import android.location.Criteria;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class TelemetryService extends Service implements LocationListener {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosAccel extends AltosUnits {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosCRCException extends Exception {
public int rssi;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosCompanion {
public final static int board_id_telescience = 0x0a;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.util.*;
import java.text.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public interface AltosConfigValues {
/* set and get all of the dialog values */
/*
* Sensor data conversion functions
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosConvert {
/*
}
static public double mega_battery_voltage(int v_batt) {
- if (v_batt != AltosRecord.MISSING)
+ if (v_batt != AltosLib.MISSING)
return 3.3 * mega_adc(v_batt) * (15.0 + 27.0) / 27.0;
- return AltosRecord.MISSING;
+ return AltosLib.MISSING;
}
static double mega_pyro_voltage(int raw) {
- if (raw != AltosRecord.MISSING)
+ if (raw != AltosLib.MISSING)
return 3.3 * mega_adc(raw) * (100.0 + 27.0) / 27.0;
- return AltosRecord.MISSING;
+ return AltosLib.MISSING;
+ }
+
+ static double tele_mini_voltage(int sensor) {
+ double supply = 3.3;
+
+ return sensor / 32767.0 * supply * 127/27;
+ }
+
+ static double easy_mini_voltage(int sensor) {
+ double supply = 3.0;
+
+ return sensor / 32767.0 * supply * 127/27;
}
public static double radio_to_frequency(int freq, int setting, int cal, int channel) {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosDistance extends AltosUnits {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.text.*;
import java.util.concurrent.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
AltosState state = start.clone();
for (AltosEeprom eeprom : body) {
eeprom.update_state(state);
+ state.finish_update();
if (state.state >= AltosLib.ao_flight_boost) {
start.set_boost_tick(state.tick);
break;
AltosState state = start.clone();
Iterator<AltosEeprom> i = body.iterator();
- while (i.hasNext() && !state.valid())
+ while (i.hasNext() && !state.valid()) {
i.next().update_state(state);
+ state.finish_update();
+ }
return new AltosEepromIterator(state, i);
}
}
\ No newline at end of file
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.text.*;
import java.util.concurrent.*;
for (block = in_start_block; block < in_end_block; block++) {
AltosEepromChunk eechunk = new AltosEepromChunk(link, block, block == in_start_block);
- for (int i = 0; i < AltosEepromChunk.chunk_size; i += AltosEepromRecord.record_length) {
+ for (int i = 0; i < AltosEepromChunk.chunk_size; i += AltosEepromTM.record_length) {
try {
- AltosEepromRecord r = new AltosEepromRecord(eechunk, i);
+ AltosEepromTM r = new AltosEepromTM(eechunk, i);
if (r.cmd == AltosLib.AO_LOG_FLIGHT) {
flight = r.b;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.text.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
public int v_batt() { return data16(10); }
double voltage(AltosState state, int sensor) {
- double supply;
-
if (state.log_format == AltosLib.AO_LOG_FORMAT_EASYMINI)
- supply = 3.0;
+ return AltosConvert.easy_mini_voltage(sensor);
else
- supply = 3.3;
- return sensor / 32767.0 * supply * 127/27;
+ return AltosConvert.tele_mini_voltage(sensor);
}
public void update_state(AltosState state) {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
+++ /dev/null
-/*
- * Copyright © 2010 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-import java.text.*;
-
-public class AltosEepromRecord {
- public int cmd;
- public int tick;
- public int a;
- public int b;
- public String data;
- public boolean tick_valid;
-
- public static final int record_length = 8;
-
- public AltosEepromRecord (AltosEepromChunk chunk, int start) throws ParseException {
-
- cmd = chunk.data(start);
- tick_valid = true;
-
- tick_valid = !chunk.erased(start, record_length);
- if (tick_valid) {
- if (AltosConvert.checksum(chunk.data, start, record_length) != 0)
- throw new ParseException(String.format("invalid checksum at 0x%x",
- chunk.address + start), 0);
- } else {
- cmd = AltosLib.AO_LOG_INVALID;
- }
-
- tick = chunk.data16(start + 2);
- a = chunk.data16(start + 4);
- b = chunk.data16(start + 6);
-
- data = null;
- }
-
- public AltosEepromRecord (String line) {
- tick_valid = false;
- tick = 0;
- a = 0;
- b = 0;
- data = null;
- if (line == null) {
- cmd = AltosLib.AO_LOG_INVALID;
- data = "";
- } else {
- try {
- String[] tokens = line.split("\\s+");
-
- if (tokens[0].length() == 1) {
- if (tokens.length != 4) {
- cmd = AltosLib.AO_LOG_INVALID;
- data = line;
- } else {
- cmd = tokens[0].codePointAt(0);
- tick = Integer.parseInt(tokens[1],16);
- tick_valid = true;
- a = Integer.parseInt(tokens[2],16);
- b = Integer.parseInt(tokens[3],16);
- }
- } else if (tokens[0].equals("Config") && tokens[1].equals("version:")) {
- cmd = AltosLib.AO_LOG_CONFIG_VERSION;
- data = tokens[2];
- } else if (tokens[0].equals("Main") && tokens[1].equals("deploy:")) {
- cmd = AltosLib.AO_LOG_MAIN_DEPLOY;
- a = Integer.parseInt(tokens[2]);
- } else if (tokens[0].equals("Apogee") && tokens[1].equals("delay:")) {
- cmd = AltosLib.AO_LOG_APOGEE_DELAY;
- a = Integer.parseInt(tokens[2]);
- } else if (tokens[0].equals("Radio") && tokens[1].equals("channel:")) {
- cmd = AltosLib.AO_LOG_RADIO_CHANNEL;
- a = Integer.parseInt(tokens[2]);
- } else if (tokens[0].equals("Callsign:")) {
- cmd = AltosLib.AO_LOG_CALLSIGN;
- data = tokens[1].replaceAll("\"","");
- } else if (tokens[0].equals("Accel") && tokens[1].equals("cal")) {
- cmd = AltosLib.AO_LOG_ACCEL_CAL;
- a = Integer.parseInt(tokens[3]);
- b = Integer.parseInt(tokens[5]);
- } else if (tokens[0].equals("Radio") && tokens[1].equals("cal:")) {
- cmd = AltosLib.AO_LOG_RADIO_CAL;
- a = Integer.parseInt(tokens[2]);
- } else if (tokens[0].equals("Max") && tokens[1].equals("flight") && tokens[2].equals("log:")) {
- cmd = AltosLib.AO_LOG_MAX_FLIGHT_LOG;
- a = Integer.parseInt(tokens[3]);
- } else if (tokens[0].equals("manufacturer")) {
- cmd = AltosLib.AO_LOG_MANUFACTURER;
- data = tokens[1];
- } else if (tokens[0].equals("product")) {
- cmd = AltosLib.AO_LOG_PRODUCT;
- data = tokens[1];
- } else if (tokens[0].equals("serial-number")) {
- cmd = AltosLib.AO_LOG_SERIAL_NUMBER;
- a = Integer.parseInt(tokens[1]);
- } else if (tokens[0].equals("log-format")) {
- cmd = AltosLib.AO_LOG_LOG_FORMAT;
- a = Integer.parseInt(tokens[1]);
- } else if (tokens[0].equals("software-version")) {
- cmd = AltosLib.AO_LOG_SOFTWARE_VERSION;
- data = tokens[1];
- } else {
- cmd = AltosLib.AO_LOG_INVALID;
- data = line;
- }
- } catch (NumberFormatException ne) {
- cmd = AltosLib.AO_LOG_INVALID;
- data = line;
- }
- }
- }
-
- public AltosEepromRecord(int in_cmd, int in_tick, int in_a, int in_b) {
- tick_valid = true;
- cmd = in_cmd;
- tick = in_tick;
- a = in_a;
- b = in_b;
- }
-}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
+++ /dev/null
-/*
- * Copyright © 2011 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-import java.text.*;
-
-public class AltosEepromTeleScience {
- public int type;
- public int tick;
- public int tm_state;
- public int tm_tick;
- public int[] data;
- public boolean valid;
-
- public static final int AO_LOG_TELESCIENCE_START = 's';
- public static final int AO_LOG_TELESCIENCE_DATA = 'd';
-
- static final int max_data = 12;
- public static final int record_length = 32;
-
- public int record_length() { return record_length; }
-
- public AltosEepromTeleScience (AltosEepromChunk chunk, int start) throws ParseException {
- type = chunk.data(start);
-
- valid = !chunk.erased(start, record_length);
- if (valid) {
- if (AltosConvert.checksum(chunk.data, start, record_length) != 0)
- throw new ParseException(String.format("invalid checksum at 0x%x",
- chunk.address + start), 0);
- } else {
- type = AltosLib.AO_LOG_INVALID;
- }
-
- tick = chunk.data16(start+2);
- tm_tick = chunk.data16(start+4);
- tm_state = chunk.data(start+6);
- data = new int[max_data];
- for (int i = 0; i < max_data; i++)
- data[i] = chunk.data16(start + 8 + i * 2);
- }
-}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.File;
import java.util.*;
public class AltosFile extends File {
static String number(int n) {
- if (n == AltosRecord.MISSING)
+ if (n == AltosLib.MISSING)
return "unk";
else
return String.format("%03d", n);
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public interface AltosFlashListener {
public void position(String label, int percent);
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.text.*;
import java.io.*;
public boolean has_monitor_battery() { return false; }
- public double monitor_battery() { return AltosRecord.MISSING; }
+ public double monitor_battery() { return AltosLib.MISSING; }
}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosFrequency {
public double frequency;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.text.*;
+import java.util.concurrent.*;
public class AltosGPS implements Cloneable {
- public final static int MISSING = AltosRecord.MISSING;
+ public final static int MISSING = AltosLib.MISSING;
public int nsat;
public boolean locked;
}
public void ClearGPSTime() {
- year = month = day = AltosRecord.MISSING;
- hour = minute = second = AltosRecord.MISSING;
+ year = month = day = AltosLib.MISSING;
+ hour = minute = second = AltosLib.MISSING;
}
public AltosGPS(AltosTelemetryMap map) throws ParseException {
second = map.get_int(AltosTelemetryLegacy.AO_TELEM_GPS_SECOND, 0);
ground_speed = map.get_double(AltosTelemetryLegacy.AO_TELEM_GPS_HORIZONTAL_SPEED,
- AltosRecord.MISSING, 1/100.0);
+ AltosLib.MISSING, 1/100.0);
course = map.get_int(AltosTelemetryLegacy.AO_TELEM_GPS_COURSE,
- AltosRecord.MISSING);
+ AltosLib.MISSING);
hdop = map.get_double(AltosTelemetryLegacy.AO_TELEM_GPS_HDOP, MISSING, 1.0);
vdop = map.get_double(AltosTelemetryLegacy.AO_TELEM_GPS_VDOP, MISSING, 1.0);
h_error = map.get_int(AltosTelemetryLegacy.AO_TELEM_GPS_HERROR, MISSING);
}
}
+ public boolean parse_string (String line, boolean says_done) {
+ String[] bits = line.split("\\s+");
+ if (bits.length == 0)
+ return false;
+ if (line.startsWith("Date:")) {
+ if (bits.length < 2)
+ return false;
+ String[] d = bits[1].split("/");
+ if (d.length < 3)
+ return false;
+ year = Integer.parseInt(d[0]) + 2000;
+ month = Integer.parseInt(d[1]);
+ day = Integer.parseInt(d[2]);
+ } else if (line.startsWith("Time:")) {
+ if (bits.length < 2)
+ return false;
+ String[] d = bits[1].split(":");
+ if (d.length < 3)
+ return false;
+ hour = Integer.parseInt(d[0]);
+ minute = Integer.parseInt(d[1]);
+ second = Integer.parseInt(d[2]);
+ } else if (line.startsWith("Lat/Lon:")) {
+ if (bits.length < 3)
+ return false;
+ lat = Integer.parseInt(bits[1]) * 1.0e-7;
+ lon = Integer.parseInt(bits[2]) * 1.0e-7;
+ } else if (line.startsWith("Alt:")) {
+ if (bits.length < 2)
+ return false;
+ alt = Integer.parseInt(bits[1]);
+ } else if (line.startsWith("Flags:")) {
+ if (bits.length < 2)
+ return false;
+ int status = Integer.decode(bits[1]);
+ connected = (status & AltosLib.AO_GPS_RUNNING) != 0;
+ locked = (status & AltosLib.AO_GPS_VALID) != 0;
+ if (!says_done)
+ return false;
+ } else if (line.startsWith("Sats:")) {
+ if (bits.length < 2)
+ return false;
+ nsat = Integer.parseInt(bits[1]);
+ cc_gps_sat = new AltosGPSSat[nsat];
+ for (int i = 0; i < nsat; i++) {
+ int svid = Integer.parseInt(bits[2+i*2]);
+ int cc_n0 = Integer.parseInt(bits[3+i*2]);
+ cc_gps_sat[i] = new AltosGPSSat(svid, cc_n0);
+ }
+ } else if (line.startsWith("done")) {
+ return false;
+ } else
+ return false;
+ return true;
+ }
+
public AltosGPS(String[] words, int i, int version) throws ParseException {
AltosParse.word(words[i++], "GPS");
nsat = AltosParse.parse_int(words[i++]);
}
public AltosGPS() {
- lat = AltosRecord.MISSING;
- lon = AltosRecord.MISSING;
- alt = AltosRecord.MISSING;
+ lat = AltosLib.MISSING;
+ lon = AltosLib.MISSING;
+ alt = AltosLib.MISSING;
ClearGPSTime();
cc_gps_sat = null;
}
}
}
} else {
- lat = AltosRecord.MISSING;
- lon = AltosRecord.MISSING;
- alt = AltosRecord.MISSING;
+ lat = AltosLib.MISSING;
+ lon = AltosLib.MISSING;
+ alt = AltosLib.MISSING;
ClearGPSTime();
cc_gps_sat = null;
}
}
+
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ try {
+ AltosGPS gps = new AltosGPS(link, config_data);
+
+ if (gps != null) {
+ state.set_gps(gps, state.gps_sequence++);
+ return;
+ }
+ } catch (TimeoutException te) {
+ } catch (InterruptedException ie) {
+ }
+ state.set_gps(null, 0);
+ }
+
+ public AltosGPS (AltosLink link, AltosConfigData config_data) throws TimeoutException, InterruptedException {
+ boolean says_done = config_data.compare_version("1.0") >= 0;
+ link.printf("g\n");
+ for (;;) {
+ String line = link.get_reply_no_dialog(5000);
+ if (line == null)
+ throw new TimeoutException();
+ if (!parse_string(line, says_done))
+ break;
+ }
+ }
}
+++ /dev/null
-/*
- * Copyright © 2012 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-import java.util.concurrent.*;
-
-class AltosGPSQuery extends AltosGPS {
- public AltosGPSQuery (AltosLink link, AltosConfigData config_data)
- throws TimeoutException, InterruptedException {
- boolean says_done = config_data.compare_version("1.0") >= 0;
- link.printf("g\n");
- for (;;) {
- String line = link.get_reply_no_dialog(5000);
- if (line == null)
- throw new TimeoutException();
- String[] bits = line.split("\\s+");
- if (bits.length == 0)
- continue;
- if (line.startsWith("Date:")) {
- if (bits.length < 2)
- continue;
- String[] d = bits[1].split(":");
- if (d.length < 3)
- continue;
- year = Integer.parseInt(d[0]) + 2000;
- month = Integer.parseInt(d[1]);
- day = Integer.parseInt(d[2]);
- continue;
- }
- if (line.startsWith("Time:")) {
- if (bits.length < 2)
- continue;
- String[] d = bits[1].split("/");
- if (d.length < 3)
- continue;
- hour = Integer.parseInt(d[0]);
- minute = Integer.parseInt(d[1]);
- second = Integer.parseInt(d[2]);
- continue;
- }
- if (line.startsWith("Lat/Lon:")) {
- if (bits.length < 3)
- continue;
- lat = Integer.parseInt(bits[1]) * 1.0e-7;
- lon = Integer.parseInt(bits[2]) * 1.0e-7;
- continue;
- }
- if (line.startsWith("Alt:")) {
- if (bits.length < 2)
- continue;
- alt = Integer.parseInt(bits[1]);
- continue;
- }
- if (line.startsWith("Flags:")) {
- if (bits.length < 2)
- continue;
- int status = Integer.decode(bits[1]);
- connected = (status & AltosLib.AO_GPS_RUNNING) != 0;
- locked = (status & AltosLib.AO_GPS_VALID) != 0;
- if (!says_done)
- break;
- continue;
- }
- if (line.startsWith("Sats:")) {
- if (bits.length < 2)
- continue;
- nsat = Integer.parseInt(bits[1]);
- cc_gps_sat = new AltosGPSSat[nsat];
- for (int i = 0; i < nsat; i++) {
- int svid = Integer.parseInt(bits[2+i*2]);
- int cc_n0 = Integer.parseInt(bits[3+i*2]);
- cc_gps_sat[i] = new AltosGPSSat(svid, cc_n0);
- }
- }
- if (line.startsWith("done"))
- break;
- if (line.startsWith("Syntax error"))
- break;
- }
- }
-}
-
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosGPSSat {
public int svid;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.lang.Math;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosHeight extends AltosUnits {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.LinkedList;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
+
+import java.util.concurrent.*;
public class AltosIMU implements Cloneable {
public int accel_x;
public int gyro_y;
public int gyro_z;
+ public boolean parse_string(String line) {
+ if (!line.startsWith("Accel:"))
+ return false;
+
+ String[] items = line.split("\\s+");
+
+ if (items.length >= 8) {
+ accel_x = Integer.parseInt(items[1]);
+ accel_y = Integer.parseInt(items[2]);
+ accel_z = Integer.parseInt(items[3]);
+ gyro_x = Integer.parseInt(items[5]);
+ gyro_y = Integer.parseInt(items[6]);
+ gyro_z = Integer.parseInt(items[7]);
+ }
+ return true;
+ }
+
public AltosIMU clone() {
AltosIMU n = new AltosIMU();
n.gyro_z = gyro_z;
return n;
}
+
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ try {
+ AltosIMU imu = new AltosIMU(link);
+
+ if (imu != null)
+ state.set_imu(imu);
+ } catch (TimeoutException te) {
+ } catch (InterruptedException ie) {
+ }
+ }
+
+ public AltosIMU() {
+ accel_x = AltosLib.MISSING;
+ accel_y = AltosLib.MISSING;
+ accel_z = AltosLib.MISSING;
+
+ gyro_x = AltosLib.MISSING;
+ gyro_y = AltosLib.MISSING;
+ gyro_z = AltosLib.MISSING;
+ }
+
+ public AltosIMU(AltosLink link) throws InterruptedException, TimeoutException {
+ this();
+ link.printf("I\n");
+ for (;;) {
+ String line = link.get_reply_no_dialog(5000);
+ if (line == null) {
+ throw new TimeoutException();
+ }
+ if (parse_string(line))
+ break;
+ }
+ }
}
-
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright © 2012 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-import java.util.concurrent.TimeoutException;
-
-class AltosIMUQuery extends AltosIMU {
-
- public AltosIMUQuery (AltosLink link) throws InterruptedException, TimeoutException {
- link.printf("I\n");
- for (;;) {
- String line = link.get_reply_no_dialog(5000);
- if (line == null) {
- throw new TimeoutException();
- }
- if (!line.startsWith("Accel:"))
- continue;
- String[] items = line.split("\\s+");
- if (items.length >= 8) {
- accel_x = Integer.parseInt(items[1]);
- accel_y = Integer.parseInt(items[2]);
- accel_z = Integer.parseInt(items[3]);
- gyro_x = Integer.parseInt(items[5]);
- gyro_y = Integer.parseInt(items[6]);
- gyro_z = Integer.parseInt(items[7]);
- }
- break;
- }
- }
-}
-
--- /dev/null
+/*
+ * Copyright © 2013 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altoslib_2;
+
+import java.io.*;
+import java.util.*;
+import java.text.*;
+import java.util.concurrent.*;
+
+public abstract class AltosIdle {
+ AltosLink link;
+ AltosConfigData config_data;
+
+ public void printf(String format, Object ... arguments) {
+ link.printf(format, arguments);
+ }
+
+ public abstract void update_state(AltosState state) throws InterruptedException, TimeoutException;
+
+ public AltosIdle(AltosLink link, AltosConfigData config_data) {
+ this.link = link;
+ this.config_data = config_data;
+ }
+}
--- /dev/null
+/*
+ * Copyright © 2013 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altoslib_2;
+
+import java.io.*;
+import java.util.*;
+import java.text.*;
+import java.util.concurrent.*;
+
+class AltosIdler {
+ String prefix;
+ int[] idlers;
+
+ static final int idle_gps = 0;
+ static final int idle_imu = 1;
+ static final int idle_mag = 2;
+ static final int idle_ms5607 = 3;
+ static final int idle_mma655x = 4;
+
+
+ static final int idle_sensor_tm = 10;
+ static final int idle_sensor_metrum = 11;
+ static final int idle_sensor_mega = 12;
+ static final int idle_sensor_emini = 13;
+
+ public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException, TimeoutException {
+ for (int idler : idlers) {
+ AltosIdle idle = null;
+ switch (idler) {
+ case idle_gps:
+ AltosGPS.update_state(state, link, config_data);
+ break;
+ case idle_imu:
+ AltosIMU.update_state(state, link, config_data);
+ break;
+ case idle_mag:
+ AltosMag.update_state(state, link, config_data);
+ break;
+ case idle_ms5607:
+ AltosMs5607.update_state(state, link, config_data);
+ break;
+ case idle_mma655x:
+ AltosMma655x.update_state(state, link, config_data);
+ break;
+ case idle_sensor_tm:
+ AltosSensorTM.update_state(state, link, config_data);
+ break;
+ case idle_sensor_metrum:
+ AltosSensorMetrum.update_state(state, link, config_data);
+ break;
+ case idle_sensor_mega:
+ AltosSensorMega.update_state(state, link, config_data);
+ break;
+ case idle_sensor_emini:
+ AltosSensorEMini.update_state(state, link, config_data);
+ break;
+ }
+ if (idle != null)
+ idle.update_state(state);
+ }
+ }
+
+ public boolean matches(AltosConfigData config_data) {
+ return config_data.product.startsWith(prefix);
+ }
+
+ public AltosIdler(String prefix, int ... idlers) {
+ this.prefix = prefix;
+ this.idlers = idlers;
+ }
+}
+
+
+public class AltosIdleFetch implements AltosStateUpdate {
+
+ static final AltosIdler[] idlers = {
+
+ new AltosIdler("EasyMini",
+ AltosIdler.idle_ms5607,
+ AltosIdler.idle_sensor_emini),
+
+ new AltosIdler("TeleMini-v1",
+ AltosIdler.idle_sensor_tm),
+
+ new AltosIdler("TeleMini-v2",
+ AltosIdler.idle_ms5607,
+ AltosIdler.idle_sensor_tm),
+
+ new AltosIdler("TeleMetrum-v1",
+ AltosIdler.idle_gps,
+ AltosIdler.idle_sensor_tm),
+
+ new AltosIdler("TeleMetrum-v2",
+ AltosIdler.idle_gps,
+ AltosIdler.idle_ms5607, AltosIdler.idle_mma655x,
+ AltosIdler.idle_sensor_metrum),
+
+ new AltosIdler("TeleMega",
+ AltosIdler.idle_gps,
+ AltosIdler.idle_ms5607, AltosIdler.idle_mma655x,
+ AltosIdler.idle_imu, AltosIdler.idle_mag,
+ AltosIdler.idle_sensor_mega),
+ };
+
+ AltosLink link;
+
+ double frequency;
+ String callsign;
+
+ public void update_state(AltosState state) {
+ try {
+ AltosConfigData config_data = new AltosConfigData(link);
+ state.set_state(AltosLib.ao_flight_startup);
+ state.set_serial(config_data.serial);
+ state.set_callsign(config_data.callsign);
+ state.set_ground_accel(config_data.accel_cal_plus);
+ state.set_accel_g(config_data.accel_cal_plus, config_data.accel_cal_minus);
+ for (AltosIdler idler : idlers) {
+ if (idler.matches(config_data)) {
+ idler.update_state(state, link, config_data);
+ break;
+ }
+ }
+ state.set_received_time(System.currentTimeMillis());
+ } catch (InterruptedException ie) {
+ } catch (TimeoutException te) {
+ }
+
+ }
+
+ public AltosIdleFetch(AltosLink link) {
+ this.link = link;
+ }
+}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.concurrent.*;
public class AltosIdleMonitor extends Thread {
AltosLink link;
AltosIdleMonitorListener listener;
- AltosState state;
+
+ AltosIdleFetch fetch;
+
boolean remote;
double frequency;
String callsign;
- AltosState previous_state;
+
AltosListenerState listener_state;
AltosConfigData config_data;
AltosGPS gps;
return rssi;
}
- boolean has_sensor_tm(AltosConfigData config_data) {
- return config_data.product.startsWith("TeleMetrum") || config_data.product.startsWith("TeleMini");
- }
-
- boolean has_sensor_mm(AltosConfigData config_data) {
- return config_data.product.startsWith("TeleMega");
- }
-
- boolean has_gps(AltosConfigData config_data) {
- return config_data.product.startsWith("TeleMetrum") || config_data.product.startsWith("TeleMega");
+ void start_link() throws InterruptedException, TimeoutException {
+ if (remote) {
+ link.set_radio_frequency(frequency);
+ link.set_callsign(callsign);
+ link.start_remote();
+ } else
+ link.flush_input();
}
- AltosRecord sensor_mm(AltosConfigData config_data) throws InterruptedException, TimeoutException {
- AltosRecordMM record_mm = new AltosRecordMM();
- AltosSensorMM sensor = new AltosSensorMM(link);
- AltosMs5607 ms5607 = new AltosMs5607Query(link);
- AltosIMU imu = new AltosIMUQuery(link);
-
- record_mm.accel_plus_g = config_data.accel_cal_plus;
- record_mm.accel_minus_g = config_data.accel_cal_minus;
-
- record_mm.ground_accel = sensor.accel;
- record_mm.accel = sensor.accel;
- record_mm.ground_pres = ms5607.pa;
- record_mm.pres = ms5607.pa;
- record_mm.temp = ms5607.cc;
-
- record_mm.v_batt = sensor.v_batt;
- record_mm.v_pyro = sensor.v_pyro;
- record_mm.sense = sensor.sense;
-
- record_mm.imu = imu;
-
- return record_mm;
+ void stop_link() throws InterruptedException, TimeoutException {
+ if (remote)
+ link.stop_remote();
}
- void update_state() throws InterruptedException, TimeoutException {
- AltosRecord record = null;
+ void update_state(AltosState state) throws InterruptedException, TimeoutException {
+ boolean worked = false;
try {
- if (remote) {
- link.set_radio_frequency(frequency);
- link.set_callsign(callsign);
- link.start_remote();
- } else
- link.flush_input();
- config_data = new AltosConfigData(link);
-
- if (has_sensor_tm(config_data))
- record = new AltosSensorTM(link, config_data);
- else if (has_sensor_mm(config_data))
- record = sensor_mm(config_data);
- else
- record = new AltosRecordNone();
-
- if (has_gps(config_data))
- gps = new AltosGPSQuery(link, config_data);
-
- record.version = 0;
- record.callsign = config_data.callsign;
- record.serial = config_data.serial;
- record.flight = config_data.log_available() > 0 ? 255 : 0;
- record.status = 0;
- record.state = AltosLib.ao_flight_idle;
- record.gps = gps;
- record.gps_sequence++;
- state = new AltosState (record, state);
+ start_link();
+ fetch.update_state(state);
+ worked = true;
} finally {
- if (remote) {
- link.stop_remote();
- if (record != null) {
- record.rssi = link.rssi();
- listener_state.battery = link.monitor_battery();
- }
- } else {
- if (record != null)
- record.rssi = 0;
+ stop_link();
+ if (worked) {
+ if (remote)
+ state.set_rssi(link.rssi(), 0);
+ listener_state.battery = link.monitor_battery();
}
}
-
}
public void set_frequency(double in_frequency) {
link.abort_reply();
}
- public void post_state() {
- listener.update(state, listener_state);
- }
-
public void abort() {
if (isAlive()) {
interrupt();
}
public void run() {
+ AltosState state = new AltosState();
try {
- for (;;) {
+ while (!link.has_error) {
try {
- update_state();
- post_state();
+ link.config_data();
+ update_state(state);
+ listener.update(state, listener_state);
} catch (TimeoutException te) {
}
Thread.sleep(1000);
}
} catch (InterruptedException ie) {
- link.close();
}
+ link.close();
}
public AltosIdleMonitor(AltosIdleMonitorListener in_listener, AltosLink in_link, boolean in_remote)
listener = in_listener;
link = in_link;
remote = in_remote;
- state = null;
listener_state = new AltosListenerState();
+ fetch = new AltosIdleFetch(link);
}
}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public interface AltosIdleMonitorListener {
public void update(AltosState state, AltosListenerState listener_state);
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.concurrent.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.util.*;
import java.io.*;
public static final int AO_LOG_SOFTWARE_VERSION = 9999;
+ public final static int MISSING = 0x7fffffff;
+
/* Added to flag invalid records */
public static final int AO_LOG_INVALID = -1;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosLine {
public String line;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.concurrent.*;
public static boolean debug = false;
public static void set_debug(boolean in_debug) { debug = in_debug; }
+
+ public boolean has_error;
+
LinkedList<String> pending_output = new LinkedList<String>();
public LinkedList<LinkedBlockingQueue<AltosLine>> monitors = new LinkedList<LinkedBlockingQueue<AltosLine>> ();;
if (c == ERROR) {
if (debug)
System.out.printf("ERROR\n");
+ has_error = true;
add_telem (new AltosLine());
add_reply (new AltosLine());
break;
}
public double monitor_battery() {
- int monitor_batt = AltosRecord.MISSING;
+ int monitor_batt = AltosLib.MISSING;
if (config_data.has_monitor_battery()) {
try {
} catch (TimeoutException te) {
}
}
- if (monitor_batt == AltosRecord.MISSING)
- return AltosRecord.MISSING;
+ if (monitor_batt == AltosLib.MISSING)
+ return AltosLib.MISSING;
return AltosConvert.cc_battery_to_voltage(monitor_batt);
}
public AltosLink() {
callsign = "";
+ has_error = false;
}
}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosListenerState {
public int crc_errors;
public AltosListenerState() {
crc_errors = 0;
- battery = AltosRecord.MISSING;
+ battery = AltosLib.MISSING;
}
}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.text.ParseException;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
+
+import java.util.concurrent.*;
public class AltosMag implements Cloneable {
public int x;
public int y;
public int z;
+ public boolean parse_string(String line) {
+ if (!line.startsWith("X:"))
+ return false;
+
+ String[] items = line.split("\\s+");
+
+ if (items.length >= 6) {
+ x = Integer.parseInt(items[1]);
+ y = Integer.parseInt(items[3]);
+ z = Integer.parseInt(items[5]);
+ }
+ return true;
+ }
+
public AltosMag clone() {
AltosMag n = new AltosMag();
n.z = z;
return n;
}
+
+ public AltosMag() {
+ x = AltosLib.MISSING;
+ y = AltosLib.MISSING;
+ z = AltosLib.MISSING;
+ }
+
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ try {
+ AltosMag mag = new AltosMag(link);
+
+ if (mag != null)
+ state.set_mag(mag);
+ } catch (TimeoutException te) {
+ } catch (InterruptedException ie) {
+ }
+ }
+
+ public AltosMag(AltosLink link) throws InterruptedException, TimeoutException {
+ this();
+ link.printf("M\n");
+ for (;;) {
+ String line = link.get_reply_no_dialog(5000);
+ if (line == null) {
+ throw new TimeoutException();
+ }
+ if (parse_string(line))
+ break;
+ }
+ }
}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright © 2012 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altoslib_2;
+
+import java.util.concurrent.*;
+
+public class AltosMma655x implements Cloneable {
+
+ int accel;
+
+ public boolean parse_line(String line) {
+ String[] items = line.split("\\s+");
+ if (line.startsWith("MMA655X value:")) {
+ if (items.length >= 3)
+ accel = Integer.parseInt(items[1]);
+ } else
+ return false;
+ return true;
+ }
+
+ public AltosMma655x() {
+ accel = AltosLib.MISSING;
+ }
+
+ public AltosMma655x clone() {
+ AltosMma655x n = new AltosMma655x();
+
+ n.accel = accel;
+ return n;
+ }
+
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ try {
+ AltosMma655x mma655x = new AltosMma655x(link);
+
+ if (mma655x != null)
+ state.set_accel(mma655x.accel);
+ } catch (TimeoutException te) {
+ } catch (InterruptedException ie) {
+ }
+ }
+
+ public AltosMma655x(AltosLink link) throws InterruptedException, TimeoutException {
+ this();
+ link.printf("A\n");
+ for (;;) {
+ String line = link.get_reply_no_dialog(5000);
+ if (line == null)
+ throw new TimeoutException();
+ if (!parse_line(line))
+ break;
+ }
+ }
+}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
+
+import java.util.concurrent.*;
public class AltosMs5607 {
public int reserved;
}
public boolean parse_line(String line) {
+ System.out.printf ("parse %s\n", line);
String[] items = line.split("\\s+");
if (line.startsWith("Pressure:")) {
- if (items.length >= 2)
+ if (items.length >= 2) {
raw_pres = Integer.parseInt(items[1]);
+ System.out.printf ("raw_pres %d\n", raw_pres);
+ }
} else if (line.startsWith("Temperature:")) {
if (items.length >= 2)
raw_temp = Integer.parseInt(items[1]);
if (items.length >= 3)
reserved = Integer.parseInt(items[2]);
} else if (line.startsWith("ms5607 sens:")) {
- if (items.length >= 3)
+ System.out.printf ("found sens length %d\n", items.length);
+ if (items.length >= 3) {
sens = Integer.parseInt(items[2]);
+ System.out.printf ("sens %d\n", sens);
+ }
} else if (line.startsWith("ms5607 off:")) {
if (items.length >= 3)
off = Integer.parseInt(items[2]);
} else if (line.startsWith("ms5607 crc:")) {
if (items.length >= 3)
crc = Integer.parseInt(items[2]);
- } else if (line.startsWith("Altitude"))
+ } else if (line.startsWith("Altitude:")) {
return false;
+ }
return true;
}
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ try {
+ AltosMs5607 ms5607 = new AltosMs5607(link);
+
+ if (ms5607 != null) {
+ state.set_ms5607(ms5607);
+ return;
+ }
+ } catch (TimeoutException te) {
+ } catch (InterruptedException ie) {
+ }
+ }
+
public AltosMs5607() {
- raw_pres = AltosRecord.MISSING;
- raw_temp = AltosRecord.MISSING;
- pa = AltosRecord.MISSING;
- cc = AltosRecord.MISSING;
+ raw_pres = AltosLib.MISSING;
+ raw_temp = AltosLib.MISSING;
+ pa = AltosLib.MISSING;
+ cc = AltosLib.MISSING;
+ }
+
+ public AltosMs5607 (AltosLink link) throws InterruptedException, TimeoutException {
+ this();
+ link.printf("c s\nB\n");
+ for (;;) {
+ String line = link.get_reply_no_dialog(5000);
+ if (line == null) {
+ throw new TimeoutException();
+ }
+ if (!parse_line(line)) {
+ System.out.printf ("stop parsing at %s\n", line);
+ break;
+ }
+ }
+ System.out.printf ("sens %d off %d tcs %d tco %d tref %d tempsens %d crc %d pres %d temp %d\n",
+ sens, off, tcs, tco, tref, tempsens, crc, raw_pres, raw_temp);
+ convert();
+ System.out.printf ("pa %d cc %d\n", pa, cc);
}
}
+++ /dev/null
-/*
- * Copyright © 2012 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-import java.util.concurrent.TimeoutException;
-
-class AltosMs5607Query extends AltosMs5607 {
- public AltosMs5607Query (AltosLink link) throws InterruptedException, TimeoutException {
- link.printf("v\nB\n");
- for (;;) {
- String line = link.get_reply_no_dialog(5000);
- if (line == null) {
- throw new TimeoutException();
- }
- if (!parse_line(line))
- break;
- }
- convert();
- }
-}
-
+++ /dev/null
-/*
- * Copyright © 2010 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-import java.text.ParseException;
-
-/*
- * AltosRecords with an index field so they can be sorted by tick while preserving
- * the original ordering for elements with matching ticks
- */
-class AltosOrderedMegaRecord extends AltosEepromMega implements Comparable<AltosOrderedMegaRecord> {
-
- public int index;
-
- public AltosOrderedMegaRecord(String line, int in_index, int prev_tick, boolean prev_tick_valid)
- throws ParseException {
- super(line);
- if (prev_tick_valid) {
- tick |= (prev_tick & ~0xffff);
- if (tick < prev_tick) {
- if (prev_tick - tick > 0x8000)
- tick += 0x10000;
- } else {
- if (tick - prev_tick > 0x8000)
- tick -= 0x10000;
- }
- }
- index = in_index;
- }
-
- public int compareTo(AltosOrderedMegaRecord o) {
- int tick_diff = tick - o.tick;
- if (tick_diff != 0)
- return tick_diff;
- return index - o.index;
- }
-}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.text.ParseException;
+++ /dev/null
-/*
- * Copyright © 2010 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-import java.text.ParseException;
-
-/*
- * AltosRecords with an index field so they can be sorted by tick while preserving
- * the original ordering for elements with matching ticks
- */
-class AltosOrderedMiniRecord extends AltosEepromMini implements Comparable<AltosOrderedMiniRecord> {
-
- public int index;
-
- public AltosOrderedMiniRecord(String line, int in_index, int prev_tick, boolean prev_tick_valid)
- throws ParseException {
- super(line);
- if (prev_tick_valid) {
- tick |= (prev_tick & ~0xffff);
- if (tick < prev_tick) {
- if (prev_tick - tick > 0x8000)
- tick += 0x10000;
- } else {
- if (tick - prev_tick > 0x8000)
- tick -= 0x10000;
- }
- }
- index = in_index;
- }
-
- public int compareTo(AltosOrderedMiniRecord o) {
- int tick_diff = tick - o.tick;
- if (tick_diff != 0)
- return tick_diff;
- return index - o.index;
- }
-}
+++ /dev/null
-/*
- * Copyright © 2010 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-import java.text.ParseException;
-
-/*
- * AltosRecords with an index field so they can be sorted by tick while preserving
- * the original ordering for elements with matching ticks
- */
-class AltosOrderedRecord extends AltosEepromRecord implements Comparable<AltosOrderedRecord> {
-
- public int index;
-
- public AltosOrderedRecord(String line, int in_index, int prev_tick, boolean prev_tick_valid)
- throws ParseException {
- super(line);
- if (prev_tick_valid) {
- tick |= (prev_tick & ~0xffff);
- if (tick < prev_tick) {
- if (prev_tick - tick > 0x8000)
- tick += 0x10000;
- } else {
- if (tick - prev_tick > 0x8000)
- tick -= 0x10000;
- }
- }
- index = in_index;
- }
-
- public AltosOrderedRecord(int in_cmd, int in_tick, int in_a, int in_b, int in_index) {
- super(in_cmd, in_tick, in_a, in_b);
- index = in_index;
- }
-
- public String toString() {
- return String.format("%d.%d %04x %04x %04x",
- cmd, index, tick, a, b);
- }
-
- public int compareTo(AltosOrderedRecord o) {
- int tick_diff = tick - o.tick;
- if (tick_diff != 0)
- return tick_diff;
- return index - o.index;
- }
-}
-
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.text.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.File;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.util.*;
import java.text.*;
+++ /dev/null
-/*
- * Copyright © 2010 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-public class AltosRecord implements Comparable <AltosRecord>, Cloneable {
-
- public static final int seen_flight = 1;
- public static final int seen_sensor = 2;
- public static final int seen_temp_volt = 4;
- public static final int seen_deploy = 8;
- public static final int seen_gps_time = 16;
- public static final int seen_gps_lat = 32;
- public static final int seen_gps_lon = 64;
- public static final int seen_companion = 128;
-
- public int seen;
-
- public final static int MISSING = 0x7fffffff;
-
- /* Every AltosRecord implementation provides these fields */
-
- public int version;
- public String callsign;
- public int serial;
- public int flight;
- public int rssi;
- public int status;
- public int state;
- public int tick;
-
- public AltosGPS gps;
- public int gps_sequence;
-
- public double time; /* seconds since boost */
-
- public int device_type;
- public int config_major;
- public int config_minor;
- public int apogee_delay;
- public int main_deploy;
- public int flight_log_max;
- public String firmware_version;
-
- public double accel_plus_g, accel_minus_g;
- public double ground_accel;
- public double accel;
-
- public AltosRecordCompanion companion;
-
- /* Telemetry sources have these values recorded from the flight computer */
- public double kalman_height;
- public double kalman_speed;
- public double kalman_acceleration;
-
- /*
- * Abstract methods that convert record data
- * to standard units:
- *
- * pressure: Pa
- * voltage: V
- * acceleration: m/s²
- * speed: m/s
- * height: m
- * temperature: °C
- */
-
- public double pressure() { return MISSING; }
- public double ground_pressure() { return MISSING; }
- public double acceleration() { return MISSING; }
-
- public double altitude() {
- double p = pressure();
-
- if (p == MISSING)
- return MISSING;
- return AltosConvert.pressure_to_altitude(p);
- }
-
- public double ground_altitude() {
- double p = ground_pressure();
-
- if (p == MISSING)
- return MISSING;
- return AltosConvert.pressure_to_altitude(p);
- }
-
- public double height() {
- double g = ground_altitude();
- double a = altitude();
-
- if (g == MISSING)
- return MISSING;
- if (a == MISSING)
- return MISSING;
- return a - g;
- }
-
- public double battery_voltage() { return MISSING; }
-
- public double main_voltage() { return MISSING; }
-
- public double drogue_voltage() { return MISSING; }
-
- public double temperature() { return MISSING; }
-
- public AltosIMU imu() { return null; }
-
- public AltosMag mag() { return null; }
-
- public String state() {
- return AltosLib.state_name(state);
- }
-
- public int compareTo(AltosRecord o) {
- return tick - o.tick;
- }
-
- public AltosRecord clone() {
- AltosRecord n = new AltosRecord();
- n.copy(this);
- return n;
- }
-
- public void copy(AltosRecord old) {
- seen = old.seen;
- version = old.version;
- callsign = old.callsign;
- serial = old.serial;
- flight = old.flight;
- rssi = old.rssi;
- status = old.status;
- state = old.state;
- tick = old.tick;
- gps = new AltosGPS(old.gps);
- gps_sequence = old.gps_sequence;
- companion = old.companion;
- kalman_acceleration = old.kalman_acceleration;
- kalman_speed = old.kalman_speed;
- kalman_height = old.kalman_height;
- }
-
- public AltosRecord() {
- seen = 0;
- version = 0;
- callsign = "N0CALL";
- serial = MISSING;
- flight = MISSING;
- rssi = 0;
- status = 0;
- state = AltosLib.ao_flight_startup;
- tick = 0;
- gps = null;
- gps_sequence = 0;
- companion = null;
-
- kalman_acceleration = MISSING;
- kalman_speed = MISSING;
- kalman_height = MISSING;
-
- accel_plus_g = MISSING;
- accel_minus_g = MISSING;
-
- }
-}
+++ /dev/null
-/*
- * Copyright © 2011 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-public class AltosRecordCompanion {
- public final static int board_id_telescience = 0x0a;
- public final static int MAX_CHANNELS = 12;
-
- public int tick;
- public int board_id;
- public int update_period;
- public int channels;
- public int[] companion_data;
-
- public AltosRecordCompanion(int in_channels) {
- channels = in_channels;
- if (channels < 0)
- channels = 0;
- if (channels > MAX_CHANNELS)
- channels = MAX_CHANNELS;
- companion_data = new int[channels];
- }
-}
+++ /dev/null
-/*
- * Copyright © 2010 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-import java.io.*;
-import java.util.*;
-
-public abstract class AltosRecordIterable implements Iterable<AltosRecord> {
- public abstract Iterator<AltosRecord> iterator();
- public void write_comments(PrintStream out) { }
- public boolean has_accel() { return false; }
- public boolean has_gps() { return false; }
- public boolean has_ignite() { return false; };
-}
+++ /dev/null
-/*
- * Copyright © 2012 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-public class AltosRecordMM extends AltosRecord {
-
- /* Sensor values */
- public int accel;
- public int pres;
- public int temp;
-
- public int v_batt;
- public int v_pyro;
- public int sense[];
-
- public int ground_accel;
- public int ground_pres;
- public int accel_plus_g;
- public int accel_minus_g;
-
- public int flight_accel;
- public int flight_vel;
- public int flight_pres;
-
- public final static int num_sense = 6;
-
- public AltosIMU imu;
- public AltosMag mag;
-
- static double adc(int raw) {
- return raw / 4095.0;
- }
-
- public double pressure() {
- if (pres != MISSING)
- return pres;
- return MISSING;
- }
-
- public double ground_pressure() {
- if (ground_pres != MISSING)
- return ground_pres;
- return MISSING;
- }
-
- public double battery_voltage() {
- if (v_batt != MISSING)
- return 3.3 * adc(v_batt) * (15.0 + 27.0) / 27.0;
- return MISSING;
- }
-
- static double pyro(int raw) {
- if (raw != MISSING)
- return 3.3 * adc(raw) * (100.0 + 27.0) / 27.0;
- return MISSING;
- }
-
- public double main_voltage() {
- return pyro(sense[5]);
- }
-
- public double drogue_voltage() {
- return pyro(sense[4]);
- }
-
- public double temperature() {
- if (temp != MISSING)
- return temp / 100.0;
- return MISSING;
- }
-
- public AltosIMU imu() { return imu; }
-
- public AltosMag mag() { return mag; }
-
- double accel_counts_per_mss() {
- double counts_per_g = Math.abs(accel_minus_g - accel_plus_g) / 2;
-
- return counts_per_g / 9.80665;
- }
-
- public double acceleration() {
- if (ground_accel == MISSING || accel == MISSING)
- return MISSING;
-
- if (accel_minus_g == MISSING || accel_plus_g == MISSING)
- return MISSING;
-
- return (ground_accel - accel) / accel_counts_per_mss();
- }
-
- public void copy (AltosRecordMM old) {
- super.copy(old);
-
- accel = old.accel;
- pres = old.pres;
- temp = old.temp;
-
- v_batt = old.v_batt;
- v_pyro = old.v_pyro;
- sense = new int[num_sense];
-
- for (int i = 0; i < num_sense; i++)
- sense[i] = old.sense[i];
-
- ground_accel = old.ground_accel;
- ground_pres = old.ground_pres;
- accel_plus_g = old.accel_plus_g;
- accel_minus_g = old.accel_minus_g;
-
- flight_accel = old.flight_accel;
- flight_vel = old.flight_vel;
- flight_pres = old.flight_pres;
-
- imu = old.imu;
- mag = old.mag;
- }
-
-
-
- public AltosRecordMM clone() {
- return new AltosRecordMM(this);
- }
-
- void make_missing() {
-
- accel = MISSING;
- pres = MISSING;
- temp = MISSING;
-
- v_batt = MISSING;
- v_pyro = MISSING;
- sense = new int[num_sense];
- for (int i = 0; i < num_sense; i++)
- sense[i] = MISSING;
-
- ground_accel = MISSING;
- ground_pres = MISSING;
- accel_plus_g = MISSING;
- accel_minus_g = MISSING;
-
- flight_accel = 0;
- flight_vel = 0;
- flight_pres = 0;
-
- imu = new AltosIMU();
- mag = new AltosMag();
- }
-
- public AltosRecordMM(AltosRecord old) {
- super.copy(old);
- make_missing();
- }
-
- public AltosRecordMM(AltosRecordMM old) {
- copy(old);
- }
-
- public AltosRecordMM() {
- super();
- make_missing();
- }
-}
+++ /dev/null
-/*
- * Copyright © 2012 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-public class AltosRecordMini extends AltosRecord {
-
- /* Sensor values */
- public int pres;
- public int temp;
-
- public int sense_a;
- public int sense_m;
- public int v_batt;
-
- public int ground_pres;
-
- public int flight_accel;
- public int flight_vel;
- public int flight_height;
-
- public int flight_pres;
-
- static double adc(int raw) {
- return raw / 4095.0;
- }
-
- public double pressure() {
- if (pres != MISSING)
- return pres;
- return MISSING;
- }
-
- public double temperature() {
- if (temp != MISSING)
- return temp;
- return MISSING;
- }
-
- public double ground_pressure() {
- if (ground_pres != MISSING)
- return ground_pres;
- return MISSING;
- }
-
- public double battery_voltage() {
- if (v_batt != MISSING)
- return 3.3 * adc(v_batt) * (15.0 + 27.0) / 27.0;
- return MISSING;
- }
-
- static double pyro(int raw) {
- if (raw != MISSING)
- return 3.3 * adc(raw) * (100.0 + 27.0) / 27.0;
- return MISSING;
- }
-
- public double main_voltage() {
- return pyro(sense_m);
- }
-
- public double apogee_voltage() {
- return pyro(sense_a);
- }
-
- public void copy (AltosRecordMini old) {
- super.copy(old);
-
- pres = old.pres;
- temp = old.temp;
-
- sense_a = old.sense_a;
- sense_m = old.sense_m;
- v_batt = old.v_batt;
-
- ground_pres = old.ground_pres;
-
- flight_accel = old.flight_accel;
- flight_vel = old.flight_vel;
- flight_height = old.flight_height;
- flight_pres = old.flight_pres;
- }
-
-
-
- public AltosRecordMini clone() {
- return new AltosRecordMini(this);
- }
-
- void make_missing() {
-
- pres = MISSING;
-
- sense_a = MISSING;
- sense_m = MISSING;
- v_batt = MISSING;
-
- ground_pres = MISSING;
-
- flight_accel = 0;
- flight_vel = 0;
- flight_height = 0;
- flight_pres = 0;
- }
-
- public AltosRecordMini(AltosRecord old) {
- super.copy(old);
- make_missing();
- }
-
- public AltosRecordMini(AltosRecordMini old) {
- copy(old);
- }
-
- public AltosRecordMini() {
- super();
- make_missing();
- }
-}
+++ /dev/null
-/*
- * Copyright © 2012 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-public class AltosRecordNone extends AltosRecord {
-
- public double pressure() { return MISSING; }
- public double ground_pressure() { return MISSING; }
- public double temperature() { return MISSING; }
- public double acceleration() { return MISSING; }
-
- public AltosRecordNone(AltosRecord old) {
- super.copy(old);
- }
-
- public AltosRecordNone clone() {
- return new AltosRecordNone(this);
- }
-
- public AltosRecordNone() {
- super();
- }
-}
+++ /dev/null
-/*
- * Copyright © 2012 Keith Packard <keithp@keithp.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package org.altusmetrum.altoslib_1;
-
-public class AltosRecordTM extends AltosRecord {
-
- /* Sensor values */
- public int accel;
- public int pres;
- public int temp;
- public int batt;
- public int drogue;
- public int main;
-
- public int ground_accel;
- public int ground_pres;
- public int accel_plus_g;
- public int accel_minus_g;
-
- public int flight_accel;
- public int flight_vel;
- public int flight_pres;
-
- /*
- * Values for our MP3H6115A pressure sensor
- *
- * From the data sheet:
- *
- * Pressure range: 15-115 kPa
- * Voltage at 115kPa: 2.82
- * Output scale: 27mV/kPa
- *
- *
- * 27 mV/kPa * 2047 / 3300 counts/mV = 16.75 counts/kPa
- * 2.82V * 2047 / 3.3 counts/V = 1749 counts/115 kPa
- */
-
- static final double counts_per_kPa = 27 * 2047 / 3300;
- static final double counts_at_101_3kPa = 1674.0;
-
- static double
- barometer_to_pressure(double count)
- {
- return ((count / 16.0) / 2047.0 + 0.095) / 0.009 * 1000.0;
- }
-
- public double pressure() {
- if (pres == MISSING)
- return MISSING;
- return barometer_to_pressure(pres);
- }
-
- public double ground_pressure() {
- if (ground_pres == MISSING)
- return MISSING;
- return barometer_to_pressure(ground_pres);
- }
-
- public double battery_voltage() {
- if (batt == MISSING)
- return MISSING;
- return AltosConvert.cc_battery_to_voltage(batt);
- }
-
- public double main_voltage() {
- if (main == MISSING)
- return MISSING;
- return AltosConvert.cc_ignitor_to_voltage(main);
- }
-
- public double drogue_voltage() {
- if (drogue == MISSING)
- return MISSING;
- return AltosConvert.cc_ignitor_to_voltage(drogue);
- }
-
- /* Value for the CC1111 built-in temperature sensor
- * Output voltage at 0°C = 0.755V
- * Coefficient = 0.00247V/°C
- * Reference voltage = 1.25V
- *
- * temp = ((value / 32767) * 1.25 - 0.755) / 0.00247
- * = (value - 19791.268) / 32768 * 1.25 / 0.00247
- */
-
- static double
- thermometer_to_temperature(double thermo)
- {
- return (thermo - 19791.268) / 32728.0 * 1.25 / 0.00247;
- }
-
- public double temperature() {
- if (temp == MISSING)
- return MISSING;
- return thermometer_to_temperature(temp);
- }
-
- double accel_counts_per_mss() {
- double counts_per_g = Math.abs(accel_minus_g - accel_plus_g) / 2;
-
- return counts_per_g / 9.80665;
- }
-
- public double acceleration() {
- if (ground_accel == MISSING || accel == MISSING)
- return MISSING;
- return (ground_accel - accel) / accel_counts_per_mss();
- }
-
- public void copy(AltosRecordTM old) {
- super.copy(old);
-
- version = old.version;
- callsign = old.callsign;
- serial = old.serial;
- flight = old.flight;
- rssi = old.rssi;
- status = old.status;
- state = old.state;
- tick = old.tick;
- accel = old.accel;
- pres = old.pres;
- temp = old.temp;
- batt = old.batt;
- drogue = old.drogue;
- main = old.main;
- flight_accel = old.flight_accel;
- ground_accel = old.ground_accel;
- flight_vel = old.flight_vel;
- flight_pres = old.flight_pres;
- ground_pres = old.ground_pres;
- accel_plus_g = old.accel_plus_g;
- accel_minus_g = old.accel_minus_g;
- }
-
- public AltosRecordTM clone() {
- return new AltosRecordTM(this);
- }
-
- void make_missing() {
- accel = MISSING;
- pres = MISSING;
- temp = MISSING;
- batt = MISSING;
- drogue = MISSING;
- main = MISSING;
-
- flight_accel = MISSING;
- flight_vel = MISSING;
- flight_pres = MISSING;
-
- ground_accel = MISSING;
- ground_pres = MISSING;
- accel_plus_g = MISSING;
- accel_minus_g = MISSING;
- }
-
- public AltosRecordTM(AltosRecord old) {
- super.copy(old);
- make_missing();
- }
-
- public AltosRecordTM(AltosRecordTM old) {
- copy(old);
- }
-
- public AltosRecordTM() {
- super();
- make_missing();
- }
-}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosRecordTM2 extends AltosRecord {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
--- /dev/null
+/*
+ * Copyright © 2012 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altoslib_2;
+
+import java.util.concurrent.TimeoutException;
+
+public class AltosSensorEMini {
+ public int tick;
+ public int apogee;
+ public int main;
+ public int batt;
+
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ try {
+ AltosSensorEMini sensor_emini = new AltosSensorEMini(link);
+
+ if (sensor_emini == null)
+ return;
+ state.set_battery_voltage(AltosConvert.easy_mini_voltage(sensor_emini.batt));
+ state.set_apogee_voltage(AltosConvert.easy_mini_voltage(sensor_emini.apogee));
+ state.set_main_voltage(AltosConvert.easy_mini_voltage(sensor_emini.main));
+
+ } catch (TimeoutException te) {
+ } catch (InterruptedException ie) {
+ }
+ }
+
+ public AltosSensorEMini(AltosLink link) throws InterruptedException, TimeoutException {
+ String[] items = link.adc();
+ for (int i = 0; i < items.length;) {
+ if (items[i].equals("tick:")) {
+ tick = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("apogee:")) {
+ apogee = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("main:")) {
+ main = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("batt:")) {
+ batt = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ i++;
+ }
+ }
+}
+
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.util.concurrent.TimeoutException;
--- /dev/null
+/*
+ * Copyright © 2013 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altoslib_2;
+
+import java.util.concurrent.TimeoutException;
+
+class AltosSensorMega {
+ int tick;
+ int[] sense;
+ int v_batt;
+ int v_pbatt;
+ int temp;
+
+ public AltosSensorMega() {
+ sense = new int[6];
+ }
+
+ public AltosSensorMega(AltosLink link) throws InterruptedException, TimeoutException {
+ this();
+ String[] items = link.adc();
+ for (int i = 0; i < items.length;) {
+ if (items[i].equals("tick:")) {
+ tick = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("A:")) {
+ sense[0] = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("B:")) {
+ sense[1] = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("C:")) {
+ sense[2] = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("D:")) {
+ sense[3] = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("drogue:")) {
+ sense[4] = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("main:")) {
+ sense[5] = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("batt:")) {
+ v_batt = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("pbatt:")) {
+ v_pbatt = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ if (items[i].equals("temp:")) {
+ temp = Integer.parseInt(items[i+1]);
+ i += 2;
+ continue;
+ }
+ i++;
+ }
+ }
+
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ try {
+ AltosSensorMega sensor_mega = new AltosSensorMega(link);
+
+ state.set_battery_voltage(AltosConvert.mega_battery_voltage(sensor_mega.v_batt));
+ state.set_apogee_voltage(AltosConvert.mega_pyro_voltage(sensor_mega.sense[4]));
+ state.set_main_voltage(AltosConvert.mega_pyro_voltage(sensor_mega.sense[5]));
+
+ double[] ignitor_voltage = new double[4];
+ for (int i = 0; i < 4; i++)
+ ignitor_voltage[i] = AltosConvert.mega_pyro_voltage(sensor_mega.sense[i]);
+ state.set_ignitor_voltage(ignitor_voltage);
+
+ } catch (TimeoutException te) {
+ } catch (InterruptedException ie) {
+ }
+ }
+}
+
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.util.concurrent.TimeoutException;
i++;
}
}
+
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ try {
+ AltosSensorMetrum sensor_metrum = new AltosSensorMetrum(link);
+ state.set_battery_voltage(AltosConvert.mega_battery_voltage(sensor_metrum.v_batt));
+ state.set_apogee_voltage(AltosConvert.mega_pyro_voltage(sensor_metrum.sense_a));
+ state.set_main_voltage(AltosConvert.mega_pyro_voltage(sensor_metrum.sense_m));
+ } catch (TimeoutException te) {
+ } catch (InterruptedException ie) {
+ }
+ }
}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.util.concurrent.TimeoutException;
-class AltosSensorTM extends AltosRecordTM {
+public class AltosSensorTM {
+ public int tick;
+ public int accel;
+ public int pres;
+ public int temp;
+ public int batt;
+ public int drogue;
+ public int main;
- public AltosSensorTM(AltosLink link, AltosConfigData config_data) throws InterruptedException, TimeoutException {
- super();
+ static public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) {
+ try {
+ AltosSensorTM sensor_tm = new AltosSensorTM(link);
+
+ if (sensor_tm == null)
+ return;
+ state.set_accel(sensor_tm.accel);
+ state.set_pressure(AltosConvert.barometer_to_pressure(sensor_tm.pres));
+ state.set_temperature(AltosConvert.thermometer_to_temperature(sensor_tm.temp));
+ state.set_battery_voltage(AltosConvert.cc_battery_to_voltage(sensor_tm.batt));
+ state.set_apogee_voltage(AltosConvert.cc_ignitor_to_voltage(sensor_tm.drogue));
+ state.set_main_voltage(AltosConvert.cc_ignitor_to_voltage(sensor_tm.main));
+
+ } catch (TimeoutException te) {
+ } catch (InterruptedException ie) {
+ }
+ }
+
+ public AltosSensorTM(AltosLink link) throws InterruptedException, TimeoutException {
String[] items = link.adc();
for (int i = 0; i < items.length;) {
if (items[i].equals("tick:")) {
}
i++;
}
- ground_accel = config_data.accel_cal_plus;
- ground_pres = pres;
- accel_plus_g = config_data.accel_cal_plus;
- accel_minus_g = config_data.accel_cal_minus;
}
}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosSpeed extends AltosUnits {
* Track flight state from telemetry or eeprom data stream
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosState implements Cloneable {
- public AltosRecord record;
public static final int set_position = 1;
public static final int set_gps = 2;
private double max_rate = 1000.0;
void set(double new_value, double time) {
- if (new_value != AltosRecord.MISSING) {
+ if (new_value != AltosLib.MISSING) {
value = new_value;
- if (max_value == AltosRecord.MISSING || value > max_value) {
+ if (max_value == AltosLib.MISSING || value > max_value) {
max_value = value;
}
set_time = time;
}
void set_filtered(double new_value, double time) {
- if (prev_value != AltosRecord.MISSING)
+ if (prev_value != AltosLib.MISSING)
new_value = (prev_value * 15.0 + new_value) / 16.0;
set(new_value, time);
}
}
double change() {
- if (value != AltosRecord.MISSING && prev_value != AltosRecord.MISSING)
+ if (value != AltosLib.MISSING && prev_value != AltosLib.MISSING)
return value - prev_value;
- return AltosRecord.MISSING;
+ return AltosLib.MISSING;
}
double rate() {
double c = change();
double t = set_time - prev_set_time;
- if (c != AltosRecord.MISSING && t != 0)
+ if (c != AltosLib.MISSING && t != 0)
return c / t;
- return AltosRecord.MISSING;
+ return AltosLib.MISSING;
}
double integrate() {
- if (value == AltosRecord.MISSING)
- return AltosRecord.MISSING;
- if (prev_value == AltosRecord.MISSING)
- return AltosRecord.MISSING;
+ if (value == AltosLib.MISSING)
+ return AltosLib.MISSING;
+ if (prev_value == AltosLib.MISSING)
+ return AltosLib.MISSING;
return (value + prev_value) / 2 * (set_time - prev_set_time);
}
void set_derivative(AltosValue in) {
double n = in.rate();
- if (n == AltosRecord.MISSING)
+ if (n == AltosLib.MISSING)
return;
double p = prev_value;
double pt = prev_set_time;
- if (p == AltosRecord.MISSING) {
+ if (p == AltosLib.MISSING) {
p = 0;
pt = in.time() - 0.01;
}
void set_integral(AltosValue in) {
double change = in.integrate();
- if (change != AltosRecord.MISSING) {
+ if (change != AltosLib.MISSING) {
double prev = prev_value;
- if (prev == AltosRecord.MISSING)
+ if (prev == AltosLib.MISSING)
prev = 0;
set(prev + change, in.time());
}
max_value = old.max_value;
}
+ void finish_update() {
+ prev_value = value;
+ prev_set_time = set_time;
+ }
+
AltosValue() {
- value = AltosRecord.MISSING;
- prev_value = AltosRecord.MISSING;
- max_value = AltosRecord.MISSING;
+ value = AltosLib.MISSING;
+ prev_value = AltosLib.MISSING;
+ max_value = AltosLib.MISSING;
}
}
double value() {
double v = measured.value();
- if (v != AltosRecord.MISSING)
+ if (v != AltosLib.MISSING)
return v;
return computed.value();
}
boolean is_measured() {
- return measured.value() != AltosRecord.MISSING;
+ return measured.value() != AltosLib.MISSING;
}
double max() {
double m = measured.max();
- if (m != AltosRecord.MISSING)
+ if (m != AltosLib.MISSING)
return m;
return computed.max();
}
double prev_value() {
- if (measured.value != AltosRecord.MISSING && measured.prev_value != AltosRecord.MISSING)
+ if (measured.value != AltosLib.MISSING && measured.prev_value != AltosLib.MISSING)
return measured.prev_value;
return computed.prev_value;
}
AltosValue altos_value() {
- if (measured.value() != AltosRecord.MISSING)
+ if (measured.value() != AltosLib.MISSING)
return measured;
return computed;
}
double change() {
double c = measured.change();
- if (c == AltosRecord.MISSING)
+ if (c == AltosLib.MISSING)
c = computed.change();
return c;
}
double rate() {
double r = measured.rate();
- if (r == AltosRecord.MISSING)
+ if (r == AltosLib.MISSING)
r = computed.rate();
return r;
}
computed.copy(old.computed);
}
+ void finish_update() {
+ measured.finish_update();
+ computed.finish_update();
+ }
+
AltosCValue() {
measured = new AltosValue();
computed = new AltosValue();
public int flight_log_max;
private double pressure_to_altitude(double p) {
- if (p == AltosRecord.MISSING)
- return AltosRecord.MISSING;
+ if (p == AltosLib.MISSING)
+ return AltosLib.MISSING;
return AltosConvert.pressure_to_altitude(p);
}
public double altitude() {
double a = altitude.value();
- if (a != AltosRecord.MISSING)
+ if (a != AltosLib.MISSING)
return a;
if (gps != null)
return gps.alt;
- return AltosRecord.MISSING;
+ return AltosLib.MISSING;
}
public double max_altitude() {
double a = altitude.max();
- if (a != AltosRecord.MISSING)
+ if (a != AltosLib.MISSING)
return a;
- return AltosRecord.MISSING;
+ return AltosLib.MISSING;
}
public void set_altitude(double new_altitude) {
public double height() {
double k = kalman_height.value();
- if (k != AltosRecord.MISSING)
+ if (k != AltosLib.MISSING)
return k;
double a = altitude();
double g = ground_altitude();
- if (a != AltosRecord.MISSING && g != AltosRecord.MISSING)
+ if (a != AltosLib.MISSING && g != AltosLib.MISSING)
return a - g;
- return AltosRecord.MISSING;
+ return AltosLib.MISSING;
}
public double max_height() {
double k = kalman_height.max();
- if (k != AltosRecord.MISSING)
+ if (k != AltosLib.MISSING)
return k;
double a = altitude.max();
double g = ground_altitude();
- if (a != AltosRecord.MISSING && g != AltosRecord.MISSING)
+ if (a != AltosLib.MISSING && g != AltosLib.MISSING)
return a - g;
- return AltosRecord.MISSING;
+ return AltosLib.MISSING;
}
class AltosSpeed extends AltosCValue {
private AltosSpeed speed;
public double speed() {
+ double v = kalman_speed.value();
+ if (v != AltosLib.MISSING)
+ return v;
return speed.value();
}
public double max_speed() {
+ double v = kalman_speed.max();
+ if (v != AltosLib.MISSING)
+ return v;
return speed.max();
}
public AltosMs5607 baro;
- public AltosRecordCompanion companion;
+ public AltosCompanion companion;
public void set_npad(int npad) {
this.npad = npad;
}
public void init() {
- record = null;
-
set = 0;
received_time = System.currentTimeMillis();
- time = AltosRecord.MISSING;
- time_change = AltosRecord.MISSING;
- prev_time = AltosRecord.MISSING;
- tick = AltosRecord.MISSING;
- prev_tick = AltosRecord.MISSING;
- boost_tick = AltosRecord.MISSING;
+ time = AltosLib.MISSING;
+ time_change = AltosLib.MISSING;
+ prev_time = AltosLib.MISSING;
+ tick = AltosLib.MISSING;
+ prev_tick = AltosLib.MISSING;
+ boost_tick = AltosLib.MISSING;
state = AltosLib.ao_flight_invalid;
- flight = AltosRecord.MISSING;
+ flight = AltosLib.MISSING;
landed = false;
boost = false;
- rssi = AltosRecord.MISSING;
+ rssi = AltosLib.MISSING;
status = 0;
- device_type = AltosRecord.MISSING;
- config_major = AltosRecord.MISSING;
- config_minor = AltosRecord.MISSING;
- apogee_delay = AltosRecord.MISSING;
- main_deploy = AltosRecord.MISSING;
- flight_log_max = AltosRecord.MISSING;
+ device_type = AltosLib.MISSING;
+ config_major = AltosLib.MISSING;
+ config_minor = AltosLib.MISSING;
+ apogee_delay = AltosLib.MISSING;
+ main_deploy = AltosLib.MISSING;
+ flight_log_max = AltosLib.MISSING;
ground_altitude = new AltosCValue();
ground_pressure = new AltosGroundPressure();
speed = new AltosSpeed();
acceleration = new AltosAccel();
- temperature = AltosRecord.MISSING;
- battery_voltage = AltosRecord.MISSING;
- pyro_voltage = AltosRecord.MISSING;
- apogee_voltage = AltosRecord.MISSING;
- main_voltage = AltosRecord.MISSING;
+ temperature = AltosLib.MISSING;
+ battery_voltage = AltosLib.MISSING;
+ pyro_voltage = AltosLib.MISSING;
+ apogee_voltage = AltosLib.MISSING;
+ main_voltage = AltosLib.MISSING;
ignitor_voltage = null;
kalman_height = new AltosValue();
ngps = 0;
from_pad = null;
- elevation = AltosRecord.MISSING;
- range = AltosRecord.MISSING;
- gps_height = AltosRecord.MISSING;
+ elevation = AltosLib.MISSING;
+ range = AltosLib.MISSING;
+ gps_height = AltosLib.MISSING;
- pad_lat = AltosRecord.MISSING;
- pad_lon = AltosRecord.MISSING;
- pad_alt = AltosRecord.MISSING;
+ pad_lat = AltosLib.MISSING;
+ pad_lon = AltosLib.MISSING;
+ pad_alt = AltosLib.MISSING;
- speak_tick = AltosRecord.MISSING;
- speak_altitude = AltosRecord.MISSING;
+ speak_tick = AltosLib.MISSING;
+ speak_altitude = AltosLib.MISSING;
callsign = null;
- accel_plus_g = AltosRecord.MISSING;
- accel_minus_g = AltosRecord.MISSING;
- accel = AltosRecord.MISSING;
+ accel_plus_g = AltosLib.MISSING;
+ accel_minus_g = AltosLib.MISSING;
+ accel = AltosLib.MISSING;
- ground_accel = AltosRecord.MISSING;
- ground_accel_avg = AltosRecord.MISSING;
+ ground_accel = AltosLib.MISSING;
+ ground_accel_avg = AltosLib.MISSING;
- log_format = AltosRecord.MISSING;
- serial = AltosRecord.MISSING;
+ log_format = AltosLib.MISSING;
+ serial = AltosLib.MISSING;
baro = null;
companion = null;
}
- void copy(AltosState old) {
+ void finish_update() {
+ prev_tick = tick;
- record = null;
+ ground_altitude.finish_update();
+ altitude.finish_update();
+ pressure.finish_update();
+ speed.finish_update();
+ acceleration.finish_update();
+
+ kalman_height.finish_update();
+ kalman_speed.finish_update();
+ kalman_acceleration.finish_update();
+ }
+
+ void copy(AltosState old) {
if (old == null) {
init();
/* Track consecutive 'good' gps reports, waiting for 10 of them */
if (state == AltosLib.ao_flight_pad) {
set_npad(npad+1);
- if (pad_lat != AltosRecord.MISSING) {
+ if (pad_lat != AltosLib.MISSING) {
pad_lat = (pad_lat * 31 + gps.lat) / 32;
pad_lon = (pad_lon * 31 + gps.lon) / 32;
pad_alt = (pad_alt * 31 + gps.alt) / 32;
}
}
- if (pad_lat == AltosRecord.MISSING) {
+ if (pad_lat == AltosLib.MISSING) {
pad_lat = gps.lat;
pad_lon = gps.lon;
pad_alt = gps.alt;
}
}
if (gps.lat != 0 && gps.lon != 0 &&
- pad_lat != AltosRecord.MISSING &&
- pad_lon != AltosRecord.MISSING)
+ pad_lat != AltosLib.MISSING &&
+ pad_lon != AltosLib.MISSING)
{
double h = height();
- if (h == AltosRecord.MISSING)
+ if (h == AltosLib.MISSING)
h = 0;
from_pad = new AltosGreatCircle(pad_lat, pad_lon, 0, gps.lat, gps.lon, h);
elevation = from_pad.elevation;
}
public void set_tick(int new_tick) {
- if (new_tick != AltosRecord.MISSING) {
- if (prev_tick != AltosRecord.MISSING) {
- while (new_tick < prev_tick - 32767) {
+ if (new_tick != AltosLib.MISSING) {
+ if (prev_tick != AltosLib.MISSING) {
+ while (new_tick < prev_tick - 1000) {
new_tick += 65536;
}
}
}
public void set_boost_tick(int boost_tick) {
- if (boost_tick != AltosRecord.MISSING)
+ if (boost_tick != AltosLib.MISSING)
this.boost_tick = boost_tick;
}
public void set_flight(int flight) {
/* When the flight changes, reset the state */
- if (flight != AltosRecord.MISSING) {
- if (this.flight != AltosRecord.MISSING &&
+ if (flight != AltosLib.MISSING && flight != 0) {
+ if (this.flight != AltosLib.MISSING &&
this.flight != flight) {
init();
}
public void set_serial(int serial) {
/* When the serial changes, reset the state */
- if (serial != AltosRecord.MISSING) {
- if (this.serial != AltosRecord.MISSING &&
+ if (serial != AltosLib.MISSING) {
+ if (this.serial != AltosLib.MISSING &&
this.serial != serial) {
init();
}
}
public int rssi() {
- if (rssi == AltosRecord.MISSING)
+ if (rssi == AltosLib.MISSING)
return 0;
return rssi;
}
public void set_rssi(int rssi, int status) {
- if (rssi != AltosRecord.MISSING) {
+ if (rssi != AltosLib.MISSING) {
this.rssi = rssi;
this.status = status;
}
}
}
- public void make_baro() {
+ public void set_imu(AltosIMU imu) {
+ if (imu != null)
+ imu = imu.clone();
+ this.imu = imu;
+ }
+
+ public void set_mag(AltosMag mag) {
+ this.mag = mag.clone();
+ }
+
+ public AltosMs5607 make_baro() {
if (baro == null)
baro = new AltosMs5607();
+ return baro;
+ }
+
+ public void set_ms5607(AltosMs5607 ms5607) {
+ baro = ms5607;
+
+ if (baro != null) {
+ set_pressure(baro.pa);
+ set_temperature(baro.cc / 100.0);
+ }
}
public void set_ms5607(int pres, int temp) {
public void make_companion (int nchannels) {
if (companion == null)
- companion = new AltosRecordCompanion(nchannels);
+ companion = new AltosCompanion(nchannels);
}
- public void set_companion(AltosRecordCompanion companion) {
+ public void set_companion(AltosCompanion companion) {
this.companion = companion;
}
void update_accel() {
double ground = ground_accel;
- if (ground == AltosRecord.MISSING)
+ if (ground == AltosLib.MISSING)
ground = ground_accel_avg;
- if (accel == AltosRecord.MISSING)
+ if (accel == AltosLib.MISSING)
return;
- if (ground == AltosRecord.MISSING)
+ if (ground == AltosLib.MISSING)
return;
- if (accel_plus_g == AltosRecord.MISSING)
+ if (accel_plus_g == AltosLib.MISSING)
return;
- if (accel_minus_g == AltosRecord.MISSING)
+ if (accel_minus_g == AltosLib.MISSING)
return;
double counts_per_g = (accel_minus_g - accel_plus_g) / 2.0;
}
public void set_accel_g(double accel_plus_g, double accel_minus_g) {
- if (accel_plus_g != AltosRecord.MISSING) {
+ if (accel_plus_g != AltosLib.MISSING) {
this.accel_plus_g = accel_plus_g;
this.accel_minus_g = accel_minus_g;
update_accel();
}
public void set_ground_accel(double ground_accel) {
- if (ground_accel != AltosRecord.MISSING) {
+ if (ground_accel != AltosLib.MISSING) {
this.ground_accel = ground_accel;
update_accel();
}
}
public void set_accel(double accel) {
- if (accel != AltosRecord.MISSING) {
+ if (accel != AltosLib.MISSING) {
this.accel = accel;
if (state == AltosLib.ao_flight_pad) {
- if (ground_accel_avg == AltosRecord.MISSING)
+ if (ground_accel_avg == AltosLib.MISSING)
ground_accel_avg = accel;
else
ground_accel_avg = (ground_accel_avg * 7 + accel) / 8;
}
public void set_temperature(double temperature) {
- if (temperature != AltosRecord.MISSING) {
+ if (temperature != AltosLib.MISSING) {
this.temperature = temperature;
set |= set_data;
}
}
public void set_battery_voltage(double battery_voltage) {
- if (battery_voltage != AltosRecord.MISSING) {
+ if (battery_voltage != AltosLib.MISSING) {
this.battery_voltage = battery_voltage;
set |= set_data;
}
}
public void set_pyro_voltage(double pyro_voltage) {
- if (pyro_voltage != AltosRecord.MISSING) {
+ if (pyro_voltage != AltosLib.MISSING) {
this.pyro_voltage = pyro_voltage;
set |= set_data;
}
}
public void set_apogee_voltage(double apogee_voltage) {
- if (apogee_voltage != AltosRecord.MISSING) {
+ if (apogee_voltage != AltosLib.MISSING) {
this.apogee_voltage = apogee_voltage;
set |= set_data;
}
}
public void set_main_voltage(double main_voltage) {
- if (main_voltage != AltosRecord.MISSING) {
+ if (main_voltage != AltosLib.MISSING) {
this.main_voltage = main_voltage;
set |= set_data;
}
}
public double time_since_boost() {
- if (tick == AltosRecord.MISSING)
+ if (tick == AltosLib.MISSING)
return 0.0;
- if (boost_tick != AltosRecord.MISSING) {
+ if (boost_tick != AltosLib.MISSING) {
return (tick - boost_tick) / 100.0;
}
return tick / 100.0;
}
public boolean valid() {
- return tick != AltosRecord.MISSING && serial != AltosRecord.MISSING;
+ return tick != AltosLib.MISSING && serial != AltosLib.MISSING;
}
public AltosGPS make_temp_gps(boolean sats) {
return s;
}
-
- public void init (AltosRecord cur, AltosState prev_state) {
-
- System.out.printf ("init\n");
- if (cur == null)
- cur = new AltosRecord();
-
- record = cur;
-
- /* Discard previous state if it was for a different board */
- if (prev_state != null && prev_state.serial != cur.serial)
- prev_state = null;
-
- copy(prev_state);
-
- set_ground_altitude(cur.ground_altitude());
- set_altitude(cur.altitude());
-
- set_kalman(cur.kalman_height, cur.kalman_speed, cur.kalman_acceleration);
-
- received_time = System.currentTimeMillis();
-
- set_temperature(cur.temperature());
- set_apogee_voltage(cur.drogue_voltage());
- set_main_voltage(cur.main_voltage());
- set_battery_voltage(cur.battery_voltage());
-
- set_pressure(cur.pressure());
-
- set_tick(cur.tick);
- set_state(cur.state);
-
- set_accel_g (cur.accel_minus_g, cur.accel_plus_g);
- set_ground_accel(cur.ground_accel);
- set_accel (cur.accel);
-
- if (cur.gps_sequence != gps_sequence)
- set_gps(cur.gps, cur.gps_sequence);
-
- }
-
- public AltosState(AltosRecord cur) {
- init(cur, null);
- }
-
- public AltosState (AltosRecord cur, AltosState prev) {
- init(cur, prev);
- }
-
-
public AltosState () {
init();
}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public interface AltosStateUpdate {
public void update_state(AltosState state);
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.text.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryConfiguration extends AltosTelemetryStandard {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
/* Find boost tick */
AltosState state = start.clone();
- System.out.printf ("Searching for boost\n");
for (AltosTelemetry telem : telems) {
telem.update_state(state);
+ state.finish_update();
if (state.state != AltosLib.ao_flight_invalid && state.state >= AltosLib.ao_flight_boost) {
- System.out.printf ("boost tick %d\n", state.tick);
start.set_boost_tick(state.tick);
break;
}
}
- System.out.printf ("Found boost %d\n", start.boost_tick);
}
public Iterator<AltosState> iterator() {
while (i.hasNext() && !state.valid()) {
AltosTelemetry t = i.next();
t.update_state(state);
+ state.finish_update();
}
return new AltosTelemetryIterator(state, i);
}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.io.*;
import java.util.*;
import java.text.*;
+class AltosTelemetryOrdered implements Comparable<AltosTelemetryOrdered> {
+ AltosTelemetry telem;
+ int index;
+ int tick;
+
+ public int compareTo(AltosTelemetryOrdered o) {
+ int tick_diff = tick - o.tick;
+
+ if (tick_diff != 0)
+ return tick_diff;
+ return index - o.index;
+ }
+
+ AltosTelemetryOrdered (AltosTelemetry telem, int index, int tick) {
+ this.telem = telem;
+ this.index = index;
+ this.tick = tick;
+ }
+}
+
+class AltosTelemetryOrderedIterator implements Iterator<AltosTelemetry> {
+ TreeSet<AltosTelemetryOrdered> olist;
+ Iterator<AltosTelemetryOrdered> oiterator;
+
+ public AltosTelemetryOrderedIterator(Iterable<AltosTelemetry> telems) {
+ olist = new TreeSet<AltosTelemetryOrdered>();
+
+ int tick = 0;
+ int index = 0;
+ boolean first = true;
+
+ for (AltosTelemetry e : telems) {
+ int t = e.tick;
+ if (first)
+ tick = t;
+ else {
+ while (t < tick - 32767)
+ t += 65536;
+ tick = t;
+ }
+ olist.add(new AltosTelemetryOrdered(e, index++, tick));
+ first = false;
+ }
+
+ oiterator = olist.iterator();
+ }
+
+ public boolean hasNext() {
+ return oiterator.hasNext();
+ }
+
+ public AltosTelemetry next() {
+ return oiterator.next().telem;
+ }
+
+ public void remove () {
+ }
+}
+
public class AltosTelemetryIterable implements Iterable<AltosTelemetry> {
LinkedList<AltosTelemetry> telems;
public Iterator<AltosTelemetry> iterator () {
- return telems.iterator();
+ if (telems == null)
+ telems = new LinkedList<AltosTelemetry>();
+ return new AltosTelemetryOrderedIterator(telems);
}
public AltosTelemetryIterable (FileInputStream input) {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.text.*;
AltosTelemetryMap map = new AltosTelemetryMap(words, i);
callsign = map.get_string(AO_TELEM_CALL, "N0CALL");
- serial = map.get_int(AO_TELEM_SERIAL, AltosRecord.MISSING);
- flight = map.get_int(AO_TELEM_FLIGHT, AltosRecord.MISSING);
- rssi = map.get_int(AO_TELEM_RSSI, AltosRecord.MISSING);
+ serial = map.get_int(AO_TELEM_SERIAL, AltosLib.MISSING);
+ flight = map.get_int(AO_TELEM_FLIGHT, AltosLib.MISSING);
+ rssi = map.get_int(AO_TELEM_RSSI, AltosLib.MISSING);
state = AltosLib.state(map.get_string(AO_TELEM_STATE, "invalid"));
tick = map.get_int(AO_TELEM_TICK, 0);
/* raw sensor values */
- accel = map.get_int(AO_TELEM_RAW_ACCEL, AltosRecord.MISSING);
- pres = map.get_int(AO_TELEM_RAW_BARO, AltosRecord.MISSING);
- temp = map.get_int(AO_TELEM_RAW_THERMO, AltosRecord.MISSING);
- batt = map.get_int(AO_TELEM_RAW_BATT, AltosRecord.MISSING);
- apogee = map.get_int(AO_TELEM_RAW_DROGUE, AltosRecord.MISSING);
- main = map.get_int(AO_TELEM_RAW_MAIN, AltosRecord.MISSING);
+ accel = map.get_int(AO_TELEM_RAW_ACCEL, AltosLib.MISSING);
+ pres = map.get_int(AO_TELEM_RAW_BARO, AltosLib.MISSING);
+ temp = map.get_int(AO_TELEM_RAW_THERMO, AltosLib.MISSING);
+ batt = map.get_int(AO_TELEM_RAW_BATT, AltosLib.MISSING);
+ apogee = map.get_int(AO_TELEM_RAW_DROGUE, AltosLib.MISSING);
+ main = map.get_int(AO_TELEM_RAW_MAIN, AltosLib.MISSING);
/* sensor calibration information */
- ground_accel = map.get_int(AO_TELEM_CAL_ACCEL_GROUND, AltosRecord.MISSING);
- ground_pres = map.get_int(AO_TELEM_CAL_BARO_GROUND, AltosRecord.MISSING);
- accel_plus_g = map.get_int(AO_TELEM_CAL_ACCEL_PLUS, AltosRecord.MISSING);
- accel_minus_g = map.get_int(AO_TELEM_CAL_ACCEL_MINUS, AltosRecord.MISSING);
+ ground_accel = map.get_int(AO_TELEM_CAL_ACCEL_GROUND, AltosLib.MISSING);
+ ground_pres = map.get_int(AO_TELEM_CAL_BARO_GROUND, AltosLib.MISSING);
+ accel_plus_g = map.get_int(AO_TELEM_CAL_ACCEL_PLUS, AltosLib.MISSING);
+ accel_minus_g = map.get_int(AO_TELEM_CAL_ACCEL_MINUS, AltosLib.MISSING);
/* flight computer values */
- kalman_acceleration = map.get_double(AO_TELEM_KALMAN_ACCEL, AltosRecord.MISSING, 1/16.0);
- kalman_speed = map.get_double(AO_TELEM_KALMAN_SPEED, AltosRecord.MISSING, 1/16.0);
- kalman_height = map.get_int(AO_TELEM_KALMAN_HEIGHT, AltosRecord.MISSING);
+ kalman_acceleration = map.get_double(AO_TELEM_KALMAN_ACCEL, AltosLib.MISSING, 1/16.0);
+ kalman_speed = map.get_double(AO_TELEM_KALMAN_SPEED, AltosLib.MISSING, 1/16.0);
+ kalman_height = map.get_int(AO_TELEM_KALMAN_HEIGHT, AltosLib.MISSING);
- flight_accel = map.get_int(AO_TELEM_ADHOC_ACCEL, AltosRecord.MISSING);
- flight_vel = map.get_int(AO_TELEM_ADHOC_SPEED, AltosRecord.MISSING);
- flight_pres = map.get_int(AO_TELEM_ADHOC_BARO, AltosRecord.MISSING);
+ flight_accel = map.get_int(AO_TELEM_ADHOC_ACCEL, AltosLib.MISSING);
+ flight_vel = map.get_int(AO_TELEM_ADHOC_SPEED, AltosLib.MISSING);
+ flight_pres = map.get_int(AO_TELEM_ADHOC_BARO, AltosLib.MISSING);
if (map.has(AO_TELEM_GPS_STATE))
gps = new AltosGPS(map);
kalman_speed = ((short) flight_vel) / 16.0;
kalman_acceleration = flight_accel / 16.0;
kalman_height = flight_pres;
- flight_vel = AltosRecord.MISSING;
- flight_pres = AltosRecord.MISSING;
- flight_accel = AltosRecord.MISSING;
+ flight_vel = AltosLib.MISSING;
+ flight_pres = AltosLib.MISSING;
+ flight_accel = AltosLib.MISSING;
} else {
- kalman_speed = AltosRecord.MISSING;
- kalman_acceleration = AltosRecord.MISSING;
- kalman_height = AltosRecord.MISSING;
+ kalman_speed = AltosLib.MISSING;
+ kalman_acceleration = AltosLib.MISSING;
+ kalman_height = AltosLib.MISSING;
}
AltosParse.word(words[i++], "gp:");
kalman_acceleration = int16(5);
kalman_speed = int16(9);
kalman_height = int16(13);
- flight_accel = AltosRecord.MISSING;
- flight_vel = AltosRecord.MISSING;
- flight_pres = AltosRecord.MISSING;
+ flight_accel = AltosLib.MISSING;
+ flight_vel = AltosLib.MISSING;
+ flight_pres = AltosLib.MISSING;
} else {
flight_accel = int16(5);
flight_vel = uint32(9);
flight_pres = int16(13);
- kalman_acceleration = AltosRecord.MISSING;
- kalman_speed = AltosRecord.MISSING;
- kalman_height = AltosRecord.MISSING;
+ kalman_acceleration = AltosLib.MISSING;
+ kalman_speed = AltosLib.MISSING;
+ kalman_height = AltosLib.MISSING;
}
gps = null;
state.set_pressure(AltosConvert.barometer_to_pressure(pres));
state.set_accel_g(accel_plus_g, accel_minus_g);
state.set_accel(accel);
- if (kalman_height != AltosRecord.MISSING)
+ if (kalman_height != AltosLib.MISSING)
state.set_kalman(kalman_height, kalman_speed, kalman_acceleration);
state.set_temperature(AltosConvert.thermometer_to_temperature(temp));
state.set_battery_voltage(AltosConvert.cc_battery_to_voltage(batt));
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryLocation extends AltosTelemetryStandard {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.text.*;
import java.util.HashMap;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryMegaData extends AltosTelemetryStandard {
int state;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryMegaSensor extends AltosTelemetryStandard {
int accel;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryMetrumData extends AltosTelemetryStandard {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryMetrumSensor extends AltosTelemetryStandard {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryRaw extends AltosTelemetryStandard {
public AltosTelemetryRaw(int[] bytes) {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.text.*;
import java.io.*;
public class AltosTelemetryReader extends AltosFlightReader {
AltosLink link;
AltosLog log;
- AltosRecord previous;
double frequency;
int telemetry;
AltosState state = null;
}
public void reset() {
- previous = null;
flush();
}
try {
log = new AltosLog(link);
name = link.name;
- previous = null;
telem = new LinkedBlockingQueue<AltosLine>();
frequency = AltosPreferences.frequency(link.serial);
set_frequency(frequency);
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.text.*;
public abstract class AltosTelemetryRecord {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryRecordCompanion extends AltosTelemetryRecordRaw {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryRecordConfiguration extends AltosTelemetryRecordRaw {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.text.*;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
import java.text.*;
AltosTelemetryMap map = new AltosTelemetryMap(words, i);
record.callsign = map.get_string(AO_TELEM_CALL, "N0CALL");
- record.serial = map.get_int(AO_TELEM_SERIAL, AltosRecord.MISSING);
- record.flight = map.get_int(AO_TELEM_FLIGHT, AltosRecord.MISSING);
- record.rssi = map.get_int(AO_TELEM_RSSI, AltosRecord.MISSING);
+ record.serial = map.get_int(AO_TELEM_SERIAL, AltosLib.MISSING);
+ record.flight = map.get_int(AO_TELEM_FLIGHT, AltosLib.MISSING);
+ record.rssi = map.get_int(AO_TELEM_RSSI, AltosLib.MISSING);
record.state = AltosLib.state(map.get_string(AO_TELEM_STATE, "invalid"));
record.tick = map.get_int(AO_TELEM_TICK, 0);
/* raw sensor values */
- record.accel = map.get_int(AO_TELEM_RAW_ACCEL, AltosRecord.MISSING);
- record.pres = map.get_int(AO_TELEM_RAW_BARO, AltosRecord.MISSING);
- record.temp = map.get_int(AO_TELEM_RAW_THERMO, AltosRecord.MISSING);
- record.batt = map.get_int(AO_TELEM_RAW_BATT, AltosRecord.MISSING);
- record.drogue = map.get_int(AO_TELEM_RAW_DROGUE, AltosRecord.MISSING);
- record.main = map.get_int(AO_TELEM_RAW_MAIN, AltosRecord.MISSING);
+ record.accel = map.get_int(AO_TELEM_RAW_ACCEL, AltosLib.MISSING);
+ record.pres = map.get_int(AO_TELEM_RAW_BARO, AltosLib.MISSING);
+ record.temp = map.get_int(AO_TELEM_RAW_THERMO, AltosLib.MISSING);
+ record.batt = map.get_int(AO_TELEM_RAW_BATT, AltosLib.MISSING);
+ record.drogue = map.get_int(AO_TELEM_RAW_DROGUE, AltosLib.MISSING);
+ record.main = map.get_int(AO_TELEM_RAW_MAIN, AltosLib.MISSING);
/* sensor calibration information */
- record.ground_accel = map.get_int(AO_TELEM_CAL_ACCEL_GROUND, AltosRecord.MISSING);
- record.ground_pres = map.get_int(AO_TELEM_CAL_BARO_GROUND, AltosRecord.MISSING);
- record.accel_plus_g = map.get_int(AO_TELEM_CAL_ACCEL_PLUS, AltosRecord.MISSING);
- record.accel_minus_g = map.get_int(AO_TELEM_CAL_ACCEL_MINUS, AltosRecord.MISSING);
+ record.ground_accel = map.get_int(AO_TELEM_CAL_ACCEL_GROUND, AltosLib.MISSING);
+ record.ground_pres = map.get_int(AO_TELEM_CAL_BARO_GROUND, AltosLib.MISSING);
+ record.accel_plus_g = map.get_int(AO_TELEM_CAL_ACCEL_PLUS, AltosLib.MISSING);
+ record.accel_minus_g = map.get_int(AO_TELEM_CAL_ACCEL_MINUS, AltosLib.MISSING);
/* flight computer values */
- record.kalman_acceleration = map.get_double(AO_TELEM_KALMAN_ACCEL, AltosRecord.MISSING, 1/16.0);
- record.kalman_speed = map.get_double(AO_TELEM_KALMAN_SPEED, AltosRecord.MISSING, 1/16.0);
- record.kalman_height = map.get_int(AO_TELEM_KALMAN_HEIGHT, AltosRecord.MISSING);
+ record.kalman_acceleration = map.get_double(AO_TELEM_KALMAN_ACCEL, AltosLib.MISSING, 1/16.0);
+ record.kalman_speed = map.get_double(AO_TELEM_KALMAN_SPEED, AltosLib.MISSING, 1/16.0);
+ record.kalman_height = map.get_int(AO_TELEM_KALMAN_HEIGHT, AltosLib.MISSING);
- record.flight_accel = map.get_int(AO_TELEM_ADHOC_ACCEL, AltosRecord.MISSING);
- record.flight_vel = map.get_int(AO_TELEM_ADHOC_SPEED, AltosRecord.MISSING);
- record.flight_pres = map.get_int(AO_TELEM_ADHOC_BARO, AltosRecord.MISSING);
+ record.flight_accel = map.get_int(AO_TELEM_ADHOC_ACCEL, AltosLib.MISSING);
+ record.flight_vel = map.get_int(AO_TELEM_ADHOC_SPEED, AltosLib.MISSING);
+ record.flight_pres = map.get_int(AO_TELEM_ADHOC_BARO, AltosLib.MISSING);
if (map.has(AO_TELEM_GPS_STATE)) {
record.gps = new AltosGPS(map);
record.kalman_speed = ((short) record.flight_vel) / 16.0;
record.kalman_acceleration = record.flight_accel / 16.0;
record.kalman_height = record.flight_pres;
- record.flight_vel = AltosRecord.MISSING;
- record.flight_pres = AltosRecord.MISSING;
- record.flight_accel = AltosRecord.MISSING;
+ record.flight_vel = AltosLib.MISSING;
+ record.flight_pres = AltosLib.MISSING;
+ record.flight_accel = AltosLib.MISSING;
}
AltosParse.word(words[i++], "gp:");
record.kalman_acceleration = int16(5);
record.kalman_speed = int16(9);
record.kalman_height = int16(13);
- record.flight_accel = AltosRecord.MISSING;
- record.flight_vel = AltosRecord.MISSING;
- record.flight_pres = AltosRecord.MISSING;
+ record.flight_accel = AltosLib.MISSING;
+ record.flight_vel = AltosLib.MISSING;
+ record.flight_pres = AltosLib.MISSING;
} else {
record.flight_accel = int16(5);
record.flight_vel = uint32(9);
record.flight_pres = int16(13);
- record.kalman_acceleration = AltosRecord.MISSING;
- record.kalman_speed = AltosRecord.MISSING;
- record.kalman_height = AltosRecord.MISSING;
+ record.kalman_acceleration = AltosLib.MISSING;
+ record.kalman_speed = AltosLib.MISSING;
+ record.kalman_height = AltosLib.MISSING;
}
record.gps = null;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryRecordLocation extends AltosTelemetryRecordRaw {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryRecordMegaData extends AltosTelemetryRecordRaw {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryRecordMegaSensor extends AltosTelemetryRecordRaw {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryRecordMetrumData extends AltosTelemetryRecordRaw {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryRecordMetrumSensor extends AltosTelemetryRecordRaw {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryRecordMini extends AltosTelemetryRecordRaw {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryRecordRaw extends AltosTelemetryRecord {
int[] bytes;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryRecordSatellite extends AltosTelemetryRecordRaw {
int channels;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetryRecordSensor extends AltosTelemetryRecordRaw {
if (type == packet_type_TM_sensor)
next.accel = accel;
else
- next.accel = AltosRecord.MISSING;
+ next.accel = AltosLib.MISSING;
next.pres = pres;
next.temp = temp;
next.batt = v_batt;
next.drogue = sense_d;
next.main = sense_m;
} else {
- next.drogue = AltosRecord.MISSING;
- next.main = AltosRecord.MISSING;
+ next.drogue = AltosLib.MISSING;
+ next.main = AltosLib.MISSING;
}
next.kalman_acceleration = acceleration / 16.0;
next.accel_plus_g = accel_plus_g;
next.accel_minus_g = accel_minus_g;
} else {
- next.ground_accel = AltosRecord.MISSING;
- next.accel_plus_g = AltosRecord.MISSING;
- next.accel_minus_g = AltosRecord.MISSING;
+ next.ground_accel = AltosLib.MISSING;
+ next.accel_plus_g = AltosLib.MISSING;
+ next.accel_minus_g = AltosLib.MISSING;
}
next.seen |= AltosRecord.seen_sensor | AltosRecord.seen_temp_volt;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetrySatellite extends AltosTelemetryStandard {
int channels;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTelemetrySensor extends AltosTelemetryStandard {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public abstract class AltosTelemetryStandard extends AltosTelemetry {
int[] bytes;
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public class AltosTemperature extends AltosUnits {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public abstract class AltosUnits {
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_1;
+package org.altusmetrum.altoslib_2;
public interface AltosUnitsListener {
public void units_changed(boolean imperial_units);
altoslibdir = $(datadir)/java
-record_files = \
- AltosEepromRecord.java \
- AltosEepromTeleScience.java \
- AltosRecordCompanion.java \
- AltosRecordIterable.java \
- AltosRecord.java \
- AltosRecordNone.java \
- AltosRecordTM.java \
- AltosRecordMM.java \
- AltosRecordMini.java
-
altoslib_JAVA = \
- $(record_files) \
AltosLib.java \
+ AltosCompanion.java \
AltosConfigData.java \
AltosConfigValues.java \
AltosConvert.java \
AltosFlightReader.java \
AltosFrequency.java \
AltosGPS.java \
- AltosGPSQuery.java \
AltosGPSSat.java \
AltosGreatCircle.java \
AltosHexfile.java \
+ AltosIdle.java \
+ AltosIdleFetch.java \
AltosIdleMonitor.java \
AltosIdleMonitorListener.java \
AltosIgnite.java \
AltosIMU.java \
- AltosIMUQuery.java \
AltosLine.java \
AltosLink.java \
AltosListenerState.java \
AltosLog.java \
+ AltosMag.java \
+ AltosMma655x.java \
AltosMs5607.java \
- AltosMs5607Query.java \
- AltosOrderedRecord.java \
- AltosOrderedMegaRecord.java \
- AltosOrderedMiniRecord.java \
AltosParse.java \
AltosPreferences.java \
AltosPreferencesBackend.java \
AltosReplayReader.java \
AltosRomconfig.java \
AltosSensorMM.java \
+ AltosSensorEMini.java \
AltosSensorTM.java \
+ AltosSensorMega.java \
+ AltosSensorMetrum.java \
AltosState.java \
AltosStateIterable.java \
AltosStateUpdate.java \
import java.awt.*;
import libaltosJNI.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class Altos extends AltosUILib {
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosAscent extends JComponent implements AltosFlightDisplay {
GridBagLayout layout;
void reset() {
value.setText("");
max_value.setText("");
- max = AltosRecord.MISSING;
+ max = AltosLib.MISSING;
}
void set_font() {
}
void show(AltosUnits units, double v) {
- if (v == AltosRecord.MISSING) {
+ if (v == AltosLib.MISSING) {
value.setText("Missing");
max_value.setText("Missing");
} else {
value.setText(units.show(8, v));
- if (v > max || max == AltosRecord.MISSING) {
+ if (v > max || max == AltosLib.MISSING) {
max_value.setText(units.show(8, v));
max = v;
}
class Lat extends AscentValue {
void show (AltosState state, AltosListenerState listener_state) {
- if (state.gps != null && state.gps.connected && state.gps.lat != AltosRecord.MISSING)
+ if (state.gps != null && state.gps.connected && state.gps.lat != AltosLib.MISSING)
show(pos(state.gps.lat,"N", "S"));
else
show("???");
class Lon extends AscentValue {
void show (AltosState state, AltosListenerState listener_state) {
- if (state.gps != null && state.gps.connected && state.gps.lon != AltosRecord.MISSING)
+ if (state.gps != null && state.gps.connected && state.gps.lon != AltosLib.MISSING)
show(pos(state.gps.lon,"E", "W"));
else
show("???");
lon.hide();
}
height.show(state, listener_state);
- if (state.main_voltage != AltosRecord.MISSING)
+ if (state.main_voltage != AltosLib.MISSING)
main.show(state, listener_state);
else
main.hide();
- if (state.apogee_voltage != AltosRecord.MISSING)
+ if (state.apogee_voltage != AltosLib.MISSING)
apogee.show(state, listener_state);
else
apogee.hide();
package altosui;
import java.util.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosBTKnown implements Iterable<AltosBTDevice> {
import java.io.*;
import java.util.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosCSV implements AltosWriter {
File name;
}
void write_companion(AltosState state) {
- AltosRecordCompanion companion = state.companion;
+ AltosCompanion companion = state.companion;
int channels_written = 0;
if (companion == null) {
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosCSVUI
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosCompanionInfo extends JTable {
private AltosFlightInfoTableModel model;
model.clear();
}
- AltosRecordCompanion companion;
+ AltosCompanion companion;
public String board_name() {
if (companion == null)
return "None";
switch (companion.board_id) {
- case AltosRecordCompanion.board_id_telescience:
+ case AltosCompanion.board_id_telescience:
return "TeleScience";
default:
return String.format("%02x\n", companion.board_id);
import java.io.*;
import java.util.concurrent.*;
import java.text.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosConfig implements ActionListener {
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
class AltosEditFreqUI extends AltosUIDialog implements ActionListener {
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosConfigPyroUI
import javax.swing.*;
import java.io.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosConfigTD implements ActionListener {
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosConfigTDUI
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosConfigUI
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.io.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosDataChooser extends JFileChooser {
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosDescent extends JComponent implements AltosFlightDisplay {
GridBagLayout layout;
class Lat extends DescentValue {
void show (AltosState state, AltosListenerState listener_state) {
- if (state.gps != null && state.gps.connected && state.gps.lat != AltosRecord.MISSING)
+ if (state.gps != null && state.gps.connected && state.gps.lat != AltosLib.MISSING)
show(pos(state.gps.lat,"N", "S"));
else
show("???");
class Lon extends DescentValue {
void show (AltosState state, AltosListenerState listener_state) {
- if (state.gps != null && state.gps.connected && state.gps.lon != AltosRecord.MISSING)
+ if (state.gps != null && state.gps.connected && state.gps.lon != AltosLib.MISSING)
show(pos(state.gps.lon,"W", "E"));
else
show("???");
lat.hide();
lon.hide();
}
- if (state.main_voltage != AltosRecord.MISSING)
+ if (state.main_voltage != AltosLib.MISSING)
main.show(state, listener_state);
else
main.hide();
- if (state.apogee_voltage != AltosRecord.MISSING)
+ if (state.apogee_voltage != AltosLib.MISSING)
apogee.show(state, listener_state);
else
apogee.hide();
import javax.swing.*;
import java.io.*;
import java.text.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosDisplayThread extends Thread {
import javax.swing.*;
import java.io.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosEepromDelete implements Runnable {
AltosEepromList flights;
import java.util.*;
import java.text.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosEepromDownload implements Runnable {
AltosGPS gps = state.gps;
if (gps != null &&
- gps.year != AltosRecord.MISSING &&
- gps.month != AltosRecord.MISSING &&
- gps.day != AltosRecord.MISSING)
+ gps.year != AltosLib.MISSING &&
+ gps.month != AltosLib.MISSING &&
+ gps.day != AltosLib.MISSING)
{
eeprom_name = new AltosFile(gps.year, gps.month, gps.day,
state.serial, state.flight, "eeprom");
import java.util.*;
import java.text.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
/*
* Temporary structure to hold the list of stored flights;
import javax.swing.*;
import java.io.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosEepromManage implements ActionListener {
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
class AltosEepromItem implements ActionListener {
import javax.swing.filechooser.FileNameExtensionFilter;
import java.io.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosFlashUI
package altosui;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public interface AltosFlightDisplay {
void reset();
package altosui;
import java.io.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosFlightStats {
double max_height;
}
double boost_time(AltosStateIterable states) {
- double boost_time = AltosRecord.MISSING;
+ double boost_time = AltosLib.MISSING;
AltosState state = null;
for (AltosState s : states) {
if (state == null)
return 0;
- if (boost_time == AltosRecord.MISSING)
+ if (boost_time == AltosLib.MISSING)
boost_time = state.time;
return boost_time;
}
double end_time = 0;
double landed_time = landed_time(states);
- year = month = day = AltosRecord.MISSING;
- hour = minute = second = AltosRecord.MISSING;
- serial = flight = AltosRecord.MISSING;
- lat = lon = AltosRecord.MISSING;
+ year = month = day = AltosLib.MISSING;
+ hour = minute = second = AltosLib.MISSING;
+ serial = flight = AltosLib.MISSING;
+ lat = lon = AltosLib.MISSING;
has_gps = false;
has_other_adc = false;
has_rssi = false;
for (AltosState state : states) {
- if (serial == AltosRecord.MISSING && state.serial != AltosRecord.MISSING)
+ if (serial == AltosLib.MISSING && state.serial != AltosLib.MISSING)
serial = state.serial;
- if (flight == AltosRecord.MISSING && state.flight != AltosRecord.MISSING)
+ if (flight == AltosLib.MISSING && state.flight != AltosLib.MISSING)
flight = state.flight;
- if (state.battery_voltage != AltosRecord.MISSING)
+ if (state.battery_voltage != AltosLib.MISSING)
has_other_adc = true;
- if (state.rssi != AltosRecord.MISSING)
+ if (state.rssi != AltosLib.MISSING)
has_rssi = true;
end_time = state.time;
if (state.time >= boost_time && state.state < Altos.ao_flight_boost)
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosFlightStatsTable extends JComponent {
GridBagLayout layout;
int y = 0;
new FlightStat(layout, y++, "Serial", String.format("%d", stats.serial));
new FlightStat(layout, y++, "Flight", String.format("%d", stats.flight));
- if (stats.year != AltosRecord.MISSING && stats.hour != AltosRecord.MISSING)
+ if (stats.year != AltosLib.MISSING && stats.hour != AltosLib.MISSING)
new FlightStat(layout, y++, "Date/Time",
String.format("%04d-%02d-%02d", stats.year, stats.month, stats.day),
String.format("%02d:%02d:%02d UTC", stats.hour, stats.minute, stats.second));
else {
- if (stats.year != AltosRecord.MISSING)
+ if (stats.year != AltosLib.MISSING)
new FlightStat(layout, y++, "Date",
String.format("%04d-%02d-%02d", stats.year, stats.month, stats.day));
- if (stats.hour != AltosRecord.MISSING)
+ if (stats.hour != AltosLib.MISSING)
new FlightStat(layout, y++, "Time",
String.format("%02d:%02d:%02d UTC", stats.hour, stats.minute, stats.second));
}
String.format("%5.0f m/s", stats.max_speed),
String.format("%5.0f mph", AltosConvert.meters_to_mph(stats.max_speed)),
String.format("Mach %4.1f", AltosConvert.meters_to_mach(stats.max_speed)));
- if (stats.max_acceleration != AltosRecord.MISSING) {
+ if (stats.max_acceleration != AltosLib.MISSING) {
new FlightStat(layout, y++, "Maximum boost acceleration",
String.format("%5.0f m/s²", stats.max_acceleration),
String.format("%5.0f ft/s²", AltosConvert.meters_to_feet(stats.max_acceleration)),
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosFlightStatus extends JComponent implements AltosFlightDisplay {
GridBagLayout layout;
class Serial extends FlightValue {
void show(AltosState state, AltosListenerState listener_state) {
- if (state.serial == AltosRecord.MISSING)
+ if (state.serial == AltosLib.MISSING)
value.setText("none");
else
value.setText(String.format("%d", state.serial));
class Flight extends FlightValue {
void show(AltosState state, AltosListenerState listener_state) {
- if (state.flight == AltosRecord.MISSING)
+ if (state.flight == AltosLib.MISSING)
value.setText("none");
else
value.setText(String.format("%d", state.flight));
import java.text.*;
import java.util.prefs.*;
import java.util.concurrent.LinkedBlockingQueue;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosFlightStatusTableModel extends AbstractTableModel {
private String[] columnNames = {
package altosui;
import java.awt.event.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosFlightStatusUpdate implements ActionListener {
import java.awt.event.*;
import javax.swing.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay, AltosFontListener {
package altosui;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosFreqList extends JComboBox {
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
import org.jfree.ui.*;
package altosui;
import org.altusmetrum.altosuilib_1.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosGraphDataPoint implements AltosUIDataPoint {
}
public double y(int index) throws AltosUIDataMissing {
- double y = AltosRecord.MISSING;
+ double y = AltosLib.MISSING;
switch (index) {
case data_height:
y = state.height();
y = state.pressure();
break;
}
- if (y == AltosRecord.MISSING)
+ if (y == AltosLib.MISSING)
throw new AltosUIDataMissing(index);
return y;
}
import java.lang.*;
import java.io.*;
import java.util.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
class AltosGraphIterator implements Iterator<AltosUIDataPoint> {
public AltosUIDataPoint next() {
AltosState state = iterator.next();
- if (state.flight != AltosRecord.MISSING) {
+ if (state.flight != AltosLib.MISSING) {
if (dataSet.callsign == null && state.callsign != null)
dataSet.callsign = state.callsign;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
import org.jfree.chart.ChartPanel;
import javax.swing.event.*;
import java.io.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDisplay, AltosFontListener, AltosIdleMonitorListener, DocumentListener {
import java.io.*;
import java.text.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosIgniteUI
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosInfoTable extends JTable {
private AltosFlightInfoTableModel model;
public void show(AltosState state, AltosListenerState listener_state) {
info_reset();
if (state != null) {
- if (state.altitude() != AltosRecord.MISSING)
+ if (state.altitude() != AltosLib.MISSING)
info_add_row(0, "Altitude", "%6.0f m", state.altitude());
- if (state.ground_altitude() != AltosRecord.MISSING)
+ if (state.ground_altitude() != AltosLib.MISSING)
info_add_row(0, "Pad altitude", "%6.0f m", state.ground_altitude());
- if (state.height() != AltosRecord.MISSING)
+ if (state.height() != AltosLib.MISSING)
info_add_row(0, "Height", "%6.0f m", state.height());
- if (state.max_height() != AltosRecord.MISSING)
+ if (state.max_height() != AltosLib.MISSING)
info_add_row(0, "Max height", "%6.0f m", state.max_height());
- if (state.acceleration() != AltosRecord.MISSING)
+ if (state.acceleration() != AltosLib.MISSING)
info_add_row(0, "Acceleration", "%8.1f m/s²", state.acceleration());
- if (state.max_acceleration() != AltosRecord.MISSING)
+ if (state.max_acceleration() != AltosLib.MISSING)
info_add_row(0, "Max acceleration", "%8.1f m/s²", state.max_acceleration());
- if (state.speed() != AltosRecord.MISSING)
+ if (state.speed() != AltosLib.MISSING)
info_add_row(0, "Speed", "%8.1f m/s", state.speed());
- if (state.max_speed() != AltosRecord.MISSING)
+ if (state.max_speed() != AltosLib.MISSING)
info_add_row(0, "Max Speed", "%8.1f m/s", state.max_speed());
- if (state.temperature != AltosRecord.MISSING)
+ if (state.temperature != AltosLib.MISSING)
info_add_row(0, "Temperature", "%9.2f °C", state.temperature);
- if (state.battery_voltage != AltosRecord.MISSING)
+ if (state.battery_voltage != AltosLib.MISSING)
info_add_row(0, "Battery", "%9.2f V", state.battery_voltage);
- if (state.apogee_voltage != AltosRecord.MISSING)
+ if (state.apogee_voltage != AltosLib.MISSING)
info_add_row(0, "Drogue", "%9.2f V", state.apogee_voltage);
- if (state.main_voltage != AltosRecord.MISSING)
+ if (state.main_voltage != AltosLib.MISSING)
info_add_row(0, "Main", "%9.2f V", state.main_voltage);
}
if (listener_state != null) {
info_add_row(0, "CRC Errors", "%6d", listener_state.crc_errors);
- if (listener_state.battery != AltosRecord.MISSING)
+ if (listener_state.battery != AltosLib.MISSING)
info_add_row(0, "Receiver Battery", "%9.2f", listener_state.battery);
}
if (state != null) {
if (state.gps == null || !state.gps.connected) {
+ if (state.gps == null)
+ System.out.printf ("null gps\n");
+ else
+ System.out.printf ("not connected gps\n");
info_add_row(1, "GPS", "not available");
} else {
if (state.gps_ready)
else
info_add_row(1, "GPS", " missing");
info_add_row(1, "Satellites", "%6d", state.gps.nsat);
- if (state.gps.lat != AltosRecord.MISSING)
+ if (state.gps.lat != AltosLib.MISSING)
info_add_deg(1, "Latitude", state.gps.lat, 'N', 'S');
- if (state.gps.lon != AltosRecord.MISSING)
+ if (state.gps.lon != AltosLib.MISSING)
info_add_deg(1, "Longitude", state.gps.lon, 'E', 'W');
- if (state.gps.alt != AltosRecord.MISSING)
+ if (state.gps.alt != AltosLib.MISSING)
info_add_row(1, "GPS altitude", "%8.1f", state.gps.alt);
- if (state.gps_height != AltosRecord.MISSING)
+ if (state.gps_height != AltosLib.MISSING)
info_add_row(1, "GPS height", "%8.1f", state.gps_height);
/* The SkyTraq GPS doesn't report these values */
info_add_deg(1, "Pad longitude", state.pad_lon, 'E', 'W');
info_add_row(1, "Pad GPS alt", "%6.0f m", state.pad_alt);
}
- if (state.gps.year != AltosRecord.MISSING)
+ if (state.gps.year != AltosLib.MISSING)
info_add_row(1, "GPS date", "%04d-%02d-%02d",
state.gps.year,
state.gps.month,
state.gps.day);
- if (state.gps.hour != AltosRecord.MISSING)
+ if (state.gps.hour != AltosLib.MISSING)
info_add_row(1, "GPS time", " %02d:%02d:%02d",
state.gps.hour,
state.gps.minute,
package altosui;
import java.io.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosKML implements AltosWriter {
AltosGPS gps = state.gps;
double altitude;
- if (state.height() != AltosRecord.MISSING)
+ if (state.height() != AltosLib.MISSING)
altitude = state.height() + gps_start_altitude;
else
altitude = gps.alt;
if (gps == null)
return;
- if (gps.lat == AltosRecord.MISSING)
+ if (gps.lat == AltosLib.MISSING)
return;
- if (gps.lon == AltosRecord.MISSING)
+ if (gps.lon == AltosLib.MISSING)
return;
if (!started) {
start(state);
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosLanded extends JComponent implements AltosFlightDisplay, ActionListener {
GridBagLayout layout;
class Lat extends LandedValue {
void show (AltosState state, AltosListenerState listener_state) {
show();
- if (state.gps != null && state.gps.connected && state.gps.lat != AltosRecord.MISSING)
+ if (state.gps != null && state.gps.connected && state.gps.lat != AltosLib.MISSING)
show(pos(state.gps.lat,"N", "S"));
else
show("???");
class Lon extends LandedValue {
void show (AltosState state, AltosListenerState listener_state) {
show();
- if (state.gps != null && state.gps.connected && state.gps.lon != AltosRecord.MISSING)
+ if (state.gps != null && state.gps.connected && state.gps.lon != AltosLib.MISSING)
show(pos(state.gps.lon,"E", "W"));
else
show("???");
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosPad extends JComponent implements AltosFlightDisplay {
GridBagLayout layout;
class Battery extends LaunchStatus {
void show (AltosState state, AltosListenerState listener_state) {
- if (state == null || state.battery_voltage == AltosRecord.MISSING)
+ if (state == null || state.battery_voltage == AltosLib.MISSING)
hide();
else {
show("%4.2f V", state.battery_voltage);
class Apogee extends LaunchStatus {
void show (AltosState state, AltosListenerState listener_state) {
- if (state == null || state.apogee_voltage == AltosRecord.MISSING)
+ if (state == null || state.apogee_voltage == AltosLib.MISSING)
hide();
else {
show("%4.2f V", state.apogee_voltage);
class Main extends LaunchStatus {
void show (AltosState state, AltosListenerState listener_state) {
- if (state == null || state.main_voltage == AltosRecord.MISSING)
+ if (state == null || state.main_voltage == AltosLib.MISSING)
hide();
else {
show("%4.2f V", state.main_voltage);
class LoggingReady extends LaunchStatus {
void show (AltosState state, AltosListenerState listener_state) {
- if (state == null || state.flight == AltosRecord.MISSING) {
+ if (state == null || state.flight == AltosLib.MISSING) {
hide();
} else {
if (state.flight != 0) {
class ReceiverBattery extends LaunchStatus {
void show (AltosState state, AltosListenerState listener_state) {
- if (listener_state == null || listener_state.battery == AltosRecord.MISSING)
+ if (listener_state == null || listener_state.battery == AltosLib.MISSING)
hide();
else {
show("%4.2f V", listener_state.battery);
class PadLat extends LaunchValue {
void show (AltosState state, AltosListenerState listener_state) {
- double lat = AltosRecord.MISSING;
+ double lat = AltosLib.MISSING;
String label = null;
if (state != null) {
- if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.lat != AltosRecord.MISSING) {
+ if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.lat != AltosLib.MISSING) {
lat = state.gps.lat;
label = "Latitude";
} else {
label = "Pad Latitude";
}
}
- if (lat != AltosRecord.MISSING) {
- show(pos(lat,"E", "W"));
+ if (lat != AltosLib.MISSING) {
+ show(pos(lat,"N", "S"));
set_label(label);
} else
hide();
class PadLon extends LaunchValue {
void show (AltosState state, AltosListenerState listener_state) {
- double lon = AltosRecord.MISSING;
+ double lon = AltosLib.MISSING;
String label = null;
if (state != null) {
- if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.lon != AltosRecord.MISSING) {
+ if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.lon != AltosLib.MISSING) {
lon = state.gps.lon;
label = "Longitude";
} else {
label = "Pad Longitude";
}
}
- if (lon != AltosRecord.MISSING) {
+ if (lon != AltosLib.MISSING) {
show(pos(lon,"E", "W"));
set_label(label);
} else
class PadAlt extends LaunchValue {
void show (AltosState state, AltosListenerState listener_state) {
- double alt = AltosRecord.MISSING;
+ double alt = AltosLib.MISSING;
String label = null;
if (state != null) {
- if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.alt != AltosRecord.MISSING) {
+ if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.alt != AltosLib.MISSING) {
alt = state.gps.alt;
label = "Altitude";
} else {
label = "Pad Altitude";
}
}
- if (alt != AltosRecord.MISSING) {
+ if (alt != AltosLib.MISSING) {
show("%4.0f m", state.gps.alt);
set_label(label);
} else
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosRomconfigUI
import java.util.*;
import java.text.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
class AltosScanResult {
AltosState state = reader.read();
if (state == null)
continue;
- if (state.flight != AltosRecord.MISSING) {
+ if (state.flight != AltosLib.MISSING) {
final AltosScanResult result = new AltosScanResult(state.callsign,
state.serial,
state.flight,
import java.util.*;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
import libaltosJNI.*;
import java.lang.Math;
import java.awt.geom.Point2D;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay {
return;
if (!initialised) {
- if (state.pad_lat != AltosRecord.MISSING && state.pad_lon != AltosRecord.MISSING) {
+ if (state.pad_lat != AltosLib.MISSING && state.pad_lon != AltosLib.MISSING) {
initMaps(state.pad_lat, state.pad_lon);
initialised = true;
- } else if (gps.lat != AltosRecord.MISSING && gps.lon != AltosRecord.MISSING) {
+ } else if (gps.lat != AltosLib.MISSING && gps.lon != AltosLib.MISSING) {
initMaps(gps.lat, gps.lon);
initialised = true;
} else {
import javax.swing.*;
import java.awt.geom.Point2D;
import java.awt.geom.Line2D;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosSiteMapTile extends JLayeredPane {
JLabel mapLabel;
import javax.swing.*;
import java.io.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class AltosUI extends AltosUIFrame {
stats.max_speed,
AltosConvert.meters_to_feet(stats.max_speed),
AltosConvert.meters_to_mach(stats.max_speed));
- if (stats.max_acceleration != AltosRecord.MISSING) {
+ if (stats.max_acceleration != AltosLib.MISSING) {
System.out.printf("Max accel: %6.0f m/s² %6.0f ft/s² %6.2f g\n",
stats.max_acceleration,
AltosConvert.meters_to_feet(stats.max_acceleration),
import java.io.File;
import java.util.prefs.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import javax.swing.filechooser.FileSystemView;
public class AltosUIPreferencesBackend implements AltosPreferencesBackend {
package altosui;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public interface AltosWriter {
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.jfree.ui.*;
import org.jfree.chart.*;
import java.io.*;
import java.util.concurrent.*;
import java.util.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.jfree.ui.*;
import org.jfree.chart.*;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.jfree.ui.*;
import org.jfree.chart.*;
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.jfree.ui.*;
import org.jfree.chart.*;
import java.awt.*;
import libaltosJNI.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosUILib extends AltosLib {
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.jfree.ui.*;
import org.jfree.chart.*;
import java.util.*;
import java.awt.Component;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
public class AltosUIPreferences extends AltosPreferences {
import java.io.File;
import java.util.prefs.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import javax.swing.filechooser.FileSystemView;
public class AltosUIPreferencesBackend implements AltosPreferencesBackend {
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.jfree.ui.*;
import org.jfree.chart.*;
import org.jfree.data.xy.*;
import org.jfree.data.*;
+class AltosUITime extends AltosUnits {
+ public double value(double v) { return v; }
+ public String show_units() { return "s"; }
+ public String say_units() { return "seconds"; }
+
+ public int show_fraction(int width) {
+ if (width < 5)
+ return 0;
+ return width - 5;
+ }
+
+ public int say_fraction() { return 0; }
+}
+
public class AltosUISeries extends XYSeries implements AltosUIGrapher {
AltosUIAxis axis;
String label;
axis.set_units();
StandardXYToolTipGenerator ttg;
- String example = units.graph_format(4);
+ String time_example = (new AltosUITime()).graph_format(7);
+ String example = units.graph_format(7);
ttg = new StandardXYToolTipGenerator(String.format("{1}s: {2}%s ({0})",
units.show_units()),
- new java.text.DecimalFormat(example),
+ new java.text.DecimalFormat(time_example),
new java.text.DecimalFormat(example));
renderer.setBaseToolTipGenerator(ttg);
}
dnl Java library versions
ALTOSUILIB_VERSION=1
-ALTOSLIB_VERSION=1
+ALTOSLIB_VERSION=2
AC_SUBST(ALTOSLIB_VERSION)
AC_DEFINE(ALTOSLIB_VERSION,$ALTOSLIB_VERSION,[Version of the AltosLib package])
import java.lang.*;
import java.io.*;
import java.util.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
class MicroIterator implements Iterator<MicroDataPoint> {
import java.io.*;
import java.util.concurrent.*;
import java.util.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class MicroDownload extends AltosUIDialog implements Runnable, ActionListener {
import java.awt.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class MicroExport extends JFileChooser {
import java.io.*;
import java.util.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class MicroFile {
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.io.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class MicroFileChooser extends JFileChooser {
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
import org.jfree.ui.*;
import java.io.*;
import java.util.concurrent.*;
import java.util.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class MicroPeak extends MicroFrame implements ActionListener, ItemListener {
import java.awt.*;
import java.io.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class MicroRaw extends JTextArea {
import java.io.*;
import java.util.concurrent.*;
import java.util.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class MicroSave extends JFileChooser {
package org.altusmetrum.micropeak;
import java.io.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class MicroStats {
import java.awt.*;
import javax.swing.*;
-import org.altusmetrum.altoslib_1.*;
+import org.altusmetrum.altoslib_2.*;
import org.altusmetrum.altosuilib_1.*;
public class MicroStatsTable extends JComponent implements AltosFontListener {