Index: dialin/common/msg_ids.py =================================================================== diff -u -r5400dea744738a3fed51b246038c93ebffcd914a -r3fe5704990dd6a50e0954126687d70f2a3545e0c --- dialin/common/msg_ids.py (.../msg_ids.py) (revision 5400dea744738a3fed51b246038c93ebffcd914a) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision 3fe5704990dd6a50e0954126687d70f2a3545e0c) @@ -188,6 +188,9 @@ MSG_ID_DG_EVENT = 0xA5 MSG_ID_DG_DIALYSATE_FLOW_METER_DATA = 0xA6 MSG_ID_DG_ALARM_INFO = 0xA7 + MSG_ID_HD_RESERVOIRS_DATA = 0xA8 + MSG_ID_HD_REQUEST_DG_CONCENTRATE_MIXING_RATIOS = 0xA9 + MSG_ID_DG_CONCENTRATE_MIXING_RATIOS_DATA = 0xAA MSG_ID_CAN_ERROR_COUNT = 0X999 Index: dialin/dg/reservoirs.py =================================================================== diff -u -r8474f8e345f165187d4dde17840575ee4e98a9b4 -r3fe5704990dd6a50e0954126687d70f2a3545e0c --- dialin/dg/reservoirs.py (.../reservoirs.py) (revision 8474f8e345f165187d4dde17840575ee4e98a9b4) +++ dialin/dg/reservoirs.py (.../reservoirs.py) (revision 3fe5704990dd6a50e0954126687d70f2a3545e0c) @@ -15,22 +15,26 @@ ############################################################################ import struct from logging import Logger +from enum import unique from ..common.msg_defs import MsgIds, MsgFieldPositions from ..protocols.CAN import DenaliMessage, DenaliChannels -from ..utils.base import AbstractSubSystem, publish +from ..utils.base import AbstractSubSystem, publish, DialinEnum from ..utils.conversions import integer_to_bytearray +@unique +class DGReservoirsNames(DialinEnum): + # Reservoir IDs + RESERVOIR1 = 0 + RESERVOIR2 = 1 + + class DGReservoirs(AbstractSubSystem): """ DG interface containing reservoir related commands. """ - # Reservoir IDs - RESERVOIR1 = 0 - RESERVOIR2 = 1 - def __init__(self, can_interface, logger: Logger): """ @@ -47,7 +51,7 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_reservoirs_sync) - self.active_reservoir = self.RESERVOIR1 + self.active_reservoir = 0 self.fill_to_vol_ml = 0 self.drain_to_vol_ml = 0 @@ -98,11 +102,7 @@ return True - @publish([ - "active_reservoir", - "fill_to_vol_ml", - "drain_to_vol_ml" - ]) + @publish(["active_reservoir", "fill_to_vol_ml", "drain_to_vol_ml"]) def _handler_reservoirs_sync(self, message): """ Handles published reservoir data messages. Reservoir data are captured @@ -112,13 +112,9 @@ @return: none """ - res = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) - fil = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) - dra = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) - - self.active_reservoir = res[0] - self.fill_to_vol_ml = fil[0] - self.drain_to_vol_ml = dra[0] + self.active_reservoir = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + self.fill_to_vol_ml = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + self.drain_to_vol_ml = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] Index: dialin/hd/hemodialysis_device.py =================================================================== diff -u -r5400dea744738a3fed51b246038c93ebffcd914a -r3fe5704990dd6a50e0954126687d70f2a3545e0c --- dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision 5400dea744738a3fed51b246038c93ebffcd914a) +++ dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision 3fe5704990dd6a50e0954126687d70f2a3545e0c) @@ -43,6 +43,7 @@ from .watchdog import HDWatchdog from ..common.hd_defs import HDOpModes from .hd_events import HDEvents +from .reservoirs import HDReservoirs from ..common.msg_defs import MsgIds, MsgFieldPositions from ..protocols.CAN import DenaliMessage, DenaliCanMessenger, DenaliChannels from ..utils.base import AbstractSubSystem, publish, LogManager @@ -128,6 +129,7 @@ self.fans = HDFans(self.can_interface, self.logger) self.watchdog = HDWatchdog(self.can_interface, self.logger) self.hd_events = HDEvents(self.can_interface, self.logger) + self.hd_reservoirs = HDReservoirs(self.can_interface, self.logger) def get_operation_mode(self): """ Index: dialin/hd/reservoirs.py =================================================================== diff -u --- dialin/hd/reservoirs.py (revision 0) +++ dialin/hd/reservoirs.py (revision 3fe5704990dd6a50e0954126687d70f2a3545e0c) @@ -0,0 +1,56 @@ + + +import struct +from logging import Logger +from enum import unique + +from ..common.msg_defs import MsgIds, MsgFieldPositions +from ..protocols.CAN import DenaliMessage, DenaliChannels +from ..utils.base import AbstractSubSystem, publish, DialinEnum +from ..utils.conversions import integer_to_bytearray + + +@unique +class HDReservoirStates(DialinEnum): + + TREATMENT_RESERVOIR_MGMT_START_STATE = 0 + TREATMENT_RESERVOIR_MGMT_DRAIN_RESERVOIR_STATE = 1 + TREATMENT_RESERVOIR_MGMT_WAIT_TO_FILL_STATE = 2 + TREATMENT_RESERVOIR_MGMT_FILL_RESERVOIR_STATE = 3 + TREATMENT_RESERVOIR_MGMT_WAIT_FOR_FILL_SETTLE_STATE = 4 + TREATMENT_RESERVOIR_MGMT_WAIT_FOR_SWITCH_SETTLE_STATE = 5 + NUM_OF_TREATMENT_RESERVOIR_MGMT_STATES = 6 + + +class HDReservoirs(AbstractSubSystem): + """ + HD interface containing reservoir related commands. + """ + + def __init__(self, can_interface, logger: Logger): + + super().__init__() + self.can_interface = can_interface + self.logger = logger + + if self.can_interface is not None: + channel_id = DenaliChannels.hd_sync_broadcast_ch_id + msg_id = MsgIds.MSG_ID_HD_RESERVOIRS_DATA.value + self.can_interface.register_receiving_publication_function(channel_id, msg_id, + self._handler_reservoirs_sync) + + self.reservoir_state = 0 + + @publish(["reservoir_state"]) + def _handler_reservoirs_sync(self, message): + """ + Handles published reservoir data messages. Reservoir data are captured + for reference. + + @param message: published reservoir data message + @return: none + """ + + self._reservoir_state = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + Index: tests/dg_heat_and_chemical_disinfect_test.py =================================================================== diff -u -r7e81883289d1e8c50bb3ae2d766cdb1daf75cfa5 -r3fe5704990dd6a50e0954126687d70f2a3545e0c --- tests/dg_heat_and_chemical_disinfect_test.py (.../dg_heat_and_chemical_disinfect_test.py) (revision 7e81883289d1e8c50bb3ae2d766cdb1daf75cfa5) +++ tests/dg_heat_and_chemical_disinfect_test.py (.../dg_heat_and_chemical_disinfect_test.py) (revision 3fe5704990dd6a50e0954126687d70f2a3545e0c) @@ -29,6 +29,8 @@ from dialin.common.hd_defs import HDOpModes, HDOpSubModes from dialin.common.dg_defs import DGEventList from dialin.common.hd_defs import HDEventList +from dialin.hd.reservoirs import HDReservoirStates +from dialin.dg.reservoirs import DGReservoirsNames from time import sleep from datetime import datetime import sys @@ -71,10 +73,10 @@ def get_hd_run_info(): - info = ('HD_op_mode, {}, HD_sub_mode, {}, Op, {}, Sub, {}, '.format(HDOpModes(hd.hd_operation_mode).name, - hd.hd_operation_sub_mode, - hd.hd_events.get_hd_events(HDEventList(1).value), - hd.hd_events.get_hd_events(HDEventList(2).value))) + info = ('HD_op_mode, {}, HD_sub_mode, {}, HD_rsrvr_state, {}, Active_rsrvr, {}, ' + .format(HDOpModes(hd.hd_operation_mode).name, hd.hd_operation_sub_mode, + HDReservoirStates(hd.hd_reservoirs.reservoir_state).name, + DGReservoirsNames(dg.reservoirs.active_reservoir).name)) return info @@ -575,15 +577,15 @@ # run_chemical_disinfect() - run_dg() + # run_dg() # run_ro_pump_duty_cycles() # cmd_set_disinfect_ui_screen() # cmd_test_heaters() - #collect_treatment_data() + collect_treatment_data() #collect_hd_treatment() Index: tests/test_flush.py =================================================================== diff -u -rbe5fbabd50dc31e5e5a5e4b99893fb8b92d016bd -r3fe5704990dd6a50e0954126687d70f2a3545e0c --- tests/test_flush.py (.../test_flush.py) (revision be5fbabd50dc31e5e5a5e4b99893fb8b92d016bd) +++ tests/test_flush.py (.../test_flush.py) (revision 3fe5704990dd6a50e0954126687d70f2a3545e0c) @@ -111,7 +111,7 @@ complete_counter = 1 f = open("/home/fw/projects/dialin/tests/flush_mode.log", "w") #dg.hd_proxy.cmd_start_stop_dg_flush() - dg.cmd_dg_software_reset_request() + #dg.cmd_dg_software_reset_request() try: while True: