diff --git a/doc/mkdocs-src/docs/index.md b/doc/mkdocs-src/docs/index.md new file mode 100644 index 0000000..dbf09fe --- /dev/null +++ b/doc/mkdocs-src/docs/index.md @@ -0,0 +1,14 @@ +# Hamnet auf 70 cm + +## Einführung + +Hamnet ist ein verbreitetes Amateurfunk-Netzwerk zur IP-basierten +Kommunikation. Dafür wird modifizierte WLAN-Technik in den 13- und 6-cm-Bändern +verwendet. Allerdings erfordert ein Benutzerzugang zum Hamnet aufgrund der +hohen Frequenz eine Sichtverbindung und geringen Abstand zu einem Zugangspunkt. + +Dieses Projekt hat zum Ziel, einen Zugang zum Hamnet im 70-cm-Band zu schaffen, +so dass höhere Reichweiten und Verbindungen unter schwierigen Bedingungen +möglich werden. Das System soll in den experimentellen +Breitband-Digitalbereichen (200 kHz Bandbreite) des 70 cm-Bands arbeiten. Die +erreichbaren Datenraten dürften bei 100 bis 500 kbit/s liegen. diff --git a/doc/mkdocs-src/docs/protocol.md b/doc/mkdocs-src/docs/protocol.md new file mode 100644 index 0000000..88b5461 --- /dev/null +++ b/doc/mkdocs-src/docs/protocol.md @@ -0,0 +1,98 @@ +# Protokoll + +Hamnet70 implementiert die untersten beiden Schichten des ISO/OSI-Modells: +Bitübertragungsschicht und Sicherungsschicht. + +## Schichtenmodell + +### Bitübertrangunsschicht + +TODO: Modulation (OFDM? QAM16?) + +### Sicherungsschicht + +Ein Faltungscode wird zur Fehlerkorrektur angewendet. Zusätzlich wird eine +CRC32 über das komplette Paket berechnet und bei Fehlern das Paket verworfen +(wenn der Faltungscode diese Fehler nicht korrigieren konnte). + +Headerformat: + +| Word | Bits 31..24 | 23..16 | 15..8 | 7..0 | +|------|-------------|--------|-------|------| +| 0 | Absender-Rufzeichen (47..16) [1] |||| +| 1 | Absender-Rufzeichen (15..0) [1] || Absender-Stations-ID | Empfänger-Stations-ID | +| 2 | Empfänger-Rufzeichen (47..16) [1] |||| +| 3 | Empfänger-Rufzeichen (15..0) [1] || Next Protocol | Flags | + +[1] verwendet Base40-Codierung, siehe unten + +#### Stations-ID + +Wird verwendet, um mehrere Stationen mit dem selben Rufzeichen zu unterscheiden (analog zu APRS/Packet Radio). + +#### Next Protocol + +Im Paket enthaltenes Protokoll: + +| Wert | Protokoll | +|------|-------------------------| +| 0x00 | Steuerpaket / Fülldaten | +| 0x10 | IPv4 | +| 0x20 | IPv6 | +| 0x30 | IPX | + +### Höhere Schichten + +Höhere Schichten enthalten meistens das Internet Protocol (IP). + +## Verwendete Codierung + +### Base40-Codierung für Rufzeichen + +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: + +```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 +``` diff --git a/doc/mkdocs-src/mkdocs.yml b/doc/mkdocs-src/mkdocs.yml new file mode 100644 index 0000000..6544b92 --- /dev/null +++ b/doc/mkdocs-src/mkdocs.yml @@ -0,0 +1 @@ +site_name: Hamnet70