summaryrefslogtreecommitdiffstats
path: root/glucometerutils/drivers/contourusb.py
diff options
context:
space:
mode:
authorArvanitis Christos <arvchristos@gmail.com>2019-09-25 00:06:16 +0200
committerDiego Elio Pettenò <flameeyes@flameeyes.com>2019-09-25 00:06:16 +0200
commit48e89e53d9983312e36ae6c353da9b94fa46b590 (patch)
tree3e09fd179592df54faedf746be0f8329b95513df /glucometerutils/drivers/contourusb.py
parentRemove try/except around typing imports. (diff)
downloadglucometerutils-48e89e53d9983312e36ae6c353da9b94fa46b590.tar
glucometerutils-48e89e53d9983312e36ae6c353da9b94fa46b590.tar.gz
glucometerutils-48e89e53d9983312e36ae6c353da9b94fa46b590.tar.bz2
glucometerutils-48e89e53d9983312e36ae6c353da9b94fa46b590.tar.lz
glucometerutils-48e89e53d9983312e36ae6c353da9b94fa46b590.tar.xz
glucometerutils-48e89e53d9983312e36ae6c353da9b94fa46b590.tar.zst
glucometerutils-48e89e53d9983312e36ae6c353da9b94fa46b590.zip
Diffstat (limited to 'glucometerutils/drivers/contourusb.py')
-rw-r--r--glucometerutils/drivers/contourusb.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/glucometerutils/drivers/contourusb.py b/glucometerutils/drivers/contourusb.py
new file mode 100644
index 0000000..6c333fb
--- /dev/null
+++ b/glucometerutils/drivers/contourusb.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+#
+# SPDX-License-Identifier: MIT
+"""Driver for ContourUSB devices.
+
+Supported features:
+ - get readings (blood glucose), including comments;
+ - get date and time;
+ - get serial number and software version;
+ - get device info (e.g. unit)
+
+Expected device path: /dev/hidraw4 or similar HID device. Optional when using
+HIDAPI.
+
+Further information on the device protocol can be found at
+
+http://protocols.ascensia.com/Programming-Guide.aspx
+
+"""
+
+import datetime
+
+from glucometerutils import common
+from glucometerutils.support import contourusb
+
+def _extract_timestamp(parsed_record, prefix=''):
+ """Extract the timestamp from a parsed record.
+
+ This leverages the fact that all the reading records have the same base structure.
+ """
+ datetime_str = parsed_record['datetime']
+
+ return datetime.datetime(
+ int(datetime_str[0:4]), #year
+ int(datetime_str[4:6]), #month
+ int(datetime_str[6:8]), #day
+ int(datetime_str[8:10]), #hour
+ int(datetime_str[10:12]), #minute
+ 0)
+
+
+class Device(contourusb.ContourHidDevice):
+ """Glucometer driver for FreeStyle Libre devices."""
+
+ USB_VENDOR_ID = 0x1a79 # type: int # Bayer Health Care LLC Contour
+ USB_PRODUCT_ID = 0x6002 # type: int
+
+
+ def get_meter_info(self):
+ """Return the device information in structured form."""
+ self._get_info_record()
+ return common.MeterInfo(
+ 'Contour USB',
+ serial_number=self._get_serial_number(),
+ version_info=(
+ 'Meter versions: ' + self._get_version(),),
+ native_unit= self.get_glucose_unit())
+
+ def get_glucose_unit(self): # pylint: disable=no-self-use
+ """Returns the glucose unit of the device."""
+
+ if self._get_glucose_unit() == '0':
+ return common.Unit.MG_DL
+ else:
+ return common.Unit.MMOL_L
+
+
+ def get_readings(self):
+ """
+ Get reading dump from download data mode(all readings stored)
+ This meter supports only blood samples
+ """
+ for parsed_record in self._get_multirecord():
+ yield common.GlucoseReading(
+ _extract_timestamp(parsed_record),
+ int(parsed_record['value']),
+ comment=parsed_record['markers'],
+ measure_method=common.MeasurementMethod.BLOOD_SAMPLE
+ )
+
+