Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rbfb859737f3d221f08c0f43d1bd4ba7b7680911f -r113f60c96d311d25658fe7a3895adf5c3734d16f --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision bfb859737f3d221f08c0f43d1bd4ba7b7680911f) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 113f60c96d311d25658fe7a3895adf5c3734d16f) @@ -8,13 +8,14 @@ * @file ModePreTreat.c * * @author (last) Praneeth Bunne -* @date (last) 19-May-2026 +* @date (last) 04-Jun-2026 * * @author (original) Dara Navaei * @date (original) 25-Sep-2025 * ***************************************************************************/ +#include "BloodFlow.h" #include "Buttons.h" #include "DrySelfTests.h" #include "DDInterface.h" @@ -24,6 +25,8 @@ #include "Timers.h" #include "TubeSetInstall.h" #include "TxParams.h" +#include "Valves.h" + /** * @addtogroup TDPreTreatmentMode * @{ @@ -56,15 +59,15 @@ /*********************************************************************//** * @brief * The initPreTreatmentMode function initializes the Pre-Treatment mode. -* @details \b Inputs: none -* @details \b Outputs: Resets the Treatment Parameters session and sets the initial +* @details Inputs: none +* @details Outputs: Initializes the Treatment Parameters session and sets the initial * Pre-Treatment sub-state. * @return none **************************************************************************/ void initPreTreatmentMode( void ) { // Start a fresh Treatment Parameters session for this run. - resetTreatmentParameters(); + initTreatmentParameters(); currentPreTreatmentState = TD_PRE_TREATMENT_TUBING_SET_INSTALL_STATE; goToInstallStateRequested = FALSE; } @@ -83,6 +86,13 @@ initPreTreatmentMode(); initTubeSetInstall(); + // TODO: remove after implementing blood pump homing in some state + homeBloodPump(); + + // TODO: remove these homeValve() when SELF_TEST_NO_CART_STATE is implemented (homing valves is handled over there). + homeValve(H1_VALV, FALSE, FALSE); + homeValve(H19_VALV, FALSE, FALSE); + return (U32)currentPreTreatmentState; } Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r21a1f9847f1ccf22ec8b906bcdadea47ec7b5dc9 -r113f60c96d311d25658fe7a3895adf5c3734d16f --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 21a1f9847f1ccf22ec8b906bcdadea47ec7b5dc9) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 113f60c96d311d25658fe7a3895adf5c3734d16f) @@ -8,27 +8,27 @@ * @file AlarmMgmtSWFaults.h * * @author (last) Praneeth Bunne -* @date (last) 21-May-2026 +* @date (last) 04-Jun-2026 * * @author (original) Sean Nash * @date (original) 01-Aug-2024 * ***************************************************************************/ - -#ifndef __ALARM_MGMT_SW_FAULTS_H__ -#define __ALARM_MGMT_SW_FAULTS_H__ - -/** - * @addtogroup AlarmManagement - * @{ - */ - -// ********** public definitions ********** - -/// Listing of specific software faults for logging purposes. -typedef enum -{ - SW_FAULT_ID_NONE = 0, + +#ifndef __ALARM_MGMT_SW_FAULTS_H__ +#define __ALARM_MGMT_SW_FAULTS_H__ + +/** + * @addtogroup AlarmManagement + * @{ + */ + +// ********** public definitions ********** + +/// Listing of specific software faults for logging purposes. +typedef enum +{ + SW_FAULT_ID_NONE = 0, SW_FAULT_ID_ALARM_LAMP_INVALID_PATTERN_REQUESTED = 1, SW_FAULT_ID_ALARM_LAMP_INVALID_SELF_TEST_STATE = 2, SW_FAULT_ID_MODE_INIT_POST_INVALID_POST_STATE = 3, @@ -61,7 +61,7 @@ SW_FAULT_ID_CAN_PARITY_ERROR = 30, SW_FAULT_ID_CAN_OFF_ERROR = 31, SW_FAULT_ID_UNEXPECTED_DMA_INTERRUPT = 32, - SW_FAULT_ID_AVAILABLE1 = 33, + SW_FAULT_ID_MODE_UPDATE_INVALID_STATE = 33, SW_FAULT_ID_MSG_PENDING_ACK_LIST_FULL = 34, SW_FAULT_ID_MSG_QUEUES_ADD_QUEUE_FULL = 35, SW_FAULT_ID_MSG_QUEUES_ADD_INVALID_QUEUE = 36, @@ -195,11 +195,12 @@ SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE = 164, SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE1 = 165, SW_FAULT_ID_MODE_POST_TX_AUTO_EJECT_INVALID_STATE = 166, - SW_FAULT_ID_INVALID_MESSAGE_PAYLOAD_LENGTH = 167, - SW_FAULT_ID_TD_INVALID_DRY_SELF_TEST_STATE = 168, + SW_FAULT_ID_INVALID_FLUID_BOLUS_STATE = 167, + SW_FAULT_ID_INVALID_MESSAGE_PAYLOAD_LENGTH = 168, + SW_FAULT_ID_TD_INVALID_DRY_SELF_TEST_STATE = 169, NUM_OF_SW_FAULT_IDS -} SW_FAULT_ID_T; - +} SW_FAULT_ID_T; + /**@}*/ -#endif +#endif Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r3afb9f74631d80a7c8ef99e000d33c3f0552b7f8 -r113f60c96d311d25658fe7a3895adf5c3734d16f --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 3afb9f74631d80a7c8ef99e000d33c3f0552b7f8) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 113f60c96d311d25658fe7a3895adf5c3734d16f) @@ -8,7 +8,7 @@ * @file Messaging.c * * @author (last) Praneeth Bunne -* @date (last) 21-May-2026 +* @date (last) 04-Jun-2026 * * @author (original) Sean Nash * @date (original) 01-Aug-2024 @@ -27,10 +27,12 @@ #include "DDInterface.h" #include "DrySelfTests.h" #include "Ejector.h" +#include "FluidBolus.h" #include "FpgaTD.h" #include "LevelSensors.h" #include "Messaging.h" #include "ModeStandby.h" +#include "ModeTreatment.h" #include "OperationModes.h" #include "PAL.h" #include "Pressures.h" @@ -112,15 +114,27 @@ { MSG_ID_DD_GEN_DIALYSATE_MODE_DATA, &setDialysateData }, { MSG_ID_DD_PRESSURES_DATA, &setDialysatePressure }, { MSG_ID_UI_TREATMENT_PARAMS_TO_VALIDATE, &validateAndSetTreatmentParameters }, + { MSG_ID_UI_TREATMENT_UF_VOLUME_VALIDATE_REQUEST, &validateAndSetUFVolume }, + { MSG_ID_UI_ULTRAFILTRATION_CHANGE_CONFIRM_REQUEST, &signalUserConfirmationOfUFVolume }, + { MSG_ID_UI_DURATION_VALIDATE_REQUEST, &validateAndSetTreatmentDuration }, + { MSG_ID_UI_DURATION_CONFIRM_REQUEST, &signalUserConfirmationOfTreatmentDuration }, + { MSG_ID_UI_BOLUS_VOLUME_CHANGE_REQUEST, &validateAndSetBolusVolume }, { MSG_ID_UI_INITIATE_TREATMENT_WORKFLOW, &signalUserInitiateTreatment }, { MSG_ID_UI_UF_PAUSE_RESUME_REQUEST, &signalPauseResumeUF }, { MSG_ID_TESTER_LOGIN_REQUEST, &handleTesterLogInRequest }, { MSG_ID_UI_PRESSURE_LIMIT_WIDEN_REQUEST, &pressureLimitHandleWidenRequest }, + { MSG_ID_UI_PRESSURE_LIMITS_CHANGE_REQUEST, &pressureLimitHandleChangeRequest }, + { MSG_ID_UI_TREATMENT_SET_POINTS_CHANGE_REQUEST, &validateAndSetTreatmentSetPoints }, + { MSG_ID_UI_TREATMENT_SET_POINT_BLOOD_FLOW_CHANGE_REQUEST, &validateAndSetBloodFlowRate }, + { MSG_ID_UI_TREATMENT_SET_POINT_DIALYSATE_FLOW_CHANGE_REQUEST, &validateAndSetDialysateFlowRate }, + { MSG_ID_UI_TREATMENT_SET_POINT_DIALYSATE_TEMP_CHANGE_REQUEST, &validateAndSetDialysateTemperature }, { MSG_ID_UI_BLOOD_PRIME_CMD_REQUEST, &bloodPrimeHandleCmdRequest }, { MSG_ID_UI_TREATMENT_SET_POINT_BLOOD_FLOW_CHANGE_REQUEST, &bloodPrimeHandleBloodFlowChangeRequest }, { MSG_ID_UI_TUBE_SET_AUTHENTICATION_ACK_RESPONSE, &drySelfTestHandleTubingSetAuthResponse }, { MSG_ID_UI_ADJUST_DISPOSABLES_CONFIRM_REQUEST, &handleAutoLoadRequest }, { MSG_ID_UI_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_REQUEST, &handleAutoEjectRequest }, + { MSG_ID_FFU_SIGNAL_TD_UPDATE_AVAILABLE, &handleUpdateAvailable }, + { MSG_ID_UI_FLUID_BOLUS_REQUEST, &handleFluidBolusRequest }, { MSG_ID_TD_SOFTWARE_RESET_REQUEST, &testTDSoftwareResetRequest }, { MSG_ID_TD_BUBBLE_OVERRIDE_REQUEST, &testBubbleDetectOverride }, { MSG_ID_TD_BUBBLE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testBubblesDataPublishIntervalOverride }, @@ -205,6 +219,7 @@ { MSG_ID_TD_SYRINGE_PUMP_FORCE_SENSOR_CALIBRATION_REQUEST, &testCalibrateForceSensor }, }; +/// Number of entries in the message handling function lookup table. #define NUM_OF_FUNCTION_HANDLERS (sizeof(MSG_FUNCTION_HANDLER_LOOKUP) / sizeof(MSG_HANDLER_LOOKUP_T)) // ********** private data ********** @@ -616,6 +631,18 @@ /*********************************************************************//** * @brief + * The resetMicroControllerUnit function resets the MCU. + * @details \b Inputs: none + * @details \b Outputs: none + * @return none + *************************************************************************/ +void resetMicroControllerUnit( void ) +{ + setSystemREG1_SYSECR( (0x2) << 14 ); // Reset processor +} + +/*********************************************************************//** + * @brief * The sendTestAckResponseMsg function constructs a simple response message * for a handled test message and queues it for transmit on the TD=>PC CAN * channel. @@ -684,6 +711,32 @@ /*********************************************************************//** * @brief + * The handleUpdateAvailable function handles a request from the + * Firmware FPGA Updater (FFU) to reset the TD firmware processor. + * @note If reset is successful, this function will not return. + * @details \b Inputs: none + * @details \b Outputs: TD processor soft reset if request is valid + * @param message Pointer to the reset request message + * @return FALSE if reset command rejected + *************************************************************************/ +BOOL handleUpdateAvailable( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // Verify payload length + if ( 0 == message->hdr.payloadLen ) + { // S/w reset of processor + result = TRUE; // Reset will prevent this from getting transmitted though + requestNewOperationMode( MODE_UPDT ); + } + + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_TD_2_UI, result ); + + return result; +} + +/*********************************************************************//** + * @brief * The testTDSoftwareResetRequest function handles a request to reset the * TD firmware processor. * @note If reset is successful, this function will not return. @@ -700,7 +753,7 @@ if ( 0 == message->hdr.payloadLen ) { // S/w reset of processor result = TRUE; // Reset will prevent this from getting transmitted though - setSystemREG1_SYSECR( (0x2) << 14 ); // Reset processor + resetMicroControllerUnit(); } sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result );