Index: firmware/App/Controllers/SyringePump.c =================================================================== diff -u -r53ded5e26646574d5bae2cebd5de47a2ac5a3c2d -r104bd9ab84f7619fe04670a5cee37638e30f5a39 --- firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 53ded5e26646574d5bae2cebd5de47a2ac5a3c2d) +++ firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 104bd9ab84f7619fe04670a5cee37638e30f5a39) @@ -235,6 +235,7 @@ static MOTOR_DIR_T syringePumpControllerMeasuredDirection; ///< Measured direction of syringe pump per controller. static MOTOR_DIR_T syringePumpEncoderMeasuredDirection; ///< Measured direction of syringe pump per encoder position relative to previous. static F32 syringePumpVolumeRequired; ///< Volume required for complete therapy (in mL). +static U32 heparinTimeRemaining; ///< Remaining heparin delivery time (minutes). static BOOL syringePumpRetractRequested; ///< Flag indicates a retract operation is requested. static BOOL syringePumpPreloadRequested; ///< Flag indicates a plunger preload operation is requested. @@ -321,6 +322,7 @@ syringePumpLastPosition = 0; syringePumpStopLastPosition = 0; syringePumpVolumeRequired = 0.0; + heparinTimeRemaining = 0; syringePumpControllerMeasuredDirection = MOTOR_DIR_FORWARD; syringePumpEncoderMeasuredDirection = MOTOR_DIR_FORWARD; syringePumpDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; @@ -1471,13 +1473,12 @@ SYRINGE_PUMP_STATE_T result = SYRINGE_PUMP_PRELOAD_STATE; BOOL stopPump = FALSE; S32 pos = getSyringePumpPosition(); - F32 bolusVol = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); - F32 contRate = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DELIVERY_RATE ); - U32 preStop = getTreatmentParameterU32( TREATMENT_PARAM_HEPARIN_DELIVERY_DURATION ); - U32 setTxDur = getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION ); - F32 hepDurHr = ( (F32)( setTxDur - preStop ) / (F32)MIN_PER_HOUR ); - F32 txVolumeReq = SYRINGE_PUMP_PRIME_VOLUME_ML + bolusVol + ( hepDurHr * contRate ); - F32 syringeVol = ( SYRINGE_PUMP_EMPTY_POS - (F32)pos ) / SYRINGE_ENCODER_COUNTS_PER_ML; + F32 bolusVol = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); + F32 contRate = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DELIVERY_RATE ); + U32 hepDurMin = getTreatmentParameterU32( TREATMENT_PARAM_HEPARIN_DELIVERY_DURATION ); + F32 hepDurHr = (F32)hepDurMin / (F32)MIN_PER_HOUR; + F32 txVolumeReq = SYRINGE_PUMP_PRIME_VOLUME_ML + bolusVol + ( hepDurHr * contRate ); + F32 syringeVol = ( SYRINGE_PUMP_EMPTY_POS - (F32)pos ) / SYRINGE_ENCODER_COUNTS_PER_ML; syringePumpVolumeRequired = txVolumeReq + SYRINGE_PUMP_FILL_VOLUME_OFFSET_ML; txVolumeReq = txVolumeReq + SYRINGE_PUMP_FILL_VOLUME_OFFSET_ML + SYRINGE_PUMP_PRELOAD_MARGIN_VOLUME_ML; @@ -1532,13 +1533,12 @@ SYRINGE_PUMP_STATE_T result = SYRINGE_PUMP_SEEK_STATE; BOOL stopPump = FALSE; S32 pos = getSyringePumpPosition(); - F32 bolusVol = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); - F32 contRate = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DELIVERY_RATE ); - U32 preStop = getTreatmentParameterU32( TREATMENT_PARAM_HEPARIN_DELIVERY_DURATION ); - U32 setTxDur = getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION ); - F32 hepDurHr = ( (F32)( setTxDur - preStop ) / (F32)MIN_PER_HOUR ); - F32 txVolume = SYRINGE_PUMP_PRIME_VOLUME_ML + bolusVol + ( hepDurHr * contRate ); - F32 syringeVol = ( SYRINGE_PUMP_EMPTY_POS - (F32)pos ) / SYRINGE_ENCODER_COUNTS_PER_ML; + F32 bolusVol = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); + F32 contRate = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DELIVERY_RATE ); + U32 hepDurMin = getTreatmentParameterU32( TREATMENT_PARAM_HEPARIN_DELIVERY_DURATION ); + F32 hepDurHr = (F32)hepDurMin / (F32)MIN_PER_HOUR; + F32 txVolume = SYRINGE_PUMP_PRIME_VOLUME_ML + bolusVol + ( hepDurHr * contRate ); + F32 syringeVol = ( SYRINGE_PUMP_EMPTY_POS - (F32)pos ) / SYRINGE_ENCODER_COUNTS_PER_ML; // Handle ramp up rampSyringePump(); @@ -1645,6 +1645,7 @@ return result; } + /*********************************************************************//** * @brief * The handleSyringePumpBolusState function handles the bolus delivery state @@ -2296,7 +2297,18 @@ { SYRINGE_PUMP_DATA_PAYLOAD_T data; SYRINGE_PUMP_VOLUME_DATA_T volData; + U32 heparinDurationMin = getTreatmentParameterU32( TREATMENT_PARAM_HEPARIN_DELIVERY_DURATION ); + U32 elapsedTreatmentTimeMin = getActualTreatmentTimeSecs() / SEC_PER_MIN; + if ( elapsedTreatmentTimeMin >= heparinDurationMin ) + { + heparinTimeRemaining = 0U; + } + else + { + heparinTimeRemaining = heparinDurationMin - elapsedTreatmentTimeMin; + } + data.syringePumpMeasForce = getSyringePumpForceV(); data.syringePumpMeasHome = getSyringePumpHomeDetectorV(); data.syringePumpMeasRate = getSyringePumpMeasRate(); @@ -2313,6 +2325,7 @@ volData.syringePumpVolumeDelivered = getSyringePumpVolumeDelivered(); volData.syringePumpVolumeRequired = syringePumpVolumeRequired; + volData.heparinTimeRemaining = heparinTimeRemaining; broadcastData( MSG_ID_TD_SYRINGE_PUMP_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&data, sizeof( SYRINGE_PUMP_DATA_PAYLOAD_T ) ); broadcastData( MSG_ID_TD_HEPARIN_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&volData, sizeof( SYRINGE_PUMP_VOLUME_DATA_T ) ); Index: firmware/App/Controllers/SyringePump.h =================================================================== diff -u -r53ded5e26646574d5bae2cebd5de47a2ac5a3c2d -r104bd9ab84f7619fe04670a5cee37638e30f5a39 --- firmware/App/Controllers/SyringePump.h (.../SyringePump.h) (revision 53ded5e26646574d5bae2cebd5de47a2ac5a3c2d) +++ firmware/App/Controllers/SyringePump.h (.../SyringePump.h) (revision 104bd9ab84f7619fe04670a5cee37638e30f5a39) @@ -83,6 +83,7 @@ { F32 syringePumpVolumeDelivered; ///< Syringe pump volume delivered. F32 syringePumpVolumeRequired; ///< Syringe pump volume required for therapy. + U32 heparinTimeRemaining; ///< Remaining heparin delivery time. } SYRINGE_PUMP_VOLUME_DATA_T; // Begin TODO: Move to NVM Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r53ded5e26646574d5bae2cebd5de47a2ac5a3c2d -r104bd9ab84f7619fe04670a5cee37638e30f5a39 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 53ded5e26646574d5bae2cebd5de47a2ac5a3c2d) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 104bd9ab84f7619fe04670a5cee37638e30f5a39) @@ -46,7 +46,7 @@ // ********** private function prototypes ********** static void setPreTreatStateTransition( void ); ///< Configure actuators and variables for Pre-Treatment state transitions. -static TD_PRE_TREATMENT_MODE_STATE_T handleInstallState( void ); ///< Handle Instll state during Pre-Treatment +static TD_PRE_TREATMENT_MODE_STATE_T handleInstallState( void ); ///< Handle Install state during Pre-Treatment static TD_PRE_TREATMENT_MODE_STATE_T handleSelfTestDryState( void ); ///< Handle Self Test Dry state during Pre-Treatment static TD_PRE_TREATMENT_MODE_STATE_T handlePrimeState( void ); ///< Handle Prime state during Pre-Treatment static TD_PRE_TREATMENT_MODE_STATE_T handleRecirculateState( void ); ///< Handle Recirculate state during Pre-Treatment @@ -232,7 +232,7 @@ if ( TRUE == isTubeSetInstallComplete() ) { - state = TD_PRE_TREATMENT_CONFIRM_RX_STATE; + state = TD_PRE_TREATMENT_SELF_TEST_DRY_STATE; } return state; @@ -327,7 +327,6 @@ { continueFromHeparinSetupRequested = FALSE; state = TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; - } return state; @@ -358,7 +357,6 @@ // Valid + confirmed – move to Heparin Setup or 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 );