GSatMicro Protocol

GSE Open GPS Protocol is an open standard for GPS, M2M, or SCADA device manufacturers to utilize for ease of implementation and flexibility by using a common standard. This standard is open to additional message types as suggested by the community of manufactures of telematics devices and sensor manufactures. The protocol is designed to include multiple blocks of data in a single transmission, and can be broken into multiple transmissions as seen fit based on message size limitations of satellite, GSM, UDP, or the protocol of your choosing. The device in the field is typically microcontroller based, and therefore, compiling messages sequentially in an integer based binary format is preferred.[1]

This protocol format is a collaboration of multiple vendors to utilize a common protocol or messaging structure for low bandwidth, messaging style applications, where there is often a custom protocol definition for every hardware vendor in the IoT market. As there is a common dataset transmitted by most telematics and tracking devices, this open format and collaboration between any hardware vendor looking to utilize a common standard, will speed the integration time of hardware and platforms.

Hardware vendors benefit from immediately available data in any telematics or IoT[2] platform that already supports this format.

Platform vendors benefit from easy integration and testing of new hardware or additional capabilities from hardware vendors.

There is large blocks of datasets left open for definitions and expansions as new technologies come to market. Continually adding additional dataset definitions to this protocol will expand as the group of vendors continue to innovate these markets. Feel free to reach out to any of the group of vendors contributing to this protocol for comments, questions, reviews, and or additions.

Intended future uses include LoRA[3], 4G, NB-IOT, BLE 4, BLE 4.1, BLE 5, ANT+, and RFID.

Open License

Copyright (c) 2017 Global Satellite Engineering, Inc. Permission is hereby granted, free of charge, to any person to deal in the message format without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the message format, to send and receive messages formatted according to the message format, and to permit persons to whom the message format is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies of documentation describing the message format. THE MESSAGE FORMAT IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MESSAGE FORMAT OR THE USE OR OTHER DEALINGS IN THE MESSAGE FORMAT.

Supported Products

GSatMicro

GSatMicro X

GSatMicro OEM

Iridium Products[4]

Iridium Next Products

Inmarsat Terminals[5]

External Links:

GSatMicro

Mobile Originated and Mobile Terminated Packet Definitions

All data blocks are big-endian (MSB) unless otherwise specified.

Mobile Originated Packet

Mobile Originated Packet Structure
Octet  7  6  5  4  3  2  1  0
0 Message Block Type
000: GPS Format Reserved 10 Byte
001: Text Message
002: Settings Update
003: Interface Version Response
004: 10 Byte GPS Location
005: 18 Byte GPS Location
006: MAC Address (BLE or WiFi)
007: Sensor
008: Device ID/IMEI
009: Ping/Pong
010-019: GPS Formats Reservation
020-039: LoRA and RFID Reservation
040: String Settings Update
041-199: Do not use, future definitions
200-249: User Defined (Open for manufacturer specific development)
250: Payload Version
254: ACK Request/Response
255: Encrypted Message Wrapper
1 - X Block Data
X (optional) Additional Message Block Type...
X - X (optional) Block Data...

Mobile Originated Block Data Definitions

001: Text Message
Octet  7  6  5  4  3  2  1  0
0 Recipient Length
1 - X Recipient String
X - X Text String (NULL terminated)
Format Definitions
Recipient String ASCII text
Text String ASCII text - NULL (0x00) terminated
002: Settings Message
Octet  7  6  5  4  3  2  1  0
0 Manufacturer ID
1 Settings Version
2-(X + 4) 32 bit value, manufacturer specific
Manufacturer 0x03 (GSatMicro)
2-5 Default Version
6-9 GPS HDOP
10-13 GPS Timeout
14-17 Iridium Tx Timeout
18-21 Iridium Signal Timeout
22-25 Iridium Tx Retries
26-29 Sleep Interval
30-33 SOS Sleep Interval
34-37 Sleep When Powered
38-41 LED Mask
42-45 Keep Radio Awake
46-49 Include Altitude
50-53 GPS Settle
54-65 Reserved
66-69 Low Batt Off
70-73 GPS Hibernate Sleep
74-77 Cache Reports
78-81 Moving Sleep Interval
82-85 Moving Threshold Speed
86-89 Require Encrypted MT
90-93 GPS On Always
94-97 Sleep With Battery
98-101 Include Seconds
102-105 Report Format
Format Definitions
GPS HDOP X/10, 10-500
GPS Timeout Seconds, 1-(2^31-1)
004: 10 Byte GPS Location
Octet  7  6  5  4  3  2  1  0
0 Magic Number Longitude
1 Longitude
2 Longitude
3 Longitude Heading
4 Time
5 Time Latitude
6 Latitude
7 Latitude
8 Speed Altitude
9 Altitude
Format Definitions
Magic Number 0x0
Longitude X/23301-180 degrees

Invalid Position = 0xFF for all bytes of Latitude AND Longitude

Heading X * 5 degrees
Time (X*2)/24/60 minutes since midnight
(2 minute resolution)
(no date, only time)
Latitude X/23301-90

Invalid Position = 0xFF for all bytes of Latitude AND Longitude

Speed X meters per second
Altitude X * 5 meters

Invalid Altitude = 0xFF for all bytes Integer values only (no negative/below sea level altitude support)

005: 18 Byte GPS Location
Byte  7  6  5  4  3  2  1  0
0 Magic Number Longitude
1 Longitude
2 Longitude
3 Longitude External Pwr Distress Intrusion/Checkin
4 Time
5 Time
6 Time
7 Time GPS Satellites
8 Latitude
9 Latitude
10 Latitude
11 Latitude Heading GPS HDOP
12 GPS HDOP Climb Rate
13 Climb Rate
14 Battery Percent Speed
15 Speed
16 Altitude
17 Altitude
Format Definitions
Magic Number 0x00
Longitude X/186413-180 degrees

Invalid Position = 0xFF for all bytes of Latitude AND Longitude

Time '2015/1/1' + X seconds
Latitude X/186413-90

Invalid Position = 0xFF for all bytes of Latitude AND Longitude

Heading X*5 degrees
GPS HDOP X meters
Climb Rate (X-(2^(10)))/20 meters per second

Invalid Climb Rate = 0xFF for all bytes

Battery X*3 percent
Speed X kph
Altitude X meters

Invalid Altitude = 0xFF for all bytes Integer values only (no negative/below sea level altitude support)

007: Sensor
Octet  7  6  5  4  3  2  1  0
0 Sensor Type
1 - X Sensor Data
Format Definitions
Sensor Types 0 = Temperature, 1 = Heart Rate
008: Device ID/IMEI
Octet  7  6  5  4  3  2  1  0
0 ID Type ID Length
1 - x Data: ASCII, Big Endian Integer, or Little Endian Integer bytes....
Format Definitions
Device ID/IMEI ID Type 00 = ASCII, 01 = Big Endian Integer, 10 = Little Endian Integer, 11 = Reserved
Device ID Ascii Example ID Type 0 = ASCII, ID Len = 10, Data = '1A2B3C4D5F'
Device ID Integer Example ID Type 1 = Big Endian Integer, ID Len = 7, Data = 0x01 3A 64 A4 1D 4B 87 = 345678901234567
009: Ping/Pong (Mobile Originated and Mobile Terminated)
Octet  7  6  5  4  3  2  1  0
0 Ping/Pong Unique ID
Format Definitions
Ping/Pong Ping = 0x0, Pong = 0x1

Upon receiving a Ping, client and server should reply with Pong

Unique ID Unique ID should be randomly generated for Ping.

Pong reply MUST copy Unique ID in reply

010: Canned Message
Octet  7  6  5  4  3  2  1  0
0 Source
1-2 Canned Message ID (16 bit)
3-4 Canned Address ID (16 bit)
5 Canned Message Hash or Version
6-X Address ASCII text - NULL (0x00) terminated
Format Definitions
Text String ASCII text - NULL (0x00) terminated
</tr>
040: String Settings Message
Octet  7  6  5  4  3  2  1  0
0 Manufacturer ID
1 Settings Version
2-X String settings
X "End of settings" marker
Format Definitions
String setting ID - Setting ID (16 bits)
Len - Setting value length (16 bits)
Value - Setting value ('len' bytes)
"End of settings" marker 16 bits (0xFFFF)
250: Payload Version
Octet  7  6  5  4  3  2  1  0
0 0x00 = Current Version
Future versions to be defined
254: ACK Request/Reply (Mobile Originated and Mobile Terminated)
Octet  7  6  5  4  3  2  1  0
0 ACK Request/Reply Respond Directly Reserved Unique ID
Format Definitions
ACK Request/Reply ACK Request = 0x1, ACK Reply = 0x0

Upon receiving an ACK Request, reply with an ACK Reply with the same Message ID field

Respond Directly Respond Directly = 0x1, Respond Normally = 0x0

A normal response would be to reply to the unit via the normal behavior, IE, queue the message to a satellite gateway or hybrid unit message queue.
A direct response would force the reply, acknowledgment, or other message responses, to be sent directly back to the incoming data connection and override the normal behavior.

Unique ID Unique ID should be an indexed number for ACK Request.

ACK Reply reply MUST copy Unique ID in reply

Mobile Terminated Packet

Mobile terminated blocks always include a message or block size in the message to help simple parsers (micro controllers) to decode and process blocks with simple loop and integer indexing.

Mobile Terminated Packet Structure
Octet  7  6  5  4  3  2  1  0
0 Packet Version
1 Message Block Type
000: Command
001: Text Message
002: Setting(s) Update
003: Settings Request
004: Settings Interface Version
005: Request Data
009: Ping/Pong
010: String Setting(s) Update
011-199: Do not use, future definitions
200-249: User Defined (Open for manufacturer specific development)
254: ACK Request/Response
255: Encrypted Message Wrapper
2 - X Block Data
X (optional) Additional Message Block Type...
X - X (optional) Block Data...
X - (X + 10) (REQUIRED) HMAC-SHA256-80
Format Definitions
HMAC-SHA256-80 HMAC-SHA256-80(<password>,<payload>)

HMAC-SHA256 is computed over the (header byte not included) using a password/key shared by

the device and server, and is truncated to the first 10 bytes (80-bits)

Packet Version 0x00 (Future versions may be defined)

Mobile Terminated Block Data Definitions

000: Command Message
Octet  7  6  5  4  3  2  1  0
0 Command Message Length
1 - X Command Message
001: Text Message
Octet  7  6  5  4  3  2  1  0
0 Text Message Length
1 - X Text Message
Format Definitions
Text Message ASCII text
002: Update Setting
Octet  7  6  5  4  3  2  1  0
0 Block Size (Fixed at 0x06)
1 - 2 Setting Number
2 - 3 Setting Number
3 - 4 Setting Value
4 - 5 Setting Value
5 - 6 Setting Value
6 - 7 Setting Value
Format Definitions
Setting Number 16 bit unsigned integer
Setting Value 32 bit signed integer
003: Request Settings
Octet  7  6  5  4  3  2  1  0
0 Block Length 0x00
004: Request Version
Octet  7  6  5  4  3  2  1  0
0 Block Length 0x00
005: Request Data
Octet  7  6  5  4  3  2  1  0
0 Block Length 0x01
1 Request Data Type
(0) GPS Position
(1) IMEI
(2) Sensor
(3) MAC Address
(4) Accelerometer (future)
(5) Canned Address Book Version (future)
(6) Canned Messages Version (future)
(7) Drivers (future)
(8) Geofence Hash/Version (future)
(9) Terminal Diagnostics (future)
(200-249) User Defined (Open for manufacturer specific development)
(255) Encrypted Message
009: Ping/Pong. See Mobile Originated Block Data 009
</tr> </tr> </tr>
010: Update String Setting
Octet  7  6  5  4  3  2  1  0
0 Block Length
1 - 2 Setting Number 3 - X Setting Value ('Block Length' - 2 bytes) Format Definitions
Setting Number 16 bit unsigned integer
Setting Value Binary data

Future Expansion

Definitions to be released
Advanced text message with status acknowledgement

Message is a reply to a specific message

Message has been viewed

Message has been deleted

Message has been replied

Message has been delivered

Message is being sent to a phone number (must start with a + sign and follow E.164 numbering standard)

Message is being sent to an email, must contain an @ sign

Message is being forwarded to another unit/user, must be a number

Message is being sent to the portal operator, destination field is set to "0"

Multi-packet block

Sequence field

Message # x of y

Mobile terminated 9601/2/3 = (270 bytes - 4 byte header) * 256 = 68096 byte packet maximum

Mobile originated 9601/2/3 = (340 bytes - 4 byte header) * 256 = 86016 byte packet maximum

Mobile terminated 9522/3 = (1890 bytes - 4 byte header) * 256 = 482816 byte packet maximum

Mobile originated 9601/2/3 = (1960 bytes - 4 byte header) * 256 = 500736 byte packet maximum

Configuration Update block

References

[1] “Integrating Wireless Sensor Networks with the Web” , Walter, Colitti 2011

[2] Rouse, Margaret (2019). “internet of things IoT”. IOT Agenda.

[3] “LoRa Modulation Basics

[4] “Iridium”. Encyclopedia Astronautica. Retrieved 13 September 2016

[5] “Inmarsat-About Us”. www.inmarsat.com.