summaryrefslogtreecommitdiff
path: root/plugins
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 /plugins
Initial push
Diffstat (limited to 'plugins')
-rw-r--r--plugins/README.md76
-rw-r--r--plugins/betriebsform/hybbx-host/README.md22
-rw-r--r--plugins/betriebsform/hybbx-host/plugin.yaml27
-rw-r--r--plugins/betriebsform/service/README.md19
-rw-r--r--plugins/betriebsform/service/plugin.yaml27
-rw-r--r--plugins/betriebsform/standalone/README.md22
-rw-r--r--plugins/betriebsform/standalone/plugin.yaml24
-rw-r--r--plugins/devices/audio-dummy/README.md41
-rw-r--r--plugins/devices/audio-dummy/plugin.yaml26
-rw-r--r--plugins/devices/bayc-plugin/README.md7
-rw-r--r--plugins/devices/baycom-kiss/README.md7
-rw-r--r--plugins/devices/baycom-kiss/plugin.yaml31
-rw-r--r--plugins/devices/max25-sniffport/README.md5
-rw-r--r--plugins/devices/max25-terminal/plugin.yaml16
-rw-r--r--plugins/devices/max25-vcom/README.md5
-rw-r--r--plugins/devices/pktnc2/README.md16
-rw-r--r--plugins/devices/pktnc2/plugin.yaml37
-rw-r--r--plugins/devices/soft-crdop/README.md26
-rw-r--r--plugins/devices/soft-crdop/plugin.yaml77
-rw-r--r--plugins/devices/tmodem/README.md15
-rw-r--r--plugins/devices/tmodem/plugin.yaml33
-rw-r--r--plugins/devices/tnc2c/README.md25
-rw-r--r--plugins/devices/tnc2c/plugin.yaml40
-rw-r--r--plugins/external/README.md28
-rw-r--r--plugins/external/ardop/README.md30
-rw-r--r--plugins/external/ardop/plugin.yaml32
-rw-r--r--plugins/hardware/acoustic-bench/plugin.yaml21
-rw-r--r--plugins/hardware/modems/README.md27
-rw-r--r--plugins/hardware/modems/plugin.yaml27
-rw-r--r--plugins/hardware/soft-modems/README.md23
-rw-r--r--plugins/hardware/soft-modems/plugin.yaml48
-rw-r--r--plugins/hardware/terminal/plugin.yaml4
-rw-r--r--plugins/hardware/tncs/README.md25
-rw-r--r--plugins/hardware/tncs/plugin.yaml28
-rw-r--r--plugins/manifest.yaml91
35 files changed, 1008 insertions, 0 deletions
diff --git a/plugins/README.md b/plugins/README.md
new file mode 100644
index 0000000..9b9bd24
--- /dev/null
+++ b/plugins/README.md
@@ -0,0 +1,76 @@
+# MainAX25-Stack plugins
+
+Packet Radio / AX.25 plugin registry. HyBBX connects to a **running** stack — it does not replace these layers.
+
+**Unified operator workflow:** [docs/PLUGINS-DEVICE-MODEL.md](../docs/PLUGINS-DEVICE-MODEL.md) — TNC is the reference pattern; BayCom follows the same five steps and M25/1 session commands (`SET DEVICE` → `CONNECT` → `SEND`).
+
+## Hierarchy
+
+```
+Operating mode (`betriebsform/`)
+ └── Hardware (tncs, modems, soft-modems)
+ └── Device (tnc2c, max25e0, baycom-kiss, soft-crdop, …)
+```
+
+| Layer | Directory | Purpose |
+|-------|-----------|---------|
+| Operating mode | `betriebsform/` | Standalone, service, HyBBX host |
+| Hardware | `hardware/` | Device family — TNCs, BayCom, soft modems |
+| Device | `devices/` | Concrete profile and HyBBX INI mapping |
+| Optional plugins | `external/` | ARDOP-plugin (optional third-party ARDOP host registry) |
+
+## Discovery
+
+```bash
+./scripts/discover-plugins.sh # hardware + device
+./scripts/discover-plugins.sh --json
+```
+
+Output types: `hardware`, `device` — **not** operating modes (`betriebsform/` is manifest-only).
+
+Registry: `manifest.yaml`
+
+## HyBBX mapping
+
+| MAX25 hardware | HyBBX plugin | INI section |
+|----------------|--------------|-------------|
+| `hardware/tncs` | `packet_radio` | `[transport.packet_radioN]` |
+| `hardware/modems` | `baycom` | `[transport.baycomN]` |
+| `hardware/soft-modems` | `crdop` | `[transport.crdopN]` |
+
+See [docs/HYBBX.md](../docs/HYBBX.md).
+
+## Active devices
+
+| Device | Hardware | Status |
+|--------|----------|--------|
+| `tnc2c` | `tncs` | active |
+| `max25e0` | `modems` | active — BayCom/based SER12 via **bcpr** (`stacks/max25-bcpr/`) |
+| `baycom-kiss` | `modems` | active — USB/async KISS serial |
+| `soft-crdop` | `soft-modems` | active — MAX25-SoftModem (CRDOP) standard |
+
+## ARDOP-plugin (optional)
+
+| Plugin | Notes |
+|--------|-------|
+| **ARDOP-plugin** | Separate third-party ARDOP host registry — [external/README.md](external/README.md) |
+
+## Deferred / removed
+
+| Device | Hardware | Status | Notes |
+|--------|----------|--------|-------|
+| `pktnc2` | `tncs` | planned | Awaiting hardware delivery |
+| `baycom-par96` | `modems` | removed | Kernel LPT path retired — use bcpr where applicable |
+| `baycom-ser12` | `modems` | removed | Kernel SER12 path retired — use **`max25e0`** / bcpr |
+
+Terminal client profiles: [share/clients/](../share/clients/README.md) · BayCom/based SER12: [docs/BAYCOM.md](../docs/BAYCOM.md) · `stacks/max25-bcpr/`.
+
+## Operator quick reference (active)
+
+| Device | Start / bring-up | Site config | Client YAML |
+|--------|------------------|-------------|-------------|
+| `tnc2c` | `max25-ctl start --hardware tncs --device tnc2c` | `share/max25/serial/tnc2c-serial.env.example` | `share/clients/tnc2c.yaml` |
+| `max25e0` | max25d `[features] max25_bcpr=yes` · `max25e0 = max25-bcpr:bc0` | `stacks/max25-bcpr/share/max25-bcpr.ini.example` | none (device id `max25e0`) |
+| `baycom-kiss` | max25d `[devices]` + `[serial.baycom-kiss]` | serial env / max25d.ini | `share/clients/baycom-kiss.yaml` |
+
+BayCom/based default: **`max25e0`** via max25-bcpr (max 2: `max25e0:bc0` / `bc1`) — see [docs/BAYCOM.md](../docs/BAYCOM.md).
diff --git a/plugins/betriebsform/hybbx-host/README.md b/plugins/betriebsform/hybbx-host/README.md
new file mode 100644
index 0000000..21affb5
--- /dev/null
+++ b/plugins/betriebsform/hybbx-host/README.md
@@ -0,0 +1,22 @@
+# Operating mode: HyBBX Host
+
+Secondary RF host on a HyBBX **Secondary** node — or **standalone Main** cohost when `[instance] standalone=yes` and max25d `mode=hybbx-cohost`. MAX25 prepares hardware; HyBBX bridges AX.25 to Main over HBX (Secondary) or serves users locally (standalone Main).
+
+## Workflow
+
+1. MAX25 device prep (boot-wait, `max25-bcpr-ctl start`, or `crdopc`)
+2. max25d releases KISS PTY (`/tmp/max25-bcpr/kiss-bc0` for BayCom/based)
+3. Merge `share/hybbx/*-host.ini.example` into `hybbx.ini`
+4. Start HyBBX (Secondary or standalone Main)
+
+## Per device
+
+| Device | MAX25 prep | HyBBX plugin |
+|--------|------------|--------------|
+| TNC2C | `tnc2c-boot-wait.sh` | `packet_radio` |
+| BayCom/based SER12 | `max25-bcpr-ctl start` / max25d `max25_bcpr=yes` | `baycom` |
+| CRDOP | `crdopc` running | `crdop` |
+
+**Co-host Main:** dual TNC + PC-COM on one host — max25d `mode=hybbx-cohost`, HyBBX `[networks] baycom=yes`. See [docs/BAYCOM.md](../../docs/BAYCOM.md).
+
+Contract: [docs/HYBBX.md](../../docs/HYBBX.md)
diff --git a/plugins/betriebsform/hybbx-host/plugin.yaml b/plugins/betriebsform/hybbx-host/plugin.yaml
new file mode 100644
index 0000000..4ff2c56
--- /dev/null
+++ b/plugins/betriebsform/hybbx-host/plugin.yaml
@@ -0,0 +1,27 @@
+id: hybbx-host
+type: betriebsform
+parent_stack: MainAX25-Stack (MAX25-Stack)
+label: HyBBX Host
+description: Secondary RF host — serial TNC or BayCom KISS → HBX to Main
+
+stack_requirements:
+ hybbx_secondary: true
+ circuit_link: required
+
+hybbx:
+ plugins:
+ - packet_radio
+ - baycom
+ transport_sections:
+ - transport.packet_radioN
+ - transport.baycomN
+
+integration:
+ tncs:
+ boot_script: stacks/tncs/tnc2c-boot-wait.sh
+ integration_test: stacks/tncs/tnc2c-integration-test.sh
+ ini_template: stacks/tncs/hybbx-tnc2c.ini
+ modems:
+ kiss_link: /tmp/max25-bcpr/kiss-bc0
+ ctl: stacks/max25-bcpr/tools/max25-bcpr-ctl
+ plugin_doc: stacks/max25-bcpr/README.md
diff --git a/plugins/betriebsform/service/README.md b/plugins/betriebsform/service/README.md
new file mode 100644
index 0000000..d5befeb
--- /dev/null
+++ b/plugins/betriebsform/service/README.md
@@ -0,0 +1,19 @@
+# Operating mode: Service
+
+Continuous operation with one or two radios. HyBBX Secondary, digipeater, or unattended packet service.
+
+## Requirements
+
+- BayCom/based (PC-COM): **bcpr** — real IRQ, exclusive COM lock, max 2 devices ([docs/BAYCOM.md](../../../docs/BAYCOM.md))
+- TNC path: unique serial device / no shared UART with bcpr
+- No second process on the same UART while `max25-bcprd` holds the lock
+
+## Templates
+
+| Stack | Config |
+|-------|--------|
+| BayCom/based (bcpr) | `stacks/max25-bcpr/share/max25-bcpr.ini.example` |
+| HyBBX dual BayCom | `share/hybbx/service-dual.ini.example` |
+| HyBBX dual TNC | `stacks/tncs/hybbx-dual.ini` |
+
+One `[transport.*N]` per radio channel on HyBBX Secondary.
diff --git a/plugins/betriebsform/service/plugin.yaml b/plugins/betriebsform/service/plugin.yaml
new file mode 100644
index 0000000..a659ad5
--- /dev/null
+++ b/plugins/betriebsform/service/plugin.yaml
@@ -0,0 +1,27 @@
+id: service
+type: betriebsform
+parent_stack: MainAX25-Stack (MAX25-Stack)
+label: Service
+description: 24/7 dual-radio — HyBBX, digipeater, automation
+
+stack_requirements:
+ modems_min: 1
+ modems_max: 2
+ tncs_max: 2
+ unique_irq_per_uart: true
+ staged_start: true
+
+lifecycle:
+ start: scripts/max25-ctl start --mode service
+ recover: stacks/baycom-pr/scripts/baycom-pr-ctl recover
+
+hybbx:
+ role: primary
+ multi_instance: true
+ kiss_paths:
+ - /var/run/baycom-pr/kiss-a
+ - /var/run/baycom-pr/kiss-b
+
+templates:
+ - stacks/baycom-pr/config/examples/baycom-pr.dual.ini
+ - stacks/tncs/hybbx-dual.ini
diff --git a/plugins/betriebsform/standalone/README.md b/plugins/betriebsform/standalone/README.md
new file mode 100644
index 0000000..fc9cb5d
--- /dev/null
+++ b/plugins/betriebsform/standalone/README.md
@@ -0,0 +1,22 @@
+# Operating mode: Standalone
+
+Single-operator packet radio. One TNC or one BayCom modem online. **Default v1 path.**
+
+## Start
+
+```bash
+# TNC2C
+./scripts/max25-ctl start --mode standalone --hardware tncs --device tnc2c
+
+# BayCom/based SER12 (max25e0 via max25-bcpr) — prefer max25d
+# [features] max25_bcpr=yes · max25e0 = max25-bcpr:bc0 — see docs/BAYCOM.md
+
+# max25d (recommended host path)
+sudo max25d -c /etc/max25/max25d.ini
+```
+
+## HyBBX
+
+Optional. HyBBX opens serial or KISS **after** MAX25 prep (boot-wait, driver load).
+
+INI: `share/hybbx/standalone.ini.example` · Contract: [docs/HYBBX.md](../../docs/HYBBX.md)
diff --git a/plugins/betriebsform/standalone/plugin.yaml b/plugins/betriebsform/standalone/plugin.yaml
new file mode 100644
index 0000000..1923aa3
--- /dev/null
+++ b/plugins/betriebsform/standalone/plugin.yaml
@@ -0,0 +1,24 @@
+id: standalone
+type: betriebsform
+parent_stack: MainAX25-Stack (MAX25-Stack)
+label: Standalone
+description: Single operator — one radio/TNC, terminal AX.25 clients
+
+stack_requirements:
+ modems_max: 1
+ tncs_max: 1
+
+lifecycle:
+ start: scripts/max25-ctl start --mode standalone
+ stop: scripts/max25-ctl stop
+ status: scripts/max25-ctl status
+
+hybbx:
+ role: optional
+ note: HyBBX may run on same host; stack exposes KISS or direct serial
+
+clients:
+ - listen
+ - call
+ - tnc2c-listen.sh
+ - baycom-pr-ctl listen
diff --git a/plugins/devices/audio-dummy/README.md b/plugins/devices/audio-dummy/README.md
new file mode 100644
index 0000000..4903d60
--- /dev/null
+++ b/plugins/devices/audio-dummy/README.md
@@ -0,0 +1,41 @@
+# Device: audio-dummy (acoustic bench)
+
+**Status:** `active` — development/test device for on-host acoustic signal evaluation.
+
+## Purpose
+
+Main **dummy device** for Bell 202 AFSK without RF:
+
+- **loopback** — full DSP encode/decode in process (CI default)
+- **alsa** — capture from sound card, sniff/decode live
+- **host** — TCP to `audio-dummyd` (M25 KISS host protocol, ports 8520/8521)
+
+## Tools
+
+```bash
+# Internal loopback (no hardware):
+stacks/crdop/tools/max25-signal-sniffer --loopback
+
+# ALSA capture sniff:
+stacks/crdop/tools/max25-signal-sniffer -D plughw:1,0 -t 3
+
+# Calibration tones (mark 1200 Hz / space 2200 Hz):
+stacks/crdop/tools/max25-signal-sniffer -D plughw:1,0 --mark -t 1
+stacks/crdop/tools/max25-signal-sniffer -D plughw:1,0 --space -t 1
+```
+
+## max25d
+
+```ini
+[devices]
+audio-dummy = audio:loopback
+
+[device.audio-dummy]
+mode = loopback ; loopback | alsa | host
+; capture = plughw:1,0
+; playback = plughw:1,0
+; sample_rate = 48000
+; host_port = 8520
+```
+
+Docs: [docs/CRDOP.md](../../../docs/CRDOP.md)
diff --git a/plugins/devices/audio-dummy/plugin.yaml b/plugins/devices/audio-dummy/plugin.yaml
new file mode 100644
index 0000000..789c92b
--- /dev/null
+++ b/plugins/devices/audio-dummy/plugin.yaml
@@ -0,0 +1,26 @@
+id: audio-dummy
+type: device
+parent_stack: MainAX25-Stack (MAX25-Stack)
+hardware: acoustic-bench
+label: Audio Dummy (acoustic bench)
+status: active
+
+product:
+ name: MAX25-Audio-Dummy
+ purpose: sniff_test_evaluate_acoustic_signals_on_host
+ protocol: m25-kiss-host
+ license: GPL-3.0-or-later
+
+note: |
+ Main dummy device for Bell 202 AFSK bench — loopback, ALSA sniff, or host TCP.
+ No RF required. Used before field tests against TNC2C/BayCom.
+
+runtime:
+ modes: [loopback, alsa, host]
+ sniffer: stacks/crdop/tools/max25-signal-sniffer
+ daemon: stacks/crdop/tools/audio-dummyd
+ default_spec: audio:loopback
+
+docs:
+ - docs/CRDOP.md
+ - stacks/crdop/docs/AUDIO-ARCHITECTURE.md
diff --git a/plugins/devices/bayc-plugin/README.md b/plugins/devices/bayc-plugin/README.md
new file mode 100644
index 0000000..870f0c1
--- /dev/null
+++ b/plugins/devices/bayc-plugin/README.md
@@ -0,0 +1,7 @@
+# bayc-plugin — BayCom/based (max25d)
+
+**Role:** BayCom/based device plugin under **max25d** · host face **`max25e0`**.
+
+Experimental orch / soft-TNC / guest-PTY work is **not** shipped in this freigegeben tree.
+
+Thin stub only. Do not restore experimental orch tools here.
diff --git a/plugins/devices/baycom-kiss/README.md b/plugins/devices/baycom-kiss/README.md
new file mode 100644
index 0000000..c834c39
--- /dev/null
+++ b/plugins/devices/baycom-kiss/README.md
@@ -0,0 +1,7 @@
+# Device: BayCom KISS Serial
+
+USB or async serial BayCom firmware TNC. Uses `kiss-serial` backend — no kernel `baycom_ser_fdx`, no **bcpr** SER12 path.
+
+HyBBX `[transport.baycom1]` with `backend=kiss`, `device=/dev/ttyUSB0`.
+
+See [docs/BAYCOM.md](../../../docs/BAYCOM.md) (KISS vs BayCom/based) and [docs/PLUGINS-DEVICE-MODEL.md](../../../docs/PLUGINS-DEVICE-MODEL.md).
diff --git a/plugins/devices/baycom-kiss/plugin.yaml b/plugins/devices/baycom-kiss/plugin.yaml
new file mode 100644
index 0000000..78c8a1d
--- /dev/null
+++ b/plugins/devices/baycom-kiss/plugin.yaml
@@ -0,0 +1,31 @@
+id: baycom-kiss
+type: device
+parent_stack: MainAX25-Stack (MAX25-Stack)
+hardware: modems
+label: BayCom KISS Serial (USB/async)
+status: active
+
+hybbx:
+ plugin: baycom
+ backend: kiss
+ serial_baud: 9600
+
+serial:
+ default_device: /dev/ttyUSB0
+
+runtime:
+ kiss_link: /var/run/baycom-pr/kiss
+
+ini:
+ - stacks/baycom-pr/config/examples/baycom-pr.usb.ini
+ - share/baycom/baycom-pr.kiss-usb.ini.example
+
+client:
+ - share/clients/baycom-kiss.yaml
+ - share/clients/kiss-serial-usb.yaml
+ - share/clients/kiss-serial-rs232.yaml
+
+docs:
+ - stacks/baycom-pr/docs/GETTING-STARTED.md
+
+notes: USB KISS path — no kernel baycom driver required. Device alias pccom-kiss uses same backend.
diff --git a/plugins/devices/max25-sniffport/README.md b/plugins/devices/max25-sniffport/README.md
new file mode 100644
index 0000000..d0fcaa4
--- /dev/null
+++ b/plugins/devices/max25-sniffport/README.md
@@ -0,0 +1,5 @@
+# max25-sniffport
+
+Mode-A virt-COM / sniffport experimental work is **not** shipped in this freigegeben tree.
+
+Thin stub only.
diff --git a/plugins/devices/max25-terminal/plugin.yaml b/plugins/devices/max25-terminal/plugin.yaml
new file mode 100644
index 0000000..9f1289e
--- /dev/null
+++ b/plugins/devices/max25-terminal/plugin.yaml
@@ -0,0 +1,16 @@
+id: max25-terminal
+label: MAX25 Terminal
+hardware: terminal
+role: client
+status: active
+description: Official text-only operator UI — sole MAX25 client; M25/1 to max25d
+docs:
+ - docs/MAX25-CLIENT.md
+ - docs/MAX25-TERMINAL.md
+ - docs/PACKET-RADIO.md
+ - include/max25/protocol.md
+binaries:
+ - max25-terminal
+ - max25-client
+protocol: m25/1
+default_port: 7325
diff --git a/plugins/devices/max25-vcom/README.md b/plugins/devices/max25-vcom/README.md
new file mode 100644
index 0000000..ac6485a
--- /dev/null
+++ b/plugins/devices/max25-vcom/README.md
@@ -0,0 +1,5 @@
+# max25-vcom
+
+vcom-port / PTY experimental work is **not** shipped in this freigegeben tree.
+
+Thin stub only.
diff --git a/plugins/devices/pktnc2/README.md b/plugins/devices/pktnc2/README.md
new file mode 100644
index 0000000..3b9dd2e
--- /dev/null
+++ b/plugins/devices/pktnc2/README.md
@@ -0,0 +1,16 @@
+# Device: PK-TNC2
+
+**Status:** Planned — probe serial port after hardware delivery.
+
+PK-TNC2 / TNC-2 (TheFirmware) profile for HyBBX `packet_radio` with `tnc=tnc2`.
+
+## Preparation
+
+```bash
+# After delivery: edit stacks/tncs/pktnc2-serial.env
+./stacks/tncs/pktnc2-boot-wait.sh
+```
+
+HyBBX: `share/hybbx/pktnc2-host.ini.example`
+
+Reuses `tnc2c-probe` for port scan.
diff --git a/plugins/devices/pktnc2/plugin.yaml b/plugins/devices/pktnc2/plugin.yaml
new file mode 100644
index 0000000..0e3dc79
--- /dev/null
+++ b/plugins/devices/pktnc2/plugin.yaml
@@ -0,0 +1,37 @@
+id: pktnc2
+type: device
+parent_stack: MainAX25-Stack (MAX25-Stack)
+hardware: tncs
+label: PK-TNC2 / TNC-2 (TheFirmware)
+status: planned
+
+hybbx:
+ plugin: packet_radio
+ profile: tnc2
+ aliases: [pktnc2, pk-tnc2, tapr, thefirmware]
+ protocol: kiss
+ serial_line: 8n1
+ kiss_entry: auto
+
+serial:
+ default_device: /dev/ttyUSB1
+ default_baud: 9600
+
+rf:
+ radio_baud: 1200
+ band: cb
+
+scripts:
+ boot_wait: stacks/tncs/pktnc2-boot-wait.sh
+ probe: stacks/tncs/tnc2c-probe
+
+ini:
+ - share/hybbx/pktnc2-host.ini.example
+
+client:
+ - share/clients/pktnc2.yaml
+
+docs:
+ - stacks/tncs/docs/TNC2C-REFERENCE.md
+
+notes: Planned device — probe serial port after hardware inventory.
diff --git a/plugins/devices/soft-crdop/README.md b/plugins/devices/soft-crdop/README.md
new file mode 100644
index 0000000..fe44f9d
--- /dev/null
+++ b/plugins/devices/soft-crdop/README.md
@@ -0,0 +1,26 @@
+# Device: soft-crdop (MAX25-SoftModem / CRDOP — MAX25-SoftModem)
+
+**CRDOP** = stack acronym for **MAX25-SoftModem** (device id `soft-crdop`).
+
+**Status:** `active` — MAX25-Stack **standard subproject** (`stacks/crdop/`).
+
+**Canonical rule:** [docs/CRDOP.md](../../../docs/CRDOP.md) · **License:** GNU GPL v3
+
+## Summary
+
+| Topic | Policy |
+|-------|--------|
+| Type | Sound-card software modem subproject |
+| Compatibility | **AX.25 / KISS / TNC / modem** (software-modem domain) |
+| Mission | **Hardware solutions** (primary) + pure **software** on computers |
+| Audio | Kernel ALSA + MAX25 sound-proxy — **no PulseAudio** |
+| Build | Default ON — `-DMAX25_BUILD_CRDOP=OFF` to skip |
+
+## Quick start
+
+```bash
+./scripts/build.sh
+./scripts/max25-ctl start --hardware soft-modems --device soft-crdop
+```
+
+See [docs/CRDOP.md](../../../docs/CRDOP.md) for full project rules.
diff --git a/plugins/devices/soft-crdop/plugin.yaml b/plugins/devices/soft-crdop/plugin.yaml
new file mode 100644
index 0000000..a18a524
--- /dev/null
+++ b/plugins/devices/soft-crdop/plugin.yaml
@@ -0,0 +1,77 @@
+id: soft-crdop
+type: device
+parent_stack: MainAX25-Stack (MAX25-Stack)
+hardware: soft-modems
+label: MAX25-SoftModem (CRDOP — CB/AR Digital Open Protocol)
+status: active
+
+product:
+ name: MAX25-SoftModem
+ phase: development_and_testing
+ development: in-house
+ baud_primary: 1200
+ baud_max: 19200
+ duplex: [half, full]
+ ax25_packet_radio: acoustically_compatible
+ use_like_hardware_modem: true
+ protocol_primary: max25-softmodem
+ audio_hardware: required
+
+note: |
+ CRDOP = CB/AR Digital Open Protocol (CB = Citizens Band, AR = Amateur Radio).
+ MAX25-Stack STANDARD subproject (stacks/crdop/) — GNU GPLv3.
+ Sound-card based; kernel ALSA + MAX25 sound-proxy; no PulseAudio.
+ Full AX.25/KISS/TNC/modem compatibility goal. Hardware-solution-first.
+ Static project rule: docs/CRDOP.md
+
+hybbx:
+ plugin: crdop
+ transport: tcp
+ control_port: 8515
+ data_port: 8516
+ profile: cb
+
+modem:
+ protocol: max25-softmodem
+ duplex: half
+ duplex_modes: [half, full]
+ default_speed_baud: 1200
+ max_speed_baud: 19200
+ ax25_acoustic: true
+ packet_radio_compatible: true
+ audio: alsa
+ audio_backend: alsa-kernel
+ audio_path: max25-sound-proxy
+ no_pulseaudio: true
+ audio_required: true
+ coupling: [line_level, acoustic]
+
+runtime:
+ ctl_start: stacks/crdop/scripts/crdopc
+ default_ini: stacks/crdop/share/crdop.ini.example
+ env:
+ - CRDOP_INI
+ cmake_option_off: MAX25_BUILD_CRDOP
+ shipped_default: true
+
+ini:
+ - stacks/crdop/share/crdop.ini.example
+ - stacks/crdop/share/crdop-dual.ini.example
+ - stacks/crdop/share/crdop-amateur.ini.example
+ - share/hybbx/crdop-host.ini.example
+
+client:
+ - share/clients/soft-crdop.yaml
+
+license: GPL-3.0-or-later
+
+docs:
+ - docs/CRDOP.md
+ - stacks/crdop/docs/SOFTMODEM.md
+ - stacks/crdop/docs/AUDIO-ARCHITECTURE.md
+ - stacks/crdop/docs/CONFIG.md
+ - stacks/crdop/ROADMAP.md
+
+scripts:
+ build: stacks/crdop/scripts/build-crdop.sh
+ start: stacks/crdop/scripts/crdopc
diff --git a/plugins/devices/tmodem/README.md b/plugins/devices/tmodem/README.md
new file mode 100644
index 0000000..0ac2772
--- /dev/null
+++ b/plugins/devices/tmodem/README.md
@@ -0,0 +1,15 @@
+# Device: T-Modem-c1224 (`tmodem`)
+
+USB CDC **KISS half-TNC** from [T-Modem-c1224](https://github.com/ngteq/T-Modem-c1224) Pico firmware. Chip does AFSK; Pico does HDLC + bitbang. **Not** BayCom/based. **Not** softmodem.
+
+| Item | Value |
+|------|--------|
+| Device id | `tmodem` |
+| Backend | `kiss-raw-serial` |
+| Default path | `/dev/ttyACM0` |
+| Feature | `[features] tmodem=yes` (default **no**) |
+| Terminal | `max25-terminal -d tmodem` |
+
+HyBBX: attach to max25d only — no L1 inside HyBBX.
+
+See [docs/DEV/TMODEM-C1224.md](../../../docs/DEV/TMODEM-C1224.md).
diff --git a/plugins/devices/tmodem/plugin.yaml b/plugins/devices/tmodem/plugin.yaml
new file mode 100644
index 0000000..dd093fd
--- /dev/null
+++ b/plugins/devices/tmodem/plugin.yaml
@@ -0,0 +1,33 @@
+id: tmodem
+type: device
+parent_stack: MainAX25-Stack (MAX25-Stack)
+hardware: tncs
+label: T-Modem-c1224 (USB KISS half-TNC)
+status: prototype
+
+hybbx:
+ attach: max25d
+ note: HyBBX attach-only via MAX25 — no L1 in HyBBX
+
+serial:
+ default_device: /dev/ttyACM0
+ default_baud: 115200
+ line: 8n1
+ dtr_rts: no
+
+runtime:
+ backend: kiss-raw-serial
+
+ini:
+ - share/max25/max25d.tmodem.ini.example
+
+client:
+ - share/clients/tmodem.yaml
+
+docs:
+ - docs/DEV/TMODEM-C1224.md
+
+notes: >
+ T-Modem-c1224 Pico presents USB CDC KISS (HDLC on Pico + TCM3105 chip AFSK).
+ Not BayCom/based. Feature gate [features] tmodem=yes (default off).
+ First client path: max25-terminal -d tmodem.
diff --git a/plugins/devices/tnc2c/README.md b/plugins/devices/tnc2c/README.md
new file mode 100644
index 0000000..4ddd19d
--- /dev/null
+++ b/plugins/devices/tnc2c/README.md
@@ -0,0 +1,25 @@
+# Device: Landolt TNC2C
+
+**Status:** Active (v1).
+
+| Parameter | Value |
+|-----------|-------|
+| Serial | `/dev/ttyUSB0` or `/dev/ttyS4` (site-specific) |
+| Host line | 19200 8N1, RTS+DTR |
+| RF | 2400 AFSK |
+| HyBBX | `tnc=tnc2c`, `protocol=kiss` |
+
+## Boot sequence
+
+DTR must be high during power-on:
+
+```bash
+./stacks/tncs/tnc2c-boot-wait.sh
+./stacks/tncs/tnc2c-integration-test.sh
+```
+
+HyBBX INI: `share/hybbx/tnc2c-host.ini.example`
+
+## Safety
+
+No `kiss on` or TX tests without dummy load when antenna connected.
diff --git a/plugins/devices/tnc2c/plugin.yaml b/plugins/devices/tnc2c/plugin.yaml
new file mode 100644
index 0000000..d822c4a
--- /dev/null
+++ b/plugins/devices/tnc2c/plugin.yaml
@@ -0,0 +1,40 @@
+id: tnc2c
+type: device
+parent_stack: MainAX25-Stack (MAX25-Stack)
+hardware: tncs
+label: Landolt TNC2C
+status: active
+
+hybbx:
+ plugin: packet_radio
+ profile: tnc2c
+ protocol: kiss
+ serial_line: 8n1
+ rts_dtr: yes
+ kiss_entry: kiss_on
+
+serial:
+ default_device: /dev/ttyS4
+ default_baud: 19200
+ env_file: stacks/tncs/tnc2c-serial.env
+
+rf:
+ modem: tcm3105
+ radio_baud: 2400
+ band: cb
+
+scripts:
+ boot_wait: stacks/tncs/tnc2c-boot-wait.sh
+ health: stacks/tncs/tnc2c-health.sh
+ integration: stacks/tncs/tnc2c-integration-test.sh
+
+ini:
+ - stacks/tncs/hybbx-tnc2c.ini
+ - share/hybbx/tnc2c-host.ini.example
+
+client:
+ - share/clients/tnc2c.yaml
+
+docs:
+ - stacks/tncs/docs/TNC2C-OPERATIONS.md
+ - stacks/tncs/docs/HYBBX-TNC2C.md
diff --git a/plugins/external/README.md b/plugins/external/README.md
new file mode 100644
index 0000000..b035c09
--- /dev/null
+++ b/plugins/external/README.md
@@ -0,0 +1,28 @@
+# Optional plugins — ARDOP-plugin
+
+**CRDOP (MAX25-SoftModem)** is the **MAX25-Stack standard** modem — built and installed by default (`MAX25_BUILD_CRDOP=ON`). See `plugins/devices/soft-crdop/`.
+
+## ARDOP-plugin
+
+| Item | Detail |
+|------|--------|
+| **Plugin** | **ARDOP-plugin** — optional registry for third-party ARDOP host wire |
+| **Registry** | [ardop/plugin.yaml](ardop/plugin.yaml) |
+| **CRDOP coupling** | **None** — ARDOP is not enabled via `soft-crdop` or `crdop.ini` |
+| **Standard alternative** | Native CRDOP / M25-KISS host (default) |
+
+### Using ARDOP-plugin
+
+1. Install and run an ARDOP-capable modem host on the operator machine (third-party software).
+2. Attach HyBBX or another consumer per that ARDOP host's documentation.
+3. Keep CRDOP on native M25/KISS — do not mix ARDOP wire mode into CRDOP configs.
+
+See [ardop/README.md](ardop/README.md).
+
+## MAX25 standard (not ARDOP-plugin)
+
+| Item | Role |
+|------|------|
+| **CRDOP / MAX25-SoftModem** | In-house standard — `MAX25_BUILD_CRDOP=ON` (default) |
+| `stacks/crdop/` | CRDOP subproject — INI, launcher, native M25 host, docs |
+| `max25d` `crdop-tcp` backend | Standard integration (native M25/KISS) |
diff --git a/plugins/external/ardop/README.md b/plugins/external/ardop/README.md
new file mode 100644
index 0000000..b15469d
--- /dev/null
+++ b/plugins/external/ardop/README.md
@@ -0,0 +1,30 @@
+# ARDOP-plugin
+
+Optional **MAX25-Stack plugin** for operators who run **third-party ARDOP host software** alongside MAX25.
+
+**CRDOP (MAX25-SoftModem)** is the MAX25 standard sound-card modem — native M25/KISS on TCP :8515/:8516. ARDOP is **not** part of CRDOP and is **not** enabled via `soft-crdop` or `crdop.ini`.
+
+## When to use
+
+| Path | Use |
+|------|-----|
+| **CRDOP (default)** | Native MAX25-SoftModem — M25/KISS host via `crdopc` / `audio-dummyd` |
+| **ARDOP-plugin** | Operator-provided ARDOP host (Winlink-class wire) — separate from CRDOP |
+
+## Platform
+
+| Host | Notes |
+|------|-------|
+| **Linux / KLinux** | Typical for third-party ARDOP host software |
+| **FreeBSD / *BSD** | CRDOP/OSS only — ARDOP host not integrated in MAX25 |
+| **macOS / Windows** | Out of scope for MAX25 daemon path |
+
+## Operator workflow
+
+1. Install and run an ARDOP-capable modem host on the operator machine (third-party software).
+2. Point HyBBX or another consumer at the ARDOP host TCP ports per that software's documentation.
+3. Do **not** set CRDOP or `soft-crdop` INI flags for ARDOP — CRDOP remains native M25/KISS only.
+
+## Metadata
+
+[plugin.yaml](plugin.yaml) · [../README.md](../README.md)
diff --git a/plugins/external/ardop/plugin.yaml b/plugins/external/ardop/plugin.yaml
new file mode 100644
index 0000000..3a25e72
--- /dev/null
+++ b/plugins/external/ardop/plugin.yaml
@@ -0,0 +1,32 @@
+id: ardop-plugin
+type: optional
+parent_stack: MainAX25-Stack (MAX25-Stack)
+label: ARDOP-plugin
+status: optional
+
+note: |
+ ARDOP-plugin is an optional MAX25-Stack plugin registry entry for third-party
+ ARDOP host wire mode. It is separate from CRDOP (MAX25-SoftModem).
+ MAX25 ships CRDOP as the standard sound-card modem with native M25/KISS host.
+ Operators who need ARDOP run external ARDOP host software independently.
+
+policy:
+ max25_standard_modem: CRDOP
+ crdop_code_in_max25: true
+ ardop_modem_binary_in_max25: false
+ crdop_ardop_compat: false
+
+standard_modem:
+ product: MAX25-SoftModem
+ device: soft-crdop
+ stack: stacks/crdop
+ protocol: max25-softmodem
+
+wire:
+ format: ardop-host-tcp
+ note: Third-party ARDOP host — not wired through CRDOP or soft-crdop INI
+
+docs:
+ - plugins/external/README.md
+ - plugins/external/ardop/README.md
+ - docs/CRDOP.md
diff --git a/plugins/hardware/acoustic-bench/plugin.yaml b/plugins/hardware/acoustic-bench/plugin.yaml
new file mode 100644
index 0000000..7df7a28
--- /dev/null
+++ b/plugins/hardware/acoustic-bench/plugin.yaml
@@ -0,0 +1,21 @@
+id: acoustic-bench
+type: hardware
+parent_stack: MainAX25-Stack (MAX25-Stack)
+label: Acoustic Bench
+description: |
+ Host-side acoustic signal bench — dummy device, sniffer, DSP loopback.
+ Kernel ALSA only. For CRDOP / MAX25-SoftModem development and test.
+
+stack_path: stacks/crdop
+status: active
+
+devices:
+ - audio-dummy
+
+tools:
+ sniffer: stacks/crdop/tools/max25-signal-sniffer
+ dummy_daemon: stacks/crdop/tools/audio-dummyd
+
+docs:
+ - docs/CRDOP.md
+ - stacks/crdop/docs/AUDIO-ARCHITECTURE.md
diff --git a/plugins/hardware/modems/README.md b/plugins/hardware/modems/README.md
new file mode 100644
index 0000000..9988df9
--- /dev/null
+++ b/plugins/hardware/modems/README.md
@@ -0,0 +1,27 @@
+# Hardware: Modems
+
+BayCom/based SER12 — userspace **bcpr** (`stacks/max25-bcpr/`). USB/async KISS — `plugins/devices/baycom-kiss/`.
+
+Kernel `baycom-pr` / `baycom_ser_fdx` removed from this tree (2026-07-18).
+
+## HyBBX
+
+Optional BayCom/based path is via MAX25 (`bcpr` → KISS). See [docs/BAYCOM.md](../../docs/BAYCOM.md) and [docs/HYBBX.md](../../docs/HYBBX.md).
+
+| Path | Role |
+|------|------|
+| `stacks/max25-bcpr/` | SER12 userspace (PC-COM class) |
+| `baycom-kiss` | USB/async KISS TNC firmware |
+
+## Quick start
+
+```bash
+cmake -S . -B build-max25-bcpr -DMAX25_BUILD_MAX25_BCPR=ON
+cmake --build build-max25-bcpr
+# then: docs/BAYCOM.md (max25-bcpr-ctl / max25d [features] max25_bcpr=yes)
+```
+
+## Docs
+
+- [docs/BAYCOM.md](../../docs/BAYCOM.md)
+- [stacks/max25-bcpr/README.md](../../stacks/max25-bcpr/README.md)
diff --git a/plugins/hardware/modems/plugin.yaml b/plugins/hardware/modems/plugin.yaml
new file mode 100644
index 0000000..ad0a194
--- /dev/null
+++ b/plugins/hardware/modems/plugin.yaml
@@ -0,0 +1,27 @@
+id: modems
+type: hardware
+parent_stack: MainAX25-Stack (MAX25-Stack)
+label: Modems
+description: BayCom/based SER12 via max25-bcpr (userspace; not usable by default); USB/async KISS via baycom-kiss
+
+stack_path: stacks/max25-bcpr
+hybbx_plugin: baycom
+
+backends:
+ - max25-bcpr-ser12
+ - kiss-serial
+
+build:
+ cmake_option: MAX25_BUILD_MAX25_BCPR
+ targets: [max25-bcprd, max25-bcpr-ctl]
+
+ctl: stacks/max25-bcpr/tools/max25-bcpr-ctl
+
+runtime:
+ state_dir: /tmp/max25-bcpr
+ config: /etc/max25/max25-bcpr.ini
+ kiss_default: /tmp/max25-bcpr/kiss-bc0
+
+devices:
+ - baycom-kiss
+# SER12 product devices are max25e0 / max25e0:bc1 via max25d [devices], not kernel plugins.
diff --git a/plugins/hardware/soft-modems/README.md b/plugins/hardware/soft-modems/README.md
new file mode 100644
index 0000000..d3cdd53
--- /dev/null
+++ b/plugins/hardware/soft-modems/README.md
@@ -0,0 +1,23 @@
+# Hardware: Soft Modems
+
+Sound-card software modems — **MAX25-SoftModem (CRDOP)** is the in-house standard. **CRDOP** = stack acronym for **MAX25-SoftModem** (device id `soft-crdop`).
+
+| Device | Stack | HyBBX plugin | Protocol | v1 |
+|--------|-------|--------------|----------|-----|
+| `soft-crdop` | `stacks/crdop` | `crdop` | MAX25-native M25/KISS host | **active** |
+
+## CRDOP (standard)
+
+**CRDOP (MAX25-SoftModem)** — MAX25-Stack standard (`stacks/crdop/`). Built by default (`MAX25_BUILD_CRDOP=ON`). Native M25 host protocol on TCP :8515/:8516.
+
+**ARDOP-plugin** — optional separate registry for third-party ARDOP host software — see [plugins/external/ardop/README.md](../../external/ardop/README.md). Not coupled to CRDOP.
+
+## Start (operator)
+
+```bash
+./scripts/max25-ctl start --hardware soft-modems --device soft-crdop
+```
+
+Then attach HyBBX with `share/hybbx/crdop-host.ini.example`.
+
+CRDOP is acoustically AX.25-compatible at 1200 baud+; host path uses native MAX25 SoftModem TCP (M25/KISS).
diff --git a/plugins/hardware/soft-modems/plugin.yaml b/plugins/hardware/soft-modems/plugin.yaml
new file mode 100644
index 0000000..535a850
--- /dev/null
+++ b/plugins/hardware/soft-modems/plugin.yaml
@@ -0,0 +1,48 @@
+id: soft-modems
+type: hardware
+parent_stack: MainAX25-Stack (MAX25-Stack)
+label: Soft Modems (MAX25-SoftModem / CRDOP)
+description: |
+ MAX25-SoftModem (CRDOP) — in-house sound-card modem, MAX25-Stack STANDARD.
+ Development and test phase. 1200 baud+, half/full duplex.
+ Acoustically AX.25/Packet-Radio compatible with TNCs and BayCom modems.
+ Sound card IN/OUT + radio — use like a hardware modem.
+ Good sound card required (tone accuracy; higher baud = stricter audio).
+ Built and installed unless MAX25_BUILD_CRDOP=OFF.
+
+stack_path: stacks/crdop
+hybbx_plugin: crdop
+hybbx_doc: ../../docs/HYBBX.md#crdop
+
+status: active
+phase: development_and_testing
+shipped_default: true
+
+protocols:
+ - max25-softmodem
+ - ax25-afsk-acoustic
+
+requirements:
+ sound_card: required
+ baud_primary: 1200
+ baud_max: 19200
+ duplex: [half, full]
+ coupling: [line_level, acoustic]
+
+build:
+ cmake_option: MAX25_BUILD_CRDOP
+ default: ON
+
+ctl:
+ build: stacks/crdop/scripts/build-crdop.sh
+ start: stacks/crdop/scripts/crdopc
+ install: stacks/crdop/scripts/install-crdop.sh
+
+devices:
+ - soft-crdop
+
+docs:
+ - stacks/crdop/docs/INDEX.md
+ - stacks/crdop/README.md
+ - stacks/crdop/docs/SOFTMODEM.md
+ - stacks/crdop/ROADMAP.md
diff --git a/plugins/hardware/terminal/plugin.yaml b/plugins/hardware/terminal/plugin.yaml
new file mode 100644
index 0000000..9b9de36
--- /dev/null
+++ b/plugins/hardware/terminal/plugin.yaml
@@ -0,0 +1,4 @@
+id: terminal
+label: MAX25 Terminal clients
+stack: stacks/terminal
+description: Remote operator UI — no local hardware; connects to Linux max25d
diff --git a/plugins/hardware/tncs/README.md b/plugins/hardware/tncs/README.md
new file mode 100644
index 0000000..b2c8fef
--- /dev/null
+++ b/plugins/hardware/tncs/README.md
@@ -0,0 +1,25 @@
+# Hardware: TNCs
+
+Serial and USB Terminal Node Controllers. Merged from **TNCs-Stack** (`stacks/tncs/`).
+
+## HyBBX
+
+`packet_radio` plugin with `tnc=` profile per device.
+
+| Device | `tnc=` | Serial |
+|--------|--------|--------|
+| TNC2C | `tnc2c` | 19200 8N1, RTS/DTR |
+| PK-TNC2 | `tnc2` | 9600/2400 8N1 (planned) |
+
+## Build & test
+
+```bash
+./scripts/build.sh
+./stacks/tncs/tnc2c-integration-test.sh # with hardware
+```
+
+## Docs
+
+- [stacks/tncs/README.md](../../stacks/tncs/README.md)
+- [stacks/tncs/docs/TNC2C-OPERATIONS.md](../../stacks/tncs/docs/TNC2C-OPERATIONS.md)
+- [stacks/tncs/docs/TNC2C-REFERENCE.md](../../stacks/tncs/docs/TNC2C-REFERENCE.md)
diff --git a/plugins/hardware/tncs/plugin.yaml b/plugins/hardware/tncs/plugin.yaml
new file mode 100644
index 0000000..cbc95de
--- /dev/null
+++ b/plugins/hardware/tncs/plugin.yaml
@@ -0,0 +1,28 @@
+id: tncs
+type: hardware
+parent_stack: MainAX25-Stack (MAX25-Stack)
+label: TNCs
+description: Serial/USB TNC hardware group — async host protocols (KISS, hostmode, 6PACK)
+
+stack_path: stacks/tncs
+hybbx_plugin: packet_radio
+hybbx_doc: ../../docs/HYBBX.md#packet_radio
+
+protocols:
+ - kiss
+ - hostmode
+ - sixpack
+
+build:
+ makefile: stacks/tncs/Makefile
+ targets: [all, test, integration, health, boot-wait]
+
+ctl:
+ health: stacks/tncs/tnc2c-health.sh
+ boot_wait: stacks/tncs/tnc2c-boot-wait.sh
+ integration: stacks/tncs/tnc2c-integration-test.sh
+ listen: stacks/tncs/tnc2c-listen.sh
+
+devices:
+ - tnc2c
+ - pktnc2
diff --git a/plugins/manifest.yaml b/plugins/manifest.yaml
new file mode 100644
index 0000000..c7163d6
--- /dev/null
+++ b/plugins/manifest.yaml
@@ -0,0 +1,91 @@
+# MainAX25-Stack (MAX25-Stack) plugin registry — auto-discovered by scripts/discover-plugins.sh
+# HyBBX attaches to a running MainAX25 stack; these plugins define the contract.
+schema_version: 1
+stack: max25
+name: MainAX25-Stack
+alias: MAX25-Stack
+version: 1.0.0
+default_betriebsform: standalone
+description: MainAX25-Stack (MAX25-Stack) — Main AX.25 Packet Radio standalone stack (HyBBX-compatible)
+
+betriebsform:
+ - id: standalone
+ path: betriebsform/standalone
+ label: Standalone
+ description: Single operator — terminal AX.25 clients, one modem/TNC
+ - id: service
+ path: betriebsform/service
+ label: Service
+ description: 24/7 dual-radio operation (HyBBX, digipeater, automation)
+ - id: hybbx-host
+ path: betriebsform/hybbx-host
+ label: HyBBX Host
+ description: Secondary RF host — KISS/HBX link to HyBBX Main
+
+hardware:
+ - id: tncs
+ path: hardware/tncs
+ stack: stacks/tncs
+ hybbx_plugin: packet_radio
+ description: Serial/USB TNC hardware group (TNC2C, PK-TNC2, PK-232, …)
+ - id: modems
+ path: hardware/modems
+ stack: stacks/max25-bcpr
+ hybbx_plugin: baycom
+ description: BayCom/based SER12 via max25-bcpr (userspace); USB KISS via baycom-kiss
+ - id: soft-modems
+ path: hardware/soft-modems
+ stack: stacks/crdop
+ hybbx_plugin: crdop
+ description: MAX25-SoftModem (CRDOP) — in-house standard; built unless MAX25_BUILD_CRDOP=OFF
+ - id: acoustic-bench
+ path: hardware/acoustic-bench
+ stack: stacks/crdop
+ description: Acoustic bench — audio-dummy, signal sniffer, DSP loopback (dev/test)
+ - id: terminal
+ path: hardware/terminal
+ stack: stacks/terminal
+ description: MAX25 Terminal client group (remote UI to max25d)
+
+devices:
+ - id: tnc2c
+ path: devices/tnc2c
+ hardware: tncs
+ hybbx_profile: tnc2c
+ status: active
+ - id: pktnc2
+ path: devices/pktnc2
+ hardware: tncs
+ hybbx_profile: tnc2
+ status: planned
+ - id: baycom-kiss
+ path: devices/baycom-kiss
+ hardware: modems
+ hybbx_backend: kiss
+ status: active
+ - id: bayc-plugin
+ path: devices/bayc-plugin
+ hardware: modems
+ hybbx_backend: max25d
+ status: stub
+ note: Thin hook only — experimental orch/soft-TNC lives in vault exbug/ (private hack/daemon); no baycom_* NIC
+ - id: soft-crdop
+ path: devices/soft-crdop
+ hardware: soft-modems
+ hybbx_plugin: crdop
+ status: active
+ note: MAX25-SoftModem (CRDOP) — standard; development/test phase; 1200–19200 baud; acoustic AX.25; sound card required
+ - id: audio-dummy
+ path: devices/audio-dummy
+ hardware: acoustic-bench
+ status: active
+ note: Acoustic bench dummy — loopback/ALSA sniff/M25 host; signal sniffer for on-host evaluation
+ - id: tmodem
+ path: devices/tmodem
+ hardware: tncs
+ status: prototype
+ note: T-Modem-c1224 USB KISS half-TNC (Pico HDLC + chip AFSK); [features] tmodem=yes; not BayCom/based
+ - id: max25-terminal
+ path: devices/max25-terminal
+ hardware: terminal
+ status: active
git clone -b <branch> https://cgit.mode42.com/<repo>.git
git clone -b <branch> git://cgit.mode42.com/<repo>.git

info@mode42.com