Index: firmware/App/Monitors/Level.c =================================================================== diff -u -rc7dcb245c2378b1c96eeaa02f120f61dff598b11 -r2205857f59dd884c4af450239381387cfb560c2e --- firmware/App/Monitors/Level.c (.../Level.c) (revision c7dcb245c2378b1c96eeaa02f120f61dff598b11) +++ firmware/App/Monitors/Level.c (.../Level.c) (revision 2205857f59dd884c4af450239381387cfb560c2e) @@ -7,15 +7,15 @@ * * @file Level.c * -* @author (last) Vinayakam Mani -* @date (last) 11-Oct-2024 +* @author (last) Sean Nash +* @date (last) 09-Nov-2024 * -* @author (original) Vinayakam Mani -* @date (original) 11-Oct-2024 +* @author (original) Sean Nash +* @date (original) 09-Nov-2024 * ***************************************************************************/ -#include "FpgaDD.h" +#include "FpgaRO.h" #include "Level.h" #include "MessageSupport.h" #include "Messaging.h" @@ -44,8 +44,7 @@ // ********** private data ********** static U32 levelsDataPublicationCounter; ///< Level data publication counter. -static OVERRIDE_U32_T levelsDataPublishInterval = { LEVEL_DATA_PUB_INTERVAL, - LEVEL_DATA_PUB_INTERVAL, 0, 0 }; ///< Interval (in ms) at which to publish Level data to CAN bus. +static OVERRIDE_U32_T levelsDataPublishInterval; ///< Interval (in ms) at which to publish Level data to CAN bus. static LEVEL_STATUS_T levelsStatus[ NUM_OF_LEVELS ]; ///< Level status array. // ********** private function prototypes ********** @@ -54,119 +53,98 @@ /*********************************************************************//** * @brief - * The initLevels function initializes the level module. + * The initLevels function initializes the levels unit. * @details \b Inputs: none * @details \b Outputs: Level unit variables initialized. * @return none *************************************************************************/ void initLevels( void ) { - U32 i; + U32 level; levelsDataPublicationCounter = DATA_PUBLISH_COUNTER_START_COUNT; // Initialize all the Level - for ( i = 0; i < NUM_OF_LEVELS; i++ ) + for ( level = 0; level < NUM_OF_LEVELS; level++ ) { - levelsStatus[ i ].status.data = (U32)STATE_HIGH; - levelsStatus[ i ].status.ovData = (U32)STATE_HIGH; - levelsStatus[ i ].status.ovInitData = (U32)STATE_HIGH; - levelsStatus[ i ].status.override = OVERRIDE_RESET; - levelsStatus[ i ].debounceStartTime = 0; - levelsStatus[ i ].debounceTime = LEVEL_DEBOUNCE_TIME_MS; + levelsStatus[ level ].status.data = (U32)STATE_HIGH; + levelsStatus[ level ].status.ovData = (U32)STATE_HIGH; + levelsStatus[ level ].status.ovInitData = (U32)STATE_HIGH; + levelsStatus[ level ].status.override = OVERRIDE_RESET; + levelsStatus[ level ].debounceStartTime = 0; + levelsStatus[ level ].debounceTime = LEVEL_DEBOUNCE_TIME_MS; } + levelsDataPublishInterval.data = LEVEL_DATA_PUB_INTERVAL; + levelsDataPublishInterval.ovData = LEVEL_DATA_PUB_INTERVAL; + levelsDataPublishInterval.ovInitData = 0; + levelsDataPublishInterval.override = OVERRIDE_RESET; } /*********************************************************************//** * @brief * The execLevels function executes the floater and level sensor states. * @details \b Inputs: level sensor and floater reading from FPGA * @details \b Outputs: levelStatus - * @details \b Alarms: ALARM_ID_DD_SOFTWARE_FAULT when invalid level sensor - * executed. + * @details \b Alarms: ALARM_ID_RO_SOFTWARE_FAULT when invalid level sensor is set. * @return none *************************************************************************/ void execLevels( void ) { - U32 i; + U32 level; U32 currentLevelStatus = 0; - for ( i = 0; i < NUM_OF_LEVELS; i++ ) + for ( level = 0; level < NUM_OF_LEVELS; level++ ) { // Get the current level status - switch ( i ) - { - // Process the status of the Level - case FLOATER_1: - currentLevelStatus = ( getFPGAFloater1Status() != 0 ? STATE_LOW : STATE_MEDIUM ); - break; - - case FLOATER_2: - currentLevelStatus = ( getFPGAFloater2Status() != 0 ? STATE_MEDIUM : STATE_HIGH ); - break; - - case BICARB_LEVEL: - currentLevelStatus = ( getFPGALevelSensor1() != 0 ? STATE_LOW : STATE_HIGH ); - break; - - case SPENT_DIALYSATE_LEVEL: - currentLevelStatus = ( getFPGALevelSensor2() != 0 ? STATE_LOW : STATE_HIGH ); - break; - -#ifndef _VECTORCAST_ - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_LEVEL_SELECTED, i ); - break; -#endif - } - - // Check if the current level status is not the same as the recorded data - if ( currentLevelStatus != levelsStatus[ i ].status.data ) - { - // If the debounce time is 0, start the timer - if ( 0 == levelsStatus[ i ].debounceStartTime ) - { - levelsStatus[ i ].debounceStartTime = getMSTimerCount(); - } - // If the debounce time has been elapsed, update the level sensor status to the new status - else if ( TRUE == didTimeout( levelsStatus[ i ].debounceStartTime, levelsStatus[ i ].debounceTime ) ) - { - switch ( i ) - { - case FLOATER_1: - SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_FLOATER_1_LEVEL_CHANGE, (U32)levelsStatus[ i ].status.data, (U32)currentLevelStatus ); - break; - - case FLOATER_2: - SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_FLOATER_2_LEVEL_CHANGE, (U32)levelsStatus[ i ].status.data, (U32)currentLevelStatus ); - break; - - case BICARB_LEVEL: - SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_BICARB_LEVEL_CHANGE, (U32)levelsStatus[ i ].status.data, (U32)currentLevelStatus ); - break; - - case SPENT_DIALYSATE_LEVEL: - SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_SPENT_DIALYSATE_LEVEL_CHANGE, (U32)levelsStatus[ i ].status.data, (U32)currentLevelStatus ); - break; - -#ifndef _VECTORCAST_ - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_LEVEL_SELECTED, i ); - break; -#endif - } - - levelsStatus[ i ].debounceStartTime = 0; - levelsStatus[ i ].status.data = currentLevelStatus; - } - } - else - { - levelsStatus[ i ].debounceStartTime = 0; - } +// switch ( level ) +// { +// // Process the status of the Level +// case FLOATER: +// currentLevelStatus = ( getFPGAFloater1Status() != 0 ? STATE_LOW : STATE_MEDIUM ); +// break; +// +//#ifndef _VECTORCAST_ +// default: +// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_LEVEL_SELECTED, level ); +// break; +//#endif +// } +// +// // Check if the current level status is not the same as the recorded data +// if ( currentLevelStatus != levelsStatus[ level ].status.data ) +// { +// // If the debounce time is 0, start the timer +// if ( 0 == levelsStatus[ level ].debounceStartTime ) +// { +// levelsStatus[ level ].debounceStartTime = getMSTimerCount(); +// } +// // If the debounce time has been elapsed, update the level sensor status to the new status +// else if ( TRUE == didTimeout( levelsStatus[ level ].debounceStartTime, levelsStatus[ level ].debounceTime ) ) +// { +// switch ( level ) +// { +// case FLOATER: +// SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_FLOATER_1_LEVEL_CHANGE, (U32)levelsStatus[ level ].status.data, (U32)currentLevelStatus ); +// break; +// +//#ifndef _VECTORCAST_ +// default: +// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_LEVEL_SELECTED, level ); +// break; +//#endif +// } +// +// levelsStatus[ level ].debounceStartTime = 0; +// levelsStatus[ level ].status.data = currentLevelStatus; +// } +// } +// else +// { +// levelsStatus[ level ].debounceStartTime = 0; +// } } - publishLevelsData(); +// publishLevelsData(); } /*********************************************************************//** @@ -179,28 +157,28 @@ * @param levelId which is the sensor that its status is requested * @return level status *************************************************************************/ -LEVEL_STATE_T getLevelStatus( LELVEL_T levelId ) -{ - U32 status = 0; +//LEVEL_STATE_T getLevelStatus( LELVEL_T levelId ) +//{ +// U32 status = 0; +// +// if ( levelId < NUM_OF_LEVELS ) +// { +// // Assume there is no override +// status = levelsStatus[ levelId ].status.data; +// +// if ( OVERRIDE_KEY == levelsStatus[ levelId ].status.override ) +// { +// status = levelsStatus[ levelId ].status.ovData; +// } +// } +// else +// { +// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_DD_INVALID_LEVEL_ID, (U32)levelId ) +// } +// +// return (LEVEL_STATE_T)status; +//} - if ( levelId < NUM_OF_LEVELS ) - { - // Assume there is no override - status = levelsStatus[ levelId ].status.data; - - if ( OVERRIDE_KEY == levelsStatus[ levelId ].status.override ) - { - status = levelsStatus[ levelId ].status.ovData; - } - } - else - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_DD_INVALID_LEVEL_ID, (U32)levelId ) - } - - return (LEVEL_STATE_T)status; -} - /*********************************************************************//** * @brief * The publishLevelsData function broadcasts the level data at the @@ -211,24 +189,24 @@ * sensors data. * @return none *************************************************************************/ -static void publishLevelsData( void ) -{ - if ( ++levelsDataPublicationCounter >= getU32OverrideValue( &levelsDataPublishInterval ) ) - { - LEVEL_DATA_T data; +//static void publishLevelsData( void ) +//{ +// if ( ++levelsDataPublicationCounter >= getU32OverrideValue( &levelsDataPublishInterval ) ) +// { +// LEVEL_DATA_T data; +// +// data.floater1Level = (U32)getLevelStatus( FLOATER_1 ); +// data.floater2Level = (U32)getLevelStatus( FLOATER_2 ); +// data.bicarbLevel = (U32)getLevelStatus( BICARB_LEVEL ); +// data.spentDialysateLevel = (U32)getLevelStatus( SPENT_DIALYSATE_LEVEL ); +// +// levelsDataPublicationCounter = 0; +// +// broadcastData( MSG_ID_DD_LEVEL_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( LEVEL_DATA_T ) ); +// } +//} - data.floater1Level = (U32)getLevelStatus( FLOATER_1 ); - data.floater2Level = (U32)getLevelStatus( FLOATER_2 ); - data.bicarbLevel = (U32)getLevelStatus( BICARB_LEVEL ); - data.spentDialysateLevel = (U32)getLevelStatus( SPENT_DIALYSATE_LEVEL ); - levelsDataPublicationCounter = 0; - - broadcastData( MSG_ID_DD_LEVEL_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( LEVEL_DATA_T ) ); - } -} - - /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ @@ -244,13 +222,13 @@ * (in ms) to override the level data broadcast interval to. * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testLevelsDataPublishIntervalOverride( MESSAGE_T *message ) -{ - BOOL result = u32BroadcastIntervalOverride( message, &levelsDataPublishInterval, TASK_PRIORITY_INTERVAL ); +//BOOL testLevelsDataPublishIntervalOverride( MESSAGE_T *message ) +//{ +// BOOL result = u32BroadcastIntervalOverride( message, &levelsDataPublishInterval, TASK_PRIORITY_INTERVAL ); +// +// return result; +//} - return result; -} - /*********************************************************************//** * @brief * The testLevelStatusOverride function sets the override status @@ -261,11 +239,11 @@ * the level sensor to override and the state to override the level sensor to. * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testLevelStatusOverride( MESSAGE_T *message ) -{ - BOOL result = u32ArrayOverride( message, &levelsStatus[0].status, NUM_OF_LEVELS - 1, 0, NUM_OF_LEVELS_STATES -1 ); +//BOOL testLevelStatusOverride( MESSAGE_T *message ) +//{ +// BOOL result = u32ArrayOverride( message, &levelsStatus[0].status, NUM_OF_LEVELS - 1, 0, NUM_OF_LEVELS_STATES -1 ); +// +// return result; +//} - return result; -} - /**@}*/