diff options
Diffstat (limited to 'altoslib')
| -rw-r--r-- | altoslib/AltosEepromIterable.java | 25 | ||||
| -rw-r--r-- | altoslib/AltosIdleMonitor.java | 68 | 
2 files changed, 53 insertions, 40 deletions
| diff --git a/altoslib/AltosEepromIterable.java b/altoslib/AltosEepromIterable.java index 2ac10e85..986b7a2c 100644 --- a/altoslib/AltosEepromIterable.java +++ b/altoslib/AltosEepromIterable.java @@ -23,15 +23,7 @@ import java.text.*;  public class AltosEepromIterable extends AltosRecordIterable { -	static final int	seen_flight = 1; -	static final int	seen_sensor = 2; -	static final int	seen_temp_volt = 4; -	static final int	seen_deploy = 8; -	static final int	seen_gps_time = 16; -	static final int	seen_gps_lat = 32; -	static final int	seen_gps_lon = 64; - -	static final int	seen_basic = seen_flight|seen_sensor; +	static final int	seen_basic = AltosRecord.seen_flight|AltosRecord.seen_sensor;  	boolean			has_accel;  	boolean			has_gps; @@ -64,7 +56,7 @@ public class AltosEepromIterable extends AltosRecordIterable {  		state.tick = record.tick;  		switch (record.cmd) {  		case AltosLib.AO_LOG_FLIGHT: -			eeprom.seen |= seen_flight; +			eeprom.seen |= AltosRecord.seen_flight;  			state.ground_accel = record.a;  			state.flight_accel = record.a;  			state.flight = record.b; @@ -82,10 +74,10 @@ public class AltosEepromIterable extends AltosRecordIterable {  				state.flight_pres = (state.flight_pres * 15 + state.pres) / 16;  			}  			state.flight_accel = (state.flight_accel * 15 + state.accel) / 16; -			if ((eeprom.seen & seen_sensor) == 0) +			if ((eeprom.seen & AltosRecord.seen_sensor) == 0)  				eeprom.sensor_tick = record.tick - 1;  			state.flight_vel += (state.accel_plus_g - state.accel) * (record.tick - eeprom.sensor_tick); -			eeprom.seen |= seen_sensor; +			eeprom.seen |= AltosRecord.seen_sensor;  			eeprom.sensor_tick = record.tick;  			has_accel = true;  			break; @@ -96,17 +88,17 @@ public class AltosEepromIterable extends AltosRecordIterable {  				eeprom.n_pad_samples++;  				state.ground_pres = state.pres;  			} -			eeprom.seen |= seen_sensor; +			eeprom.seen |= AltosRecord.seen_sensor;  			break;  		case AltosLib.AO_LOG_TEMP_VOLT:  			state.temp = record.a;  			state.batt = record.b; -			eeprom.seen |= seen_temp_volt; +			eeprom.seen |= AltosRecord.seen_temp_volt;  			break;  		case AltosLib.AO_LOG_DEPLOY:  			state.drogue = record.a;  			state.main = record.b; -			eeprom.seen |= seen_deploy; +			eeprom.seen |= AltosRecord.seen_deploy;  			has_ignite = true;  			break;  		case AltosLib.AO_LOG_STATE: @@ -114,6 +106,7 @@ public class AltosEepromIterable extends AltosRecordIterable {  			break;  		case AltosLib.AO_LOG_GPS_TIME:  			eeprom.gps_tick = state.tick; +			eeprom.seen |= AltosRecord.seen_gps_time;  			AltosGPS old = state.gps;  			state.gps = new AltosGPS(); @@ -136,10 +129,12 @@ public class AltosEepromIterable extends AltosRecordIterable {  			has_gps = true;  			break;  		case AltosLib.AO_LOG_GPS_LAT: +			eeprom.seen |= AltosRecord.seen_gps_lat;  			int lat32 = record.a | (record.b << 16);  			state.gps.lat = (double) lat32 / 1e7;  			break;  		case AltosLib.AO_LOG_GPS_LON: +			eeprom.seen |= AltosRecord.seen_gps_lon;  			int lon32 = record.a | (record.b << 16);  			state.gps.lon = (double) lon32 / 1e7;  			break; diff --git a/altoslib/AltosIdleMonitor.java b/altoslib/AltosIdleMonitor.java index ae3b7b06..2c4965ff 100644 --- a/altoslib/AltosIdleMonitor.java +++ b/altoslib/AltosIdleMonitor.java @@ -45,6 +45,42 @@ public class AltosIdleMonitor extends Thread {  		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("MegaMetrum"); +	} + +	boolean has_gps(AltosConfigData config_data) { +		return config_data.product.startsWith("TeleMetrum") || config_data.product.startsWith("MegaMetrum"); +	} + +	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 update_state() throws InterruptedException, TimeoutException {  		AltosRecord	record = null; @@ -55,34 +91,16 @@ public class AltosIdleMonitor extends Thread {  			} else  				link.flush_input();  			config_data = new AltosConfigData(link); -			if (config_data.product.startsWith("TeleMetrum")) { -				record = new AltosSensorTM(link, config_data); -			} else if (config_data.product.startsWith("MegaMetrum")) { -				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; - -				record = record_mm; -			} else +			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 AltosRecord(); -			gps = new AltosGPSQuery(link, config_data); +			if (has_gps(config_data)) +				gps = new AltosGPSQuery(link, config_data);  			record.version = 0;  			record.callsign = config_data.callsign; | 
