Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r22176ce95e49213c48454f34ddf5d29b8109f2cb -r740929e7f04220e1a74e1a6f8ce71129f40a7be1 --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 22176ce95e49213c48454f34ddf5d29b8109f2cb) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 740929e7f04220e1a74e1a6f8ce71129f40a7be1) @@ -44,7 +44,7 @@ static U32 valveStateMismatchCounter = 0; ///< Initialize valve state mismatch counter. static U32 pendingValveStateChanges[ NUM_OF_VALVES ]; ///< Delayed (pending) valve state changes. static U32 pendingValveStateChangeCountDowns[ NUM_OF_VALVES ]; ///< Delayed (pending) valve state change count down timers (in task intervals). - + static OVERRIDE_U32_T valveStates[ NUM_OF_VALVES ]; ///< Currently commanded valves states. static OVERRIDE_U32_T valvesStatesPublishInterval = { VALVES_STATE_PUB_INTERVAL, VALVES_STATE_PUB_INTERVAL, 0, 0 }; ///< Interval (in ms/task interval) at which to publish valves state to CAN bus. @@ -53,7 +53,8 @@ static BOOL checkValveStateName( VALVES_T valve, VALVE_STATE_NAMES_T valveStateName ); static U32 convertValveStateNameToValveState(VALVE_STATE_NAMES_T valveStateName); static U16 fromU32ArrayToU16( void ); -static void publishValvesStates( void ); +static void publishValvesStates( void ); +static U32 getValveState( U32 valveID ); /*********************************************************************//** * @brief @@ -204,14 +205,14 @@ break; case VALVE_STATE_R1_C_TO_NC: - if ( ( valveID == VRD ) || ( valveID == VRF ) ) + if ( ( valveID == VRF ) ) { result = TRUE; } break; case VALVE_STATE_R2_C_TO_NO: - if ( ( valveID == VRD ) || ( valveID == VRF ) ) + if ( ( valveID == VRF ) ) { result = TRUE; } @@ -246,7 +247,7 @@ U32 i; // flag valves that are currently commanded to be energized - for ( i = 0; i < NUM_OF_VALVES; i++) + for ( i = 0; i < NUM_OF_VALVES; i++ ) { result |= ( getValveState( i ) == ENERGIZED ? 0x0001 << i : 0 ); } @@ -370,7 +371,7 @@ if ( valveID < NUM_OF_VALVES ) { - if ( checkValveStateName( valveID, valveStateName ) ) + if ( TRUE == checkValveStateName( valveID, valveStateName ) ) { // If a delayed state change is already pending for this valve, execute it now before setting a new delayed state change if ( pendingValveStateChangeCountDowns[ valveID ] > 0 ) @@ -393,26 +394,61 @@ /*********************************************************************//** * @brief - * The getValveState function gets the current valve state for given valve. + * The getValveStateName function gets the current valve state enum for given valve. * @details Inputs: valveStates[] * @details Outputs: none * @param valveID ID of valve to get state for - * @return the current valve state for given valve + * @return the current valve state for given valve in enum *************************************************************************/ -U32 getValveState( U32 valveID ) -{ - U32 valveState = DEENERGIZED; +VALVE_STATE_NAMES_T getValveStateName( VALVES_T valveID ) +{ + // Initialized per CppCheck. + VALVE_STATE_NAMES_T name = NUM_OF_VALVE_STATES; if ( valveID < NUM_OF_VALVES ) { - valveState = getU32OverrideValue( &valveStates[ valveID ] ); + U32 valveState = getU32OverrideValue( &valveStates[ valveID ] ); + + // Convert the bit status of the valve to the valve name + switch ( valveID ) + { + case VPI: + case VBF: + case VRD1: + case VRD2: + case VSP: + name = ( DEENERGIZED == valveState ? VALVE_STATE_CLOSED : VALVE_STATE_OPEN ); + break; + + case VPD: + name = ( DEENERGIZED == valveState ? VALVE_STATE_DRAIN_C_TO_NO : VALVE_STATE_OPEN_C_TO_NC ); + break; + + case VPO: + name = ( DEENERGIZED == valveState ? VALVE_STATE_NOFILL_C_TO_NO : VALVE_STATE_FILL_C_TO_NC ); + break; + + case VDR: + case VRC: + name = ( DEENERGIZED == valveState ? VALVE_STATE_DRAIN_C_TO_NO : VALVE_STATE_RECIRC_C_TO_NC ); + break; + + case VRI: + case VRO: + name = ( DEENERGIZED == valveState ? VALVE_STATE_R1_C_TO_NO : VALVE_STATE_R2_C_TO_NC ); + break; + + case VRF: + name = ( DEENERGIZED == valveState ? VALVE_STATE_R2_C_TO_NO : VALVE_STATE_R1_C_TO_NC ); + break; + } } else { SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_ID, valveID ) } - return valveState; + return name; } /*********************************************************************//** @@ -435,6 +471,30 @@ valvesStatesPublicationTimerCounter = 0; } +} + +/*********************************************************************//** + * @brief + * The getValveState function gets the current valve state for given valve. + * @details Inputs: valveStates[] + * @details Outputs: none + * @param valveID ID of valve to get state for + * @return the current valve state for given valve + *************************************************************************/ +static U32 getValveState( U32 valveID ) +{ + U32 valveState = DEENERGIZED; + + if ( valveID < NUM_OF_VALVES ) + { + valveState = getU32OverrideValue( &valveStates[ valveID ] ); + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_ID, valveID ) + } + + return valveState; } @@ -508,9 +568,9 @@ { if ( TRUE == isTestingActivated() ) { - result = TRUE; - valveStates[ valveID ].ovData = value; - valveStates[ valveID ].override = OVERRIDE_KEY; + valveStates[ valveID ].ovData = value; + valveStates[ valveID ].override = OVERRIDE_KEY; + result = TRUE; } }