Index: firmware/App/Controllers/BalancingChamber.c =================================================================== diff -u -re4713cc2340511b387f2c756f68dd9a06b4f9dea -rc71a1a94932ab2760fa3002e9740bf00840cd6b5 --- firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision e4713cc2340511b387f2c756f68dd9a06b4f9dea) +++ firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision c71a1a94932ab2760fa3002e9740bf00840cd6b5) @@ -51,13 +51,6 @@ F32 flowrate; ///< Dialysate flowrate in ml/min } BC_SWITCHING_ONLY_START_CMD_PAYLOAD_T; -/// Enumerations for balancing chamber switching -typedef enum bc_switching_action -{ - BC_SWITCHING_OFF = 0, ///< Deactivate Balancing Chamber Switching - BC_SWITCHING_ON = 1, ///< Activate Balancing Chamber Switching -} BC_SWITCHING_ACTION; - // ********** private data ********** static BAL_CHAMBER_EXEC_STATE_T balChamberExecState; ///< Current balancing chamber executive state. @@ -80,9 +73,9 @@ static F32 lastTdDialysateFlowrate; ///< Previous TD dialysate flow rate static F32 freshDialPressure; ///< Fresh side dialysate pressure static F32 spentDialPressure; ///< Spent side dialysate pressure -static BC_SWITCHING_ACTION isBalChamberSwitchingActive; ///< Flag indicating balancing chamber switching is active or not. -static BOOL isBalChamberSwitchingRequested; ///< Flag indicating if there is a request to either activate or deactivate the balancing chamber switching -static BC_SWITCHING_ACTION balChamberSwitchingRequestAction; ///< Flag indicating balancing chamber request action. If TRUE then activate the switching, else stay in IDLE state. +static BOOL isBalChamberSwitchingActive; ///< Flag indicating balancing chamber switching is active or not. +static BOOL isBalChamberSwitchingOnRequested; ///< Flag indicating that a request was made to activate balancing chamber switching. +static BOOL isBalChamberSwitchingOffRequested; ///< Flag indicating that a request was made to deactivate balancing chamber switching. //TODO: remove later once level sensor working static U32 bicarbChamberPeriodicFillCounter; ///< Counter for checking the timeout for drybicart chamber fill request. @@ -97,7 +90,6 @@ static BAL_CHAMBER_EXEC_STATE_T handleBalChamberState2ValvesClose( void ); static BAL_CHAMBER_EXEC_STATE_T handleBalChamberState2FillEnd(void); static BAL_CHAMBER_EXEC_STATE_T handleBalChamberStateIdle( void ); -static BAL_CHAMBER_EXEC_STATE_T processBalChamberSwitchingRequest( void ); static void publishBalChamberData( void ); static U32 getBalChamberDataPublishInterval( void ); @@ -142,9 +134,9 @@ isPressureDroppedDuringFill = FALSE; freshDialPressure = 0.0F; spentDialPressure = 0.0F; - isBalChamberSwitchingActive = BC_SWITCHING_OFF; - isBalChamberSwitchingRequested = FALSE; - balChamberSwitchingRequestAction = BC_SWITCHING_OFF; + isBalChamberSwitchingActive = FALSE; + isBalChamberSwitchingOnRequested = FALSE; + isBalChamberSwitchingOffRequested = FALSE; //TODO:remove once level sensor working bicarbChamberPeriodicFillCounter = FALSE; @@ -285,42 +277,26 @@ /*********************************************************************//** * @brief - * The activateBalChamberSwitching function activates the balancing chamber switching. - * The balancing chamber state moves from start to end and keeps switching between - * state1 and state2 until deactivated. + * The requestBalChamberSwitching function activates or deactivates balancing chamber switching. * @details \b Inputs: none - * @details \b Outputs: isBalChamberSwitchingRequested, balChamberSwitchingRequestAction + * @details \b Outputs: isBalChamberSwitchingOnRequested, isBalChamberSwitchingOffRequested + * @param activate - TRUE to activate and FALSE to deactivate. * @return none. *************************************************************************/ -void activateBalChamberSwitching( void ) +void requestBalChamberSwitching( BOOL activate ) { - // Set flag to indicate that a request was made for balancing chamber - isBalChamberSwitchingRequested = TRUE; - - // Set flag to indicate that the request made was to activate the balancing chamber switching - balChamberSwitchingRequestAction = BC_SWITCHING_ON; + if ( TRUE == activate ) + { + isBalChamberSwitchingOnRequested = TRUE; + } + else + { + isBalChamberSwitchingOffRequested = TRUE; + } } /*********************************************************************//** * @brief - * The deactivateBalChamberSwitching function deactivates the balancing chamber switching. - * The balancing chamber state remains in the idle state until activated again. - * @details \b Inputs: - * @details \b Outputs: isBalChamberSwitchingRequested, balChamberSwitchingRequestAction - * @return none. - *************************************************************************/ -void deactivateBalChamberSwitching( void ) -{ - // Set flag to indicate that a request was made for balancing chamber - isBalChamberSwitchingRequested = TRUE; - - // Set flag to indicate that the request made was to deactivate the balancing chamber switching - // and stay in the idle state - balChamberSwitchingRequestAction = BC_SWITCHING_OFF; -} - -/*********************************************************************//** - * @brief * The valveControlForBCClosedState function closes the all balancing * chamber valves. * @details \b Inputs: none @@ -765,9 +741,22 @@ } } - // Process Balancing Chamber Switching Request - state = processBalChamberSwitchingRequest(); + // Keep Clearing the On request flag in case an On request was made while the switching is active + isBalChamberSwitchingOnRequested = FALSE; + // Check if a request made was to deactivate the balancing chamber switching. + if ( TRUE == isBalChamberSwitchingOffRequested ) + { + //Clear the request flag to indicate that the request was processed. + isBalChamberSwitchingOffRequested = FALSE; + + // Clear the flag to indicate that balancing chamber switching is inactive + isBalChamberSwitchingActive = FALSE; + + // Move to the idle state + state = BAL_CHAMBER_STATE_IDLE; + } + return state; } @@ -938,66 +927,50 @@ } } - // Process Balancing Chamber Switching Request - state = processBalChamberSwitchingRequest(); + // Keep Clearing the On request flag in case an On request was made while the switching is active + isBalChamberSwitchingOnRequested = FALSE; + // Check if a request made was to deactivate the balancing chamber switching. + if ( TRUE == isBalChamberSwitchingOffRequested ) + { + // Clear the request flag to indicate that the request was processed. + isBalChamberSwitchingOffRequested = FALSE; + + // Clear flag to indicate that balancing chamber switching is inactive + isBalChamberSwitchingActive = FALSE; + + // Move to the idle state + state = BAL_CHAMBER_STATE_IDLE; + } + return state; } /*********************************************************************//** * @brief - * The handleBalChamberStateIdle function check for balancing chamber switching - * activation or deactivation request and then change state - * @details \b Inputs: isBalChamberSwitchingRequested, balChamberSwitchingRequestAction + * The handleBalChamberStateIdle function handles balancing chamber idle state. + * @details \b Inputs: isBalChamberSwitchingOnRequested * @details \b Outputs: isBalChamberSwitchingActive * @return next balancing chamber state. *************************************************************************/ static BAL_CHAMBER_EXEC_STATE_T handleBalChamberStateIdle( void ) { - BAL_CHAMBER_EXEC_STATE_T state = processBalChamberSwitchingRequest(); - return state; -} + BAL_CHAMBER_EXEC_STATE_T state = BAL_CHAMBER_STATE_IDLE; -/*********************************************************************//** - * @brief - * The processBalChamberSwitchingRequest function processes requests for - * activating or deactivating balancing chamber switching and then change state - * @details \b Inputs: isBalChamberSwitchingRequested, balChamberSwitchingRequestAction - * @details \b Outputs: isBalChamberSwitchingActive - * @return next balancing chamber state. - *************************************************************************/ -static BAL_CHAMBER_EXEC_STATE_T processBalChamberSwitchingRequest( void ) -{ - BAL_CHAMBER_EXEC_STATE_T state = balChamberExecState; + // Keep Clearing the off request flag in case an off request was made while we were already in the idle state + isBalChamberSwitchingOffRequested = FALSE; - // Check if there was a request made to the balancing chamber - if ( TRUE == isBalChamberSwitchingRequested ) + // Check if a request made was to activate the balancing chamber switching. + if ( TRUE == isBalChamberSwitchingOnRequested ) { - // Clear the request flag - isBalChamberSwitchingRequested = FALSE; + //Clear the request flag to indicate that the request was processed. + isBalChamberSwitchingOnRequested = FALSE; - // Check if the request made was to activate the switching and it is currently inactive - if ( ( BC_SWITCHING_ON == balChamberSwitchingRequestAction ) && ( BC_SWITCHING_OFF == isBalChamberSwitchingActive ) ) - { - // Set flag to indicate that balancing chamber switching is active - isBalChamberSwitchingActive = BC_SWITCHING_ON; + // Set flag to indicate that balancing chamber switching is active + isBalChamberSwitchingActive = TRUE; - // Move to the start state1 - state = BAL_CHAMBER_STATE1_FILL_START; - } - // Check if the request made was to deactivate the switching and it is currently active - else if ( ( BC_SWITCHING_OFF == balChamberSwitchingRequestAction ) && ( BC_SWITCHING_ON == isBalChamberSwitchingActive ) ) - { - // Set flag to indicate that balancing chamber switching is inactive - isBalChamberSwitchingActive = BC_SWITCHING_OFF; - - // Move to the idle state - state = BAL_CHAMBER_STATE_IDLE; - } - else - { - // Do nothing and continue to execute the current state as the request made was invalid. - } + // Move to the start state1 + state = BAL_CHAMBER_STATE1_FILL_START; } return state; @@ -1047,7 +1020,7 @@ data.currentBalChamberSwitchingCounter = currentBalChamberSwitchingCounter; data.isPressureStabilizedDuringFill = isPressureStabilizedDuringFill; data.balChamberSWOnlyState = balanceChamberSwitchingOnly; - data.isBalChamberSwitchingActive = (U08)isBalChamberSwitchingActive; + data.isBalChamberSwitchingActive = isBalChamberSwitchingActive; broadcastData( MSG_ID_DD_BAL_CHAMBER_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( BAL_CHAMBER_DATA_T ) ); Index: firmware/App/Controllers/BalancingChamber.h =================================================================== diff -u -re4713cc2340511b387f2c756f68dd9a06b4f9dea -rc71a1a94932ab2760fa3002e9740bf00840cd6b5 --- firmware/App/Controllers/BalancingChamber.h (.../BalancingChamber.h) (revision e4713cc2340511b387f2c756f68dd9a06b4f9dea) +++ firmware/App/Controllers/BalancingChamber.h (.../BalancingChamber.h) (revision c71a1a94932ab2760fa3002e9740bf00840cd6b5) @@ -50,7 +50,7 @@ U32 currentBalChamberSwitchingCounter; ///< Current balancing chamber switching counter BOOL isPressureStabilizedDuringFill; ///< Whether pressure stabilized during fill or not BOOL balChamberSWOnlyState; ///< Balancing chamber switching only status ( On/Off) - U08 isBalChamberSwitchingActive; ///< Balancing chamber switching status + BOOL isBalChamberSwitchingActive; ///< Balancing chamber switching status } BAL_CHAMBER_DATA_T; // ********** public function prototypes ********** @@ -59,8 +59,7 @@ void transitionToBalChamberFill( void ); // Prepares for transition to balancing chamber execution U32 execBalancingChamberControl( void ); // Execute the balancing chamber state machine -void activateBalChamberSwitching( void ); // Activates Balancing Chamber Switching. -void deactivateBalChamberSwitching( void ); // Deactivates Balancing Chamber Switching. +void requestBalChamberSwitching( BOOL activate ); // Activates or Deactivates Balancing Chamber Switching. void updateBalChamberSwitchingPeriod( void ); // Update the balancing chamber switching period BAL_CHAMBER_EXEC_STATE_T getCurrentBalancingChamberExecState( void ); // Get the current state of the balancing chamber execution Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -rc71a1a94932ab2760fa3002e9740bf00840cd6b5 --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision c71a1a94932ab2760fa3002e9740bf00840cd6b5) @@ -74,6 +74,8 @@ { initFaultMode(); setCurrentSubState( NO_SUB_STATE ); + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); // Publish POST failure status to UI if fault triggered in Init/POST mode if ( DD_MODE_INIT == getPreviousOperationMode() ) { Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -re79eb4fbdacbc729b0f611f7d27b03ef004dc3da -rc71a1a94932ab2760fa3002e9740bf00840cd6b5 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision e79eb4fbdacbc729b0f611f7d27b03ef004dc3da) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision c71a1a94932ab2760fa3002e9740bf00840cd6b5) @@ -162,7 +162,8 @@ { initGenDialysateMode(); setCurrentSubState( NO_SUB_STATE ); - deactivateBalChamberSwitching(); + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); transitionToUltrafiltration(); return genDialysateState; @@ -208,10 +209,16 @@ switch( state ) { case DD_GEND_STATE_START: + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); + // Do nothing break; case DD_GEND_DIALYSATE_BYPASS_STATE: + // Activate Balancing Chamber Switching + requestBalChamberSwitching( TRUE ); + setValveState( D14_VALV, VALVE_STATE_OPEN ); setValveState( D53_VALV, VALVE_STATE_OPEN ); // Drain valve setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI @@ -257,6 +264,9 @@ break; case DD_GEND_DIALYSATE_DELIVERY_STATE: + // Activate Balancing Chamber Switching + requestBalChamberSwitching( TRUE ); + //Previous state setValveState( D47_VALV, VALVE_STATE_CLOSED ); // spent chamber purge valve setValveState( D8_VALV, VALVE_STATE_CLOSED ); @@ -298,6 +308,9 @@ break; case DD_GEND_SPENT_CHAMBER_FILL_STATE: + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); + //Set valves and actuators setValveState( D35_VALV, VALVE_STATE_CLOSED ); // VDI setValveState( D40_VALV, VALVE_STATE_CLOSED ); // VDO @@ -341,6 +354,9 @@ break; case DD_GEND_BICARB_CHAMBER_FILL_STATE: + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); + requestConcentratePumpOff( D11_PUMP, FALSE ); requestConcentratePumpOff( D10_PUMP, FALSE ); requestConcentratePumpOff( D76_PUMP, FALSE ); @@ -377,6 +393,9 @@ break; case DD_GEND_DIALYSATE_DELIVERY_PAUSE: + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); + setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, TRUE ); signalDialysatePumpHardStop( D48_PUMP ); requestConcentratePumpOff( D11_PUMP, FALSE ); @@ -418,6 +437,8 @@ break; case DD_GEND_ISOLATED_UF_STATE: + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); //TODO : define actuators states break; @@ -610,8 +631,6 @@ { DD_GEND_MODE_STATE_T state = DD_GEND_ISOLATED_UF_STATE; - deactivateBalChamberSwitching(); - //TODO: define isoalted ultrafiltration. return state; @@ -642,11 +661,6 @@ delayBypassStateFlag = FALSE; } } - else - { - //Execute balancing chamber - activateBalChamberSwitching(); - } if ( getTestConfigStatus( TEST_CONFIG_DD_ENABLE_SPENT_CHAMBER_H_FILL ) == TRUE ) { @@ -723,9 +737,6 @@ #endif else { - //Execute balancing chamber - activateBalChamberSwitching(); - //Execute ultrafiltration execUFControl(); } @@ -748,8 +759,6 @@ LEVEL_STATE_T spentChamberLevel = getLevelStatus( D46_LEVL ); U32 totalSpentChamberFill = getTotalSpentChamberFillCounts(); - deactivateBalChamberSwitching(); - // High level is met or total fill count exceeded if ( ( LEVEL_STATE_HIGH == spentChamberLevel ) || ( totalSpentChamberFill >= SPENT_CHAMBER_FILL_MAX_COUNT ) ) @@ -789,8 +798,6 @@ LEVEL_STATE_T bicarbChamberLevel = getLevelStatus( D63_LEVL ); BOOL isBicarbFillTimeout = FALSE; - deactivateBalChamberSwitching(); - if ( TRUE == didTimeout( bicarbFillStartTimeMS, BICARB_CHAMBER_FILL_TIMEOUT ) ) { isBicarbFillTimeout = TRUE; @@ -847,8 +854,6 @@ DD_GEND_MODE_STATE_T state = DD_GEND_DIALYSATE_DELIVERY_PAUSE; F32 dialFlowrate = getTDDialysateFlowrate(); - deactivateBalChamberSwitching(); - // Resume pause when Qd is not zero if ( dialFlowrate > ZERO_DIAL_FLOW_RATE ) { Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -rc71a1a94932ab2760fa3002e9740bf00840cd6b5 --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision c71a1a94932ab2760fa3002e9740bf00840cd6b5) @@ -88,6 +88,8 @@ // resetPressuresPOSTState(); resetWatchdogPOSTState(); resetSafetyShutdownPOSTState(); + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); return postState; } Index: firmware/App/Modes/ModePostGenDialysate.c =================================================================== diff -u -re79eb4fbdacbc729b0f611f7d27b03ef004dc3da -rc71a1a94932ab2760fa3002e9740bf00840cd6b5 --- firmware/App/Modes/ModePostGenDialysate.c (.../ModePostGenDialysate.c) (revision e79eb4fbdacbc729b0f611f7d27b03ef004dc3da) +++ firmware/App/Modes/ModePostGenDialysate.c (.../ModePostGenDialysate.c) (revision c71a1a94932ab2760fa3002e9740bf00840cd6b5) @@ -74,7 +74,8 @@ U32 transitionToPostGenDialysateMode( void ) { initPostGenDialysateMode(); - deactivateBalChamberSwitching(); + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); setCurrentSubState( NO_SUB_STATE ); return postGenDialysateState; Index: firmware/App/Modes/ModePreGenDialysate.c =================================================================== diff -u -re79eb4fbdacbc729b0f611f7d27b03ef004dc3da -rc71a1a94932ab2760fa3002e9740bf00840cd6b5 --- firmware/App/Modes/ModePreGenDialysate.c (.../ModePreGenDialysate.c) (revision e79eb4fbdacbc729b0f611f7d27b03ef004dc3da) +++ firmware/App/Modes/ModePreGenDialysate.c (.../ModePreGenDialysate.c) (revision c71a1a94932ab2760fa3002e9740bf00840cd6b5) @@ -100,7 +100,8 @@ { initPreGenDialysateMode(); deenergizeActuators( PARK_CONC_PUMPS ); - deactivateBalChamberSwitching(); + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); setCurrentSubState( NO_SUB_STATE ); Index: firmware/App/Modes/ModeService.c =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -rc71a1a94932ab2760fa3002e9740bf00840cd6b5 --- firmware/App/Modes/ModeService.c (.../ModeService.c) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/ModeService.c (.../ModeService.c) (revision c71a1a94932ab2760fa3002e9740bf00840cd6b5) @@ -57,6 +57,8 @@ { // Deenergize all the actuators deenergizeActuators( NO_PARK_CONC_PUMPS ); + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); initServiceMode(); setCurrentSubState( NO_SUB_STATE ); Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -re79eb4fbdacbc729b0f611f7d27b03ef004dc3da -rc71a1a94932ab2760fa3002e9740bf00840cd6b5 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision e79eb4fbdacbc729b0f611f7d27b03ef004dc3da) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision c71a1a94932ab2760fa3002e9740bf00840cd6b5) @@ -95,6 +95,9 @@ resetPermeateTank(); + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); + // // Upon transition to mode standby set CD1 and CD2 calibration records to be picked to the normal // // table. If the chemical disinfect fails, the mode transitions back to mode standby. // setCondcutivitySensorCalTable( D17_COND, CAL_DATA_CD1_COND_SENSOR ); @@ -182,11 +185,6 @@ requestNewOperationMode( DD_MODE_PREG ); } } - //Test request to handle only balancing chamber switching - else if ( TRUE == pendingBalanceChamberSwOnlyRequest ) - { - activateBalChamberSwitching(); - } // else if ( TRUE == pendingStartDDFlushRequest ) // { // pendingStartDDFlushRequest = FALSE; @@ -263,6 +261,9 @@ { result = TRUE; pendingBalanceChamberSwOnlyRequest = TRUE; + + // Activate Balancing Chamber Switching + requestBalChamberSwitching( TRUE ); } return result; @@ -279,6 +280,10 @@ void requestBCSwitchingOnlyStop( void ) { pendingBalanceChamberSwOnlyRequest = FALSE; + + // Deactivate Balancing Chamber Switching + requestBalChamberSwitching( FALSE ); + // Close all balancing chamber valves valveControlForBCClosedState(); }