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
Set radio_dl_timeout to maximum (15) to prevent T307 timer expiration
Use BSCH (SDB burst) only on frame 18, SCH/HD (NDB burst) on frames 1-17
Update hyperframe number dynamically in SYSINFO broadcasts
Use hyperframe_number consistently instead of cck_id in SYSINFO1
Added supporting structs
Improved support for U-STATUS message
Implemented rudimentary support for emitting MM PDU FUNCTION NOT SUPPORTED upon unhandled received MM message types
Improved type2 field parsing/writing
Additional stack tests
- Better support for uplink SCH/F
- More typed message parsing improvements and standardization
- MAC Scheduler bugfix, restructuring
- Improved stdout formatting
- Added debugging features; logging text and UL/DL RF samples to file
- Implemented various extra PDU types
- Added unit tests and test vectors for various PDU types
- Added near-full-stack tests for UMAC and above.
Improved generics for higher-layer (MLE and above) message parsing
now allowing effective parsing of type3 and type4 fields straight
to struct types, and vice versa. Also, extended/improved several
SAP primitive struct definitions, and varous other smaller changes.
You can now use the optional custom_duplex_spacing field to override the duplex spacing (distance between ul and dl) instead of using the values as specified by ETSI. This is useful if your radio uses a modified duplex spacing table.