Custom binary protocol
The custom binary protocol is a flexible format designed to store binary data of varying lengths within a defined limit.
Data:
Custom data
Format:
<q><N><T><var0><var1>…<varN><cs>
Custom binary protocol description | |||||
---|---|---|---|---|---|
FIELD N. | FIELD | DESCRIPTION | UNIT | TYPE | NOTE |
Byte 0 | q | message header ('q' or 'Q') | - | string | If data is invalid or unstable (MAIN_OK = 0 in health monitoring system), the header is replaced with 'Q', while the rest of the message remains unchanged. |
Byte 1 | N | length of message | - | U8 | The number of bytes in the frame after length: T,var0,var1,…,varN,cs. |
Byte 2 | T | token | - | U8 | A user adjustable number that helps identify or label the message format. Range: [10,100]. |
Byte 3-N | varN | data message N | - | U8 / U32 / I32 / Single / Double | Selected data from output variable list. Big-endian: Data variables consisting of multiple bytes are transmitted with MSB first. |
Byte N+1 | cs | checksum | - | U8 | XOR of all bytes between token and checksum. |
Example:
A custom binary frame with example data, including roll, pitch, and heading (in that order), is shown below in hexedecimal format.
<71><0D><18> <3D><8F><EA><E4> <BE><D4><A1><E9> <43><97><F6><0F> <AD>
Byte 0 | Byte 1 | Byte 2 | Byte 3-6 | Byte 7-10 | Byte 11-14 | Byte 15 |
---|---|---|---|---|---|---|
71 | 0D | 18 | 3D 8F EA E4 | BE D4 A1 E9 | 43 97 F6 0F | AD |
Decoded values:
By using hex-to-decimal conversion and the IEEE 754 formula, we can decode the values.
Byte 0
Raw value: 71, decoded value: q (stable data).
Byte 1
Raw value: 0D, decoded value: 3 x number of bytes (per data message) + 1 (token) = 3 x 4 + 1 = 13 = 0D (hexadecimal).
Byte 2
Raw value: 18, decoded value: 18 (hexadecimal) = 24 (decimal). User selected token associated with this configuration.
Byte 3-6 (roll)
Hex to binary: 3D 8F EA E4 = 0011 1101 1000 1111 1110 1010 1110 0100.
Roll value = (-1)s x 1.M x 2(E-127) = (-1)0 x 1.000111111101010111001002 x 2(123−127) = 1.124225616 x 2-4 = 0.0702641.
Due to rounding errors, the final roll angle is 0.07 degrees.
Bit position | Component | Extracted bits |
---|---|---|
Bit 1 | Sign (S) | 0 (positive) |
Bits 2-9 | Exponent (E) | 01111011 (decimal: 123) |
Bits 10-32 | Mantissa (M) | 00011111110101011100100 |
Byte 7-10 (pitch)
Hex to binary: BE D4 A1 E9 = 1011 1110 1101 0100 1000 0001 1110 1001.
Pitch value = (-1)s x 1.M x 2(E-127) = (-1)1 x 1.101010010000001111010012 x 2(125−127) = -1.64006 x 2-2 = −0.410015.
Due to rounding errors, the final pitch angle is -0.41 degrees.
Bit position | Component | Extracted bits |
---|---|---|
Bit 1 | Sign (S) | 1 (negative) |
Bits 2-9 | Exponent (E) | 01111101 (decimal: 125) |
Bits 10-32 | Mantissa (M) | 10101001000000111101001 |
Byte 11-14 (heading)
Hex to binary: 43 97 F6 0F = 0100 0011 1001 0111 1111 0110 0000 1111.
Heading value = (-1)s x 1.M x 2(E-127) = (-1)0 x 1.001011111110110000011112 x 2(135−127) = 1.18629 x 28 = 303.69024.
Due to rounding errors, the final heading angle is 303.69 degrees.
Bit position | Component | Extracted bits |
---|---|---|
Bit 1 | Sign (S) | 0 (positive) |
Bits 2-9 | Exponent (E) | 10000111 (decimal: 125) |
Bits 10-32 | Mantissa (M) | 00101111111011000001111 |
Byte 15 (checksum)
Raw value: AD, hexadecimal value created from XOR operations of all bytes between token and checksum.
Note
The custom binary protocol follows big-endian format: MSB is stored at the lowest memory address, followed by the LSB.