glucometer-protocols

A shared repository to provide a description of reverse-engineered glucometer protocols

View the Project on GitHub glucometers-tech/glucometer-protocols

LifeScan Shared Binary Protocol

Multiple LifeScan devices of the OneTouch family share a common packet framing protocol, clearly designed for serial communication but used over different transmission protocols as well.

While commands within the protocol are specific to the model, the framing is vastly similar if not identical.

packet = STX length link-control command_prefix message ETX checksum
STX = %x02
length = OCTET
link-control = OCTET
message = [length - 6]OCTET
ETX = %x03
checksum = 2OCTET           ; 16-bit little-endian value

The packets are variable length, with the length provided by the byte following the STX constant. This length is inclusive of the whole packet framing. The message itself is 6 bytes short of this value.

The STX and ETX constants mark start and end of the message and correspond to the ASCII characters bearing the same names.

The link-control byte is only used by some devices, and for others is maintained to a constant 0x00.

The checksum is a variant of CRC-16-CCITT, seeded at 0xFFFF, and stored little-endian.

The link-control byte is known used only in the OneTouch Ultra Easy protocol, which contains a description of the field. As no other meter uses this byte, its documentation is left to the LifeScan provided specifications.

Command Prefix

For packet that includes non-zero length messages, the message itself can be defined as

message = command-prefix *OCTET
command-prefix = OCTET

The command prefix is device-specific, and is present both in the requests sent and the responses received.

Some devices allow more than one prefix to be used, although not in the same session. If multiple prefixes are legal, the responses will echo back the command prefix of their request.

Exceptions (likely bugs) exists where this guarantee is not maintained, check device-specific documentation.

Command Success

With the exception of a few device-specific control packets, all commands sent to the device receive a response in the same packet format. This extends the format a response to:

response = command-prefix status *OCTET
command-prefix = OCTET ; as provided in the request
status = success / error
success = %x06
error = %x09 / OCTET ; only some errors are identified

Whether data follows a non-success status is device specific. Data should not be considered a valid response if the status is not success.