Rodrigo Pérez
cdf486feb4
docs: FastAPI-only monitor stack and integrated hotspot proxy
...
Remove references to PHP backend and standalone adn-proxy from monitor
documentation; point hotspot proxy setup to adn-server.yaml.
4 months ago
Rodrigo Pérez
b2daf46f96
docs: integrated PROXY and SELF_SERVICE in adn-server.yaml
...
Document fan-in hotspot proxy, MySQL self-service, reload limits, and
legacy standalone adn-proxy; add EN/ES user guide and update monitor cross-refs.
4 months ago
Rodrigo Pérez
1a64b088ed
fix(config): defer UDP rebind on SIGHUP reload
...
Wait for stopListening before listenUDP to avoid EADDRINUSE when GENERATOR
collapses (D-APRS-0 -> D-APRS). Migrate instance-0 protocol on bind unchanged.
Reload completion runs via Deferred callback.
4 months ago
Rodrigo Pérez
bba7e43da8
feat(proxy): self-service MySQL on integrated hotspot fan-in
...
Port legacy adn-proxy Clients table behaviour into core PROXY fan-in: RPTC/RPTO
hooks, periodic send_opts/lst_seen/clean_tbl, and SELF_SERVICE YAML block
(load via config_loader). Optional mysqlclient extra.
4 months ago
Rodrigo Pérez
18dc22b0bb
feat(report): fan-out inject-proxy voice events by peer OPTIONS
...
Map SYSTEM voice events to SYSTEM-N only for hotspots whose RPTO lists the
call TG on that timeslot, fixing false green TX/RX chips on the monitor.
4 months ago
Rodrigo Pérez
92c0a5c48c
feat(hbp): filter inject-proxy DMRD downlink by per-peer OPTIONS
...
Multi-hotspot SYSTEM inject must not REPEAT or bridge-downlink TGs to peers
whose RPTO OPTIONS omit the call TG. Exempt parrot/echo 9990–9999 for the
RX_PEER that keyed the service TG.
4 months ago
Rodrigo Pérez
46024c4da4
test: add HBP/proxy integration coverage and prune redundant suite
...
Add real-stack REPEAT and proxy fan-in E2E tests so regressions outside
DeterministicScenario are caught. Remove duplicate or fragile tests,
consolidate monitor remap cases, and document harness vs integration policy.
4 months ago
Rodrigo Pérez
614c882bcb
feat(proxy): integrated UDP fan-in with inject-only MASTER (V2-P3-002)
...
Hotspots connect on PROXY.LISTEN_PORT with in-process inject into SYSTEM,
session-preserving SIGHUP reload, and composition-root wiring in main.
4 months ago
Rodrigo Pérez
ca59b886fb
feat(report): monitor topology expansion and proxy peer resolution
...
Map proxy upstream slots into VOICE_EVENT_SND, resolve RX peer IDs for
dashboard chips, and keep ECHO/parrot TX-RX colors aligned with legacy.
4 months ago
Rodrigo Pérez
6eec98400f
feat(talker-alias): embed TA on REPEAT and fix both-mode VHEAD inject
...
Overlay Talker Alias in repeated DMRD bursts so WPSD/MMDVMHost can display
aliases on RX, buffer TA from OBP voice, and inject the template at VHEAD
when the source sends no TA.
4 months ago
Rodrigo Pérez
663e030ef9
fix(bridge): align static TG options loop with legacy bridge_master
...
Refresh TS1/TS2 static talkgroups on the 26s timer and options_config path
so user-activated bridges and OPTIONS strings stay consistent after reload.
4 months ago
Rodrigo Pérez
c361f593c3
feat(proxy): ProxyService domain and use cases (V2-P3-001)
...
Add ClientSlot/UpstreamPortRange, ProxyUseCases with in-memory store and
RPTO queue, plus peer_id packet helper — library only, not wired to runtime.
4 months ago
Rodrigo Pérez
6210aa4c87
feat(subscription): BridgesLegacyView and pickle BRIDGE_SND shim (V2-P2-007)
...
Export subscriptions to legacy BRIDGES dict and encode v1 monitor pickle
frames; library-only, not wired to report runtime yet.
4 months ago
Rodrigo Pérez
82782f7b93
feat(mesh): PeerTransport port and codec registry (V2-P2-005)
...
Add MeshIngress/MeshEgress, obp_v1 and dmre_v5 transports, and
MeshCodecRegistry with auto decode/encode matching legacy VER selection.
4 months ago
Rodrigo Pérez
fe71492d11
feat(subscription): VoiceIngress builder from DMRD args (V2-P2-004)
...
Add build_voice_ingress for dmrd_received parity, bridge_match_slot on
VoiceIngress, and focused builder tests without runtime wiring.
4 months ago
Rodrigo Pérez
12a21d389a
chore(tests): consolidate subscription tests and drop redundant cases
...
Merge router parity into a single file and remove trivial domain tests
without reducing meaningful coverage.
4 months ago
Rodrigo Pérez
851e35f600
fix(subscription): align SubscriptionRouter with legacy bridge_tables scan (V2-P2-003)
...
Match bridge_tables_with_active_source and to_target forward selection on
subscription rows; add parity tests vs legacy BRIDGES scan including OBP dedup.
4 months ago
Rodrigo Pérez
a46bec7d1e
feat(subscription): VoiceIngress router and forward legs (V2-P2-003/004)
...
Add immutable VoiceIngress/ForwardLeg domain types and a pure
SubscriptionRouter that resolves active forward targets from the store.
4 months ago
Rodrigo Pérez
d0abe7c09e
feat(subscription): one-way BRIDGES export adapter (V2-P2-002)
...
Export SubscriptionStore snapshots to legacy BRIDGES dict rows for
future hot-path parity without writing subscriptions from BRIDGES input.
4 months ago
Rodrigo Pérez
c734b1f0b0
feat(subscription): domain model and in-memory store (V2-P2-001)
...
Add AudioChannel, Subscription entities, SubscriptionStore port, and
InMemorySubscriptionStore with unit tests (no runtime wiring yet).
4 months ago
Rodrigo Pérez
471e1795bf
feat(report): optional MQTT publisher and dashboard state (V2-P1-006)
...
Add opt-in REPORTS.MQTT with retained shared state and live voice_event
topics, topology static TG in v2 payloads, dashboard_state builder, and
SIGHUP reload.
4 months ago
Rodrigo Pérez
99169e77ca
feat(report): bounded queue worker and topology connected_at
...
Decouple bridge events from TCP send via a reactor-drained queue (50ms, 2048
events). Export peer connected_at in topology so monitor timers survive refresh.
4 months ago
Rodrigo Pérez
048c27ab23
feat(report): implement v2 JSON topology, routing, voice events and deltas
...
Wire report protocol 2 with typed JSON payloads and incremental topology/routing
deltas; lab-validated with adn-monitor consumer.
4 months ago
Rodrigo Pérez
af4264100e
docs(v2): add report v2 JSON schema and protocol docs (V2-P1-001)
...
Define typed monitor payloads (hello, topology, routing_table, voice_event,
delta) with JSON Schema, anonymized examples, pytest validation, and EN/ES docs.
4 months ago
Rodrigo Pérez
34448e4fe0
Merge branch 'feature/V2-P0-007-replay-harness' into develop
...
V2-P0-007: JSONL replay harness completes Phase 0 prep (server).
4 months ago
Rodrigo Pérez
25dbc971b0
test(v2): add JSONL session replay harness (V2-P0-007)
...
SessionReplayer replays golden fixtures through DeterministicScenario;
add HBP group voice session, behavior tests, and dev CAPTURE scaffold.
Set pytest pythonpath so bare `pytest` finds tests.* imports.
4 months ago
Rodrigo Pérez
6c1195ab6c
Merge branch 'feature/V2-P0-006-reactor-timers' into develop
...
V2-P0-006: rule_timer/stat_trimmer on reactor; manual lab OK.
4 months ago
Rodrigo Pérez
72264da592
refactor(v2): run rule_timer and stat_trimmer on reactor (V2-P0-006)
...
Schedule bridge timer loops inline on the Twisted reactor instead of
deferToThread to avoid BRIDGES races with dmrd_received.
4 months ago
Rodrigo Pérez
86e8a74e72
Merge branch 'feature/V2-P0-005-mesh-codecs' into develop
...
V2-P0-005: extract OBP/DMRE mesh codecs; wire behaviour unchanged.
4 months ago
Rodrigo Pérez
710b1db4a3
refactor(v2): extract OpenBridge mesh codecs from udp_hbp (V2-P0-005)
...
Move DMRD v1 HMAC and DMRE v4/v5 BLAKE2b parse/build to
infrastructure/mesh/; udp_hbp delegates wire crypto unchanged.
4 months ago
Rodrigo Pérez
37cec421d7
Merge branch 'feature/V2-P0-004-split-bridge' into develop
...
V2-P0-004: split BridgeUseCases into six mixins under application/bridge/.
Manual lab validation passed.
4 months ago
Rodrigo Pérez
279c139918
refactor(v2): extract LC/TA and bridge-table mixins (V2-P0-004 chunks 4-5)
...
Move Talker Alias / embedded LC and BRIDGES table lifecycle into
application/bridge/; BridgeUseCases remains the public facade with
dmrd_received and unit/private paths only.
4 months ago
Rodrigo Pérez
df18dbde8a
refactor(v2): extract bridge HBP forward mixin (V2-P0-004 chunk 3)
...
Move routerHBP ingress packet control and sendDataToHBP into
application/bridge/hbp_forward.py; facade unchanged for callers.
4 months ago
Rodrigo Pérez
004bca2d2c
refactor(v2): extract bridge OBP forward mixin (V2-P0-004 chunk 2)
...
Move _ensure_obp_source_for_tg, OBP stream tracking, routerOBP group
voice ingress, and sendDataToOBP into application/bridge/obp_forward.py.
4 months ago
Rodrigo Pérez
f657e61c58
refactor(v2): extract bridge helpers and timer mixin (V2-P0-004 chunk 1)
...
Move shared TG/OBP helpers and legacy timer loops (rule_timer, trimmers,
bridge_reset, bridge_debug) into application/bridge/; BridgeUseCases keeps
the public facade via BridgeTimerMixin.
4 months ago
Rodrigo Pérez
f5eaa1b57e
feat(v2): add RuntimeContext holder and atomic SIGHUP reload (V2-P0-003)
...
Introduce RuntimeContextHolder with ConfigProxy so main wiring keeps a stable
config view while SIGHUP reload builds a deep copy, applies reload_server_config,
then swaps the pointer only on success.
4 months ago
Rodrigo Pérez
0e3a369508
Merge branch 'feature/V2-P0-002-bridges-index' into develop
4 months ago
Rodrigo Pérez
c923006598
fix(parrot): rotate playback stream when seq byte wraps
4 months ago
Rodrigo Pérez
9c20a0e6e9
perf: add O(1) BRIDGES source index for forwarding lookup
4 months ago
Rodrigo Pérez
92c1e906bd
test: add deterministic regression suite (142 tests)
4 months ago
Rodrigo Pérez
ed5a4b31d4
refactor(v2): route bridge reporting via ReportingUseCases (V2-P0-001)
...
Inject ReportingUseCases into BridgeUseCases and centralize BRDG_EVENT
emission through _send_bridge_event; use reporting use cases for periodic
CONFIG/BRIDGE snapshots in main.
4 months ago
Rodrigo Pérez
33e88c90ce
chore(tests): register pytest behavior and smoke markers
...
Silence PytestUnknownMarkWarning for custom test markers used in the suite.
4 months ago
Rodrigo Pérez
d2f140cd04
feat(v2): vendor dmr_utils3 into domain/dmr (V2-P0-008)
...
Move BPTC/decode/const into the domain layer, merge encode_emblc bit-25 fix,
and drop the external dmr_utils3 pip dependency.
4 months ago
Rodrigo Pérez
80319f613e
chore(release): v1.0.0
...
First stable SemVer release. Bump package version, add CHANGELOG,
__version__, and --version flag. Compatible with adn-monitor 1.0.0.
4 months ago
Rodrigo Pérez
bcec46fe9d
fix(docs): MkDocs language links under /docs/en and /docs/es
...
Align alternate language switcher paths with production mount and
site-root-index redirect.
4 months ago
Rodrigo Pérez
ad48aaee56
fix(config): accept numeric MMDVM option fields in YAML
...
Validate RX_FREQ, SLOTS, lat/long, etc. as int/float instead of requiring
strings. Fixes parrot startup when YAML uses unquoted numbers.
4 months ago
Rodrigo Pérez
b0578fb38b
fix(parrot): preserve source seq in playback
...
Stop renumbering DMRD sequence to 1..255 on replay; duplicate seq values
after ~15–30s caused MMDVMHost to drop voice while TX continued. Match
legacy playback.py (stream ID rewrite only).
4 months ago
Rodrigo Pérez
7b3a6f218b
feat: add Talker Alias text encoding (utf8/iso8/7bit)
...
Add TALKER_ALIAS_TEXT_FORMAT: single or comma-separated encodings for
embedded LC (e.g. utf8,iso8 for Motorola and Hytera). Example template
defaults to both formats; runtime default remains utf8 when omitted.
4 months ago
Rodrigo Pérez
e498338e20
style: fix ruff import ordering (I001)
4 months ago
Rodrigo Pérez
e8b8565290
refactor(talker-alias): move BPTC encoder to infrastructure with DI
...
Extract corrected encode_emblc and TA embedded-LC wiring from domain into
infrastructure adapters. Inject DmrEmbeddedLcEncoder and TalkerAliasEmblcEncoder
from main.py so application layers stay free of infrastructure imports. Use the
fixed encoder for bridge group LC and pkt_gen as well as Talker Alias overlay.
4 months ago