python-aaronia 0.5.1__tar.gz → 0.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- python_aaronia-0.6.0/CHANGELOG.md +342 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/Cargo.lock +321 -362
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/Cargo.toml +1 -1
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/PKG-INFO +40 -23
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/PLUGINS.md +1 -1
- python_aaronia-0.6.0/README.md +291 -0
- python_aaronia-0.6.0/docs/APPS.md +107 -0
- python_aaronia-0.6.0/docs/QUICKSTART.md +177 -0
- python_aaronia-0.6.0/docs/USAGE.md +311 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/include/aaronia.h +7 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/python-aaronia/Cargo.toml +5 -5
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/python-aaronia/README.md +39 -22
- python_aaronia-0.6.0/python-aaronia/aaronia.pyi +143 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/python-aaronia/src/lib.rs +61 -33
- python_aaronia-0.6.0/soapy-aaronia/README.md +131 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/soapy-aaronia/Registration.cpp +19 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/c_api.rs +41 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/http_streaming.rs +13 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/lib.rs +15 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/native_sdk.rs +6 -5
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/sdr_source_impl.rs +15 -2
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/unified_source.rs +393 -54
- python_aaronia-0.6.0/tests/http_resilience_test.rs +424 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/tests/live_smoke.rs +39 -0
- python_aaronia-0.5.1/CHANGELOG.md +0 -395
- python_aaronia-0.5.1/README.md +0 -503
- python_aaronia-0.5.1/soapy-aaronia/README.md +0 -86
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/.cargo/config.toml +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/.gitattributes +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/.gitignore +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/CONTRIBUTING.md +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/DESIGN.md +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/LICENSE +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/benches/decompress_block.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/benches/deinterleave_dual_iq.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/benches/parse_int16_packet.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/benches/rtsa_open_and_read.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/deny.toml +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/docs/FILESPEC.md +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/docs/HTTPSPEC.md +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/docs/SDKSPEC.md +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/examples/channel_hopping.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/examples/device_control.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/examples/dump_metadata.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/examples/http_iq_quickstart.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/examples/native_sdk_basic.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/examples/native_sdk_transmit.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/examples/noaa_scanner.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/examples/python_arrow_example.py +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/examples/read_rtsa_file.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/examples/soapy_python_example.py +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/pyproject.toml +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/python-aaronia/test_basic.py +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/scripts/ci-local.sh +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/soapy-aaronia/AaroniaSoapyDevice.cpp +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/soapy-aaronia/AaroniaSoapyDevice.hpp +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/soapy-aaronia/CMakeLists.txt +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/decompression.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/detection.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/error.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/file_source.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/http_endpoints.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/http_sink.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/http_source.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/sdk_sink.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/sdk_source.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/seify_impl.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/unified_sink.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/src/utils.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/tests/c_api_test.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/tests/http_mock_test.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/tests/http_sink_test.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/tests/integration_test.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/tests/native_sdk_load.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/tests/properties.proptest-regressions +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/tests/properties.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/tests/rtsa_negative_test.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/tests/sdr_source_impl_test.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/tests/spec_coverage.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/tests/test_cw_mag.rs +0 -0
- {python_aaronia-0.5.1 → python_aaronia-0.6.0}/tests/test_cw_meta.rs +0 -0
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
## [v0.6.0] - 2026-08-11
|
|
8
|
+
|
|
9
|
+
Reliability and documentation release. The HTTP backend now handles a
|
|
10
|
+
server that is still starting up and a stream that drops mid-session.
|
|
11
|
+
The documentation now says which features have been tested on real
|
|
12
|
+
hardware and which have not.
|
|
13
|
+
|
|
14
|
+
### Breaking
|
|
15
|
+
- `AaroniaConfig` has two new public fields, `read_timeout` and
|
|
16
|
+
`auto_reconnect`. Struct-literal construction needs updating. The
|
|
17
|
+
builder methods are unchanged.
|
|
18
|
+
- Dropped HTTP streams now reconnect by default. Previously a dropped
|
|
19
|
+
stream ended the session and every later read failed. Reads can now
|
|
20
|
+
block for up to about 8 seconds while reconnecting. Call
|
|
21
|
+
`auto_reconnect(false)` for the old behaviour.
|
|
22
|
+
- SoapySDR plugin downloads are now per-platform archives named
|
|
23
|
+
`SoapyAaronia-<version>-<os>-<arch>.tar.gz`, or `.zip` on Windows.
|
|
24
|
+
The bare `.so`, `.dll` and `.dmg` files are gone. Scripts that
|
|
25
|
+
download them by name need to unpack the archive instead.
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
- **Connect retry.** Reaching the server now retries transient failures
|
|
29
|
+
up to 4 times over at most 10 seconds. A `*.local` hostname often
|
|
30
|
+
refuses the first connection while mDNS resolves, which used to look
|
|
31
|
+
like the server was down. Client errors still fail immediately.
|
|
32
|
+
- **Automatic stream reconnection** (`auto_reconnect`, on by default).
|
|
33
|
+
The reader reopens the stream up to 5 times, re-applies the current
|
|
34
|
+
tuning, and marks the first packet after the gap as an overrun.
|
|
35
|
+
Re-applying tuning matters because a restarted server returns to its
|
|
36
|
+
mission's frequency, which would otherwise stream the wrong band
|
|
37
|
+
unnoticed. The retry budget resets only after a connection survives
|
|
38
|
+
30 seconds, so a server that accepts and immediately hangs up cannot
|
|
39
|
+
reconnect forever. Also available through
|
|
40
|
+
`aaronia_source_builder_auto_reconnect` and the SoapySDR argument
|
|
41
|
+
`reconnect=0|1`.
|
|
42
|
+
- **Configurable read timeout** (`read_timeout`, default 30 seconds),
|
|
43
|
+
replacing a hard-coded value. Available on both builders, as a Python
|
|
44
|
+
property, through `aaronia_source_builder_read_timeout_us`, and as a
|
|
45
|
+
`read_timeout=<seconds>` SoapySDR argument. `read_samples_deadline`,
|
|
46
|
+
which the SoapySDR and seify paths use, still takes its deadline from
|
|
47
|
+
the caller.
|
|
48
|
+
- `DropDetector::resync()` clears the packet-timing history but keeps
|
|
49
|
+
the counters. `reset()` clears both, which would make the running
|
|
50
|
+
total jump backwards after a reconnect.
|
|
51
|
+
- **Python type stubs.** Editors and type checkers now understand the
|
|
52
|
+
module.
|
|
53
|
+
|
|
54
|
+
### Fixed
|
|
55
|
+
- **Channel hopping could stall for up to 30 seconds.** The hop loop
|
|
56
|
+
waited for a full block of samples, far longer than a 20-40 ms dwell,
|
|
57
|
+
so a slow server starved the remaining hops. It now stops waiting at
|
|
58
|
+
the dwell deadline.
|
|
59
|
+
|
|
60
|
+
### Documentation
|
|
61
|
+
- **The README says what has been tested on hardware.** Each feature is
|
|
62
|
+
marked live-verified, verified manually, mock-tested, or
|
|
63
|
+
hardware-unverified. Transmit, dual-channel and the native-SDK paths
|
|
64
|
+
have never run against a device.
|
|
65
|
+
- **New quickstart** (`docs/QUICKSTART.md`) covering RTSA-Suite mission
|
|
66
|
+
setup, which everything depends on and nothing documented: adding the
|
|
67
|
+
HTTP Server block, connecting the device output to it, checking it
|
|
68
|
+
with `curl`, and the mistakes that cost the most time.
|
|
69
|
+
- **New application guide** (`docs/APPS.md`) for SDR++, GQRX, GNU Radio
|
|
70
|
+
and SoapySDR from Python. It explains that the single `REF` gain
|
|
71
|
+
element is a reference level in dBm, so raising it reduces
|
|
72
|
+
sensitivity.
|
|
73
|
+
- **New usage guide** (`docs/USAGE.md`) holding the worked examples that
|
|
74
|
+
were 60% of the README. They are compiled as doctests now, so they
|
|
75
|
+
cannot fall out of date. The README is down from 516 lines to 291.
|
|
76
|
+
- **Install instructions for the prebuilt SoapySDR plugin.** Releases
|
|
77
|
+
always attached built modules, but the README only explained building
|
|
78
|
+
from source.
|
|
79
|
+
|
|
80
|
+
### Release
|
|
81
|
+
- Release archives now carry the module, install instructions and the
|
|
82
|
+
licence, and their names state the version, OS and architecture.
|
|
83
|
+
- The Linux module ships stripped of debug symbols, down from about
|
|
84
|
+
19 MB. The release job checks the stripped module still loads before
|
|
85
|
+
publishing it.
|
|
86
|
+
- GitHub releases now use this file's entry for the tag as their
|
|
87
|
+
description, with the generated commit list below it.
|
|
88
|
+
|
|
89
|
+
## [v0.5.1] - 2026-08-11
|
|
90
|
+
|
|
91
|
+
### Fixed
|
|
92
|
+
- **Retuning silently did nothing on real hardware.** The `/control`
|
|
93
|
+
endpoint only applies a frequency change when `frequencyCenter` and
|
|
94
|
+
`frequencySpan` are both present. Sending one of them returns
|
|
95
|
+
`{"success":true}` and is ignored, so `set_center_frequency` reported
|
|
96
|
+
success while the device kept streaming at its old frequency. This
|
|
97
|
+
affected hop mode and the SoapySDR, seify and Python retune paths. All
|
|
98
|
+
of them now send the full set of values, and `configure_capture` warns
|
|
99
|
+
when given a partial one. Reference-level changes were unaffected;
|
|
100
|
+
they apply on their own.
|
|
101
|
+
- Corrected the documents that blamed this on the Aaronia "Remote
|
|
102
|
+
Config" licence. Retuning uses the licence-free `/control` endpoint;
|
|
103
|
+
the licence only gates `/remoteconfig` writes.
|
|
104
|
+
|
|
105
|
+
### CI
|
|
106
|
+
- Clippy now runs across the whole workspace. The `python-aaronia`
|
|
107
|
+
member was never linted and had accumulated 12 errors.
|
|
108
|
+
|
|
109
|
+
## [v0.5.0] - 2026-08-11
|
|
110
|
+
|
|
111
|
+
Adds Python bindings, a SoapySDR plugin, transmit support and GPS time,
|
|
112
|
+
alongside verification of the RTSA file format against the vendor
|
|
113
|
+
specification. Receive paths were tested against real hardware.
|
|
114
|
+
Transmit and dual-channel paths were not, and are marked as such in the
|
|
115
|
+
documentation.
|
|
116
|
+
|
|
117
|
+
### Breaking
|
|
118
|
+
- `RtsaMetadata` lost `device_name`, `stream_sample_rate` and
|
|
119
|
+
`stream_center_frequency`, and `RtsaSource::stream_info()` returns a
|
|
120
|
+
3-tuple. Those fields came from a file layout no real capture uses and
|
|
121
|
+
were always `None`.
|
|
122
|
+
- `SdkConfig` and `AaroniaConfig` gained a public `receiver_channel`
|
|
123
|
+
field, which breaks struct-literal construction.
|
|
124
|
+
`NativeSdkSource::configure_iq_receiver` takes the channel as a fourth
|
|
125
|
+
argument so retunes keep it.
|
|
126
|
+
|
|
127
|
+
### Added
|
|
128
|
+
- **Python bindings** (`python-aaronia`), published to PyPI: abi3
|
|
129
|
+
wheels for CPython 3.9 and later, typed exceptions, live retuning, and
|
|
130
|
+
single-copy reads into NumPy or PyArrow. Blocking calls release the
|
|
131
|
+
GIL, so other Python threads keep running.
|
|
132
|
+
- **SoapySDR plugin** (`soapy-aaronia`): receive streaming in CF32 and
|
|
133
|
+
CS16, honoured timeouts with partial reads, safe retuning while
|
|
134
|
+
streaming, and device arguments for URL, file, serial, frequency,
|
|
135
|
+
rate, reference level, wire format and RX channel.
|
|
136
|
+
- **Transmit support** through the native SDK, via `UnifiedSink` and the
|
|
137
|
+
`aaronia_sink_*` C API. Hardware-unverified, and unavailable outside
|
|
138
|
+
Windows and Linux.
|
|
139
|
+
- **GPS time** through `get_gps_time`, native SDK only.
|
|
140
|
+
- **Receiver channel selection** (`Rx1`, `Rx2`, `Rx1And2`) and true
|
|
141
|
+
dual-channel capture through `read_samples_dual`. A read-mode latch
|
|
142
|
+
stops single- and dual-channel reads being mixed by accident.
|
|
143
|
+
- `StrmChunk::capture_start_offset`, an undocumented field in RTSA files
|
|
144
|
+
identified as the capture start. Reported time spans now match the
|
|
145
|
+
recorded data.
|
|
146
|
+
- `scripts/ci-local.sh`, which runs CI's checks locally, including a
|
|
147
|
+
Linux VM step covering the OS-gated native-SDK code.
|
|
148
|
+
- Property tests: opening arbitrary bytes as an RTSA file must never
|
|
149
|
+
panic.
|
|
150
|
+
|
|
151
|
+
### Fixed
|
|
152
|
+
- RTSA chunk parsing corrected against the vendor specification and real
|
|
153
|
+
captures: chunk padding and tail offsets, fixed field sizes, the STRM
|
|
154
|
+
layout, enum numbering, and end-time treated as a duration.
|
|
155
|
+
- Compressed spectra chunks now report an error instead of returning
|
|
156
|
+
compressed bytes as if they were samples.
|
|
157
|
+
- Native SDK: a corrupt packet no longer blocks every later read, and
|
|
158
|
+
buffers are flushed when streaming stops.
|
|
159
|
+
|
|
160
|
+
## [v0.3.5] - 2026-08-06
|
|
161
|
+
|
|
162
|
+
Documentation release. Every Markdown file was checked against the code
|
|
163
|
+
and corrected. No API changes.
|
|
164
|
+
|
|
165
|
+
### Changed
|
|
166
|
+
- DESIGN.md, the README, CONTRIBUTING and the three specifications in
|
|
167
|
+
`docs/` corrected against the implementation, with explicit notes
|
|
168
|
+
where only hardware can settle a question.
|
|
169
|
+
- Clarified that HTTP retuning uses the licence-free `/control`
|
|
170
|
+
endpoint.
|
|
171
|
+
- Examples cleaned up. `http_iq_quickstart` takes the server URL as an
|
|
172
|
+
argument instead of hardcoding a private hostname.
|
|
173
|
+
- Five tests that asserted nothing now assert something.
|
|
174
|
+
|
|
175
|
+
### Fixed
|
|
176
|
+
- Stale comments about symbol counts, renamed tests, and inverted
|
|
177
|
+
`?scale=` semantics.
|
|
178
|
+
|
|
179
|
+
## [v0.3.4] - 2026-07-31
|
|
180
|
+
|
|
181
|
+
### Fixed
|
|
182
|
+
- **Native SDK: the end of every oversized packet was discarded.** The
|
|
183
|
+
reader copied out only what the caller asked for, then released the
|
|
184
|
+
whole packet back to the SDK. The SDK chooses its own packet size, so
|
|
185
|
+
everything past the request was lost. This left holes in the IQ
|
|
186
|
+
stream, which breaks the phase continuity that downstream correlation
|
|
187
|
+
and frequency tracking depend on. Extra samples are now kept and
|
|
188
|
+
returned by later calls.
|
|
189
|
+
- **Native SDK: a zero-sized read destroyed a packet.** It now returns
|
|
190
|
+
immediately.
|
|
191
|
+
- **Transmit bursts were scheduled at the Unix epoch.** The FutureSDR
|
|
192
|
+
sink set every burst's start time to zero, against the device's own
|
|
193
|
+
master clock. Timestamps now come from the master clock, falling back
|
|
194
|
+
to immediate dispatch when it cannot be read. Hardware-unverified.
|
|
195
|
+
- **`http_source` reported a buffer capacity it did not enforce.** With
|
|
196
|
+
a buffer size of zero, a consumer computing a fill ratio divided by
|
|
197
|
+
zero.
|
|
198
|
+
- **Diagnostic previews could panic on non-ASCII text.** They cut
|
|
199
|
+
strings at byte offsets, so one accented character in a mission name
|
|
200
|
+
was enough.
|
|
201
|
+
|
|
202
|
+
### Changed
|
|
203
|
+
- `cargo clippy --all-targets` compiles on a default checkout again.
|
|
204
|
+
- `SdkConfig::timeout` and `SdkSinkConfig::timeout` documented as
|
|
205
|
+
inert. Nothing reads them. They are kept because they are public.
|
|
206
|
+
|
|
207
|
+
## [v0.3.3] - 2026-07-31
|
|
208
|
+
|
|
209
|
+
### Fixed
|
|
210
|
+
- **A chunk scan could loop forever** on a file whose signature was
|
|
211
|
+
missing, reachable by opening an untrusted file.
|
|
212
|
+
- **A failed configuration probe left the device 1 dB off.** The restore
|
|
213
|
+
now runs on every exit path.
|
|
214
|
+
|
|
215
|
+
## [v0.3.2] - 2026-07-13
|
|
216
|
+
|
|
217
|
+
### Added
|
|
218
|
+
- `DwellAdvice::channel_override` is honoured, and hop mode no longer
|
|
219
|
+
requires the Remote Config licence.
|
|
220
|
+
|
|
221
|
+
## [v0.3.1] - 2026-07-11
|
|
222
|
+
|
|
223
|
+
### Fixed
|
|
224
|
+
- **Decompression rejects an out-of-range compression factor** instead
|
|
225
|
+
of overflowing on it. The value can come from a network packet, so a
|
|
226
|
+
corrupt header could previously cause a panic.
|
|
227
|
+
- **Decompression truncates over-long coefficient streams**, having
|
|
228
|
+
previously only padded short ones.
|
|
229
|
+
- **The capture thread is panic-guarded**, so a panic is logged instead
|
|
230
|
+
of killing the thread silently.
|
|
231
|
+
- **HTTP overrun detection reaches `IqPacket::overrun`.** Hop and
|
|
232
|
+
single-channel modes report real overrun status instead of always
|
|
233
|
+
`false`.
|
|
234
|
+
- **The C API sample copy is bounds-checked** against the source length
|
|
235
|
+
as well as the caller's capacity.
|
|
236
|
+
- Raised the `orecchiette-sdr-source-rs` floor to 0.1.2.
|
|
237
|
+
|
|
238
|
+
## [v0.3.0] - 2026-07-11
|
|
239
|
+
|
|
240
|
+
### Removed
|
|
241
|
+
- **Breaking: the `file_performance` module is gone**, along with the
|
|
242
|
+
`memmap2` dependency. This memory-mapped reader was never used by the
|
|
243
|
+
crate's actual file path and had no callers. `RtsaSource` covers the
|
|
244
|
+
same needs through buffered I/O.
|
|
245
|
+
|
|
246
|
+
### Fixed
|
|
247
|
+
- A misplaced doc comment marked `with_shared_stats` a no-op when it is
|
|
248
|
+
not.
|
|
249
|
+
- `HttpSink` counts a batch as dropped when its sender task has died,
|
|
250
|
+
not only on a failed push. It also stops that task on drop.
|
|
251
|
+
|
|
252
|
+
### Changed
|
|
253
|
+
- The last four native-SDK methods that hand-rolled error checks now use
|
|
254
|
+
the shared path, so failures carry structured errors.
|
|
255
|
+
- Shared device-type parsing extracted out of `SdkConfig` and
|
|
256
|
+
`SdkSinkConfig`.
|
|
257
|
+
|
|
258
|
+
## [v0.2.6] - 2026-07-10
|
|
259
|
+
|
|
260
|
+
### Added
|
|
261
|
+
- **Transmit through the native SDK** (`SdkSink`, `SdkSinkConfig`) with
|
|
262
|
+
FutureSDR integration, matching the receive path.
|
|
263
|
+
- `examples/native_sdk_transmit.rs`, sending a LoRa-style chirp.
|
|
264
|
+
|
|
265
|
+
### Changed
|
|
266
|
+
- Replaced the opaque `Error::Sdk(String)` with a structured
|
|
267
|
+
`Error::SdkApi`, so callers can react to specific failures.
|
|
268
|
+
- SDK warnings are logged as warnings instead of being treated as fatal,
|
|
269
|
+
matching Aaronia's own drivers.
|
|
270
|
+
|
|
271
|
+
## [v0.2.4] - 2026-07-10
|
|
272
|
+
|
|
273
|
+
### Performance
|
|
274
|
+
- **HTTP parser:** binary formats read packet headers directly instead
|
|
275
|
+
of building and discarding a JSON document for every packet. Small
|
|
276
|
+
packets parse about 41% faster.
|
|
277
|
+
- **Float32 samples** are bulk-copied on little-endian hosts instead of
|
|
278
|
+
decoded one value at a time.
|
|
279
|
+
- **File replay** reads a block at a time instead of one sample per
|
|
280
|
+
call.
|
|
281
|
+
- Native SDK per-read logging moved to `trace`, off the hot path.
|
|
282
|
+
|
|
283
|
+
### Fixed
|
|
284
|
+
- **Native SDK unsound read path.** A zero-sample request underflowed a
|
|
285
|
+
length calculation and produced an enormous slice. Packet counts and
|
|
286
|
+
strides are now bounds-checked.
|
|
287
|
+
- **The HTTP reader task leaked.** It is now stopped when streaming
|
|
288
|
+
stops and on drop, instead of holding the connection open and leaving
|
|
289
|
+
the device streaming.
|
|
290
|
+
- **Decompression rejects zero dimensions** instead of looping forever.
|
|
291
|
+
- **`MmapRtsaReader::read_chunk` bounds check** no longer wraps on a
|
|
292
|
+
pathological offset.
|
|
293
|
+
- **Default reference level corrected** from +20 dBm to -20 dBm. The old
|
|
294
|
+
default desensitised the receiver.
|
|
295
|
+
- `HttpSource` reschedules itself after reconnecting.
|
|
296
|
+
|
|
297
|
+
### Changed
|
|
298
|
+
- `HttpSink` honours `timeout_ms`, which was previously ignored.
|
|
299
|
+
|
|
300
|
+
## [v0.2.3] - 2026-07-05
|
|
301
|
+
|
|
302
|
+
### Fixed
|
|
303
|
+
- **The HTTP source did not tune the device.** It opened the stream
|
|
304
|
+
without sending a control request, so it streamed whatever the
|
|
305
|
+
RTSA-Suite was already set to and ignored the requested frequency and
|
|
306
|
+
span.
|
|
307
|
+
|
|
308
|
+
### Changed
|
|
309
|
+
- `http_iq_quickstart` takes frequency and sample rate arguments and
|
|
310
|
+
logs signal power.
|
|
311
|
+
|
|
312
|
+
## [v0.2.2] - 2026-07-05
|
|
313
|
+
|
|
314
|
+
### Changed
|
|
315
|
+
- Dropped the explicit minimum Rust version and track stable instead, so
|
|
316
|
+
a dependency raising its own floor cannot break CI.
|
|
317
|
+
|
|
318
|
+
## [v0.2.1] - 2026-07-05
|
|
319
|
+
|
|
320
|
+
### Added
|
|
321
|
+
- Native SDK receiver channel selection (`Rx1`, `Rx2`, `Rx1And2`).
|
|
322
|
+
- HTTP wire format and stream scale settings on `AaroniaConfig` and
|
|
323
|
+
`AaroniaSourceBuilder`.
|
|
324
|
+
|
|
325
|
+
### Fixed
|
|
326
|
+
- Raised the minimum Rust version to 1.86 to fix CI builds. (v0.2.2
|
|
327
|
+
dropped the fixed minimum entirely.)
|
|
328
|
+
- Default HTTP format changed from JSON to Float32, fixing crashes at
|
|
329
|
+
high bandwidth.
|
|
330
|
+
- Fixed FutureSDR deadlocks in `HttpSink` by moving blocking HTTP calls
|
|
331
|
+
onto a background task.
|
|
332
|
+
|
|
333
|
+
## [v0.1.1] - 2026-07-03
|
|
334
|
+
|
|
335
|
+
### Changed
|
|
336
|
+
- Disable `futuresdr` on docs.rs.
|
|
337
|
+
- Fix the licence badge.
|
|
338
|
+
|
|
339
|
+
## [v0.1.0] - 2026-07-03
|
|
340
|
+
|
|
341
|
+
### Added
|
|
342
|
+
- Initial release.
|