We are currently working on upgrades to the underlying FSK modem which will provide a more robust and flexible telemetry system. As part of these changes, it will be possible to use either 16 or 32 byte packets (though not at the same time!). This page documents the proposed telemetry format structure.
Payload IDs
All of the Horus Binary packet formats use a numerical payload ID instead of a textual callsign. These payload IDs are decoded to a textual callsign during the decoding process through the payload ID list. Users can request their own payload ID by either raising an issue on this repository, or raising a pull request with the required changes.
Payload IDs are shared between the v1 and 16-byte modes, which only have a single-byte payload ID field. The v2 32-byte mode enables a large number of payload IDs, and so payloads using this mode will be allocated IDs > 256 to enable the 0-255 range priority for v1 and 16-byte v2 payloads.
Packet Formats
Horus Binary v1 (22 bytes)
Note: This packet format has now been retired, and the Horus v2 format is now in use.
Byte No. | Data Type | Size (bytes) | Description |
---|---|---|---|
0 | uint8 | 1 | Payload ID (0-255) |
1 | uint16 | 2 | Sequence Number |
3 | uint8 | 1 | Time-of-day (Hours) |
4 | uint8 | 1 | Time-of-day (Minutes) |
5 | uint8 | 1 | Time-of-day (Seconds) |
6 | float | 4 | Latitude |
10 | float | 4 | Longitude |
14 | uint16 | 2 | Altitude (m) |
16 | uint8 | 1 | Speed (kph) |
17 | uint8 | 1 | Satellites |
18 | int8 | 1 | Temperature (deg C) |
19 | uint8 | 1 | Battery Voltage |
20 | uint16 | 2 | CRC16-CCITT Checksum |
Horus Binary v2 - 32 byte format
The 32-byte format is proposed to become the new 'standard' HorusBinary telemetry format. It is based on the 22-byte format above, but with an expanded payload ID field to allow for more unique callsigns, and additional space is available for custom data.
Byte No. | Data Type | Size (bytes) | Description |
---|---|---|---|
0 | uint16 | 2 | Payload ID (0-65535) |
2 | uint16 | 2 | Sequence Number |
4 | uint8 | 1 | Time-of-day (Hours) |
5 | uint8 | 1 | Time-of-day (Minutes) |
6 | uint8 | 1 | Time-of-day (Seconds) |
7 | float | 4 | Latitude |
11 | float | 4 | Longitude |
15 | uint16 | 2 | Altitude (m) |
17 | uint8 | 1 | Speed (kph) |
18 | uint8 | 1 | Satellites |
19 | int8 | 1 | Temperature (deg C) |
20 | uint8 | 1 | Battery Voltage |
21 | ??? | 9 | Custom data |
30 | uint16 | 2 | CRC16-CCITT Checksum |
The custom data fields must be described in this json file which will need a new entry added for each new callsign.
Horus Binary v2 - 16-byte Format - NOT YET IMPLEMENTED
The 16-byte format is intended to be used as a 'last-resort' telemetry mode, for cases where SNR is expected to be extremely low, and is hence not expected to be required for all flights. As such, the data which can be transmitted through it is fairly limited. Single-byte payload IDs are retained, but the resolution of the sequence number, time, and lat/lon fields are decreased.
Byte No. | Data Type | Size (bytes) | Description |
---|---|---|---|
0 | uint8 | 1 | Payload ID (0-255) |
1 | uint8 | 1 | Sequence Number |
2 | uint16 | 2 | Seconds-in-day/2 |
4 | Q9.15 | 3 | Latitude |
7 | Q9.15 | 3 | Longitude |
10 | uint16 | 2 | Altitude (m) |
12 | uint8 | 1 | Battery Voltage |
13 | uint8 | 1 | Flags Byte |
14 | uint16 | 2 | CRC16-CCITT Checksum |