Index: dialin/squish/denaliMessages.py =================================================================== diff -u -rf33ee24b00b5a33c730ed539c072199a56c1c78f -r1b2bf9dd7c086c4422ae7284f0f631575cbf2958 --- dialin/squish/denaliMessages.py (.../denaliMessages.py) (revision f33ee24b00b5a33c730ed539c072199a56c1c78f) +++ dialin/squish/denaliMessages.py (.../denaliMessages.py) (revision 1b2bf9dd7c086c4422ae7284f0f631575cbf2958) @@ -38,10 +38,18 @@ # Sub Mode # UI only cares about the actual state and _NOT could be any other state - TREATMENT_DIALYSIS_STATE_NOT = 0 - TREATMENT_DIALYSIS_STATE = 1 + TREATMENT_DIALYSIS_STATE_NOT = 0 + TREATMENT_DIALYSIS_STATE = 1 + # Heparin states + HEPARIN_STATE_OFF = 0 # No heparin delivery is in progress + HEPARIN_STATE_PAUSED = 1 # Heparin delivery paused + HEPARIN_STATE_INITIAL_BOLUS = 2 # Initial heparin bolus delivery in progress + HEPARIN_STATE_DISPENSING = 3 # Gradual heparin dispensing in progress + HEPARIN_STATE_COMPLETED = 4 # Heparin delivery stopped due to the set stop time before treatment end + HEPARIN_STATE_EMPTY = 5 # Heparin Syringe empty + class EResponse: Rejected = 0 Accepted = 1 @@ -1081,33 +1089,37 @@ waitForMessageToBeSent() -def buildTreatmentStatesData(vSubMode, vUFState, vSalineState): +def buildTreatmentStatesData(vSubMode, vUFState, vSalineState, vHeparinState): """ the Treatment States Data message builder method - | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | #1:(U32) | #2:(U32) | #3:(U32) | - |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: |:--: |:--: |:--: | - |0x0F00| 0x040 | 7 | 1 Hz | N | HD | All | Treatment States Data | \ref Data::mSubMode | \ref Data::mUFState | \ref Data::mSalineState | + | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | #1:(U32) | #2:(U32) | #3:(U32) | #4:(U32) | + |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: |:--: |:--: |:--: |:--: | + |0x0F00| 0x040 | 7 | 1 Hz | N | HD | All | Treatment States Data | \ref Data::mSubMode | \ref Data::mUFState | \ref Data::mSalineState | \ref Data::mHeparinState | :param vSubMode: (int) Sub-Mode :param vUFState: (int) UF State :param vSalineState: (int) Saline Bolus State + :param vHeparinState: (int) Heparin State :return: (str) built message frame(s) """ - msg = messageBuilder.buildMessage( 0x000F, 4+4+4, False, - utils.toI32(vSubMode ), - utils.toI32(vUFState ), - utils.toI32(vSalineState)) + msg = messageBuilder.buildMessage( 0x000F, 4+4+4+4, False, + utils.toI32(vSubMode ), + utils.toI32(vUFState ), + utils.toI32(vSalineState ), + utils.toI32(vHeparinState) + ) return messageBuilder.toFrames(msg) -def setTreatmentStatesData(vSubMode, vUFState, vSalineState): +def setTreatmentStatesData(vSubMode, vUFState, vSalineState, vHeparinState): """ the Treatment States Data message setter/sender method :param vSubMode: (int) Sub-Mode :param vUFState: (int) UF State :param vSalineState: (int) Saline Bolus State + :param vHeparinState: (int) Heparin State :return: none """ - frames = buildTreatmentStatesData(vSubMode, vUFState, vSalineState) + frames = buildTreatmentStatesData(vSubMode, vUFState, vSalineState, vHeparinState) frames = messageBuilder.toCandumpFormat(frames) for frame in frames: subprocess.call(['cansend', 'can0', '040#{}'.format(frame)]) @@ -1118,7 +1130,12 @@ starting the treatment for user convenience since Tx is not by default running :return: none """ - setTreatmentStatesData(txStates.TREATMENT_DIALYSIS_STATE, txStates.UF_OFF_STATE, txStates.SALINE_BOLUS_STATE_IDLE) + setTreatmentStatesData( + txStates.TREATMENT_DIALYSIS_STATE, + txStates.UF_OFF_STATE, + txStates.SALINE_BOLUS_STATE_IDLE, + txStates.HEPARIN_STATE_OFF + ) def buildHDOperationModeData(vOpMode): @@ -1217,6 +1234,67 @@ waitForMessageToBeSent() +def buildTreatmentHeparinData(vCumulative): + """ + the Treatment Heparin Data message builder method + | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | #1:(F32) | + |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: |:--: | + |0x4D00| 0x040 | 7 | 1 Hz | N | HD | All | Treatment Heparin Data | \ref Data::mCumulative | + :param vCumulative: (float) Heparin Cumulative Volume + :return: (str) built message frame(s) + """ + msg = messageBuilder.buildMessage( 0x004D, 4, False, + utils.toF32(vCumulative) + ) + return messageBuilder.toFrames(msg) + + +def setTreatmentHeparinData(vCumulative): + """ + the Treatment Heparin Data message setter/sender method + :param vCumulative: (float) Heparin Cumulative Volume + :return: none + """ + frames = buildTreatmentHeparinData(vCumulative) + frames = messageBuilder.toCandumpFormat(frames) + for frame in frames: + subprocess.call(['cansend', 'can0', '040#{}'.format(frame)]) + waitForMessageToBeSent() + + +def buildHeparinResponse(vAccepted, vReason, vState): + """ + the Heparin Response message builder method + | MSG | CAN ID | M.Box | Type | Ack | Src | Dest | Description | #1:(U32) | #2:(U32) | #3:(U32) | + |:----:|:------:|:-----:|:----:|:---:|:---:|:----:|:----------------:|:--------------------:|:-------------------:|:-------------------:| + |0x4C00| 0x020 | 6 | Rsp | Y | HD | UI | Heparin Response | \ref Data::mAccepted | \ref Data::mReason | \ref Data::mState | + :param vAccepted: (int) boolean accept/reject response + :param vReason: (int) rejection reason + :param vState: (int) Heparin current State + :return: (str) built message frame(s) + """ + msg = messageBuilder.buildMessage( 0x004C, 4+4+4, True, + utils.toI32(vAccepted), + utils.toI32(vReason ), + utils.toI32(vState )) + return messageBuilder.toFrames(msg) + + +def setHeparinResponse(vAccepted, vReason, vState): + """ + the Heparin Response message setter/sender method + :param vAccepted: (int) boolean accept/reject response + :param vReason: (int) rejection reason + :param vState: (int) Heparin current State + :return: none + """ + frames = buildHeparinBolusResponse(vAccepted, vReason, vState) + frames = messageBuilder.toCandumpFormat(frames) + for frame in frames: + subprocess.call(['cansend', 'can0', '020#{}'.format(frame)]) + waitForMessageToBeSent() + + def buildCanBUSFaultCount(vCount): """ the CANBus fault count message builder method