- Send FloorReleased/FloorGranted to UMAC for network calls so hangtime switches to signalling mode (no noise) and resumes on speaker change
- Rename LocalCallStart/LocalCallTxStopped/LocalCallEnd to FloorGranted/FloorReleased/CallEnded (origin-agnostic floor control)
Now only sends SAP messages to Brew entity if Brew entity is
enabled in the config. This prevents spam of undeliverable messages.
Also changed Brew username to int type, since it is always an ID
- Brew config fields updated:
- Enabled field now removed.
- Internally, map config file to intermediary struct, then to StackConfig to be coherent with other config fields.
- Remove brew user agent field, now derive that from version number + git commit hash: BlueStation/0.x.x/aabbccdd
- Some small tweaks and improvements
- Move all group call lifecycle (circuit allocation, D-SETUP/D-CONNECT, hangtime) from Brew to CMCE
- Add NetworkCallStart/Ready/End messages for communication between Brew and CMCE
- Unify ActiveCall tracking for both local and network-initiated calls
- Add LocalCallTxStopped for immediate PTT release notification to Brew
- Fix D-SETUP spam: change late entry interval from 3 timeslots to 20 multiframes (5s)
- Fix FACCH stealing: add chan_alloc with target timeslot for proper delivery
- Handle duplicate U-TX CEASED messages to prevent hangtime timer reset
- Local group calls now functional with audio passing to Brew/TetraPack
- Add centralized timeslot allocator to prevent Brew/CMCE collision
- Fix Brew audio: support multiple ACELP formats (36/35/274 bytes)
- Per-timeslot UL tracking in LMAC for concurrent calls
- Voice loopback and Brew forwarding in UMAC rx_tmd_prim
- Notify Brew of speaker changes during hangtime (U-TX-DEMAND)
- CMCE circuit allocation uses centralized timeslot manager
Although functional changes are limited, I've massively refactored and restructured the codebase into several separate crates.
- tetra-core features functionality and data that are used throughout the stack
- tetra-saps contains definitions for all SAP message types
- tetra-config contains everything that has to do with toml-based config file parsing and conversion to the internally-used datastructures
- tetra-pdus features entity-related PDU definitions, including field struct types and enums
- tetra-entities features implementations for TETRA entities, split between BS and MS use cases. It also holds subcomponents like schedulers and decoding tools.
A separate bins folder is made, which may hold any current and future binary targets we want to compile. Right now we have:
- tetra-bluestation-bs, which compiles the core base station binary
- pdu-tool, which is a crude, buggy, ad hoc tool to parse certain pdu types for stack debugging purposes
- Upper mac now maintains which MS started uplink fragmentation
- Upper mac adds fragments to SSI-bound defrag buffer
- Scheduler now allows easy access to which SSI an uplink slot was granted
- Scheduler has improved schedule printing features for debugging
- More work towards functional downlink fragmentation