Index: dialin/dg/dialysate_generator.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -27,7 +27,7 @@ DenaliMessage, DenaliChannels) -from ..utils.base import _AbstractSubSystem, _publish +from ..utils.base import _AbstractSubSystem, _publish, _LogManager class DG(_AbstractSubSystem): @@ -85,20 +85,28 @@ DG_POST_STATE_FAILED = 6 # POST failed state NUM_OF_DG_POST_STATES = 7 # Number of initialize & POST mode states - def __init__(self, can_interface="can0"): + def __init__(self, can_interface="can0", log_level=None): """ Initializes the DG object + For example: dg_object = DG(can_interface='can0') or - dg_object = DG('can0') + dg_object = DG(can_interface="can0", log_level="DEBUG") + Possible log levels: + ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL", "CAN_ONLY", "PRINT_ONLY"] + @param can_interface: string with can bus name, e.g. "can0" """ super().__init__() + self._log_manager = _LogManager(log_level=log_level, log_filepath=self.__class__.__name__+".log") + self.logger = self._log_manager.logger # Create listener - self.can_interface = DenaliCanMessenger(can_interface=can_interface) + self.can_interface = DenaliCanMessenger(can_interface=can_interface, + logger=self.logger, + log_can=self._log_manager.log_level == "CAN_ONLY") self.can_interface.start() # register handler for HD operation mode broadcast messages @@ -118,15 +126,15 @@ self.dg_operation_sub_mode = 0 # Create command groups - self.hd_proxy = DGHDProxy(self.can_interface) - self.load_cells = DGLoadCells(self.can_interface) - self.pressures = DGPressures(self.can_interface) - self.reservoirs = DGReservoirs(self.can_interface) - self.valves = DGValves(self.can_interface) - self.ro_pump = DGROPump(self.can_interface) - self.drain_pump = DGDrainPump(self.can_interface) - self.heaters = Heaters(self.can_interface) - self.temperature_sensors = TemperatureSensors(self.can_interface) + self.hd_proxy = DGHDProxy(self.can_interface, self.logger) + self.load_cells = DGLoadCells(self.can_interface, self.logger) + self.pressures = DGPressures(self.can_interface, self.logger) + self.reservoirs = DGReservoirs(self.can_interface, self.logger) + self.valves = DGValves(self.can_interface, self.logger) + self.ro_pump = DGROPump(self.can_interface, self.logger) + self.drain_pump = DGDrainPump(self.can_interface, self.logger) + self.heaters = Heaters(self.can_interface, self.logger) + self.temperature_sensors = TemperatureSensors(self.can_interface, self.logger) def get_version(self): """ @@ -176,7 +184,7 @@ if len(major) > 0 and len(minor) > 0 and len(micro) > 0 and len(build) > 0: self.dg_version = f"v{major[0]}.{minor[0]}.{micro[0]}-{build[0]}" - self.print_and_log(self.dg_version) + self.logger.debug(self.dg_version) return self.dg_version @@ -210,19 +218,19 @@ message_id=self.MSG_ID_LOGIN_TO_DG, payload=list(map(int, map(ord, self.DG_LOGIN_PASSWORD)))) - self.print_and_log("login") + self.logger.info("Logging in to the DG...") # Send message received_message = self.can_interface.send(message) if received_message is not None: if received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] == 1: - self.print_and_log("Logged In") + self.logger.info("Successfully logged in to the DG.") else: - self.print_and_log("Log In Failed.") + self.logger.error("Log In Failed.") return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.error("Timeout!!!!") return False def cmd_ui_request_dg_version(self): @@ -234,7 +242,7 @@ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, message_id=self.MSG_ID_DG_REQUEST_DG_VERSION) - self.print_and_log("Sending Dialin request for version to DG") + self.logger.debug("Sending Dialin request for version to DG") self.can_interface.send(message, 0) @@ -251,18 +259,18 @@ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, message_id=self.MSG_ID_DG_SAFETY_SHUTDOWN_OVERRIDE) - self.print_and_log("overriding DG safety shutdown") + self.logger.debug("overriding DG safety shutdown") # Send message received_message = self.can_interface.send(message) if received_message is not None: if received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] == 1: - self.print_and_log("Safety shutdown signal overridden") + self.logger.debug("Safety shutdown signal overridden") else: - self.print_and_log("Safety shutdown signal override failed.") + self.logger.debug("Safety shutdown signal override failed.") return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/dg/drain_pump.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/dg/drain_pump.py (.../drain_pump.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/dg/drain_pump.py (.../drain_pump.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -38,15 +38,14 @@ START_POS_DAC = END_POS_SET_SPD END_POS_DAC = START_POS_DAC + 4 - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): """ DGDrainPump constructor - @param outer_instance: reference to the DG (outer) class. """ super().__init__() - self.can_interface = can_interface + self.logger = logger if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id @@ -107,24 +106,24 @@ message_id=self.MSG_ID_DG_DRAIN_PUMP_SET_SPEED_OVERRIDE, payload=payload) - self.print_and_log("override drain pump speed set point") + self.logger.debug("override drain pump speed set point") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(speed) - self.print_and_log("Drain pump set point overridden to " + str_res + " RPM: " + + self.logger.debug("Drain pump set point overridden to " + str_res + " RPM: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_drain_pump_data_broadcast_interval_override(self, ms, reset=NO_RESET): @@ -144,23 +143,23 @@ message_id=self.MSG_ID_DG_DRAIN_PUMP_BROADAST_INTERVAL_OVERRIDE, payload=payload) - self.print_and_log("override drain pump data broadcast interval") + self.logger.debug("override drain pump data broadcast interval") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(mis) - self.print_and_log( + self.logger.debug( "Drain pump data broadcast interval overridden to " + str_res + " ms: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/dg/hd_proxy.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -37,13 +37,14 @@ RESERVOIR1 = 0 RESERVOIR2 = 1 - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): """ @param can_interface: Denali CAN Messenger object """ super().__init__() self.can_interface = can_interface + self.logger = logger def cmd_switch_reservoirs(self, reservoirID=RESERVOIR1): """ @@ -64,7 +65,7 @@ message_id=self.MSG_ID_HD_SWITCH_RESERVOIRS_CMD, payload=payload) - self.print_and_log("switch reservoirs cmd sent to DG") + self.logger.debug("switch reservoirs cmd sent to DG") # Send message received_message = self.can_interface.send(message) @@ -74,7 +75,7 @@ # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_fill(self, volume=1500): @@ -92,7 +93,7 @@ message_id=self.MSG_ID_HD_FILL_CMD, payload=payload) - self.print_and_log("fill cmd sent to DG") + self.logger.debug("fill cmd sent to DG") # Send message received_message = self.can_interface.send(message) @@ -102,7 +103,7 @@ # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_drain(self, volume=200): @@ -120,7 +121,7 @@ message_id=self.MSG_ID_HD_DRAIN_CMD, payload=payload) - self.print_and_log("drain cmd sent to DG") + self.logger.debug("drain cmd sent to DG") # Send message received_message = self.can_interface.send(message) @@ -130,7 +131,7 @@ # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_start_stop_dg(self, start=True): @@ -153,7 +154,7 @@ message_id=self.MSG_ID_HD_START_STOP_DG_CMD, payload=payload) - self.print_and_log(str+"DG cmd sent to DG") + self.logger.debug(str+"DG cmd sent to DG") # Send message received_message = self.can_interface.send(message) @@ -163,7 +164,7 @@ # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_start_stop_trimmer_heater(self, start=True): @@ -186,7 +187,7 @@ message_id=self.MSG_ID_HD_START_STOP_DG_TRIMMER_HEATER, payload=payload) - self.print_and_log(str+"DG trimmer heater cmd sent to DG") + self.logger.debug(str+"DG trimmer heater cmd sent to DG") # Send message received_message = self.can_interface.send(message) @@ -196,6 +197,6 @@ # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/dg/heaters.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/dg/heaters.py (.../heaters.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/dg/heaters.py (.../heaters.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -37,11 +37,12 @@ START_POS_TRIMMER_HEATER = END_POS_SMALL_PRI_HEATER END_POS_TRIMMER_HEATER = START_POS_TRIMMER_HEATER + 4 - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): super().__init__() - self.can_interface = can_interface + self.logger = logger + self.main_primary_heater_pwm = 0 self.small_primary_heater_pwm = 0 self.trimmer_heater_pwm = 0 @@ -82,7 +83,7 @@ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, message_id=self.MSG_ID_START_STOP_PRIMARY_HEATER, payload=payload) - self.print_and_log("Starting the Primary heater") + self.logger.debug("Starting the Primary heater") self.can_interface.send(message, 0) def cmd_stop_primary_heater(self): @@ -96,7 +97,7 @@ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, message_id=self.MSG_ID_START_STOP_PRIMARY_HEATER, payload=payload) - self.print_and_log("Stopping the Primary heater") + self.logger.debug("Stopping the Primary heater") self.can_interface.send(message, 0) def cmd_start_trimmer_heater(self): @@ -110,7 +111,7 @@ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, message_id=self.MSG_ID_DG_START_STOP_TRIMMER_HEATER_CMD, payload=payload) - self.print_and_log("Starting the Trimmer heater") + self.logger.debug("Starting the Trimmer heater") self.can_interface.send(message, 0) def cmd_stop_trimmer_heater(self): @@ -124,7 +125,7 @@ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, message_id=self.MSG_ID_DG_START_STOP_TRIMMER_HEATER_CMD, payload=payload) - self.print_and_log("Stopping the Trimmer heater") + self.logger.debug("Stopping the Trimmer heater") self.can_interface.send(message, 0) def cmd_set_dialysate_target_temperature(self, pirmary_target_temp=37.0, trimmer_target_temp=38.0): @@ -141,7 +142,7 @@ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, message_id=self.MSG_ID_SET_DG_DIALYSATE_TEMP_TARGETS, payload=payload) - self.print_and_log("Setting Primary Heater to {} C and Trimmer Heater to {} C".format(pirmary_target_temp, trimmer_target_temp)) + self.logger.debug("Setting Primary Heater to {} C and Trimmer Heater to {} C".format(pirmary_target_temp, trimmer_target_temp)) self.can_interface.send(message, 0) def cmd_heaters_broadcast_interval_override(self, ms, reset=NO_RESET): @@ -160,7 +161,7 @@ message_id=self.MSG_ID_HEATERS_PUBLISH_INTERVAL_ORVERRIDE, payload=payload) - self.print_and_log("Sending {} ms publish interval to the Heaters module".format(ms)) + self.logger.debug("Sending {} ms publish interval to the Heaters module".format(ms)) # Send message received_message = self.can_interface.send(message) @@ -169,7 +170,7 @@ # Response payload is OK or not return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/dg/load_cells.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/dg/load_cells.py (.../load_cells.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/dg/load_cells.py (.../load_cells.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -50,14 +50,14 @@ LOAD_CELL_B1 = 2 LOAD_CELL_B2 = 3 - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): """ @param can_interface: Denali Can Messenger object """ super().__init__() - self.can_interface = can_interface + self.logger = logger if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id @@ -127,7 +127,7 @@ message_id=self.MSG_ID_DG_LOAD_CELL_OVERRIDE, payload=payload) - self.print_and_log("override load cell weight value for sensor " + str(sensor)) + self.logger.debug("override load cell weight value for sensor " + str(sensor)) # Send message received_message = self.can_interface.send(message) @@ -137,7 +137,7 @@ # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_load_cell_data_broadcast_interval_override(self, ms, reset=NO_RESET): @@ -157,7 +157,7 @@ message_id=self.MSG_ID_DG_LOAD_CELL_DATA_BROADCAST_INTERVAL_OVERRIDE, payload=payload) - self.print_and_log("override DG load cell broadcast interval") + self.logger.debug("override DG load cell broadcast interval") # Send message received_message = self.can_interface.send(message) @@ -168,11 +168,11 @@ str_res = "reset back to normal: " else: str_res = str(ms) + " ms: " - self.print_and_log("Load cell data broadcast interval overridden to " + str_res + + self.logger.debug("Load cell data broadcast interval overridden to " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/dg/pressures.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/dg/pressures.py (.../pressures.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/dg/pressures.py (.../pressures.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -47,15 +47,15 @@ PRESSURE_SENSOR_DRAIN_PUMP_INLET = 2 PRESSURE_SENSOR_DRAIN_PUMP_OUTLET = 3 - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): """ @param can_interface: The DenaliCANMessenger object """ super().__init__() - self.can_interface = can_interface + self.logger = logger if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id @@ -133,7 +133,7 @@ message_id=self.MSG_ID_DG_PRESSURE_OVERRIDE, payload=payload) - self.print_and_log("override pressure sensor") + self.logger.debug("override pressure sensor") # Send message received_message = self.can_interface.send(message) @@ -143,7 +143,7 @@ # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_pressure_broadcast_interval_override(self, ms, reset=NO_RESET): @@ -164,7 +164,7 @@ message_id=self.MSG_ID_DG_PRESSURE_DATA_BROADCAST_INTERVAL_OVERRIDE, payload=payload) - self.print_and_log("override pressure data broadcast interval") + self.logger.debug("override pressure data broadcast interval") # Send message received_message = self.can_interface.send(message) @@ -174,5 +174,5 @@ # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/dg/reservoirs.py =================================================================== diff -u -rca7f6eff65d988c19ccce8cde5efd1ef537e2095 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/dg/reservoirs.py (.../reservoirs.py) (revision ca7f6eff65d988c19ccce8cde5efd1ef537e2095) +++ dialin/dg/reservoirs.py (.../reservoirs.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -40,15 +40,15 @@ RESERVOIR1 = 0 RESERVOIR2 = 1 - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): """ @param can_interface: The DenaliCANMessenger object """ super().__init__() - self.can_interface = can_interface + self.logger = logger if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id Index: dialin/dg/ro_pump.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/dg/ro_pump.py (.../ro_pump.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/dg/ro_pump.py (.../ro_pump.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -43,14 +43,14 @@ START_POS_PWM = END_POS_MEAS_FLOW END_POS_PWM = START_POS_PWM + 4 - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): """ DGROPump constructor """ super().__init__() - self.can_interface = can_interface + self.logger = logger if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id @@ -125,25 +125,25 @@ message_id=self.MSG_ID_DG_RO_PUMP_PRESSURE_SET_PT_OVERRIDE, payload=payload) - self.print_and_log("override RO pump pressure set point") + self.logger.debug("override RO pump pressure set point") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(pressure) - self.print_and_log( + self.logger.debug( "RO pump pressure set point overridden to " + str_res + " PSI: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_ro_flow_rate_override(self, flow, reset=NO_RESET): @@ -163,25 +163,25 @@ message_id=self.MSG_ID_DG_RO_FLOW_RATE_OVERRIDE, payload=payload) - self.print_and_log("override RO pump pressure set point") + self.logger.debug("override RO pump pressure set point") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(flo) - self.print_and_log( + self.logger.debug( "RO flow rate overridden to " + str_res + " L/min: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_ro_pump_data_broadcast_interval_override(self, ms, reset=NO_RESET): @@ -201,24 +201,24 @@ message_id=self.MSG_ID_DG_RO_PUMP_BROADCAST_INTERVAL_OVERRIDE, payload=payload) - self.print_and_log("override RO pump data broadcast interval") + self.logger.debug("override RO pump data broadcast interval") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(mis) - self.print_and_log( + self.logger.debug( "RO pump data broadcast interval overridden to " + str_res + " ms: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/dg/temperature_sensors.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/dg/temperature_sensors.py (.../temperature_sensors.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/dg/temperature_sensors.py (.../temperature_sensors.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -64,12 +64,12 @@ START_POS_TRI_INTERNAL_TEMP = END_POS_PRI_INTERNAL_TEMP END_POS_TRI_INTERNAL_TEMP = START_POS_TRI_INTERNAL_TEMP + 4 - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): super().__init__() self.can_interface = can_interface - + self.logger = logger self.inlet_primary = 0.0 self.outlet_primary = 0.0 self.cd1 = 0.0 @@ -161,7 +161,7 @@ message_id=self.MSG_ID_TEMPERATURE_SENSORS_PUBLISH_INTERVAL_OVERRIDE, payload=payload) - self.print_and_log("Sending {} ms publish interval to the Temperature Sensors module".format(ms)) + self.logger.debug("Sending {} ms publish interval to the Temperature Sensors module".format(ms)) # Send message received_message = self.can_interface.send(message) @@ -170,7 +170,7 @@ # Response payload is OK or not return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_temperature_sensors_override_value(self, sensor_index, sensor_value, reset=NO_RESET): @@ -191,7 +191,7 @@ message_id=self.MSG_ID_TEMPERATURE_SENSORS_VALUE_OVERRIDE, payload=payload) - self.print_and_log("Setting sensor {} to {} C".format(sensor_index, sensor_value)) + self.logger.debug("Setting sensor {} to {} C".format(sensor_index, sensor_value)) # Send message received_message = self.can_interface.send(message) @@ -201,6 +201,6 @@ # Response payload is OK or not return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/dg/valves.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/dg/valves.py (.../valves.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/dg/valves.py (.../valves.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -55,16 +55,15 @@ VALVE_RESERVOIR_2 = 11 # VR2 VALVE_PRODUCTION_DRAIN = 12 # VPD - - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): """ @param can_interface: Denali CAN Messenger object """ super().__init__() - self.can_interface = can_interface + self.logger = logger if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id @@ -146,7 +145,7 @@ 'valve_state_VRO': {'id': 3, 'state': True}, 'valve_state_VSP': {'id': 9, 'state': True}, 'valve_states_all': 8191} - >>> self.print_and_log(dg.valves.sort_by_id(observation)) + >>> self.logger.debug(dg.valves.sort_by_id(observation)) ('valve_state_VRF', 0, True) ('valve_state_VRI', 1, True) ('valve_state_VRD', 2, True) @@ -259,7 +258,7 @@ message_id=self.MSG_ID_DG_VALVE_STATE_OVERRIDE, payload=payload) - self.print_and_log("override valve state") + self.logger.debug("override valve state") # Send message received_message = self.can_interface.send(message) @@ -269,7 +268,7 @@ # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_valve_broadcast_interval_override(self, ms, reset=NO_RESET): @@ -290,7 +289,7 @@ message_id=self.MSG_ID_DG_VALVES_STATES_PUBLISH_INTERVAL_OVERRIDE, payload=payload) - self.print_and_log("override valves states publish interval") + self.logger.debug("override valves states publish interval") # Send message received_message = self.can_interface.send(message) @@ -300,5 +299,5 @@ # Response payload is OK or not return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/hd/alarms.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/hd/alarms.py (.../alarms.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/hd/alarms.py (.../alarms.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -20,6 +20,7 @@ from .constants import RESET, NO_RESET from collections import OrderedDict import struct +from logging import Logger class HDAlarms(_AbstractSubSystem): @@ -127,12 +128,13 @@ ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_TOO_HIGH = 58 ALARM_ID_INLET_WATER_TEMPERATURE_OUT_OF_RANGE = 59 - def __init__(self, can_interface): + def __init__(self, can_interface, logger: Logger): """ @param can_interface: Denali Can Messenger object """ super().__init__() self.can_interface = can_interface + self.logger = logger if self.can_interface is not None: channel_id = DenaliChannels.hd_alarm_broadcast_ch_id @@ -308,7 +310,7 @@ # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: @@ -336,24 +338,24 @@ message_id=self.MSG_ID_HD_ALARM_TIME_OVERRIDE, payload=payload) - self.print_and_log("override alarm time since activated") + self.logger.debug("override alarm time since activated") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(time_ms) - self.print_and_log("Alarm time since activated overridden to " + str_res + " ms: " + str( + self.logger.debug("Alarm time since activated overridden to " + str_res + " ms: " + str( received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_alarm_lamp_pattern_override(self, pattern, reset=NO_RESET): @@ -381,14 +383,14 @@ message_id=self.MSG_ID_HD_ALARM_LAMP_OVERRIDE, payload=payload) - self.print_and_log("Override Alarm Lamp Pattern") + self.logger.debug("Override Alarm Lamp Pattern") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - self.print_and_log(received_message) + self.logger.debug(received_message) if reset == RESET: str_pat = "reset back to normal" elif pattern == self.HD_ALARM_LAMP_PATTERN_OFF: @@ -405,12 +407,12 @@ str_pat = "low" else: str_pat = "manual" - self.print_and_log("Alarm lamp pattern overridden to " + str_pat + ":" + + self.logger.debug("Alarm lamp pattern overridden to " + str_pat + ":" + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def get_current_alarms_state(self): Index: dialin/hd/blood_flow.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/hd/blood_flow.py (.../blood_flow.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/hd/blood_flow.py (.../blood_flow.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -56,15 +56,15 @@ START_POS_PWM_DC = END_POS_MEAS_MC_CURR END_POS_PWM_DC = START_POS_PWM_DC + 4 - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): """ HD_BloodFlow constructor @param outer_instance: reference to the HD (outer) class. """ 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 @@ -192,25 +192,25 @@ message_id=self.MSG_ID_HD_BLOOD_FLOW_SET_RATE_OVERRIDE, payload=payload) - self.print_and_log("override blood flow set point") + self.logger.debug("override blood flow set point") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(flow) - self.print_and_log( + self.logger.debug( "Blood flow set point overridden to " + str_res + " mL/min: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_blood_flow_measured_override(self, flow, reset=NO_RESET): @@ -230,24 +230,24 @@ message_id=self.MSG_ID_HD_BLOOD_FLOW_MEAS_RATE_OVERRIDE, payload=payload) - self.print_and_log("override measured blood flow") + self.logger.debug("override measured blood flow") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(flow) - self.print_and_log("Blood flow (measured)) overridden to " + str_res + " mL/min: " + + self.logger.debug("Blood flow (measured)) overridden to " + str_res + " mL/min: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_blood_pump_mc_measured_speed_override(self, speed, reset=NO_RESET): @@ -268,24 +268,24 @@ message_id=self.MSG_ID_HD_BLOOD_PUMP_MC_MEAS_SPEED_OVERRIDE, payload=payload) - self.print_and_log("override measured blood pump motor controller speed") + self.logger.debug("override measured blood pump motor controller speed") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(speed) - self.print_and_log("Blood pump MC speed (measured) overridden to " + str_res + " RPM: " + + self.logger.debug("Blood pump MC speed (measured) overridden to " + str_res + " RPM: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_blood_pump_measured_current_override(self, curr, reset=NO_RESET): @@ -305,24 +305,24 @@ message_id=self.MSG_ID_HD_BLOOD_PUMP_MC_MEAS_CURRENT_OVERRIDE, payload=payload) - self.print_and_log("override measured blood pump motor controller current") + self.logger.debug("override measured blood pump motor controller current") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(curr) - self.print_and_log("Blood pump MC current (measured) overridden to " + str_res + " mA: " + + self.logger.debug("Blood pump MC current (measured) overridden to " + str_res + " mA: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_blood_pump_measured_speed_override(self, speed, reset=NO_RESET): @@ -343,24 +343,24 @@ message_id=self.MSG_ID_HD_BLOOD_PUMP_MEAS_SPEED_OVERRIDE, payload=payload) - self.print_and_log("override measured blood pump speed") + self.logger.debug("override measured blood pump speed") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(speed) - self.print_and_log("Blood pump speed (measured) overridden to " + str_res + " RPM: " + + self.logger.debug("Blood pump speed (measured) overridden to " + str_res + " RPM: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_blood_pump_rotor_measured_speed_override(self, speed, reset=NO_RESET): @@ -381,24 +381,24 @@ message_id=self.MSG_ID_HD_BLOOD_PUMP_ROTOR_MEAS_SPEED_OVERRIDE, payload=payload) - self.print_and_log("override measured blood pump rotor speed") + self.logger.debug("override measured blood pump rotor speed") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(speed) - self.print_and_log("Blood pump rotor speed (measured) overridden to " + str_res + " RPM: " + + self.logger.debug("Blood pump rotor speed (measured) overridden to " + str_res + " RPM: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_blood_flow_broadcast_interval_override(self, ms, reset=NO_RESET): @@ -418,22 +418,22 @@ message_id=self.MSG_ID_HD_BLOOD_FLOW_PUBLISH_INTERVAL_OVERRIDE, payload=payload) - self.print_and_log("override blood flow broadcast interval") + self.logger.debug("override blood flow broadcast interval") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal: " else: str_res = str(ms) + " ms: " - self.print_and_log("Blood flow broadcast interval overridden to " + str_res + + self.logger.debug("Blood flow broadcast interval overridden to " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/hd/buttons.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/hd/buttons.py (.../buttons.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/hd/buttons.py (.../buttons.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -29,16 +29,16 @@ MSG_ID_HD_OFF_BUTTON_OVERRIDE = 0x8002 MSG_ID_HD_STOP_BUTTON_OVERRIDE = 0x8003 - def __init__(self, can_interface): + def __init__(self, can_interface, logger): """ HD_Buttons constructor @param can_interface: the denali can interface object """ super().__init__() - self.can_interface = can_interface + self.logger = logger def cmd_off_button_override(self, state, reset=NO_RESET): """ @@ -58,7 +58,7 @@ message_id=self.MSG_ID_HD_OFF_BUTTON_OVERRIDE, payload=payload) - self.print_and_log("override off button") + self.logger.debug("override off button") # Send message received_message = self.can_interface.send(message) @@ -70,12 +70,12 @@ else: str_res = ("pressed" if state != 0 else "released") - self.print_and_log("Off button overridden to " + str_res + ":" + + self.logger.debug("Off button overridden to " + str_res + ":" + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_stop_button_override(self, state, reset=NO_RESET): @@ -96,7 +96,7 @@ message_id=self.MSG_ID_HD_STOP_BUTTON_OVERRIDE, payload=payload) - self.print_and_log("override stop button") + self.logger.debug("override stop button") # Send message received_message = self.can_interface.send(message) @@ -107,11 +107,11 @@ str_res = "reset back to normal" else: str_res = ("pressed" if state != 0 else "released") - self.print_and_log("Stop button overridden to " + str_res + ":" + + self.logger.debug("Stop button overridden to " + str_res + ":" + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message["message"][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/hd/dialysate_inlet_flow.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/hd/dialysate_inlet_flow.py (.../dialysate_inlet_flow.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/hd/dialysate_inlet_flow.py (.../dialysate_inlet_flow.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -55,13 +55,14 @@ START_POS_PWM_DC = END_POS_MEAS_MC_CURR END_POS_PWM_DC = START_POS_PWM_DC + 4 - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): """ HD_DialysateFlow constructor """ 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 @@ -190,25 +191,25 @@ message_id=self.MSG_ID_HD_DIAL_IN_FLOW_SET_RATE_OVERRIDE, payload=payload) - self.print_and_log("override dialysate flow set point") + self.logger.debug("override dialysate flow set point") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(flow) - self.print_and_log( + self.logger.debug( "Dialysate flow set point overridden to " + str_res + " mL/min: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_inlet_flow_measured_override(self, flow, reset=NO_RESET): @@ -228,24 +229,24 @@ message_id=self.MSG_ID_HD_DIAL_IN_FLOW_MEAS_RATE_OVERRIDE, payload=payload) - self.print_and_log("override measured dialysate flow") + self.logger.debug("override measured dialysate flow") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(flow) - self.print_and_log("Dialysate flow (measured)) overridden to " + str_res + " mL/min: " + + self.logger.debug("Dialysate flow (measured)) overridden to " + str_res + " mL/min: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_inlet_pump_mc_measured_speed_override(self, speed, reset=NO_RESET): @@ -266,24 +267,24 @@ message_id=self.MSG_ID_HD_DIAL_IN_PUMP_MC_MEAS_SPEED_OVERRIDE, payload=payload) - self.print_and_log("override measured dialysate inlet pump motor controller speed") + self.logger.debug("override measured dialysate inlet pump motor controller speed") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(speed) - self.print_and_log("Dialysate pump MC speed (measured) overridden to " + str_res + " RPM: " + + self.logger.debug("Dialysate pump MC speed (measured) overridden to " + str_res + " RPM: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_inlet_pump_measured_current_override(self, curr, reset=NO_RESET): @@ -303,24 +304,24 @@ message_id=self.MSG_ID_HD_DIAL_IN_PUMP_MC_MEAS_CURRENT_OVERRIDE, payload=payload) - self.print_and_log("override measured dialysate inlet pump motor controller current") + self.logger.debug("override measured dialysate inlet pump motor controller current") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(curr) - self.print_and_log("Dialysate inlet pump MC current (measured) overridden to " + str_res + " mA: " + + self.logger.debug("Dialysate inlet pump MC current (measured) overridden to " + str_res + " mA: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_inlet_pump_measured_speed_override(self, speed, reset=NO_RESET): @@ -341,24 +342,24 @@ message_id=self.MSG_ID_HD_DIAL_IN_PUMP_MEAS_SPEED_OVERRIDE, payload=payload) - self.print_and_log("override measured dialysate inlet pump speed") + self.logger.debug("override measured dialysate inlet pump speed") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(speed) - self.print_and_log("Dialysate inlet pump speed (measured) overridden to " + str_res + " RPM: " + + self.logger.debug("Dialysate inlet pump speed (measured) overridden to " + str_res + " RPM: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_inlet_pump_rotor_measured_speed_override(self, speed, reset=NO_RESET): @@ -379,24 +380,24 @@ message_id=self.MSG_ID_HD_DIAL_IN_PUMP_ROTOR_MEAS_SPEED_OVERRIDE, payload=payload) - self.print_and_log("override measured dialysate inlet pump rotor speed") + self.logger.debug("override measured dialysate inlet pump rotor speed") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = str(speed) - self.print_and_log("Dialysate inlet pump rotor speed (measured) overridden to " + str_res + " RPM: " + + self.logger.debug("Dialysate inlet pump rotor speed (measured) overridden to " + str_res + " RPM: " + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_inlet_flow_broadcast_interval_override(self, ms, reset=NO_RESET): @@ -416,7 +417,7 @@ message_id=self.MSG_ID_HD_DIAL_IN_FLOW_PUBLISH_INTERVAL_OVERRIDE, payload=payload) - self.print_and_log("override dialysate inlet flow broadcast interval") + self.logger.debug("override dialysate inlet flow broadcast interval") # Send message received_message = self.can_interface.send(message) @@ -427,10 +428,10 @@ str_res = "reset back to normal: " else: str_res = str(ms) + " ms: " - self.print_and_log("Dialysate inlet flow broadcast interval overridden to " + str_res + + self.logger.debug("Dialysate inlet flow broadcast interval overridden to " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/hd/dialysate_outlet_flow.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/hd/dialysate_outlet_flow.py (.../dialysate_outlet_flow.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/hd/dialysate_outlet_flow.py (.../dialysate_outlet_flow.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -55,12 +55,13 @@ START_POS_PWM_DC = END_POS_MEAS_MC_CURR END_POS_PWM_DC = START_POS_PWM_DC + 4 - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): """ HDDialysateFlow constructor """ 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 @@ -188,25 +189,25 @@ message_id=self.MSG_ID_HD_DIAL_OUT_UF_REF_VOLUME_OVERRIDE, payload=payload) - self.print_and_log("override UF reference volume with " + str(refvol) + "mL.") + self.logger.debug("override UF reference volume with " + str(refvol) + "mL.") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal. " else: str_res = "overridden to " + str(refvol) + " mL. " - self.print_and_log( + self.logger.debug( "UF reference volume " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_outlet_measured_uf_volume_override(self, measvol, reset=NO_RESET): @@ -226,24 +227,24 @@ message_id=self.MSG_ID_HD_DIAL_OUT_UF_MEAS_VOLUME_OVERRIDE, payload=payload) - self.print_and_log("override measured UF volume with " + str(measvol) + " mL.") + self.logger.debug("override measured UF volume with " + str(measvol) + " mL.") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal. " else: str_res = "overridden to " + str(measvol) + " mL. " - self.print_and_log("UF measured volume " + str_res + + self.logger.debug("UF measured volume " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_outlet_pump_mc_measured_speed_override(self, speed, reset=NO_RESET): @@ -264,24 +265,24 @@ message_id=self.measured_dialysate_outlet_pump_mc_speed, payload=payload) - self.print_and_log("override measured dialysate outlet pump motor controller speed to " + str(spd) + " RPM.") + self.logger.debug("override measured dialysate outlet pump motor controller speed to " + str(spd) + " RPM.") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal. " else: str_res = "overridden to " + str(speed) + " RPM. " - self.print_and_log("Dialysate outlet pump MC speed (measured) " + str_res + + self.logger.debug("Dialysate outlet pump MC speed (measured) " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_outlet_pump_measured_current_override(self, curr, reset=NO_RESET): @@ -301,24 +302,24 @@ message_id=self.MSG_ID_HD_DIAL_OUT_PUMP_MC_MEAS_CURRENT_OVERRIDE, payload=payload) - self.print_and_log("override measured dialysate outlet pump motor controller current") + self.logger.debug("override measured dialysate outlet pump motor controller current") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal. " else: str_res = "overridden to " + str(curr) + " mA. " - self.print_and_log("Dialysate outlet pump MC current (measured) " + str_res + + self.logger.debug("Dialysate outlet pump MC current (measured) " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_outlet_pump_measured_speed_override(self, speed, reset=NO_RESET): @@ -339,24 +340,24 @@ message_id=self.MSG_ID_HD_DIAL_OUT_PUMP_MEAS_SPEED_OVERRIDE, payload=payload) - self.print_and_log("override measured dialysate outlet pump speed to " + str(speed) + " RPM.") + self.logger.debug("override measured dialysate outlet pump speed to " + str(speed) + " RPM.") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal. " else: str_res = "overridden to " + str(speed) + " RPM. " - self.print_and_log("Dialysate outlet pump speed (measured) " + str_res + + self.logger.debug("Dialysate outlet pump speed (measured) " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_outlet_pump_rotor_measured_speed_override(self, speed, reset=NO_RESET): @@ -377,24 +378,24 @@ message_id=self.MSG_ID_HD_DIAL_OUT_PUMP_ROTOR_MEAS_SPEED_OVERRIDE, payload=payload) - self.print_and_log("override measured dialysate outlet pump rotor speed to " + str(speed) + " RPM.") + self.logger.debug("override measured dialysate outlet pump rotor speed to " + str(speed) + " RPM.") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal. " else: str_res = "overridden to " + str(speed) + " RPM. " - self.print_and_log("Dialysate outlet pump rotor speed (measured) " + str_res + + self.logger.debug("Dialysate outlet pump rotor speed (measured) " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_outlet_flow_broadcast_interval_override(self, ms, reset=NO_RESET): @@ -414,24 +415,24 @@ message_id=self.MSG_ID_HD_DIAL_OUT_FLOW_PUBLISH_INTERVAL_OVERRIDE, payload=payload) - self.print_and_log("override dialysate outlet flow broadcast interval to " + str(ms) + " ms.") + self.logger.debug("override dialysate outlet flow broadcast interval to " + str(ms) + " ms.") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal. " else: str_res = "overridden to " + str(ms) + " ms. " - self.print_and_log("Dialysate outlet flow broadcast interval " + str_res + + self.logger.debug("Dialysate outlet flow broadcast interval " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_outlet_pump_load_cell_weight_override(self, weight, sensor, reset=NO_RESET): @@ -459,24 +460,24 @@ message_id=self.MSG_ID_HD_DIAL_OUT_LOAD_CELL_WEIGHT_OVERRIDE, payload=payload) - self.print_and_log("override measured load cell weight to " + str(weight) + " grams for load cell # " + str(sensor)) + self.logger.debug("override measured load cell weight to " + str(weight) + " grams for load cell # " + str(sensor)) # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal. " else: str_res = "overridden to " + str(weight) + " grams. " - self.print_and_log("Load cell # " + str(sensor) + " " + str_res + + self.logger.debug("Load cell # " + str(sensor) + " " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_set_load_cell_weights(self, r1p, r1b, r2p, r2b): @@ -500,7 +501,7 @@ message_id=self.MSG_ID_HD_LOAD_CELL_READINGS, payload=payload) - self.print_and_log("measured load cell weights set.") + self.logger.debug("measured load cell weights set.") # Send message self.can_interface.send(message, 0) Index: dialin/hd/hemodialysis_device.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -28,7 +28,7 @@ from ..protocols.CAN import (DenaliMessage, DenaliCanMessenger, DenaliChannels) -from ..utils.base import _AbstractSubSystem, _publish +from ..utils.base import _AbstractSubSystem, _publish, _LogManager class HD(_AbstractSubSystem): @@ -64,19 +64,27 @@ def __init__(self, can_interface="can0", log_level=None): """ - HD constructor using can bus + HD object provides test/service commands for the HD sub-system. + >> hd_object = HD('can0') + >> hd_object = HD(can_interface='can0', log_level="DEBUG") + + Possible log levels: + ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL", "CAN_ONLY", "PRINT_ONLY"] + @param can_interface: (str) CANBus interface name, e.g. "can0" - @return: HD object provides test/service commands for the HD sub-system. + @param log_level: (str) Logging level, defaults to None - >> hd_object = HD(can_interface='can0') - >> hd_object = HD('can0') """ super().__init__() + self._log_manager = _LogManager(log_level=log_level, log_filepath=self.__class__.__name__+".log") + self.logger = self._log_manager.logger # Create listener - self.can_interface = DenaliCanMessenger(can_interface=can_interface, log_level=log_level) + self.can_interface = DenaliCanMessenger(can_interface=can_interface, + logger=self.logger, + log_can=self._log_manager.log_level == "CAN_ONLY") self.can_interface.start() # register handler for HD operation mode broadcast messages @@ -91,16 +99,16 @@ self.hd_operation_sub_mode = 0 # Create command groups - self.alarms = HDAlarms(self.can_interface) - self.buttons = HDButtons(self.can_interface) - self.ui = HDUIProxy(self.can_interface) - self.rtc = HDRTC(self.can_interface) - self.watchdog = HDWatchdog(self.can_interface) - self.bloodflow = HDBloodFlow(self.can_interface) - self.dialysate_inlet_flow = HDDialysateInletFlow(self.can_interface) - self.dialysate_outlet_flow = HDDialysateOutletFlow(self.can_interface) - self.treatment = HDTreatment(self.can_interface) - self.pressure_occlusion = HDPressureOcclusion(self.can_interface) + self.alarms = HDAlarms(self.can_interface, self.logger) + self.buttons = HDButtons(self.can_interface, self.logger) + self.ui = HDUIProxy(self.can_interface, self.logger) + self.rtc = HDRTC(self.can_interface, self.logger) + self.watchdog = HDWatchdog(self.can_interface, self.logger) + self.bloodflow = HDBloodFlow(self.can_interface, self.logger) + self.dialysate_inlet_flow = HDDialysateInletFlow(self.can_interface, self.logger) + self.dialysate_outlet_flow = HDDialysateOutletFlow(self.can_interface, self.logger) + self.treatment = HDTreatment(self.can_interface, self.logger) + self.pressure_occlusion = HDPressureOcclusion(self.can_interface, self.logger) def get_operation_mode(self): """ @@ -139,19 +147,19 @@ message_id=self.MSG_ID_LOGIN_TO_HD, payload=list(map(int, map(ord, self.HD_LOGIN_PASSWORD)))) - self.print_and_log("Logging in...") + self.logger.debug("Logging in...") # Send message received_message = self.can_interface.send(message) if received_message is not None: if received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] == 1: - self.print_and_log("Success: Logged In") + self.logger.debug("Success: Logged In") else: - self.print_and_log("Failure: Log In Failed.") + self.logger.debug("Failure: Log In Failed.") return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Login Timeout!!!!") + self.logger.debug("Login Timeout!!!!") return False def cmd_hd_safety_shutdown_override(self): @@ -169,17 +177,17 @@ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, message_id=self.MSG_ID_HD_SAFETY_SHUTDOWN_OVERRIDE) - self.print_and_log("overriding HD safety shutdown") + self.logger.debug("overriding HD safety shutdown") # Send message received_message = self.can_interface.send(message) if received_message is not None: if received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] == 1: - self.print_and_log("Safety shutdown signal overridden") + self.logger.debug("Safety shutdown signal overridden") else: - self.print_and_log("Safety shutdown signal override failed.") + self.logger.debug("Safety shutdown signal override failed.") return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/hd/pressure_occlusion.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/hd/pressure_occlusion.py (.../pressure_occlusion.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/hd/pressure_occlusion.py (.../pressure_occlusion.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -48,13 +48,14 @@ START_POS_DOP_OCCL = END_POS_DIP_OCCL END_POS_DOP_OCCL = START_POS_DOP_OCCL + 4 - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): """ HDPressureOcclusion constructor """ 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 @@ -157,7 +158,7 @@ message_id=self.MSG_ID_HD_PRESSURE_ARTERIAL_OVERRIDE, payload=payload) - self.print_and_log("override measured arterial pressure") + self.logger.debug("override measured arterial pressure") # Send message received_message = self.can_interface.send(message) @@ -168,12 +169,12 @@ str_res = "reset back to normal. " else: str_res = str(pres) + " mmHg. " - self.print_and_log("Arterial pressure (measured)) overridden to " + str_res + + self.logger.debug("Arterial pressure (measured)) overridden to " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_venous_pressure_measured_override(self, pres, reset=NO_RESET): @@ -194,7 +195,7 @@ message_id=self.MSG_ID_HD_PRESSURE_VENOUS_OVERRIDE, payload=payload) - self.print_and_log("override measured venous pressure") + self.logger.debug("override measured venous pressure") # Send message received_message = self.can_interface.send(message) @@ -205,12 +206,12 @@ str_res = "reset back to normal. " else: str_res = str(pres) + " mmHg. " - self.print_and_log("Venous pressure (measured) overridden to " + str_res + + self.logger.debug("Venous pressure (measured) overridden to " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_blood_pump_measured_occlusion_override(self, occl, reset=NO_RESET): @@ -230,7 +231,7 @@ message_id=self.MSG_ID_HD_OCCLUSION_BLOOD_PUMP_OVERRIDE, payload=payload) - self.print_and_log("override measured blood pump occlusion pressure") + self.logger.debug("override measured blood pump occlusion pressure") # Send message received_message = self.can_interface.send(message) @@ -241,12 +242,12 @@ str_res = "reset back to normal. " else: str_res = str(occl) + " mmHg. " - self.print_and_log("Blood pump occlusion pressure (measured) overridden to " + str_res + + self.logger.debug("Blood pump occlusion pressure (measured) overridden to " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_inlet_pump_measured_occlusion_override(self, occl, reset=NO_RESET): @@ -267,7 +268,7 @@ message_id=self.MSG_ID_HD_OCCLUSION_DIAL_IN_PUMP_OVERRIDE, payload=payload) - self.print_and_log("override measured dialysate inlet pump occlusion pressure") + self.logger.debug("override measured dialysate inlet pump occlusion pressure") # Send message received_message = self.can_interface.send(message) @@ -278,12 +279,12 @@ str_res = "reset back to normal. " else: str_res = str(occl) + " mmHg. " - self.print_and_log("Dialysate inlet pump occlusion pressure (measured) overridden to " + str_res + + self.logger.debug("Dialysate inlet pump occlusion pressure (measured) overridden to " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_dialysate_outlet_pump_measured_occlusion_override(self, occl, reset=NO_RESET): @@ -304,7 +305,7 @@ message_id=self.MSG_ID_HD_OCCLUSION_DIAL_OUT_PUMP_OVERRIDE, payload=payload) - self.print_and_log("override measured dialysate outlet pump occlusion pressure") + self.logger.debug("override measured dialysate outlet pump occlusion pressure") # Send message received_message = self.can_interface.send(message) @@ -315,12 +316,12 @@ str_res = "reset back to normal. " else: str_res = str(occl) + " mmHg. " - self.print_and_log("Dialysate outlet pump occlusion pressure (measured) overridden to " + str_res + + self.logger.debug("Dialysate outlet pump occlusion pressure (measured) overridden to " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False def cmd_pressure_occlusion_broadcast_interval_override(self, ms, reset=NO_RESET): @@ -340,7 +341,7 @@ message_id=self.MSG_ID_HD_PRES_OCCL_SEND_INTERVAL_OVERRIDE, payload=payload) - self.print_and_log("override pressure/occlusion broadcast interval") + self.logger.debug("override pressure/occlusion broadcast interval") # Send message received_message = self.can_interface.send(message) @@ -351,12 +352,12 @@ str_res = "reset back to normal: " else: str_res = str(ms) + " ms: " - self.print_and_log("Pressure/occlusion broadcast interval overridden to " + str_res + + self.logger.debug("Pressure/occlusion broadcast interval overridden to " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False # TEST CODE *************************************** Index: dialin/hd/rtc.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/hd/rtc.py (.../rtc.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/hd/rtc.py (.../rtc.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -34,15 +34,15 @@ START_POS_SET_PT = DenaliMessage.PAYLOAD_START_INDEX END_POS_SET_PT = START_POS_SET_PT + 4 - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): """ @param can_interface: Denali Can Messenger object """ 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 @@ -90,20 +90,20 @@ message_id=self.MSG_ID_SET_RTC_DATE_TIME, payload=payload) - self.print_and_log("Setting time and date to rtc") + self.logger.debug("Setting time and date to rtc") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - self.print_and_log(received_message) + self.logger.debug(received_message) # str_res = str(flow) - self.print_and_log("Time and Date in rtc set to seconds: " + str(sec) + " minutes: " + str(min) + " hours: " + + self.logger.debug("Time and Date in rtc set to seconds: " + str(sec) + " minutes: " + str(min) + " hours: " + str(hour) + " days: " + str(day) + " months: " + str(month) + " years: " + str(year) + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/hd/treatment.py =================================================================== diff -u -r17e48d8bf1a8960537d0615f7118bb8532e1015c -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/hd/treatment.py (.../treatment.py) (revision 17e48d8bf1a8960537d0615f7118bb8532e1015c) +++ dialin/hd/treatment.py (.../treatment.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -47,14 +47,14 @@ START_POS_SALINE_BOLUS_IN_PROGRESS = END_POS_UF_STATE END_POS_SALINE_BOLUS_IN_PROGRESS = START_POS_SALINE_BOLUS_IN_PROGRESS + 4 - def __init__(self, can_interface=None): + def __init__(self, can_interface, logger): """ HDTreatment constructor """ 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 Index: dialin/hd/ui_proxy.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/hd/ui_proxy.py (.../ui_proxy.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/hd/ui_proxy.py (.../ui_proxy.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -142,15 +142,15 @@ START_POS_BLD_DIAL_CHG_RSP_DIAL_RATE = END_POS_BLD_DIAL_CHG_RSP_BLD_RATE END_POS_BLD_DIAL_CHG_RSP_DIAL_RATE = START_POS_BLD_DIAL_CHG_RSP_DIAL_RATE + 4 - def __init__(self, can_interface): + def __init__(self, can_interface, logger): """ @param can_interface: the denali can interface object """ super().__init__() - self.can_interface = can_interface + self.logger = logger # register function to handle HD response to UF change requests if self.can_interface is not None: @@ -415,7 +415,7 @@ if len(major) > 0 and len(minor) > 0 and len(micro) > 0 and len(build) > 0: self.hd_version = f"v{major[0]}.{minor[0]}.{micro[0]}-{build[0]}" - self.print_and_log(self.hd_version) + self.logger.debug(self.hd_version) return self.hd_version @_publish([ @@ -631,7 +631,7 @@ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, message_id=self.MSG_ID_UI_CHECKIN_WITH_HD) - self.print_and_log("Sending ui checkin w/ HD") + self.logger.debug("Sending ui checkin w/ HD") self.can_interface.send(message, 0) @@ -646,7 +646,7 @@ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, message_id=self.MSG_ID_UI_REQUEST_HD_VERSION) - self.print_and_log("Sending ui request for version to HD") + self.logger.debug("Sending ui request for version to HD") self.can_interface.send(message, 0) @@ -668,7 +668,7 @@ str_cmd = "pause" else: str_cmd = "resume" - self.print_and_log("Sending UF " + str_cmd + " command.") + self.logger.debug("Sending UF " + str_cmd + " command.") self.can_interface.send(message, 0) @@ -691,7 +691,7 @@ message_id=self.MSG_ID_UF_SETTINGS_CHANGE_REQUEST_BY_USER, payload=volume) - self.print_and_log("Sending UF settings change request.") + self.logger.debug("Sending UF settings change request.") self.can_interface.send(message, 0) @@ -718,7 +718,7 @@ message_id=self.MSG_ID_UF_SETTINGS_CHANGE_REQUEST_BY_USER, payload=payload) - self.print_and_log("Sending UF settings change request.") + self.logger.debug("Sending UF settings change request.") self.can_interface.send(message, 0) @@ -745,7 +745,7 @@ message_id=self.MSG_ID_UF_SETTINGS_CHANGE_CONFIRMED_BY_USER, payload=payload) - self.print_and_log("Sending UF settings change confirmation.") + self.logger.debug("Sending UF settings change confirmation.") self.can_interface.send(message, 0) @@ -765,7 +765,7 @@ message_id=self.MSG_ID_TREATMENT_DURATION_SETTING_CHANGE_REQUEST, payload=payload) - self.print_and_log("Sending treatment duration setting change request.") + self.logger.debug("Sending treatment duration setting change request.") # Send message self.can_interface.send(message, 0) @@ -789,7 +789,7 @@ message_id=self.MSG_ID_BLOOD_DIALYSATE_FLOW_SETTING_CHANGE_REQUEST_BY_USER, payload=payload) - self.print_and_log("Sending blood & dialysate flow rate settings change request.") + self.logger.debug("Sending blood & dialysate flow rate settings change request.") self.can_interface.send(message, 0) Index: dialin/hd/watchdog.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/hd/watchdog.py (.../watchdog.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/hd/watchdog.py (.../watchdog.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -29,15 +29,15 @@ # watchdog message IDs MSG_ID_HD_WD_CHECKIN_OVERRIDE = 0x8005 - def __init__(self, can_interface): + def __init__(self, can_interface, logger): """ @param can_interface: the denali can interface object """ super().__init__() - self.can_interface = can_interface + self.logger = logger def cmd_watchdog_task_check_in_override(self, state, task, reset=NO_RESET): """ @@ -58,22 +58,22 @@ message_id=self.MSG_ID_HD_WD_CHECKIN_OVERRIDE, payload=payload) - self.print_and_log("override watchdog task check-in state") + self.logger.debug("override watchdog task check-in state") # Send message received_message = self.can_interface.send(message) # If there is content... if received_message is not None: - # self.print_and_log(received_message) + # self.logger.debug(received_message) if reset == RESET: str_res = "reset back to normal" else: str_res = ("checked in" if state != 0 else "not checked in") - self.print_and_log("watchdog task check-in overridden to " + str_res + ":" + + self.logger.debug("watchdog task check-in overridden to " + str_res + ":" + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: - self.print_and_log("Timeout!!!!") + self.logger.debug("Timeout!!!!") return False Index: dialin/protocols/CAN.py =================================================================== diff -u -rfb9052e39fb778d3d029eda4d6917a0a1fcb9cbd -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/protocols/CAN.py (.../CAN.py) (revision fb9052e39fb778d3d029eda4d6917a0a1fcb9cbd) +++ dialin/protocols/CAN.py (.../CAN.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -20,8 +20,8 @@ import time from time import sleep import sys -import logging -from ..utils.base import _Base +from ..utils.base import _LogManager +from logging import Logger class DenaliMessage: @@ -338,21 +338,23 @@ return None -class DenaliCanMessenger(_Base): +class DenaliCanMessenger: START_BYTE = DenaliMessage.START_BYTE DIALIN_MSG_RESP_TO = 0.1 # number of seconds to wait for a response to a sent command - def __init__(self, can_interface='can0', log_level=None): + def __init__(self, can_interface: str, logger: Logger, log_can=False): """ DenaliCanMessenger constructor @param can_interface - string containing the can interface, e.g., 'can0" @return: DialityCanMessenger object """ - super().__init__(log_level=log_level) + super().__init__() self.bus = can.interfaces.socketcan.SocketcanBus(channel=can_interface) + self.logger = logger + self.log_can = log_can self.listener_buffer = can.BufferedReader() self.notifier = can.Notifier(self.bus, [self.listener_buffer]) self.send_packet_request_id = -1 @@ -371,7 +373,7 @@ else: self.serial_listener_thread = None - self.print_and_log("Can connection is not valid") + self.logger.debug("Can connection is not valid") def start(self): """ @@ -380,23 +382,23 @@ """ if self.bus is None: - self.print_and_log("Cannot start can listener.") + self.logger.debug("Cannot start can listener.") return else: self.run = True if self.serial_listener_thread is not None: self.serial_listener_thread.start() - self.print_and_log("Can listener has started.") + self.logger.debug("Can listener has started.") else: - self.print_and_log("Cannot start listener...") + self.logger.debug("Cannot start listener...") def stop(self): """ Stop listening the can interface """ self.run = False - self.print_and_log("\nCan listener has stopped.") + self.logger.debug("\nCan listener has stopped.") def listener(self): """ @@ -406,18 +408,19 @@ while self.run: message = self.listener_buffer.get_message(0.0) - self.print_and_log("Message = {}".format(message)) if message is not None: + self.logger.debug("Message = {}".format(message)) + if message.dlc == DenaliMessage.PACKET_LENGTH: # We have received a legit can message of 8 bytes can_data = [b for b in message.data] channel_id = message.arbitration_id message_length = can_data[DenaliMessage.PAYLOAD_LENGTH_INDEX] - self.print_and_log(str(time.time()) + " " + str(channel_id) + " " + str(can_data), - log_level=logging.INFO) + if self.log_can: + self.do_log_can(message, style="candump", channel=self.bus.channel, send=False) # if we are building a long message, then proceed to push it to the channel dictionary if channel_id in self.long_msg_channel_id_set: @@ -465,7 +468,7 @@ self.messages, DenaliMessage.get_crc(complete_dialin_message), DenaliMessage.crc8(self.messages))) - if message_valid == True: + if message_valid: # We first check if this is a response to a send request that is pending if dialin_msg_id == self.send_packet_request_id: @@ -541,9 +544,8 @@ data=packet, is_extended_id=False) - self.print_and_log(packet, log_level=logging.CRITICAL) - if self.log_level == "CAN_ONLY": - self.do_log_can(packet) + if self.log_can: + self.do_log_can(packet, style="candump", channel=self.bus.channel, send=True) self.bus.send(packet, 0) # 0.1) # Sending @@ -561,22 +563,41 @@ msg_sent = True else: # msg_sent = False - self.print_and_log("No response. Re-sending message.") + self.logger.debug("No response. Re-sending message.") # We are ready to send again. Reset request ID appropriately self.send_packet_request_id = -1 # This value is None or it has a message depending of the listener return self.command_response_message - def do_log_can(self, packet, style="candump"): + def do_log_can(self, packet: can.Message, style="candump", channel="can0", send=True): + """ + Logs all packets sent or received by dialin in candump, or non-candump style format + + @param packet: (can.Message) The packet to log + @param style: (str) The style to log in (candump, non-candump) + @param channel: (str) The channel send or received on + @param send: (bool) Whether we're sending or receiving this packet + @return: None + """ + filename = "Dialin_CAN_Send.log" + if not send: + filename = "Dialin_CAN_Receive.log" if style == "candump": - with open(self.log_can_file, 'a') as f: + with open(filename, 'a') as f: tmp = str(packet) - f.write("{0} {1} [{2}] {3}\n".format(self.bus.channel, - hex(packet.arbitration_id)[2:], - packet.dlc, tmp[-23:].upper())) + if send: + f.write("{0} {1} [{2}] {3}\n".format(channel, + hex(packet.arbitration_id)[2:], + packet.dlc, + tmp[-23:].upper())) + else: + f.write("{0} {1} [{2}] {3}\n".format(channel, + hex(packet.arbitration_id)[2:], + packet.dlc, + tmp[-41:-18].upper())) else: - with open(self.log_can_file, 'a') as f: + with open(filename, 'a') as f: f.write("{0}\n".format(packet)) Index: dialin/utils/base.py =================================================================== diff -u -rb8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6 -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- dialin/utils/base.py (.../base.py) (revision b8ffb510f830ad9dd0eed6cdf4f5f7eb663e2ca6) +++ dialin/utils/base.py (.../base.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -18,6 +18,7 @@ from datetime import datetime import os import logging +from typing import List class AbstractObserver(ABC): @@ -35,8 +36,38 @@ pass -class _Base(ABC): +class _FauxLogger: + def __init__(self, printing_enabled=False): + self.printing_enabled = printing_enabled + + def debug(self, msg): + if self.printing_enabled: + print("DEBUG: {0}".format(msg)) + + def info(self, msg): + if self.printing_enabled: + print("INFO: {0}".format(msg)) + + def warn(self, msg): + if self.printing_enabled: + print("WARN: {0}".format(msg)) + + def warning(self, msg): + if self.printing_enabled: + print("WARNING: {0}".format(msg)) + + def error(self, msg): + if self.printing_enabled: + print("ERROR: {0}".format(msg)) + + def critical(self, msg): + if self.printing_enabled: + print("CRITICAL: {0}".format(msg)) + + +class _LogManager(ABC): + def __init__(self, log_level=None, log_filepath="Dialin.log"): """ @@ -60,13 +91,13 @@ return log_level is not None and log_level.upper() in self.get_logging_levels() @staticmethod - def get_logging_levels(self): + def get_logging_levels(): """ Gets all possible logging levels @return: All possible logging levels """ - return ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL", "CAN_ONLY"] + return ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL", "CAN_ONLY", "PRINT_ONLY"] def request_new_log_path(self, path:str): """ @@ -103,11 +134,11 @@ @return: True if success, False otherwise """ if self.logger is not None: - self.print_and_log("Logger already configured. Please clear the logger first.") + print("Logger already configured. Please clear the logger first.") return False # configure the logging - if self.logging_enabled: + if self.logging_enabled and self.log_level not in ["PRINT_ONLY", "CAN_ONLY"]: numeric_level = getattr(logging, self.log_level.upper(), logging.ERROR) self.logger = logging.getLogger("Dialin") self.logger.setLevel(numeric_level) @@ -123,9 +154,11 @@ self.logger.addHandler(fh) self.logger.addHandler(ch) - return True - return False + else: + self.logger = _FauxLogger(printing_enabled=self.log_level == "PRINT_ONLY") + return True + def print_and_log(self, message, log_level=logging.DEBUG): """ Prints a message if its severity is >= the current log level. @@ -139,9 +172,6 @@ if not self.logging_enabled: return - if self.logger.getEffectiveLevel() <= log_level: - print(message) - if log_level == logging.DEBUG: self.logger.debug(message) elif log_level == logging.INFO: @@ -154,7 +184,7 @@ self.logger.critical(message) @staticmethod - def get_available_log_path(self, filepath:str): + def get_available_log_path(filepath:str): """ Gets an available log path from filepath appends integer to the end if file already exists. @@ -173,16 +203,15 @@ return "{0}{1}{2}".format(path, i, ext) -class _AbstractSubSystem(_Base): +class _AbstractSubSystem: @abstractmethod - def __init__(self, log_level=None, log_filepath="Dialin.log"): + def __init__(self): """ Initialization function for the sub system # The abstract base class requires all abstract methods are overridden by children classes """ - super().__init__(log_level=log_level, log_filepath=log_filepath) self._observers = [] self._datetime_fmt = "%m.%d.%Y_%I.%M.%S.%f" pass Index: tests/test_demo.py =================================================================== diff -u -r322377decd72091859c355c84705276e89cd140e -radd8b1e7cce0187c9fb5b09a5881d0121f9a0ddb --- tests/test_demo.py (.../test_demo.py) (revision 322377decd72091859c355c84705276e89cd140e) +++ tests/test_demo.py (.../test_demo.py) (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -115,4 +115,4 @@ if __name__ == '__main__': - test_valves() + test_dg_version() Index: tests/test_logging.py =================================================================== diff -u --- tests/test_logging.py (revision 0) +++ tests/test_logging.py (revision add8b1e7cce0187c9fb5b09a5881d0121f9a0ddb) @@ -0,0 +1,43 @@ +########################################################################### +# +# Copyright (c) 2019-2019 Diality Inc. - All Rights Reserved. +# +# THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +# WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +# +# @file test_demo.py +# +# @date 15-May-2020 +# @author P. Lucia +# +# @brief This is a demo script to exercise the HD and DG. +# +############################################################################ +import sys +sys.path.append("..") +from dialin.dg.dialysate_generator import DG +from dialin.hd.hemodialysis_device import HD +import time + + +def test_logging(): + """ + Prints the DG version. + + @return: None + """ + if False: + # dg = DG(log_level="INFO") + dg = DG() + if dg.cmd_log_in_to_dg(): + dg.cmd_ui_request_dg_version() + time.sleep(0.5) + print(dg.dg_version) + if True: + hd = HD(log_level="CAN_ONLY") + if hd.cmd_log_in_to_hd(): + hd.ui.cmd_ui_request_hd_version() + + +if __name__ == '__main__': + test_logging()