* Energy economy, class_of_ms parsing. Still only StayAlive is supported, but now respond to MS in-spec.
* Reject migration location updates with D-LOCATION-UPDATE-REJECT instead of silently dropping (#71)
* Large refactor putting tx timeslot selection responsibility with LLC/UMAC
* Refactor on TetraAddress and SsiRanges
* Fix for logging; writing to reader that stops consuming (full buffer) now no longer blocks the calling thread
* Fix BS LLC to bundle pending ACK into BL-ADATA with outgoing TL-DATA (#78)
* Version 0.5.9, refactors, removed most TetraPack-specific ssi filtering code
* Energy economy, class_of_ms parsing, configurable MS TX power
- Fix EnergySavingInformation bit widths: frame_number 2→5, multiframe_number 2→6 (clause 16.10.10)
- Accept MS-requested energy saving mode instead of always overriding with StayAlive
- Implement D-MM-STATUS response for ChangeOfEnergySavingModeRequest
- Parse class_of_ms into structured ClassOfMs (24-bit, clause 16.10.5) instead of raw u64
- Store energy_saving_mode and class_of_ms per-MS in client state
- Make ms_txpwr_max_cell configurable via config.toml (default 4 = 30 dBm)
- Rewrite DMmStatus to use StatusDownlink enum and EnergySavingInformation
- Fix rx_u_mm_status: wrong PDU name in error log, make handled flag mutable
* Override energy saving mode to StayAlive, DL scheduler lacks per-MS monitoring pattern support
---------
Co-authored-by: Wouter Bokslag <w.bokslag@midnightblue.nl>
Version 0.5.8:
* Added Telemetry and Control frameworks, running as separate threads in the stack.
Telemetry can send event data to an external telemetry service, while Control allows the BS to receive Control commands from an external Control service.
* Currently, Telemetry events for MS (de)registration and group attach/detach are implemented. Control supports remote command for SDS sending. Try `sendsds 1 <your_ms_ssi> false 82042d014869`
* Provide sample systemd service file (#66) in /contrib/systemd
Further changes:
* Refactored brew jitter buffer into separate file
* Refactored websockets into a separate transport
* Removed obsolete tnmm example networked entity code
* Moved brew entity to net_brew entity to designate it's a networked component
* Renamed tetra-bluestation binary to bluestation-bs
* Added support for secret fields in config, that will not be printed through Display or Debug
* Try to make SDR device selection cleaner and more robust
* Automatically select a supported SDR device
* Handle missing timestamps, detect SoapyRemote
* Remove device specific iocfg, implement overrides in a more generic way
* Cleanup device opening, skip enumeration if device string is given
* Add config overrides for sample rate and channel numbers
* Fix SXceiver period size for overridden sample rates
* Show errors for unsupported SDR configuration fields
---------
Co-authored-by: wbokslag <w.bokslag@midnightblue.nl>
* Try to fix LimeSDR configuration issues, update soapysdr crate
* Make default gains consistent with configuration example
Also increase default PAD gain for LimeSDR a bit.
PAD gains below 19 dB gave TX calibration errors on my LimeSDR USB.
* Some SdrSettings cleanup
* Add D-NWRK-BROADCAST time broadcasting
- Broadcast UTC time and local offset once per hyperframe (~61s)
- Add configurable timezone setting to cell config
- Use GSSI 0xFFFFFF broadcast address per clause 23.4.1.2.1
- Include number_of_ca_neighbour_cells field with value 0
- Skip first broadcast at startup before any radios have registered
- Remove incorrect trailing M-bit from D-NWRK-BROADCAST PDU (MLE PDUs don't use M-bits, per Annex E.2.1)
- Validate timezone at config parse and offset D-NWRK-BROADCAST timing
* Per-radio ISSIs with TetraPack safety filtering; MM improvements
- Version to 0.4.9
- Send per-radio REGISTER/DEREGISTER/AFFILIATE/DEAFFILIATE with individual ISSIs
- Add TetraPack ISSI filter: only exactly 7-digit ISSIs sent over WS
- Restrict GSSI <= 90 filter to TetraPack only
- Filter GROUP_TX forwarding for non-routable source ISSIs
- Remove Brew ISSI config field and initial BTS registration
- Rename is_brew_routable to is_brew_gssi_routable
- MM: auto-register unknown MS on group attach
- MM: send D-LOCATION UPDATE COMMAND to returning radios for group report
- MM: fix group_identity_attachment_lifetime to ETSI default
- MM: rename TemporaryRegistration to MigratingLocationUpdating
* implemented LST indication based on connection to Brew or enablement of Brew
With brew disabled, LST signalling follows optional user flag
With brew enabled, LST signalling dynamic, overriding user flag
* added Brew WebSocket ping/pong heartbeat
Co-authored-by: Wouter Bokslag <w.bokslag@midnightblue.nl>
- 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.
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.