To enable third-party data communication on the IOX-USB, apply the following custom parameter to the GO device through MyGeotab:
<GoParameters> <Parameter Description="Enable USB Data" Offset="164" Bytes="02"/> </GoParameters>
The GO device will automatically upgrade to the ProPlus rate plan once third-party data transfer begins.
The IOX-USB operates as a USB 2.0 full-speed host. The maximum data transfer rate is 12 Mbit/s. The IOX-USB can use two methods to enumerate a USB device:
Both the IOX-USB and the IOX-RS232 can provide power to an Add-On Device.
Even if the Hardware Add-On has a separate connection to vehicle power and ground, it is still recommended to connect the Add-On ground to the ground wire of the IOX-RS232, as this improves signal integrity.
Geotab recommends that RS232/USB serial ports are programmed in accordance with the following specifications:
Note that the BLE interface does not support arbitrary saving of status data at this time. The following messages are currently supported by the BLE interface:
ID | Name |
---|---|
0x81 | Handshake confirmation |
0x84 | Device data ACK |
0x85 | Request device data message |
0x88 | Extended application specific data from external device |
0x89 | Ping |
0x8B | Add-On protocol version request |
0x8C | Protobuf data packet |
The following process should be followed when integrating a third-party device with the GO device using our Third-Party Data Protocol:
Contact the Geotab Solutions Engineering team with a detailed integration proposal, which should include:
The Solutions Engineering team will respond with followup questions to define the integration, and assign an External device ID and any Status Data IDs that would be required.
An additional resource is the Hardware Integration Toolkit with integration walkthrough.
There is an extensively defined Status Data ID list which can be found at MyGeotab Diagnostics. Specifics regarding Status Data ID implementations can be found on the README sheet.
An initial Handshake is required in order for the GO device to accept third-party data. Vehicle ignition must be on during the handshake process.
Each message contains a 2-byte Fletcher's Checksum calculated across all the bytes of the message except the checksum itself. The checksum values are bytes, and as such overflow from 255 (0xFF) to 0 (0x00). The bytes used for the checksum calculation are all the bytes up to the checksum byte, including STX, LEN, TYPE, but not including ETX.
Checksum calculation pseudocode:
All values must be sent using Little-Endian Byte Order, meaning the least significant byte is first.
Issued by the GO device upon receipt of the Handshake Sync, and periodically re-sent to confirm that the external device is still connected.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x01 | 1 | 1 |
Message body length = 0 | 1 | 2 |
Checksum | 2 | 3 |
ETX (0x03) | 1 | 5 |
Reply: Handshake confirmation (msg type 0x81) |
Issued by the GO device upon receipt of Third-Party Data from the External Device.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x02 | 1 | 1 |
Message body length = 0 | 1 | 2 |
Checksum | 2 | 3 |
ETX (0x03) | 1 | 5 |
Issued by the GO device every 2 seconds to a connected Enhanced Hours Of Service Device (ID: 4141), or periodically when a 0x85 request message is received.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x21 | 1 | 1 |
Message body length >= 52 [1] | 1 | 2 |
Date / time [2] | 4 | 3 |
Latitude | 4 | 7 |
Longitude | 4 | 11 |
Road speed [3] | 1 | 15 |
RPM | 2 | 16 |
Odometer [4] | 4 | 18 |
Status Flags (from LSB): 1st bit: 1 = GPS Valid 2nd bit: 1 = Ignition On 3rd bit: 1 = Engine Bus Activity 4th bit: 1 = Date/Time Valid 5th bit: 1 = Speed From Engine 6th bit: 1 = Odometer From Engine | 1 | 22 |
Trip odometer [4] | 4 | 23 |
Total engine hours | 4 | 27 |
Trip duration [5] | 4 | 31 |
Deprecated = 0 | 4 | 35 |
Driver ID [6] | 4 | 39 |
GO device serial number | 12 | 43 |
Checksum | 2 | Length + 3 |
ETX (0x03) | 1 | Length + 5 |
Reply: Device data ACK (msg type 0x84) |
Data | Conversion | Units |
---|---|---|
Engine road speed | 1 | km/h |
Odometer | 0.1 | km |
RPM | 0.25 | RPM |
Lat/long | 1e-7 | degrees |
Engine hours | 0.1 | h |
Trip duration | 1 | s |
Issued by the GO device upon acceptance or rejection of either a Binary Data (0x86), an Extended Application Specific Data (0x88), or an Extended Binary Data (0x8A) message from the external device.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x22 | 1 | 1 |
Message body length = 4 | 1 | 2 |
Binary data transmission success 0 = Rejected 1 = Accepted | 1 | 3 |
Reserved | 3 | 4 |
Checksum | 2 | 7 |
ETX (0x03) | 1 | 9 |
Issued by the GO device upon receipt of a Binary Data packet of 255 bytes or less from MyGeotab destined for the external device. This message format is only used if the corresponding “Binary Data Packet Wrapping” flag has been set by the external device during the Handshake Confirmation. The payload of the binary data packet message will be the raw bytes sent from MyGeotab.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message Type = 0x23 | 1 | 1 |
Message Body Length = x (0 - 255) | 1 | 2 |
Binary Data | x | 3 |
Checksum | 2 | 3+x |
ETX (0x03) | 1 | 5+x |
Sent by the GO device to the external device. Can be in response to a 0x88 message and used for payloads larger than 1 byte. Currently only used for Keyless.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x24 | 1 | 1 |
Message body length = x | 2 | 2 |
Binary data | x | 4 |
Checksum | 2 | 4+x |
ETX (0x03) | 1 | 6+x |
Issued by the GO device upon receipt of a Binary Data packet of 256 bytes or more from MyGeotab destined for the external device This message format will only be used if the corresponding “Binary Data Packet Wrapping” flag has been set by the external device during the Handshake Confirmation. The payload of the binary data packet message will be the raw bytes as sent from MyGeotab. The maximum length currently supported by the GO is 1000 bytes.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x25 | 1 | 1 |
Message body length = x (256 - 1000) | 2 | 2 |
Binary data | x | 4 |
Checksum | 2 | 4+x |
ETX (0x03) | 1 | 6+x |
Available with add-on protocol versions 1.2 and later. Issued by the GO device in response to 0x8C. Also issued by the GO device to publish information for the topics subscribed by the Add-On device.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x26 | 1 | 1 |
Message body length = x (1 - 255) | 1 | 2 |
Data payload protobuf (1-255) | x | 3 |
Checksum | 2 | 3+x |
ETX (0x03) | 1 | 5+x |
The payload is protobuf-encoded. Please see Protobuf Schema for details.
Sent by the GO device to an external device as a reply to the Add-On protocol version request (0x8B).
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x27 | 1 | 1 |
Message body length = 4 | 1 | 2 |
Protocol major version | 2 | 3 |
Protocol minor version | 2 | 5 |
Checksum | 2 | 7 |
ETX (0x03) | 1 | 9 |
Issued by an external device every second until the Handshake Request is received.
Bytes | Position | |
---|---|---|
Sync char (0x55) | 1 | 0 |
Reply: Handshake request (msg type 0x01) |
Issued by the external device when it receives the Handshake Request.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x81 | 1 | 1 |
Message body length = 4 | 1 | 2 |
External device ID (assigned by Geotab) | 2 | 3 |
Flags 1st bit: Handshake confirmation ACK 2nd bit: Binary data packet wrapping 3rd bit: Self powered external device All other bits: Reserved for future implementation, must be set to 0 | 2 | 5 |
Checksum | 2 | 7 |
ETX (0x03) | 1 | 9 |
Handshake Confirmation ACK:
Binary Data Packet Wrapping:
Self-Powered External Device:
Issued by the external device whenever it requires Third-Party Data to be saved on the GO device as Status Data. Rate limit is 100 logs per 10 minutes, for each distinct data ID. If you exceed the rate limit, the GO device will stop taking data from the IOX.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x80 | 1 | 1 |
Message body length = 6 | 1 | 2 |
Data ID (assigned by Geotab) | 2 | 3 |
Data | 4 | 5 |
Checksum | 2 | 9 |
ETX (0x03) | 1 | 11 |
Reply: Third-party data ACK (msg type 0x02) |
Issued by the external device whenever it wants Third-Party Data to be saved on the GO device in a free format (1 to 27 bytes) that will be saved in MyGeotab as Custom Data. Rate limit is 500 logs per 10 minutes. If you exceed the rate limit, the GO device will stop taking data from the IOX.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x82 | 1 | 1 |
Message body length = x (1 to 27) | 1 | 2 |
Data | x | 3 |
Checksum | 2 | 3 + x |
ETX (0x03) | 1 | 5 + x |
Reply: Third-party data ACK (msg type 0x02) |
Issued by the external device on receipt of the GO device data message.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x84 | 1 | 1 |
Message body length = 0 | 1 | 2 |
Checksum | 2 | 3 |
ETX (0x03) | 1 | 5 |
For the purpose of acknowledging the GO device Data message when connected as an Enhanced Hours Of Service Device:
This is a request-response message. It can be issued by the External Device whenever it wishes to receive the Device Data Info Message (0x21).
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x85 | 1 | 1 |
Message body length = 0 | 1 | 2 |
Checksum | 2 | 3 |
ETX (0x03) | 1 | 5 |
Reply: GO device data (msg type 0x21) |
Sent by the external device when sending messages with less than or equal to 255 bytes of data content to MyGeotab. The GO device will respond with the Binary Data Response message indicating whether the data was accepted into the modem's socket buffer.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x86 | 1 | 1 |
Message body length = x (0 - 255) | 1 | 2 |
Binary data | x | 3 |
Checksum | 2 | 3+x |
ETX (0x03) | 1 | 5+x |
Reply: Binary data response (msg type 0x22) |
The payload of the binary data needs to adhere to protocols understood by MyGeotab. MIME protocol is one of these protocols. Please see Appendix C for implementation details.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x87 | 1 | 1 |
Message body length = 6 | 1 | 2 |
Data ID (assigned by Geotab) | 2 | 3 |
Data | 4 | 5 |
Checksum | 2 | 9 |
ETX (0x03) | 1 | 11 |
Reply: Third-party data ACK (msg type 0x02) |
Extended application-specific data from external device is sent by the external device to the GO device. Can be used for payloads larger than 1 byte. There must be an associated service running on the GO device that is looking for these messages. Currently only used for Keyless.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x88 | 1 | 1 |
Message body length = x (1 to 1024) | 2 | 2 |
Data payload | x | 4 |
Checksum | 2 | 4+x |
ETX (0x03) | 1 | 6+x |
Reply: Binary data response (msg type 0x22) |
After handshaking, this message can be issued periodically by the external device to check that the GO device is active and ready. The GO device will normally reply with the Third-Party Data Ack (Msg Type 0x02). If this reply is not received, the external device should reset and begin sending the Handshake Sync (0x55).
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x89 | 1 | 1 |
Message body length = 0 | 1 | 2 |
Checksum | 2 | 3 |
ETX (0x03) | 1 | 5 |
Reply: Third-party data ACK (msg type 0x02) |
Sent by the external device when sending messages with <= 1000 bytes of data content to MyGeotab. The GO device will respond with the Binary Data Response message indicating whether the data was accepted into the modem's socket buffer.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x8A | 1 | 1 |
Message body length = x (0 - 1000) | 2 | 2 |
Extended_binary_data | x | 4 |
Checksum | 2 | 4+x |
ETX (0x03) | 1 | 6+x |
Reply: Binary data response (msg type 0x22) |
The payload of the binary data needs to adhere to protocols understood by the Geotab servers. MIME protocol is one of these protocols. Please seeAppendix C for implementation details.
Sent by the external device when requesting the Add-On protocol version number. Once the GO device receives this request, it will reply with 0x27.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x8B | 1 | 1 |
Message body length = 0 | 1 | 2 |
Checksum | 2 | 3 |
ETX (0x03) | 1 | 5 |
Reply: Third-Party version ACK Reply (msg type 0x27) |
Available with Add-On protocol versions 1.2 and later. Sent by the external device to subscribe to various topics/information. The GO device will respond with 0x26 ACK.
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x8C | 1 | 1 |
Message body length = x(1-255) | 1 | 2 |
Data payload protobuf (message_body) = x (1 to 255) | x | 3 |
Checksum | 2 | 3 + x |
ETX (0x03) | 1 | 5 + x |
Reply: Protobuf data packet (Msg Type 0x26) |
The payload is protobuf-encoded. Please see Protobuf Schema for details. The currently supported topics are:
Topic |
---|
TOPIC_VIN |
TOPIC_GEAR |
TOPIC_ENGINE_SPEED |
TOPIC_ENGINE_LOAD |
TOPIC_ODOMETER |
TOPIC_ACCEL_PEDAL_PERCENTAGE |
TOPIC_COOLANT_TEMP |
TOPIC_DOC_INTAKE_GAS_TEMP |
TOPIC_DOC_OUTLET_GAS_TEMP |
TOPIC_FUELTANK1_UNITS |
TOPIC_FUELTANK2_UNITS |
TOPIC_FUELTANK1_PERCENT |
TOPIC_FUELTANK2_PERCENT |
TOPIC_STATE_OF_CHARGE |
TOPIC_ENGINE_ROAD_SPEED |
TOPIC_VEHICLE_ACTIVE |
TOPIC_DRIVER_SEATBELT |
TOPIC_LEFT_TURN_SIGNAL |
TOPIC_RIGHT_TURN_SIGNAL |
TOPIC_EV_CHARGING_STATE |
TOPIC_PARK_BRAKE |
Handshake Sync from External Device
0x55... 0x55... 0x55
Handshake Request from GO device
0x02, 0x01, 0x00, 0x03, 0x08, 0x03
Handshake Confirmation from External Device (4208 is a test Device ID)
(Device ID: 4208 = 0x00001070)
0x02, 0x81, 0x04, 0x70, 0x10, 0x00, 0x00, 0x07, 0x18, 0x03
Third-Party Data from External Device
(Status Data ID: 35349 = 0x8A15, Data Value: 200 = 0x000000C8)
0x02, 0x80, 0x06, 0x15, 0x8A, 0xC8, 0x00, 0x00, 0x00, 0xEF, 0x8C, 0x03
Third-Party Data Acknowledge from GO device
0x02, 0x02, 0x00, 0x04, 0x0A, 0x03
MIME-type data can be transferred from an external device to the server via the GO device. The protocol is described in MIME passthrough messages.
The Message Flow is similar to that outlined in Appendix B, with the following variations:
Readers are encouraged to also read the Geotab MIME Data Exchange Example IOX-RS232 to better understand of the protocol.
This is an example of binary data packets for image data transferred using the MIME type "image/jpeg". The image size is 83000 bytes. The packet size is 250.
First packet:
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x86 | 1 | 1 |
Message body length = 250 | 1 | 2 |
Sequence number = 0 | 1 | 3 |
MIME type length = 10 | 1 | 4 |
MIME type (“image/jpeg”) | 10 | 5 |
Payload Length = 83000 | 4 | 15 |
Binary Payload (the first 234 bytes) | 234 | 19 |
Checksum | 2 | 253 |
ETX (0x03) | 1 | 255 |
Second packet:
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x86 | 1 | 1 |
Message body length = 250 | 1 | 2 |
Sequence number = 1* | 1 | 3 |
Binary Payload (the next 249 bytes) | 249 | 4 |
Checksum | 2 | 253 |
ETX (0x03) | 1 | 255 |
Bytes | Position | |
---|---|---|
STX (0x02) | 1 | 0 |
Message type = 0x23 | 1 | 1 |
Message body length = 9+x | 1 | 2 |
Sequence number = 0 | 1 | 3 |
MIME type length = 3 | 1 | 4 |
MIME type in ASCII = 'ACK' | 3 | 5 |
Payload length = x | 4 | 8 |
Total number of payload bytes received | x | 12 |
Checksum | 2 | 12+x |
ETX (0x03) | 1 | 14+x |