Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -rc7dcb245c2378b1c96eeaa02f120f61dff598b11 -r2205857f59dd884c4af450239381387cfb560c2e --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision c7dcb245c2378b1c96eeaa02f120f61dff598b11) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 2205857f59dd884c4af450239381387cfb560c2e) @@ -31,33 +31,33 @@ // ********** private definitions ********** -#define DEENERGIZED 0 ///< 0 for de-energized valve. -#define ENERGIZED 1 ///< 1 for energized valve. -#define ALL_VALVES_DEENERGIZED 0x0000 ///< 0 in U16 bit field for all valves. +#define DEENERGIZED 0 ///< 0 for de-energized valve. +#define ENERGIZED 1 ///< 1 for energized valve. +#define ALL_VALVES_DEENERGIZED 0x0000 ///< 0 in U16 bit field for all valves. -#define MAX_VALVE_STATE_MISMATCH_TIMER_COUNT (100 / TASK_PRIORITY_INTERVAL ) ///< Maximum time commanded valves state can fail to match read back valve states in a row. +#define MAX_VALVE_STATE_MISMATCH_TIMER_COUNT (100 / TASK_PRIORITY_INTERVAL ) ///< Maximum time commanded valves state can fail to match read back valve states in a row. -#define VALVES_STATE_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval ( ms / task time ) at which valves states are published on CAN bus. -#define DATA_PUBLISH_COUNTER_START_COUNT 50 ///< Data publish counter start count. +#define VALVES_STATE_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval ( ms / task time ) at which valves states are published on CAN bus. +#define DATA_PUBLISH_COUNTER_START_COUNT 50 ///< Data publish counter start count. /// Payload record structure for valve open/close request typedef struct { - U32 valveID; ///< ValveID ( valid range 0 to 28 ) - U32 valveState; ///< Valve state ( Open : 0, closed :1) + U32 valveID; ///< ValveID ( valid range 0 to 28 ) + U32 valveState; ///< Valve state ( Open : 0, closed :1) } VALVE_CMD_PAYLOAD_T; // ********** private data ********** -static U32 valvesStatesPublicationTimerCounter; ///< Timer counter used to schedule valve state publication to CAN bus. -static U16 commandedValvesStates; ///< Initialize commanded valves states bit field. -static U32 valveStateMismatchTimerCounter; ///< Initialize valve state mismatch timer. -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 U32 valvesStatesPublicationTimerCounter; ///< Timer counter used to schedule valve state publication to CAN bus. +static U16 commandedValvesStates; ///< Initialize commanded valves states bit field. +static U32 valveStateMismatchTimerCounter; ///< Initialize valve state mismatch timer. +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 valveSensedStates[ NUM_OF_VALVES ]; ///< Valve sensed states override. -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. +static OVERRIDE_U32_T valveStates[ NUM_OF_VALVES ]; ///< Currently commanded valves states. +static OVERRIDE_U32_T valveSensedStates[ NUM_OF_VALVES ]; ///< Valve sensed states override. +static OVERRIDE_U32_T valvesStatesPublishInterval; ///< Interval (in ms/task interval) at which to publish valves state to CAN bus. // ********** private function prototypes ********** @@ -92,9 +92,13 @@ valveSensedStates[ valve ].override = OVERRIDE_RESET; } - // initialize timer counters + // initialize time intervals and timer counters valveStateMismatchTimerCounter = 0; - valvesStatesPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; // reset valves states publication timer + valvesStatesPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; // reset valves states publication timer + valvesStatesPublishInterval.data = VALVES_STATE_PUB_INTERVAL; + valvesStatesPublishInterval.ovData = VALVES_STATE_PUB_INTERVAL; + valvesStatesPublishInterval.ovInitData = 0; + valvesStatesPublishInterval.override = OVERRIDE_RESET; // initially set all valves to de-energized state via FPGA readCommandedValveStates(); @@ -122,8 +126,8 @@ { valveStateMismatchTimerCounter++; // increment valve state mismatch counter by 1 if ( valveStateMismatchTimerCounter > MAX_VALVE_STATE_MISMATCH_TIMER_COUNT ) - { -// activateAlarmNoData( ALARM_ID_RO_VALVE_CONTROL_FAILURE ); + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_VALVE_CONTROL_FAILURE, (U32)readValvesStates, (U32)commandedValvesStates ) } } else @@ -181,7 +185,7 @@ * name to its corresponding de-energized (0) or energized (1) valve state. * @details \b Inputs: none * @details \b Outputs: none - * @details \b Alarm : ALARM_ID_RO_SOFTWARE_FAULT when invalid valve state name passed + * @details \b Alarm : ALARM_ID_RO_SOFTWARE_FAULT when invalid valve state name given * @param valveStateName valve state name enumeration to convert to energized/de-energized * @return converted valve state for given valve state name *************************************************************************/ @@ -198,7 +202,7 @@ } else { -// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_STATE_NAME, valveStateName ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_STATE_NAME, (U32)valveStateName ) } return vState; @@ -209,7 +213,8 @@ * The setValveState function sets the valve state for given valve. * @details \b Inputs: none * @details \b Outputs: valveStates[], pendingValveStateChanges[], pendingValveStateChangeCountDowns[] - * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT when invalid valve ID passed + * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT when invalid valve ID or + * valve state given. * @param valveID ID of valve to set state for * @param valveStateName name of valve state to set given valve to * @return TRUE if new valve state is set for given valve ID, FALSE if not. @@ -230,12 +235,12 @@ } else { -// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_STATE, valveID ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_STATE1, valveID ) } } else { -// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_ID, valveID ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_ID1, valveID ) } return result; @@ -247,7 +252,8 @@ * after a given delay. * @details \b Inputs: pendingValveStateChangeCountDowns[] * @details \b Outputs: pendingValveStateChangeCountDowns[], pendingValveStateChangeCountDowns[] - * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT when invalid valve ID passed + * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT when invalid valve ID or + * valve state given. * @param valveID ID of valve to set state for * @param valveStateName name of valve state to set given valve to * @param delayMs delay duration (in ms) before actuation @@ -273,12 +279,12 @@ } else { -// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_STATE, valveID ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_STATE2, valveID ) } } else { -// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_ID, valveID ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_ID2, valveID ) } return result; @@ -290,7 +296,7 @@ * given valve. * @details \b Inputs: valveStates[] * @details \b Outputs: none - * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT when invalid valve ID passed. + * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT when invalid valve ID given. * @param valveID ID of valve to get state for * @return the current valve state for given valve in enum *************************************************************************/ @@ -312,7 +318,7 @@ } else { -// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_ID, valveID ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_ID3, valveID ) } return name; @@ -337,7 +343,7 @@ } else { -// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_ID, valveID ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_ID4, valveID ) } return valveState; @@ -366,7 +372,7 @@ data.valvesSensedState[ valve ] = (U08)getValveStateName( (VALVES_T)valve ); } -// broadcastData( MSG_ID_RO_VALVES_STATES_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( RO_VALVES_DATA_T ) ); + broadcastData( MSG_ID_RO_VALVES_STATES_DATA, COMM_BUFFER_OUT_CAN_RO_BROADCAST, (U08*)&data, sizeof( RO_VALVES_DATA_T ) ); valvesStatesPublicationTimerCounter = 0; } @@ -429,40 +435,4 @@ return result; } -/*********************************************************************//** - * @brief - * The testValveOpenCloseStateOverride function overrides the value of the - * specified valve with a given value. - * @details \b Inputs: tester logged in - * @details \b Outputs: valveStates[] - * @param message set message from Dialin which includes the valve Id to set - * and the state to set the valves to. - * @return TRUE if set request is successful, FALSE if not - *************************************************************************/ -BOOL testValveOpenCloseStateOverride( MESSAGE_T *message ) -{ - BOOL result = FALSE; - - // Verify tester has logged in with TD - if ( TRUE == isTestingActivated() ) - { - // Verify payload length is valid - if ( sizeof( VALVE_CMD_PAYLOAD_T ) == message->hdr.payloadLen ) - { - VALVE_CMD_PAYLOAD_T payload; - - memcpy( &payload, message->payload, sizeof(VALVE_CMD_PAYLOAD_T) ); - - if ( ( (VALVES_T)payload.valveID < NUM_OF_VALVES ) && - ( (VALVE_STATE_NAMES_T)payload.valveState < NUM_OF_VALVE_STATES ) ) - { - setValveState( (VALVES_T)payload.valveID, (VALVE_STATE_NAMES_T)payload.valveState ); - result = TRUE; - } - } - } - - return result; -} - /**@}*/