diff options
author | Diego Elio Pettenò <flameeyes@flameeyes.eu> | 2017-01-16 23:07:42 +0100 |
---|---|---|
committer | Diego Elio Pettenò <flameeyes@flameeyes.eu> | 2017-01-16 23:07:42 +0100 |
commit | 90e9a2d81d555bd916f57d7538881966e77543e4 (patch) | |
tree | fe006a4e16b674ffff25cf97ff1ae83bb1535225 /glucometerutils/support | |
parent | Add an emacs local configuration file. (diff) | |
download | glucometerutils-90e9a2d81d555bd916f57d7538881966e77543e4.tar glucometerutils-90e9a2d81d555bd916f57d7538881966e77543e4.tar.gz glucometerutils-90e9a2d81d555bd916f57d7538881966e77543e4.tar.bz2 glucometerutils-90e9a2d81d555bd916f57d7538881966e77543e4.tar.lz glucometerutils-90e9a2d81d555bd916f57d7538881966e77543e4.tar.xz glucometerutils-90e9a2d81d555bd916f57d7538881966e77543e4.tar.zst glucometerutils-90e9a2d81d555bd916f57d7538881966e77543e4.zip |
Diffstat (limited to 'glucometerutils/support')
-rw-r--r-- | glucometerutils/support/lifescan.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/glucometerutils/support/lifescan.py b/glucometerutils/support/lifescan.py new file mode 100644 index 0000000..1f8234d --- /dev/null +++ b/glucometerutils/support/lifescan.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +"""Common utility functions for LifeScan meters.""" + +__author__ = 'Diego Elio Pettenò' +__email__ = 'flameeyes@flameeyes.eu' +__copyright__ = 'Copyright © 2013, Diego Elio Pettenò' +__license__ = 'MIT' + +from glucometerutils import exceptions + + +class MissingChecksum(exceptions.InvalidResponse): + """The response misses the expected 4-digits checksum.""" + def __init__(self, response): + self.message = 'Response is missing checksum: %s' % response + + +class InvalidSerialNumber(exceptions.Error): + """The serial number is not as expected.""" + def __init__(self, serial_number): + self.message = 'Serial number %s is invalid.' % serial_number + + +class MalformedCommand(exceptions.InvalidResponse): + def __init__(self, message): + exceptions.InvalidResponse.__init__( + self, 'Malformed command: %s' % message) + + +def crc_ccitt(data): + """Calculate the CRC-16-CCITT with LifeScan's common seed. + + Args: + data: (bytes) the data to calculate the checksum of + + Returns: + (int) The 16-bit integer value of the CRC-CCITT calculated. + + This function uses the non-default 0xFFFF seed as used by multiple + LifeScan meters. + """ + crc = 0xffff + + for byte in data: + crc = (crc >> 8) & 0xffff | (crc << 8) & 0xffff + crc ^= byte + crc ^= (crc & 0xff) >> 4 + crc ^= (((crc << 8) & 0xffff) << 4) & 0xffff + crc ^= (crc & 0xff) << 5 + + return (crc & 0xffff) |