1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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
|