Index: Accel.c =================================================================== diff -u -r2e02f26ef19c1da94d289ec693c8820561d9b5d4 -rb016222f4ffa51e29fdb8f7449fb94825ae30670 --- Accel.c (.../Accel.c) (revision 2e02f26ef19c1da94d289ec693c8820561d9b5d4) +++ Accel.c (.../Accel.c) (revision b016222f4ffa51e29fdb8f7449fb94825ae30670) @@ -187,6 +187,27 @@ getFPGAAccelMaxes( &xm, &ym, &zm ); getFPGAAccelStatus( &cnt, &accelFPGAFaultReg ); + // Check if a new calibration is available + if ( TRUE == isNewCalibrationRecordAvailable() ) + { +#ifdef _HD_ + HD_ACCELEROMETER_SENSOR_CAL_RECORD_T cal = getHDAccelerometerSensorCalibrationRecord(); +#endif +#ifdef _DG_ + DG_ACCELEROMETER_SENSOR_CAL_RECORD_T cal = getDGAccelerometerSensorCalibrationRecord(); +#endif + + if ( cal.calibrationTime == 0 ) + { + // TODO - accel calibration invalid fault + } + + // Update accelerometer calibration factors + accelCalOffsets[ ACCEL_AXIS_X ] = cal.accelXOffset; + accelCalOffsets[ ACCEL_AXIS_X ] = cal.accelYOffset; + accelCalOffsets[ ACCEL_AXIS_X ] = cal.accelZOffset; + } + // check fresh sample if ( cnt != accelFPGASampleCtr ) { @@ -587,29 +608,37 @@ { SELF_TEST_STATUS_T result = SELF_TEST_STATUS_IN_PROGRESS; -#ifdef _HD_ - HD_ACCELEROMETER_SENSOR_CAL_RECORD_T cal = getHDAccelerometerSensorCalibrationRecord(); -#endif -#ifdef _DG_ - DG_ACCELEROMETER_SENSOR_CAL_RECORD_T cal = getDGAccelerometerSensorCalibrationRecord(); -#endif - switch ( accelSelfTestState ) { case ACCELEROMETER_SELF_TEST_STATE_START: - - accelCalOffsets[ ACCEL_AXIS_X ] = cal.accelXOffset; - accelCalOffsets[ ACCEL_AXIS_Y ] = cal.accelYOffset; - accelCalOffsets[ ACCEL_AXIS_Z ] = cal.accelZOffset; - accelSelfTestState = ACCELEROMETER_SELF_TEST_STATE_IN_PROGRESS; - - result = SELF_TEST_STATUS_FAILED; - accelSelfTestState = ACCELEROMETER_SELF_TEST_STATE_COMPLETE; -#ifdef _DG_ - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_ACCELEROMETER_SELF_TEST_FAILURE, 0 ) -#else - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_ACCELEROMETER_SELF_TEST_FAILURE, 0 ) -#endif + { +#ifdef _HD_ + HD_ACCELEROMETER_SENSOR_CAL_RECORD_T cal = getHDAccelerometerSensorCalibrationRecord(); +#endif +#ifdef _DG_ + DG_ACCELEROMETER_SENSOR_CAL_RECORD_T cal = getDGAccelerometerSensorCalibrationRecord(); +#endif + + accelCalOffsets[ ACCEL_AXIS_X ] = cal.accelXOffset; + accelCalOffsets[ ACCEL_AXIS_Y ] = cal.accelYOffset; + accelCalOffsets[ ACCEL_AXIS_Z ] = cal.accelZOffset; + + // Ensure calibration has been done for accelerometer + if ( cal.calibrationTime == 0 ) + { + result = SELF_TEST_STATUS_FAILED; + accelSelfTestState = ACCELEROMETER_SELF_TEST_STATE_COMPLETE; +#ifdef _DG_ + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_ACCELEROMETER_SELF_TEST_FAILURE, 0 ) // TODO - use invalid cal fault instead. +#else + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_ACCELEROMETER_SELF_TEST_FAILURE, 0 ) +#endif + } + else + { + accelSelfTestState = ACCELEROMETER_SELF_TEST_STATE_IN_PROGRESS; + } + } break; case ACCELEROMETER_SELF_TEST_STATE_IN_PROGRESS: