Index: firmware/App/Controllers/Buttons.c =================================================================== diff -u -r766708fceb0bdf1af8c7897df29d4f5036bfd3db -r8c00197ce69e80f1967aa3f2eb36beb3573f36f3 --- firmware/App/Controllers/Buttons.c (.../Buttons.c) (revision 766708fceb0bdf1af8c7897df29d4f5036bfd3db) +++ firmware/App/Controllers/Buttons.c (.../Buttons.c) (revision 8c00197ce69e80f1967aa3f2eb36beb3573f36f3) @@ -367,9 +367,6 @@ { // If off request in a valid mode, send to UI for user confirmation userConfirmOffButton( OFF_BUTTON_RSP_USER_REQUESTS_POWER_OFF ); -#ifdef SIMULATE_UI - userConfirmOffButton( OFF_BUTTON_RSP_USER_CONFIRMS_POWER_OFF ); -#endif } prevOffButtonState = getOffButtonState(); } Index: firmware/App/Controllers/DGInterface.c =================================================================== diff -u -r5072f7dedbe4be9dd9d2bfe9a46f53c1d3f356fc -r8c00197ce69e80f1967aa3f2eb36beb3573f36f3 --- firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision 5072f7dedbe4be9dd9d2bfe9a46f53c1d3f356fc) +++ firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision 8c00197ce69e80f1967aa3f2eb36beb3573f36f3) @@ -47,7 +47,7 @@ TREATMENT_RESERVOIR_MGMT_FILL_RESERVOIR_STATE, ///< Wait for fill to complete. TREATMENT_RESERVOIR_MGMT_WAIT_FOR_FILL_SETTLE_STATE, ///< Wait a bit for filled reservoir to settle before getting baseline weight (volume). TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RES_SWITCH_STATE, ///< Wait for active reservoir to be consumed and switch cmd given - then back to flush DG lines state. - TREATMENT_RESERVOIR_MGMT_WAIT_FOR_SWITCH_SETTLE_STATE, ///< Wait for inactive reservoir to settle before getting final weight (volume) before starting to drain. + TREATMENT_RESERVOIR_MGMT_WAIT_FOR_SWITCH_SETTLE_STATE, ///< Wait for inactive reservoir to settle before getting final weight (volume) before starting to drain. NUM_OF_TREATMENT_RESERVOIR_MGMT_STATES ///< Number of treatment reservoir mgmt. states. } TREATMENT_RESERVOIR_MGMT_STATE_T; @@ -203,6 +203,19 @@ resMgmtTimer = 0; resUseTimer = getMSTimerCount(); resUseVolumeMl = 0.0; +} + +/*********************************************************************//** + * @brief + * The dialysisResumed function initializes the reservoir re-use timer + * when dialysis is started/resumed so that dialysate usage can be tracked. + * @details Inputs: none + * @details Outputs: resUseTimer + * @return none + *************************************************************************/ +void dialysisResumed( void ) +{ + resUseTimer = getMSTimerCount(); } /*********************************************************************//** @@ -219,22 +232,22 @@ U32 dgSubMode = getDGSubMode(); U32 msSinceLastVolumeCalc = calcTimeSince( resUseTimer ); F32 flowRateMlPerMs = (F32)getTargetDialInFlowRate() / (F32)( MS_PER_SECOND * SEC_PER_MIN ); - + // Calculate volume used from active reservoir - do not accumulate if saline bolus in progress if ( SALINE_BOLUS_STATE_IN_PROGRESS != getSalineBolusState() ) { resUseVolumeMl += ( flowRateMlPerMs * msSinceLastVolumeCalc ); // TODO - should this calc be done and kept by Dialysis sub-mode? } - resUseTimer = getMSTimerCount(); - + resUseTimer = getMSTimerCount(); + // Treatment reservoir mgmt. state machine switch ( currentTrtResMgmtState ) { case TREATMENT_RESERVOIR_MGMT_START_STATE: currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE; break; - case TREATMENT_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE: + case TREATMENT_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE: if ( DG_MODE_CIRC == dgOpMode ) { if ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) @@ -255,7 +268,7 @@ case TREATMENT_RESERVOIR_MGMT_DRAIN_RESERVOIR_STATE: if ( DG_MODE_CIRC == dgOpMode ) { - currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_WAIT_TO_FILL_STATE; + currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_WAIT_TO_FILL_STATE; } break; @@ -278,7 +291,7 @@ if ( DG_MODE_FILL == dgOpMode ) { currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_FILL_RESERVOIR_STATE; - } + } break; case TREATMENT_RESERVOIR_MGMT_FILL_RESERVOIR_STATE: @@ -326,8 +339,8 @@ // Reset to start state to restart drain, fill, switch process. currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_START_STATE; } - break; - + break; + default: // TODO - s/w fault currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_START_STATE; Index: firmware/App/Controllers/DGInterface.h =================================================================== diff -u -r5072f7dedbe4be9dd9d2bfe9a46f53c1d3f356fc -r8c00197ce69e80f1967aa3f2eb36beb3573f36f3 --- firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision 5072f7dedbe4be9dd9d2bfe9a46f53c1d3f356fc) +++ firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision 8c00197ce69e80f1967aa3f2eb36beb3573f36f3) @@ -113,7 +113,8 @@ void initPreTreatmentReservoirMgmt( void ); void initTreatmentReservoirMgmt( void ); -void execTreatmentReservoirMgmt( void ); +void dialysisResumed( void ); +void execTreatmentReservoirMgmt( void ); DG_OP_MODE_T getDGOpMode( void ); U32 getDGSubMode( void ); Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -r6b870cd0699bb3ee22b93981d51373a6c2d56162 -r8c00197ce69e80f1967aa3f2eb36beb3573f36f3 --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 6b870cd0699bb3ee22b93981d51373a6c2d56162) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 8c00197ce69e80f1967aa3f2eb36beb3573f36f3) @@ -185,6 +185,9 @@ // Send dialysate outlet pump latest UF volumes setDialOutUFVolumes( refUFVolume, measUFVolume ); + // Inform DG interface that dialysis has started/resumed + dialysisResumed(); + // Set valves for dialysis setValvePosition( VDI, VALVE_POSITION_B_OPEN ); setValvePosition( VDO, VALVE_POSITION_B_OPEN ); Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -r30f049651877229042e3f8700c8596e5b9a1e0f4 -r8c00197ce69e80f1967aa3f2eb36beb3573f36f3 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 30f049651877229042e3f8700c8596e5b9a1e0f4) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 8c00197ce69e80f1967aa3f2eb36beb3573f36f3) @@ -53,6 +53,8 @@ *************************************************************************/ void transitionToPostTreatmentMode( void ) { + // TODO - stop any DG fill that may be in progress from an aborted treatment + // Set user alarm recovery actions allowed in this mode setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, TRUE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r6b870cd0699bb3ee22b93981d51373a6c2d56162 -r8c00197ce69e80f1967aa3f2eb36beb3573f36f3 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 6b870cd0699bb3ee22b93981d51373a6c2d56162) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 8c00197ce69e80f1967aa3f2eb36beb3573f36f3) @@ -353,4 +353,38 @@ } } + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testSetOperationMode function will transition to a given operation + * mode if the transition is legal. + * @details Inputs: none + * @details Outputs: modeRequest[] + * @param newMode ID of requested mode to transition to + * @return TRUE if request successful, FALSE if not + *************************************************************************/ +BOOL testSetOperationMode( HD_OP_MODE_T newMode ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + HD_OP_MODE_T check = MODE_TRANSITION_TABLE[ currentMode ][ newMode ]; + + // Is mode transition legal? + if ( check == newMode ) + { + requestNewOperationMode( newMode ); + result = TRUE; + } + } + + return result; +} + /**@}*/ Index: firmware/App/Modes/OperationModes.h =================================================================== diff -u -r30f049651877229042e3f8700c8596e5b9a1e0f4 -r8c00197ce69e80f1967aa3f2eb36beb3573f36f3 --- firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 30f049651877229042e3f8700c8596e5b9a1e0f4) +++ firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 8c00197ce69e80f1967aa3f2eb36beb3573f36f3) @@ -39,6 +39,8 @@ HD_OP_MODE_T getCurrentOperationMode( void ); // Get the current operation mode void initiateAlarmAction( ALARM_ACTION_T action ); // Initiate an alarm or alarm recovery action according to current op mode +BOOL testSetOperationMode( HD_OP_MODE_T newMode ); // Force transition to a given mode (if allowed) + /**@}*/ #endif Index: firmware/App/Modes/TreatmentEnd.c =================================================================== diff -u -rb9fd6bfd063774f1295a1a84de74a257d7b29640 -r8c00197ce69e80f1967aa3f2eb36beb3573f36f3 --- firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision b9fd6bfd063774f1295a1a84de74a257d7b29640) +++ firmware/App/Modes/TreatmentEnd.c (.../TreatmentEnd.c) (revision 8c00197ce69e80f1967aa3f2eb36beb3573f36f3) @@ -109,6 +109,8 @@ { initTreatmentEnd(); + // TODO - stop any DG fill that may be in progress + // Set valves setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r161a56481d1a194704b63a5fd55d4c5583fa94df -r8c00197ce69e80f1967aa3f2eb36beb3573f36f3 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 161a56481d1a194704b63a5fd55d4c5583fa94df) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 8c00197ce69e80f1967aa3f2eb36beb3573f36f3) @@ -1443,6 +1443,10 @@ handleTestDialOutPumpHomeRequest( message ); break; + case MSG_ID_HD_SET_OP_MODE_REQUEST: + handleTestSetOpModeRequest( message ); + break; + case MSG_ID_SUPER_CLEAR_ALARMS_CMD: handleTestSuperClearAlarmsRequest( message ); break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r52921ebabd1262de9e242479fb29f6a648268cfa -r8c00197ce69e80f1967aa3f2eb36beb3573f36f3 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 52921ebabd1262de9e242479fb29f6a648268cfa) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 8c00197ce69e80f1967aa3f2eb36beb3573f36f3) @@ -27,7 +27,8 @@ #include "ModePreTreat.h" #include "ModeStandby.h" #include "ModeTreatment.h" -#include "ModeTreatmentParams.h" +#include "ModeTreatmentParams.h" +#include "OperationModes.h" #include "PresOccl.h" #include "RTC.h" #include "SafetyShutdown.h" @@ -4169,8 +4170,32 @@ memcpy( &key, message->payload, sizeof(U32) ); result = testClearAllAlarms( key ); + } - result = TRUE; + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** + * @brief + * The handleTestSetOpModeRequest function handles a request to set the + * HD operation mode. + * @details + * Inputs : none + * Outputs : message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestSetOpModeRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(U32) ) + { + U32 mode; + + memcpy( &mode, message->payload, sizeof(U32) ); + result = testSetOperationMode( (HD_OP_MODE_T)mode ); } // Respond to request Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r52921ebabd1262de9e242479fb29f6a648268cfa -r8c00197ce69e80f1967aa3f2eb36beb3573f36f3 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 52921ebabd1262de9e242479fb29f6a648268cfa) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 8c00197ce69e80f1967aa3f2eb36beb3573f36f3) @@ -455,6 +455,9 @@ // MSG_ID_SUPER_CLEAR_ALARMS_CMD void handleTestSuperClearAlarmsRequest( MESSAGE_T *message ); +// MSG_ID_HD_SET_OP_MODE_REQUEST +void handleTestSetOpModeRequest( MESSAGE_T *message ); + /**@}*/ #endif