Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r9102c5da21a15bdaf4bb3bc38795ceb064e3c443 -r8c5ca1982c53f4702c6f019ce9bcfedb9e513548 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 9102c5da21a15bdaf4bb3bc38795ceb064e3c443) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 8c5ca1982c53f4702c6f019ce9bcfedb9e513548) @@ -356,7 +356,7 @@ { case DD_PRIMARY_HEATER: alarm = ALARM_ID_DD_FLUID_TOO_LOW_WHILE_PRIMARY_HEATER_IS_ON; - isLevelLow = ( ( getLevelStatus( FLOATER_1 ) != 0 )? FALSE : TRUE ); + isLevelLow = ( ( getLevelStatus( FLOATER_LEVEL ) != 0 )? FALSE : TRUE ); break; case DD_TRIMMER_HEATER: Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -r9102c5da21a15bdaf4bb3bc38795ceb064e3c443 -r8c5ca1982c53f4702c6f019ce9bcfedb9e513548 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 9102c5da21a15bdaf4bb3bc38795ceb064e3c443) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 8c5ca1982c53f4702c6f019ce9bcfedb9e513548) @@ -324,12 +324,12 @@ { // Read floater switch BOOL result = FALSE; - LEVEL_STATE_T floaterLevel1 = getLevelStatus( FLOATER_1 ); + LEVEL_STATE_T floaterLevel1 = getLevelStatus( FLOATER_LEVEL ); //LEVEL_STATE_T floaterLevel2 = getLevelStatus( FLOATER_2 ); //F32 hydChamberTemperature = getTemperatureValue( TEMPSENSORS_HYDRAULICS_PRIMARY_HEATER ); // High level is met - if ( STATE_HIGH == floaterLevel1 ) + if ( LEVEL_STATE_HIGH == floaterLevel1 ) { //turn off inlet water valve setValveState( VHI, VALVE_STATE_CLOSED ); @@ -362,12 +362,6 @@ setValveState( VHI, VALVE_STATE_OPEN ); } - // Invalid levels -// if ( ( STATE_LOW == floaterLevel1 ) && ( STATE_HIGH == floaterLevel2 ) ) -// { -// //TODO : check for invalid levels and trigger alarm -// } - return result; } @@ -649,8 +643,7 @@ data.genDialysateExecState = (U32)getCurrentGenDialysateState(); data.isDialDelInProgress = (BOOL)getDialDeliveryProgressStatus(); - data.floaterLevel1 = (U32)getLevelStatus( FLOATER_1 ); - data.floaterLevel2 = (U32)getLevelStatus( FLOATER_2 ); + data.floaterLevel = (U32)getLevelStatus( FLOATER_LEVEL ); data.BiCarbLevel = (U32)getLevelStatus( BICARB_LEVEL ); data.SpentChamberLevel = (U32)getLevelStatus( SPENT_DIALYSATE_LEVEL ); data.hydNegativePressure = getFilteredPressure( PRESSURE_SENSOR_HYDRAULICS_OUTLET ); Index: firmware/App/Modes/ModeGenDialysate.h =================================================================== diff -u -rbce6e6d1cfb6e8a0b186419416460ead3a44e5e1 -r8c5ca1982c53f4702c6f019ce9bcfedb9e513548 --- firmware/App/Modes/ModeGenDialysate.h (.../ModeGenDialysate.h) (revision bce6e6d1cfb6e8a0b186419416460ead3a44e5e1) +++ firmware/App/Modes/ModeGenDialysate.h (.../ModeGenDialysate.h) (revision 8c5ca1982c53f4702c6f019ce9bcfedb9e513548) @@ -36,8 +36,7 @@ { U32 genDialysateExecState; ///< Generate dialysate execution state BOOL isDialDelInProgress; ///< Whether Dialysate Delivery in progress or not - U32 floaterLevel1; ///< Floater level 1 (low or medium) - U32 floaterLevel2; ///< Floater level 2 (medium or high) + U32 floaterLevel; ///< Floater level (low, medium and high) U32 BiCarbLevel; ///< BiCarb Chamber level U32 SpentChamberLevel; ///< Spent dialysate chamber level F32 hydNegativePressure; ///< Hydraulics chamber negative pressure 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 ); Index: firmware/App/Monitors/Level.h =================================================================== diff -u -rc85d9f0a8023fabdf1cd557965958d225e2b9085 -r8c5ca1982c53f4702c6f019ce9bcfedb9e513548 --- firmware/App/Monitors/Level.h (.../Level.h) (revision c85d9f0a8023fabdf1cd557965958d225e2b9085) +++ firmware/App/Monitors/Level.h (.../Level.h) (revision 8c5ca1982c53f4702c6f019ce9bcfedb9e513548) @@ -35,8 +35,7 @@ /// DD floater and level sensor enumeration typedef enum level_names { - FLOATER_1 = 0, ///< floater switch low to medium status - FLOATER_2, ///< floater switch medium to high status + FLOATER_LEVEL = 0, ///< floater switch low, medium and high status BICARB_LEVEL, ///< bicarb level low or high status SPENT_DIALYSATE_LEVEL, ///< Spent dialysate air separation chamber level low or high status NUM_OF_LEVELS ///< Number of levels @@ -45,17 +44,16 @@ /// floater and level sensor states. typedef enum level_States { - STATE_LOW = 0, ///< Low level - STATE_HIGH, ///< High level - STATE_MEDIUM, ///< Medium level - NUM_OF_LEVELS_STATES ///< Number of level states + LEVEL_STATE_LOW = 0, ///< Low level + LEVEL_STATE_HIGH, ///< High level + LEVEL_STATE_MEDIUM, ///< Medium level + NUM_OF_LEVELS_STATES ///< Number of level states } LEVEL_STATE_T; /// DD floater and level sensor data publish structure typedef struct { - U32 floater1Level; ///< Floater 1 level - U32 floater2Level; ///< Floater 2 level + U32 floaterLevel; ///< Floater level U32 bicarbLevel; ///< Bicarb level U32 spentDialysateLevel; ///< Spent dialysate level } LEVEL_DATA_T; Index: firmware/App/Services/FpgaDD.c =================================================================== diff -u -r9102c5da21a15bdaf4bb3bc38795ceb064e3c443 -r8c5ca1982c53f4702c6f019ce9bcfedb9e513548 --- firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision 9102c5da21a15bdaf4bb3bc38795ceb064e3c443) +++ firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision 8c5ca1982c53f4702c6f019ce9bcfedb9e513548) @@ -90,7 +90,7 @@ #define FPGA_DGP_PUMP_ERROR_BIT 0x01 ///< Fresh dialysate pump error bit mask. #define FPGA_SDP_PUMP_ERROR_BIT 0x02 ///< Spent dialysate pump error bit mask. -#define FPGA_FLOATER_LEVEL_BIT 0x01 ///< Floater level bit mask. +#define FPGA_FLOATER_LEVEL_BIT 0x07 ///< Floater level bit mask. /// FPGA size of V3 read bytes. #define FPGA_SIZE_OF_V3_READ_BYTES ( FPGA_READ_V3_END_BYTE_NUM - FPGA_READ_V3_START_BYTE_NUM ) @@ -2269,12 +2269,9 @@ * @details \b Outputs: none * @return last FPGA floater 1 level reading *************************************************************************/ -BOOL getFPGAFloater1Status( void ) +U08 getFPGAFloater1Status( void ) { - U08 mask = fpgaSensorReadings.fpgaFloater1Status & FPGA_FLOATER_LEVEL_BIT; - BOOL result = ( mask > 0 ? FALSE : TRUE ); - - return result; + return ( fpgaSensorReadings.fpgaFloater1Status & FPGA_FLOATER_LEVEL_BIT ); } /*********************************************************************//**