Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -r44a100f8e5210a02c23b8fcc4527d8e96d577381 -rbd0ae373570f7f224bb9a6a4e86f805be77de192 --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 44a100f8e5210a02c23b8fcc4527d8e96d577381) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision bd0ae373570f7f224bb9a6a4e86f805be77de192) @@ -499,6 +499,7 @@ setDialOutPumpTargetRate( setDialysateFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); // Go to UF paused state currentUFState = UF_PAUSED_STATE; + sendTreatmentLogEventData( UF_PAUSE_RESUME_EVENT, UF_RUNNING_STATE, UF_PAUSED_STATE ); } else { @@ -550,6 +551,7 @@ lastUFTimeStamp = getMSTimerCount(); // Go to UF running state currentUFState = UF_RUNNING_STATE; + sendTreatmentLogEventData( UF_PAUSE_RESUME_EVENT, UF_PAUSED_STATE, UF_RUNNING_STATE ); } else { Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -r065601bf5b0fc1b31b10ab54c2711875923c369a -rbd0ae373570f7f224bb9a6a4e86f805be77de192 --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 065601bf5b0fc1b31b10ab54c2711875923c369a) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision bd0ae373570f7f224bb9a6a4e86f805be77de192) @@ -22,6 +22,7 @@ #include "DialInFlow.h" #include "DialOutFlow.h" #include "ModeFault.h" +#include "ModePostTreat.h" #include "OperationModes.h" #include "SyringePump.h" #include "SystemCommMessages.h" @@ -68,6 +69,8 @@ { sendPOSTFinalResult( FALSE ); } + + collectTreatmentLogData(); } /*********************************************************************//** Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -r8b852565af56a290fdef5d17d9f60f62f3c526d2 -rbd0ae373570f7f224bb9a6a4e86f805be77de192 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 8b852565af56a290fdef5d17d9f60f62f3c526d2) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision bd0ae373570f7f224bb9a6a4e86f805be77de192) @@ -81,7 +81,6 @@ 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 ); @@ -105,8 +104,6 @@ currentPostTreatmentState = HD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE; currentDrainReservoirState = DRAIN_FIRST_RESERVOIR_START_STATE; postTreatmentPublishTimerCounter = 0; - - memset( &treatmentLogData, 0x0, sizeof( TREATMENT_LOG_DATA_PAYLOAD_T ) ); } /*********************************************************************//** @@ -186,6 +183,61 @@ /*********************************************************************//** * @brief + * The collectTreatmentLogData function collects treatment data. + * @details Inputs: none + * @details Outputs: collected treatment data + * @return none + *************************************************************************/ +void collectTreatmentLogData( void ) +{ + // Reset treatment log data + memset( &treatmentLogData, 0x0, sizeof( TREATMENT_LOG_DATA_PAYLOAD_T ) ); + + // 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.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; + + if ( TRUE == isUFVolumeParamReceived() ) + { + treatmentLogData.targetUFVolume_L = getTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME ); + treatmentLogData.targetUFRate_mL_min = getTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME ) * ML_PER_LITER / treatmentLogData.treatmentDuration_min; + } + + if ( treatmentLogData.actualTreatmentDur_min > 0 ) + { + treatmentLogData.actualUFVolume_L = getUltrafiltrationVolumeCollected(); + treatmentLogData.actualUFRate_mL_min = getUltrafiltrationVolumeCollected() / treatmentLogData.actualTreatmentDur_min; + } + else + { + treatmentLogData.actualUFVolume_L = 0.0; + treatmentLogData.actualUFRate_mL_min = 0.0; + } + treatmentLogData.salineBolusVolume_mL = getTotalSalineBolusVolumeDelivered(); + + 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.waterSampleTestResult = (U32)getSampleWaterResult(); +} + +/*********************************************************************//** + * @brief * The handleTreatmentLogDataRequest sends treatment log data to UI upon * UI requests. * @details Inputs: treatmentLogData @@ -381,53 +433,6 @@ /*********************************************************************//** * @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 Index: firmware/App/Modes/ModePostTreat.h =================================================================== diff -u -r40e0116bbada6d1780bfa832a9c4684ba9fcfcc8 -rbd0ae373570f7f224bb9a6a4e86f805be77de192 --- firmware/App/Modes/ModePostTreat.h (.../ModePostTreat.h) (revision 40e0116bbada6d1780bfa832a9c4684ba9fcfcc8) +++ firmware/App/Modes/ModePostTreat.h (.../ModePostTreat.h) (revision bd0ae373570f7f224bb9a6a4e86f805be77de192) @@ -82,6 +82,7 @@ void transitionToPostTreatmentMode( void ); // Prepares for transition to post-treatment mode U32 execPostTreatmentMode( void ); // Execute the post-treatment mode state machine (call from OperationModes) +void collectTreatmentLogData( void ); void handleTreatmentLogDataRequest( void ); void signalUserConfirmPatientDisconnection( void ); Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r44a100f8e5210a02c23b8fcc4527d8e96d577381 -rbd0ae373570f7f224bb9a6a4e86f805be77de192 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 44a100f8e5210a02c23b8fcc4527d8e96d577381) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision bd0ae373570f7f224bb9a6a4e86f805be77de192) @@ -977,6 +977,7 @@ DIALYSIS_STATE_T currDialysisState = getDialysisState(); UF_STATE_T currUFState = getUltrafiltrationState(); + sendTreatmentLogEventData( UF_VOLUME_CHANGE_EVENT, presMaxUFVolumeML, pendingUFVolumeChange ); result = TRUE; presMaxUFVolumeML = pendingUFVolumeChange; @@ -1154,6 +1155,11 @@ setTreatmentParameterS32( TREATMENT_PARAM_ART_PRESSURE_HIGH_LIMIT, data->artHighLimit ); setTreatmentParameterS32( TREATMENT_PARAM_VEN_PRESSURE_LOW_LIMIT, data->venLowLimit ); setTreatmentParameterS32( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT, data->venHighLimit ); + + sendTreatmentLogEventData( ARTERIAL_PRESSURE_LOWER_LIMIT_CHANGE_EVENT, getTreatmentParameterS32( TREATMENT_PARAM_ART_PRESSURE_LOW_LIMIT ), data->artLowLimit ); + sendTreatmentLogEventData( ARTERIAL_PRESSURE_UPPER_LIMIT_CHANGE_EVENT, getTreatmentParameterS32( TREATMENT_PARAM_ART_PRESSURE_HIGH_LIMIT ), data->artHighLimit ); + sendTreatmentLogEventData( VENOUS_PRESSURE_LOWER_LIMIT_CHANGE_EVENT, getTreatmentParameterS32( TREATMENT_PARAM_VEN_PRESSURE_LOW_LIMIT ), data->venLowLimit ); + sendTreatmentLogEventData( VENOUS_PRESSURE_UPPER_LIMIT_CHANGE_EVENT, getTreatmentParameterS32( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT ), data->venHighLimit ); } // Read back limits for transmit to UI. Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -r850f74b97895fd0f6c4728541ac2582f7b5c5a0b -rbd0ae373570f7f224bb9a6a4e86f805be77de192 --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 850f74b97895fd0f6c4728541ac2582f7b5c5a0b) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision bd0ae373570f7f224bb9a6a4e86f805be77de192) @@ -85,6 +85,7 @@ static BOOL treatParamsConfirmed = FALSE; ///< Flag indicates user has confirmed the treatment parameters. static BOOL treatParamsRejected = FALSE; ///< Flag indicates user has rejected the treatment parameters. static BOOL treatmentCancelled = FALSE; ///< Flag indicates user has cancelled the treatment. +static BOOL validUFVolumeParamReceived = FALSE; ///< Flag indicates user has provided UF volume parameter. // ********** private function prototypes ********** @@ -131,6 +132,7 @@ treatParamsConfirmed = FALSE; treatParamsRejected = FALSE; treatmentCancelled = FALSE; + validUFVolumeParamReceived = FALSE; // Set user alarm recovery actions allowed in this mode setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, FALSE ); @@ -401,16 +403,13 @@ { BOOL accepted = FALSE; REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NONE; - F32 uFVolumeL = uFVolumeMl / (F32)ML_PER_LITER; + F32 uFVolumeL = uFVolumeMl / (F32)ML_PER_LITER; // Validate given UF volume accepted = setTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME, uFVolumeL ); - if ( FALSE == accepted ) + + if ( TRUE == accepted ) { - rejReason = REQUEST_REJECT_REASON_UF_VOLUME_OUT_OF_RANGE; - } - else - { U32 treatmentDuration = getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION ); if ( treatmentDuration > 0 ) @@ -429,8 +428,13 @@ rejReason = REQUEST_REJECT_REASON_TREATMENT_TIME_LESS_THAN_MINIMUM; } } + else + { + rejReason = REQUEST_REJECT_REASON_UF_VOLUME_OUT_OF_RANGE; + } // Respond to set treatment parameters request message + validUFVolumeParamReceived = accepted; uFVolumeL = getTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME ); uFVolumeMl = uFVolumeL * (F32)ML_PER_LITER; sendUFVolumeSetResponseMsg( accepted, rejReason, uFVolumeMl ); @@ -440,6 +444,19 @@ /*********************************************************************//** * @brief + * The isUFVolumeParamReceived function determines whether a valid UF volume + * parameter has been provided by user. + * @details Inputs: validUFVolumeParamReceived + * @details Outputs: none + * @return TRUE if valid UF volume parameter has been received, FALSE if not + *************************************************************************/ +BOOL isUFVolumeParamReceived( void ) +{ + return validUFVolumeParamReceived; +} + +/*********************************************************************//** + * @brief * The validateAndSetTreatmentParameters function validates received * treatment parameters. * @details Inputs: none Index: firmware/App/Modes/ModeTreatmentParams.h =================================================================== diff -u -r4aa16058db700e071748f89f91e6eb58ed348ea3 -rbd0ae373570f7f224bb9a6a4e86f805be77de192 --- firmware/App/Modes/ModeTreatmentParams.h (.../ModeTreatmentParams.h) (revision 4aa16058db700e071748f89f91e6eb58ed348ea3) +++ firmware/App/Modes/ModeTreatmentParams.h (.../ModeTreatmentParams.h) (revision bd0ae373570f7f224bb9a6a4e86f805be77de192) @@ -84,6 +84,7 @@ void signalAlarmActionToTreatParamsMode( ALARM_ACTION_T action ); // Execute alarm action as appropriate for treatment parameters mode BOOL validateAndSetUFVolume( F32 uFVolumeMl ); // User provided ultrafiltration volume to be set and validated +BOOL isUFVolumeParamReceived( void ); // Check if user has provided UF volume parameter BOOL setTreatmentParameterU32( TREATMENT_PARAM_T param, U32 value ); // Set a specified unsigned integer treatment parameter value BOOL setTreatmentParameterS32( TREATMENT_PARAM_T param, S32 value ); // Set a specified signed integer treatment parameter value