summaryrefslogtreecommitdiff
path: root/stacks/daemon/max25_platform.py
diff options
context:
space:
mode:
authorinfo@mode42.com <info@mode42.com>2026-08-07 18:23:28 +0000
committerinfo@mode42.com <info@mode42.com>2026-08-07 18:23:28 +0000
commitfa05a5f8238e9e1417235711656e5062ccc843a7 (patch)
tree46fbbd18de54492b59307c16efcc7f3152723238 /stacks/daemon/max25_platform.py
Initial push
Diffstat (limited to 'stacks/daemon/max25_platform.py')
-rw-r--r--stacks/daemon/max25_platform.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/stacks/daemon/max25_platform.py b/stacks/daemon/max25_platform.py
new file mode 100644
index 0000000..0ca1acb
--- /dev/null
+++ b/stacks/daemon/max25_platform.py
@@ -0,0 +1,83 @@
+"""MAX25 host platform — Linux full stack, FreeBSD server + CRDOP/OSS."""
+from __future__ import annotations
+
+import os
+import sys
+
+
+def system_name() -> str:
+ return sys.platform
+
+
+def is_linux() -> bool:
+ return sys.platform == "linux"
+
+
+def is_freebsd() -> bool:
+ return sys.platform.startswith("freebsd")
+
+
+def is_bsd() -> bool:
+ return sys.platform.startswith(("freebsd", "openbsd", "netbsd", "darwin"))
+
+
+def max25d_supported() -> bool:
+ """Daemon may run (full stack on Linux, server+CRDOP on FreeBSD)."""
+ return is_linux() or is_freebsd()
+
+
+def default_unix_socket() -> str:
+ if is_linux():
+ return "/run/max25/modem.sock"
+ if is_freebsd():
+ return "/var/run/max25/modem.sock"
+ return "/tmp/max25/modem.sock"
+
+
+def default_bans_file() -> str:
+ if is_linux():
+ return "/var/lib/max25/bans.txt"
+ return "/var/db/max25/bans.txt"
+
+
+def supported_device_ids() -> frozenset[str]:
+ if is_linux():
+ return frozenset(
+ {
+ "tnc2c",
+ "pktnc2",
+ "tmodem",
+ "baycom-kiss",
+ "pccom-kiss",
+ # BayCom/based SER12 (max25-bcpr -> device max25e0; in scope, default ON in Lite)
+ "max25e0",
+ "max25e0:bc0",
+ "max25e0:bc1",
+ "soft-crdop",
+ "audio-dummy",
+ }
+ )
+ if is_freebsd():
+ # USB KISS (tmodem/c1224) + CRDOP/OSS + max25-bcpr (SER12 via sysarch I386_SET_IOPERM)
+ return frozenset({"tmodem", "soft-crdop", "audio-dummy", "max25e0", "max25e0:bc0", "max25e0:bc1"})
+ return frozenset({"soft-crdop"})
+
+
+def crdop_audio_backend() -> str:
+ """Host audio API for CRDOP sound-proxy."""
+ env = os.environ.get("MAX25_AUDIO_BACKEND", "").strip().lower()
+ if env in ("alsa", "oss"):
+ return env
+ if is_linux():
+ return "alsa"
+ if is_freebsd():
+ return "oss"
+ return "alsa"
+
+
+def platform_label() -> str:
+ if is_linux():
+ return "Linux/KLinux"
+ if is_freebsd():
+ return "FreeBSD"
+ return sys.platform
git clone -b <branch> https://cgit.mode42.com/<repo>.git
git clone -b <branch> git://cgit.mode42.com/<repo>.git

info@mode42.com