Index: firmware/App/Controllers/AirPump.c =================================================================== diff -u -r2338c23df84e1e66b11657e56c8d1f553a4c9a46 -r42ce3a1717fa1afc0089666df23e02bf4e31764a --- firmware/App/Controllers/AirPump.c (.../AirPump.c) (revision 2338c23df84e1e66b11657e56c8d1f553a4c9a46) +++ firmware/App/Controllers/AirPump.c (.../AirPump.c) (revision 42ce3a1717fa1afc0089666df23e02bf4e31764a) @@ -36,6 +36,7 @@ #define AIR_PUMP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) #define DATA_PUBLISH_COUNTER_START_COUNT #define AIR_PUMP_GPIO_PIN 0x04 +#define AIR_PUMP_PERSISTENCE_TIMEOUT ( 10 * MS_PER_SECOND ) typedef enum AirPumpMotorStates { @@ -50,6 +51,7 @@ static AIR_PUMP_STATE_T currentAirPumpState; static U32 airPumpDataPublicationTimerCounter; static OVERRIDE_U32_T airPumpDataPublishInterval = { AIR_PUMP_DATA_PUB_INTERVAL, AIR_PUMP_DATA_PUB_INTERVAL, 0, 0 }; +static AIR_PUMP_MOTOR_STATE_T currentAirPumpMotorState; // ********** private function prototypes ********** @@ -69,6 +71,8 @@ void initAirPump(void) { currentAirPumpState = AIR_PUMP_STATE_INIT; + currentAirPumpMotorState = AIR_PUMP_MOTOR_OFF; + initPersistentAlarm(ALARM_ID_HD_AIR_PUMP_TIMEOUT, 0, AIR_PUMP_PERSISTENCE_TIMEOUT); } /*********************************************************************//** @@ -84,13 +88,19 @@ if ( state < NUM_OF_AIR_PUMP_MOTOR_STATES ) { gioSetBit( hetPORT1, AIR_PUMP_GPIO_PIN, (U32)state ); + currentAirPumpMotorState = state; } else { SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_HD_AIR_PUMP_INVALID_MOTOR_STATE_SELECTED, (U32)state ) } } +static AIR_PUMP_MOTOR_STATE_T getAirPumpMotorState( void ) +{ + return currentAirPumpMotorState; +} + /*********************************************************************//** * @brief * The setAirPumpState function sets the current air pump state machine state. @@ -149,6 +159,12 @@ SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_HD_AIR_PUMP_INVALID_STATE, (U32)currentAirPumpState ) break; } + + if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_AIR_PUMP_TIMEOUT, getAirPumpMotorState() ) ) + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_AIR_PUMP_TIMEOUT, getAirPumpMotorState() ); + } + publishAirPumpData(); }