diff --git a/doc/mkdocs-src/docs/protocol.md b/doc/mkdocs-src/docs/protocol.md index dfd9c29..e8a83fd 100644 --- a/doc/mkdocs-src/docs/protocol.md +++ b/doc/mkdocs-src/docs/protocol.md @@ -9,6 +9,13 @@ Bitübertragungsschicht und Sicherungsschicht. TODO: Modulation (OFDM? QAM16?) +#### Header + +Auf der Bitübertragungsschicht wird jedem Paket ein Header vorangestellt, der +die Synchronisierung und das Auslesen der Paketlänge ermöglicht. + +Format: _tbd._ + ### Sicherungsschicht Ein Faltungscode wird zur Fehlerkorrektur angewendet. Zusätzlich wird eine @@ -24,7 +31,7 @@ Headerformat: | 2 | Empfänger-Rufzeichen (47..16) [1] |||| | 3 | Empfänger-Rufzeichen (15..0) [1] || Next Protocol | Flags | -[1] verwendet Base40-Codierung, siehe unten +[1] codiert nach [HAM-64](https://rawgit.com/darconeous/ham-addr/master/n6drc-arnce.html) #### Stations-ID @@ -63,52 +70,8 @@ Höhere Schichten enthalten meistens das Internet Protocol (IP). ## Verwendete Codierung -### Base40-Codierung für Rufzeichen +### Kanalcodierung -Rufzeichen werden in Base40 codiert. Diese ermöglicht es, gemäß folgendem -Schema 9 Zeichen in 48 Bit unterzubringen, nachdem `c0` bis `c8` entsprechend -der nachfolgenden Tabelle codiert wurden: +Es kommt ein Faltungscode zum Einsatz. -```C -uint16_t word0 = c0 * 1600 + c1 * 40 + c2; -uint16_t word1 = c3 * 1600 + c4 * 40 + c5; -uint16_t word2 = c6 * 1600 + c7 * 40 + c8; - -uint64_t addr = (word0 << 32) | (word1 << 16) | word3; -``` - -| Zeichen | _NULL_ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | -|---------|--------|---|---|---|---|---|---|---|---|---|----|----|----|----|----|----|----|----|----|----| -| Code | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | - -| Zeichen | T | U | V | W | X | Y | Z | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | / | _reserved_ | -|---------|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|------------| -| Code | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38-39 | - -Das _NULL_-Zeichen markiert das Ende der Zeichenkette. - -Das Rufzeichen **DL5TKL/P** würde beispielsweise wie folgt in 48 bit codiert: - -```C -c0 = 4; c1 = 12; c2 = 32; -c3 = 20; c4 = 11; c5 = 12; -c6 = 37; c7 = 16; c8 = 0; - -word0 = 4 * 1600 + 12 * 40 + 32 = 6912 = 0x1b00; -word1 = 20 * 1600 + 11 * 40 + 12 = 32452 = 0x7ec4; -word2 = 37 * 1600 + 16 * 40 + 0 = 59840 = 0xe9c0; - -addr = 0x1b007ec4e9c0; -``` - -Die Decodierung kann mit Hilfe der Modulo-Operation erfolgen, z.B.: - -```C -uint16_t word0 = (addr >> 32) & 0xFFFF; - -c0 = word0 % 40; -c1 = (word0 / 40) % 40; -c2 = word0 / 1600; - -// entsprechend für die anderen Wörter/Zeichen -``` +Parameter: _tbd._