summaryrefslogtreecommitdiffstats
path: root/glucometerutils/support/lifescan_binary_protocol.py
diff options
context:
space:
mode:
Diffstat (limited to 'glucometerutils/support/lifescan_binary_protocol.py')
-rw-r--r--glucometerutils/support/lifescan_binary_protocol.py57
1 files changed, 31 insertions, 26 deletions
diff --git a/glucometerutils/support/lifescan_binary_protocol.py b/glucometerutils/support/lifescan_binary_protocol.py
index 0143cd4..92a0002 100644
--- a/glucometerutils/support/lifescan_binary_protocol.py
+++ b/glucometerutils/support/lifescan_binary_protocol.py
@@ -18,36 +18,41 @@ from glucometerutils import common
from glucometerutils.support import construct_extras
from glucometerutils.support import lifescan
+_LINK_CONTROL = construct.BitStruct(
+ construct.Padding(3),
+ 'more' / construct.Default(construct.Flag, False),
+ 'disconnect' / construct.Default(construct.Flag, False),
+ 'acknowledge' / construct.Default(construct.Flag, False),
+ 'expect_receive' / construct.Default(construct.Flag, False),
+ 'sequence_number' / construct.Default(construct.Flag, False),
+)
+
+def LifeScanPacket(command_prefix, include_link_control):
+ if include_link_control:
+ link_control_construct = _LINK_CONTROL
+ else:
+ link_control_construct = construct.Const(b'\x00')
-PACKET = construct.Struct(
- construct.RawCopy(
- construct.Embedded(
- construct.Struct(
- construct.Const(b'\x02'), # stx
- 'length' / construct.Rebuild(
- construct.Byte, lambda ctx: len(ctx.message) + 6),
- # The following structure is only used by some of the devices.
- 'link_control' / construct.BitStruct(
- construct.Padding(3),
- 'more' / construct.Default(
- construct.Flag, False),
- 'disconnect' / construct.Default(
- construct.Flag, False),
- 'acknowledge' / construct.Default(
- construct.Flag, False),
- 'expect_receive' / construct.Default(
- construct.Flag, False),
- 'sequence_number' / construct.Default(
- construct.Flag, False),
+ command_prefix_construct = construct.Const(construct.Byte, command_prefix)
+
+ return construct.Struct(
+ construct.RawCopy(
+ construct.Embedded(
+ construct.Struct(
+ construct.Const(b'\x02'), # stx
+ 'length' / construct.Rebuild(
+ construct.Byte, lambda ctx: len(ctx.message) + 7),
+ 'link_control' / link_control_construct,
+ 'command_prefix' / command_prefix_construct,
+ 'message' / construct.Bytes(
+ length=lambda ctx: ctx.length - 7),
+ construct.Const(b'\x03'), # etx
),
- 'message' / construct.Bytes(length=lambda ctx: ctx.length - 6),
- construct.Const(b'\x03'), # etx
),
),
- ),
- 'checksum' / construct.Checksum(
- construct.Int16ul, lifescan.crc_ccitt, construct.this.data),
-)
+ 'checksum' / construct.Checksum(
+ construct.Int16ul, lifescan.crc_ccitt, construct.this.data),
+ )
VERIO_TIMESTAMP = construct_extras.Timestamp(
construct.Int32ul, epoch=946684800) # 2010-01-01 00:00