Sanofi BGStar and Mystar Extra

Reverse Engineered by Noury (@nbenm)

Important device notes

This protocol is used in the following devices:

  • BGStar
  • MyStar Extra
  • Other devices exist but have not been tested

Cable

These devices connect to a computer with a USB to RS232 cable.

Sanofi provides for free this cable. It contains a CP210x component, and uses a VCP CP210x driver. This cable is known as Zero-click cable.

With linux cp210x and usbserial modules are loaded. A device is created in /dev/ttyUSBx With MacOs it uses Mac VCP Driver (CP210x) from Silicon Labs. a device is created in /dev/cu.SLAB_USBtoUART I have asked them in 2016 to add the vendor id/product id, and they did it.

Protocol

Serial port configuration

The serial port should be configured as such:

  • 8 data bits;
  • no parity bits;
  • 1 stop bit;
  • 115200 baud rate.

Messages and commands

All commands (requests) must end with a carriage return.

In all results, leading zeros are removed.

Message status is reported with HTTP-style status codes.

continue = "100"
ok = "200"

Hello command

first-command = "hello" CR

first-response = ok SP "hello" SP name
name = 4ALPHA "-" 2ALPHA

Get Serial command

get-serial-cmd = "get serial" CR
get-serial-response = ok SP "serial" SP serial
serial = 14( ALPHA / DIGIT )

Get date and time

get-datetime-cmd = "get datetime" CR
get-datetime-response = ok SP datetime

datetime = year SP month SP day SP
           hour SP minutes SP seconds
year = 4DIGIT
day = 1*2DIGIT
hour = 1*2DIGIT
minute = 1*2DIGIT
second = 1*2DIGIT

Set date and time

TODO: confirm the correct command.

Get number of results

get-glucount-cmd = "get glucount" CR
get-glucount-response = ok SP "glucount" 1*4DIGIT

Get single result

Result ID is in reverse time order, 0 is most recent.

get-glurec-cmd = "get glurec" SP glurec-id CR
glurec-id = 1*4DIGIT

get-glurec-response = ok SP "glurec" SP record
record = 1DIGIT 1DIGIT value flag-meal datetime
value = 1*3DIGIT

flag-meal = no-meal /
            before-breakfast / after-breakfast /
            before-lunch / after-lunch /
            before-dinner / after-dinner
no-meal = "0"
before-breakfast = "1"
after-breakfast = "2"
before-lunch = "3"
after-lunch = "4"
before-dinner = "5"
after-dinner = "6"

If there was an error when the measure was taken, response begins with E. Unfortunately, I can't reproduce this to have the full error message. But it is sure that fifth field begins with an E (fields are separated by spaces)

In the meter I have used, value is in mg/dL

The maximum number of results is 1865. After that oldest result is replaced.

To be checked: after that which number is used for a new result?

Get System Info

TODO: confirm whether lines end with CR or CRLF.

get-sysinfo-cmd = "get sysinfo all" CR
get-sysinfo-response = 1*sysinfo-line
                       ok SP "sysinfo all"
sysinfo-line = continue SP sysinfo-key SP sysinfo-value CR
sysinfo-key = "model" / "product" / "comm" / "commaster" /
              "co" / "firmware" / "calcode" / "compiler" /
              "compiletime" / "deviceid" / "cpu" / 1*ALPHA
sysinfo-value = 1*VCHAR

Get Glucose Units:

get-glucose-unit-cmd = "get gluunit" CR
get-glucose-unit-response = ok SP "gluunit" SP unit
unit = "mg/dL" / 1*VCHAR

TODO: confirm the unit for mmol/L devices.