Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -r6679a2cd813b21a8cb4c58b3eeb721e0eef9a10b -rbce6e6d1cfb6e8a0b186419416460ead3a44e5e1 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 6679a2cd813b21a8cb4c58b3eeb721e0eef9a10b) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision bce6e6d1cfb6e8a0b186419416460ead3a44e5e1) @@ -59,21 +59,21 @@ static U32 hydChamberPressureCheckStartTimeMS; ///< Current time when hydraulics chamber pressure check satrted in milliseconds. static U32 spentDialPressureCheckStartTimeMS; ///< Current time when spent dialysate pressure check started in milliseconds. static OVERRIDE_U32_T isDialDeliveryInProgress; ///< To indicate dialysate started delivering to dialyzer for treatment (overrideable) -static BOOL isDialysateGoodtoDeliver; ///< Flag indicating whether ready to deliver dialysate or not. +static OVERRIDE_U32_T isDialysateGoodtoDeliver; ///< Flag indicating whether ready to deliver dialysate or not. static U32 genDialysateDataPublicationTimerCounter; ///< Used to schedule generate dialysate data publication to CAN bus. static OVERRIDE_U32_T genDialysateDataPublishInterval; ///< Generate dialysate mode data publish interval. // ********** private function prototypes ********** static void setModeGenDStateTransition( DD_GEND_MODE_STATE_T state ); static BOOL hydChamberWaterInletControl( void ); -static DD_GEND_MODE_STATE_T handleGendHydraulicsChamberWaterInletCheckState( void ); -static DD_GEND_MODE_STATE_T handleGendHydChamberPressureCheckState( void ); -static DD_GEND_MODE_STATE_T handleGendFreshDialysatePressureCheckState( void ); -static DD_GEND_MODE_STATE_T handleGendSpentDialysatePressureCheckState( void ); -static DD_GEND_MODE_STATE_T handleGendProduceDialysateyState( void ); -static DD_GEND_MODE_STATE_T handleGendDialysateDeliveryState( void ); -static DD_GEND_MODE_STATE_T handleGendDialysateDeliveryPauseState( void ); +static DD_GEND_MODE_STATE_T handleGenDHydraulicsChamberWaterInletCheckState( void ); +static DD_GEND_MODE_STATE_T handleGenDHydChamberPressureCheckState( void ); +static DD_GEND_MODE_STATE_T handleGenDFreshDialysatePressureCheckState( void ); +static DD_GEND_MODE_STATE_T handleGenDSpentDialysatePressureCheckState( void ); +static DD_GEND_MODE_STATE_T handleGenDProduceDialysateyState( void ); +static DD_GEND_MODE_STATE_T handleGenDDialysateDeliveryState( void ); +static DD_GEND_MODE_STATE_T handleGenDDialysateDeliveryPauseState( void ); static void publishGenDialysateModeData( void ); /*********************************************************************//** @@ -91,7 +91,10 @@ // targetHydChamberFluidTemp.override = OVERRIDE_RESET; // isHydChamberTempinRange = FALSE; genDialysateState = DD_GEND_STATE_START; - isDialysateGoodtoDeliver = FALSE; + isDialysateGoodtoDeliver.data = FALSE; + isDialysateGoodtoDeliver.ovData = FALSE; + isDialysateGoodtoDeliver.ovInitData = FALSE; + isDialysateGoodtoDeliver.override = OVERRIDE_RESET; isDialDeliveryInProgress.data = FALSE; isDialDeliveryInProgress.ovData = FALSE; isDialDeliveryInProgress.ovInitData = FALSE; @@ -124,14 +127,12 @@ return genDialysateState; } - /*********************************************************************//** * @brief * The execGenDialysateMonitor function monitors the balancing chamber fill * operations and alarm if temperature and conductivity is not in range. - * @details \b Inputs: - * @details \b Outputs: - * @details \b Alarm: none. + * @details \b Inputs: isBalChamberFillInProgress + * @details \b Outputs: isDialysateGoodtoDeliver * @return none. *************************************************************************/ void execGenDialysateMonitor( void ) @@ -147,7 +148,7 @@ // Temperature range check // Coductivity range check - isDialysateGoodtoDeliver = TRUE; + isDialysateGoodtoDeliver.data = TRUE; } } @@ -172,8 +173,8 @@ case DD_GEND_HYD_CHAMBER_WATER_INLET_CHECK_STATE: // Close all balancing chamber and hydraulics valves valveControlForBCClosedState(); - setHydValveStatetoClosedState(); - setUFValveStatetoClosedState(); + setHydValvesStatetoClosedState(); + setUFValvesStatetoClosedState(); // Get the target temperature from TD //targetHydChamberFluidTemp.data = HYD_CHAMBER_FLUID_TEMP_C_MIN; @@ -201,7 +202,7 @@ valveControlForBCOpenState(); // Make sure valves are in correct position - setValveState( VDR, VALVE_STATE_OPEN ); //D53 + setValveState( VDR, VALVE_STATE_OPEN ); // Drain valve : D53 setValveState( VDI, VALVE_STATE_CLOSED ); setValveState( VDO, VALVE_STATE_CLOSED ); setValveState( VDB2, VALVE_STATE_OPEN ); @@ -272,31 +273,31 @@ break; case DD_GEND_HYD_CHAMBER_WATER_INLET_CHECK_STATE: - genDialysateState = handleGendHydraulicsChamberWaterInletCheckState(); + genDialysateState = handleGenDHydraulicsChamberWaterInletCheckState(); break; case DD_GEND_HYD_CHAMBER_PRESSURE_CHECK_STATE: - genDialysateState = handleGendHydChamberPressureCheckState(); + genDialysateState = handleGenDHydChamberPressureCheckState(); break; case DD_GEND_FRESH_DIALYSATE_PRESSURE_CHECK_STATE: - genDialysateState = handleGendFreshDialysatePressureCheckState(); + genDialysateState = handleGenDFreshDialysatePressureCheckState(); break; case DD_GEND_SPENT_DIALYSATE_PRESSURE_CHECK_STATE: - genDialysateState = handleGendSpentDialysatePressureCheckState(); + genDialysateState = handleGenDSpentDialysatePressureCheckState(); break; case DD_GEND_PRODUCE_DIALYSATE_STATE: - genDialysateState = handleGendProduceDialysateyState(); + genDialysateState = handleGenDProduceDialysateyState(); break; case DD_GEND_DIALYSATE_DELIVERY_STATE: - genDialysateState = handleGendDialysateDeliveryState(); + genDialysateState = handleGenDDialysateDeliveryState(); break; case DD_GEND_DIALYSATE_DELIVERY_PAUSE: - genDialysateState = handleGendDialysateDeliveryPauseState(); + genDialysateState = handleGenDDialysateDeliveryPauseState(); break; default: @@ -331,7 +332,7 @@ if ( STATE_HIGH == floaterLevel1 ) { //turn off inlet water valve - setValveState( VHO, VALVE_STATE_CLOSED ); + setValveState( VHI, VALVE_STATE_CLOSED ); // // read latest fluid temperature // hydChamberTemperature = getTemperatureValue( TEMPSENSORS_HYDRAULICS_PRIMARY_HEATER ); @@ -358,7 +359,7 @@ else { // if level is not met,allow inlet water to hydraulics chamber - setValveState( VHO, VALVE_STATE_OPEN ); + setValveState( VHI, VALVE_STATE_OPEN ); } // Invalid levels @@ -372,13 +373,13 @@ /*********************************************************************//** * @brief - * The handleGendHydraulicsChamberWaterInletCheckState function checks the + * The handleGenDHydraulicsChamberWaterInletCheckState function checks the * water level and allow the water into hydraulics for dialysate generation. * @details \b Inputs: floater levels. * @details \b Outputs: none * @return the current state of gen dialysate mode *************************************************************************/ -static DD_GEND_MODE_STATE_T handleGendHydraulicsChamberWaterInletCheckState( void ) +static DD_GEND_MODE_STATE_T handleGenDHydraulicsChamberWaterInletCheckState( void ) { DD_GEND_MODE_STATE_T state = DD_GEND_HYD_CHAMBER_WATER_INLET_CHECK_STATE; @@ -395,13 +396,13 @@ /*********************************************************************//** * @brief - * The handleGendHydChamberPressureCheckState function checks the + * The handleGenDHydChamberPressureCheckState function checks the * hydraulics chamber pressure at chamber 4 of hydraulics. * @details \b Inputs: pressure sensor readings, hydChamberPressureCheckStartTimeMS * @details \b Outputs: none * @return the current state of gen dialysate mode *************************************************************************/ -static DD_GEND_MODE_STATE_T handleGendHydChamberPressureCheckState( void ) +static DD_GEND_MODE_STATE_T handleGenDHydChamberPressureCheckState( void ) { DD_GEND_MODE_STATE_T state = DD_GEND_HYD_CHAMBER_PRESSURE_CHECK_STATE; F32 hydPressure = getFilteredPressure( PRESSURE_SENSOR_HYDRAULICS_OUTLET ); @@ -424,14 +425,14 @@ /*********************************************************************//** * @brief - * The handleGendFreshDialysatePressureCheckState function checks the + * The handleGenDFreshDialysatePressureCheckState function checks the * positive pressure level ( chamber 5) of hydraulics chamber or fresh * dialysate side. * @details \b Inputs: pressure sensor readings,hydChamberPressureCheckStartTimeMS * @details \b Outputs: none * @return the current state of gen dialysate mode *************************************************************************/ -static DD_GEND_MODE_STATE_T handleGendFreshDialysatePressureCheckState( void ) +static DD_GEND_MODE_STATE_T handleGenDFreshDialysatePressureCheckState( void ) { DD_GEND_MODE_STATE_T state = DD_GEND_FRESH_DIALYSATE_PRESSURE_CHECK_STATE; F32 hydPressure = getFilteredPressure( PRESSURE_SENSOR_FRESH_DIALYSATE ); @@ -454,14 +455,14 @@ /*********************************************************************//** * @brief - * The handleGendSpentDialysatePressureCheckState function checks the + * The handleGenDSpentDialysatePressureCheckState function checks the * spent dialyaste pressure is in range to begin balancing chamber dialysate * delivery. * @details \b Inputs: pressure sensor readings,spentDialPressureCheckStartTimeMS. * @details \b Outputs: none * @return the current state of gen dialysate mode *************************************************************************/ -static DD_GEND_MODE_STATE_T handleGendSpentDialysatePressureCheckState( void ) +static DD_GEND_MODE_STATE_T handleGenDSpentDialysatePressureCheckState( void ) { DD_GEND_MODE_STATE_T state = DD_GEND_SPENT_DIALYSATE_PRESSURE_CHECK_STATE; F32 spentdialPressure = getFilteredPressure( PRESSURE_SENSOR_SPENT_DIALYSATE ); @@ -485,14 +486,14 @@ /*********************************************************************//** * @brief - * The handleGendProduceDialysateyState function produces dialysate + * The handleGenDProduceDialysateyState function produces dialysate * by executing balancing chamber and decides to pass the dialysate * for treatment. * @details \b Inputs: none * @details \b Outputs: balancing chamber state. * @return the current state of gen dialysate mode *************************************************************************/ -static DD_GEND_MODE_STATE_T handleGendProduceDialysateyState( void ) +static DD_GEND_MODE_STATE_T handleGenDProduceDialysateyState( void ) { DD_GEND_MODE_STATE_T state = DD_GEND_PRODUCE_DIALYSATE_STATE; @@ -501,7 +502,7 @@ //if the produced dialysate is good and TD asks for dialysate delivery // move to next state - if ( ( TRUE == isDialysateGoodtoDeliver ) && ( FALSE == getTDDialyzerBypass() ) ) + if ( ( TRUE == getDialGoodToDeliverStatus() ) && ( FALSE == getTDDialyzerBypass() ) ) { setModeGenDStateTransition( DD_GEND_DIALYSATE_DELIVERY_STATE ); state = DD_GEND_DIALYSATE_DELIVERY_STATE; @@ -512,13 +513,13 @@ /*********************************************************************//** * @brief - * The handleGendDialysateDeliveryState function performing dialysate + * The handleGenDDialysateDeliveryState function performing dialysate * delivery by executing balancing chamber. * @details \b Inputs: none * @details \b Outputs: balancing chamber state. * @return the current state of gen dialysate mode *************************************************************************/ -static DD_GEND_MODE_STATE_T handleGendDialysateDeliveryState( void ) +static DD_GEND_MODE_STATE_T handleGenDDialysateDeliveryState( void ) { DD_GEND_MODE_STATE_T state = DD_GEND_DIALYSATE_DELIVERY_STATE; @@ -527,7 +528,7 @@ // if TD asks for bypass or dialysate is not good to deliver //transition to produce dialystate state - if ( ( FALSE == isDialysateGoodtoDeliver ) || ( TRUE == getTDDialyzerBypass() ) ) + if ( ( FALSE == getDialGoodToDeliverStatus() ) || ( TRUE == getTDDialyzerBypass() ) ) { setModeGenDStateTransition( DD_GEND_PRODUCE_DIALYSATE_STATE ); state = DD_GEND_PRODUCE_DIALYSATE_STATE; @@ -538,14 +539,14 @@ /*********************************************************************//** * @brief - * The handleGendDialysateDeliveryPauseState function pause the dialysate + * The handleGenDDialysateDeliveryPauseState function pause the dialysate * delivery due to alarms conditions or some control asked to be in * paused state. * @details \b Inputs: none * @details \b Outputs: none * @return the current state of gen dialysate mode *************************************************************************/ -static DD_GEND_MODE_STATE_T handleGendDialysateDeliveryPauseState( void ) +static DD_GEND_MODE_STATE_T handleGenDDialysateDeliveryPauseState( void ) { DD_GEND_MODE_STATE_T state = DD_GEND_DIALYSATE_DELIVERY_PAUSE; @@ -569,16 +570,20 @@ /*********************************************************************//** * @brief - * The requestDDStop function handles an TD request to stop (return to standby mode). - * @details \b Inputs: none - * @details \b Outputs: DD standby mode requested - * @return TRUE if request accepted. + * The getDialGoodToDeliverStatus function gets the dialysate good to deliver + * status. + * @details \b Inputs: isDialysateGoodtoDeliver + * @details \b Outputs: none + * @return the current status of dialysate delivery *************************************************************************/ -BOOL requestDDStop( void ) +U32 getDialGoodToDeliverStatus( void ) { - BOOL result = TRUE; + U32 result = isDialysateGoodtoDeliver.data; - requestNewOperationMode( DD_MODE_STAN ); + if ( OVERRIDE_KEY == isDialysateGoodtoDeliver.override ) + { + result = isDialysateGoodtoDeliver.ovData; + } return result; } @@ -648,7 +653,7 @@ data.hydNegativePressure = getFilteredPressure( PRESSURE_SENSOR_HYDRAULICS_OUTLET ); data.hydPositivePressure = getFilteredPressure( PRESSURE_SENSOR_FRESH_DIALYSATE ); data.spentDialysatePressure = getFilteredPressure( PRESSURE_SENSOR_SPENT_DIALYSATE ); - data.isDialysateGoodtoDeliver = isDialysateGoodtoDeliver; + data.isDialysateGoodtoDeliver = (BOOL)getDialGoodToDeliverStatus(); broadcastData( MSG_ID_DD_GEN_DIALYSATE_MODE_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( GEN_DIALYSATE_MODE_DATA_T ) ); @@ -698,6 +703,23 @@ /*********************************************************************//** * @brief + * The testDialGoodToDeliverStatusOverride function sets the override value + * of the dialysate good to deliver status flag. + * @details Inputs: isDialysateGoodtoDeliver + * @details Outputs: isDialysateGoodtoDeliver + * @param message Override message from Dialin which includes the override + * value to override the dialysate delivery in progress flag. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testDialGoodToDeliverStatusOverride( MESSAGE_T *message ) +{ + BOOL result = u32Override( message, &isDialysateGoodtoDeliver, 0, TRUE ); + + return result; +} + +/*********************************************************************//** + * @brief * The testGenDHydChamberFluidTempOverride function sets the override value * of the hydraulics chamber fluid temperature. * @details Inputs: targetHydChamberFluidTemp