Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r44a100f8e5210a02c23b8fcc4527d8e96d577381 -r8bd1ae47aa13a843aa8abd6321ddc050deacb4a6 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 44a100f8e5210a02c23b8fcc4527d8e96d577381) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 8bd1ae47aa13a843aa8abd6321ddc050deacb4a6) @@ -1,17 +1,17 @@ /************************************************************************** * -* Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +* Copyright (c) 2019-2021 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * -* @file SelfTests.c +* @file SelfTests.c * -* @author (last) Quang Nguyen -* @date (last) 28-Jan-2021 +* @author (last) Quang Nguyen +* @date (last) 09-Aug-2021 * -* @author (original) Quang Nguyen -* @date (original) 28-Jan-2021 +* @author (original) Quang Nguyen +* @date (original) 28-Jan-2021 * ***************************************************************************/ @@ -202,6 +202,10 @@ signalDialInPumpHardStop(); signalDialOutPumpHardStop(); stopSyringePump(); + setValvePosition( VDI, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( VDO, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( VBA, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( VBV, VALVE_POSITION_A_INSERT_EJECT ); } /*********************************************************************//** @@ -312,7 +316,11 @@ if ( elapsedSelfTestTimeInSecs <= MAX_NO_CARTRIDGE_SELF_TEST_TIME ) { - broadcastNoCartSelfTestTime( MAX_NO_CARTRIDGE_SELF_TEST_TIME, ( MAX_NO_CARTRIDGE_SELF_TEST_TIME - elapsedSelfTestTimeInSecs ) ); + SELF_TEST_NO_CARTRIDGE_PAYLOAD_T data; + + data.timeout = MAX_NO_CARTRIDGE_SELF_TEST_TIME; + data.countdown = ( MAX_NO_CARTRIDGE_SELF_TEST_TIME - elapsedSelfTestTimeInSecs ); + broadcastData( MSG_ID_HD_NO_CART_SELF_TEST_PROGRESS, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( SELF_TEST_NO_CARTRIDGE_PAYLOAD_T ) ); } else { @@ -443,7 +451,11 @@ if ( elapsedSelfTestTimeInSecs <= MAX_DRY_SELF_TEST_TIME ) { - broadcastDrySelfTestTime( MAX_DRY_SELF_TEST_TIME, ( MAX_DRY_SELF_TEST_TIME - elapsedSelfTestTimeInSecs ) ); + SELF_TEST_DRY_PAYLOAD_T data; + + data.timeout = MAX_DRY_SELF_TEST_TIME; + data.countdown = ( MAX_DRY_SELF_TEST_TIME - elapsedSelfTestTimeInSecs ); + broadcastData( MSG_ID_HD_DRY_SELF_TEST_PROGRESS, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( SELF_TEST_DRY_PAYLOAD_T ) ); } else { @@ -593,6 +605,7 @@ signalBloodPumpHardStop(); signalDialInPumpHardStop(); signalDialOutPumpHardStop(); + selfTestStartTime = getMSTimerCount(); // TODO: Use appropriate sensor driver if ( STATE_CLOSED == getFPGADoorState() ) @@ -750,6 +763,9 @@ { NO_CART_SELF_TESTS_STATE_T state = NO_CART_SELF_TESTS_STOPPED_STATE; + // Restart self-test start time + selfTestStartTime = getMSTimerCount(); + if ( TRUE == selfTestsResumeRequested ) { selfTestsResumeRequested = FALSE; @@ -772,10 +788,17 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; + // Restart self-test start time + selfTestStartTime = getMSTimerCount(); + // TODO: Use appropriate sensor driver if ( STATE_CLOSED == getFPGADoorState() ) { state = DRY_SELF_TESTS_USED_CARTRIDGE_CHECK_STATE; + setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); + setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); + setValvePosition( VBA, VALVE_POSITION_C_CLOSE ); + setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); } if ( TRUE == doesAlarmStatusIndicateStop() ) @@ -841,8 +864,8 @@ } else { - previousNormalArterialPressure = getMeasuredArterialPressure(); - previousNormalVenousPressure = getMeasuredVenousPressure(); + previousNormalArterialPressure = getFilteredArterialPressure(); + previousNormalVenousPressure = getFilteredVenousPressure(); setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); @@ -868,8 +891,8 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsState( SELF_TEST_STATUS_T *result ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_SENSORS_STATE; - F32 const arterialPressure = getMeasuredArterialPressure(); - F32 const venousPressure = getMeasuredVenousPressure(); + F32 const arterialPressure = getFilteredArterialPressure(); + F32 const venousPressure = getFilteredVenousPressure(); // End the test when reaching target pressure or time out if ( ( TRUE == didTimeout( pressureSelfTestBloodPumpRunStartTime, BLOOD_PUMP_RUN_TIME_PRESSURE_SELF_TEST ) ) || @@ -912,8 +935,8 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_SENSORS_NORMAL_STATE; - F32 const arterialPressureDiff = fabs( getMeasuredArterialPressure() - previousNormalArterialPressure ); - F32 const venousPressureDiff = fabs( getMeasuredVenousPressure() - previousNormalVenousPressure ); + F32 const arterialPressureDiff = fabs( getFilteredArterialPressure() - previousNormalArterialPressure ); + F32 const venousPressureDiff = fabs( getFilteredVenousPressure() - previousNormalVenousPressure ); if ( TRUE == didTimeout( pressureSelfTestNormalizedStartTime, NORMALIZED_PRESSURE_SELF_TEST_TIME ) ) { @@ -992,6 +1015,9 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_STOPPED_STATE; + // Restart self-test start time + selfTestStartTime = getMSTimerCount(); + if ( TRUE == selfTestsResumeRequested ) { selfTestsResumeRequested = FALSE;