return raw / 4095.0;
}
+ static double stm_adc(int raw) {
+ return raw / 4095.0;
+ }
+
+ static public double easy_timer_battery_voltage(int v_batt) {
+ if (v_batt != AltosLib.MISSING)
+ return 3.3 * stm_adc(v_batt) * (5.6 + 10.0) / 10.0;
+ return AltosLib.MISSING;
+ }
+
+ static double easy_timer_pyro_voltage_15v(int raw) {
+ if (raw != AltosLib.MISSING)
+ return 3.3 * stm_adc(raw) * (100.0 + 27.0) / 27.0;
+ return AltosLib.MISSING;
+ }
+
+ static public double metrum_battery_voltage(int v_batt) {
+ if (v_batt != AltosLib.MISSING)
+ return 3.3 * stm_adc(v_batt) * (5.6 + 10.0) / 10.0;
+ return AltosLib.MISSING;
+ }
+
+ static double metrum_pyro_voltage(int raw) {
+ if (raw != AltosLib.MISSING)
+ return 3.3 * stm_adc(raw) * (100.0 + 27.0) / 27.0;
+ return AltosLib.MISSING;
+ }
+
static public double mega_battery_voltage(int v_batt) {
if (v_batt != AltosLib.MISSING)
- return 3.3 * mega_adc(v_batt) * (5.6 + 10.0) / 10.0;
+ return 3.3 * stm_adc(v_batt) * (5.6 + 10.0) / 10.0;
+ return AltosLib.MISSING;
+ }
+
+ static double mega_pyro_voltage_15v(int raw) {
+ if (raw != AltosLib.MISSING)
+ return 3.3 * stm_adc(raw) * (100.0 + 27.0) / 27.0;
return AltosLib.MISSING;
}
- static double mega_pyro_voltage(int raw) {
+ static double mega_pyro_voltage_30v(int raw) {
if (raw != AltosLib.MISSING)
- return 3.3 * mega_adc(raw) * (100.0 + 27.0) / 27.0;
+ return 3.3 * stm_adc(raw) * (100.0 + 12.0) / 12.0;
return AltosLib.MISSING;
}
private int sense(int i) { return data16(6 + i * 2); }
private int pyro() { return data16(26); }
+ private double pyro_voltage(int sense) {
+ switch (log_format) {
+ case AltosLib.AO_LOG_FORMAT_TELEMEGA_7:
+ return AltosConvert.mega_pyro_voltage_30v(sense);
+ default:
+ return AltosConvert.mega_pyro_voltage_15v(sense);
+ }
+ }
+
/* AO_LOG_GPS_TIME elements */
private int latitude() { return data32(0); }
private int longitude() { return data32(4); }
break;
case AltosLib.AO_LOG_TEMP_VOLT:
listener.set_battery_voltage(AltosConvert.mega_battery_voltage(v_batt()));
- listener.set_pyro_voltage(AltosConvert.mega_pyro_voltage(v_pbatt()));
+ listener.set_pyro_voltage(pyro_voltage(v_pbatt()));
int nsense = nsense();
- listener.set_apogee_voltage(AltosConvert.mega_pyro_voltage(sense(nsense-2)));
- listener.set_main_voltage(AltosConvert.mega_pyro_voltage(sense(nsense-1)));
+ listener.set_apogee_voltage(pyro_voltage(sense(nsense-2)));
+ listener.set_main_voltage(pyro_voltage(sense(nsense-1)));
double voltages[] = new double[nsense-2];
for (int i = 0; i < nsense-2; i++)
- voltages[i] = AltosConvert.mega_pyro_voltage(sense(i));
+ voltages[i] = pyro_voltage(sense(i));
listener.set_igniter_voltage(voltages);
listener.set_pyro_fired(pyro());
listener.set_acceleration(cal_data.acceleration(accel()));
break;
case AltosLib.AO_LOG_TEMP_VOLT:
- listener.set_battery_voltage(AltosConvert.mega_battery_voltage(v_batt()));
- listener.set_apogee_voltage(AltosConvert.mega_pyro_voltage(sense_a()));
- listener.set_main_voltage(AltosConvert.mega_pyro_voltage(sense_m()));
+ listener.set_battery_voltage(AltosConvert.metrum_battery_voltage(v_batt()));
+ listener.set_apogee_voltage(AltosConvert.metrum_pyro_voltage(sense_a()));
+ listener.set_main_voltage(AltosConvert.metrum_pyro_voltage(sense_m()));
break;
case AltosLib.AO_LOG_GPS_POS:
gps = listener.make_temp_gps(false);
listener.set_acceleration(cal_data.acceleration(accel()));
- listener.set_battery_voltage(AltosConvert.mega_battery_voltage(v_batt()));
- listener.set_pyro_voltage(AltosConvert.mega_pyro_voltage(v_pbatt()));
+ listener.set_battery_voltage(AltosConvert.easy_timer_battery_voltage(v_batt()));
+ listener.set_pyro_voltage(AltosConvert.easy_timer_pyro_voltage_15v(v_pbatt()));
int nsense = nsense();
- listener.set_apogee_voltage(AltosConvert.mega_pyro_voltage(sense(nsense-2)));
- listener.set_main_voltage(AltosConvert.mega_pyro_voltage(sense(nsense-1)));
+ listener.set_apogee_voltage(AltosConvert.easy_timer_pyro_voltage_15v(sense(nsense-2)));
+ listener.set_main_voltage(AltosConvert.easy_timer_pyro_voltage_15v(sense(nsense-1)));
double voltages[] = new double[nsense-2];
for (int i = 0; i < nsense-2; i++)
- voltages[i] = AltosConvert.mega_pyro_voltage(sense(i));
+ voltages[i] = AltosConvert.easy_timer_pyro_voltage_15v(sense(i));
listener.set_igniter_voltage(voltages);
listener.set_pyro_fired(pyro());
AltosIdler.idle_ms5607,
AltosIdler.idle_imu, AltosIdler.idle_mag,
AltosIdler.idle_sensor_mega),
+ new AltosIdler("TeleMega-v7",
+ AltosIdler.idle_gps,
+ AltosIdler.idle_adxl375,
+ AltosIdler.idle_ms5607,
+ AltosIdler.idle_imu, AltosIdler.idle_mag,
+ AltosIdler.idle_sensor_mega),
new AltosIdler("EasyMega-v1",
AltosIdler.idle_mma655x,
AltosIdler.idle_ms5607,
public static final int AO_LOG_FORMAT_TELEMEGA_6 = 22;
public static final int AO_LOG_FORMAT_EASYTIMER_2 = 23;
public static final int AO_LOG_FORMAT_EASYMEGA_3 = 24;
+ public static final int AO_LOG_FORMAT_TELEMEGA_7 = 25;
public static final int AO_LOG_FORMAT_NONE = 127;
public static final int model_mpu6000 = 0;
import java.util.concurrent.TimeoutException;
class AltosSensorMega {
+ int log_format;
int tick;
int[] sense;
int v_batt;
public AltosSensorMega(AltosLink link) throws InterruptedException, TimeoutException {
this();
+ log_format = link.config_data().log_format;
String[] items = link.adc();
for (int i = 0; i < items.length;) {
if (items[i].equals("tick:")) {
}
}
+ double pyro_voltage(int sense) {
+ switch (log_format) {
+ case AltosLib.AO_LOG_FORMAT_TELEMEGA_7:
+ return AltosConvert.mega_pyro_voltage_30v(sense);
+ default:
+ return AltosConvert.mega_pyro_voltage_15v(sense);
+ }
+ }
+
+ double battery_voltage(int sense) {
+ return AltosConvert.mega_battery_voltage(sense);
+ }
+
static public void provide_data(AltosDataListener listener, AltosLink link) throws InterruptedException {
try {
AltosSensorMega sensor_mega = new AltosSensorMega(link);
- listener.set_battery_voltage(AltosConvert.mega_battery_voltage(sensor_mega.v_batt));
- listener.set_apogee_voltage(AltosConvert.mega_pyro_voltage(sensor_mega.sense[4]));
- listener.set_main_voltage(AltosConvert.mega_pyro_voltage(sensor_mega.sense[5]));
+ listener.set_battery_voltage(sensor_mega.battery_voltage(sensor_mega.v_batt));
+ listener.set_apogee_voltage(sensor_mega.pyro_voltage(sensor_mega.sense[4]));
+ listener.set_main_voltage(sensor_mega.pyro_voltage(sensor_mega.sense[5]));
double[] igniter_voltage = new double[4];
for (int i = 0; i < 4; i++)
- igniter_voltage[i] = AltosConvert.mega_pyro_voltage(sensor_mega.sense[i]);
+ igniter_voltage[i] = sensor_mega.pyro_voltage(sensor_mega.sense[i]);
listener.set_igniter_voltage(igniter_voltage);
} catch (TimeoutException te) {
static public void provide_data(AltosDataListener listener, AltosLink link) throws InterruptedException {
try {
AltosSensorMetrum sensor_metrum = new AltosSensorMetrum(link);
- listener.set_battery_voltage(AltosConvert.mega_battery_voltage(sensor_metrum.v_batt));
- listener.set_apogee_voltage(AltosConvert.mega_pyro_voltage(sensor_metrum.sense_a));
- listener.set_main_voltage(AltosConvert.mega_pyro_voltage(sensor_metrum.sense_m));
+ listener.set_battery_voltage(AltosConvert.metrum_battery_voltage(sensor_metrum.v_batt));
+ listener.set_apogee_voltage(AltosConvert.metrum_pyro_voltage(sensor_metrum.sense_a));
+ listener.set_main_voltage(AltosConvert.metrum_pyro_voltage(sensor_metrum.sense_m));
} catch (TimeoutException te) {
}
}
final static int packet_type_satellite = 0x06;
final static int packet_type_companion = 0x07;
final static int packet_type_mega_sensor_mpu = 0x08;
- final static int packet_type_mega_data = 0x09;
+ final static int packet_type_mega_data_15v = 0x09;
final static int packet_type_metrum_sensor = 0x0a;
final static int packet_type_metrum_data = 0x0b;
final static int packet_type_mini2 = 0x10;
final static int packet_type_mega_sensor_bmx160 = 0x12;
final static int packet_type_mega_norm_mpu6000_mmc5983 = 0x13;
final static int packet_type_mega_norm_bmi088_mmc5983 = 0x14;
+ final static int packet_type_mega_data_30v = 0x15;
static AltosTelemetry parse_hex(String hex) throws ParseException, AltosCRCException {
AltosTelemetry telem = null;
super(bytes);
}
+ double pyro_voltage(int sense) {
+ switch (type()) {
+ case AltosTelemetry.packet_type_mega_data_30v:
+ return AltosConvert.mega_pyro_voltage_30v(sense);
+ default:
+ return AltosConvert.mega_pyro_voltage_15v(sense);
+ }
+ }
+
public void provide_data(AltosDataListener listener) {
super.provide_data(listener);
listener.set_state(state());
listener.set_battery_voltage(AltosConvert.mega_battery_voltage(v_batt()));
- listener.set_pyro_voltage(AltosConvert.mega_pyro_voltage(v_pyro()));
+ listener.set_pyro_voltage(pyro_voltage(v_pyro()));
- listener.set_apogee_voltage(AltosConvert.mega_pyro_voltage(sense(4)));
- listener.set_main_voltage(AltosConvert.mega_pyro_voltage(sense(5)));
+ listener.set_apogee_voltage(pyro_voltage(sense(4)));
+ listener.set_main_voltage(pyro_voltage(sense(5)));
double voltages[] = new double[4];
for (int i = 0; i < 4; i++)
- voltages[i] = AltosConvert.mega_pyro_voltage(sense(i));
+ voltages[i] = pyro_voltage(sense(i));
listener.set_igniter_voltage(voltages);
listener.set_kalman(height_16(), speed()/16.0, acceleration()/16.0);
- listener.set_battery_voltage(AltosConvert.mega_battery_voltage(v_batt()));
+ listener.set_battery_voltage(AltosConvert.metrum_battery_voltage(v_batt()));
- listener.set_apogee_voltage(AltosConvert.mega_pyro_voltage(sense_a()));
- listener.set_main_voltage(AltosConvert.mega_pyro_voltage(sense_m()));
+ listener.set_apogee_voltage(AltosConvert.metrum_pyro_voltage(sense_a()));
+ listener.set_main_voltage(AltosConvert.metrum_pyro_voltage(sense_m()));
}
}
case packet_type_mega_sensor_bmx160:
telem = new AltosTelemetryMegaSensor(bytes, AltosIMU.imu_type_telemega_v4);
break;
- case packet_type_mega_data:
+ case packet_type_mega_data_15v:
+ case packet_type_mega_data_30v:
telem = new AltosTelemetryMegaData(bytes);
break;
case packet_type_metrum_sensor: