Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r2f282113c1540be57b9d00833224d7ce93d460cd -r927dfd6e109af46160e5aef687f1b7c286d24703 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 2f282113c1540be57b9d00833224d7ce93d460cd) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 927dfd6e109af46160e5aef687f1b7c286d24703) @@ -17,10 +17,15 @@ #include "BloodFlow.h" #include "Buttons.h" +#include "DrySelfTests.h" #include "DDInterface.h" #include "ModePreTreat.h" #include "OperationModes.h" +<<<<<<< HEAD +#include "TaskGeneral.h" +======= #include "StatePreTxRecirculate.h" +>>>>>>> 0904e146ed12daa575b419612f5cdef5000fd0f5 #include "Timers.h" #include "TubeSetInstall.h" #include "TxParams.h" @@ -31,23 +36,33 @@ * @{ */ +// ********** private definitions ********** + +#define SUBMODE_COMPLETE_UI_TRANSITION_TIME_COUNT ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) + // ********** private data ********** static TD_PRE_TREATMENT_MODE_STATE_T currentPreTreatmentState; ///< Current Pre-Treatment sub-state static BOOL goToInstallStateRequested; ///< Flag indicating a request to transition to Install state. +<<<<<<< HEAD +static BOOL alarmActionResumeReceived; ///< Flag indicates alarm action resume received. +static BOOL tubeSetInstallRequested; ///< Request to re-enter install flow (mid-treatment / failure) +static U32 submodeCompleteTransitionTimeCounter; ///< Sub-mode completed transition wait time counter. +======= static BOOL continueFromRecirculateRequested; ///< Flag indicating a request to transition to Patient Connection state. +>>>>>>> 0904e146ed12daa575b419612f5cdef5000fd0f5 // ********** private function prototypes ********** static TD_PRE_TREATMENT_MODE_STATE_T handleWaterSampleState( void ); ///< Handle Water Sample state during Pre-Treatment static TD_PRE_TREATMENT_MODE_STATE_T handleSelfTestConsumableState( void ); ///< Handle Self Test Consumable state during Pre-Treatment static TD_PRE_TREATMENT_MODE_STATE_T handleSelfTestNoCartState( void ); ///< Handle Self Test No Cart state during Pre-Treatment static TD_PRE_TREATMENT_MODE_STATE_T handleInstallState( void ); ///< Handle Install state during Pre-Treatment -static TD_PRE_TREATMENT_MODE_STATE_T handleSelfTestDryState( void ); ///< Handle Self Test Dry state during Pre-Treatment static TD_PRE_TREATMENT_MODE_STATE_T handlePrimeState( void ); ///< Handle Prime state during Pre-Treatment static TD_PRE_TREATMENT_MODE_STATE_T handleRecirculateState( void ); ///< Handle Recirculate state during Pre-Treatment static TD_PRE_TREATMENT_MODE_STATE_T handleRxState( void ); ///< Handle Confirm Rx state during Pre-Treatment static TD_PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ); ///< Handle Patient Connection state during Pre-Treatment +static TD_PRE_TREATMENT_MODE_STATE_T handleDrySelfTestState( void ); ///< Handle dry self tests state during Pre-Treatment /*********************************************************************//** * @brief @@ -112,31 +127,30 @@ switch ( currentPreTreatmentState ) { case TD_PRE_TREATMENT_WATER_SAMPLE_STATE: - // currentPreTreatmentState = handleWaterSampleState(); + currentPreTreatmentState = handleWaterSampleState(); break; case TD_PRE_TREATMENT_SELF_TEST_CONSUMABLE_STATE: - // currentPreTreatmentState = handleSelfTestConsumableState(); + currentPreTreatmentState = handleSelfTestConsumableState(); break; case TD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE: - // currentPreTreatmentState = handleSelfTestNoCartState(); + currentPreTreatmentState = handleSelfTestNoCartState(); break; case TD_PRE_TREATMENT_TUBING_SET_INSTALL_STATE: currentPreTreatmentState = handleInstallState(); break; case TD_PRE_TREATMENT_SELF_TEST_DRY_STATE: - // currentPreTreatmentState = handleSelfTestDryState(); + currentPreTreatmentState = handleDrySelfTestState(); break; case TD_PRE_TREATMENT_PRIME_STATE: - // currentPreTreatmentState = handlePrimeState(); + currentPreTreatmentState = handlePrimeState(); break; case TD_PRE_TREATMENT_CONFIRM_RX_STATE: - // Confirm Rx state currentPreTreatmentState = handleRxState(); break; @@ -145,7 +159,7 @@ break; case TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE: - // currentPreTreatmentState = handlePatientConnectionState(); + currentPreTreatmentState = handlePatientConnectionState(); break; default: @@ -158,6 +172,19 @@ /*********************************************************************//** * @brief + * The getPreTreatmentSubState function gets the current + * pre-treatment mode state. + * @details \b Inputs: currentPreTreatmentState + * @details \b Outputs: none + * @return currentPreTreatmentState + *************************************************************************/ +TD_PRE_TREATMENT_MODE_STATE_T getPreTreatmentSubState( void ) +{ + return currentPreTreatmentState; +} + +/*********************************************************************//** + * @brief * The handleWaterSampleState function executes the Water Sample state of * pre-treatment mode. * @details \b Inputs: TODO fill up if any @@ -211,7 +238,6 @@ } /*********************************************************************//** - * @brief * The handleInstallState function calls Tube Set Install Service and * advances to Self Test Dry state once the service signals * completion. @@ -236,26 +262,40 @@ /*********************************************************************//** * @brief - * The handleSelfTestDryState function executes the Self Test Dry state - * of pre-treatment mode. - * @details \b Inputs: TODO fill up if any - * @details \b Outputs: TODO fill up if any - * @return next Pre-Treatment mode state. + * The handleSelfTestDryState function performs dry self-test. + * @details \b Inputs: none + * @details \b Outputs: transition to prime state on user request + * @return current state (sub-mode) *************************************************************************/ -static TD_PRE_TREATMENT_MODE_STATE_T handleSelfTestDryState( void ) +static TD_PRE_TREATMENT_MODE_STATE_T handleDrySelfTestState( void ) { TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_SELF_TEST_DRY_STATE; - if ( TRUE == goToInstallStateRequested ) + if ( TRUE == alarmActionResumeReceived ) { - goToInstallStateRequested = FALSE; - initTubeSetInstall(); - state = TD_PRE_TREATMENT_TUBING_SET_INSTALL_STATE; + alarmActionResumeReceived = FALSE; + signalResumeDrySelfTests(); } - // TODO: Transition to Prime state on completion when implemented - // state = TD_PRE_TREATMENT_PRIME_STATE; + execDrySelfTests(); + // Handle install request to failure path + if ( TRUE == tubeSetInstallRequested ) + { + tubeSetInstallRequested = FALSE; + state = TD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; + } + + if ( DRY_SELF_TESTS_COMPLETE_STATE == getDrySelfTestsState() ) + { + if ( submodeCompleteTransitionTimeCounter++ >= SUBMODE_COMPLETE_UI_TRANSITION_TIME_COUNT ) + { + submodeCompleteTransitionTimeCounter = 0; + state = TD_PRE_TREATMENT_CONFIRM_RX_STATE; + // TODO +// transitionToPrime(); + } + } return state; } Index: firmware/App/Modes/ModePreTreat.h =================================================================== diff -u -r2f282113c1540be57b9d00833224d7ce93d460cd -r927dfd6e109af46160e5aef687f1b7c286d24703 --- firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision 2f282113c1540be57b9d00833224d7ce93d460cd) +++ firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision 927dfd6e109af46160e5aef687f1b7c286d24703) @@ -37,6 +37,7 @@ U32 execPreTreatmentMode( void ); // Execute the pre-treatment mode state machine (call from OperationModes) void signalAlarmActionToPreTreatmentMode( ALARM_ACTION_T action ); // Execute alarm action as appropriate for pre-treatment mode +TD_PRE_TREATMENT_MODE_STATE_T getPreTreatmentSubState( void ); // Get the current pre-treatment sub mode. void PreTxRequestTubeSetInstall( void ); // Request Pre-Treatment mode to transition to Install state. void PreTxRequestContinueFromRecirculate( void ); // Request Pre-Treatment mode to transition to Patient Connection state. Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r2f282113c1540be57b9d00833224d7ce93d460cd -r927dfd6e109af46160e5aef687f1b7c286d24703 --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 2f282113c1540be57b9d00833224d7ce93d460cd) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 927dfd6e109af46160e5aef687f1b7c286d24703) @@ -197,6 +197,8 @@ SW_FAULT_ID_MODE_POST_TX_AUTO_EJECT_INVALID_STATE = 166, SW_FAULT_ID_INVALID_FLUID_BOLUS_STATE = 167, SW_FAULT_ID_PRE_TX_RECIRC_INVALID_STATE = 168, + SW_FAULT_ID_INVALID_MESSAGE_PAYLOAD_LENGTH = 169, + SW_FAULT_ID_TD_INVALID_DRY_SELF_TEST_STATE = 170, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/DDInterface.c =================================================================== diff -u -r1b83a4555c4040a45cecfbea45b6570812ab281e -r927dfd6e109af46160e5aef687f1b7c286d24703 --- firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision 1b83a4555c4040a45cecfbea45b6570812ab281e) +++ firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision 927dfd6e109af46160e5aef687f1b7c286d24703) @@ -120,7 +120,7 @@ dialysateDeliveryCmdSet.bicarbConvFactor = 0.0F; dialysateDeliveryCmdSet.sodium = 0; dialysateDeliveryCmdSet.bicarbonate = 0; - dialysateDeliveryCmdSet.substitutionRate = 0.0F; + //dialysateDeliveryCmdSet.substitutionRate = 0.0F; } /**********************************************************************//** @@ -401,7 +401,7 @@ dialysateDeliveryCmdSet.bicarbConvFactor = bicarbConvFactor; dialysateDeliveryCmdSet.sodium = sodium; dialysateDeliveryCmdSet.bicarbonate = bicarbonate; - dialysateDeliveryCmdSet.substitutionRate = 0.0F; + //dialysateDeliveryCmdSet.substitutionRate = 0.0F; #ifndef TEST_UI_ONLY sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); @@ -614,7 +614,7 @@ { if ( TRUE == dialysateDeliveryCmdSet.start ) { - dialysateDeliveryCmdSet.substitutionRate = qs; + //dialysateDeliveryCmdSet.substitutionRate = qs; #ifndef TEST_UI_ONLY sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); #endif Index: firmware/App/Services/FpgaTD.c =================================================================== diff -u -r1b83a4555c4040a45cecfbea45b6570812ab281e -r927dfd6e109af46160e5aef687f1b7c286d24703 --- firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 1b83a4555c4040a45cecfbea45b6570812ab281e) +++ firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 927dfd6e109af46160e5aef687f1b7c286d24703) @@ -189,11 +189,15 @@ U08 h1Control; ///< Reg 30. H1 control register. U08 h1h19ValveEncoderControl; ///< Reg 31. H1/H19 valve encoder control register. U08 alarmControl; ///< Reg 32. Alarm audio control register. + U08 syrPumpControl; ///< Reg 33. Syringe pump control register. + U32 syrPumpSpeed; ///< Reg 34. Syringe pump time between step toggle (1/2 step period). + U16 syrPumpDACData; ///< Reg 38. Syringe pump DAC data (12 bits). + U16 syrPumpDACControl; ///< Reg 40. Syringe pump ADC and DAC control register. + U16 h12Period; ///< Reg 42. H12 Period U08 h10Control; ///< Reg 33. H10 Syringe pump control register. U32 h10Speed; ///< Reg 34. H10 Syringe pump time between step toggle (1/2 step period). U16 h10DACData; ///< Reg 38. H10 Syringe pump DAC data (12 bits). U16 h10DACControl; ///< Reg 40. H10 Syringe pump ADC and DAC control register. - U16 h12Period; ///< Reg 42. H12 Air pump time period for each count in PWM register. U32 h5SetSpeed; ///< Reg 44. H5 ejector motor set speed. } FPGA_ACTUATORS_T; Index: firmware/App/TDCommon.h =================================================================== diff -u -r0904e146ed12daa575b419612f5cdef5000fd0f5 -r927dfd6e109af46160e5aef687f1b7c286d24703 --- firmware/App/TDCommon.h (.../TDCommon.h) (revision 0904e146ed12daa575b419612f5cdef5000fd0f5) +++ firmware/App/TDCommon.h (.../TDCommon.h) (revision 927dfd6e109af46160e5aef687f1b7c286d24703) @@ -37,7 +37,7 @@ // #define TEST_DEBUGGER 1 // Testing with debugger - prevents FPGA comm alarms caused by breakpoints // #define TEST_PROCESS_TASKS_WO_UI 1 // Allow task processing even when UI not connected // #define TEST_UI_ONLY 1 // Alpha test with TD and UI only - no DD -// #define TEST_DISABLE_UI_ALARMS 1 // Disable UI alarms + #define TEST_DISABLE_UI_ALARMS 1 // Disable UI alarms // #define TEST_USE_OFF_AS_STOP_BUTTON 1 // Alpha test re-purposing off button as a stop button // #define TEST_NO_PRESSURE_CHECKS 1 // Alpha test with no pressure sensor checks // #define TEST_NO_STOP_CONSUME_CHECK 1 // Alpha test with no check for stop button timeout