Index: dialin/common/alarm_defs.py =================================================================== diff -u -r7f4c7170042e9bad8cdecb3af57d2d5796347a5c -rbb34e3e1abada3b34fcd7696722fcc4f8ca16f94 --- dialin/common/alarm_defs.py (.../alarm_defs.py) (revision 7f4c7170042e9bad8cdecb3af57d2d5796347a5c) +++ dialin/common/alarm_defs.py (.../alarm_defs.py) (revision bb34e3e1abada3b34fcd7696722fcc4f8ca16f94) @@ -326,7 +326,7 @@ ALARM_ID_DG_DRAIN_PUMP_DIRECTION_FPGA_FAULT = 303 ALARM_ID_HD_INVALID_USAGE_RECORD_CRC = 304 ALARM_ID_HD_CPU_RAM_ERROR = 305 - ALARM_ID_AVAILABLE_50 = 306 + ALARM_ID_DG_TURN_OFF_INLET_WATER_VALVES = 306 ALARM_ID_HD_AC_POWER_LOST_IN_TREATMENT = 307 ALARM_ID_DG_CPI_COND_SENSOR_INVALID_CHAR = 308 ALARM_ID_DG_CPO_COND_SENSOR_INVALID_CHAR = 309 Index: dialin/common/dg_defs.py =================================================================== diff -u -r1f6af0afb3388e3a491e1446f336fff9997a3dba -rbb34e3e1abada3b34fcd7696722fcc4f8ca16f94 --- dialin/common/dg_defs.py (.../dg_defs.py) (revision 1f6af0afb3388e3a491e1446f336fff9997a3dba) +++ dialin/common/dg_defs.py (.../dg_defs.py) (revision bb34e3e1abada3b34fcd7696722fcc4f8ca16f94) @@ -295,27 +295,28 @@ @unique class DGEventList(DialinEnum): - DG_EVENT_STARTUP = 0 # DG startup event - DG_EVENT_OP_MODE_CHANGE = 1 # DG Op mode change event - DG_EVENT_SUB_MODE_CHANGE = 2 # DG Op sub-mode change event - DG_EVENT_CONCENTRATE_CAP_SWITCH_CHANGE = 3 # DG concentrate cap switch change - DG_EVENT_DIALYSATE_CAP_SWITCH_CHANGE = 4 # DG dialysate cap switch change - DG_EVENT_CPU_RAM_ERROR_STATUS = 5 # DG processor RAM error - DG_EVENT_CAL_RECORD_UPDATE = 6 # DG new calibration record updated - DG_EVENT_SYSTEM_RECORD_UPDATE = 7 # DG new system record has been updated - DG_EVENT_SERVICE_UPDATE = 8 # DG new service record has been updated - DG_EVENT_USAGE_INFO_UPDATE = 9 # DG new usage information has been updated - DG_EVENT_SW_CONFIG_UPDATE = 10 # DG new software configuration has been updated - DG_EVENT_SCHEDULED_RUNS_UPDATE = 11 # DG new scheduled runs information has been updated - DG_EVENT_HEATERS_INFO_UPDATE = 12 # DG new heaters information has been updated - DG_EVENT_AVG_DIALYSATE_FILL_COND_VALUES = 13 # DG average dialysate fill conductivity values - DG_EVENT_RESERVOIR_FILL_VALUES = 14 # DG reservoir fill base reservoir weight and filled volume values - DG_EVENT_OPERATION_STATUS = 15 # DG operation status event - DG_EVENT_TEMPERATURE_DRIFT = 16 # DG temperature drift event - DG_EVENT_BICARB_CHECK_RESULT = 17 # DG bicarb check result - DG_EVENT_ACID_CHECK_RESULT = 18 # DG acid check result - DG_EVENT_COND1_VS_COND2_DIFF_RESULT = 19 # DG CD1 (acid) vs. CD2 (bicarb) different result - NUM_OF_DG_EVENT_IDS = 20 # Total number of DG events + DG_EVENT_STARTUP = 0 # DG startup event + DG_EVENT_OP_MODE_CHANGE = 1 # DG Op mode change event + DG_EVENT_SUB_MODE_CHANGE = 2 # DG Op sub-mode change event + DG_EVENT_CONCENTRATE_CAP_SWITCH_CHANGE = 3 # DG concentrate cap switch change + DG_EVENT_DIALYSATE_CAP_SWITCH_CHANGE = 4 # DG dialysate cap switch change + DG_EVENT_CPU_RAM_ERROR_STATUS = 5 # DG processor RAM error + DG_EVENT_CAL_RECORD_UPDATE = 6 # DG new calibration record updated + DG_EVENT_SYSTEM_RECORD_UPDATE = 7 # DG new system record has been updated + DG_EVENT_SERVICE_UPDATE = 8 # DG new service record has been updated + DG_EVENT_USAGE_INFO_UPDATE = 9 # DG new usage information has been updated + DG_EVENT_SW_CONFIG_UPDATE = 10 # DG new software configuration has been updated + DG_EVENT_SCHEDULED_RUNS_UPDATE = 11 # DG new scheduled runs information has been updated + DG_EVENT_HEATERS_INFO_UPDATE = 12 # DG new heaters information has been updated + DG_EVENT_AVG_DIALYSATE_FILL_COND_VALUES = 13 # DG average dialysate fill conductivity values + DG_EVENT_RESERVOIR_FILL_VALUES = 14 # DG reservoir fill base reservoir weight and filled volume values + DG_EVENT_OPERATION_STATUS = 15 # DG operation status event + DG_EVENT_TEMPERATURE_DRIFT = 16 # DG temperature drift event + DG_EVENT_BICARB_CHECK_RESULT = 17 # DG bicarb check result + DG_EVENT_ACID_CHECK_RESULT = 18 # DG acid check result + DG_EVENT_COND1_VS_COND2_DIFF_RESULT = 19 # DG CD1 (acid) vs. CD2 (bicarb) different result + DG_EVENT_PASSIVE_COOL_HEAT_DISINFECT_STATUS = 20 # DG nocturnal heat disinfect status + NUM_OF_DG_EVENT_IDS = 21 # Total number of DG events @unique Index: dialin/common/msg_ids.py =================================================================== diff -u -r7f4c7170042e9bad8cdecb3af57d2d5796347a5c -rbb34e3e1abada3b34fcd7696722fcc4f8ca16f94 --- dialin/common/msg_ids.py (.../msg_ids.py) (revision 7f4c7170042e9bad8cdecb3af57d2d5796347a5c) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision bb34e3e1abada3b34fcd7696722fcc4f8ca16f94) @@ -224,6 +224,7 @@ MSG_ID_DG_START_STOP_RO_PERMEATE_SAMPLE_MODE_CMD_REQUEST = 0xC9 MSG_ID_DG_RO_PERMEATE_SAMPLE_DATA = 0xCA MSG_ID_HD_SEND_RO_PERMEATE_SAMPLE_DISPENSE_REQUEST_TO_DG = 0xCB + MSG_ID_DG_START_STOP_PASSIVE_COOL_HEAT_DISINFECT = 0xCC MSG_ID_DG_SEND_RO_PERMEATE_SAMPLE_DISPENSE_READY_TO_HD = 0xCD MSG_ID_DG_DRAIN_MODE_DATA = 0xCE MSG_ID_UI_INSTITUTIONAL_RECORD_REQUEST = 0xCF Index: dialin/dg/hd_proxy.py =================================================================== diff -u -r1f6af0afb3388e3a491e1446f336fff9997a3dba -rbb34e3e1abada3b34fcd7696722fcc4f8ca16f94 --- dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision 1f6af0afb3388e3a491e1446f336fff9997a3dba) +++ dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision bb34e3e1abada3b34fcd7696722fcc4f8ca16f94) @@ -279,6 +279,37 @@ self.logger.debug("Timeout!!!!") return False + def cmd_start_stop_dg_passive_cool_heat_disinfect(self, start: bool = True) -> int: + """ + Constructs and sends the start/stop DG passive cool heat disinfect command + + @param start: (bool) True = start passive cool heat disinfect, False = stop passive cool heat disinfect. + @return: non-zero integer if successful, False otherwise + """ + # 1 is to start + if start: + cmd = 1 + cmd_str = "Starting" + else: + cmd = 0 + cmd_str = "Stopping" + payload = integer_to_bytearray(cmd) + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, + message_id=MsgIds.MSG_ID_DG_START_STOP_PASSIVE_COOL_HEAT_DISINFECT.value, + payload=payload) + + self.logger.debug(cmd_str + " DG passive cool heat disinfect") + + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False + def cmd_start_stop_dg_heat_disinfect_active_cool(self, start: bool = True) -> int: """ Constructs and sends the start/stop DG heat disinfect active cool command Index: dialin/dg/heat_disinfect.py =================================================================== diff -u -r1f6af0afb3388e3a491e1446f336fff9997a3dba -rbb34e3e1abada3b34fcd7696722fcc4f8ca16f94 --- dialin/dg/heat_disinfect.py (.../heat_disinfect.py) (revision 1f6af0afb3388e3a491e1446f336fff9997a3dba) +++ dialin/dg/heat_disinfect.py (.../heat_disinfect.py) (revision bb34e3e1abada3b34fcd7696722fcc4f8ca16f94) @@ -37,17 +37,15 @@ DG_HEAT_DISINFECT_STATE_FLUSH_DRAIN_R1 = 8 DG_HEAT_DISINFECT_STATE_FILL_WITH_WATER = 9 DG_HEAT_DISINFECT_STATE_DISINFECT_R1_TO_R2 = 10 - DG_HEAT_DISINFECT_STATE_FILL_R2_WITH_HOT_WATER = 11 - DG_HEAT_DISINFECT_STATE_DISINFECT_R2_TO_R1 = 12 - DG_HEAT_DISINFECT_STATE_COOL_DOWN_HEATERS = 13 - DG_HEAT_DISINFECT_STATE_MIX_DRAIN_R1 = 14 - DG_HEAT_DISINFECT_STATE_MIX_DRAIN_R2 = 15 - DG_HEAT_DISINFECT_STATE_RINSE_R1_TO_R2 = 16 - DG_HEAT_DISINFECT_STATE_RINSE_R2_TO_R1_AND_DRAIN_R1 = 17 - DG_HEAT_DISINFECT_STATE_RINSE_CIRCULATION = 18 - DG_HEAT_DISINFECT_STATE_CANCEL_BASIC_PATH = 19 - DG_HEAT_DISINFECT_STATE_CANCEL_WATER_PATH = 20 - DG_HEAT_DISINFECT_STATE_COMPLETE = 21 + DG_HEAT_DISINFECT_STATE_PREPARE_FOR_HOT_WATER_TRANSITION = 11 + DG_HEAT_DISINFECT_STATE_FILL_R2_WITH_HOT_WATER = 12 + DG_HEAT_DISINFECT_STATE_DISINFECT_R2_TO_R1 = 13 + DG_HEAT_DISINFECT_STATE_COOL_DOWN_HEATERS = 14 + DG_HEAT_DISINFECT_STATE_MIX_DRAIN_R1 = 15 + DG_HEAT_DISINFECT_STATE_MIX_DRAIN_R2 = 16 + DG_HEAT_DISINFECT_STATE_CANCEL_BASIC_PATH = 17 + DG_HEAT_DISINFECT_STATE_CANCEL_WATER_PATH = 18 + DG_HEAT_DISINFECT_STATE_COMPLETE = 19 @unique Index: dialin/hd/ui_proxy.py =================================================================== diff -u -r1f6af0afb3388e3a491e1446f336fff9997a3dba -rbb34e3e1abada3b34fcd7696722fcc4f8ca16f94 --- dialin/hd/ui_proxy.py (.../ui_proxy.py) (revision 1f6af0afb3388e3a491e1446f336fff9997a3dba) +++ dialin/hd/ui_proxy.py (.../ui_proxy.py) (revision bb34e3e1abada3b34fcd7696722fcc4f8ca16f94) @@ -1353,7 +1353,7 @@ ven_win: int = 100, ven_asy: int = 20, bp_intvl: int = 30, - rb_flow: int = 100) -> None: + rb_flow: int = 200) -> None: """ Constructs and sends a ui set treatment parameters message Constraints: @@ -1923,4 +1923,4 @@ self.logger.debug("Sending UI pressure limits message") - received_message = self.can_interface.send(message) \ No newline at end of file + received_message = self.can_interface.send(message) Index: dialin/ui/dg_simulator.py =================================================================== diff -u -r1f6af0afb3388e3a491e1446f336fff9997a3dba -rbb34e3e1abada3b34fcd7696722fcc4f8ca16f94 --- dialin/ui/dg_simulator.py (.../dg_simulator.py) (revision 1f6af0afb3388e3a491e1446f336fff9997a3dba) +++ dialin/ui/dg_simulator.py (.../dg_simulator.py) (revision bb34e3e1abada3b34fcd7696722fcc4f8ca16f94) @@ -262,35 +262,72 @@ self.can_interface.send(message, 0) - def cmd_set_dg_heaters_data(self, main_primary_dc: int, small_primary_dc: int, trimmer_dc: int, - primary_target_temp : float, trimmer_target_temp : float, - primary_heater_state: float, trimmer_heater_state: float, - primary_efficiency : float, primary_calc_target_temp:float, - trimmer_calc_current_temp: float, trimmer_use_last_dc:float) -> None: + def cmd_set_dg_heaters_data(self, + mMainPrimayHeaterDC : float , + mSmallPrimaryHeaterDC : float , + mTrimmerHeaterDC : float , + mPrimaryTargetTemp : float , + mTrimmerTargetTemp : float , + mPrimaryHeaterState : int , + mTrimmerHeaterState : int , + mPrimaryEfficiency : float , + mPrimaryCalcTargetTemp : float , + mTrimmerCalcCurrentTemp : float , + mTrimmerUseLastDC : int , + mTrimmerPreviousFlow : float , + mTrimmerContolCounter : int ) -> None: """ the DG Heaters Data message setter/sender method - | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | #1:(U32) | #2:(U32) | #3:(U32) | - |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: |:--: |:--: |:--: | - |0x2C00| 0x080 | 8 | 2 Hz | N | DG | All | DG Heaters Data | \ref Data::mMainPrimaryDC | \ref Data::mSmallPrimaryDC | \ref Data::mTrimmerDC | - - @param main_primary_dc: integer - Main PriMary DC - @param small_primary_dc: integer - Small Primary DC - @param trimmer_dc: integer - Trimmer DC + | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | + |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: | + |0x2C00| 0x080 | 8 | 2 Hz | N | DG | All | DG Heaters Data | + + | Payload || + | || + | # 1:(F32) | \ref Data::mMainPrimayHeaterDC | + | # 2:(F32) | \ref Data::mSmallPrimaryHeaterDC | + | # 3:(F32) | \ref Data::mTrimmerHeaterDC | + | # 4:(F32) | \ref Data::mPrimaryTargetTemp | + | # 5:(F32) | \ref Data::mTrimmerTargetTemp | + | # 6:(U32) | \ref Data::mPrimaryHeaterState | + | # 7:(U32) | \ref Data::mTrimmerHeaterState | + | # 8:(F32) | \ref Data::mPrimaryEfficiency | + | # 9:(F32) | \ref Data::mPrimaryCalcTargetTemp | + | #10:(F32) | \ref Data::mTrimmerCalcCurrentTemp | + | #11:(U32) | \ref Data::mTrimmerUseLastDC | + | #12:(F32) | \ref Data::mTrimmerPreviousFlow | + | #13:(U32) | \ref Data::mTrimmerContolCounter | + + @param mMainPrimayHeaterDC : ( float ) Main primary heater DC + @param mSmallPrimaryHeaterDC : ( float ) Small primary heater DC + @param mTrimmerHeaterDC : ( float ) Trimmer heater DC + @param mPrimaryTargetTemp : ( float ) Primary heater target temperature + @param mTrimmerTargetTemp : ( float ) Trimmer heater target temperature + @param mPrimaryHeaterState : ( int ) Primary heater state + @param mTrimmerHeaterState : ( int ) Trimmer heater state + @param mPrimaryEfficiency : ( float ) Primary heater efficiency + @param mPrimaryCalcTargetTemp : ( float ) Primary heater calculated target temperature + @param mTrimmerCalcCurrentTemp : ( float ) Trimmer heater calculated current temperature + @param mTrimmerUseLastDC : ( int ) Trimmer heater use last duty cycle + @param mTrimmerPreviousFlow : ( float ) Trimmer previous flow + @param mTrimmerContolCounter : ( int ) Trimmer control counter @return: none """ - payload = integer_to_bytearray(main_primary_dc) - payload += integer_to_bytearray(small_primary_dc) - payload += integer_to_bytearray(trimmer_dc) - payload += integer_to_bytearray(primary_target_temp) - payload += integer_to_bytearray(trimmer_target_temp) - payload += integer_to_bytearray(primary_heater_state) - payload += integer_to_bytearray(trimmer_heater_state) - payload += integer_to_bytearray(primary_efficiency) - payload += integer_to_bytearray(primary_calc_target_temp) - payload += integer_to_bytearray(trimmer_calc_current_temp) - payload += integer_to_bytearray(trimmer_use_last_dc) - + payload = float_to_bytearray ( mMainPrimayHeaterDC ) + payload += float_to_bytearray ( mSmallPrimaryHeaterDC ) + payload += float_to_bytearray ( mTrimmerHeaterDC ) + payload += float_to_bytearray ( mPrimaryTargetTemp ) + payload += float_to_bytearray ( mTrimmerTargetTemp ) + payload += integer_to_bytearray ( mPrimaryHeaterState ) + payload += integer_to_bytearray ( mTrimmerHeaterState ) + payload += float_to_bytearray ( mPrimaryEfficiency ) + payload += float_to_bytearray ( mPrimaryCalcTargetTemp ) + payload += float_to_bytearray ( mTrimmerCalcCurrentTemp ) + payload += integer_to_bytearray ( mTrimmerUseLastDC ) + payload += float_to_bytearray ( mTrimmerPreviousFlow ) + payload += integer_to_bytearray ( mTrimmerContolCounter ) + message = DenaliMessage.build_message(channel_id=DenaliChannels.dg_sync_broadcast_ch_id, message_id=MsgIds.MSG_ID_DG_HEATERS_DATA.value, payload=payload) Index: dialin/ui/hd_simulator.py =================================================================== diff -u -r99ebba0e9699f3810318b89ef651daeb5827eda5 -rbb34e3e1abada3b34fcd7696722fcc4f8ca16f94 --- dialin/ui/hd_simulator.py (.../hd_simulator.py) (revision 99ebba0e9699f3810318b89ef651daeb5827eda5) +++ dialin/ui/hd_simulator.py (.../hd_simulator.py) (revision bb34e3e1abada3b34fcd7696722fcc4f8ca16f94) @@ -890,7 +890,7 @@ @return: none """ - payload = integer_to_bytearray(accepted) + payload = integer_to_bytearray(accepted) payload += integer_to_bytearray(reason) payload += float_to_bytearray(volume) payload += integer_to_bytearray(duration) @@ -979,88 +979,140 @@ self.can_interface.send(message, 0) - def cmd_set_treatment_ultrafiltration_outlet_flow_data(self, ref_uf_vol: float, measured_uf_vol: float, - rot_speed: float, mot_speed: float, mc_speed: float, - mc_current: float, pwm: float, dop_corr_offset: float, - dop_calc_rate: float, uf_calc_rate: float, rotor_hall: int, - current_set_uf_rate: float) -> None: + def cmd_set_treatment_ultrafiltration_outlet_flow_data(self, + mRefUFVol : float , + mMeasUFVol : float , + mRotorSpeed : float , + mMotorSpeed : float , + mMotorCtlSpeed : float , + mMotorCtlCurrent : float , + mPWMDtCycle : float , + mDopCorrOffset : float , + mDopCalcRate : float , + mUfCalcRate : float , + mRotorHall : int , + mCurrentSetUFRate : float , + mDialOutPumpState : int ) -> None: """ the Outlet Flow Data message setter/sender method - | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | #1:(F32) | #2:(F32) | #3:(F32) | #4:(F32) | #5:(F32) | #6:(F32) | #7:(F32) | - |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: |:--: |:--: |:--: |:--: |:--: |:--: |:--: | - |0x0B00| 0x040 | 7 | 1 Hz | N | HD | All | Outlet Flow Data | \ref Data::mRefUFVol | \ref Data::mMeasUFVol | \ref Data::mRotorSpeed | \ref Data::mMotorSpeed | \ref Data::mMotorCtlSpeed | \ref Data::mMotorCtlCurrent | \ref Data::mPWMDtCycle | + | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | + |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: | + |0x0B00| 0x040 | 7 | 1 Hz | N | HD | All | Outlet Flow Data | + | Payload || + | || + | #01:(F32) | \ref Data::mRefUFVol | + | #02:(F32) | \ref Data::mMeasUFVol | + | #03:(F32) | \ref Data::mRotorSpeed | + | #04:(F32) | \ref Data::mMotorSpeed | + | #05:(F32) | \ref Data::mMotorCtlSpeed | + | #06:(F32) | \ref Data::mMotorCtlCurrent | + | #07:(F32) | \ref Data::mPWMDtCycle | + | #08:(F32) | \ref Data::mDopCorrOffset | + | #09:(F32) | \ref Data::mDopCalcRate | + | #10:(F32) | \ref Data::mUfCalcRate | + | #11:(U32) | \ref Data::mRotorHall | + | #12:(F32) | \ref Data::mCurrentSetUFRate| + | #13:(U32) | \ref Data::mDialOutPumpState| - @param ref_uf_vol: (float) Ref UF Volume - @param measured_uf_vol: (float) Measured UF Volume - @param rot_speed: (float) Rot Speed - @param mot_speed: (float) Motor Speed - @param mc_speed: (float) MC Speed - @param mc_current: (float) MC Current - @param pwm: (float) PWM - @param dop_corr_offset: (float) correction offset - @param dop_calc_rate: (float) calculated dop flow rate - @param uf_calc_rate: (float) calculated uf flow rate - @param rotor_hall: (int) rotor hall sensor - @param current_set_uf_rate: (float) set UF rate + @param mRefUFVol : ( float ) Reference UF Volume + @param mMeasUFVol : ( float ) Measured UF Volume + @param mRotorSpeed : ( float ) Rotor Speed + @param mMotorSpeed : ( float ) Motor Speed + @param mMotorCtlSpeed : ( float ) Motor Controller Speed + @param mMotorCtlCurrent : ( float ) Motor Controller Current + @param mPWMDtCycle : ( float ) PWM Duty Cycle in % + @param mDopCorrOffset : ( float ) + @param mDopCalcRate : ( float ) + @param mUfCalcRate : ( float ) + @param mRotorHall : ( int ) + @param mCurrentSetUFRate : ( float ) Current Set UF Rate + @param mDialOutPumpState : ( int ) Dialout pump state @return: none """ - payload = float_to_bytearray(ref_uf_vol) - payload += float_to_bytearray(measured_uf_vol) - payload += float_to_bytearray(rot_speed) - payload += float_to_bytearray(mot_speed) - payload += float_to_bytearray(mc_speed) - payload += float_to_bytearray(mc_current) - payload += float_to_bytearray(pwm) - payload += float_to_bytearray(dop_corr_offset) - payload += float_to_bytearray(dop_calc_rate) - payload += float_to_bytearray(uf_calc_rate) - payload += integer_to_bytearray(rotor_hall) - payload += float_to_bytearray(current_set_uf_rate) + payload = float_to_bytearray (mRefUFVol ) + payload += float_to_bytearray (mMeasUFVol ) + payload += float_to_bytearray (mRotorSpeed ) + payload += float_to_bytearray (mMotorSpeed ) + payload += float_to_bytearray (mMotorCtlSpeed ) + payload += float_to_bytearray (mMotorCtlCurrent ) + payload += float_to_bytearray (mPWMDtCycle ) + payload += float_to_bytearray (mDopCorrOffset ) + payload += float_to_bytearray (mDopCalcRate ) + payload += float_to_bytearray (mUfCalcRate ) + payload += integer_to_bytearray (mRotorHall ) + payload += float_to_bytearray (mCurrentSetUFRate ) + payload += integer_to_bytearray (mDialOutPumpState ) message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_sync_broadcast_ch_id, message_id=MsgIds.MSG_ID_DIALYSATE_OUT_FLOW_DATA.value, payload=payload) self.can_interface.send(message, 0) - def cmd_set_pressure_occlusion_data(self, arterial_prs: float, venous_prs: float, blood_pump_occlusion: int, - pressure_state: int, art_min_limit: int, art_max_limit: int, - ven_min_limit: int, ven_max_limit: int - , filtered_arterial_prs: float, - filtered_venous_prs : float + def cmd_set_pressure_occlusion_data(self, + mArterialPressure : float , + mVenousPressure : float , + mBloodPumpOcclusion : int , + mPressureLimitState : int , + mArterialLimitLow : int , + mArterialLimitHigh : int , + mVenousLimitLow : int , + mVenousLimitHigh : int , + mArtLongFilter : float , + mVenousLongFilter : float , + mBloodOcclLongFilter : float , + mPartialOcclBaseline : float ) -> None: """ the Pressure/Occlusion Data messages setter/sender method - | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | #1:(F32) | #2:(F32) | #3:(U32) | #4:(U32) | #5:(U32) | - |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: |:--: |:--: |:--: |:--: |:--: | - |0x0900| 0x040 | 7 | 1 Hz | N | HD | All | PressureOcclusion Data | \ref Data::mArterialPressure | \ref Data::mVenousPressure | \ref Data::mBloodPumpOcclusion | \ref Data::mDialysateInletPumpOcclusion | \ref Data::mDialysateOutletPumpOcclusion | - - @param arterial_prs: (float) Arterial Pressure - @param venous_prs: (float) Venous Pressure - @param blood_pump_occlusion: (uint) Blood Pump Occlusion - @param pressure_state: (uint) Pressure state - @param art_min_limit: (int) arterial minimum limit - @param art_max_limit: (int) arterial maximum limit - @param ven_min_limit: (int) venous minimum limit - @param ven_max_limit: (int) venous maximum limit - # @param filtered_arterial_prs: (float) filtered arterial pressure - # @param filtered_venous_prs: (float) filtered venous pressure + | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | + |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: | + |0x0900| 0x040 | 7 | 1 Hz | N | HD | All | PressureOcclusion Data | + | Payload || + | || + | #1: (F32) | \ref Data::mArterialPressure | + | #2: (F32) | \ref Data::mVenousPressure | + | #3: (U32) | \ref Data::mBloodPumpOcclusion | + | #4: (U32) | \ref Data::mPressureLimitState | + | #5: (S32) | \ref Data::mArterialLimitLow | + | #6: (S32) | \ref Data::mArterialLimitHigh | + | #7: (S32) | \ref Data::mVenousLimitLow | + | #8: (S32) | \ref Data::mVenousLimitHigh | + | #9: (F32) | \ref Data::mArtLongFilter | + | #10:(F32) | \ref Data::mVenousLongFilter | + | #11:(F32) | \ref Data::mBloodOcclLongFilter | + | #12:(F32) | \ref Data::mPartialOcclBaseline | + + @param mArterialPressure : ( float ) Latest arterial pressure (mmHg) + @param mVenousPressure : ( float ) Latest venous pressure (mmHg) + @param mBloodPumpOcclusion : ( int ) Latest BP occlusion (no units) + @param mPressureLimitState : ( int ) Current pressure limits state (enum-stabilization or stable) + @param mArterialLimitLow : ( int ) Current arterial minimum pressure limit (mmHg) + @param mArterialLimitHigh : ( int ) Current arterial maximum pressure limit (mmHg) + @param mVenousLimitLow : ( int ) Current venous minimum pressure limit (mmHg) + @param mVenousLimitHigh : ( int ) Current venous maximum pressure limit (mmHg) + @param mArtLongFilter : ( float ) Arterial long filter (mmHg) + @param mVenousLongFilter : ( float ) Venous long filter (mmHg) + @param mBloodOcclLongFilter : ( float ) Blood pump occlusion long filter + @param mPartialOcclBaseline : ( float ) Partial Occlusion base line @return: none """ - payload = float_to_bytearray(arterial_prs) - payload += float_to_bytearray(venous_prs) - payload += integer_to_bytearray(blood_pump_occlusion) - payload += integer_to_bytearray(pressure_state) - payload += integer_to_bytearray(art_min_limit) - payload += integer_to_bytearray(art_max_limit) - payload += integer_to_bytearray(ven_min_limit) - payload += integer_to_bytearray(ven_max_limit) - payload += float_to_bytearray(filtered_arterial_prs) - payload += float_to_bytearray(filtered_venous_prs) + payload = float_to_bytearray (mArterialPressure ) + payload += float_to_bytearray (mVenousPressure ) + payload += integer_to_bytearray (mBloodPumpOcclusion ) + payload += integer_to_bytearray (mPressureLimitState ) + payload += integer_to_bytearray (mArterialLimitLow ) + payload += integer_to_bytearray (mArterialLimitHigh ) + payload += integer_to_bytearray (mVenousLimitLow ) + payload += integer_to_bytearray (mVenousLimitHigh ) + payload += float_to_bytearray (mArtLongFilter ) + payload += float_to_bytearray (mVenousLongFilter ) + payload += float_to_bytearray (mBloodOcclLongFilter ) + payload += float_to_bytearray (mPartialOcclBaseline ) message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_sync_broadcast_ch_id, message_id=MsgIds.MSG_ID_PRESSURE_OCCLUSION_DATA.value, @@ -2167,16 +2219,35 @@ self.can_interface.send(message, 0) - def cmd_send_hd_air_trap_data(self, lower_level: int, upper_level: int) -> None: + def cmd_send_hd_air_trap_data(self, + mAirTrapLowerLevel : int , + mAirTrapUpperLevel : int , + mAirTrapRawLowerLevel : int , + mAirTrapRawUpperLevel : int ) -> None: + """ + | MSG | CAN ID | Type | Ack | Src | Dst | Description | + |:----:|:------:|:------:|:---:|:---:|:---:|:-----------: | + |0x3E00| 0x040 | 1 Hz | N | HD | All | HD Air Trap Data | + | Payload || + | || + | #1:(U32) | \ref Data::mAirTrapLowerLevel | + | #2:(U32) | \ref Data::mAirTrapUpperLevel | + | #3:(U32) | \ref Data::mAirTrapRawLowerLevel | + | #4:(U32) | \ref Data::mAirTrapRawUpperLevel | + 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 + @param mAirTrapLowerLevel : ( int ) Lower Level + @param mAirTrapUpperLevel : ( int ) Upper Level + @param mAirTrapRawLowerLevel : ( int ) Raw Lower Level + @param mAirTrapRawUpperLevel : ( int ) Raw Upper Level @return: None """ - payload = unsigned_integer_to_bytearray(lower_level) - payload += unsigned_integer_to_bytearray(upper_level) + payload = unsigned_integer_to_bytearray(mAirTrapLowerLevel ) + payload += unsigned_integer_to_bytearray(mAirTrapUpperLevel ) + payload += unsigned_integer_to_bytearray(mAirTrapRawLowerLevel ) + payload += unsigned_integer_to_bytearray(mAirTrapRawUpperLevel ) message = DenaliMessage.build_message(channel_id=DenaliChannels.hd_sync_broadcast_ch_id, message_id=MsgIds.MSG_ID_HD_AIR_TRAP_DATA.value, @@ -2314,4 +2385,4 @@ message_id=MsgIds.MSG_ID_HD_INSTITUTIONAL_RECORD_RESPONSE.value, payload=payload) - self.can_interface.send(message, 0) \ No newline at end of file + self.can_interface.send(message, 0) Index: tools/Code_Report.csv =================================================================== diff -u -r45a422e5111849a1cf1afe48f6a05883830f920c -rbb34e3e1abada3b34fcd7696722fcc4f8ca16f94 --- tools/Code_Report.csv (.../Code_Report.csv) (revision 45a422e5111849a1cf1afe48f6a05883830f920c) +++ tools/Code_Report.csv (.../Code_Report.csv) (revision bb34e3e1abada3b34fcd7696722fcc4f8ca16f94) @@ -131,13 +131,14 @@ ./dg/hd_proxy.py, Function, cmd_stop_primary_heater(self) -> None: ./dg/hd_proxy.py, Function, cmd_sample_water(self, cmd: int) -> None: ./dg/hd_proxy.py, Function, cmd_start_stop_dg_heat_disinfect(self, start: bool = True) -> int: +./dg/hd_proxy.py, Function, cmd_start_stop_dg_passive_cool_heat_disinfect(self, start: bool = True) -> int: ./dg/hd_proxy.py, Function, cmd_start_stop_dg_heat_disinfect_active_cool(self, start: bool = True) -> int: ./dg/hd_proxy.py, Function, cmd_start_stop_dg_flush(self, start: bool = True) -> int: ./dg/hd_proxy.py, Function, cmd_start_stop_dg_chemical_disinfect(self, start: bool = True) -> int: ./dg/hd_proxy.py, Function, cmd_start_stop_dg_chemical_disinfect_flush(self, start: bool = True) -> int: ./dg/hd_proxy.py, Function, cmd_start_stop_dg_ro_permeate_sample(self, start: bool = True) -> int: -./dg/hd_proxy.py, Function, cmd_resend_dg_alarms(self) -> int: ./dg/hd_proxy.py, Function, cmd_switch_reservoirs(self, reservoir_id: int = RESERVOIR1, use_last_trimmer_dc: int = 0) -> int: +./dg/hd_proxy.py, Function, cmd_resend_dg_alarms(self) -> int: ./dg/hd_proxy.py, Function, cmd_hd_communication_status_override(self, status: bool, reset: int = NO_RESET) -> int: ./dg/hd_proxy.py, Function, cmd_hd_send_collect_ro_permeate_sample(self, cmd: bool = 0): ./dg/hd_proxy.py, Function, cmd_hd_send_chem_flush_sample_result(self, result: bool = 0): @@ -1703,7 +1704,7 @@ common/alarm_defs.py, Enum, AlarmList, ALARM_ID_DG_DRAIN_PUMP_DIRECTION_FPGA_FAULT common/alarm_defs.py, Enum, AlarmList, ALARM_ID_HD_INVALID_USAGE_RECORD_CRC common/alarm_defs.py, Enum, AlarmList, ALARM_ID_HD_CPU_RAM_ERROR -common/alarm_defs.py, Enum, AlarmList, ALARM_ID_AVAILABLE_50 +common/alarm_defs.py, Enum, AlarmList, ALARM_ID_DG_TURN_OFF_INLET_WATER_VALVES common/alarm_defs.py, Enum, AlarmList, ALARM_ID_HD_AC_POWER_LOST_IN_TREATMENT common/alarm_defs.py, Enum, AlarmList, ALARM_ID_DG_CPI_COND_SENSOR_INVALID_CHAR common/alarm_defs.py, Enum, AlarmList, ALARM_ID_DG_CPO_COND_SENSOR_INVALID_CHAR @@ -1968,6 +1969,7 @@ common/dg_defs.py, Enum, DGEventList, DG_EVENT_BICARB_CHECK_RESULT common/dg_defs.py, Enum, DGEventList, DG_EVENT_ACID_CHECK_RESULT common/dg_defs.py, Enum, DGEventList, DG_EVENT_COND1_VS_COND2_DIFF_RESULT +common/dg_defs.py, Enum, DGEventList, DG_EVENT_PASSIVE_COOL_HEAT_DISINFECT_STATUS common/dg_defs.py, Enum, DGEventList, NUM_OF_DG_EVENT_IDS common/dg_defs.py, Enum, DGEventDataType, DGEventDataType common/dg_defs.py, Enum, DGEventDataType, EVENT_DATA_TYPE_NONE @@ -2577,6 +2579,7 @@ common/msg_ids.py, Enum, MsgIds, MSG_ID_DG_START_STOP_RO_PERMEATE_SAMPLE_MODE_CMD_REQUEST common/msg_ids.py, Enum, MsgIds, MSG_ID_DG_RO_PERMEATE_SAMPLE_DATA common/msg_ids.py, Enum, MsgIds, MSG_ID_HD_SEND_RO_PERMEATE_SAMPLE_DISPENSE_REQUEST_TO_DG +common/msg_ids.py, Enum, MsgIds, MSG_ID_DG_START_STOP_PASSIVE_COOL_HEAT_DISINFECT common/msg_ids.py, Enum, MsgIds, MSG_ID_DG_SEND_RO_PERMEATE_SAMPLE_DISPENSE_READY_TO_HD common/msg_ids.py, Enum, MsgIds, MSG_ID_DG_DRAIN_MODE_DATA common/msg_ids.py, Enum, MsgIds, MSG_ID_UI_INSTITUTIONAL_RECORD_REQUEST @@ -2959,14 +2962,12 @@ dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_FLUSH_DRAIN_R1 dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_FILL_WITH_WATER dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_DISINFECT_R1_TO_R2 +dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_PREPARE_FOR_HOT_WATER_TRANSITION dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_FILL_R2_WITH_HOT_WATER dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_DISINFECT_R2_TO_R1 dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_COOL_DOWN_HEATERS dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_MIX_DRAIN_R1 dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_MIX_DRAIN_R2 -dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_RINSE_R1_TO_R2 -dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_RINSE_R2_TO_R1_AND_DRAIN_R1 -dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_RINSE_CIRCULATION dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_CANCEL_BASIC_PATH dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_CANCEL_WATER_PATH dg/heat_disinfect.py, Enum, HeatDisinfectStates, DG_HEAT_DISINFECT_STATE_COMPLETE