Index: dialin/common/msg_ids.py =================================================================== diff -u -rdc34d36bd96f68c2ec1976cd505f97d5d3ff2309 -r1622d0556ec346a146bcee29d6f9d278d1e97bf0 --- dialin/common/msg_ids.py (.../msg_ids.py) (revision dc34d36bd96f68c2ec1976cd505f97d5d3ff2309) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision 1622d0556ec346a146bcee29d6f9d278d1e97bf0) @@ -329,6 +329,7 @@ MSG_ID_LOAD_CELL_OVERRIDE = 0xA005 MSG_ID_PRESSURE_OVERRIDE = 0xA006 MSG_ID_PRESSURE_SEND_INTERVAL_OVERRIDE = 0xA007 + MSG_ID_DG_HD_COMMUNICATION_STATUS_OVERRIDE = 0xA008 MSG_ID_RO_MEASURED_FLOW_OVERRIDE = 0xA009 MSG_ID_RO_PUMP_SEND_INTERVAL_OVERRIDE = 0xA00A MSG_ID_DRAIN_PUMP_SET_RPM = 0xA00B @@ -398,8 +399,8 @@ MSG_ID_DG_SEND_SW_CONFIG_RECORD = 0xA04C MSG_ID_DG_FANS_DUTY_CYCLE_OVERRIDE = 0xA04D MSG_ID_DG_SET_FANS_RPM_ALARM_START_TIME_OFFSET = 0xA04E - MSG_ID_DG_HD_COMMUNICATION_STATUS_OVERRIDE = 0xA04F + MSG_ID_HD_DEBUG_EVENT = 0xFFF1 MSG_ID_DG_DEBUG_EVENT = 0xFFF2 MSG_ID_ACK_MESSAGE_THAT_REQUIRES_ACK = 0xFFFF Index: dialin/ui/hd_simulator.py =================================================================== diff -u -rd5c7e238a368f025fc9942652d66285125d201d3 -r1622d0556ec346a146bcee29d6f9d278d1e97bf0 --- dialin/ui/hd_simulator.py (.../hd_simulator.py) (revision d5c7e238a368f025fc9942652d66285125d201d3) +++ dialin/ui/hd_simulator.py (.../hd_simulator.py) (revision 1622d0556ec346a146bcee29d6f9d278d1e97bf0) @@ -1018,19 +1018,23 @@ |:--: |:--: |:--: || | \ref Data::mHeparinState | \ref Data::mRinsebackState | \ref Data::mRecirculateState || |||| - | #7:(U32) | #8:(U32) | #9:(U32) || - |:--: |:--: |:--: || - | \ref Data::vBloodPrimeState | \ref Data::mTreatmentEndState | \ref Data::vTreammentStopState || + | #7:(U32) | #8:(U32) | #9:(U32) | + |:--: |:--: |:--: | + | \ref Data::vBloodPrimeState | \ref Data::mTreatmentEndState | \ref Data::mTreammentStopState | + | #9:(U32) || + |:--: || + | \ref Data::mDialysisState || @param sub_mode: (int) Sub-Mode @param uf_state: (int) UF State @param saline_state: (int) Saline Bolus State - @param heparin_state: (int) Heparin State + @param heparin_state: (int) Saline Bolus State @param rinseback_state: (int) Rinseback State @param recirculate_state: (int) Recirculate State @param blood_prime_state: (int) Blood Prime State @param treatment_end_state: (int) Treatment End State @param treatment_stop_state: (int) Treatment Stop State + @param dialysis_state: (int) Dialysis State @return: none """ @@ -1109,12 +1113,12 @@ self.can_interface.send(message, 0) - def cmd_set_saline_bolus_response(self, accepted: int, reason: int, target: int, state: int) -> None: + def cmd_set_saline_bolus_response(self, accepted: int, reason: int, target: int) -> None: """ the Saline Bolus Response message sender method - | MSG | CAN ID | M.Box | Type | Ack | Src | Dest | Description | #1:(U32) | #2:(U32) | #3:(U32) | #3:(U32) | - |:---:|:------:|:-----:|:----:|:---:|:---:|:----:|:---------------------:|:--------------------:|:-------------------:|:-------------------:|:-------------------:| - | 20 | 0x020 | 6 | Rsp | Y | HD | UI | Saline Bolus Response | \ref Data::mAccepted | \ref Data::mReason | \ref Data::mTarget | \ref Data::mState | + | MSG | CAN ID | M.Box | Type | Ack | Src | Dest | Description | #1:(U32) | #2:(U32) | #3:(U32) | + |:---:|:------:|:-----:|:----:|:---:|:---:|:----:|:---------------------:|:--------------------:|:-------------------:|:-------------------:| + | 20 | 0x020 | 6 | Rsp | Y | HD | UI | Saline Bolus Response | \ref Data::mAccepted | \ref Data::mReason | \ref Data::mTarget | @param accepted: (int) boolean accept/reject response @param reason: (int) rejection reason @@ -1181,16 +1185,15 @@ self.can_interface.send(message, 0) - def cmd_set_heparin_pause_resume_response(self, accepted: int, reason: int, state: int) -> None: + def cmd_set_heparin_pause_resume_response(self, accepted: int, reason: int) -> None: """ the Heparin Response message setter/sender 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 | + | MSG | CAN ID | M.Box | Type | Ack | Src | Dest | Description | #1:(U32) | #2:(U32) | + |:----:|:------:|:-----:|:----:|:---:|:---:|:----:|:----------------:|:--------------------:|:-------------------:| + |0x4C00| 0x020 | 6 | Rsp | Y | HD | UI | Heparin Response | \ref Data::mAccepted | \ref Data::mReason | @param accepted: (int) boolean accept/reject response @param reason: (int) rejection reason - @param state: (int) Heparin current State @return: none """ payload = integer_to_bytearray(accepted) @@ -1255,20 +1258,20 @@ self.can_interface.send(message, 0) def cmd_send_treatment_rinseback_data(self, target_vol: float, current_vol: float, flow_rate: int, timeout: int, - timeout_countdown: int, is_completed: int) -> None: + timeout_countdown: int, is_completed: bool) -> None: """ the rinseback state change Response message method - | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | #1:(F32) | #2:(F32) | #3:(U32) | #4:(U32) | #5:(U32) | #5:(U32) | - |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: |:--: |:--: |:--: |:--: |:--: |:--: | + | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | #1:(F32) | #2:(F32) | #3:(U32) | #4:(U32) | #5:(U32) | #5:(U32) | + |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: |:--: |:--: |:--: |:--: |:--: |:--: | |0x5600| 0x020 | 6 | 1Hz | N | HD | UI | Rinseback progress data | \ref Data::mTarget | \ref Data::mCurrent | \ref Data::mRate | \ref Data::mTimeoutTotal | \ref Data::mTimeoutCountDown | \ref Data::is_completed | - :param target_vol : (float) the target volume in mL - :param current_vol : (float) the current volume in mL - :param flow_rate : (uint ) the current flow rate in mL/min - :param timeout : (uint ) Total Timeout - :param timeout_countdown : (uint ) Current Timeout count down - :param is_completed : (bool ) Is Rinseback completed. - :return: None + @param target_vol : (float) the target volume in mL + @param current_vol : (float) the current volume in mL + @param flow_rate : (uint ) the current flow rate in mL/min + @param timeout : (uint ) Total Timeout + @param timeout_countdown : (uint ) Current Timeout count down + @param is_completed : (bool ) Is Rinseback completed. + @return: None """ payload = float_to_bytearray(target_vol) @@ -1466,14 +1469,15 @@ fpga_id: int, fpga_major: int, fpga_minor: int, fpga_lab: int, compatibility_rev: int) -> None: """ the hd version response message method - @param major: integer - Major version number - @param minor: integer - Minor version number - @param micro: integer - Micro version number - @param build: integer - Build version number - @param fpga_id: integer - FPGA id version number - @param fpga_major: integer - FPGA Major version number - @param fpga_minor: integer - FPGA Minor version number - @param fpga_lab: integer - FPGA Lab version number + @param major: (integer) - Major version number + @param minor: (integer) - Minor version number + @param micro: (integer) - Micro version number + @param build: (integer) - Build version number + @param fpga_id: (integer) - FPGA id version number + @param fpga_major: (integer) - FPGA Major version number + @param fpga_minor: (integer) - FPGA Minor version number + @param fpga_lab: (integer) - FPGA Lab version number + @param compatibility_rev: (integer) - Compatibility revision @return: None """ @@ -2071,3 +2075,74 @@ "Build: {3} " "Compat: {4} " .format(ui_major, ui_minor, ui_micro, ui_build, ui_compatibility)) + + def cmd_send_hd_blood_leak_data(self, blood_leak_status: int, blood_leak_state: int, + blood_leak_zero_status_counter: int, blood_leak_counter: int, + blood_leak_zeroed_status: int, blood_leak_detect_set_point: int, + blood_leak_detect_level: int, blood_leak_st_count: int, + blood_leak_led_intensity: int, blood_leak_register_counter: int) -> None: + """ + A simulated HD broadcast message of blood leak data. + @param blood_leak_status: (int) Blood leak status + @param blood_leak_state: (int) Blood leak state + @param blood_leak_zero_status_counter: (int) Blood leak zero status counter + @param blood_leak_counter: (int) Blood leak counter + @param blood_leak_zeroed_status: (int) Blood leak zeroed status + @param blood_leak_detect_set_point: (int) Blood leak detect set point + @param blood_leak_detect_level: (int) Blood leak detect level + @param blood_leak_st_count: (int) Blood leak st count + @param blood_leak_led_intensity: (int) Blood leak LED intensity + @param blood_leak_register_counter: (int) Blood leak register counter + @return: None + """ + + payload = unsigned_to_bytearray(blood_leak_status) + payload += unsigned_to_bytearray(blood_leak_state) + payload += unsigned_to_bytearray(blood_leak_zero_status_counter) + payload += unsigned_to_bytearray(blood_leak_counter) + payload += unsigned_to_bytearray(blood_leak_zeroed_status) + payload += unsigned_to_bytearray(blood_leak_detect_set_point) + payload += unsigned_to_bytearray(blood_leak_detect_level) + payload += unsigned_to_bytearray(blood_leak_st_count) + payload += unsigned_to_bytearray(blood_leak_led_intensity) + payload += unsigned_to_bytearray(blood_leak_register_counter) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_sync_broadcast_ch_id, + message_id=MsgIds.MSG_ID_HD_BLOOD_LEAK_DATA.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_hd_air_trap_data(self, lower_level: int, upper_level: int) -> None: + """ + A simulated HD broadcast message of air trap data. + @param lower_level: (int) Air trap lower level + @param upper_level: (int) Air trap upper level + @return: None + """ + + payload = unsigned_to_bytearray(lower_level) + payload += unsigned_to_bytearray(upper_level) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_sync_broadcast_ch_id, + message_id=MsgIds.MSG_ID_HD_AIR_TRAP_DATA.value, + payload=payload) + + self.can_interface.send(message, 0) + + def cmd_send_hd_air_bubble_data(self, venous_air_bubble_status: int, venous_air_bubble_state: int) -> None: + """ + A simulated HD broadcast message of air bubble data. + @param venous_air_bubble_status: (int) Venous air bubble status + @param venous_air_bubble_state: (int) Venous air bubble state + @return: None + """ + + payload = unsigned_to_bytearray(venous_air_bubble_status) + payload += unsigned_to_bytearray(venous_air_bubble_state) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_sync_broadcast_ch_id, + message_id=MsgIds.MSG_ID_HD_BUBBLES_DATA.value, + payload=payload) + + self.can_interface.send(message, 0)