From dc7397ec87c3f3f6982189faaa2d624d35563505 Mon Sep 17 00:00:00 2001 From: Felix Divo <4403130+felixdivo@users.noreply.github.com> Date: Wed, 27 Oct 2021 17:05:19 +0200 Subject: [PATCH 1/4] Better documentation of parameters --- can/interfaces/robotell.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/can/interfaces/robotell.py b/can/interfaces/robotell.py index cb35aa774..dd4c6c377 100644 --- a/can/interfaces/robotell.py +++ b/can/interfaces/robotell.py @@ -56,10 +56,10 @@ def __init__( ): """ :param str channel: - port of underlying serial or usb device (e.g. /dev/ttyUSB0, COM8, ...) - Must not be empty. + port of underlying serial or usb device (e.g. ``/dev/ttyUSB0``, ``COM8``, ...) + Must not be empty. Can also end with ``@115200`` (or similarly) to specify the baudrate. :param int ttyBaudrate: - baudrate of underlying serial or usb device + baudrate of underlying serial or usb device (Ignored if set via the ``channel`` parameter) :param int bitrate: CAN Bitrate in bit/s. Value is stored in the adapter and will be used as default if no bitrate is specified :param bool rtscts: From 746082989c2b6c444a7911c0c044362759b2a247 Mon Sep 17 00:00:00 2001 From: Felix Divo <4403130+felixdivo@users.noreply.github.com> Date: Wed, 27 Oct 2021 17:11:37 +0200 Subject: [PATCH 2/4] Use CanInterfaceNotImplementedError --- can/interfaces/robotell.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/can/interfaces/robotell.py b/can/interfaces/robotell.py index dd4c6c377..1e85d5b1a 100644 --- a/can/interfaces/robotell.py +++ b/can/interfaces/robotell.py @@ -6,6 +6,7 @@ import logging from can import BusABC, Message +from ..exceptions import CanInterfaceNotImplementedError logger = logging.getLogger(__name__) @@ -65,6 +66,8 @@ def __init__( :param bool rtscts: turn hardware handshake (RTS/CTS) on and off """ + if serial is None: + raise CanInterfaceNotImplementedError("The serial module is not installed") if not channel: # if None or empty raise TypeError("Must specify a serial port.") @@ -74,7 +77,7 @@ def __init__( channel, baudrate=ttyBaudrate, rtscts=rtscts ) - ## Disable flushing queued config ACKs on lookup channel (for unit tests) + # Disable flushing queued config ACKs on lookup channel (for unit tests) self._loopback_test = channel == "loop://" self._rxbuffer = bytearray() # raw bytes from the serial port @@ -104,7 +107,7 @@ def set_bitrate(self, bitrate): self._writeconfig(self._CAN_BAUD_ID, bitrate) else: raise ValueError( - "Invalid bitrate, must be less than " + str(self._MAX_CAN_BAUD) + f"Invalid bitrate, must be less than {self._MAX_CAN_BAUD}" ) def set_auto_retransmit(self, retrans_flag): @@ -119,8 +122,8 @@ def set_auto_bus_management(self, auto_man): :param bool auto_man: Enable/disable automatic bus management """ - ## Not sure what "automatic bus managemenet" does. Does not seem to control - ## automatic ACK of CAN frames (listen only mode) + # Not sure what "automatic bus management" does. Does not seem to control + # automatic ACK of CAN frames (listen only mode) self._writeconfig(self._CAN_ABOM_ID, 1 if auto_man else 0) def set_serial_rate(self, serial_bps): @@ -161,7 +164,7 @@ def _getconfigsize(self, configid): return 4 if configid == self._CAN_READ_SERIAL1 or configid <= self._CAN_READ_SERIAL2: return 8 - if configid >= self._CAN_FILTER_BASE_ID and configid <= self._CAN_FILTER_MAX_ID: + if self._CAN_FILTER_BASE_ID <= configid <= self._CAN_FILTER_MAX_ID: return 8 return 0 @@ -178,9 +181,7 @@ def _readconfig(self, configid, timeout): newmsg = self._readmessage(not self._loopback_test, True, timeout) if newmsg is None: logger.warning( - "Timeout waiting for response when reading config value {:04X}.".format( - configid - ) + f"Timeout waiting for response when reading config value {configid:04X}." ) return None return newmsg[4:12] @@ -211,8 +212,8 @@ def _writeconfig(self, configid, value, value2=0): newmsg = self._readmessage(not self._loopback_test, True, 1) if newmsg is None: logger.warning( - "Timeout waiting for response when writing config value " - + str(configid) + "Timeout waiting for response when writing config value %d", + configid ) def _readmessage(self, flushold, cfgchannel, timeout): @@ -261,7 +262,7 @@ def _readmessage(self, flushold, cfgchannel, timeout): cs = (cs + newmsg[idx]) & 0xFF if newmsg[16] == cs: # OK, valid message - place it in the correct queue - if newmsg[13] == 0xFF: ## Check for config channel + if newmsg[13] == 0xFF: # Check for config channel self._configmsg.append(newmsg) else: self._rxmsg.append(newmsg) @@ -269,9 +270,8 @@ def _readmessage(self, flushold, cfgchannel, timeout): logger.warning("Incorrect message checksum, discarded message") else: logger.warning( - "Invalid message structure length " - + str(len(newmsg)) - + ", ignoring message" + "Invalid message structure length %d, ignoring message", + len(newmsg) ) # Check if we have a message in the desired queue - if so copy and return From e1bfd093b354dc8c7e19aa19f80df5d9762e914a Mon Sep 17 00:00:00 2001 From: Felix Divo <4403130+felixdivo@users.noreply.github.com> Date: Wed, 27 Oct 2021 15:12:23 +0000 Subject: [PATCH 3/4] Format code with black --- can/interfaces/robotell.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/can/interfaces/robotell.py b/can/interfaces/robotell.py index 1e85d5b1a..17f1b1e11 100644 --- a/can/interfaces/robotell.py +++ b/can/interfaces/robotell.py @@ -106,9 +106,7 @@ def set_bitrate(self, bitrate): if bitrate <= self._MAX_CAN_BAUD: self._writeconfig(self._CAN_BAUD_ID, bitrate) else: - raise ValueError( - f"Invalid bitrate, must be less than {self._MAX_CAN_BAUD}" - ) + raise ValueError(f"Invalid bitrate, must be less than {self._MAX_CAN_BAUD}") def set_auto_retransmit(self, retrans_flag): """ @@ -212,8 +210,7 @@ def _writeconfig(self, configid, value, value2=0): newmsg = self._readmessage(not self._loopback_test, True, 1) if newmsg is None: logger.warning( - "Timeout waiting for response when writing config value %d", - configid + "Timeout waiting for response when writing config value %d", configid ) def _readmessage(self, flushold, cfgchannel, timeout): @@ -271,7 +268,7 @@ def _readmessage(self, flushold, cfgchannel, timeout): else: logger.warning( "Invalid message structure length %d, ignoring message", - len(newmsg) + len(newmsg), ) # Check if we have a message in the desired queue - if so copy and return From aa5dfd083de07b62bed50af12585fec3119ac921 Mon Sep 17 00:00:00 2001 From: Felix Divo <4403130+felixdivo@users.noreply.github.com> Date: Wed, 27 Oct 2021 17:15:43 +0200 Subject: [PATCH 4/4] Simplify logging --- can/interfaces/robotell.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/can/interfaces/robotell.py b/can/interfaces/robotell.py index 17f1b1e11..ba3c40dcd 100644 --- a/can/interfaces/robotell.py +++ b/can/interfaces/robotell.py @@ -89,11 +89,10 @@ def __init__( if bitrate is not None: self.set_bitrate(bitrate) - self.channel_info = "Robotell USB-CAN s/n %s on %s" % ( - self.get_serial_number(1), - channel, + self.channel_info = ( + f"Robotell USB-CAN s/n {self.get_serial_number(1)} on {channel}" ) - logger.info("Using device: {}".format(self.channel_info)) + logger.info("Using device: %s", self.channel_info) super().__init__(channel=channel, **kwargs)