Index: Accel.c =================================================================== diff -u -rb4e91eb8049e94b0937e341880a90327113fce56 -r569a9f44c93e6489f1dc1a62a7937e100ea344c2 --- Accel.c (.../Accel.c) (revision b4e91eb8049e94b0937e341880a90327113fce56) +++ Accel.c (.../Accel.c) (revision 569a9f44c93e6489f1dc1a62a7937e100ea344c2) @@ -37,7 +37,7 @@ #define MAX_ACCEL_VECTOR_LENGTH_ERROR ( 0.1 ) ///< POST test looks at vector length at presumably stable moment - should be 1 +/- 0.1 #define MAX_TILT_ANGLE ( 7.0 ) ///< maximum tilt of system before alarm. #define MAX_TILT_PERSISTENCE ( 2 * MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< maximum time (in task intervals) that a tilt in excess of limit can persist before alarm -#define MAX_SHOCK_ACCELERATION ( 10.0 ) ///< maximum shock (acceleration) measured on any axis before alarm. +#define MAX_SHOCK_ACCELERATION ( 2.0 ) ///< maximum shock (acceleration) measured on any axis before alarm. /// Enumeration of accelerometer monitor states. typedef enum Accelerometer_States @@ -178,14 +178,22 @@ { if ( ++accelNoNewSampleTimerCounter > NO_NEW_ACCEL_SAMPLES_TIMEOUT ) { - // TODO - accelerometer fault +#ifdef _DG_ + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_ACCELEROMETER_FAILURE, 0 ) +#else + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_ACCELEROMETER_FAILURE, 0 ) +#endif } } // check error status if ( accelFPGAFaultReg != 0 ) { - // TODO - accelerometer fault +#ifdef _DG_ + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_ACCELEROMETER_FAILURE, 1 ) +#else + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_ACCELEROMETER_FAILURE, 1 ) +#endif } // apply calibration (axis offsets) @@ -432,11 +440,26 @@ // excessive tilt must persist before triggering alarm if ( ++accelTiltErrorTimerCounter > MAX_TILT_PERSISTENCE ) { - // TODO - tilt alarm +#ifdef _DG_ + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_EXCESSIVE_TILT, x, y ) +#else + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_EXCESSIVE_TILT, x, y ) +#endif } + } + else + { + if ( accelTiltErrorTimerCounter > 0 ) + { + accelTiltErrorTimerCounter--; + } else { - accelTiltErrorTimerCounter = 0; +#ifdef _DG_ + clearAlarm( ALARM_ID_DG_EXCESSIVE_TILT ); +#else + clearAlarm( ALARM_ID_HD_EXCESSIVE_TILT ); +#endif } } } @@ -451,16 +474,22 @@ *************************************************************************/ static void checkForShockError( void ) { - F32 maxX = getMaxAccelAxis( ACCEL_AXIS_X ); - F32 maxY = getMaxAccelAxis( ACCEL_AXIS_X ); - F32 maxZ = getMaxAccelAxis( ACCEL_AXIS_X ) - 1.0; // when system level, expect Z axis to be at 1 g normally + F32 maxX = FABS(getMaxAccelAxis( ACCEL_AXIS_X )); + F32 maxY = FABS(getMaxAccelAxis( ACCEL_AXIS_X )); + F32 maxZ = FABS(getMaxAccelAxis( ACCEL_AXIS_X ) - 1.0); // when system level, expect Z axis to be at 1 g normally + F32 maxAll = MAX(maxX, maxY); + // determine largest acceleration + maxAll = MAX(maxAll, maxZ); + // has system just experienced an excessive shock? - if ( ( FABS( maxX ) > MAX_SHOCK_ACCELERATION ) || - ( FABS( maxY ) > MAX_SHOCK_ACCELERATION ) || - ( FABS( maxZ ) > MAX_SHOCK_ACCELERATION ) ) + if ( maxAll > MAX_SHOCK_ACCELERATION ) { - // TODO - shock alarm +#ifdef _DG_ + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_DG_SHOCK, maxAll ) +#else + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_HD_SHOCK, maxAll ) +#endif } } @@ -492,9 +521,14 @@ accelSelfTestState = ACCELEROMETER_SELF_TEST_STATE_IN_PROGRESS; } else - { + { // shouldn't get here - should have failed NV-Data POST prior 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 } } break; @@ -510,6 +544,11 @@ else { result = SELF_TEST_STATUS_FAILED; +#ifdef _DG_ + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_DG_ACCELEROMETER_SELF_TEST_FAILURE, vectorLen ) +#else + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_HD_ACCELEROMETER_SELF_TEST_FAILURE, vectorLen ) +#endif } accelSelfTestState = ACCELEROMETER_SELF_TEST_STATE_COMPLETE; }