Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r12bc101e666ab82371b4e0ea1db1ba7a57f3eccd -rd4a77f3ce8f62c8911b1f4f3a673be6de802f50b --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 12bc101e666ab82371b4e0ea1db1ba7a57f3eccd) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision d4a77f3ce8f62c8911b1f4f3a673be6de802f50b) @@ -8,7 +8,7 @@ * @file ConcentratePumps.c * * @author (last) Dara Navaei -* @date (last) 17-Jan-2025 +* @date (last) 02-Apr-2025 * * @author (original) Quang Nguyen * @date (original) 22-Oct-2020 Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -r6abb2df716c69d47f6093d2c34a1f9c89f439528 -rd4a77f3ce8f62c8911b1f4f3a673be6de802f50b --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 6abb2df716c69d47f6093d2c34a1f9c89f439528) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision d4a77f3ce8f62c8911b1f4f3a673be6de802f50b) @@ -66,7 +66,6 @@ #define ACID_PERCENT_FILL 0.02222F ///< Acid volume percentage of reservoir volume. #define DATA_PUBLISH_COUNTER_START_COUNT 70 ///< Data publish counter start count. #define DRAIN_MODE_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the drain mode data is published on the CAN bus. -#define MIN_CONCENTRATE_VOLUME_ML 500.0F ///< Minimum concentrate volume in milliliters. // ********** private data ********** @@ -288,18 +287,8 @@ // if we have reached our target drain to volume (by weight) or cannot drain anymore, we are done draining - go back to generation idle mode if ( TRUE == drainStatus ) { - DG_ACID_CONCENTRATES_RECORD_T acid; - F32 acidBottleVolML; - DG_BICARB_CONCENTRATES_RECORD_T bicarb; - F32 bicarbBottleVolML; - - getAcidConcentrateCalRecord( &acid ); - getBicarbConcentrateCalRecord( &bicarb ); signalDrainPumpHardStop(); - acidBottleVolML = acid.acidConcentrate[ CAL_DATA_ACID_CONCENTRATE_1 ].acidFullBottleVolumeML; - bicarbBottleVolML = bicarb.bicarbConcentrate[ CAL_DATA_BICARB_CONCENTRATE_1 ].bicarbStartVolumeML; - if ( DG_RESERVOIR_1 == inactiveReservoir ) { setValveState( VRD1, VALVE_STATE_CLOSED ); @@ -309,46 +298,6 @@ setValveState( VRD2, VALVE_STATE_CLOSED ); } -#ifndef _RELEASE_ - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_EMPTY_BOTTLES_ALARM ) != SW_CONFIG_ENABLE_VALUE ) -#endif - { - HD_MODE_SUB_MODE_T hdMode; - - getHDOperationMode( &hdMode ); - - // Detect empty bottles using integrated volumes - if ( ( ( acidBottleVolML - getChemicalUsedVolumeML( ACID ) ) <= MIN_CONCENTRATE_VOLUME_ML ) && // SRSDG 836 - ( hdMode.hdMode != MODE_POST ) && // don't care about concentrates after treatment complete - ( getTestConfigStatus( TEST_CONFIG_MIX_WITH_WATER ) != TRUE ) ) - { - resetChemicalUsedVolumeML( ACID ); - setThisFirstFillFlag( TRUE ); // indicates bottles need prime - - // Alarm only valid in pre-treatment or treatment modes - if ( TRUE == checkLowVolumeAlarms ) - { - activateAlarmNoData( ALARM_ID_DG_ACID_BOTTLE_LOW_VOLUME ); - activateAlarmNoData ( ALARM_ID_DG_CREATING_DIALYSATE_PLEASE_WAIT ); - } - } - - if ( ( ( bicarbBottleVolML - getChemicalUsedVolumeML( BICARB ) ) <= MIN_CONCENTRATE_VOLUME_ML ) && // SRSDG 837 - ( hdMode.hdMode != MODE_POST ) && // don't care about concentrates after treatment complete - ( getTestConfigStatus( TEST_CONFIG_MIX_WITH_WATER ) != TRUE ) ) - { - resetChemicalUsedVolumeML( BICARB ); - setThisFirstFillFlag( TRUE ); - - // Alarm only valid in pre-treatment or treatment modes - if ( TRUE == checkLowVolumeAlarms ) - { - activateAlarmNoData( ALARM_ID_DG_BICARB_BOTTLE_LOW_VOLUME ); - activateAlarmNoData ( ALARM_ID_DG_CREATING_DIALYSATE_PLEASE_WAIT ); - } - } - } - if ( TRUE == isReservoirTarePending() ) { // Tare reservoir load cells at empty if requested result = DG_DRAIN_STATE_TARE; Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r6abb2df716c69d47f6093d2c34a1f9c89f439528 -rd4a77f3ce8f62c8911b1f4f3a673be6de802f50b --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 6abb2df716c69d47f6093d2c34a1f9c89f439528) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision d4a77f3ce8f62c8911b1f4f3a673be6de802f50b) @@ -131,7 +131,7 @@ SW_FAULT_ID_SAFETY_SHUTDOWN_INVALID_SELF_TEST_STATE, // 100 SW_FAULT_ID_PHANTOM_INTERRUPT, SW_FAULT_ID_ILLEGAL_MEM_ACCESS, - SW_FAULT_ID_INVALID_CHEMICAL_BOTTLE_SELECTED, + SW_FAULT_ID_INVALID_AVAILABLE_1, SW_FAULT_ID_INVALID_FPGA_SENSOR_GROUP_SELECTED, SW_FAULT_ID_INVALID_FLOW_SENSOR_SELECTED, // 105 SW_FAULT_ID_INVALID_SERVICE_STATE_SELECTED, Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r6abb2df716c69d47f6093d2c34a1f9c89f439528 -rd4a77f3ce8f62c8911b1f4f3a673be6de802f50b --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 6abb2df716c69d47f6093d2c34a1f9c89f439528) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision d4a77f3ce8f62c8911b1f4f3a673be6de802f50b) @@ -977,6 +977,10 @@ handleSendDGServiceRecordToHD( message ); break; + case MSG_ID_HD_MAX_RO_REJ_RATIO_FROM_HD_INSTIT_RECORD_RESPONSE: + handleMaxRORejectionResponseFromHDInstitRecord( message ); + break; + // NOTE: This case must be last case MSG_ID_DG_TESTER_LOGIN_REQUEST: handleTesterLogInRequest( message ); @@ -1232,18 +1236,6 @@ handleTestFansRPMAlarmStartTimeOffsetRequest( message ); break; - case MSG_ID_DG_FANS_RPM_OVERRIDE: - handleFansRPMOverride( message ); - break; - - case MSG_ID_DG_USED_ACID_VOLUME_ML_OVERRIDE: - handleTestUsedAcidVolumeMLOverrideRequest( message ); - break; - - case MSG_ID_DG_USED_BICARB_VOLUME_ML_OVERRIDE: - handleTestUsedBicarbVolumeMLOverrideRequest( message ); - break; - #ifndef _RELEASE_ case MSG_ID_DG_GET_SW_CONFIG_RECORD: handleGetDGSoftwareConfigRecord( message ); Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rb23683bcde8aa940c30427a63dc1d261ece000fd -rd4a77f3ce8f62c8911b1f4f3a673be6de802f50b --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision b23683bcde8aa940c30427a63dc1d261ece000fd) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision d4a77f3ce8f62c8911b1f4f3a673be6de802f50b) @@ -8,7 +8,7 @@ * @file SystemCommMessages.c * * @author (last) Dara Navaei -* @date (last) 23-Jul-2024 +* @date (last) 08-Mar-2025 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -1987,7 +1987,53 @@ sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, status ); } +/*********************************************************************//** + * @brief + * The sendMaxRORejectionRatioRequestToHD function handles sending the max RO + * rejection ratio request to HD + * @details Inputs: none + * @details Outputs: none + * @return none + *************************************************************************/ +void sendMaxRORejectionRatioRequestToHD( void ) +{ + MESSAGE_T msg; + // Create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_MAX_RO_REJ_RATIO_FROM_HD_INSTIT_RECORD_REQUEST; + msg.hdr.payloadLen = 0; + + // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + serializeMessage( msg, COMM_BUFFER_OUT_CAN_DG_2_HD, ACK_REQUIRED ); +} + +/*********************************************************************//** + * @brief + * The handleMaxRORejectionResponseFromHDInstitRecord function handles receiving + * max RO rejection ratio response from HD institutional record + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleMaxRORejectionResponseFromHDInstitRecord( MESSAGE_T* message ) +{ + BOOL status = FALSE; + + if ( message->hdr.payloadLen == sizeof(F32) ) + { + F32 roRejectionRatio; + + memcpy( &roRejectionRatio, message->payload, sizeof(F32) ); + setMaxRORejectionRatio( roRejectionRatio ); + + status = TRUE; + } + + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, status ); +} + // *********************************************************************** // **************** Message Handling Helper Functions ******************** // *********************************************************************** @@ -3875,37 +3921,6 @@ } /*********************************************************************//** - * The handleTestUsedAcidVolumeMLOverrideRequest function handles a - * request to override the acid volume. - * @details Inputs: none - * @details Outputs: message handled - * @param message : a pointer to the message to handle - * @return none - *************************************************************************/ -void handleTestUsedAcidVolumeMLOverrideRequest( MESSAGE_T *message ) -{ - TEST_OVERRIDE_PAYLOAD_T payload; - BOOL result = FALSE; - - // Verify payload length - if ( sizeof(TEST_OVERRIDE_PAYLOAD_T) == message->hdr.payloadLen ) - { - memcpy( &payload, message->payload, sizeof(TEST_OVERRIDE_PAYLOAD_T) ); - if ( FALSE == payload.reset ) - { - result = testSetUsedAcidVolumeMLOverride( payload.state.f32 ); - } - else - { - result = testResetUsedAcidVolumeMLOverride(); - } - } - - // Respond to request - sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); -} - -/*********************************************************************//** * The handleSetFansDutyCycleOverrideRequest function handles a * request to override the fans duty cycle. * @details Inputs: none @@ -3937,38 +3952,6 @@ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } -/*********************************************************************//** - * @brief - * The handleTestUsedBicarbVolumeMLOverrideRequest function handles a - * request to override the used bicarb volume. - * @details Inputs: none - * @details Outputs: message handled - * @param message : a pointer to the message to handle - * @return none - *************************************************************************/ -void handleTestUsedBicarbVolumeMLOverrideRequest( MESSAGE_T *message ) -{ - TEST_OVERRIDE_PAYLOAD_T payload; - BOOL result = FALSE; - - // Verify payload length - if ( sizeof(TEST_OVERRIDE_PAYLOAD_T) == message->hdr.payloadLen ) - { - memcpy( &payload, message->payload, sizeof(TEST_OVERRIDE_PAYLOAD_T) ); - if ( FALSE == payload.reset ) - { - result = testSetUsedBicarbVolumeMLOverride( payload.state.f32 ); - } - else - { - result = testResetUsedBicarbVolumeMLOverride(); - } - } - - // Respond to request - sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); -} - #ifndef _RELEASE_ /*********************************************************************//** * @brief Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r6abb2df716c69d47f6093d2c34a1f9c89f439528 -rd4a77f3ce8f62c8911b1f4f3a673be6de802f50b --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 6abb2df716c69d47f6093d2c34a1f9c89f439528) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision d4a77f3ce8f62c8911b1f4f3a673be6de802f50b) @@ -207,6 +207,12 @@ // MSG_ID_DG_START_STOP_NOCTURNAL_HEAT_DISINFECT void handleStartStopDGPassiveCoolHeatDisifnect( MESSAGE_T* message ); +// MSG_ID_DG_MAX_RO_REJ_RATIO_FROM_HD_INSTIT_RECORD_REQUEST +void sendMaxRORejectionRatioRequestToHD( void ); + +// MSG_ID_HD_MAX_RO_REJ_RATIO_FROM_HD_INSTIT_RECORD_RESPONSE +void handleMaxRORejectionResponseFromHDInstitRecord( MESSAGE_T* message ); + // *********** public test support message functions ********** // MSG_TESTER_LOG_IN @@ -412,12 +418,6 @@ // MSG_ID_DG_SET_FANS_RPM_ALARM_START_TIME_OFFSET void handleTestFansRPMAlarmStartTimeOffsetRequest( MESSAGE_T *message ); -// MSG_ID_DG_USED_ACID_VOLUME_ML_OVERRIDE -void handleTestUsedAcidVolumeMLOverrideRequest(MESSAGE_T *message); - -// MSG_ID_DG_USED_BICARB_VOLUME_ML_OVERRIDE -void handleTestUsedBicarbVolumeMLOverrideRequest(MESSAGE_T *message); - // MSG_ID_DG_FANS_DUTY_CYCLE_OVERRIDE void handleSetFansDutyCycleOverrideRequest( MESSAGE_T *message );