python-aaronia 0.5.0__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.
Files changed (81) hide show
  1. python_aaronia-0.6.0/CHANGELOG.md +342 -0
  2. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/CONTRIBUTING.md +1 -1
  3. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/Cargo.lock +321 -362
  4. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/Cargo.toml +2 -2
  5. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/DESIGN.md +1 -1
  6. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/PKG-INFO +40 -23
  7. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/PLUGINS.md +1 -1
  8. python_aaronia-0.6.0/README.md +291 -0
  9. python_aaronia-0.6.0/docs/APPS.md +107 -0
  10. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/docs/HTTPSPEC.md +11 -1
  11. python_aaronia-0.6.0/docs/QUICKSTART.md +177 -0
  12. python_aaronia-0.6.0/docs/USAGE.md +311 -0
  13. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/include/aaronia.h +7 -0
  14. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/python-aaronia/Cargo.toml +5 -5
  15. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/python-aaronia/README.md +39 -22
  16. python_aaronia-0.6.0/python-aaronia/aaronia.pyi +143 -0
  17. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/python-aaronia/src/lib.rs +68 -32
  18. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/scripts/ci-local.sh +14 -8
  19. python_aaronia-0.6.0/soapy-aaronia/README.md +131 -0
  20. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/soapy-aaronia/Registration.cpp +19 -0
  21. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/c_api.rs +41 -0
  22. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/http_endpoints.rs +26 -3
  23. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/http_streaming.rs +13 -0
  24. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/lib.rs +15 -0
  25. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/native_sdk.rs +6 -5
  26. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/sdr_source_impl.rs +15 -2
  27. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/unified_source.rs +427 -64
  28. python_aaronia-0.6.0/tests/http_resilience_test.rs +424 -0
  29. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/tests/live_smoke.rs +98 -1
  30. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/tests/sdr_source_impl_test.rs +11 -5
  31. python_aaronia-0.5.0/CHANGELOG.md +0 -363
  32. python_aaronia-0.5.0/README.md +0 -503
  33. python_aaronia-0.5.0/soapy-aaronia/README.md +0 -85
  34. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/.cargo/config.toml +0 -0
  35. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/.gitattributes +0 -0
  36. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/.gitignore +0 -0
  37. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/LICENSE +0 -0
  38. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/benches/decompress_block.rs +0 -0
  39. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/benches/deinterleave_dual_iq.rs +0 -0
  40. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/benches/parse_int16_packet.rs +0 -0
  41. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/benches/rtsa_open_and_read.rs +0 -0
  42. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/deny.toml +0 -0
  43. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/docs/FILESPEC.md +0 -0
  44. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/docs/SDKSPEC.md +0 -0
  45. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/examples/channel_hopping.rs +0 -0
  46. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/examples/device_control.rs +0 -0
  47. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/examples/dump_metadata.rs +0 -0
  48. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/examples/http_iq_quickstart.rs +0 -0
  49. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/examples/native_sdk_basic.rs +0 -0
  50. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/examples/native_sdk_transmit.rs +0 -0
  51. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/examples/noaa_scanner.rs +0 -0
  52. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/examples/python_arrow_example.py +0 -0
  53. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/examples/read_rtsa_file.rs +0 -0
  54. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/examples/soapy_python_example.py +0 -0
  55. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/pyproject.toml +0 -0
  56. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/python-aaronia/test_basic.py +0 -0
  57. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/soapy-aaronia/AaroniaSoapyDevice.cpp +0 -0
  58. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/soapy-aaronia/AaroniaSoapyDevice.hpp +0 -0
  59. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/soapy-aaronia/CMakeLists.txt +0 -0
  60. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/decompression.rs +0 -0
  61. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/detection.rs +0 -0
  62. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/error.rs +0 -0
  63. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/file_source.rs +0 -0
  64. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/http_sink.rs +0 -0
  65. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/http_source.rs +0 -0
  66. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/sdk_sink.rs +0 -0
  67. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/sdk_source.rs +0 -0
  68. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/seify_impl.rs +0 -0
  69. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/unified_sink.rs +0 -0
  70. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/src/utils.rs +0 -0
  71. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/tests/c_api_test.rs +0 -0
  72. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/tests/http_mock_test.rs +0 -0
  73. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/tests/http_sink_test.rs +0 -0
  74. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/tests/integration_test.rs +0 -0
  75. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/tests/native_sdk_load.rs +0 -0
  76. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/tests/properties.proptest-regressions +0 -0
  77. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/tests/properties.rs +0 -0
  78. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/tests/rtsa_negative_test.rs +0 -0
  79. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/tests/spec_coverage.rs +0 -0
  80. {python_aaronia-0.5.0 → python_aaronia-0.6.0}/tests/test_cw_mag.rs +0 -0
  81. {python_aaronia-0.5.0 → 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.
@@ -13,7 +13,7 @@ cd sdr-aaronia-rs
13
13
  # Run the standard validation suite
14
14
  cargo test # unit + integration + properties (default features)
15
15
  cargo test --test spec_coverage -- --nocapture # spec inventory report
16
- cargo clippy --all-features --all-targets -- -D warnings
16
+ cargo clippy --workspace --all-features --all-targets -- -D warnings
17
17
  cargo fmt --all --check
18
18
  ```
19
19