Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r8ebab816fadec93b2f3c6a42f15a07c26b3a4f59 -r1e62db4e4c11657a30823872d3a523814c9c7419 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 8ebab816fadec93b2f3c6a42f15a07c26b3a4f59) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 1e62db4e4c11657a30823872d3a523814c9c7419) @@ -599,7 +599,7 @@ // Park concentrate pump too if requested #ifndef _RELEASE_ - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_CONCENTRATE_PUMPS_PARK ) != SW_CONFIG_ENABLE_VALUE ) + if ( SW_CONFIG_DISABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_CONCENTRATE_PUMPS_PARK ) ) { if ( HW_CONFIG_BETA == getHardwareConfigStatus() ) { Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -r1a219888b8fda9dcbbfc51fbe76490ee247f5f14 -r1e62db4e4c11657a30823872d3a523814c9c7419 --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 1a219888b8fda9dcbbfc51fbe76490ee247f5f14) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 1e62db4e4c11657a30823872d3a523814c9c7419) @@ -137,6 +137,8 @@ setCurrentSubState( NO_SUB_STATE ); + SEND_EVENT_WITH_2_U32_DATA( DG_EVENT_INACTIVE_RESERVOIR_TEMP_REMOVE, (U32)inactiveReservoir, 0 ) // TODO remove + if ( DG_RESERVOIR_1 == inactiveReservoir ) { setValveStateDelayed( VRD1, VALVE_STATE_OPEN, DELAY_RES_DRAIN_VALVE_MS ); @@ -295,6 +297,8 @@ acidBottleVolML = acid.acidConcentrate[ CAL_DATA_ACID_CONCENTRATE_1 ].acidFullBottleVolumeML; bicarbBottleVolML = bicarb.bicarbConcentrate[ CAL_DATA_BICARB_CONCENTRATE_1 ].bicarbStartVolumeML; + SEND_EVENT_WITH_2_U32_DATA( DG_EVENT_INACTIVE_RESERVOIR_TEMP_REMOVE, (U32)inactiveReservoir, 0 ) // TODO remove + if ( DG_RESERVOIR_1 == inactiveReservoir ) { setValveState( VRD1, VALVE_STATE_CLOSED ); @@ -358,6 +362,8 @@ if ( ++drainEmptyTareTimerCtr > DRAIN_EMPTY_TARE_WAIT ) { + SEND_EVENT_WITH_2_U32_DATA( DG_EVENT_INACTIVE_RESERVOIR_TEMP_REMOVE, (U32)inactiveReservoir, 0 ) // TODO remove + drainEmptyTareTimerCtr = 0; tareLoadCellsAtEmpty( inactiveReservoir ); Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r8f5cbb3766f745c63896e76bc6a206e6f5d4dc28 -r1e62db4e4c11657a30823872d3a523814c9c7419 --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 8f5cbb3766f745c63896e76bc6a206e6f5d4dc28) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 1e62db4e4c11657a30823872d3a523814c9c7419) @@ -7,8 +7,8 @@ * * @file ModeFill.c * -* @author (last) Dara Navaei -* @date (last) 24-Jul-2023 +* @author (last) Michael Garthwaite +* @date (last) 10-Aug-2023 * * @author (original) Leonardo Baloa * @date (original) 19-Nov-2019 @@ -175,7 +175,6 @@ static BOOL areInletWaterConditionsAlarmsActive( void ); static BOOL areConductivityAlarmsActive( void ); static void handleDialysateMixing( F32 measuredROFlowRate_mL_min, F32 acidMixingRatio, F32 bicarbMixingRatio ); -static void setFillInfoToRTCRAM( void ); static BOOL isValueWithinPercentRange( F32 testValue, F32 baseValue, F32 percentFactor ); static void publishFillModeData( void ); @@ -819,6 +818,13 @@ result = DG_FILL_MODE_STATE_DELIVER_DIALYSATE; setModeFillStateTransition( result ); } + + // Check if the reservoir is already at the fill target level and if it is, transition to Gen Idle + // This case should only happen if a test configuration is enabled such as expedite pre-treatment + if ( TRUE == hasTargetFillVolumeBeenReached( getInactiveReservoir() ) ) + { + requestNewOperationMode( DG_MODE_GENE ); + } } } @@ -876,8 +882,8 @@ integratedVolumeML.data += getMeasuredROFlowRateWithConcPumpsLPM() * ML_PER_LITER * FLOW_INTEGRATOR; } - usedAcidVolumeML.data += getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP1_ACID ) * FLOW_INTEGRATOR; - usedBicarbVolumeML.data += getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP2_BICARB ) * FLOW_INTEGRATOR; + usedAcidVolumeML.data += getMeasuredPumpSpeedMLPM( CONCENTRATEPUMPS_CP1_ACID ) * FLOW_INTEGRATOR; + usedBicarbVolumeML.data += getMeasuredPumpSpeedMLPM( CONCENTRATEPUMPS_CP2_BICARB ) * FLOW_INTEGRATOR; acidConductivityTotal += acidConduSPerCM; bicarbConductivityTotal += bicarbConduSPerCM; conductivitySampleCount++; @@ -1201,33 +1207,16 @@ /*********************************************************************//** * @brief - * The setFillInfoToRTCRAM function writes the fill information to the RTC - * RAM at the end of each fill. This information is used for dialysate temperature - * control. - * @details Inputs: fillStatus.fillFlowRateAverage - * @details Outputs: none - * @return none - *************************************************************************/ -static void setFillInfoToRTCRAM( void ) -{ - DG_HEATERS_RECORD_T record; - - record.averageFillFlow = fillStatus.fillFlowRateAverageLPM; - - setHeatersInfoRecord( (U08*)&record, sizeof( DG_HEATERS_RECORD_T ) ); -} - -/*********************************************************************//** - * @brief * The publishFillModeData function publishes fill mode data * at the set interval. - * @details Inputs: fillModeDataPublicationTimerCounter, fillModeDataPublishInterval + * @details Inputs: fillModeDataPublicationTimerCounter, fillModeDataPublishInterval, + * dataPublishCounter * @details Outputs: fillModeData * @return none *************************************************************************/ static void publishFillModeData( void ) { - // publish Drain pump data on interval + // publish Fill mode data on interval if ( ++dataPublishCounter >= getU32OverrideValue( &fillModeDataPublishInterval ) ) { DG_FILL_MODE_DATA_T fillModeData; @@ -1241,6 +1230,8 @@ fillModeData.usedBicarbVolumeML = getChemicalUsedVolumeML( BICARB ); fillModeData.integratedVolumeML = getIntegratedVolumeML(); fillModeData.roOnlyModeStatus = (U32)isROOnlyModeEnabled(); + fillModeData.badFillSignal = getCurrentBadFillSignal(); + fillModeData.badFillState = getCurrentGenIdleBadFillState(); broadcastData( MSG_ID_DG_FILL_MODE_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&fillModeData, sizeof( DG_FILL_MODE_DATA_T ) ); Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r1a219888b8fda9dcbbfc51fbe76490ee247f5f14 -r1e62db4e4c11657a30823872d3a523814c9c7419 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 1a219888b8fda9dcbbfc51fbe76490ee247f5f14) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 1e62db4e4c11657a30823872d3a523814c9c7419) @@ -160,7 +160,7 @@ *************************************************************************/ BOOL isHDCommunicating( void ) { - return getU32OverrideValue(&hdCommunicationStatus); + return getU32OverrideValue( &hdCommunicationStatus ); } /*********************************************************************//** @@ -668,6 +668,7 @@ if ( TRUE == didTimeout( timeOfLastHDCheckIn, HD_COMM_TIMEOUT_IN_MS ) ) { hdCommunicationStatus.data = FALSE; + setHDOperationMode( 0, 0 ); // If HD off or not connected, consider HD mode is fault. } } @@ -1028,7 +1029,7 @@ handleTestValveStateOverrideRequest( message ); break; - case MSG_ID_VALVES_STATES_PUBLISH_INTERVAL_OVERRIDE: + case MSG_ID_DG_VALVES_STATES_PUBLISH_INTERVAL_OVERRIDE: handleTestValvesStatesPublishIntervalOverrideRequest( message ); break; @@ -1185,11 +1186,11 @@ break; case MSG_ID_FILTER_FLUSH_TIME_PERIOD_OVERRIDE: - handleFilterFlushTimePeriodOverride( message ); + handleFilterFlushTimePeriodOverride(message); break; - case MSG_ID_DG_FANS_RPM_OVERRIDE: - handleFansRPMOverride( message ); + case MSG_ID_DG_BLOCK_MESSAGE_TRANSMISSION: + handleTestBlockMessagesRequest( message ); break; case MSG_ID_DG_STOP_RTC_CLOCK: @@ -1200,10 +1201,6 @@ handleSetDrainPumpMeasuredRPMOverrideRequest( message ); break; - case MSG_ID_DG_BLOCK_MESSAGE_TRANSMISSION: - handleTestBlockMessagesRequest( message ); - break; - case MSG_ID_DG_SUPER_CLEAR_ALARMS_CMD: handleTestSuperClearAlarmsRequest( message ); break; @@ -1216,6 +1213,10 @@ 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; @@ -1262,14 +1263,14 @@ handleTestTareReservoirRequest( message ); break; - case MSG_ID_DG_DRAIN_PUMP_CURRENT_OVERRIDE: - handleTestDrainPumpMeasuredCurrentOverride( message ); - break; - case MSG_ID_DG_GEN_IDLE_PUBLISH_INTERVAL_OVERRIDE: handleTestGenIdlePublishIntervalOverride( message ); break; + case MSG_ID_DG_DRAIN_PUMP_CURRENT_OVERRIDE: + handleSetDrainPumpMeasuredRPMOverrideRequest( message ); + break; + case MSG_ID_DG_DRAIN_PUMP_DIRECTION_OVERRIDE: handleTestDGDrainPumpDirectionOverrideRequest( message ); break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r1a219888b8fda9dcbbfc51fbe76490ee247f5f14 -r1e62db4e4c11657a30823872d3a523814c9c7419 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 1a219888b8fda9dcbbfc51fbe76490ee247f5f14) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 1e62db4e4c11657a30823872d3a523814c9c7419) @@ -422,7 +422,6 @@ return result; } - // *********************************************************************** // **************** Message Handling Helper Functions ******************** // *********************************************************************** @@ -3614,37 +3613,6 @@ } /*********************************************************************//** - * @brief - * The handleFansRPMOverride function handles a request to override a fans RPM value. - * @details Inputs: none - * @details Outputs: message handled - * @param message a pointer to the message to handle - * @return none - *************************************************************************/ -void handleFansRPMOverride( MESSAGE_T *message ) -{ - TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; - BOOL result = FALSE; - - // verify payload length - if ( sizeof(TEST_OVERRIDE_ARRAY_PAYLOAD_T) == message->hdr.payloadLen ) - { - memcpy( &payload, message->payload, sizeof(TEST_OVERRIDE_ARRAY_PAYLOAD_T) ); - if ( FALSE == payload.reset ) - { - result = testSetFanRPMOverride( payload.index, payload.state.f32 ); - } - else - { - result = testResetFanRPMOverride( payload.index ); - } - } - - // respond to request - sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); -} - -/*********************************************************************//** * @brief * The handleStopDGRTCClock function handles a request to stop the RTC clock. * @details Inputs: none @@ -3783,10 +3751,41 @@ /*********************************************************************//** * @brief - * The handleTestFansRPMAlarmStartTimeOffsetRequest function handles a - * request to set the fans RPM alarm start time offset. + * The handleFansRPMOverride function handles a request to override a fans RPM value. * @details Inputs: none * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleFansRPMOverride( MESSAGE_T *message ) +{ + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + BOOL result = FALSE; + + // verify payload length + if ( sizeof(TEST_OVERRIDE_ARRAY_PAYLOAD_T) == message->hdr.payloadLen ) + { + memcpy( &payload, message->payload, sizeof(TEST_OVERRIDE_ARRAY_PAYLOAD_T) ); + if ( FALSE == payload.reset ) + { + result = testSetFanRPMOverride( payload.index, payload.state.f32 ); + } + else + { + result = testResetFanRPMOverride( payload.index ); + } + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** + * @brief + * The handleTestFansRPMAlarmStartTimeOverrideRequest function handles a + * request to override the fan RPM alarm start time. + * @details Inputs: none + * @details Outputs: message handled * @param message : a pointer to the message to handle * @return none *************************************************************************/ @@ -3809,7 +3808,6 @@ } /*********************************************************************//** - * @brief * The handleTestUsedAcidVolumeMLOverrideRequest function handles a * request to override the acid volume. * @details Inputs: none Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r1a219888b8fda9dcbbfc51fbe76490ee247f5f14 -r1e62db4e4c11657a30823872d3a523814c9c7419 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 1a219888b8fda9dcbbfc51fbe76490ee247f5f14) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 1e62db4e4c11657a30823872d3a523814c9c7419) @@ -167,6 +167,12 @@ // MSG_ID_DG_RESPONSE_SERVICE_MODE_REQUEST BOOL sendServiceModeResponse( BOOL accepted, U32 rejCode ); +// MSG_ID_HD_OP_MODE +BOOL handleSetHDOperationMode( MESSAGE_T *message ); + +// MSG_ID_HD_REQUEST_DG_USAGE_INFO +void handleHDRequestDGUsageInfo( MESSAGE_T * message ); + // MSG_ID_DG_SET_SERVICE_TIME void handleSetDGServiceTime( MESSAGE_T *message ); @@ -396,6 +402,12 @@ // MSG_ID_DG_DRAIN_PUMP_MEASURED_RPM_OVERRIDE void handleSetDrainPumpMeasuredRPMOverrideRequest( MESSAGE_T *message ); +// MSG_ID_DG_ALARM_INFO_SEND_INTERVAL_OVERRIDE +void handleTestAlarmInfoSendIntervalOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_DG_SUPER_CLEAR_ALARMS_CMD +void handleTestSuperClearAlarmsRequest( MESSAGE_T *message ); + // MSG_ID_DG_SET_FANS_RPM_ALARM_START_TIME_OFFSET void handleTestFansRPMAlarmStartTimeOffsetRequest( MESSAGE_T *message ); @@ -416,21 +428,27 @@ void handleSetDGSoftwareConfigRecord( MESSAGE_T *message ); #endif +// MSG_ID_HD_REQUEST_DG_ALARMS +void handleResendAllAlarmsCommand( MESSAGE_T *message ); + // MSG_ID_DG_HD_COMMUNICATION_STATUS void handleTestHDCommunicationStatusOverrideRequest( MESSAGE_T *message ); // MSG_ID_DG_SET_PRIMARY_AND_TRIMMER_HEATERS_TARGET_TEMP void handleSetPrimaryAndTrimmerHeatersTargetTemperature( 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_GET_USAGE_INFO_RECORD void handleGetDGUsageInfoRecord( MESSAGE_T *message ); // MSG_ID_DG_SET_USAGE_INFO_RECORD void handleSetDGUsageInfoRecord( MESSAGE_T *message ); -// MSG_ID_HD_REQUEST_DG_ALARMS -void handleResendAllAlarmsCommand( MESSAGE_T *message ); - // MSG_ID_DG_SET_OP_MODE_REQUEST void handleTestSetOpModeRequest( MESSAGE_T *message );