Reverse engineered by Diego Elio Pettenò.
The data cable provided for the device is an USB Serial adapter based on Silicon Laboratories CP210x chipset.
It appears to be a fairly standard USB-to-TRS serial adapter, though the connector is a subminiature (2.5mm connector):
|Device||Vendor ID||Product ID|
|GlucoMen Areo Cable||10c4||ea60|
The communication happens over a serial protocol, mixing text-based and byte-based commands.
Serial port configuration
The serial port should be configured as such:
- 8 data bits;
- odd parity;
- 1 stop bit;
- 9600 baud rate.
Request and Response Structure
Commands are sent from the host to the device with either a single byte, or with two command bytes followed by text parameters. Responses from the device are either in text format, or a single byte response (if the request had text parameters).
There are very few known commands that can be represented as such:
request = get-info-command / get-readings-command / set-datetime-command response = text-parameters / no-readings / simple-response get-info-command = %xA2 get-readings-command = %x80 set-datetime-command = %xC2 %xA1 text-parameters simple-response = F / P no-readings = "[" CRLF %x90 %x3D CRLF "]" CRLF text-parameters = "[" CRLF *response-line checksum CRLF "]" CRLF response-line = 1*VCHAR CRLF checksum = 2HEXDIG
The checksum is calculated according to the CRC-8/Maxim algorithm, applied on the text parameters
starting from the opening square bracket (
[) up until and including the
CRLF preceding the checksum itself.
It is represented as two upper case hexadecimal digits. The device will refuse a command sent with a lower-case checksum even if correct.
GET INFO command receives a text response consisting of a single line, comma-separated:
get-info-response = *DIGIT "," *DIGIT "," *DIGIT "," serial-number "," sw-version CRLF serial-number = *SP 1*VCHAR sw-version = *SP 1*VCHAR
The first three values are unknown at the time of writing, while the serial number and software versions may have leading spaces, and are otherwise printable characters.
Setting Date time
To set the date and time of the device, a single command can be sent, followed by the text parameters in the same format as returned by the device.
Note: the checksum has to be in upper case to be accepted by the device.
set-datetime-command = %xC2 %xA1 "[" CRLF datetime checksum CRLF "]" CRLF datetime = year month day hour minute year = 2DIGIT month = 2DIGIT day = 2DIGIT hour = 2DIGIT minute = 2DIGIT
GET READING command receives either a response informing that there are no readings on the
device or one reading per line in the text format with comma-separated values.
no-readings = "[" CRLF %x90 %x3D CRLF "]" CRLF reading-response-line = reading-type "," value "," unit "," markings "," date "," time CRLF reading-type = "Glu" / 1*VCHAR value = 1*DIGIT *1("." DIGIT) unit = "mmol/L" / 1*VCHAR markings = no-marking / check-mark / before-meal / after-meal / exercise date = year month day time = hour minute no-marking = "00" check-mark = "01" before-meal = "02" after-meal = "04" exercise = "08" year = 2DIGIT month = 2DIGIT day = 2DIGIT hour = 2DIGIT minute = 2DIGIT
It's important to note that the readings are expressed in the native unite of the device and not, like in most other meters, in mg/dL even for mmol/L devices. This means you need to check the unit that is used in the same reading itself.
The markings values appear to correspond to values in a bitmask but they cannot be applied simultaneously, so they should be considered as different enumeration values.