Index: dialin/common/msg_ids.py =================================================================== diff -u -rab24503836ed04ff6e3f14b80fc9de92efb557b5 -r5fad1b021480de4d9708932bf3f68e27095c658f --- dialin/common/msg_ids.py (.../msg_ids.py) (revision ab24503836ed04ff6e3f14b80fc9de92efb557b5) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision 5fad1b021480de4d9708932bf3f68e27095c658f) @@ -8,7 +8,7 @@ # @file msg_ids.py # # @author (last) Dara Navaei -# @date (last) 14-Nov-2022 +# @date (last) 21-Dec-2022 # @author (original) Peter Lucia # @date (original) 06-Apr-2021 # @@ -212,6 +212,13 @@ MSG_ID_DG_CPLD_STATUS = 0xBD MSG_ID_HD_BATTERY_MANAGEMENT_DATA = 0xBE MSG_ID_HD_BATTERY_STATUS_DATA = 0xBF + MSG_ID_DG_CHEM_DISINFECT_FLUSH_DATA = 0xC0 + MSG_ID_DG_CHEM_DISINFECT_FLUSH_TIME_DATA = 0xC1 + MSG_ID_DG_START_STOP_CHEM_DISINFECT_FLUSH = 0xC2 + MSG_ID_UI_CHEM_DISINFECT_FLUSH_CONFIRM = 0xC3 + MSG_ID_HD_CHEM_DISINFECT_FLUSH_CONFIRM_RESPONSE = 0xC4 + MSG_ID_DG_HEAT_DISINFECT_ACTIVE_COOL_DATA = 0xC5 + MSG_ID_DG_START_STOP_HEAT_DISINFECT_ACTIVE_COOL = 0xC6 MSG_ID_CAN_ERROR_COUNT = 0x999 @@ -445,6 +452,9 @@ MSG_ID_DG_RO_FEEDBACK_VOLTAGE_OVERRIDE = 0xA05B MSG_ID_DG_DIALYSATE_FILL_INTEGRATED_VOLUME_OVERRIDE = 0xA05C MSG_ID_DG_NV_RECORD_CRC_OVERRIDE = 0xA05D + MSG_ID_DG_CONC_PUMP_PARK_STATUS_OVERRIDE = 0xA05E + MSG_ID_DG_CONC_PUMP_PARK_FAULT_STATUS_OVERRIDE = 0xA05F + MSG_ID_DG_CONC_PUMP_PARK_COMMAND = 0xA060 MSG_ID_HD_DEBUG_EVENT = 0xFFF1 MSG_ID_DG_DEBUG_EVENT = 0xFFF2 Index: dialin/dg/dialysate_generator.py =================================================================== diff -u -rbc2938a08b77bf1a26d1d6de59797aaa2a5124fc -r5fad1b021480de4d9708932bf3f68e27095c658f --- dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision bc2938a08b77bf1a26d1d6de59797aaa2a5124fc) +++ dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 5fad1b021480de4d9708932bf3f68e27095c658f) @@ -7,8 +7,8 @@ # # @file dialysate_generator.py # -# @author (last) Dara Navaei -# @date (last) 13-Oct-2022 +# @author (last) Sean Nash +# @date (last) 21-Dec-2022 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # @@ -18,6 +18,7 @@ from .alarms import DGAlarms from .calibration_record import DGCalibrationNVRecord from .chemical_disinfect import ChemicalDisinfect +from .chemical_disinfect_flush import ChemicalDisinfectFlushMode from .concentrate_pumps import ConcentratePumps from .conductivity_sensors import ConductivitySensors from .constants import RESET, NO_RESET @@ -31,6 +32,7 @@ from .gen_idle import GenIdle from .hd_proxy import DGHDProxy from .heat_disinfect import HeatDisinfect +from .heat_disinfect_active_cool import HeatDisinfectActiveCool from .heaters import Heaters from .load_cells import DGLoadCells from .pressures import DGPressures @@ -164,6 +166,7 @@ self.alarms = DGAlarms(self.can_interface, self.logger) self.calibration_record = DGCalibrationNVRecord(self.can_interface, self.logger) self.chemical_disinfect = ChemicalDisinfect(self.can_interface, self.logger) + self.chemical_disinfect_flush = ChemicalDisinfectFlushMode(self.can_interface, self.logger) self.concentrate_pumps = ConcentratePumps(self.can_interface, self.logger) self.conductivity_sensors = ConductivitySensors(self.can_interface, self.logger) self.cpld = Cpld(self.can_interface, self.logger) @@ -176,6 +179,7 @@ self.gen_idle = GenIdle(self.can_interface, self.logger) self.hd_proxy = DGHDProxy(self.can_interface, self.logger) self.heat_disinfect = HeatDisinfect(self.can_interface, self.logger) + self.heat_disinfect_active_cool = HeatDisinfectActiveCool(self.can_interface, self.logger) self.heaters = Heaters(self.can_interface, self.logger) self.load_cells = DGLoadCells(self.can_interface, self.logger) self.pressures = DGPressures(self.can_interface, self.logger) @@ -364,18 +368,7 @@ Must be logged into DG. Transition from current to requested op mode must be legal. - @param new_mode: ID of operation mode to transition to - DG_MODE_FAUL = 0 - DG_MODE_SERV = 1 - DG_MODE_INIT = 2 - DG_MODE_STAN = 3 - DG_MODE_SOLO = 4 - DG_MODE_GENE = 5 - DG_MODE_FILL = 6 - DG_MODE_DRAI = 7 - DG_MODE_FLUS = 8 - DG_MODE_HEAT = 9 - DG_MODE_CHEM = 10 + @param new_mode: ID of operation mode to transition to (see DGOpModes enum for options) @return: 1 if successful, zero otherwise Index: dialin/dg/heat_disinfect.py =================================================================== diff -u -r1ceb44f1f6d97ce295db7c3233043df9cca35746 -r5fad1b021480de4d9708932bf3f68e27095c658f --- dialin/dg/heat_disinfect.py (.../heat_disinfect.py) (revision 1ceb44f1f6d97ce295db7c3233043df9cca35746) +++ dialin/dg/heat_disinfect.py (.../heat_disinfect.py) (revision 5fad1b021480de4d9708932bf3f68e27095c658f) @@ -39,15 +39,14 @@ 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_COOL_DOWN_RO_FILTER = 14 - DG_HEAT_DISINFECT_STATE_MIX_DRAIN_R1 = 15 - DG_HEAT_DISINFECT_STATE_MIX_DRAIN_R2 = 16 - DG_HEAT_DISINFECT_STATE_RINSE_R1_TO_R2 = 17 - DG_HEAT_DISINFECT_STATE_RINSE_R2_TO_R1_AND_DRAIN_R1 = 18 - DG_HEAT_DISINFECT_STATE_RINSE_CIRCULATION = 19 - DG_HEAT_DISINFECT_STATE_CANCEL_BASIC_PATH = 20 - DG_HEAT_DISINFECT_STATE_CANCEL_WATER_PATH = 21 - DG_HEAT_DISINFECT_STATE_COMPLETE = 22 + 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 @unique Index: dialin/hd/alarms.py =================================================================== diff -u -rbe95b8a08acdcde08352f31a58082224c5a1653c -r5fad1b021480de4d9708932bf3f68e27095c658f --- dialin/hd/alarms.py (.../alarms.py) (revision be95b8a08acdcde08352f31a58082224c5a1653c) +++ dialin/hd/alarms.py (.../alarms.py) (revision 5fad1b021480de4d9708932bf3f68e27095c658f) @@ -7,8 +7,8 @@ # # @file alarms.py # -# @author (last) Micahel Garthwaite -# @date (last) 12-Oct-2022 +# @author (last) Steve Jarpe +# @date (last) 30-Nov-2022 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # @@ -453,16 +453,29 @@ @return: none """ self.logger.debug("Alarm activated!") + alarm_id = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) + data_typ_1 = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) + data_1 = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) + data_typ_2 = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) + data_2 = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])) + priority = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6])) + rank = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7])) + clr_top_only = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8])) - alarm_id = struct.unpack(' int: ./dg/chemical_disinfect.py, Function, get_chem_disinfect_current_post_rinse_count(self) -> int: ./dg/chemical_disinfect.py, Function, get_chem_disinfect_chemical_disinfect_ui_state(self) -> int: +./dg/chemical_disinfect_flush.py, Function, clear_flush_info(self) -> None: ./dg/chemical_disinfect.py, Function, clear_chem_disinfect_info(self) -> None: ./dg/concentrate_pumps.py, Function, cmd_concentrate_pump_state_change_request(self, pump_id: int, on: bool = False) -> int: ./dg/concentrate_pumps.py, Function, cmd_concentrate_pump_target_speed_override(self, pump_id: int, speed: float) -> int: @@ -113,6 +114,7 @@ ./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_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_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_switch_reservoirs(self, reservoir_id: int = RESERVOIR1) -> int: @@ -625,6 +627,14 @@ dg/alarms.py, Variable, alarm_conditions dg/alarms.py, Variable, safety_shutdown_active dg/calibration_record.py, Variable, dg_calibration_record +dg/chemical_disinfect_flush.py, Variable, flush_state +dg/chemical_disinfect_flush.py, Variable, overall_elapsed_time +dg/chemical_disinfect_flush.py, Variable, state_elapsed_time +dg/chemical_disinfect_flush.py, Variable, r1 +dg/chemical_disinfect_flush.py, Variable, r2 +dg/chemical_disinfect_flush.py, Variable, target_rinse_count +dg/chemical_disinfect_flush.py, Variable, rinse_count +dg/chemical_disinfect_flush.py, Variable, flush_UI_state dg/chemical_disinfect.py, Variable, chemical_disinfect_state dg/chemical_disinfect.py, Variable, overall_elapsed_time dg/chemical_disinfect.py, Variable, state_elapsed_time @@ -680,6 +690,7 @@ dg/dialysate_generator.py, Variable, alarms dg/dialysate_generator.py, Variable, calibration_record dg/dialysate_generator.py, Variable, chemical_disinfect +dg/dialysate_generator.py, Variable, chemical_disinfect_flush dg/dialysate_generator.py, Variable, concentrate_pumps dg/dialysate_generator.py, Variable, conductivity_sensors dg/dialysate_generator.py, Variable, cpld @@ -1433,6 +1444,7 @@ common/dg_defs.py, Enum, DGOpModes, DG_MODE_FLUS common/dg_defs.py, Enum, DGOpModes, DG_MODE_HEAT common/dg_defs.py, Enum, DGOpModes, DG_MODE_CHEM +common/dg_defs.py, Enum, DGOpModes, DG_MODE_CHFL common/dg_defs.py, Enum, DGOpModes, DG_MODE_NLEG common/dg_defs.py, Enum, DGOpModes, NUM_OF_DG_MODES common/dg_defs.py, Enum, DGInitStates, DGInitStates @@ -1572,27 +1584,36 @@ common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_DRAIN_R2 common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_FLUSH_DRAIN common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_FLUSH_CIRCULATION -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_FLUSH_R1_AND_R2 -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_FLUSH_R2_AND_DRAIN_R1 -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_FLUSH_DRAIN_R2 -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_FLUSH_DRAIN_R1 -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_PRIME_ACID_LINE -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_FILL_WITH_WATER_AND_DISINFECTANT -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_REMOVE_ACID_BOTTLE_FROM_UI +common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_PRIME_DISINFECTANT +common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_DISINFECTANT_FLUSH +common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_FILL_WITH_DISINFECTANT common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_DISINFECT_R1_TO_R2 -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_FILL_R2_WITH_DISINFECTANT +common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_PARTIAL_DRAIN_R1_FILL_R2_TO_R1 common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_DISINFECT_R2_TO_R1 -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_COOL_DOWN_HEATERS -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_DISINFECTANT_DRAIN_R1 -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_DISINFECTANT_DRAIN_R2 -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_RINSE_R1_TO_R2 -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_RINSE_R2_TO_R1_AND_DRAIN_R1 -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_RINSE_R1_TO_R2_AND_DRAIN_R2 -common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_RINSE_CIRCULATION +common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_PARTIAL_DRAIN_R2_FILL_R1_TO_R2 common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_CANCEL_BASIC_PATH common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_CANCEL_WATER_PATH common/dg_defs.py, Enum, DGChemicalDisinfectStates, DG_CHEM_DISINFECT_STATE_COMPLETE common/dg_defs.py, Enum, DGChemicalDisinfectStates, NUM_OF_DG_CHEM_DISINFECT_STATES +common/dg_defs.py, Enum, DGChemDisinfectFlushStates, DGChemDisinfectFlushStates +common/dg_defs.py, Enum, DGChemDisinfectFlushStates, DG_CHEM_DISINFECT_FLUSH_STATE_START +common/dg_defs.py, Enum, DGChemDisinfectFlushStates, DG_CHEM_DISINFECT_FLUSH_STATE_DISINFECTANT_DRAIN_R1 +common/dg_defs.py, Enum, DGChemDisinfectFlushStates, DG_CHEM_DISINFECT_FLUSH_STATE_DISINFECTANT_DRAIN_R2 +common/dg_defs.py, Enum, DGChemDisinfectFlushStates, DG_CHEM_DISINFECT_FLUSH_STATE_FLUSH_DRAIN +common/dg_defs.py, Enum, DGChemDisinfectFlushStates, DG_CHEM_DISINFECT_FLUSH_STATE_FLUSH_DISINFECTANT_LINE +common/dg_defs.py, Enum, DGChemDisinfectFlushStates, DG_CHEM_DISINFECT_FLUSH_STATE_FLUSH_UF +common/dg_defs.py, Enum, DGChemDisinfectFlushStates, DG_CHEM_DISINFECT_FLUSH_STATE_FLUSH_R2_TO_R1_DRAIN_R1 +common/dg_defs.py, Enum, DGChemDisinfectFlushStates, DG_CHEM_DISINFECT_FLUSH_STATE_FLUSH_R1_TO_R2_DRAIN_R2 +common/dg_defs.py, Enum, DGChemDisinfectFlushStates, DG_CHEM_DISINFECT_FLUSH_STATE_CANCEL_BASIC_PATH +common/dg_defs.py, Enum, DGChemDisinfectFlushStates, DG_CHEM_DISINFECT_FLUSH_STATE_CANCEL_WATER_PATH +common/dg_defs.py, Enum, DGChemDisinfectFlushStates, DG_CHEM_DISINFECT_FLUSH_STATE_COMPLETE +common/dg_defs.py, Enum, DGChemDisinfectFlushStates, NUM_OF_DG_CHEM_DISINFECT_FLUSH_STATES +common/dg_defs.py, Enum, DGChemDisinfectFlushUIStates, DGChemDisinfectFlushUIStates +common/dg_defs.py, Enum, DGChemDisinfectFlushUIStates, CHEM_DISINFECT_FLUSH_UI_STATE_NOT_RUNNING +common/dg_defs.py, Enum, DGChemDisinfectFlushUIStates, CHEM_DISINFECT_FLUSH_UI_STATE_FLUSH_AFTER_DISINFECT +common/dg_defs.py, Enum, DGChemDisinfectFlushUIStates, CHEM_DISINFECT_FLUSH_UI_STATE_CANCEL_FLUSH +common/dg_defs.py, Enum, DGChemDisinfectFlushUIStates, CHEM_DISINFECT_FLUSH_UI_STATE_COMPLETE +common/dg_defs.py, Enum, DGChemDisinfectFlushUIStates, NUM_OF_CHEM_DISINFECT_FLUSH_UI_STATES common/dg_defs.py, Enum, DGChemDisinfectUIStates, DGChemDisinfectUIStates common/dg_defs.py, Enum, DGChemDisinfectUIStates, CHEM_DISINFECT_UI_STATE_NOT_RUNNING common/dg_defs.py, Enum, DGChemDisinfectUIStates, CHEM_DISINFECT_UI_STATE_FLUSH_BEFORE_DISINFECT @@ -2134,6 +2155,11 @@ common/msg_ids.py, Enum, MsgIds, MSG_ID_DG_CPLD_STATUS common/msg_ids.py, Enum, MsgIds, MSG_ID_HD_BATTERY_MANAGEMENT_DATA common/msg_ids.py, Enum, MsgIds, MSG_ID_HD_BATTERY_STATUS_DATA +common/msg_ids.py, Enum, MsgIds, MSG_ID_DG_CHEM_DISINFECT_FLUSH_DATA +common/msg_ids.py, Enum, MsgIds, MSG_ID_DG_CHEM_DISINFECT_FLUSH_TIME_DATA +common/msg_ids.py, Enum, MsgIds, MSG_ID_DG_START_STOP_CHEM_DISINFECT_FLUSH +common/msg_ids.py, Enum, MsgIds, MSG_ID_UI_CHEM_DISINFECT_FLUSH_CONFIRM +common/msg_ids.py, Enum, MsgIds, MSG_ID_HD_CHEM_DISINFECT_FLUSH_CONFIRM_RESPONSE common/msg_ids.py, Enum, MsgIds, MSG_ID_CAN_ERROR_COUNT common/msg_ids.py, Enum, MsgIds, MSG_ID_TESTER_LOGIN_REQUEST common/msg_ids.py, Enum, MsgIds, MSG_ID_DIAL_OUT_FLOW_SET_PT_OVERRIDE