From 2a825fb889735fa881566d1764cc48d2814447d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Elio=20Petten=C3=B2?= Date: Mon, 17 Apr 2017 16:28:26 +0100 Subject: Serial drivers: factor out opening of the serial port to a new base class. This allows the serial support class to open the serial port without each driver having to pass the same long list of parameters, given that effectively all the meters use the same parameters, except few. --- glucometerutils/drivers/fsoptium.py | 16 ++++------------ glucometerutils/drivers/otultra2.py | 16 ++++------------ glucometerutils/drivers/otultraeasy.py | 17 ++++++----------- glucometerutils/drivers/sdcodefree.py | 19 +++++-------------- 4 files changed, 19 insertions(+), 49 deletions(-) (limited to 'glucometerutils/drivers') diff --git a/glucometerutils/drivers/fsoptium.py b/glucometerutils/drivers/fsoptium.py index a380c96..d1b5f24 100644 --- a/glucometerutils/drivers/fsoptium.py +++ b/glucometerutils/drivers/fsoptium.py @@ -15,10 +15,9 @@ import datetime import logging import re -import serial - from glucometerutils import common from glucometerutils import exceptions +from glucomterutils.support import serial _CLOCK_RE = re.compile( @@ -77,16 +76,9 @@ def _parse_clock(datestr): return datetime.datetime(year, month, day, hour, minute, second) -class Device(object): - def __init__(self, device): - if not device: - logging.info('No --device parameter provided, looking for default cable.') - device = 'hwgrep://1a61:3420' - - self.serial_ = serial.serial_for_url( - device, baudrate=19200, bytesize=serial.EIGHTBITS, - parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, - timeout=1, xonxoff=True, rtscts=False, dsrdtr=False, writeTimeout=None) +class Device(serial.SerialDevice): + BAUDRATE = 19200 + DEFAULT_CABLE_ID = '1a61:3420' def _send_command(self, command): cmd_bytes = bytes('$%s\r\n' % command, 'ascii') diff --git a/glucometerutils/drivers/otultra2.py b/glucometerutils/drivers/otultra2.py index 28a4771..8e33ea5 100644 --- a/glucometerutils/drivers/otultra2.py +++ b/glucometerutils/drivers/otultra2.py @@ -10,11 +10,10 @@ import datetime import logging import re -import serial - from glucometerutils import common from glucometerutils import exceptions from glucometerutils.support import lifescan +from glucometerutils.support import serial # The following two hashes are taken directly from LifeScan's documentation _MEAL_CODES = { @@ -123,16 +122,9 @@ def _parse_datetime(response): return datetime.datetime(2000 + year, month, day, hour, minute, second) -class Device(object): - def __init__(self, device): - if not device: - logging.info('No --device parameter provided, looking for default cable.') - device = 'hwgrep://067b:2303' - - self.serial_ = serial.serial_for_url( - device, baudrate=9600, bytesize=serial.EIGHTBITS, - parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, - timeout=1, xonxoff=False, rtscts=False, dsrdtr=False, writeTimeout=None) +class Device(serial.SerialDevice): + BAUDRATE = 9600 + DEFAULT_CABLE_ID = '067b:2303' # Generic PL2303 cable. def connect(self): return diff --git a/glucometerutils/drivers/otultraeasy.py b/glucometerutils/drivers/otultraeasy.py index 2976b9e..31b719f 100644 --- a/glucometerutils/drivers/otultraeasy.py +++ b/glucometerutils/drivers/otultraeasy.py @@ -13,11 +13,10 @@ import re import struct import time -import serial - from glucometerutils import common from glucometerutils import exceptions from glucometerutils.support import lifescan +from glucometerutils.support import serial _STX = 0x02 _ETX = 0x03 @@ -176,16 +175,12 @@ class _Packet(object): return self.cmd[_IDX_DATA:_IDX_ETX] -class Device(object): +class Device(serial.SerialDevice): + BAUDRATE = 9600 + DEFAULT_CABLE_ID = '067b:2303' # Generic PL2303 cable. + def __init__(self, device): - if not device: - logging.info('No --device parameter provided, looking for default cable.') - device = 'hwgrep://067b:2303' - - self.serial_ = serial.serial_for_url( - device, baudrate=9600, bytesize=serial.EIGHTBITS, - parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, - timeout=1, xonxoff=False, rtscts=False, dsrdtr=False, writeTimeout=None) + super(Device, self).__init__(device) self.sent_counter_ = False self.expect_receive_ = False diff --git a/glucometerutils/drivers/sdcodefree.py b/glucometerutils/drivers/sdcodefree.py index 0cd0b28..9aeb653 100644 --- a/glucometerutils/drivers/sdcodefree.py +++ b/glucometerutils/drivers/sdcodefree.py @@ -15,10 +15,9 @@ import operator import struct import time -import serial - from glucometerutils import common from glucometerutils import exceptions +from glucometerutils.support import serial _STX = 0x53 # Not really 'STX' _ETX = 0xAA # Not really 'ETX' @@ -64,18 +63,10 @@ def parse_reading(msgdata): def xor_checksum(msg): return functools.reduce(operator.xor, msg) -class Device(object): - def __init__(self, device): - if not device: - logging.info( - 'No --device parameter provided, looking for default cable.') - device = 'hwgrep://10c4:ea60' - - self.serial_ = serial.serial_for_url( - device, baudrate=38400, bytesize=serial.EIGHTBITS, - parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, - timeout=300, xonxoff=False, rtscts=False, dsrdtr=False, - writeTimeout=None) +class Device(serial.SerialDevice): + BAUDRATE = 38400 + DEFAULT_CABLE_ID = '10c4:ea60' # Generic cable. + TIMEOUT = 300 # We need to wait for data from the device. def read_packet(self): preamble = self.serial_.read(3) -- cgit v1.2.3