Skip to content

Commit 6690a66

Browse files
rafael2kclaude
andcommitted
docs: add an index, and fix the control mode in the TNC reference
Seventeen documents in docs/ with no way in. A reader could not tell that ARQ.md is current reference while SPEED-REGRESSION-FINDINGS.md is a dated investigation record -- both are just filenames. docs/README.md now sorts them into reference, guides and findings, says plainly which kind is kept current, and gives each a line on the question it answers rather than restating its title. The README links it, and names the three documents most people actually want. TNC.md was wrong. It said CALL and CQ frames go out on DATAC13 in three places; the control mode has been DATAC16 since it replaced DATAC13 (arq_protocol.h:198), and both paths send on sess->control_mode (arq_fsm.c:761, arq.c:535). This is the user-facing command reference, so someone integrating against it was being told the wrong mode. Same staleness the README carried -- ARQ.md and MODES.md were already right, and the remaining DATAC13 mentions there are correct history. Checked: every relative link in both files resolves, and the index covers all seventeen documents with none missing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent 071805a commit 6690a66

3 files changed

Lines changed: 78 additions & 4 deletions

File tree

README.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,17 @@ See the included [mercury.ini.example](mercury.ini.example) for all available se
260260

261261
## Documentation
262262

263-
Online HTML docs: https://rhizomatica.github.io/mercury/
263+
**[docs/](docs/README.md)** — the full index, sorted into reference (how Mercury
264+
works today), guides (building, signing, Reticulum, sanitizers) and findings
265+
(dated records of investigations and why decisions were made).
266+
267+
The three you are most likely to want:
268+
269+
- [docs/ARQ.md](docs/ARQ.md) — the ARQ data link, end to end
270+
- [docs/TNC.md](docs/TNC.md) — every TNC command, for driving Mercury from your own software
271+
- [docs/MODES.md](docs/MODES.md) — all modes with measured performance
272+
273+
Rendered HTML: https://rhizomatica.github.io/mercury/
264274

265275
## Logging and timing traces
266276

docs/README.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# Mercury documentation
2+
3+
Start with the [project README](../README.md) if you are new. This page is the
4+
map of everything else.
5+
6+
Documentation here falls into three kinds, and it helps to know which you are
7+
reading: **reference** describes how Mercury behaves today and is kept current;
8+
**guides** are task-oriented; **findings** are dated records of an
9+
investigation, kept because the reasoning and the negative results are worth
10+
having — they are not updated as the code moves on.
11+
12+
## Reference — how Mercury works
13+
14+
| Document | What it covers |
15+
|---|---|
16+
| [ARQ.md](ARQ.md) | The ARQ data link: state machine, frame formats, timers, mode ladder, and the OTA tuning guide. The main architecture document. |
17+
| [TNC.md](TNC.md) | Every TNC command and async status on the control socket. What you need to drive Mercury from your own software. |
18+
| [MODES.md](MODES.md) | All modulation modes with measured bandwidth, payload, FEC and delivery rates — including the Mercury-specific DATAC15/16/17 and QAM16C2. |
19+
| [watterson_model.md](watterson_model.md) | The HF channel simulator used for every measurement in these docs, and how its noise axis is calibrated. |
20+
21+
## Guides — doing a particular thing
22+
23+
| Document | What it covers |
24+
|---|---|
25+
| [RETICULUM.md](RETICULUM.md) | Carrying a Reticulum mesh over HF, via the broadcast port or an ARQ backbone. |
26+
| [MACOS-UNIVERSAL.md](MACOS-UNIVERSAL.md) | Building the self-contained universal macOS app with vendored static Hamlib. |
27+
| [WINDOWS-SIGNING.md](WINDOWS-SIGNING.md) | Authenticode signing for Windows releases. |
28+
| [MACOS-VM-GLFW-SOFTWARE-OPENGL.md](MACOS-VM-GLFW-SOFTWARE-OPENGL.md) | Running the Fyne UI on a macOS VM with no GPU. |
29+
| [SANITIZERS.md](SANITIZERS.md) | ASan/UBSan and TSan builds. |
30+
| [FUZZING.md](FUZZING.md) | Fuzzing the frame parsers. |
31+
32+
## Findings — why things are the way they are
33+
34+
Point-in-time investigation records. Each answers a question that was open at
35+
the time; the conclusions shaped the code, and the methods are reusable. Read
36+
them for reasoning, not for current behaviour.
37+
38+
| Document | The question it answered |
39+
|---|---|
40+
| [HARQ-FINDINGS.md](HARQ-FINDINGS.md) | Does soft-combining repeated frames actually rescue a link at the fading cliff? (Yes — roughly half the frames, where single-shot delivers none.) |
41+
| [FADE-CLIFF-DECISION.md](FADE-CLIFF-DECISION.md) | Should the S1 fade-cliff fix be merged? Simulation evidence behind the decision. |
42+
| [SPEED-REGRESSION-FINDINGS.md](SPEED-REGRESSION-FINDINGS.md) | Why a pre-2.0 build was slower than v1.9.9 on the bench — FEC under fading and gear-shift oscillation, not the guard intervals everyone suspected. |
43+
| [OTA-PHASE-A-SNR-CALIB.md](OTA-PHASE-A-SNR-CALIB.md) | Why the mode ladder stuck at the bottom: per-mode SNR estimation bias. |
44+
| [broadcast-length-prefix-root-cause.md](broadcast-length-prefix-root-cause.md) | Why VarAC broadcasts would not decode. |
45+
| [ARDOP-IDEAS.md](ARDOP-IDEAS.md) | What is worth borrowing from ARDOP. |
46+
| [PLAN-arq-robustness-tx-gain.md](PLAN-arq-robustness-tx-gain.md) | Improvements proposed from Gary K7EK's review. |
47+
48+
## Elsewhere
49+
50+
- **Rendered HTML**: https://rhizomatica.github.io/mercury/
51+
- **Web interface**: https://rhizomatica.github.io/mercury/app/ (source in [app/](app/))
52+
- **Configuration**: every setting with its default is in
53+
[mercury.ini.example](../mercury.ini.example)
54+
- **Mailing list**: https://lists.riseup.net/www/info/hermes-general
55+
56+
## A note on the measurements
57+
58+
Numbers in these documents come from a calibrated bench, not from estimates.
59+
The channel simulator is checked against published upstream figures before its
60+
results are trusted for our own modes — `docs/MODES.md` records that
61+
cross-check explicitly. Where a result was negative, it is written down as a
62+
negative result rather than removed; several of the most useful pages here are
63+
records of something that did **not** work.

docs/TNC.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,8 @@ CONNECT <mycall> <theircall>\r
171171

172172
**Response:** `OK\r` if the command was accepted, `WRONG\r` on error.
173173

174-
Mercury will transmit CALL frames on DATAC13, advertising the local BW token,
174+
Mercury will transmit CALL frames on DATAC16 (the control mode), advertising
175+
the local BW token,
175176
and wait for an ACCEPT carrying the negotiated session BW.
176177
On success, the asynchronous response
177178
`CONNECTED <sourcecall> <destcall> <bandwidth>\r` is sent on the control port,
@@ -186,7 +187,7 @@ CONNECT AAAA BBBB\r
186187

187188
### CQFRAME
188189

189-
Transmit a compact DATAC13 CQ frame.
190+
Transmit a compact CQ frame on the control mode (DATAC16).
190191

191192
```
192193
CQFRAME <sourcecall> <bandwidth>\r
@@ -421,7 +422,7 @@ the session, and `<destcall>` is always the station that was called.
421422

422423
### CQFRAME
423424

424-
Sent when Mercury decodes a compact DATAC13 CQ frame on the air.
425+
Sent when Mercury decodes a compact CQ frame on the air.
425426
`<sourcecall>` is the transmitting station and `<bandwidth>` is the BW token
426427
advertised inside that CQ frame (`500`, `2300`, or `2750`).
427428

0 commit comments

Comments
 (0)