Added some documentation (using mkdocs)

This commit is contained in:
Thomas Kolb 2019-01-01 19:01:32 +01:00
parent fffea05647
commit c5bc744b25
3 changed files with 113 additions and 0 deletions

View file

@ -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.

View file

@ -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
```

View file

@ -0,0 +1 @@
site_name: Hamnet70