FPRS is an APRS like format for use on FreeDV data channels and the DML network.
Element header | Element data | Element header | Element data | ... | Element header | Element data |
Unless otherwise stated all multibyte values are in network byte order. (MSB first)
There are 8192 possible elements. Elements 0 - 15 are limited to a 7 byte size for efficient bandwidth use.
Bits: | 0 - 7 | 8 - 15 | 16 - 23 | 24 - 31 | 32 - 39 | 40 - 47 | 48 - 55 | 56 - 63 | ... | 2048 - 2055 | 2056 - 2063 |
---|---|---|---|---|---|---|---|---|---|---|---|
Byte: | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ... | 256 | 257 |
Element 0 - 15: | 0eeeelll | Up to 7 bytes of element data | |||||||||
Element 16 - 63: | 10eeeeee | llllllll | Up to 255 bytes of element data | ||||||||
Element 64 - 8191: | 110eeeee | eeeeeeee | llllllll | Up to 255 bytes of element data |
Element number | Element type | Description |
0 | POSITION | 7 byte 2D position (28 bit lon, 27 bit lat and 1 bit stationary/fixed value) oooooooo oooooooo oooooooo oooofaaa aaaaaaaa aaaaaaaa aaaaaaaa o = longitude a = latitude f = stationary bit |
1 | CALLSIGN |
6 byte callsign in ETH_AR format (base 37) If absent the from address of the data packet may be used. |
2 | SYMBOL | 2 byte symbol (APRS symbol table) |
3 | ALTITUDE | 2 byte altitude (Resulotion: 1 Meter, Sea level = 16384) |
4 | VECTOR | 4 byte movement vector (12bit az, 11bit el, 9bit FP speed) aaaaaaaa aaaaeeee eeeeeees ssSSSSSS a = azimuth (0 to 360 degrees) 1bit = 360/4096 degree e = elevation (-90 to 90 degrees) 1bit = 360/4096 degree s = speed exponent S = speed mantisa s == 0: speed = 1/16 * S s > 0: speed = 2^(s+1) * (1 + 1/64 * S) Speed is in m/s |
16 | OBJECTNAME | Object name (variable length) |
17 | COMMENT | Generic comment string (variable length) This element should not be used for information that can be expressed in more specialized element types. |
18 | REQUEST |
2 byte 'search' element type, for example CALLSIGN 1 byte 'search' element length Search element (max 256 bytes), for example: 6 byte callsign in ETH_AR format (base 37) the request is targeted at. Followed by the requested elements in two bytes per element. |
19 | DESTINATION |
6 byte callsign in ETH_AR format (base 37) the
elements are targeted at. Can be used for replies in response to a REQUEST element. Will also be used to acknowledge a message in combination with a MESSAGE_ACK element. |
20 | TIMESTAMP |
variable length timestamp Contains the time since the Epoch (00:00:00 UTC, January 1, 1970), measured in seconds. |
21 | DMLSTREAM | DML stream name (variable length) A DML stream the station provides. More than one DMLSTREAM element may be valid for a single callsign at the same time. |
22 | DMLASSOC | DML stream name (variable length) A DML stream the station associates with. For example the stream name of the repeater this station is currently connected to. More than one DMLSTREAM element may be valid for a single callsign at the same time. |
23 | DMLGROUP | DML group name (variable length) Group names usually are numerical. |
32 | MESSAGE | Message Message string (variable length). It is advised to limit the message length to 67 characters if it is to be able to target APRS as well as FPRS. |
33 | MESSAGEID | ID Message ID (variable number of bytes) It is advised to use a maximum of 5 alphanumeric characters compatible with the APRS specification in order to allow cross network communication. |
34 | MESSAGEACK | ID Message ID (variable number of bytes) of the message being acknowledged. This element must be accompanied by an DESTINATION element in order to properly identify the message being acknowledged and to facilitate routing. |
Example: (Position + Altitude + Vector + Symbol in 3 2400B FreeDV frames taking just 120ms to send)
0 - 7 | 8 - 15 | 16 - 23 | 24 - 31 | 32 - 39 | 40 - 47 | 48 - 55 | 56 - 63 | 64 - 71 | 72 - 79 | 80 - 87 | 88 - 95 | 96 - 95 | 104 - 111 | 112 - 119 | 120 - 127 | 128 - 135 | 136 - 143 | 144 - 151 | 152 - 159 | 160 - 167 | 168 - 175 | 176 - 183 | 184 - 191 | |
FreeDV frame | FreeDV frame | FreeDV frame | ||||||||||||||||||||||
(Compressed) header with callsign | Type: 0x7370 | 00000111 POSITION length=7 | Position data | 00011010 ALTITUDE length=2 | Altitude data | 00100100 VECTOR Length=4 | Vector data | 00010010 SYMBOL Length=2 | Symbol data | CRC |
Since FPRS is a binary protocol and APRS uses ASCII text the two will never be fully compatible. However where possible FPRS will follow APRS in order to allow translation between the two formats. For example the symbol table used for the SYMBOL element is the APRS symbol table.
FPRS packets translated to APRS will use the APFPRS to callsign.