Abbott Freestyle

Note: i figured out what the checksum is. See below.

This is a description of the protocol which is used by the following devices:

This is a work in progress. There are some parts which aren't clear to me yet.

These devices use a TRS (mini-jack) RS232 to either USB or Serial cable.

I use the Texas Instruments 3410 USB serial adapter from Abbott for testing.

The protocol description is done in ABNF, this standard can be found here.

You might notice there are some quirks in the protocol. So it likely isn't a mistake if two spaces are used for no reason or if a newline is used for no reason.


The FreeStyle protocol has 2 types of messages a command and a result. Currently only one command exists which returns multiple results.
    generic-message = command / result

The host starts with setting up the connection. After that it should send the following command:

    command = "mem"

The device then sends the following data.

    result = devicetype softwarerevision currentdatetime log
    log = ("Log Empty" end1 | (nrresults resultlines) end2)
    resultlines = firstresult *otherresults 
Device type There are ofcourse more devices then this. However, i don't know which. Please send me more device types!
    devicetype = CR LF ( "DAMH359-63524" \ ; FreeStyle Mini
			 "CDMK311-B0764" \ ; FreeStyle Freedom Lite
			 "DBMN169-C4824" ) ; FreeStyle Lite

Software revision The software revision doesn't seem to be very consistent. The first number has 5 spaces between the number and "-P" while the second one does not. As you see both of the devices i own have a integer part a radix point and a fractional part and it ends with "-P". I have no idea what this means other that it is a software revision. There are ofcourse more software revisions then this. However, i don't know which. Please send me more software revisions!
    softwarerevision = CR LF ( "4.0100     -P" \ ; On my FreeStyle Mini
			       "0.31-P" \ ; On my FreeStyle Freedom Lite (The missing spaces isn't a mistake)
			       "1.43       -P" ) ; On my FreeStyle Lite
Current time and date
    currentdatetime = CR LF datetime

    datetime = month SP day SP year SP time
    month = "Jan " / "Feb " / "Mar " / "Apr " / "May " / "June" / "July" /
	    "Aug " / "Sep " / "Oct " / "Nov " / "Dec " ; N.B. Except June and July all months have spaces at the end.
    day = 2DIGIT
    year = 4DIGIT

    time = hour ':' minute ':' second
    hour = 2DIGIT
    minute = 2DIGIT
    second = 2DIGIT
Number of results

There is probably is a maximum to this. At the moment I am guessing it is 450 which is the maximum the Abbott Precision Xceed can store. The minimum is 1

    nrresults = CR LF 3DIGIT; e.g. 001 or 250
e.g.:  CR LF "250"
Result line The first result has: CR LF LF for some reason. The others result lines don't.
    firstresult = CR LF LF resultline
    otherresults = CR LF resultline
    resultline = sugarlevel datetime2 plasmatype "0x00"
    sugarlevel = 3DIGIT ; e.g. 300 (I don't know what the maximum or minimum is)
    datetime2 = month SP day sp year sp time2
    time2 = hour ':' minute
    plasmatype = 2DIGIT
    end1 = "END"
    end2 = "0x" 4DIGIT end1 ; The 4DIGIT part is a checksum. It is the
    accumulation of all the ASCII characters (excluding the 0x000 END part).