Index: firmware/App/Services/Messaging.c =================================================================== diff -u -re9e339870c5ed01230963f00d400331ab879c91f -r6f876554db45a19590eaf2122ef47e33f7a7d69b --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision e9e339870c5ed01230963f00d400331ab879c91f) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 6f876554db45a19590eaf2122ef47e33f7a7d69b) @@ -27,10 +27,12 @@ #include "CpldInterface.h" #include "DDInterface.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" @@ -41,6 +43,7 @@ #include "Switches.h" #include "SystemCommTD.h" #include "Temperatures.h" +#include "TDDefs.h" #include "TxParams.h" #include "Utilities.h" #include "Valve3Way.h" @@ -114,6 +117,8 @@ { MSG_ID_UI_PRESSURE_LIMIT_WIDEN_REQUEST, &pressureLimitHandleWidenRequest }, { MSG_ID_UI_BLOOD_PRIME_CMD_REQUEST, &bloodPrimeHandleCmdRequest }, { MSG_ID_UI_TREATMENT_SET_POINT_BLOOD_FLOW_CHANGE_REQUEST, &bloodPrimeHandleBloodFlowChangeRequest }, + { MSG_ID_UI_FLUID_BOLUS_REQUEST, &handleFluidBolusRequest }, + { MSG_ID_DD_GEN_DIALYSATE_MODE_DATA, &setGenDialysateModeData }, { MSG_ID_TD_SOFTWARE_RESET_REQUEST, &testTDSoftwareResetRequest }, { MSG_ID_TD_BUBBLE_OVERRIDE_REQUEST, &testBubbleDetectOverride }, { MSG_ID_TD_BUBBLE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testBubblesDataPublishIntervalOverride }, @@ -562,7 +567,107 @@ return result; } +/*********************************************************************//** +* @brief +* The handleFluidBolusRequest function handles the UI fluid bolus request. +* @details \b Message \b Sent: MSG_ID_TD_FLUID_BOLUS_RESPONSE +* @details \b Inputs: none +* @details \b Outputs: none +* @return TRUE if request is accepted, FALSE if rejected. +*************************************************************************/ +BOOL handleFluidBolusRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + U32 cmd = 0; + REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NONE; + FLUID_BOLUS_RESPONSE_PAYLOAD_T response; + if ( sizeof(U32) == message->hdr.payloadLen ) + { + memcpy( &cmd, message->payload, sizeof(U32) ); + + if ( FLUID_BOLUS_CMD_START == cmd ) + { + if ( TRUE == isFluidBolusActive() ) + { + // TD Fluid Bolus Additional Bolus Prevention + rejReason = REQUEST_REJECT_REASON_FLUID_BOLUS_IN_PROGRESS; + } + else if ( TREATMENT_PAUSED_STATE == getTreatmentState() ) + { + if ( ( TRUE == areAllActiveAlarmsPermittedForBolus() ) ) + { + signalPauseTreatFluidBolusRequest(); + result = TRUE; + } + else + { + rejReason = REQUEST_REJECT_REASON_ALARM_IS_ACTIVE; + } + } + else + { + // Route to whichever calling state is currently active + switch ( getTreatmentState() ) + { + case TREATMENT_BLOOD_PRIME_STATE: + signalBloodPrimeFluidBolusRequest(); + result = TRUE; + break; + +// case TREATMENT_DIALYSIS_STATE: +// signalDialysisFluidBolusRequest(); +// result = TRUE; +// break; +// +// case TREATMENT_ISO_UF_STATE: +// signalIsoUFFluidBolusRequest(); +// result = TRUE; +// break; +// +// case TREATMENT_END_STATE: +// signalTreatmentEndFluidBolusRequest(); +// result = TRUE; +// break; + + default: + rejReason = REQUEST_REJECT_REASON_INVALID_TREATMENT_STATE; + break; + } + } + } + else if ( FLUID_BOLUS_CMD_STOP == cmd ) + { + if ( TRUE == isFluidBolusActive() ) + { + signalAbortFluidBolus(); + result = TRUE; + rejReason = REQUEST_REJECT_REASON_NONE; + } + else + { + rejReason = REQUEST_REJECT_REASON_FLUID_BOLUS_NOT_IN_PROGRESS; + } + } + else + { + rejReason = REQUEST_REJECT_REASON_INVALID_COMMAND; + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_INVALID_PAYLOAD_LENGTH, (U32)message->hdr.payloadLen ); + } + + response.accepted = result; + response.rejectionReason = rejReason; + response.targetVolumeMl = getTreatmentParameterU32( TREATMENT_PARAM_FLUID_BOLUS_VOLUME ); + sendMessage( MSG_ID_TD_FLUID_BOLUS_RESPONSE, COMM_BUFFER_OUT_CAN_TD_2_UI, (U08*)&response, sizeof( FLUID_BOLUS_RESPONSE_PAYLOAD_T ) ); + + return result; +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/