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:
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 |
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 | </tr>|||||||
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. | ||||||||
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 |
010: Update String Setting | |||||||||
Octet | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
0 | Block Length | 1 - 2 | Setting Number | </tr>3 - X | Setting Value ('Block Length' - 2 bytes) | </tr>Format Definitions | </tr>|||
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
External links
[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.