Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r6f02ff4686ec9dfc60247e9ed3fc9c5cc7771543 -re7e2fef9fda6c6e876f7aba1c8f837d8aa713392 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 6f02ff4686ec9dfc60247e9ed3fc9c5cc7771543) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision e7e2fef9fda6c6e876f7aba1c8f837d8aa713392) @@ -16,6 +16,7 @@ ***************************************************************************/ #include "Buttons.h" +#include "DDInterface.h" #include "ModePreTreat.h" #include "OperationModes.h" #include "Timers.h" @@ -143,16 +144,38 @@ *************************************************************************/ static TD_PRE_TREATMENT_MODE_STATE_T handleRxState( void ) { - BOOL paramsValid = getValidTreatParamsReceived(); - BOOL paramsConfirmed = getTreatParamsConfirmed(); - TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_CONFIRM_RX_STATE; + BOOL paramsValid = getValidTreatParamsReceived(); + BOOL paramsConfirmed = getTreatParamsConfirmed(); + TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_CONFIRM_RX_STATE; + DD_OP_MODE_T ddOpMode = getDDOpMode(); + DD_PRE_GEN_DIALYSATE_STATE_T ddSubMode = (DD_PRE_GEN_DIALYSATE_STATE_T)getDDSubMode(); + BOOL isDialysateGoodTodeliver = TRUE; // TODO update with get API for getDialGoodToDeliverStatus + F32 bicarbConvFactor = BICARBONATE_CONVERSION_FACTOR; + F32 presUFVolumeL = 0.0F; + F32 presUFRateLHr = 0.0F; // Valid + confirmed – move to next state: Patient Connection if ( ( TRUE == paramsValid ) && ( TRUE == paramsConfirmed ) ) { + // TODO this command of requesting dialysate delivery will move to appropriate state in pre-treatment once implemented + if ( ( ddOpMode == DD_MODE_PREG ) && ( ddSubMode == DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND ) ) + { + presUFVolumeL = getTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME ); + presUFRateLHr = presUFVolumeL / ( (F32)getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION ) / (F32)MIN_PER_HOUR ); + // Direct DD to generate dialysate and bypass while priming blood + cmdStartGenerateDialysate( (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presUFRateLHr, + getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ), TRUE, + getTreatmentParameterF32( TREATMENT_PARAM_ACID_CONCENTRATE_CONV_FACTOR ), + bicarbConvFactor, + getTreatmentParameterU32( TREATMENT_PARAM_SODIUM ), + getTreatmentParameterU32( TREATMENT_PARAM_BICARBONATE ) ); + } // TODO: when additional Pre-Treatment states are implemented, change to TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE. // state = TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; - requestNewOperationMode( MODE_TREA ); + if ( ( ddOpMode == DD_MODE_GEND ) && ( TRUE == isDialysateGoodTodeliver ) ) + { + requestNewOperationMode( MODE_TREA ); + } } return state; Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -re9e339870c5ed01230963f00d400331ab879c91f -re7e2fef9fda6c6e876f7aba1c8f837d8aa713392 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision e9e339870c5ed01230963f00d400331ab879c91f) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision e7e2fef9fda6c6e876f7aba1c8f837d8aa713392) @@ -208,6 +208,7 @@ { TD_STANDBY_STATE_T state = STANDBY_WAIT_FOR_TREATMENT_STATE; DD_OP_MODE_T ddOperationMode = getDDOpMode(); + F32 bicarbConvFactor = BICARBONATE_CONVERSION_FACTOR; // switch ( dgOperationMode ) // { @@ -259,6 +260,13 @@ respRecord.venPresLimitAsymmetricmmHg = getSysConfigTreatmentParameterU32DefaultValue( TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ); respRecord.tmpPresLimitWindowmmHg = getSysConfigTreatmentParameterU32DefaultValue( TREATMENT_PARAM_TMP_PRES_LIMIT_WINDOW ); sendPressureLimitsChangeResponse( &respRecord ); + // start DD pre-gen // TODO + cmdStartPreGenerateDialysate( (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), + getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ), + getTreatmentParameterF32( TREATMENT_PARAM_ACID_CONCENTRATE_CONV_FACTOR ), + bicarbConvFactor, + getTreatmentParameterU32( TREATMENT_PARAM_SODIUM ), + getTreatmentParameterU32( TREATMENT_PARAM_BICARBONATE ) ); // Start treatment workflow with pretreatment mode requestNewOperationMode( MODE_PRET ); treatStartReqReceived = FALSE; Index: firmware/App/Services/DDInterface.c =================================================================== diff -u -re9e339870c5ed01230963f00d400331ab879c91f -re7e2fef9fda6c6e876f7aba1c8f837d8aa713392 --- firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision e9e339870c5ed01230963f00d400331ab879c91f) +++ firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision e7e2fef9fda6c6e876f7aba1c8f837d8aa713392) @@ -46,6 +46,7 @@ static BOOL ddOpModeDataFreshFlag; ///< Flag to signal the handleDDOpMode() to process fresh dd op mode data. static BOOL ddDialysatePressureFreshFlag; ///< Flag to signal +static PRE_GEN_DIALYSATE_REQ_PAYLOAD_T preGenDialysateCmdSet; ///< Set of pre-generate dialysate parameters to send to the DD static DIALYSATE_DELIVERY_REQ_PAYLOAD_T dialysateDeliveryCmdSet; ///< Set of dialysate delivery parameters to send to the DD during treatment. // DD command response @@ -100,6 +101,14 @@ ddStarted = FALSE; ddStartCommandSent = FALSE; + preGenDialysateCmdSet.start = FALSE; + preGenDialysateCmdSet.dialRate = 0.0F; + preGenDialysateCmdSet.dialTemp = 0.0F; + preGenDialysateCmdSet.acidConvFactor = 0.0F; + preGenDialysateCmdSet.bicarbConvFactor = 0.0F; + preGenDialysateCmdSet.sodium = 0; + preGenDialysateCmdSet.bicarbonate = 0; + dialysateDeliveryCmdSet.start = FALSE; dialysateDeliveryCmdSet.dialRate = 0.0F; dialysateDeliveryCmdSet.ufRate = 0.0F; @@ -285,6 +294,38 @@ /*********************************************************************//** * @brief + * The cmdStartPreGenerateDialysate function sends a pre generate dialysate command + * to the DD with a given set of details. DD will transition to pre generate + * dialysate mode if it hasn't already. + * @details \b Inputs: none + * @details \b Outputs: preGenDialysateCmdSet + * @details \b Message \b Sent: Start/continue pre-generate dialysate command. + * @param qd Target dialysate flow rate (Qd). + * @param dialTemp Target dialysate temperature in deg C. + * @param acidConvFactor Conversion factor for the acid used. + * @param bicarbConvFactor Conversion factor for the bicarbonate used. + * @param sodium Level of sodium used in mEq/L. + * @param bicarbonate Level of bicarbonate used in mEq/L. + * @return none + *************************************************************************/ +void cmdStartPreGenerateDialysate( F32 qd, F32 dialTemp, F32 acidConvFactor, F32 bicarbConvFactor, U32 sodium, U32 bicarbonate ) +{ + preGenDialysateCmdSet.start = TRUE; + preGenDialysateCmdSet.dialRate = qd; + preGenDialysateCmdSet.dialTemp = dialTemp; + preGenDialysateCmdSet.acidConvFactor = acidConvFactor; + preGenDialysateCmdSet.bicarbConvFactor = bicarbConvFactor; + preGenDialysateCmdSet.sodium = sodium; + preGenDialysateCmdSet.bicarbonate = bicarbonate; + +#ifndef TEST_UI_ONLY + sendMessage( MSG_ID_DD_PRE_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&preGenDialysateCmdSet), sizeof( PRE_GEN_DIALYSATE_REQ_PAYLOAD_T ) ); +#endif +// ddStartCommandSent = TRUE; +} + +/*********************************************************************//** + * @brief * The cmdStartGenerateDialysate function sends a generate dialysate command * to the DD with a given set of details. DD will transition to dialysate * delivery mode if it hasn't already. Index: firmware/App/Services/DDInterface.h =================================================================== diff -u -re9e339870c5ed01230963f00d400331ab879c91f -re7e2fef9fda6c6e876f7aba1c8f837d8aa713392 --- firmware/App/Services/DDInterface.h (.../DDInterface.h) (revision e9e339870c5ed01230963f00d400331ab879c91f) +++ firmware/App/Services/DDInterface.h (.../DDInterface.h) (revision e7e2fef9fda6c6e876f7aba1c8f837d8aa713392) @@ -55,6 +55,7 @@ BOOL setDDOpMode( MESSAGE_T *message ); BOOL setDialysatePressure( MESSAGE_T *message ); +void cmdStartPreGenerateDialysate( F32 qd, F32 dialTemp, F32 acidConvFactor, F32 bicarbConvFactor, U32 sodium, U32 bicarbonate ); void cmdStartGenerateDialysate( F32 qd, F32 quf, F32 dialTemp, BOOL bypass, F32 acidConvFactor, F32 bicarbConvFactor, U32 sodium, U32 bicarbonate ); void cmdChangeQd( F32 qd ); void cmdChangeQuf( F32 quf );