Index: firmware/App/Monitors/Level.c =================================================================== diff -u -rbce6e6d1cfb6e8a0b186419416460ead3a44e5e1 -r8c5ca1982c53f4702c6f019ce9bcfedb9e513548 --- firmware/App/Monitors/Level.c (.../Level.c) (revision bce6e6d1cfb6e8a0b186419416460ead3a44e5e1) +++ firmware/App/Monitors/Level.c (.../Level.c) (revision 8c5ca1982c53f4702c6f019ce9bcfedb9e513548) @@ -28,7 +28,9 @@ */ // ********** private definitions ********** - +#define FPGA_LEVEL_LOW 4 ///< Floater low level status +#define FPGA_LEVEL_MEDIUM 5 ///< Floater medium level status +#define FPGA_LEVEL_HIGH 7 ///< Floater high level status #define LEVEL_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the level data is published on the CAN bus. #define LEVEL_DEBOUNCE_TIME_MS ( MS_PER_SECOND / 10 ) ///< Level debounce time in milliseconds. #define DATA_PUBLISH_COUNTER_START_COUNT 7 ///< Data publish counter start count. @@ -37,6 +39,7 @@ typedef struct { OVERRIDE_U32_T status; ///< Level status. + U32 priorRawLevel; ///< Prior level state (not debounced). U32 debounceStartTime; ///< Debounce start time. U32 debounceTime; ///< Debounce time } LEVEL_STATUS_T; @@ -68,12 +71,13 @@ // Initialize all the Level for ( i = 0; i < NUM_OF_LEVELS; i++ ) { - levelsStatus[ i ].status.data = (U32)STATE_HIGH; - levelsStatus[ i ].status.ovData = (U32)STATE_HIGH; - levelsStatus[ i ].status.ovInitData = (U32)STATE_HIGH; + levelsStatus[ i ].status.data = (U32)LEVEL_STATE_HIGH; + levelsStatus[ i ].status.ovData = (U32)LEVEL_STATE_HIGH; + levelsStatus[ i ].status.ovInitData = (U32)LEVEL_STATE_HIGH; levelsStatus[ i ].status.override = OVERRIDE_RESET; levelsStatus[ i ].debounceStartTime = 0; levelsStatus[ i ].debounceTime = LEVEL_DEBOUNCE_TIME_MS; + levelsStatus[ i ].priorRawLevel = (U32)LEVEL_STATE_HIGH; } } @@ -97,22 +101,31 @@ switch ( i ) { // Process the status of the Level - case FLOATER_1: - //currentLevelStatus = ( getFPGAFloater1Status() != 0 ? STATE_LOW : STATE_MEDIUM ); - currentLevelStatus = ( getFPGAFloater1Status() != TRUE ? STATE_LOW : STATE_HIGH ); + case FLOATER_LEVEL: + if ( FPGA_LEVEL_LOW == getFPGAFloater1Status() ) + { + currentLevelStatus = LEVEL_STATE_LOW ; + } + else if ( FPGA_LEVEL_MEDIUM == getFPGAFloater1Status() ) + { + currentLevelStatus = LEVEL_STATE_MEDIUM ; + } + else if ( FPGA_LEVEL_HIGH == getFPGAFloater1Status() ) + { + currentLevelStatus = LEVEL_STATE_HIGH ; + } + else + { + // Handle invalid level - alarm + } break; - case FLOATER_2: - // TODO: Commenting for alpha protoype - //currentLevelStatus = ( getFPGAFloater2Status() != 0 ? STATE_MEDIUM : STATE_HIGH ); - break; - case BICARB_LEVEL: - currentLevelStatus = ( getFPGALevelSensor1() != 0 ? STATE_LOW : STATE_HIGH ); + currentLevelStatus = ( getFPGALevelSensor1() != 0 ? LEVEL_STATE_LOW : LEVEL_STATE_HIGH ); break; case SPENT_DIALYSATE_LEVEL: - currentLevelStatus = ( getFPGALevelSensor2() != 0 ? STATE_LOW : STATE_HIGH ); + currentLevelStatus = ( getFPGALevelSensor2() != 0 ? LEVEL_STATE_LOW : LEVEL_STATE_HIGH ); break; #ifndef _VECTORCAST_ @@ -126,7 +139,7 @@ if ( currentLevelStatus != levelsStatus[ i ].status.data ) { // If the debounce time is 0, start the timer - if ( 0 == levelsStatus[ i ].debounceStartTime ) + if ( ( 0 == levelsStatus[ i ].debounceStartTime ) || ( currentLevelStatus != levelsStatus[i].priorRawLevel ) ) { levelsStatus[ i ].debounceStartTime = getMSTimerCount(); } @@ -135,14 +148,10 @@ { switch ( i ) { - case FLOATER_1: - SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_FLOATER_1_LEVEL_CHANGE, (U32)levelsStatus[ i ].status.data, (U32)currentLevelStatus ); + case FLOATER_LEVEL: + SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_FLOATER_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; @@ -166,6 +175,8 @@ { levelsStatus[ i ].debounceStartTime = 0; } + + levelsStatus[i].priorRawLevel = currentLevelStatus; } publishLevelsData(); @@ -219,8 +230,7 @@ { LEVEL_DATA_T data; - data.floater1Level = (U32)getLevelStatus( FLOATER_1 ); - data.floater2Level = (U32)getLevelStatus( FLOATER_2 ); + data.floaterLevel = (U32)getLevelStatus( FLOATER_LEVEL ); data.bicarbLevel = (U32)getLevelStatus( BICARB_LEVEL ); data.spentDialysateLevel = (U32)getLevelStatus( SPENT_DIALYSATE_LEVEL );