Index: drydemo.pro.user =================================================================== diff -u -rb9f4ddeb2dec3019b87c712bfe64b8df1d4b328c -rb13dd2b30889640ebf03f54414f536ca5c8d2dc7 --- drydemo.pro.user (.../drydemo.pro.user) (revision b9f4ddeb2dec3019b87c712bfe64b8df1d4b328c) +++ drydemo.pro.user (.../drydemo.pro.user) (revision b13dd2b30889640ebf03f54414f536ca5c8d2dc7) @@ -1,6 +1,6 @@ - + EnvironmentId Index: sources/MessageGlobals.h =================================================================== diff -u -rc52253ab5fc73e9b59d9cd99eada3d526d799987 -rb13dd2b30889640ebf03f54414f536ca5c8d2dc7 --- sources/MessageGlobals.h (.../MessageGlobals.h) (revision c52253ab5fc73e9b59d9cd99eada3d526d799987) +++ sources/MessageGlobals.h (.../MessageGlobals.h) (revision b13dd2b30889640ebf03f54414f536ca5c8d2dc7) @@ -187,8 +187,10 @@ ID_UI_RECIRCULATE_RQST = 0xA600, ID_TD_RECIRCULATE_RESP = 0xA700, ID_TD_RECIRCULATE_DATA = 0xA800, - ID_TD_UI_GENERIC_CONFIRMATION_REQUEST = 0xB500, + ID_TD_UI_GENERIC_CONFIRMATION_RQST = 0xB500, ID_UI_CONFIRMATION_RESULT_RESP = 0xB600, + ID_UI_VITALS_ADJUSTMENT_RQST = 0xB800, + ID_TD_VITALS_ADJUSTMENT_RESP = 0xB900, ID_ACK_MESSAGE_THAT_REQUIRES_ACK = 0xFFFF, }; Index: sources/drydemo/DryDemoDefines.h =================================================================== diff -u -r7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420 -rb13dd2b30889640ebf03f54414f536ca5c8d2dc7 --- sources/drydemo/DryDemoDefines.h (.../DryDemoDefines.h) (revision 7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420) +++ sources/drydemo/DryDemoDefines.h (.../DryDemoDefines.h) (revision b13dd2b30889640ebf03f54414f536ca5c8d2dc7) @@ -53,8 +53,9 @@ #define DEF_TX_PARAM_VEN_PRES_LIMIT_WIN_MMHG 100 #define DEF_TX_PARAM_VEN_PRES_LIMIT_ASYM_WIN_MMHG 20 #define DEF_TX_PARAM_DIA_TEMPERATURE_C 37.0 -#define DEF_TX_SYSTOLIC_PRESSURE 120 -#define DEF_TX_DIASTOLIC_PRESSURE 80 +#define DEF_TX_PARAM_BLOOD_PRES_INTERVAL_MIN (30 * MINUTES_PER_HOUR * MILLISECONDS_PER_SECOND) +#define DEF_TX_SYSTOLIC_PRES 120 +#define DEF_TX_DIASTOLIC_PRES 80 #define DEF_TX_HEART_BEAT 100 // Arterial /Venous limits & Baro @@ -164,6 +165,7 @@ TREAT_ISO_UF_STATE = 7, TREAT_SALINE_BOLUS_STATE = 8, TREAT_DIALYSIS_PAUSED_STATE = 9, + TREATMENT_HDF_STATE = 10, }; enum Blood_Prime_States { @@ -236,6 +238,14 @@ SEQ_ALARM_LOW_VENOUS = 6, }; +enum Treatment_Modality_Types +{ + TREATMENT_MODALITY_HD_SALINE_FLUID = 0, + TREATMENT_MODALITY_HDF_ONLINE_FLUID = 1, + TREATMENT_MODALITY_HD_ONLINE_FLUID = 2, +// TREATMENT_MODALITY_ISOLATED_UF, +}; + // Pressure limits enum Pressure_Limits_States { PRESSURE_LIMITS_STATE_OFF = 0, Index: sources/drydemo/StateController.cpp =================================================================== diff -u -r7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420 -rb13dd2b30889640ebf03f54414f536ca5c8d2dc7 --- sources/drydemo/StateController.cpp (.../StateController.cpp) (revision 7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420) +++ sources/drydemo/StateController.cpp (.../StateController.cpp) (revision b13dd2b30889640ebf03f54414f536ca5c8d2dc7) @@ -82,6 +82,7 @@ case ID_UI_ALARM_USER_ACTION_REQUEST: case ID_UI_RINSEBACK_CMD_RQST: case ID_UI_RECIRCULATE_RQST: + case ID_UI_VITALS_ADJUSTMENT_RQST: _treatmentRcvdMessages[receivedMsgID] = msg[RCVD_MSG_PAYLOAD_INDEX]; break; @@ -95,6 +96,7 @@ case ID_UI_ADJUST_DISPOSABLES_CONFIRM_RQST: case ID_UI_ADJUST_START_TREATMENT_RQST: case ID_UI_PRESSURE_LIMIT_WIDEN_RQST: + case ID_UI_BLOOD_PRESSURE_RQST: _treatmentRcvdMessages[receivedMsgID] = 0; break; @@ -119,7 +121,6 @@ case ID_TD_TREATMENT_SET_POINT_DIALYSATE_FLOW_CHANGE_RESP: case ID_DD_CONDUCTIVITY_DATA: case ID_TD_BOLUS_VOLUME_CHANGE_RESP: - case ID_UI_BLOOD_PRESSURE_RQST: case ID_TD_BLOOD_PRESSURE_READING_RESP: case ID_TD_BLOOD_PRESSURE_DATA: case ID_TD_ULTRAFILTRATION_DATA: @@ -134,10 +135,11 @@ case ID_ALARM_CLEARED: case ID_TD_RINSEBACK_CMD_RESP: case ID_TD_RINSEBACK_DATA: - case ID_TD_UI_GENERIC_CONFIRMATION_REQUEST: + case ID_TD_UI_GENERIC_CONFIRMATION_RQST: case ID_TD_RECIRCULATE_RESP: case ID_TD_RECIRCULATE_DATA: case ID_ACK_MESSAGE_THAT_REQUIRES_ACK: + case ID_TD_VITALS_ADJUSTMENT_RESP: // Do nothing break; } @@ -402,6 +404,9 @@ // Alarm methods handleChemsReplacementAlarmsSequence(status); handleTriggeredAlarmsToTxPause(status); + // Vitals functions + handleVitalsAdjustmentMessage(); + handleVitalsDataRquest(); // Treatment complete condition if ((_treatmentStatus.treatmentElapsedTimeMS / MILLISECONDS_PER_SECOND) > (_treatmentParams.treatmentDurationMin * SECONDS_PER_MINUTE)) { Index: sources/drydemo/StateController.h =================================================================== diff -u -r7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420 -rb13dd2b30889640ebf03f54414f536ca5c8d2dc7 --- sources/drydemo/StateController.h (.../StateController.h) (revision 7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420) +++ sources/drydemo/StateController.h (.../StateController.h) (revision b13dd2b30889640ebf03f54414f536ca5c8d2dc7) @@ -72,6 +72,11 @@ bool hasResumeTxBeenRequested; bool hasRecircWarnAlarmBeenTrig; bool hasRecircTimeoutAlarmBeenTrig; + // Vitals alarm limits + quint32 systolicBPLowAlarmLimit; + quint32 systolicBPHighAlarmLimit; + quint32 heartRateLowAlarmLimit; + quint32 heartRateHighAlarmLimit; }; struct Pressure_Vars { @@ -214,7 +219,6 @@ void handleDDGenDialysateModeBroadcastData(const Broadcast_Type BCType); void handleSetPointDialysateFlowChange(); void handleDDConductivityBroadcastData(const Broadcast_Type BCType); - void handleTDBloodPressureBroadcastData(const Broadcast_Type BCType); void handleUltrafiltrationBroadcastData(const Broadcast_Type BCType); void handleSetPointDialysateTemperatureChange(); void handleUltrafiltrationPauseResume(); @@ -229,6 +233,10 @@ void handleDeterminePressureLimits(); void handleSignalInitiatePressureStabilization(const Pressure_Stabilization_Periods period); void handleWidenPressureLimitsMessage(); + // Treatment vitals + void handleVitalsAdjustmentMessage(); + void handleVitalsBroadcastData(); + void handleVitalsDataRquest(); // Treatment rinseback methods void initializeRinseback(); Index: sources/drydemo/StateControllerStandby.cpp =================================================================== diff -u -r7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420 -rb13dd2b30889640ebf03f54414f536ca5c8d2dc7 --- sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision 7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420) +++ sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision b13dd2b30889640ebf03f54414f536ca5c8d2dc7) @@ -320,7 +320,7 @@ void StateController::handleSendUIConfirmationMessage(const Generic_Confirm_Id confirmID, const Generic_Confirm_Command confirmCmd, const Reject_Reasons rejectReason) { QVariantList resp; - resp.append(static_cast(ID_TD_UI_GENERIC_CONFIRMATION_REQUEST)); + resp.append(static_cast(ID_TD_UI_GENERIC_CONFIRMATION_RQST)); resp.append(Can_Id::eChlid_TD_UI); resp.append(confirmID); resp.append(confirmCmd); Index: sources/drydemo/StateControllerTreatment.cpp =================================================================== diff -u -r7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420 -rb13dd2b30889640ebf03f54414f536ca5c8d2dc7 --- sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision 7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420) +++ sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision b13dd2b30889640ebf03f54414f536ca5c8d2dc7) @@ -83,15 +83,16 @@ void StateController::setTreatmentParametersToDefault() { // TODO complete the list as we go - _treatmentParams.finalConfirmation = true; - _treatmentParams.treatmentModality = 0; // TODO set the actual enum value - _treatmentParams.bloodFlowRateMLPM = DEF_TX_PARAM_BLOOD_FLOW_RATE_MLPM; - _treatmentParams.dialysateFlowRateMLPM = DEF_TX_PARAM_DIAL_FLOW_RATE_MLPM; - _treatmentParams.treatmentDurationMin = DEF_TX_PARAM_PRESCRIBED_DUR_MIN; - _treatmentParams.dialysateTemperatureC = DEF_TX_PARAM_DIA_TEMPERATURE_C; - _treatmentParams.fluidBlousVolumeML = DEF_TX_PARAM_SALINE_BOLUS_VOL_ML; - _treatmentParams.ufVolumeL = DEF_TX_PARAM_UF_VOLUME_L; - _treatmentParams.rinsebackVolumeML = DEF_TX_PARAM_RINSEBACK_VOLUME_ML; + _treatmentParams.finalConfirmation = true; + _treatmentParams.treatmentModality = static_cast(TREATMENT_MODALITY_HD_SALINE_FLUID); + _treatmentParams.bloodFlowRateMLPM = DEF_TX_PARAM_BLOOD_FLOW_RATE_MLPM; + _treatmentParams.dialysateFlowRateMLPM = DEF_TX_PARAM_DIAL_FLOW_RATE_MLPM; + _treatmentParams.treatmentDurationMin = DEF_TX_PARAM_PRESCRIBED_DUR_MIN; + _treatmentParams.dialysateTemperatureC = DEF_TX_PARAM_DIA_TEMPERATURE_C; + _treatmentParams.fluidBlousVolumeML = DEF_TX_PARAM_SALINE_BOLUS_VOL_ML; + _treatmentParams.ufVolumeL = DEF_TX_PARAM_UF_VOLUME_L; + _treatmentParams.rinsebackVolumeML = DEF_TX_PARAM_RINSEBACK_VOLUME_ML; + _treatmentParams.bloodPressureIntervalMin = DEF_TX_PARAM_BLOOD_PRES_INTERVAL_MIN; } void StateController::initializeTreatmentTimeAndUltrafiltration() @@ -269,7 +270,6 @@ _treatmentSubStates.dialysisSubState = DIALYSIS_UF_STATE; _treatmentSubStates.dialysisSubState = (cmd == 0 ? DIALYSIS_UF_PAUSED_STATE : _treatmentSubStates.dialysisSubState); acceptReject = ACCEPT_VALUE; - qDebug() << "UF Pa" << _treatmentSubStates.dialysisSubState; } else if (_treatmentSubStates.txState != TREAT_DIALYSIS_STATE) { reason.append(REQUEST_REJECT_REASON_INVALID_TREATMENT_STATE); } else { @@ -466,7 +466,7 @@ if (!_treatmentStatus.isBloodPumpRunning) { _pressureVars.presLimitState = PRESSURE_LIMITS_STATE_IDLE; } else if ((_treatmentSubStates.txState == TREAT_DIALYSIS_STATE) || (_treatmentSubStates.txState == TREAT_PAUSED_STATE)) { _pressureVars.presStabilizationTimerCtr = 0; - _pressureVars.presStabilizeTimePeriod = USE_NORMAL_STABILIZATION_PERIOD; + _pressureVars.presStabilizeTimePeriod = USE_NORMAL_STABILIZATION_PERIOD; _pressureVars.presLimitState = PRESSURE_LIMITS_STATE_STABILIZATION; } else if (_treatmentSubStates.txState == TREAT_RECIRC_STATE) { _pressureVars.presLimitState = PRESSURE_LIMITS_STATE_OFF; } @@ -476,7 +476,7 @@ // Assume the stabilization timeout is normal timeout _pressureVars.presStabilizeTimeoutMS = PRES_LIMIT_STABE_TIME_MS; _pressureVars.presStabilizationTimerCtr++; - if (_pressureVars.presLimitState == PRESSURE_LIMITS_STATE_STABILIZATION) { + if (_pressureVars.presStabilizeTimePeriod == USE_SHORT_STABILIZATION_PERIOD) { _pressureVars.presStabilizeTimeoutMS = PRES_LIMIT_SHORT_STABE_TIME_MS; } @@ -487,7 +487,7 @@ else if ((_pressureVars.presStabilizationTimerCtr * QOBJECT_TIMER_TIMEOUT_MS) >= _pressureVars.presStabilizeTimeoutMS) { handleUpdatePressureLimitWindows(); _pressureVars.presStabilizationTimerCtr = 0; - _pressureVars.presStabilizeTimePeriod = USE_NORMAL_STABILIZATION_PERIOD; + _pressureVars.presStabilizeTimePeriod = USE_NORMAL_STABILIZATION_PERIOD; _pressureVars.presLimitState = PRESSURE_LIMITS_STATE_STABLE; } break; @@ -501,7 +501,7 @@ else if ((_pressureVars.presStabilizationTimerCtr * QOBJECT_TIMER_TIMEOUT_MS) >= PRES_LIMIT_RESTABILIZE_TIME_MS) { handleUpdatePressureLimitWindows(); _pressureVars.presStabilizationTimerCtr = 0; - _pressureVars.presStabilizeTimePeriod = STABILIZATION_PERIOD_OFF; + _pressureVars.presStabilizeTimePeriod = STABILIZATION_PERIOD_OFF; _pressureVars.presLimitState = PRESSURE_LIMITS_STATE_STABILIZATION; } break; @@ -603,8 +603,39 @@ handleUIResponseMessage(ID_TD_PRESSURE_LIMIT_WIDEN_RESP, ACCEPT_VALUE); } +void StateController::handleVitalsAdjustmentMessage() +{ + if (_treatmentRcvdMessages[ID_UI_VITALS_ADJUSTMENT_RQST].isNull()) { return; } + quint32 vitalIntMIN = extractU32DataFromReceivedMessage(ID_UI_VITALS_ADJUSTMENT_RQST, 16); + quint32 acceptReject = ACCEPT_VALUE; + QVariantList reason; + // TODO implement the reject reasons + reason.append(REQUEST_REJECT_REASON_NONE); + reason.append(REQUEST_REJECT_REASON_NONE); + reason.append(REQUEST_REJECT_REASON_NONE); + reason.append(REQUEST_REJECT_REASON_NONE); + reason.append(REQUEST_REJECT_REASON_NONE); + _treatmentParams.bloodPressureIntervalMin = vitalIntMIN * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND; + _treatmentRcvdMessages[ID_UI_VITALS_ADJUSTMENT_RQST].clear(); + handleUIResponseMessage(ID_TD_VITALS_ADJUSTMENT_RESP, acceptReject, reason); +} +void StateController::handleVitalsDataRquest() +{ + if (_treatmentRcvdMessages[ID_UI_BLOOD_PRESSURE_RQST].isNull()) { return; } + _treatmentRcvdMessages[ID_UI_BLOOD_PRESSURE_RQST].clear(); + // TODo check the reject reasons + handleUIResponseMessage(ID_TD_VITALS_ADJUSTMENT_RESP, ACCEPT_VALUE); + handleVitalsBroadcastData(); +} + + + + + + + Index: sources/drydemo/StateControllerTreatmentBroadcasts.cpp =================================================================== diff -u -r38521851fd3271aa9a8965067d15daaba0db4b2e -rb13dd2b30889640ebf03f54414f536ca5c8d2dc7 --- sources/drydemo/StateControllerTreatmentBroadcasts.cpp (.../StateControllerTreatmentBroadcasts.cpp) (revision 38521851fd3271aa9a8965067d15daaba0db4b2e) +++ sources/drydemo/StateControllerTreatmentBroadcasts.cpp (.../StateControllerTreatmentBroadcasts.cpp) (revision b13dd2b30889640ebf03f54414f536ca5c8d2dc7) @@ -80,26 +80,26 @@ { static quint32 broadcastCounter = 10; // Arterial calculations - float arterialRandomMMHG = _randNumGenerator.generateDouble() * (_pressureVars.arterialMinLimitMMHG - _pressureVars.arterialMaxLimitMMHG) + - _pressureVars.arterialMaxLimitMMHG; + float arterialRandomMMHG = _randNumGenerator.generateDouble() * (_pressureVars.arterialMaxLimitMMHG - _pressureVars.arterialMinLimitMMHG) + + _pressureVars.arterialMinLimitMMHG; float arterialPevMMHG = _pressureVars.arterialRawMMHG[_pressureVars.arterialIndex]; - + // Moving average _pressureVars.arterialRawMMHG[_pressureVars.arterialIndex] = arterialRandomMMHG; _pressureVars.arterialRunningSumMMHG = _pressureVars.arterialRunningSumMMHG - arterialPevMMHG + arterialRandomMMHG; _pressureVars.arterialIndex = (_pressureVars.arterialIndex < SHORT_MOVING_AVG_SIZE - 1 ? _pressureVars.arterialIndex + 1 : 0); // Venous calculations - float venousRandomMMHG = _randNumGenerator.generateDouble() * (_pressureVars.venousMinLimitMMHG - _pressureVars.venousMaxLimitMMHG) + - _pressureVars.venousMaxLimitMMHG; + float venousRandomMMHG = _randNumGenerator.generateDouble() * (_pressureVars.venousMaxLimitMMHG - _pressureVars.venousMinLimitMMHG) + + _pressureVars.venousMinLimitMMHG; float venousPevMMHG = _pressureVars.venousRawMMHG[_pressureVars.venousIndex]; - + // Moving average _pressureVars.venousRawMMHG[_pressureVars.venousIndex] = venousRandomMMHG; _pressureVars.venousRunningSumMMHG = _pressureVars.venousRunningSumMMHG - venousPevMMHG + venousRandomMMHG; _pressureVars.venousIndex = (_pressureVars.venousIndex < SHORT_MOVING_AVG_SIZE - 1 ? _pressureVars.venousIndex + 1 : 0); // TMP calculations - float tmpRandomMMHG = _randNumGenerator.generateDouble() * (_pressureVars.tmpMinLimitMMHG - _pressureVars.tmpMaxLimitMMHG) + - _pressureVars.tmpMaxLimitMMHG; + float tmpRandomMMHG = _randNumGenerator.generateDouble() * (_pressureVars.tmpMaxLimitMMHG - _pressureVars.tmpMinLimitMMHG) + + _pressureVars.tmpMinLimitMMHG; float tmpPevMMHG = _pressureVars.tmpRawMMHG[_pressureVars.tmpIndex]; - + // Moving average _pressureVars.tmpRawMMHG[_pressureVars.tmpIndex] = tmpRandomMMHG; _pressureVars.tmpRunningSumMMHG = _pressureVars.tmpRunningSumMMHG - tmpPevMMHG + tmpRandomMMHG; _pressureVars.tmpIndex = (_pressureVars.tmpIndex < SHORT_MOVING_AVG_SIZE - 1 ? _pressureVars.tmpIndex + 1 : 0); @@ -199,13 +199,6 @@ _isBroadcastListReady = true; } -void StateController::handleTDBloodPressureBroadcastData(const Broadcast_Type BCType) -{ - static quint32 broadcastCounter = 22; - if ((++broadcastCounter % NUM_OF_COUNTS_TIMER_BC_EMIT != 0) && (BCType == BC_DELAYED)) { return; } - // TODO copmlete -} - void StateController::handleUltrafiltrationBroadcastData(const Broadcast_Type BCType) { static quint32 broadcastCounter = 31; @@ -268,3 +261,21 @@ _isBroadcastListReady = true; } +void StateController::handleVitalsBroadcastData() +{ + quint32 systolic = _randNumGenerator.global()->bounded(DEF_TX_SYSTOLIC_PRES - 20, DEF_TX_SYSTOLIC_PRES ); + quint32 diastolic = _randNumGenerator.global()->bounded(DEF_TX_DIASTOLIC_PRES - 20, DEF_TX_DIASTOLIC_PRES); + quint32 heartBeat = _randNumGenerator.global()->bounded(DEF_TX_HEART_BEAT - 20, DEF_TX_HEART_BEAT); + + QVariantList msg; + msg.append(static_cast(ID_TD_BLOOD_PRESSURE_DATA)); + msg.append(Can_Id::eChlid_TD_Sync); + msg.append(systolic); + msg.append(diastolic); + msg.append(heartBeat); + _isBroadcastListReady = false; + _broadcastMessages.append(msg); + _isBroadcastListReady = true; +} + +