diff options
Diffstat (limited to 'altoslib/AltosTelemetryMegaSensor.java')
| -rw-r--r-- | altoslib/AltosTelemetryMegaSensor.java | 88 | 
1 files changed, 46 insertions, 42 deletions
| diff --git a/altoslib/AltosTelemetryMegaSensor.java b/altoslib/AltosTelemetryMegaSensor.java index 2dfc455a..4c64b554 100644 --- a/altoslib/AltosTelemetryMegaSensor.java +++ b/altoslib/AltosTelemetryMegaSensor.java @@ -16,64 +16,68 @@   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.   */ -package org.altusmetrum.altoslib_11; +package org.altusmetrum.altoslib_12;  public class AltosTelemetryMegaSensor extends AltosTelemetryStandard { -	int	accel; -	int	pres; -	int	temp; +	int	orient() { return int8(5); } -	int	accel_x; -	int	accel_y; -	int	accel_z; +	int	accel() { return int16(6); } +	int	pres() { return int32(8); } +	int	temp() { return int16(12); } -	int	gyro_x; -	int	gyro_y; -	int	gyro_z; +	int	accel_x() { return int16(14); } +	int	accel_y() { return int16(16); } +	int	accel_z() { return int16(18); } -	int	mag_x; -	int	mag_y; -	int	mag_z; +	int	gyro_x() { return int16(20); } +	int	gyro_y() { return int16(22); } +	int	gyro_z() { return int16(24); } -	int	orient; +	int	mag_x() { return int16(26); } +	int	mag_z() { return int16(28); } +	int	mag_y() { return int16(30); } -	public AltosTelemetryMegaSensor(int[] bytes) { +	public AltosTelemetryMegaSensor(int[] bytes) throws AltosCRCException {  		super(bytes); +	} -		orient	      = int8(5); -		accel         = int16(6); -		pres          = int32(8); -		temp          = int16(12); +	public void provide_data(AltosDataListener listener) { +		super.provide_data(listener); -		accel_x	      = int16(14); -		accel_y	      = int16(16); -		accel_z	      = int16(18); +		AltosCalData cal_data = listener.cal_data(); -		gyro_x	      = int16(20); -		gyro_y	      = int16(22); -		gyro_z	      = int16(24); +		listener.set_acceleration(cal_data.acceleration(accel())); +		listener.set_pressure(pres()); +		listener.set_temperature(temp() / 100.0); -		mag_x	      = int16(26); -		mag_y	      = int16(28); -		mag_z	      = int16(30); -	} +		listener.set_orient(orient()); -	public void update_state(AltosState state) { -		super.update_state(state); +		/* XXX we have no calibration data for these values */ -		state.set_accel(accel); -		state.set_pressure(pres); -		state.set_temperature(temp / 100.0); +		if (cal_data.accel_zero_along == AltosLib.MISSING) +			cal_data.set_accel_zero(0, 0, 0); +		if (cal_data.gyro_zero_roll == AltosLib.MISSING) +			cal_data.set_gyro_zero(0, 0, 0); -		state.set_orient(orient); +		int	accel_along = accel_y(); +		int	accel_across = accel_x(); +		int	accel_through = accel_z(); +		int	gyro_roll = gyro_y(); +		int	gyro_pitch = gyro_x(); +		int	gyro_yaw = gyro_z(); -		state.set_imu(new AltosIMU(accel_y,	/* along */ -					   accel_x,	/* across */ -					   accel_z,	/* through */ -					   gyro_y,	/* along */ -					   gyro_x,	/* across */ -					   gyro_z));	/* through */ +		int	mag_along = mag_y(); +		int	mag_across = mag_x(); +		int	mag_through = mag_z(); -		state.set_mag(new AltosMag(mag_x, mag_y, mag_z)); +		listener.set_accel(cal_data.accel_along(accel_along), +				   cal_data.accel_across(accel_across), +				   cal_data.accel_through(accel_through)); +		listener.set_gyro(cal_data.gyro_roll(gyro_roll), +				  cal_data.gyro_pitch(gyro_pitch), +				  cal_data.gyro_yaw(gyro_yaw)); +		listener.set_mag(cal_data.mag_along(mag_along), +				 cal_data.mag_across(mag_across), +				 cal_data.mag_through(mag_through));  	}  } | 
