From 14c5d1401dee636190453ecc625622ece3382b59 Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Sat, 2 Feb 2019 20:01:31 +0100 Subject: [PATCH 01/15] add read to slcanBus --- can/interfaces/slcan.py | 87 ++++++++++++++++++++++++++--------------- 1 file changed, 56 insertions(+), 31 deletions(-) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index 7b276a078..ba65cd5de 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -47,6 +47,9 @@ class slcanBus(BusABC): _SLEEP_AFTER_SERIAL_OPEN = 2 # in seconds + _OK = b'\r' + _ERROR = b'\a' + LINE_TERMINATOR = b'\r' def __init__(self, channel, ttyBaudrate=115200, bitrate=None, @@ -97,6 +100,43 @@ def write(self, string): self.serialPortOrig.write(string.encode() + self.LINE_TERMINATOR) self.serialPortOrig.flush() + def read(self, timeout): + + # first read what is already in receive buffer + while self.serialPortOrig.in_waiting: + self._buffer += self.serialPortOrig.read(1) + + # if we still don't have a complete message, do a blocking read + start = time.time() + time_left = timeout + while not (self._OK in self._buffer or self._ERROR in self._buffer): + self.serialPortOrig.timeout = time_left + byte = self.serialPortOrig.read(1) + if byte: + self._buffer += byte + + # if timeout is None, try indefinitely + if timeout is None: + continue + # try next one only if there still is time, and with + # reduced timeout + else: + time_left = timeout - (time.time() - start) + if time_left > 0: + continue + else: + return None + + # return first message + for i in xrange(len(self._buffer)): + if ( chr(self._buffer[i]) == self._OK or + chr(self._buffer[i]) == self._ERROR ): + string = self._buffer[:i+1].decode() + del self._buffer[:i+1] + break + + return string + def open(self): self.write('O') @@ -104,53 +144,38 @@ def close(self): self.write('C') def _recv_internal(self, timeout): - if timeout != self.serialPortOrig.timeout: - self.serialPortOrig.timeout = timeout canId = None remote = False extended = False frame = [] - # First read what is already in the receive buffer - while (self.serialPortOrig.in_waiting and - self.LINE_TERMINATOR not in self._buffer): - self._buffer += self.serialPortOrig.read(1) - - # If we still don't have a complete message, do a blocking read - if self.LINE_TERMINATOR not in self._buffer: - self._buffer += self.serialPortOrig.read_until(self.LINE_TERMINATOR) - - if self.LINE_TERMINATOR not in self._buffer: - # Timed out - return None, False + string = self.read(timeout) - readStr = self._buffer.decode() - del self._buffer[:] - if not readStr: + if not string: pass - elif readStr[0] == 'T': + elif string[0] == 'T': # extended frame - canId = int(readStr[1:9], 16) - dlc = int(readStr[9]) + canId = int(string[1:9], 16) + dlc = int(string[9]) extended = True for i in range(0, dlc): - frame.append(int(readStr[10 + i * 2:12 + i * 2], 16)) - elif readStr[0] == 't': + frame.append(int(string[10 + i * 2:12 + i * 2], 16)) + elif string[0] == 't': # normal frame - canId = int(readStr[1:4], 16) - dlc = int(readStr[4]) + canId = int(string[1:4], 16) + dlc = int(string[4]) for i in range(0, dlc): - frame.append(int(readStr[5 + i * 2:7 + i * 2], 16)) - elif readStr[0] == 'r': + frame.append(int(string[5 + i * 2:7 + i * 2], 16)) + elif string[0] == 'r': # remote frame - canId = int(readStr[1:4], 16) - dlc = int(readStr[4]) + canId = int(string[1:4], 16) + dlc = int(string[4]) remote = True - elif readStr[0] == 'R': + elif string[0] == 'R': # remote extended frame - canId = int(readStr[1:9], 16) - dlc = int(readStr[9]) + canId = int(string[1:9], 16) + dlc = int(string[9]) extended = True remote = True From d39eb2c73215346f5114c6d9081f384c8351f613 Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Sat, 2 Feb 2019 20:20:34 +0100 Subject: [PATCH 02/15] add flush to slcanBus --- can/interfaces/slcan.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index ba65cd5de..49e4f8424 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -137,6 +137,11 @@ def read(self, timeout): return string + def flush(self): + del self._buffer[:] + while self.serialPortOrig.in_waiting: + self.serialPortOrig.read(1) + def open(self): self.write('O') From c20c93b3ff32b835fff3949f094cc705c3c70153 Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Sat, 2 Feb 2019 20:31:39 +0100 Subject: [PATCH 03/15] add get_version and get_serial to slcanBus --- can/interfaces/slcan.py | 56 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index 49e4f8424..f90dc7cb5 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -221,3 +221,59 @@ def fileno(self): return self.serialPortOrig.fileno() # Return an invalid file descriptor on Windows return -1 + + def get_version(self, timeout): + cmd = "V" + self.write(cmd) + + start = time.time() + time_left = timeout + while True: + string = self.read(time_left) + + if not string: + pass + elif string[0] == cmd and len(string) == 6: + # convert ASCII coded version + hw_version = int(string[1:3]) + sw_version = int(string[3:5]) + return hw_version, sw_version + + # if timeout is None, try indefinitely + if timeout is None: + continue + # try next one only if there still is time, and with + # reduced timeout + else: + time_left = timeout - (time.time() - start) + if time_left > 0: + continue + else: + return None, None + + def get_serial(self, timeout): + cmd = "N" + self.write(cmd) + + start = time.time() + time_left = timeout + while True: + string = self.read(time_left) + + if not string: + pass + elif string[0] == cmd and len(string) == 6: + serial = string[1:-1] + return serial + + # if timeout is None, try indefinitely + if timeout is None: + continue + # try next one only if there still is time, and with + # reduced timeout + else: + time_left = timeout - (time.time() - start) + if time_left > 0: + continue + else: + return None From 89a75036f5194271bb5a2230921bcdb035cb83e5 Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Sat, 2 Feb 2019 21:53:13 +0100 Subject: [PATCH 04/15] add tests for get_version and get_serial --- test/test_slcan.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/test_slcan.py b/test/test_slcan.py index 29869cb1c..519c71418 100644 --- a/test/test_slcan.py +++ b/test/test_slcan.py @@ -107,6 +107,24 @@ def test_partial_recv(self): msg = self.bus.recv(0) self.assertIsNotNone(msg) + def test_version(self): + self.serial.write(b'V1013\r') + hw_ver, sw_ver = self.bus.get_version(0) + self.assertEqual(hw_ver, 10) + self.assertEqual(sw_ver, 13) + + hw_ver, sw_ver = self.bus.get_version(0) + self.assertIsNone(hw_ver) + self.assertIsNone(sw_ver) + + def test_serial(self): + self.serial.write(b'NA123\r') + sn = self.bus.get_serial(0) + self.assertEqual(sn, "A123") + + sn = self.bus.get_serial(0) + self.assertIsNone(sn) + if __name__ == '__main__': unittest.main() From 55480cc024d291805ee73aa1e63297119b8b1a43 Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Sat, 2 Feb 2019 22:14:09 +0100 Subject: [PATCH 05/15] add set_bitrate to slcanBus --- can/interfaces/slcan.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index f90dc7cb5..4b1fed6c9 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -85,17 +85,21 @@ def __init__(self, channel, ttyBaudrate=115200, bitrate=None, time.sleep(sleep_after_open) if bitrate is not None: - self.close() - if bitrate in self._BITRATES: - self.write(self._BITRATES[bitrate]) - else: - raise ValueError("Invalid bitrate, choose one of " + (', '.join(self._BITRATES)) + '.') + self.set_bitrate(self, bitrate) self.open() super(slcanBus, self).__init__(channel, ttyBaudrate=115200, bitrate=None, rtscts=False, **kwargs) + def set_bitrate(self, bitrate): + self.close() + if bitrate in self._BITRATES: + self.write(self._BITRATES[bitrate]) + else: + raise ValueError("Invalid bitrate, choose one of " + (', '.join(self._BITRATES)) + '.') + self.open() + def write(self, string): self.serialPortOrig.write(string.encode() + self.LINE_TERMINATOR) self.serialPortOrig.flush() From 7f8c686604756c3251a457062f48d8e3ad28a81d Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Sat, 2 Feb 2019 22:48:55 +0100 Subject: [PATCH 06/15] replace xrange with range --- can/interfaces/slcan.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index 4b1fed6c9..27810ac48 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -132,7 +132,7 @@ def read(self, timeout): return None # return first message - for i in xrange(len(self._buffer)): + for i in range(len(self._buffer)): if ( chr(self._buffer[i]) == self._OK or chr(self._buffer[i]) == self._ERROR ): string = self._buffer[:i+1].decode() From 4e95890d67ce995647c1826e806034a68d38d8de Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Sat, 1 Jun 2019 20:09:47 +0200 Subject: [PATCH 07/15] add set_bitrate_reg to slcanBus --- can/interfaces/slcan.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index b63b7d57a..270f54791 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -103,8 +103,7 @@ def __init__( self.set_bitrate(self, bitrate) if btr is not None: - self.close() - self.write("s" + btr) + self.set_bitrate_reg(self, btr) self.open() @@ -123,6 +122,11 @@ def set_bitrate(self, bitrate): ) self.open() + def set_bitrate_reg(self, btr): + self.close() + self.write("s" + btr) + self.open() + def write(self, string): self.serialPortOrig.write(string.encode() + self.LINE_TERMINATOR) self.serialPortOrig.flush() From dc3ab215e1a55b5ac4b280d2ee2e6edabf1b3c7b Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Sun, 2 Jun 2019 09:13:54 +0200 Subject: [PATCH 08/15] unnecessary to specify 1 byte in serial read --- can/interfaces/slcan.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index 270f54791..7102eb414 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -135,14 +135,14 @@ def read(self, timeout): # first read what is already in receive buffer while self.serialPortOrig.in_waiting: - self._buffer += self.serialPortOrig.read(1) + self._buffer += self.serialPortOrig.read() # if we still don't have a complete message, do a blocking read start = time.time() time_left = timeout while not (self._OK in self._buffer or self._ERROR in self._buffer): self.serialPortOrig.timeout = time_left - byte = self.serialPortOrig.read(1) + byte = self.serialPortOrig.read() if byte: self._buffer += byte @@ -171,7 +171,7 @@ def read(self, timeout): def flush(self): del self._buffer[:] while self.serialPortOrig.in_waiting: - self.serialPortOrig.read(1) + self.serialPortOrig.read() def open(self): self.write("O") From dcc60ac3ea41d9ee060b77e2d4ad0a7f76f6e476 Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Sun, 2 Jun 2019 09:16:56 +0200 Subject: [PATCH 09/15] fix faulty if in read of slcanBus --- can/interfaces/slcan.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index 7102eb414..07e5494c0 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -140,7 +140,10 @@ def read(self, timeout): # if we still don't have a complete message, do a blocking read start = time.time() time_left = timeout - while not (self._OK in self._buffer or self._ERROR in self._buffer): + while not ( + ord(self._OK) in self._buffer or + ord(self._ERROR) in self._buffer + ): self.serialPortOrig.timeout = time_left byte = self.serialPortOrig.read() if byte: @@ -160,8 +163,8 @@ def read(self, timeout): # return first message for i in range(len(self._buffer)): - if ( chr(self._buffer[i]) == self._OK or - chr(self._buffer[i]) == self._ERROR ): + if ( self._buffer[i] == ord(self._OK) or + self._buffer[i] == ord(self._ERROR) ): string = self._buffer[:i+1].decode() del self._buffer[:i+1] break From 807e288622c221e709ce050f42a1ba6c0f21c576 Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Sun, 2 Jun 2019 09:24:01 +0200 Subject: [PATCH 10/15] rename get_serial to get_serial_number --- can/interfaces/slcan.py | 6 +++--- test/test_slcan.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index 07e5494c0..8831b52cb 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -287,7 +287,7 @@ def get_version(self, timeout): else: return None, None - def get_serial(self, timeout): + def get_serial_number(self, timeout): cmd = "N" self.write(cmd) @@ -299,8 +299,8 @@ def get_serial(self, timeout): if not string: pass elif string[0] == cmd and len(string) == 6: - serial = string[1:-1] - return serial + serial_number = string[1:-1] + return serial_number # if timeout is None, try indefinitely if timeout is None: diff --git a/test/test_slcan.py b/test/test_slcan.py index bff016656..178996c93 100644 --- a/test/test_slcan.py +++ b/test/test_slcan.py @@ -115,12 +115,12 @@ def test_version(self): self.assertIsNone(hw_ver) self.assertIsNone(sw_ver) - def test_serial(self): + def test_serial_number(self): self.serial.write(b'NA123\r') - sn = self.bus.get_serial(0) + sn = self.bus.get_serial_number(0) self.assertEqual(sn, "A123") - sn = self.bus.get_serial(0) + sn = self.bus.get_serial_number(0) self.assertIsNone(sn) From ba2a4570ac55eb375c7c40fcf894e383bcda391a Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Sun, 2 Jun 2019 10:16:27 +0200 Subject: [PATCH 11/15] reformat using black --- can/interfaces/slcan.py | 29 +++++------------------------ test/test_slcan.py | 4 ++-- 2 files changed, 7 insertions(+), 26 deletions(-) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index 8831b52cb..658a8a6fa 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -84,10 +84,8 @@ def __init__( if not channel: # if None or empty raise TypeError("Must specify a serial port.") - if "@" in channel: (channel, ttyBaudrate) = channel.split("@") - self.serialPortOrig = serial.serial_for_url( channel, baudrate=ttyBaudrate, rtscts=rtscts ) @@ -98,13 +96,10 @@ def __init__( if bitrate is not None and btr is not None: raise ValueError("Bitrate and btr mutually exclusive.") - if bitrate is not None: self.set_bitrate(self, bitrate) - if btr is not None: self.set_bitrate_reg(self, btr) - self.open() super().__init__( @@ -117,8 +112,7 @@ def set_bitrate(self, bitrate): self.write(self._BITRATES[bitrate]) else: raise ValueError( - "Invalid bitrate, choose one of " + - (", ".join(self._BITRATES)) + "." + "Invalid bitrate, choose one of " + (", ".join(self._BITRATES)) + "." ) self.open() @@ -136,19 +130,14 @@ def read(self, timeout): # first read what is already in receive buffer while self.serialPortOrig.in_waiting: self._buffer += self.serialPortOrig.read() - # if we still don't have a complete message, do a blocking read start = time.time() time_left = timeout - while not ( - ord(self._OK) in self._buffer or - ord(self._ERROR) in self._buffer - ): + while not (ord(self._OK) in self._buffer or ord(self._ERROR) in self._buffer): self.serialPortOrig.timeout = time_left byte = self.serialPortOrig.read() if byte: self._buffer += byte - # if timeout is None, try indefinitely if timeout is None: continue @@ -160,15 +149,12 @@ def read(self, timeout): continue else: return None - # return first message for i in range(len(self._buffer)): - if ( self._buffer[i] == ord(self._OK) or - self._buffer[i] == ord(self._ERROR) ): - string = self._buffer[:i+1].decode() - del self._buffer[:i+1] + if self._buffer[i] == ord(self._OK) or self._buffer[i] == ord(self._ERROR): + string = self._buffer[: i + 1].decode() + del self._buffer[: i + 1] break - return string def flush(self): @@ -217,7 +203,6 @@ def _recv_internal(self, timeout): dlc = int(string[9]) extended = True remote = True - if canId is not None: msg = Message( arbitration_id=canId, @@ -233,7 +218,6 @@ def _recv_internal(self, timeout): def send(self, msg, timeout=None): if timeout != self.serialPortOrig.write_timeout: self.serialPortOrig.write_timeout = timeout - if msg.is_remote_frame: if msg.is_extended_id: sendStr = "R%08X%d" % (msg.arbitration_id, msg.dlc) @@ -244,7 +228,6 @@ def send(self, msg, timeout=None): sendStr = "T%08X%d" % (msg.arbitration_id, msg.dlc) else: sendStr = "t%03X%d" % (msg.arbitration_id, msg.dlc) - sendStr += "".join(["%02X" % b for b in msg.data]) self.write(sendStr) @@ -274,7 +257,6 @@ def get_version(self, timeout): hw_version = int(string[1:3]) sw_version = int(string[3:5]) return hw_version, sw_version - # if timeout is None, try indefinitely if timeout is None: continue @@ -301,7 +283,6 @@ def get_serial_number(self, timeout): elif string[0] == cmd and len(string) == 6: serial_number = string[1:-1] return serial_number - # if timeout is None, try indefinitely if timeout is None: continue diff --git a/test/test_slcan.py b/test/test_slcan.py index 178996c93..781fa75df 100644 --- a/test/test_slcan.py +++ b/test/test_slcan.py @@ -106,7 +106,7 @@ def test_partial_recv(self): self.assertIsNotNone(msg) def test_version(self): - self.serial.write(b'V1013\r') + self.serial.write(b"V1013\r") hw_ver, sw_ver = self.bus.get_version(0) self.assertEqual(hw_ver, 10) self.assertEqual(sw_ver, 13) @@ -116,7 +116,7 @@ def test_version(self): self.assertIsNone(sw_ver) def test_serial_number(self): - self.serial.write(b'NA123\r') + self.serial.write(b"NA123\r") sn = self.bus.get_serial_number(0) self.assertEqual(sn, "A123") From 0c7a18e1ee850d5ffafb74cd0d7fba27c8947478 Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Tue, 4 Jun 2019 21:40:58 +0200 Subject: [PATCH 12/15] document public methods that take arguments --- can/interfaces/slcan.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index 658a8a6fa..b581a0f13 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -107,6 +107,12 @@ def __init__( ) def set_bitrate(self, bitrate): + """ + :raise ValueError: if both *bitrate* is not among the possible values + + :param int bitrate: + Bitrate in bit/s + """ self.close() if bitrate in self._BITRATES: self.write(self._BITRATES[bitrate]) @@ -117,6 +123,10 @@ def set_bitrate(self, bitrate): self.open() def set_bitrate_reg(self, btr): + """ + :param str btr: + BTR register value to set custom can speed + """ self.close() self.write("s" + btr) self.open() From 1d7701e50619a9ec5d880ef49545db8002dc0949 Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Tue, 4 Jun 2019 22:07:25 +0200 Subject: [PATCH 13/15] make read hidden method --- can/interfaces/slcan.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index b581a0f13..e1e9a7498 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -135,7 +135,7 @@ def write(self, string): self.serialPortOrig.write(string.encode() + self.LINE_TERMINATOR) self.serialPortOrig.flush() - def read(self, timeout): + def _read(self, timeout): # first read what is already in receive buffer while self.serialPortOrig.in_waiting: @@ -185,7 +185,7 @@ def _recv_internal(self, timeout): extended = False frame = [] - string = self.read(timeout) + string = self._read(timeout) if not string: pass @@ -258,7 +258,7 @@ def get_version(self, timeout): start = time.time() time_left = timeout while True: - string = self.read(time_left) + string = self._read(time_left) if not string: pass @@ -286,7 +286,7 @@ def get_serial_number(self, timeout): start = time.time() time_left = timeout while True: - string = self.read(time_left) + string = self._read(time_left) if not string: pass From 86a5f343c03015b89d729963fe5047f95bc91c08 Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Tue, 4 Jun 2019 22:29:43 +0200 Subject: [PATCH 14/15] document get_version and get_serial_number --- can/interfaces/slcan.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index e1e9a7498..58a064ad6 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -252,6 +252,17 @@ def fileno(self): return -1 def get_version(self, timeout): + """Get HW and SW version of the slcan interface. + + :type timeout: int or None + :param timeout: + seconds to wait for version or None to wait indefinitely + + :returns: tuple (hw_version, sw_version) + WHERE + int hw_version is the hardware version or None on timeout + int sw_version is the software version or None on timeout + """ cmd = "V" self.write(cmd) @@ -280,6 +291,16 @@ def get_version(self, timeout): return None, None def get_serial_number(self, timeout): + """Get serial number of the slcan interface. + + :type timeout: int or None + :param timeout: + seconds to wait for serial number or None to wait indefinitely + + :rtype str or None + :return: + None on timeout or a str object. + """ cmd = "N" self.write(cmd) From bbc647b659d54d681e4251b17aebdc6c7c334110 Mon Sep 17 00:00:00 2001 From: Alberto Scotta Date: Wed, 5 Jun 2019 21:38:30 +0200 Subject: [PATCH 15/15] make write an hidden method --- can/interfaces/slcan.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/can/interfaces/slcan.py b/can/interfaces/slcan.py index 58a064ad6..be5d672d3 100644 --- a/can/interfaces/slcan.py +++ b/can/interfaces/slcan.py @@ -115,7 +115,7 @@ def set_bitrate(self, bitrate): """ self.close() if bitrate in self._BITRATES: - self.write(self._BITRATES[bitrate]) + self._write(self._BITRATES[bitrate]) else: raise ValueError( "Invalid bitrate, choose one of " + (", ".join(self._BITRATES)) + "." @@ -128,10 +128,10 @@ def set_bitrate_reg(self, btr): BTR register value to set custom can speed """ self.close() - self.write("s" + btr) + self._write("s" + btr) self.open() - def write(self, string): + def _write(self, string): self.serialPortOrig.write(string.encode() + self.LINE_TERMINATOR) self.serialPortOrig.flush() @@ -173,10 +173,10 @@ def flush(self): self.serialPortOrig.read() def open(self): - self.write("O") + self._write("O") def close(self): - self.write("C") + self._write("C") def _recv_internal(self, timeout): @@ -239,7 +239,7 @@ def send(self, msg, timeout=None): else: sendStr = "t%03X%d" % (msg.arbitration_id, msg.dlc) sendStr += "".join(["%02X" % b for b in msg.data]) - self.write(sendStr) + self._write(sendStr) def shutdown(self): self.close() @@ -264,7 +264,7 @@ def get_version(self, timeout): int sw_version is the software version or None on timeout """ cmd = "V" - self.write(cmd) + self._write(cmd) start = time.time() time_left = timeout @@ -302,7 +302,7 @@ def get_serial_number(self, timeout): None on timeout or a str object. """ cmd = "N" - self.write(cmd) + self._write(cmd) start = time.time() time_left = timeout