Fisheye: Tag 4d0fc455e6307639e72db490721c7768a487c014 refers to a dead (removed) revision in file `cppcheck.err'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 4d0fc455e6307639e72db490721c7768a487c014 refers to a dead (removed) revision in file `cppcheck.log'. Fisheye: No comparison available. Pass `N' to diff? Index: drydemo.pro.user =================================================================== diff -u -rb13dd2b30889640ebf03f54414f536ca5c8d2dc7 -r4d0fc455e6307639e72db490721c7768a487c014 --- drydemo.pro.user (.../drydemo.pro.user) (revision b13dd2b30889640ebf03f54414f536ca5c8d2dc7) +++ drydemo.pro.user (.../drydemo.pro.user) (revision 4d0fc455e6307639e72db490721c7768a487c014) @@ -1,6 +1,6 @@ - + EnvironmentId Index: sources/MessageGlobals.h =================================================================== diff -u -rbf271a558491a83b39eb30748784f1b744736dd2 -r4d0fc455e6307639e72db490721c7768a487c014 --- sources/MessageGlobals.h (.../MessageGlobals.h) (revision bf271a558491a83b39eb30748784f1b744736dd2) +++ sources/MessageGlobals.h (.../MessageGlobals.h) (revision 4d0fc455e6307639e72db490721c7768a487c014) @@ -194,6 +194,8 @@ ID_UI_VITALS_ADJUSTMENT_RQST = 0xB800, ID_TD_VITALS_ADJUSTMENT_RESP = 0xB900, ID_TD_HEMODIAFILTRATION_DATA = 0xBC00, + ID_UI_HDF_ADJUSTMENT_RQST = 0xC100, + ID_TD_HDF_ADJUSTMENT_RESP = 0xC200, ID_TD_DRY_BICART_DISCONNECT_DATA = 0xC400, ID_UI_DRY_BICART_DISCONNECT_RQST = 0xC500, ID_TD_DRY_BICART_DISCONNECT_RESP = 0xC600, Index: sources/drydemo/DryDemoDefines.h =================================================================== diff -u -rbf271a558491a83b39eb30748784f1b744736dd2 -r4d0fc455e6307639e72db490721c7768a487c014 --- sources/drydemo/DryDemoDefines.h (.../DryDemoDefines.h) (revision bf271a558491a83b39eb30748784f1b744736dd2) +++ sources/drydemo/DryDemoDefines.h (.../DryDemoDefines.h) (revision 4d0fc455e6307639e72db490721c7768a487c014) @@ -14,6 +14,8 @@ #define NEARLY_ZERO 0.00000001 #define ONE_HUNDRED_PCT 100 #define UI_CONFIRM_RESP_TIMOUT_MS (SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND) +#define RCVD_MSG_PAYLOAD_MIN_LEN 3 +#define RCVD_MSG_SQNC_MIN_LEN 2 #define RCVD_MSG_MSG_ID_INDEX 0 #define RCVD_MSG_SQNC_INDEX 1 #define RCVD_MSG_PAYLOAD_INDEX 2 @@ -64,7 +66,7 @@ #define MAX_ART_PRES_LIMIT_MMHG 100.0 #define MIN_VEN_PRES_LIMIT_MMHG 20.0 #define MAX_VEN_PRES_LIMIT_MMHG 400.0 -#define MIN_TMP_PRES_LIMIT_MMHG -500.0 +#define MIN_TMP_PRES_LIMIT_MMHG 0.0 //-500.0 In firmware minimum is -500 mmHg #define MAX_TMP_PRES_LIMIT_MMHG 100.0 #define SHORT_MOVING_AVG_SIZE MILLISECONDS_PER_SECOND / QOBJECT_TIMER_TIMEOUT_MS #define PRES_LIMIT_SHORT_STABE_TIME_MS (10 * MILLISECONDS_PER_SECOND) @@ -140,6 +142,7 @@ #define ALARM_REPLACE_BICARB_PROPERTIES 112 #define ALARM_DIAL_PROPOR_PROPERTIES 10 #define ALARM_TX_MOD_CHNG_PROPERTIES 2 +#define ALARM_LOW_BICARB_PROPERTIES 112 // Dry bicart defines #define DRY_BICART_DRIN_IN_PROGRESS 1 @@ -150,6 +153,12 @@ #define DRY_BICART_OPEN_SCREEN 1 #define DRY_BICART_PCT_PROG_TIME_MS (20 * MILLISECONDS_PER_SECOND) +// HDF defines +#define HDF_MAX_FILTRATION_FRACTION 0.35 +#define HDF_MAX_TMP 400.0 +#define HDF_MAX_RATE 200.0 +#define HDF_CONTROL_INT_CTR (4 * MILLISECONDS_PER_SECOND) / QOBJECT_TIMER_TIMEOUT_MS + enum User_Command_ID { CMD_NONE = -1, CMD_STAND_BY = 0, @@ -207,6 +216,7 @@ RINSEBACK_PAUSED_STATE = 2, RINSEBACK_STOP_STATE = 3, RINSEBACK_RUN_ADDITIONAL_STATE = 4, + RINSEBACK_RECONNECT_PATIENT_STATE = 5, }; enum Requested_Rinseback_User_Actions { @@ -284,6 +294,11 @@ HDF_UF_FLUID_BOLUS_STATE = 2, }; +enum HDF_Control_States { + TD_HDF_PAUSED = 0, + TD_HDF_RUNNING = 1, +}; + // Dry bicart status enum Dry_Bicart_Action { DRY_BICART_ACTION_DRAIN = 0, Index: sources/drydemo/StateController.cpp =================================================================== diff -u -rbf271a558491a83b39eb30748784f1b744736dd2 -r4d0fc455e6307639e72db490721c7768a487c014 --- sources/drydemo/StateController.cpp (.../StateController.cpp) (revision bf271a558491a83b39eb30748784f1b744736dd2) +++ sources/drydemo/StateController.cpp (.../StateController.cpp) (revision 4d0fc455e6307639e72db490721c7768a487c014) @@ -35,7 +35,6 @@ _transitionEventsFromStandby[CMD_MAIN_TX ] = {"T_SB_2_Tx" , static_cast(MODE_TREA)}; _transitionEventsFromStandby[CMD_RINSEBACK ] = {"T_SB_2_RB" , static_cast(MODE_TREA)}; _transitionEventsFromStandby[CMD_RICIRCULATE ] = {"T_SB_2_RC" , static_cast(MODE_TREA)}; - _transitionEventsFromStandby[CMD_END_TX ] = {"T_SB_2_TE" , static_cast(MODE_TREA)}; // Alarms specs and properties @@ -44,6 +43,7 @@ _alarmTriggerSpecs[ALARM_ID_TD_TREATMENT_STOPPED_BY_USER ] = {ALARM_PRIORITY_HIGH , ALARM_STOP_TX_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; _alarmTriggerSpecs[ALARM_ID_TD_RECIRC_TIMEOUT_WARNING ] = {ALARM_PRIORITY_LOW , ALARM_RECIRC_WARN_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE}; _alarmTriggerSpecs[ALARM_ID_TD_RECIRC_TIMEOUT ] = {ALARM_PRIORITY_HIGH , ALARM_RECIR_TIMEOUT_RPOPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE}; + _alarmTriggerSpecs[ALARM_ID_DD_BICARBONATE_CARTRIDGE_LOW_LEVEL ] = {ALARM_PRIORITY_MEDIUM , ALARM_LOW_BICARB_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; _alarmTriggerSpecs[ALARM_ID_TD_TREATMENT_MODALITY_CHANGE ] = {ALARM_PRIORITY_MEDIUM , ALARM_TX_MOD_CHNG_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; _alarmTriggerSpecs[ALARM_ID_DD_REPLACE_ACID_CONCENTRATE ] = {ALARM_PRIORITY_MEDIUM , ALARM_REPLACE_ACID_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; _alarmTriggerSpecs[ALARM_ID_DD_REPLACE_BICARB_CARTRIDGE ] = {ALARM_PRIORITY_MEDIUM , ALARM_REPLACE_BICARB_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; @@ -86,11 +86,14 @@ case ID_UI_VITALS_ADJUSTMENT_RQST: case ID_UI_PRESSURE_LIMITS_CHANGE_RQST: case ID_UI_DRY_BICART_DISCONNECT_RQST: + case ID_UI_HDF_ADJUSTMENT_RQST: + if (msg.length() < RCVD_MSG_PAYLOAD_MIN_LEN) { qDebug() << "Msg with incomplete payload" << msg; return; } _treatmentRcvdMessages[receivedMsgID] = msg[RCVD_MSG_PAYLOAD_INDEX]; break; case ID_UI_CHECK_IN: // For UI check in add the sequence to the the received messages. For check in, the sequence is x -1 and sent back to ack + if (msg.length() < RCVD_MSG_SQNC_MIN_LEN) { qDebug() << "Msg with incomplete payload (sequence)" << msg; return; } _treatmentRcvdMessages[receivedMsgID] = msg[RCVD_MSG_SQNC_INDEX]; break; @@ -102,7 +105,7 @@ case ID_UI_BLOOD_PRESSURE_RQST: case ID_UI_SETUP_TUBING_SET_CONNECTIONS_CONFIRM_RQST: _treatmentRcvdMessages[receivedMsgID] = 0; - break; + break; case ID_NONE: case ID_TD_OP_MODE_DATA: @@ -149,6 +152,7 @@ case ID_TD_PRESSURE_LIMITS_CHANGE_RESP: case ID_TD_DRY_BICART_DISCONNECT_DATA: case ID_TD_DRY_BICART_DISCONNECT_RESP: + case ID_TD_HDF_ADJUSTMENT_RESP: // Do nothing break; } @@ -192,6 +196,7 @@ handleTDOpModeTransitionBroadcastData(MODE_STAN, 0, BC_IMMEDIATELY); setTreatmentParametersToDefault(); resetDryDemoVariables(); + initializeTreatmentHDFVariables(); // Clear all the alarms triggerAnAlarm(ALARM_ID_NO_ALARM); status = STATE_ON_ACTION; @@ -205,12 +210,18 @@ if (_treatmentStatus.userCmd != CMD_NONE){ if ((_treatmentStatus.userCmd > CMD_STAND_BY) && (_treatmentStatus.userCmd <= CMD_DISINFECTION)) { + if (!_transitionEventsFromStandby.contains(_treatmentStatus.userCmd)) { + // If the message is not part of the event hash table, do not process it + qDebug() << "Cmd does not exist" << _treatmentStatus.userCmd; + _treatmentStatus.userCmd = CMD_NONE; + return; + } _treatmentStatus.stateTransitionEvent = _transitionEventsFromStandby[_treatmentStatus.userCmd][0].toString(); TD_OP_MODE opMode = static_cast(_transitionEventsFromStandby[_treatmentStatus.userCmd][1].toUInt()); qDebug() << "Submit event" << _treatmentStatus.stateTransitionEvent << opMode; handleTDOpModeTransitionBroadcastData(opMode, 0, BC_IMMEDIATELY); _treatmentStatus.userCmd = CMD_NONE; - status = STATE_ON_EXIT; + status = STATE_ON_EXIT; } } // Keep broadcasting the standby state in case the UI and dry-demo got out of sync @@ -246,6 +257,7 @@ handleInitiateTreatmentRequestMessage(status); handleSetupTubingSetConnectionsRequestMessage(); + handleVitalsDataRquest(); if (! _treatmentRcvdMessages[ID_UI_ADJUST_DISPOSABLES_CONFIRM_RQST].isNull()){ _treatmentRcvdMessages[ID_UI_ADJUST_DISPOSABLES_CONFIRM_RQST].clear(); @@ -317,6 +329,8 @@ handleWidenPressureLimitsMessage(); // Pressure methods handleFluidBolusRequestMessage(); + // Vitals method + handleVitalsDataRquest(); if (_treatmentSubStates.fluidBolusState == FLUID_BOLUS_SALINE_IN_PROGRESS_STATE){ handleFluidBolusFluidDelivery(currBloodFlowMLPM); handleFluidBolusBroadcastData(BC_DELAYED); @@ -422,6 +436,7 @@ // HDF methods handleTreatmentHDF(); handleHemodialfiltrationBroadcastData(BC_DELAYED); + handleHDFAdjustmentRequestMessage(); // Treatment complete condition if ((_treatmentStatus.treatmentElapsedTimeMS / MILLISECONDS_PER_SECOND) > (_treatmentParams.treatmentDurationMin * SECONDS_PER_MINUTE)) { @@ -479,6 +494,12 @@ handleTDPressureBroadcastData(BC_DELAYED); handleDeterminePressureLimits(); handleWidenPressureLimitsMessage(); + // Dialysate is in bypass + handleDDGenDialysateModeBroadcastData(BC_DELAYED); + // UF is in pause + handleUltrafiltrationBroadcastData(BC_DELAYED); + // Vitals methods + handleVitalsDataRquest(); }; auto onExit = [=](){ @@ -526,6 +547,8 @@ handleTDPressureBroadcastData(BC_DELAYED); handleDeterminePressureLimits(); handleWidenPressureLimitsMessage(); + // Vitals + handleVitalsDataRquest(); handleUIConfirmMessage(GENERIC_CONFIRM_ID_TREATMENT_END, status); if (_treatmentStatus.hasRecircBeenRequested) { _treatmentStatus.stateTransitionEvent = "T_RB_2_RC"; @@ -576,6 +599,8 @@ handleUIConfirmMessage(GENERIC_CONFIRM_ID_TREATMENT_END, status); handleRecircTimeout(); handleAlarmUserAction(status); + // Vitals + handleVitalsDataRquest(); if (_treatmentStatus.hasResumeTxBeenRequested) { _treatmentStatus.stateTransitionEvent = "T_RC_2_BP"; status = STATE_ON_EXIT; @@ -614,6 +639,8 @@ handleBackToStandbyEvent(status); handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_DELAYED); handleTreatmentStatesBroadcastData(BC_DELAYED); + // Vitals + handleVitalsDataRquest(); }; auto onExit = [=](){ @@ -666,7 +693,7 @@ resp.append(0); GetValue(payload.toByteArray(), index, u32Var); - _treatmentParams.hdfDilution = u32Var.value; + _treatmentParams.hdfDilution = u32Var.value; resp.append(0); GetValue(payload.toByteArray(), index, u32Var); @@ -726,7 +753,7 @@ resp.append(0); GetValue(payload.toByteArray(), index, f32Var); - _treatmentParams.substitutionFluidVolumeL = f32Var.value; + _treatmentParams.hdfSubstitutionFluidVolumeL = f32Var.value; resp.append(0); GetValue(payload.toByteArray(), index, f32Var); Index: sources/drydemo/StateController.h =================================================================== diff -u -rbf271a558491a83b39eb30748784f1b744736dd2 -r4d0fc455e6307639e72db490721c7768a487c014 --- sources/drydemo/StateController.h (.../StateController.h) (revision bf271a558491a83b39eb30748784f1b744736dd2) +++ sources/drydemo/StateController.h (.../StateController.h) (revision 4d0fc455e6307639e72db490721c7768a487c014) @@ -86,9 +86,15 @@ quint32 bicartDepresInProgress; }; - struct HDF_vars { - float hdfManualRateMLPM; - float hdfCurrentVolumeML; + struct Treatment_HDF_vars { + float hdfManualRateMLPM; + float hdfCurrentVolumeML; + HDF_Control_States hdfControlState; + float hdfMaxFiltrationFraction; + float hdfCurrentRateMLPM; + quint32 hdfControlTimeCtr; + bool hdfHasMaxVolumeBeenReached; + bool hdfIsRequested; }; struct Pressure_Vars { @@ -154,7 +160,7 @@ quint32 rinsebackVolumeML; quint32 hepatitisBStatus; quint32 acidConcentrate; - float substitutionFluidVolumeL; + float hdfSubstitutionFluidVolumeL; float heparinBolusVolumeML; float heparinDeliveryRateMLHR; float dialysateTemperatureC; @@ -175,6 +181,7 @@ Treatment_Params _treatmentParams; Treatment_Status_Vars _treatmentStatus; Treatment_Sub_State_Vars _treatmentSubStates; + Treatment_HDF_vars _treatmentHDFVars; bool _isBroadcastListReady; // TODO use a mutex? bool _isSendListReady; // Todo use a mutex? quint32 _elapsedTimeCtr; @@ -259,8 +266,11 @@ void handleVitalsDataRquest(); // HDF Treatment methods + void initializeTreatmentHDFVariables(); + float handleCheckHDFRate(const float proposedRateMLPM); void handleTreatmentHDF(); void handleHemodialfiltrationBroadcastData(const Broadcast_Type BCType); + void handleHDFAdjustmentRequestMessage(); // Treatment pause methods void handleDryBicartBroadcastData(const Broadcast_Type BCType); Index: sources/drydemo/StateControllerHDFTreatment.cpp =================================================================== diff -u -rbf271a558491a83b39eb30748784f1b744736dd2 -r4d0fc455e6307639e72db490721c7768a487c014 --- sources/drydemo/StateControllerHDFTreatment.cpp (.../StateControllerHDFTreatment.cpp) (revision bf271a558491a83b39eb30748784f1b744736dd2) +++ sources/drydemo/StateControllerHDFTreatment.cpp (.../StateControllerHDFTreatment.cpp) (revision 4d0fc455e6307639e72db490721c7768a487c014) @@ -3,32 +3,114 @@ #include "ApplicationController.h" #include "types.h" +void StateController::initializeTreatmentHDFVariables() +{ + _treatmentHDFVars.hdfCurrentVolumeML = 0.0; + _treatmentHDFVars.hdfManualRateMLPM = 0.0; // TODO assuming manual rate is 0 for now + _treatmentHDFVars.hdfControlState = TD_HDF_PAUSED; + _treatmentHDFVars.hdfMaxFiltrationFraction = HDF_MAX_FILTRATION_FRACTION; + _treatmentHDFVars.hdfCurrentRateMLPM = 0.5; + _treatmentHDFVars.hdfControlTimeCtr = 0; + _treatmentHDFVars.hdfHasMaxVolumeBeenReached = false; + _treatmentHDFVars.hdfIsRequested = true; +} + +float StateController::handleCheckHDFRate(const float proposedRateMLPM) +{ + float hdfMaxRateMLPM = (_treatmentHDFVars.hdfMaxFiltrationFraction * _treatmentParams.bloodFlowRateMLPM) - _treatmentStatus.presUFRateMLPM; + + if (hdfMaxRateMLPM > HDF_MAX_RATE) { hdfMaxRateMLPM = HDF_MAX_RATE; } + + float newRateMLPM = (_treatmentHDFVars.hdfCurrentRateMLPM > proposedRateMLPM ? hdfMaxRateMLPM : _treatmentHDFVars.hdfCurrentRateMLPM); + qDebug() << "HDF rate" << hdfMaxRateMLPM << newRateMLPM; + + return newRateMLPM; +} + void StateController::handleTreatmentHDF() { - if (_treatmentParams.treatmentModality == TREATMENT_MODALITY_HDF_ONLINE_FLUID) { - // _treatmentSubStates.txState = TREATMENT_HDF_STATE; - } + if (_treatmentParams.treatmentModality != TREATMENT_MODALITY_HDF_ONLINE_FLUID) { return; } + // _treatmentSubStates.txState = TREATMENT_HDF_STATE; TODo fix when UI fixed it + switch (_treatmentHDFVars.hdfControlState) { + case TD_HDF_PAUSED: + if (!_treatmentHDFVars.hdfHasMaxVolumeBeenReached && _treatmentHDFVars.hdfIsRequested) { + _treatmentHDFVars.hdfControlState = TD_HDF_RUNNING; + _treatmentHDFVars.hdfCurrentRateMLPM = handleCheckHDFRate(_treatmentHDFVars.hdfCurrentRateMLPM); + } + break; + + case TD_HDF_RUNNING: + if (!_treatmentHDFVars.hdfIsRequested) { + _treatmentHDFVars.hdfCurrentRateMLPM = 0.0; + _treatmentHDFVars.hdfControlState = TD_HDF_PAUSED; + } + else { + if (++_treatmentHDFVars.hdfControlTimeCtr % static_cast(HDF_CONTROL_INT_CTR) != 0 ) { return; } + if (_treatmentHDFVars.hdfManualRateMLPM <= NEARLY_ZERO) { + _treatmentHDFVars.hdfCurrentRateMLPM = handleCheckHDFRate(_treatmentHDFVars.hdfCurrentRateMLPM); + } + + _treatmentHDFVars.hdfCurrentVolumeML += (static_cast(HDF_CONTROL_INT_CTR) / static_cast(SECONDS_PER_MINUTE)) * _treatmentHDFVars.hdfCurrentRateMLPM; + + qDebug() << "ALL" << _treatmentHDFVars.hdfControlState << _treatmentHDFVars.hdfCurrentVolumeML << + _treatmentHDFVars.hdfHasMaxVolumeBeenReached << _treatmentHDFVars.hdfIsRequested << HDF_CONTROL_INT_CTR; + + if (_treatmentHDFVars.hdfCurrentVolumeML > _treatmentParams.hdfSubstitutionFluidVolumeL * MILLILITERS_PER_LITER) { + qDebug() << "volume HDF" << _treatmentHDFVars.hdfCurrentVolumeML; + _treatmentHDFVars.hdfHasMaxVolumeBeenReached = true; + _treatmentHDFVars.hdfCurrentRateMLPM = 0.0; + _treatmentHDFVars.hdfControlState = TD_HDF_PAUSED; + } + } + break; + + default: + // Do nothing + break; + } } void StateController::handleHemodialfiltrationBroadcastData(const Broadcast_Type BCType) { static quint32 broadcastCounter = 50; if ((++broadcastCounter % NUM_OF_COUNTS_TIMER_BC_EMIT != 0) && (BCType == BC_DELAYED)) { return; } + quint32 autoSubState = (_treatmentHDFVars.hdfManualRateMLPM > 0.0 ? 0 : 1); + QVariantList msg; msg.append(static_cast(ID_TD_HEMODIAFILTRATION_DATA)); msg.append(Can_Id::eChlid_TD_Sync); - msg.append(0); - msg.append(1); - msg.append(1.2); + msg.append(_treatmentHDFVars.hdfControlState); + msg.append(autoSubState); + msg.append(_treatmentHDFVars.hdfManualRateMLPM); msg.append(5.2); + msg.append(_treatmentHDFVars.hdfCurrentRateMLPM); msg.append(5.2); - msg.append(5.2); - msg.append(5.2); - msg.append(5.2); - msg.append(0); + msg.append(_treatmentParams.hdfSubstitutionFluidVolumeL); + msg.append(_treatmentHDFVars.hdfCurrentVolumeML / MILLILITERS_PER_LITER); + msg.append(static_cast(_treatmentHDFVars.hdfIsRequested)); + //qDebug() << "B" << msg; _isBroadcastListReady = false; _broadcastMessages.append(msg); _isBroadcastListReady = true; } + +void StateController::handleHDFAdjustmentRequestMessage() +{ + if (_treatmentRcvdMessages[ID_UI_HDF_ADJUSTMENT_RQST].isNull()) { return; } + QVariantList reason; + quint32 acceptReject = REJECT_VALUE; + + _treatmentParams.hdfDilution = extractU32DataFromReceivedMessage(ID_UI_HDF_ADJUSTMENT_RQST, 0); + _treatmentParams.hdfSubstitutionFluidVolumeL = extractF32DataFromReceivedMessage(ID_UI_HDF_ADJUSTMENT_RQST, 4); + + acceptReject = ACCEPT_VALUE; + reason.append(REQUEST_REJECT_REASON_NONE); + reason.append(REQUEST_REJECT_REASON_NONE); + + _treatmentRcvdMessages[ID_UI_HDF_ADJUSTMENT_RQST].clear(); + + // TODo check the reject reasons + handleUIResponseMessage(ID_TD_HDF_ADJUSTMENT_RESP, acceptReject, reason); +} Index: sources/drydemo/StateControllerStandby.cpp =================================================================== diff -u -rbf271a558491a83b39eb30748784f1b744736dd2 -r4d0fc455e6307639e72db490721c7768a487c014 --- sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision bf271a558491a83b39eb30748784f1b744736dd2) +++ sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision 4d0fc455e6307639e72db490721c7768a487c014) @@ -164,7 +164,7 @@ switch (userAction) { case ALARM_USER_ACTION_RESUME: // If we are in treatment pause return back to treatment, otherwise just clear the alarm - if (isFromTxPause) { + if (isFromTxPause && _treatmentStatus.bicartAction == DRY_BICART_ACTION_DONE) { _treatmentSubStates.dialysisSubState = DIALYSIS_UF_STATE; _treatmentSubStates.txState = TREAT_DIALYSIS_STATE; _treatmentStatus.stateTransitionEvent = "T_TP_2_Tx"; @@ -247,8 +247,7 @@ break; case SEQ_ALARM_DRY_BICARB_CARTRIDGE: - //if (_treatmentStatus.activeTopAlarm != ALARM_ID_NO_ALARM) { triggerAnAlarm(ALARM_ID_NO_ALARM); return; } - triggerAnAlarm(ALARM_ID_DD_BICARBONATE_CARTRIDGE_LOW_LEVEL); + if (_treatmentStatus.activeTopAlarm != ALARM_ID_DD_BICARBONATE_CARTRIDGE_LOW_LEVEL) { triggerAnAlarm(ALARM_ID_DD_BICARBONATE_CARTRIDGE_LOW_LEVEL); return; } // Set the bicart screen to start draining automatically _treatmentStatus.bicartDrainInProgress = DRY_BICART_DRIN_IN_PROGRESS; _treatmentStatus.bicartProgress = 0; Index: sources/drydemo/StateControllerTreatment.cpp =================================================================== diff -u -rbf271a558491a83b39eb30748784f1b744736dd2 -r4d0fc455e6307639e72db490721c7768a487c014 --- sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision bf271a558491a83b39eb30748784f1b744736dd2) +++ sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision 4d0fc455e6307639e72db490721c7768a487c014) @@ -106,7 +106,7 @@ _treatmentStatus.ufVolDeliveredL = UFVolLMS * _treatmentStatus.treatmentElapsedTimeMS; - qDebug() << "UF Init" << presUFRateLHR << UFVolLMS << _treatmentStatus.ufVolDeliveredL; + //qDebug() << "UF Init" << presUFRateLHR << UFVolLMS << _treatmentStatus.ufVolDeliveredL; } void StateController::handleFluidBolusRequestMessage() @@ -120,7 +120,7 @@ if (fluidBolusCmd == FLUID_BOLUS_START_CMD){ _treatmentSubStates.fluidBolusState = FLUID_BOLUS_SALINE_IN_PROGRESS_STATE; - _treatmentSubStates.dialysisSubState = DIALYSIS_UF_FLUID_BOLUS_STATE; + _treatmentSubStates.dialysisSubState = DIALYSIS_UF_PAUSED_STATE; //DIALYSIS_UF_FLUID_BOLUS_STATE; } else { _treatmentStatus.totalFluidBolusDeliveredML += _treatmentStatus.accumFluidBolusDeliveredML; } @@ -200,6 +200,7 @@ resp.append(0); GetValue(payload.toByteArray(), index, u32Var); + if (_treatmentParams.treatmentModality != u32Var.value) { triggerAnAlarm(ALARM_ID_TD_TREATMENT_MODALITY_CHANGE); } _treatmentParams.treatmentModality = u32Var.value; resp.append(0); Index: sources/storage/StorageGlobals.cpp =================================================================== diff -u -rbec9c9856c333399aa5abaf18d2799f6fbc95da3 -r4d0fc455e6307639e72db490721c7768a487c014 --- sources/storage/StorageGlobals.cpp (.../StorageGlobals.cpp) (revision bec9c9856c333399aa5abaf18d2799f6fbc95da3) +++ sources/storage/StorageGlobals.cpp (.../StorageGlobals.cpp) (revision 4d0fc455e6307639e72db490721c7768a487c014) @@ -106,7 +106,7 @@ const char *Settings_Path_Name = "/mnt/data/configurations/"; #else const char *Settings_Path_Init = "/home/root/.config/"; // this is the manufacturing or update setup and the user is root. - const char *Settings_Path_Name = "/var/configurations/"; + const char *Settings_Path_Name = "/opt/leahi/configurations/"; #endif #else // should be in the project application folder. [is tracking by git] @@ -137,7 +137,7 @@ #ifdef LEAHI_DIGI_BOARD const char *CloudSync_Base_Path_Name = gUseRootHome ? "/home/root/.cloudSync/" : "/mnt/data/configurations/CloudSync/"; #else - const char *CloudSync_Base_Path_Name = gUseRootHome ? "/home/root/.cloudSync/" : "/var/configurations/CloudSync/"; + const char *CloudSync_Base_Path_Name = gUseRootHome ? "/home/root/.cloudSync/" : "/opt/leahi/configurations/CloudSync/"; #endif #else // on VM it is a temporary file which is not being tracked @@ -222,7 +222,7 @@ #ifdef LEAHI_DIGI_BOARD const char *CloudSyncPath = "/mnt/data/configurations/CloudSync/credentials/"; #else - const char *CloudSyncPath = "/var/configurations/CloudSync/credentials/"; + const char *CloudSyncPath = "/opt/leahi/configurations/CloudSync/credentials/"; #endif // USB unmount/ mount const char *USB_Unmount = "usb_unmount.sh";