summaryrefslogtreecommitdiffstats
path: root/glucometerutils/drivers/otverio2015.py
diff options
context:
space:
mode:
Diffstat (limited to 'glucometerutils/drivers/otverio2015.py')
-rw-r--r--glucometerutils/drivers/otverio2015.py42
1 files changed, 26 insertions, 16 deletions
diff --git a/glucometerutils/drivers/otverio2015.py b/glucometerutils/drivers/otverio2015.py
index 3882d70..4e9138a 100644
--- a/glucometerutils/drivers/otverio2015.py
+++ b/glucometerutils/drivers/otverio2015.py
@@ -23,7 +23,9 @@ https://protocols.glucometers.tech/lifescan/onetouch-verio-2015
"""
import binascii
+import datetime
import logging
+from typing import Any, Dict, Generator, Optional
import construct
from pyscsi.pyscsi.scsi import SCSI
@@ -105,19 +107,21 @@ _READ_RECORD_RESPONSE = construct.Struct(
class Device(driver_base.GlucometerDriver):
- def __init__(self, device):
+ def __init__(self, device: Optional[str]) -> None:
if not device:
raise exceptions.CommandLineError(
"--device parameter is required, should point to the disk "
"device representing the meter."
)
+ super().__init__(device)
+
self.device_name_ = device
self.scsi_device_ = SCSIDevice(device, readwrite=True)
self.scsi_ = SCSI(self.scsi_device_)
self.scsi_.blocksize = _REGISTER_SIZE
- def connect(self):
+ def connect(self) -> None:
inq = self.scsi_.inquiry()
logging.debug("Device connected: %r", inq.result)
vendor = inq.result["t10_vendor_identification"][:32]
@@ -126,14 +130,20 @@ class Device(driver_base.GlucometerDriver):
f"Device {self.device_name_} is not a LifeScan glucometer."
)
- def disconnect(self): # pylint: disable=no-self-use
+ def disconnect(self) -> None: # pylint: disable=no-self-use
return
- def _send_request(self, lba, request_format, request_obj, response_format):
+ def _send_request(
+ self,
+ lba: int,
+ request_format: construct.Struct,
+ request_obj: Optional[Dict[str, Any]],
+ response_format: construct.Struct,
+ ) -> construct.Container:
"""Send a request to the meter, and read its response.
Args:
- lba: (int) the address of the block register to use, known
+ lba: the address of the block register to use, known
valid addresses are 3, 4 and 5.
request_format: a construct format identifier of the request to send
request_obj: the object to format with the provided identifier
@@ -168,14 +178,14 @@ class Device(driver_base.GlucometerDriver):
except construct.ConstructError as e:
raise lifescan.MalformedCommand(str(e))
- def _query_string(self, selector):
+ def _query_string(self, selector: str) -> str:
response = self._send_request(
3, _QUERY_REQUEST, {"selector": selector}, _QUERY_RESPONSE
)
return response.value
- def get_meter_info(self):
+ def get_meter_info(self) -> common.MeterInfo:
model = self._query_string("model")
return common.MeterInfo(
f"OneTouch {model} glucometer",
@@ -184,39 +194,39 @@ class Device(driver_base.GlucometerDriver):
native_unit=self.get_glucose_unit(),
)
- def get_serial_number(self):
+ def get_serial_number(self) -> str:
return self._query_string("serial")
- def get_version(self):
+ def get_version(self) -> str:
return self._query_string("software")
- def get_datetime(self):
+ def get_datetime(self) -> datetime.datetime:
response = self._send_request(3, _READ_RTC_REQUEST, None, _READ_RTC_RESPONSE)
return response.timestamp
- def _set_device_datetime(self, date):
+ def _set_device_datetime(self, date: datetime.datetime) -> datetime.datetime:
self._send_request(3, _WRITE_RTC_REQUEST, {"timestamp": date}, _COMMAND_SUCCESS)
# The device does not return the new datetime, so confirm by calling
# READ RTC again.
return self.get_datetime()
- def zero_log(self):
+ def zero_log(self) -> None:
self._send_request(3, _MEMORY_ERASE_REQUEST, None, _COMMAND_SUCCESS)
- def get_glucose_unit(self):
+ def get_glucose_unit(self) -> common.Unit:
response = self._send_request(
4, _READ_PARAMETER_REQUEST, {"selector": "unit"}, _READ_UNIT_RESPONSE
)
return response.unit
- def _get_reading_count(self):
+ def _get_reading_count(self) -> int:
response = self._send_request(
3, _READ_RECORD_COUNT_REQUEST, None, _READ_RECORD_COUNT_RESPONSE
)
return response.count
- def _get_reading(self, record_id):
+ def _get_reading(self, record_id: int) -> common.GlucoseReading:
response = self._send_request(
3, _READ_RECORD_REQUEST, {"record_id": record_id}, _READ_RECORD_RESPONSE
)
@@ -224,7 +234,7 @@ class Device(driver_base.GlucometerDriver):
response.timestamp, float(response.value), meal=response.meal
)
- def get_readings(self):
+ def get_readings(self) -> Generator[common.AnyReading, None, None]:
record_count = self._get_reading_count()
for record_id in range(record_count):
yield self._get_reading(record_id)