Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -r5bf62ff1373f2e9eea858244a97167323bff33f8 -r8b852565af56a290fdef5d17d9f60f62f3c526d2 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 5bf62ff1373f2e9eea858244a97167323bff33f8) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 8b852565af56a290fdef5d17d9f60f62f3c526d2) @@ -27,7 +27,9 @@ #include "OperationModes.h" #include "PresOccl.h" #include "ModePostTreat.h" +#include "ModeTreatment.h" #include "ModeTreatmentParams.h" +#include "SampleWater.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "Timers.h" @@ -41,7 +43,7 @@ // ********** private definitions ********** /// Interval (ms/task time) at which the post-treatment state data is published on the CAN bus. -#define POST_TREATMENT_DATA_PUB_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) +#define POST_TREATMENT_DATA_PUB_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) #define EMPTY_RESERVOIR_VOLUME_ML 0 ///< Empty reservoir volume in ml. #define DIP_FLUSH_FLOW_RATE_ML_MIN 150 ///< Dialysate inlet pump flow rate during flush in mL/min. @@ -79,6 +81,7 @@ static HD_POST_TREATMENT_STATE_T handlePostTreatmentDrainReservoirsState( void ); static HD_POST_TREATMENT_STATE_T handlePostTreatmentVerifyState( void ); +static void collectTreatmentLogData( void ); static void execDrainReservoirs( void ); static BOOL isReservoirDrainStarted( void ); static DRAIN_STATE_T handleDrainFirstReservoirStartState( void ); @@ -122,7 +125,7 @@ cmdStopDGFill(); // Set user alarm recovery actions allowed in this mode - setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, TRUE ); + setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, FALSE ); @@ -138,6 +141,8 @@ signalBloodPumpHardStop(); signalDialOutPumpHardStop(); signalDialInPumpHardStop(); + + collectTreatmentLogData(); } /*********************************************************************//** @@ -166,7 +171,6 @@ break; default: - currentPostTreatmentState = HD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE; SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE, currentPostTreatmentState ); break; } @@ -264,9 +268,10 @@ if ( STATE_CLOSED == getFPGADoorState() ) { -#ifndef SKIP_UI_INTERACTION - if ( TRUE == patientDisconnectionConfirmed ) +#ifdef SKIP_UI_INTERACTION + patientDisconnectionConfirmed = TRUE; #endif + if ( TRUE == patientDisconnectionConfirmed ) { patientDisconnectionConfirmed = FALSE; state = HD_POST_TREATMENT_DRAIN_RESERVOIRS_STATE; @@ -310,9 +315,10 @@ if ( DRAIN_COMPLETE_STATE == currentDrainReservoirState ) { -#ifndef SKIP_UI_INTERACTION - if ( TRUE == disposableRemovalConfirmed ) +#ifdef SKIP_UI_INTERACTION + disposableRemovalConfirmed = TRUE; #endif + if ( TRUE == disposableRemovalConfirmed ) { disposableRemovalConfirmed = FALSE; state = HD_POST_TREATMENT_VERIFY_STATE; @@ -375,6 +381,53 @@ /*********************************************************************//** * @brief + * The collectTreatmentLogData function collects treatment data. + * @details Inputs: none + * @details Outputs: collected treatment data + * @return none + *************************************************************************/ +static void collectTreatmentLogData( void ) +{ + // TODO: Fill in missing log data + treatmentLogData.bloodFlowRate_mL_min = getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ); + treatmentLogData.dialysateFlowRate_mL_min = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + treatmentLogData.treatmentDuration_min = getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION ); + treatmentLogData.actualTreatmentDur_min = getActualTreatmentTimeMins(); + + treatmentLogData.acidConcentrate = getTreatmentParameterU32( TREATMENT_PARAM_ACID_CONCENTRATE ); + treatmentLogData.bicarbConcentrate = getTreatmentParameterU32( TREATMENT_PARAM_BICARB_CONCENTRATE ); +// treatmentLogData.potassiumConcentration = 0; +// treatmentLogData.calciumConcentration = 0; +// treatmentLogData.bicarbonateConcentration = 0; +// treatmentLogData.sodiumConcentration = 0; + + treatmentLogData.dialysateTemperature_degC = getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ); + treatmentLogData.dialyzerType = getTreatmentParameterU32( TREATMENT_PARAM_DIALYZER_TYPE ); + +// treatmentLogData.avgBloodFlow_mL_min; +// treatmentLogData.avgDialysateFlow_mL_min; +// treatmentLogData.dialysateVolumeUsed_L; +// treatmentLogData.avgDialysateTemperature_degC; + + treatmentLogData.targetUFVolume_L = getTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME ); + treatmentLogData.actualUFVolume_L = getUltrafiltrationVolumeCollected(); + treatmentLogData.targetUFRate_mL_min = getTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME ) * ML_PER_LITER / treatmentLogData.treatmentDuration_min; + treatmentLogData.actualUFRate_mL_min = getUltrafiltrationVolumeCollected() / treatmentLogData.actualTreatmentDur_min; + treatmentLogData.salineBolusVolume_mL = getTotalSalineBolusVolumeDelivered(); + +// treatmentLogData.heparinType; + treatmentLogData.heparinBolusVolume_mL = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); + treatmentLogData.heparinDispenseRate_mL_hr = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ); + treatmentLogData.heparinPreStop_min = getTreatmentParameterU32( TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME ); + treatmentLogData.heparinDeliveredVolume_mL = getSyringePumpVolumeDelivered(); + +// treatmentLogData.endTreatmentEarlyAlarm; +// treatmentLogData.deviceID; + treatmentLogData.waterSampleTestResult = (U32)getSampleWaterResult(); +} + +/*********************************************************************//** + * @brief * The execDrainReservoirs function executes the drain reservoirs operation. * @details Inputs: currentDrainReservoirState * @details Outputs: currentDrainReservoirState