Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -rcd21cbb4e733bfdf52f83bdca7a905645022c572 -r44d7427d77dee3f17d6626c86daef7ce84b91596 --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision cd21cbb4e733bfdf52f83bdca7a905645022c572) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 44d7427d77dee3f17d6626c86daef7ce84b91596) @@ -75,6 +75,7 @@ /// Persist time (task intervals) for flow vs. motor speed error condition. static const U32 DIP_FLOW_VS_SPEED_PERSIST = ((5 * MS_PER_SECOND) / TASK_PRIORITY_INTERVAL); +//static const U32 DIP_FLOW_VS_SPEED_PERSIST = ((60 * MS_PER_SECOND) / TASK_PRIORITY_INTERVAL); //DN-03NOV2022 - Make it 1 minutes for testing /// Persist time (task intervals) for motor off error condition. static const U32 DIP_OFF_ERROR_PERSIST = ((5 * MS_PER_SECOND) / TASK_PRIORITY_INTERVAL); /// Persist time (task intervals) motor speed error condition. Index: firmware/App/Controllers/Temperatures.c =================================================================== diff -u -ra4436011a3f30a7b20474c3ddb4d4373ac4b87b6 -r44d7427d77dee3f17d6626c86daef7ce84b91596 --- firmware/App/Controllers/Temperatures.c (.../Temperatures.c) (revision a4436011a3f30a7b20474c3ddb4d4373ac4b87b6) +++ firmware/App/Controllers/Temperatures.c (.../Temperatures.c) (revision 44d7427d77dee3f17d6626c86daef7ce84b91596) @@ -288,9 +288,10 @@ if ( ( temperature > MAX_ALLOWED_TEMPERATURE ) || ( temperature < MIN_ALLOWED_TEMPERATURE ) ) { - isTempOutOfRange |= TRUE; - lastFaultSensor = sensor; + isTempOutOfRange = TRUE; + lastFaultSensor = sensor; } + } checkPersistentAlarm( ALARM_ID_HD_TEMPERATURES_OUT_OF_RANGE, isTempOutOfRange, lastFaultSensor, MAX_ALLOWED_TEMPERATURE ); Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rcd21cbb4e733bfdf52f83bdca7a905645022c572 -r44d7427d77dee3f17d6626c86daef7ce84b91596 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision cd21cbb4e733bfdf52f83bdca7a905645022c572) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 44d7427d77dee3f17d6626c86daef7ce84b91596) @@ -629,8 +629,7 @@ signalBloodPumpHardStop(); signalDialOutPumpHardStop(); - //setDialInPumpTargetFlowRate( DIP_PATIENT_CONNECTION_FLOW_RATE_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - setDialInPumpTargetFlowRate( 250, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); // TODO remove this line once the new flow control is implemented + setDialInPumpTargetFlowRate( DIP_PATIENT_CONNECTION_FLOW_RATE_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); cmdStartDGTrimmerHeater(); } @@ -1178,6 +1177,7 @@ rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_1; rsrvrCmd.useLastTrimmerHeaterDC = FALSE; reservoirFlushedStatus[ DG_RESERVOIR_1 ] = TRUE; + cmdSetDGActiveReservoir( &rsrvrCmd ); } } @@ -1188,6 +1188,7 @@ rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_2; rsrvrCmd.useLastTrimmerHeaterDC = FALSE; reservoirFlushedStatus[ DG_RESERVOIR_2 ] = TRUE; + cmdSetDGActiveReservoir( &rsrvrCmd ); } } Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -ra4436011a3f30a7b20474c3ddb4d4373ac4b87b6 -r44d7427d77dee3f17d6626c86daef7ce84b91596 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision a4436011a3f30a7b20474c3ddb4d4373ac4b87b6) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 44d7427d77dee3f17d6626c86daef7ce84b91596) @@ -48,6 +48,7 @@ #define DISINFECTS_DATA_PUB_INTERVAL ( 1 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Disinfects data publish interval in counts. #define DISINFECTS_TIME_INTERVAL_S ( 2 * SECONDS_IN_A_DAY ) ///< HD/DG 2-day service interval in seconds. +#define FLUSH_TIME_INTERVAL_S ( 30 * SEC_PER_MIN * MS_PER_SECOND ) ///< Flush time interval in seconds. // ********** private data ********** @@ -66,6 +67,7 @@ static OVERRIDE_U32_T standbyModePublishInterval = { DISINFECTS_DATA_PUB_INTERVAL, DISINFECTS_DATA_PUB_INTERVAL, DISINFECTS_DATA_PUB_INTERVAL, 0 }; static const U32 SERVICE_TIME_INTERVAL_S = (U32)( 365 * 0.5 * SECONDS_IN_A_DAY ); ///< HD/DG 6-month service interval in seconds. +static BOOL homingInitiated; ///< Flag indicates actuator homing has been initiated from standby mode. // ********** private function prototypes ********** @@ -109,6 +111,7 @@ heatDisinfectStartReqReceived = FALSE; chemDisinfectStartReqReceived = FALSE; disinfectCancelReqID = GENERIC_CONFIRM_ID_NONE; + homingInitiated = FALSE; dgDisinfectState = DG_DISINFECT_NOT_RUNNING_STATE; homingInitiated = FALSE; } @@ -969,27 +972,44 @@ static BOOL isDGDisinfectValid( void ) { DG_SERVICE_AND_USAGE_DATA_T data; - BOOL status = TRUE; + BOOL status = FALSE; getHDVersionDGServiceAndUsageData( &data ); if ( TRUE == data.isDGUsageInfoAviable ) { - if ( TRUE == data.dgUsageInfo.isDisinfected ) - { - U32 chemDisElapsedTimeS = getRTCTimestamp() - data.dgUsageInfo.lastChemicalDisDateEpoch; - BOOL hasChemDisBeenExpired = ( chemDisElapsedTimeS > DISINFECTS_TIME_INTERVAL_S ? TRUE : FALSE ); - U32 heatDisElapsedTimeS = getRTCTimestamp() - data.dgUsageInfo.lastHeatDisDateEpoch; - BOOL hasHeatDisBeenExpired = ( heatDisElapsedTimeS > DISINFECTS_TIME_INTERVAL_S ? TRUE : FALSE ); + HD_USAGE_INFO_RECORD_T usageRecord; + getNVRecord2Driver( GET_USAGE_RECORD, (U08*)&usageRecord, sizeof( HD_USAGE_INFO_RECORD_T ), 0, ALARM_ID_NO_ALARM ); - if ( ( TRUE == hasChemDisBeenExpired ) && ( TRUE == hasHeatDisBeenExpired ) ) - { - status = FALSE; - } - } - else + U32 lastChemCompleteDate = data.dgUsageInfo.lastChemDisCompleteDateEpoch; + U32 lastChemFlushCompleteDate = data.dgUsageInfo.lastChemDisFlushCompleteDateEpoch; + U32 lastHeatCompleteDate = data.dgUsageInfo.lastHeatDisCompleteDateEpoch; + U32 lastFlushCompleteDate = data.dgUsageInfo.lastBasicFlushCompleteDateEpoch; + U32 lastStartTxTimeDate = usageRecord.txLastStartTimeEpoch; + + // Last Treatment Start < Last Heat Disinfect Complete or Last Treatment Start < Last Chem Disinfect Complete so it means at least a heat disinfect + // or a chemical disinfect has been done since the last treatment + BOOL hasDisBeenDone = ( ( ( lastStartTxTimeDate < lastChemCompleteDate ) || ( lastStartTxTimeDate < lastHeatCompleteDate ) ) ? TRUE : FALSE ); + + // Last Chem Disinfect Complete < Current Time – Chem Disinfect Interval, so the chemical disinfect that has been done has not been expired + BOOL isChemDisValid = ( lastChemCompleteDate < ( getRTCTimestamp() - DISINFECTS_TIME_INTERVAL_S ) ? TRUE : FALSE ); + + // Last Heat Disinfect Complete < Current Time – Heat Disinfect Interval, so the heat disinfect that has been done has not been expired + BOOL isHeatDisValid = ( lastHeatCompleteDate < ( getRTCTimestamp() - DISINFECTS_TIME_INTERVAL_S ) ? TRUE : FALSE ); + + // Last Chem Flush Complete < Last Chem Disinfect Start, so after running a chemical disinfect, a chemical disinfect flush has been done + BOOL isChemFlushComplete = ( lastChemFlushCompleteDate > lastChemCompleteDate ? TRUE : FALSE ); + + // If either of the basic flush, heat disinfect, or chemical disinfect flush have been done within the interval, it means the filters have been flushed + BOOL isBasicFlushValid = ( lastFlushCompleteDate < ( getRTCTimestamp() - FLUSH_TIME_INTERVAL_S ) ? TRUE : TRUE ); + BOOL isHeatDisFlushValid = ( lastHeatCompleteDate < ( getRTCTimestamp() - FLUSH_TIME_INTERVAL_S ) ? TRUE : TRUE ); + BOOL isChemFlushValid = ( lastChemFlushCompleteDate < ( getRTCTimestamp() - FLUSH_TIME_INTERVAL_S ) ? TRUE : TRUE ); + BOOL isFlushValid = ( isBasicFlushValid || isHeatDisFlushValid || isChemFlushValid ); + + // If all of the above conditions are true, it means we can start a treatment + if ( ( TRUE == hasDisBeenDone ) && ( TRUE == isChemDisValid ) && ( TRUE == isHeatDisValid ) && ( TRUE == isChemFlushComplete ) && ( TRUE == isFlushValid ) ) { - status = FALSE; + status = TRUE; } } @@ -1016,7 +1036,7 @@ if ( TRUE == dgData.isDGServiceRecordAvailable ) { - U32 dgSrvcElapsedTimeS = getRTCTimestamp() - dgData.dgServiceRecord.lastServiceDateEpoch; + U32 dgSrvcElapsedTimeS = getRTCTimestamp() - dgData.dgServiceRecord.lastServiceEpochDate; BOOL hasDGSrvcBeenExpired = ( dgSrvcElapsedTimeS > SERVICE_TIME_INTERVAL_S ? TRUE : FALSE ); U32 hdSrvcElapsedTimeS = getRTCTimestamp() - hdServiceRecord.lastServiceEpochDate; BOOL hasHDSrvcBeenExpied = ( hdSrvcElapsedTimeS > SERVICE_TIME_INTERVAL_S ? TRUE : FALSE ); Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -rcd21cbb4e733bfdf52f83bdca7a905645022c572 -r44d7427d77dee3f17d6626c86daef7ce84b91596 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision cd21cbb4e733bfdf52f83bdca7a905645022c572) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 44d7427d77dee3f17d6626c86daef7ce84b91596) @@ -354,7 +354,7 @@ } else { - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_NO_CART_SELF_TEST_TIMEOUT, currentNoCartSelfTestsState ); +// SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_NO_CART_SELF_TEST_TIMEOUT, currentNoCartSelfTestsState ); } } }