summaryrefslogtreecommitdiff
path: root/docs/MAX25-OPERATOR-RUNBOOK.md
diff options
context:
space:
mode:
authorinfo@mode42.com <info@mode42.com>2026-08-07 18:25:13 +0000
committerinfo@mode42.com <info@mode42.com>2026-08-07 18:25:13 +0000
commit04d965d67a7264a1c7c211494aebda1953df7603 (patch)
tree0ebd700a6e219f84a26a656f4bee8778bc75da7b /docs/MAX25-OPERATOR-RUNBOOK.md
Initial push
Diffstat (limited to 'docs/MAX25-OPERATOR-RUNBOOK.md')
-rw-r--r--docs/MAX25-OPERATOR-RUNBOOK.md105
1 files changed, 105 insertions, 0 deletions
diff --git a/docs/MAX25-OPERATOR-RUNBOOK.md b/docs/MAX25-OPERATOR-RUNBOOK.md
new file mode 100644
index 0000000..dd53b24
--- /dev/null
+++ b/docs/MAX25-OPERATOR-RUNBOOK.md
@@ -0,0 +1,105 @@
+# Operator runbook · MAX25-Stack
+
+Day-to-day operator procedures for max25d and RF backends.
+
+Public mark for SER12/PC-COM class: **BayCom/based**. Product path: **max25-bcpr** (available · default build ON). Never **Konverter** / **converter**.
+
+## Canonical paths
+
+| Component | Path / command |
+|-----------|----------------|
+| Daemon | **`./scripts/run-max25d.sh`** · `stacks/daemon/max25d` · `/usr/local/bin/max25d` |
+| Terminal | **`./scripts/run-max25-terminal.sh`** · `/usr/local/bin/max25-terminal` · `build*/bin/…` |
+| max25-bcpr-ctl | `stacks/max25-bcpr/tools/max25-bcpr-ctl` or `/usr/local/sbin/max25-bcpr-ctl` |
+| TX/RX test | `scripts/tx-rx-test.sh` |
+| Site INI | `/etc/max25/max25d.ini` · `/etc/max25/max25-bcpr.ini` |
+| Tree INI | `local/max25d.ini` (gitignored) |
+| KISS PTY | `/tmp/max25-bcpr/kiss-bc0` (from bcpr.ini `kiss_link`) |
+| Unix sock | `/run/max25/modem.sock` |
+
+**Never** `stacks/daemon/max25-terminal` (does not exist).
+**Never** trust a leftover ELF at `stacks/terminal/max25-terminal` — use the launcher or PATH (`--help` must list `-d, --device`).
+
+## Daily workflow (BayCom/based · bcpr)
+
+```bash
+cd /home/akb/Code/10-PROJECTS/MAX25-Stack # or your clone
+
+# 1) daemon (owns max25-bcprd when auto_start=yes) — needs socket dir
+sudo mkdir -p /run/max25
+sudo ./scripts/run-max25d.sh # uses local/max25d.ini or /etc/max25/max25d.ini
+# wait for: raw KISS open /tmp/max25-bcpr/kiss-bc0
+
+# 2) terminal (checks socket; picks binary with -d)
+./scripts/run-max25-terminal.sh -U /run/max25/modem.sock
+# CONNECT (F10→6) → SEND …
+```
+
+`connect failed` ⇒ max25d not running (no `/run/max25/modem.sock`). Start step 1 first.
+
+Manual bcpr (only when debugging without max25d):
+
+```bash
+sudo ./stacks/max25-bcpr/tools/max25-bcpr-ctl -c /etc/max25/max25-bcpr.ini preflight
+sudo ./stacks/max25-bcpr/tools/max25-bcpr-ctl -c /etc/max25/max25-bcpr.ini start
+sudo ./stacks/max25-bcpr/tools/max25-bcpr-ctl -c /etc/max25/max25-bcpr.ini status
+```
+
+## Device start matrix
+
+| Device | Command |
+|--------|---------|
+| TNC2C | `max25-ctl start --hardware tncs --device tnc2c` |
+| BayCom/based | max25d `[features] max25_bcpr=yes` · device `max25e0` — see [BAYCOM.md](BAYCOM.md) |
+| CRDOP | `max25-ctl start --hardware soft-modems --device soft-crdop` |
+
+## TX prove-out
+
+| Path | Command |
+|------|---------|
+| Unified | `sudo ./scripts/tx-rx-test.sh --device modem --live --tx --tx-seconds 3 -c /etc/max25/max25-bcpr.ini` |
+| max25-bcpr smoke | `sudo ./stacks/max25-bcpr/tools/max25-bcpr-ctl -c /etc/max25/max25-bcpr.ini smoke --live --tx --tx-seconds 3` |
+| Terminal | `./scripts/run-max25-terminal.sh -U /run/max25/modem.sock` → CONNECT → SEND |
+
+Details: [TX-RX-TEST.md](TX-RX-TEST.md).
+
+### TX path matrix (Zentralnerv)
+
+| Trigger | Host MCR (~3s) | Notes |
+|---------|----------------|-------|
+| Long KISS → `/tmp/max25-bcpr/kiss-bc0` (info ≈376B, slave held open) | Yes | Proven RF when LED/wattmeter watched |
+| `max25-bcpr-rxtx-smoke` / `tx-rx-test` L4 `--tx --tx-seconds 3` | Yes | Requires MCR `0xe`/`0xf` for PASS |
+| max25d unix/terminal `SEND` | Yes (shorter if payload ≤256B ≈2.2s) | Keep PTY open (max25d); do not recycle max25-bcprd outside max25d |
+| open/write/**close** KISS without hold | No / intermittent | POLLHUP race — fixed in max25-bcprd (POLLIN before HUP) |
+| Stale max25d FD after external max25-bcprd restart | No | Restart **max25d** only |
+
+Operator RF evidence (optional, not CI): radio **TX/PTT LED** + **external** wattmeter needle.
+
+**2026-07-19:** Operator confirmed RF on AX25WRK1 (TX LED / external wattmeter) during live prove-out.
+
+## Recovery matrix
+
+| Situation | First action |
+|-----------|--------------|
+| Echo-only TNC | `tnc2c-host-reset.sh` or serial watch |
+| After crash | boot-wait escalate if enabled |
+| Cold boot no `cmd:` | `tnc2c-boot-wait.sh` with DTR before power-on |
+| Power cycle | rescue fallback only |
+| Stale max25-bcpr KISS | restart **max25d** only (do not recycle max25-bcprd outside max25d) |
+
+## Status matrix
+
+| Check | Command |
+|-------|---------|
+| Daemon | `max25-ctl status` / `ss -ltn \| grep 7325` |
+| max25-bcpr | `sudo max25-bcpr-ctl -c /etc/max25/max25-bcpr.ini status` |
+| Logs | max25d stdout / site log path |
+
+## Related
+
+| Goal | Doc |
+|------|-----|
+| Linux setup | [LINUX-HOST-SETUP.md](LINUX-HOST-SETUP.md) |
+| Terminal | [MAX25-TERMINAL.md](MAX25-TERMINAL.md) |
+| BayCom/based | [BAYCOM.md](BAYCOM.md) |
+| TNC recovery | `stacks/tncs/docs/TNC-RECOVERY.md` |
git clone -b <branch> https://cgit.mode42.com/<repo>.git
git clone -b <branch> git://cgit.mode42.com/<repo>.git

info@mode42.com