priyom.org

Protocol

F01 uses a proprietary one-way broadcast mode for 5-digit group encrypted messages, based on standard asynchronous ITA2 BFSK (5N1.5). Its standard configuration is the speed of 200 Bd, the shift of 500 Hz, the mark (1) frequency of -250 Hz, and the space (0) frequency of +250 Hz. Only 15 characters from the ITA2 figure shift are used; the letter shift can be ignored.

Block format

The broadcasts consist of fixed 25-character blocks, not separated by newlines.

Type Checksum Index Payload Checksum
= 814 39 973441830128062 148
"=" for a standard block, or ")" for the final block A number dependent on the type and the payload, always 3 digits long A block index ranging from 1 to 999, padded with spaces on the right 15-digit payload, containing three 5-digit groups, with "+++++" used as a filler in the final block if no groups are left A number dependent on the entire block, padded with spaces on the right

There is also an optional, special block type, carrying the optional message header. This block is sent before all the other blocks.

Type Checksum Payload
( 216 1117700116593161201901599
Always "(" A number dependent on the payload, always 3 digits long 25-digit payload, containing five 5-digit groups

Broadcast structure

The broadcasts consist of all the blocks in index order (with the optional header block coming first, if present), repeated in an automated loop for 6 to 8 minutes. Decoding a message comes down to:

  1. Decoding message blocks to obtain a copy, whose integrity was verified, of the payload of each message block. They don't have to be received or processed in order, and can be taken from any repeated portion of the broadcast; corrupted or already-received blocks can be ignored, until all blocks are decoded.
  2. Putting the decoded payloads back together, in block index order, to reconstitute the messages.

Multiple messages in a single broadcast are not supported directly by the F01 protocol. In practice, this case is handled by padding out the message with "00000" groups until the total group count is the nearest multiply of ten, followed by the next message. When the messages have optional headers, only the first message's header is given its own separate block; the further messages' headers constitute the first five groups of the message, followed immediately by the content.

Null messages consist of a single block with "00000" as the sole group.