From 9fb8076c5f19a71f911395ae2d6a76f2ee163841 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Elio=20Petten=C3=B2?= Date: Thu, 15 Nov 2018 23:16:24 +0000 Subject: Don't fold the command prefix into the LifeScanPacket. For the otultraeasy, there is no prefix provided in the acks at all, so the previous change broke the otultraeasy. Partial revert of b5784bb35b9968bf977d1319c3301958d671f45c. --- glucometerutils/drivers/otultraeasy.py | 29 +++++++++-------- glucometerutils/drivers/otverio2015.py | 29 +++++++++-------- glucometerutils/drivers/otverioiq.py | 37 +++++++++++----------- .../support/lifescan_binary_protocol.py | 11 ++----- 4 files changed, 53 insertions(+), 53 deletions(-) diff --git a/glucometerutils/drivers/otultraeasy.py b/glucometerutils/drivers/otultraeasy.py index f0e16a7..323ebd7 100644 --- a/glucometerutils/drivers/otultraeasy.py +++ b/glucometerutils/drivers/otultraeasy.py @@ -30,28 +30,29 @@ from glucometerutils.support import lifescan from glucometerutils.support import lifescan_binary_protocol from glucometerutils.support import serial -_PACKET = lifescan_binary_protocol.LifeScanPacket( - 0x05, True) +_PACKET = lifescan_binary_protocol.LifeScanPacket(True) _INVALID_RECORD = 501 -_VERSION_REQUEST = construct.Const(b'\x0d\x02') +_COMMAND_SUCCESS = construct.Const(b'\x05\x06') + +_VERSION_REQUEST = construct.Const(b'\x05\x0d\x02') _VERSION_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'version' / construct.PascalString(construct.Byte, encoding='ascii'), ) _SERIAL_NUMBER_REQUEST = construct.Const( - b'\x0B\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00') + b'\x05\x0B\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00') _SERIAL_NUMBER_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'serial_number' / construct.GreedyString(encoding='ascii'), ) _DATETIME_REQUEST = construct.Struct( - construct.Const(b'\x20'), # 0x20 is the datetime + construct.Const(b'\x05\x20'), # 0x20 is the datetime 'request_type' / construct.Enum(construct.Byte, write=0x01, read=0x02), 'timestamp' / construct.Default( construct_extras.Timestamp(construct.Int32ul), @@ -59,21 +60,21 @@ _DATETIME_REQUEST = construct.Struct( ) _DATETIME_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'timestamp' / construct_extras.Timestamp(construct.Int32ul), ) _GLUCOSE_UNIT_REQUEST = construct.Const( - b'\x09\x02\x09\x00\x00\x00\x00') + b'\x05\x09\x02\x09\x00\x00\x00\x00') _GLUCOSE_UNIT_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'unit' / lifescan_binary_protocol.GLUCOSE_UNIT, construct.Padding(3), ) -_MEMORY_ERASE_REQUEST = construct.Const(b'\x1A') +_MEMORY_ERASE_REQUEST = construct.Const(b'\x05\x1A') _READING_COUNT_RESPONSE = construct.Struct( construct.Const(b'\x0f'), @@ -81,12 +82,12 @@ _READING_COUNT_RESPONSE = construct.Struct( ) _READ_RECORD_REQUEST = construct.Struct( - construct.Const(b'\x1f'), + construct.Const(b'\x05\x1f'), 'record_id' / construct.Int16ul, ) _READING_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'timestamp' / construct_extras.Timestamp(construct.Int32ul), 'value' / construct.Int32ul, ) @@ -209,7 +210,7 @@ class Device(serial.SerialDevice): def zero_log(self): self._send_request( _MEMORY_ERASE_REQUEST, None, - lifescan_binary_protocol.COMMAND_SUCCESS) + _COMMAND_SUCCESS) def get_glucose_unit(self): response = self._send_request( diff --git a/glucometerutils/drivers/otverio2015.py b/glucometerutils/drivers/otverio2015.py index a7cadf5..107da34 100644 --- a/glucometerutils/drivers/otverio2015.py +++ b/glucometerutils/drivers/otverio2015.py @@ -43,10 +43,12 @@ _REGISTER_SIZE = 512 _PACKET = construct.Padded( _REGISTER_SIZE, - lifescan_binary_protocol.LifeScanPacket(0x03, False)) + lifescan_binary_protocol.LifeScanPacket(False)) + +_COMMAND_SUCCESS = construct.Const(b'\x03\x06') _QUERY_REQUEST = construct.Struct( - construct.Const(b'\xe6\x02'), + construct.Const(b'\x03\xe6\x02'), 'selector' / construct.Enum( construct.Byte, serial=0x00, model=0x01, software=0x02), ) @@ -57,39 +59,40 @@ _QUERY_RESPONSE = construct.Struct( ) _READ_PARAMETER_REQUEST = construct.Struct( + construct.Const(b'\x03'), 'selector' / construct.Enum( construct.Byte, unit=0x04), ) _READ_UNIT_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'unit' / lifescan_binary_protocol.GLUCOSE_UNIT, construct.Padding(3), ) -_READ_RTC_REQUEST = construct.Const(b'\x20\x02') +_READ_RTC_REQUEST = construct.Const(b'\x03\x20\x02') _READ_RTC_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'timestamp' / lifescan_binary_protocol.VERIO_TIMESTAMP, ) _WRITE_RTC_REQUEST = construct.Struct( - construct.Const(b'\x20\x01'), + construct.Const(b'\x03\x20\x01'), 'timestamp' / lifescan_binary_protocol.VERIO_TIMESTAMP, ) -_MEMORY_ERASE_REQUEST = construct.Const(b'\x1a') +_MEMORY_ERASE_REQUEST = construct.Const(b'\x03\x1a') -_READ_RECORD_COUNT_REQUEST = construct.Const(b'\x27\x00') +_READ_RECORD_COUNT_REQUEST = construct.Const(b'\x03\x27\x00') _READ_RECORD_COUNT_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'count' / construct.Int16ul, ) _READ_RECORD_REQUEST = construct.Struct( - construct.Const(b'\x31\x02'), + construct.Const(b'\x03\x31\x02'), 'record_id' / construct.Int16ul, construct.Const(b'\x00'), ) @@ -101,7 +104,7 @@ _MEAL_FLAG = { } _READ_RECORD_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'inverse_counter' / construct.Int16ul, construct.Padding(1), 'lifetime_counter' / construct.Int16ul, @@ -207,7 +210,7 @@ class Device(object): def set_datetime(self, date=datetime.datetime.now()): self._send_request( 3, _WRITE_RTC_REQUEST, {'timestamp': date}, - lifescan_binary_protocol.COMMAND_SUCCESS) + _COMMAND_SUCCESS) # The device does not return the new datetime, so confirm by calling # READ RTC again. @@ -216,7 +219,7 @@ class Device(object): def zero_log(self): self._send_request( 3, _MEMORY_ERASE_REQUEST, None, - lifescan_binary_protocol.COMMAND_SUCCESS) + _COMMAND_SUCCESS) def get_glucose_unit(self): response = self._send_request( diff --git a/glucometerutils/drivers/otverioiq.py b/glucometerutils/drivers/otverioiq.py index ead19a9..deafed4 100644 --- a/glucometerutils/drivers/otverioiq.py +++ b/glucometerutils/drivers/otverioiq.py @@ -30,59 +30,60 @@ from glucometerutils.support import lifescan from glucometerutils.support import lifescan_binary_protocol from glucometerutils.support import serial -_PACKET = lifescan_binary_protocol.LifeScanPacket( - 0x03, False) +_PACKET = lifescan_binary_protocol.LifeScanPacket(False) -_VERSION_REQUEST = construct.Const(b'\x0d\x01') +_COMMAND_SUCCESS = construct.Const(b'\x03\x06') + +_VERSION_REQUEST = construct.Const(b'\x03\x0d\x01') _VERSION_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'version' / construct.PascalString(construct.Byte, encoding='ascii'), # NULL-termination is not included in string length. construct.Const(b'\x00'), ) _SERIAL_NUMBER_REQUEST = construct.Const( - b'\x0b\x01\x02') + b'\x03\x0b\x01\x02') _SERIAL_NUMBER_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'serial_number' / construct.CString(encoding='ascii'), ) -_READ_RTC_REQUEST = construct.Const(b'\x20\x02') +_READ_RTC_REQUEST = construct.Const(b'\x03\x20\x02') _READ_RTC_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'timestamp' / lifescan_binary_protocol.VERIO_TIMESTAMP, ) _WRITE_RTC_REQUEST = construct.Struct( - construct.Const(b'\x20\x01'), + construct.Const(b'\x03\x20\x01'), 'timestamp' / lifescan_binary_protocol.VERIO_TIMESTAMP, ) _GLUCOSE_UNIT_REQUEST = construct.Const( - b'\x09\x02\x02') + b'\x03\x09\x02\x02') _GLUCOSE_UNIT_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'unit' / lifescan_binary_protocol.GLUCOSE_UNIT, construct.Padding(3), ) -_MEMORY_ERASE_REQUEST = construct.Const(b'\x1a') +_MEMORY_ERASE_REQUEST = construct.Const(b'\x03\x1a') -_READ_RECORD_COUNT_REQUEST = construct.Const(b'\x27\x00') +_READ_RECORD_COUNT_REQUEST = construct.Const(b'\x03\x27\x00') _READ_RECORD_COUNT_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'count' / construct.Int16ul, ) _READ_RECORD_REQUEST = construct.Struct( - construct.Const(b'\x21'), + construct.Const(b'\x03\x21'), 'record_id' / construct.Int16ul, ) @@ -93,7 +94,7 @@ _MEAL_FLAG = { } _READING_RESPONSE = construct.Struct( - lifescan_binary_protocol.COMMAND_SUCCESS, + _COMMAND_SUCCESS, 'timestamp' / lifescan_binary_protocol.VERIO_TIMESTAMP, 'value' / construct.Int16ul, 'control_test' / construct.Flag, @@ -178,7 +179,7 @@ class Device(serial.SerialDevice): response = self._send_request( _WRITE_RTC_REQUEST, { 'timestamp': date, - }, lifescan_binary_protocol.COMMAND_SUCCESS) + }, _COMMAND_SUCCESS) # The device does not return the new datetime, so confirm by calling # READ RTC again. @@ -187,7 +188,7 @@ class Device(serial.SerialDevice): def zero_log(self): self._send_request( _MEMORY_ERASE_REQUEST, None, - lifescan_binary_protocol.COMMAND_SUCCESS) + _COMMAND_SUCCESS) def get_glucose_unit(self): response = self._send_request( diff --git a/glucometerutils/support/lifescan_binary_protocol.py b/glucometerutils/support/lifescan_binary_protocol.py index 4632a94..610b5ea 100644 --- a/glucometerutils/support/lifescan_binary_protocol.py +++ b/glucometerutils/support/lifescan_binary_protocol.py @@ -27,24 +27,21 @@ _LINK_CONTROL = construct.BitStruct( 'sequence_number' / construct.Default(construct.Flag, False), ) -def LifeScanPacket(command_prefix, include_link_control): +def LifeScanPacket(include_link_control): if include_link_control: link_control_construct = _LINK_CONTROL else: link_control_construct = construct.Const(b'\x00') - command_prefix_construct = construct.Const(command_prefix, construct.Byte) - return construct.Struct( 'data' / construct.RawCopy( construct.Struct( construct.Const(b'\x02'), # stx 'length' / construct.Rebuild( - construct.Byte, lambda this: len(this.message) + 7), + construct.Byte, lambda this: len(this.message) + 6), 'link_control' / link_control_construct, - 'command_prefix' / command_prefix_construct, 'message' / construct.Bytes( - lambda this: this.length - 7), + lambda this: this.length - 6), construct.Const(b'\x03'), # etx ), ), @@ -52,8 +49,6 @@ def LifeScanPacket(command_prefix, include_link_control): construct.Int16ul, lifescan.crc_ccitt, construct.this.data.data), ) -COMMAND_SUCCESS = construct.Const(b'\x06') - VERIO_TIMESTAMP = construct_extras.Timestamp( construct.Int32ul, epoch=946684800) # 2000-01-01 (not 2010) -- cgit v1.2.3