Index: firmware/App/Controllers/BalancingChamber.c =================================================================== diff -u -rfd897db8177752330ad08d877e0a13620513dbdc -r37d6f3341f62349589f63975779c0df952c0cfd4 --- firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision fd897db8177752330ad08d877e0a13620513dbdc) +++ firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision 37d6f3341f62349589f63975779c0df952c0cfd4) @@ -22,6 +22,7 @@ #include "DryBiCart.h" #include "FpgaDD.h" #include "Heaters.h" +#include "Level.h" #include "ModeGenDialysate.h" #include "ModeStandby.h" #include "Messaging.h" @@ -256,12 +257,28 @@ { updateBalChamberSwitchingPeriod(); + LVL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); + // Increment counter indicating fill is in progress. currentBalChamberSwitchingCounter += 1; currentBalChamberFillCounter += 1; if ( ( getTestConfigStatus( TEST_CONFIG_DD_ENABLE_DRY_BICARB ) == TRUE ) && ( balChamberExecState > BAL_CHAMBER_STATE_IDLE ) ) { +#ifdef CONDUCTIVE_LEVEL_SENSOR_ENABLED + if ( LVL_STATE_LOW == bicarbChamberLevel ) + { + if ( getCurrentBalancingChamberExecState() > BAL_CHAMBER_STATE_IDLE ) + { + if ( FALSE == setBicarbChamberFillRequested() ) + { + // TODO + //drybicart state machines are combined and so this is not an issue in future + //set alarm ? + } + } + } +#else // time based chamber F fill // Increment counter for dry bicarb chamber fill bicarbChamberPeriodicFillCounter += 1; // Fill bicarb chamber once every 60secs. @@ -275,6 +292,7 @@ } bicarbChamberPeriodicFillCounter = 0; } +#endif } switch ( balChamberExecState ) Index: firmware/App/Controllers/DryBiCart.c =================================================================== diff -u -rfd897db8177752330ad08d877e0a13620513dbdc -r37d6f3341f62349589f63975779c0df952c0cfd4 --- firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision fd897db8177752330ad08d877e0a13620513dbdc) +++ firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision 37d6f3341f62349589f63975779c0df952c0cfd4) @@ -62,7 +62,11 @@ #define DRY_BICART_FILL_VENT_COMPLETE_PRESSURE 1.5F ///< Pressure reached to indicate the dry bicart venting being completed. // Bicarb chamber fill/Supply -#define DRY_BICART_SUPPLY_VALVE_D80_OPEN_TIME_MS ( 3 * MS_PER_SECOND ) ///< Max time allowed for supply (opening D80 valve) during bicarb chamber (F) fill. +#ifdef CONDUCTIVE_LEVEL_SENSOR_ENABLED +#define DRY_BICART_SUPPLY_VALVE_D80_TIMEOUT_MS ( 10 * MS_PER_SECOND ) ///< Max time allowed for supply (opening D80 valve) during bicarb chamber (F) fill. +#else +#define DRY_BICART_SUPPLY_VALVE_D80_TIMEOUT_MS ( 3 * MS_PER_SECOND ) ///< Max time allowed for supply (opening D80 valve) during bicarb chamber (F) fill. +#endif #define DRY_BICART_SUPPLY_VENT_TIME_MS ( 1 * MS_PER_SECOND ) ///< Wait time to vent dry bicart gas before actuating Bicarb chamber(F) venting. #define DRY_BICART_SUPPLY_VENT_MAX_TIME_MS ( 1.1 * MS_PER_SECOND ) ///< Max time to vent both dry bicart and Chamber F. @@ -1471,22 +1475,18 @@ static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberCheckLevelState( void ) { BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_CHAMBER_CHECK_LEVEL_STATE; - LEVEL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); + LVL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); // TODO: Confirm D80 open on chamber low or end of balancing chamber switching? - // TODO: Enable the below code once level sensor is working - //if ( LEVEL_STATE_LOW == bicarbChamberLevel ) + // if ( getBalancingChamberFillinProgressStatus() == FALSE ) { - // if ( getBalancingChamberFillinProgressStatus() == FALSE ) - { - // Open the Bicarb chamber inlet valve - setValveState( D80_VALV, VALVE_STATE_OPEN ); + // Open the Bicarb chamber inlet valve + setValveState( D80_VALV, VALVE_STATE_OPEN ); - // Start a timer when bicarb supply started to chamber F - dryBiCarbSupplyStartTime = getMSTimerCount(); + // Start a timer when bicarb supply started to chamber F + dryBiCarbSupplyStartTime = getMSTimerCount(); - state = BICARB_CHAMBER_FILL_STATE; - } + state = BICARB_CHAMBER_FILL_STATE; } // TODO: alarm @@ -1505,10 +1505,10 @@ { BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_CHAMBER_FILL_STATE; F32 d66Pressure = getFilteredPressure( D66_PRES ); - LEVEL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); + LVL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); // Once level reached, close the valve - if ( LEVEL_STATE_HIGH == bicarbChamberLevel ) + if ( LVL_STATE_HIGH == bicarbChamberLevel ) { setValveState( D80_VALV, VALVE_STATE_CLOSED ); state = BICARB_CHAMBER_PRESSURE_CHECK_STATE; @@ -1539,11 +1539,11 @@ { BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_CHAMBER_PRESSURE_CHECK_STATE; F32 d66Pressure = getFilteredPressure( D66_PRES ); - LEVEL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); + LVL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); // Once level reached, close the valve - if ( ( LEVEL_STATE_HIGH == bicarbChamberLevel ) || - ( TRUE == didTimeout( dryBiCarbSupplyStartTime, DRY_BICART_SUPPLY_VALVE_D80_OPEN_TIME_MS ) ) ) + if ( ( LVL_STATE_HIGH == bicarbChamberLevel ) || + ( TRUE == didTimeout( dryBiCarbSupplyStartTime, DRY_BICART_SUPPLY_VALVE_D80_TIMEOUT_MS ) ) ) { setValveState( D65_VALV, VALVE_STATE_CLOSED ); setValveState( D80_VALV, VALVE_STATE_CLOSED ); @@ -1590,7 +1590,6 @@ //if ( TRUE == didTimeout( dryBiCarbSupplyStartTime, 10 ) ) #if 0 while ( tmpD66Pressure >= getDryBicartLowerCartPressure() && tmpD66Pressure >= setpoint ) { - //setpoint = d66Pressure - 1.0; // Venting loop: stay open until target PSI is reached setValveState( D64_VALV, VALVE_STATE_CLOSED ); @@ -1599,7 +1598,7 @@ while ( TRUE != didTimeout( startTime, 12 ) ) { } - // close the vallve + // close the valve setValveState( D85_VALV, VALVE_STATE_CLOSED ); setValveState( D64_VALV, VALVE_STATE_OPEN ); startTime = getMSTimerCount(); @@ -1654,7 +1653,7 @@ if ( TRUE == didTimeout( dryBiCarbSypplyVentStartTime, DRY_BICART_SUPPLY_VENT_TIME_MS ) ) { setValveState( D85_VALV, VALVE_STATE_CLOSED ); - //setValveState( D64_VALV, VALVE_STATE_CLOSED); + setValveState( D64_VALV, VALVE_STATE_OPEN); bicarbChamberFillRequested.data = FALSE; // for this request override also cleared Index: firmware/App/DDCommon.h =================================================================== diff -u -r2efcc3d334f44145ad683ea2cc4af754fa35dd02 -r37d6f3341f62349589f63975779c0df952c0cfd4 --- firmware/App/DDCommon.h (.../DDCommon.h) (revision 2efcc3d334f44145ad683ea2cc4af754fa35dd02) +++ firmware/App/DDCommon.h (.../DDCommon.h) (revision 37d6f3341f62349589f63975779c0df952c0cfd4) @@ -53,6 +53,8 @@ //Uncomment below to disable revised heater model #define __REVISED_HEATER_MODEL__ 1 +// comment below to disable bicarb multi level sensor for time based chamber F fill +#define CONDUCTIVE_LEVEL_SENSOR_ENABLED 1 #include Index: firmware/App/Monitors/Level.c =================================================================== diff -u -r323024b3c7b988f4da87d3e5ef54f395db1142f8 -r37d6f3341f62349589f63975779c0df952c0cfd4 --- firmware/App/Monitors/Level.c (.../Level.c) (revision 323024b3c7b988f4da87d3e5ef54f395db1142f8) +++ firmware/App/Monitors/Level.c (.../Level.c) (revision 37d6f3341f62349589f63975779c0df952c0cfd4) @@ -28,7 +28,7 @@ */ // ********** private definitions ********** -#define LEVEL_SENSOR_LIQUID 0U ///< Level sensor digital low value (0 = liquid, 1 = no liquid). +#define LEVEL_SENSOR_LIQUID 0U ///< Level sensor digital low value (0 = liquid is detected, 1 = no liquid). #define FPGA_B1_HW_LEVEL_LOW 5 ///< Floater low level status for Beta 1.0 #define FPGA_B1_HW_LEVEL_MEDIUM 4 ///< Floater medium level status for Beta 1.0 #define FPGA_B1_HW_LEVEL_HIGH 6 ///< Floater high level status for Beta 1.0 @@ -242,7 +242,8 @@ { U32 stat = 0; - if ( levelId < LAST_LEVEL ) + // level id should include the last level + if ( levelId <= LAST_LEVEL ) { // Assume there is no override stat = status[ levelId ].data; @@ -274,7 +275,7 @@ { U32 stat = 0; - if ( levelId >= FIRST_FLOAT && levelId < LAST_FLOAT ) + if ( levelId >= FIRST_FLOAT && levelId <= LAST_FLOAT ) { // Assume there is no override stat = status[ levelId ].data; @@ -590,7 +591,7 @@ * The testLevelStatusOverride function sets the override status * for a specific level sensor. * @details \b Inputs: none - * @details \b Outputs: levelStatus + * @details \b Outputs: status * @param message Override message from Dialin which includes an ID of * the level sensor to override and the state to override the level sensor to. * @return TRUE if override successful, FALSE if not @@ -604,6 +605,32 @@ /*********************************************************************//** * @brief + * The testFloaterLevelStatusOverride function sets the override status + * for a specific floater level sensor. + * @details \b Inputs: none + * @details \b Outputs: status + * @param message Override message from Dialin which includes an ID of + * the level sensor to override and the state to override the level sensor to. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ + +BOOL testDDFloaterLevelStateOverride( MESSAGE_T *message ) +{ + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + + BOOL result = FALSE; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + + if ( ( payload.index >= D6_LEVL ) && ( payload.index <= D6_LEVL ) ) + { + BOOL result = u32ArrayOverride( message, &status[0], D6_LEVL, 0, NUM_OF_LVL_STATES -1 ); + } + + return result; +} + +/*********************************************************************//** + * @brief * The testFPLevelsDataPublishIntervalOverride function overrides the Level * data publish interval. * @details \b Inputs: levelsDataPublishInterval @@ -629,15 +656,16 @@ * override the floater level sensor to. * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testFPLevelStateOverride( MESSAGE_T *message ) +BOOL testFPFloaterLevelStateOverride( MESSAGE_T *message ) { - BOOL result = FALSE; TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + + BOOL result = FALSE; OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &payload ); if ( ( payload.index >= P25_LEVL ) && ( payload.index <= P25_LEVL ) ) { - BOOL result = u32Override( message, &status[0], 0, NUM_OF_LVL_STATES -1 ); + BOOL result = u32ArrayOverride( message, &status[ 0 ], P25_LEVL, 0, NUM_OF_LVL_STATES -1 ); } return result; Index: firmware/App/Monitors/Level.h =================================================================== diff -u -r323024b3c7b988f4da87d3e5ef54f395db1142f8 -r37d6f3341f62349589f63975779c0df952c0cfd4 --- firmware/App/Monitors/Level.h (.../Level.h) (revision 323024b3c7b988f4da87d3e5ef54f395db1142f8) +++ firmware/App/Monitors/Level.h (.../Level.h) (revision 37d6f3341f62349589f63975779c0df952c0cfd4) @@ -93,7 +93,8 @@ BOOL testLevelsDataPublishIntervalOverride( MESSAGE_T *message ); BOOL testLevelStatusOverride( MESSAGE_T *message ); BOOL testFPLevelsDataPublishIntervalOverride( MESSAGE_T *message ); -BOOL testFPLevelStateOverride( MESSAGE_T *message ); +BOOL testFPFloaterLevelStateOverride( MESSAGE_T *message ); +BOOL testDDFloaterLevelStateOverride( MESSAGE_T *message ); /**@}*/ Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r6d4aa77e6b85aa7621a234660f631e725fb1d441 -r37d6f3341f62349589f63975779c0df952c0cfd4 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 6d4aa77e6b85aa7621a234660f631e725fb1d441) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 37d6f3341f62349589f63975779c0df952c0cfd4) @@ -244,7 +244,8 @@ { MSG_ID_DD_MONITORED_VOLTAGE_OVERRIDE_REQUEST, &testVoltageOverride }, { MSG_ID_DD_TREATMENT_PARAMS_OVERRIDE_REQUEST, &testTDTreatmentParamsOverride }, { MSG_ID_FP_LEVEL_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testFPLevelsDataPublishIntervalOverride }, - { MSG_ID_FP_LEVEL_OVERRIDE_REQUEST, &testFPLevelStateOverride }, + { MSG_ID_FP_FLOATER_LEVEL_OVERRIDE_REQUEST, &testFPFloaterLevelStateOverride }, + { MSG_ID_DD_FLOATER_LEVEL_OVERRIDE_REQUEST, &testDDFloaterLevelStateOverride }, { MSG_ID_FP_PERMEATE_TANK_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPermeateTankDataPublishIntervalOverride }, { MSG_ID_FP_RO_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testROPumpDataPublishIntervalOverride }, { MSG_ID_DD_RINSE_PUMP_DATA_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testRinsePumpDataPublishIntervalOverride },