Commit Graph

6672 Commits (main)

Author SHA1 Message Date
dj2ls 2b3f037db7 bump version 2026-07-27 09:40:43 +02:00
DJ2LS ec8478e1d0
Merge pull request #1114 from DJ2LS/develop
v0.18.2
2026-07-27 09:39:41 +02:00
LA3QMA 31becb6ba5 need to create a folder before a file can be written to it 2026-07-25 10:24:10 +02:00
DJ2LS c39862268a
Merge pull request #1115 from spinkham/perf/rx-audio-latency-rt-safe
fix(audio): re-block captured RX audio into whole DSP blocks (fixes the AssertionError from #1112)
2026-07-25 06:29:35 +02:00
Steve Pinkham f522b46fa8 fix(audio): re-block captured RX audio into whole DSP blocks
With blocksize=0 PortAudio picks the capture block size per device. On
the devices measured for the previous commit it happened to deliver
multiple-of-6 block sizes, but other hardware returns 512/1024-class
blocks. codec2's resample48_to_8 asserts len(input) % 6 == 0
(FDMDV_OS_48), so on such a device every captured block raised
AssertionError, the DSP chain never ran, and RX was completely deaf.

The fix decouples the capture block size from the DSP block size
instead of pinning the stream back to blocksize=4800, which is the
configuration that negotiates a two-period ring on snd-aloop and drops
audio continuously (the deaf-on-loopback case the previous commit
fixed). Captured audio is appended to a carry buffer and the DSP chain
runs once per whole RX_DSP_BLOCK_48K (4800 samples, 100 ms) available;
the remainder carries into the next captured block, so the sample
stream handed to the resampler stays gapless (its filter memory spans
blocks) and always has a valid length, whatever the device delivers.

Running the DSP only on whole 4800-sample blocks also fixes three
silent degradations that short blocks caused:

- calculate_fft pads its input to 800 samples at 8 kHz, so short
  blocks fed the waterfall, channel-busy detection and audio_dbfs
  mostly zeros
- enqueue_streaming_audio_chunks zero-pads every block up to 2400
  samples and emits one chunk per block regardless of size, so short
  blocks streamed mostly silence and flooded the RX audio queue
- normalize_audio (rx_auto_audio_level, on by default) normalizes per
  block, so shorter blocks made the auto level faster and jumpier

Tests: the old test captured 4800-frame blocks, a multiple of 6, which
is exactly why this was never caught. The capture size is now 512 and
TestRxAudioReblocking covers odd sizes never reaching the resampler,
exact block accounting including the carried remainder, sample-stream
preservation (nothing dropped, duplicated or reordered), and every
re-blocked block being accepted end to end by the real codec2
resampler. Against the pre-fix code 5 of the 6 tests fail; with the
fix all pass.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 21:34:19 -04:00
DJ2LS 67cbb98dea
Merge pull request #1112 from spinkham/perf/rx-audio-latency-rt-safe
Lower RX audio latency and make the input callback real-time safe
2026-07-24 23:35:58 +02:00
DJ2LS f13f98ea59
Merge pull request #1113 from DJ2LS/ls-pip-adjustments
pip adjustments and possible fix for nsis
2026-07-24 23:14:16 +02:00
dj2ls 21a85289e7 attempt fixing nsis 2026-07-24 23:07:59 +02:00
dj2ls 7ea4f0796c initial changes to pip releases and dependency cleanup 2026-07-24 22:59:40 +02:00
Steve Pinkham 3a56ebdb35 perf(audio): lower RX latency with blocksize=0 and set the input ring depth explicitly
blocksize=4800 makes PortAudio hand the RX callback fixed 100 ms blocks,
so received audio sits in the input buffer for up to 100 ms before the
demodulator can see it, and that delay is paid again on every ARQ
turnaround. With blocksize=0 PortAudio delivers whatever is available
(small blocks in the 10 to 50 ms range in our measurements), cutting the
RX buffering delay to a fraction of the old fixed block.

On its own, blocksize=0 also shrinks the negotiated input ring. We
measured 40 ms total where blocksize=4800 had negotiated 200 ms on a
CM108 USB codec, which makes short processing stalls more likely to
drop audio. The explicit latency=0.2 closes that gap: it requests a
200 ms ring built from small periods, so the stream keeps the old depth
while gaining the low latency.

The explicit ring depth also makes the negotiation deterministic on
virtual devices. On snd-aloop (the ALSA loopback used for hardware-free
testing) the default "high" latency maps to only two periods. At 100 ms
periods that double buffer misses its service deadline on a fixed cycle
and the capture stream drops audio continuously from the moment it
opens, leaving the modem deaf on that device class. With an explicit
depth the same stream runs clean; we measured buffer 12000 frames with
2400 frame periods and zero overflows, identically on two machines.

TX stays at blocksize=2400; only the RX side changes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 07:20:19 -04:00
Steve Pinkham 16052308b5 test(audio): cover the real-time-safe RX audio callback / worker split
Exercise the callback/worker split from the previous commit:

- the worker drains rx_audio_in_queue and runs the relocated RX DSP
  (resample 48->8 kHz, FFT, demod-buffer push) on an enqueued block, and
- the callback drops (and counts via rx_audio_dropped_blocks) instead of
  blocking when the queue is full -- the real-time-safety property the
  change exists to provide.

Both feed synthetic int16 blocks straight to the callback, so they need no
audio hardware and run under the existing `unittest discover tests` suite.
The live ARQ transfer test uses an in-memory queue and never touches the
sounddevice path, so this is new coverage rather than a changed test.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 07:20:19 -04:00
Steve Pinkham d8da991d61 perf(audio): run RX DSP off the real-time input callback
The sounddevice RX callback did all of the RX DSP inline: resample 48->8 kHz,
an FFT for the spectrum / channel-busy detection, optional level normalisation,
and a push into every decode mode's demod buffer. Running that on the real-time
audio thread means any delay in it -- a long GIL hold by another thread, a slow
resample on a constrained CPU -- can push the callback past its deadline and
overflow the capture stream.

Make the callback real-time-safe: it now only copies the captured block onto a
queue and returns. A dedicated worker thread (rx_audio_processing_worker) drains
the queue and runs the same DSP. The audio thread's work is now bounded and
constant.

This is also a prerequisite for lowering the input blocksize (next commit): a
smaller blocksize means a shallower capture ring, which only stays safe once the
DSP is off the real-time thread.

The DSP itself is unchanged -- the processing is moved verbatim, not altered.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 07:20:19 -04:00
dj2ls 6835390793 bump Version 2026-07-23 10:38:50 +02:00
dj2ls 3ea91e6afb update dependencies before building 2026-07-23 10:38:03 +02:00
dj2ls 14bdfb9bb4 bump version 2026-07-23 09:23:25 +02:00
DJ2LS 09d2256ca5
Merge pull request #1111 from DJ2LS/develop
bug fixes and dependency updates
2026-07-23 09:21:51 +02:00
DJ2LS 5ccbcfd7b5
Merge branch 'main' into develop 2026-07-23 09:19:18 +02:00
dj2ls 6386d68e4c Merge remote-tracking branch 'origin/develop' into develop 2026-07-23 09:15:49 +02:00
dj2ls 838943c256 dependency update 2026-07-23 09:15:42 +02:00
DJ2LS 580cbe42c3
Merge pull request #1101 from DJ2LS/dependabot/github_actions/develop/actions/checkout-7
Bump actions/checkout from 6 to 7
2026-07-23 09:02:20 +02:00
dj2ls 27383c7de3 linting 2026-07-23 08:59:21 +02:00
DJ2LS a2ff1b7074
Merge branch 'develop' into dependabot/github_actions/develop/actions/checkout-7 2026-07-23 08:53:50 +02:00
DJ2LS 097db80781
Merge pull request #1106 from DJ2LS/dependabot/npm_and_yarn/freedata_gui/develop/globals-17.7.0
Bump globals from 17.6.0 to 17.7.0 in /freedata_gui
2026-07-23 08:53:20 +02:00
DJ2LS b662787652
Merge pull request #1105 from DJ2LS/dependabot/npm_and_yarn/freedata_gui/develop/vue-3.5.39
Bump vue from 3.5.22 to 3.5.39 in /freedata_gui
2026-07-23 08:53:13 +02:00
DJ2LS 893ae96c79
Merge pull request #1104 from DJ2LS/dependabot/npm_and_yarn/freedata_gui/develop/dompurify-3.4.11
Bump dompurify from 3.4.0 to 3.4.11 in /freedata_gui
2026-07-23 08:53:07 +02:00
DJ2LS d34d19c2b9
Merge pull request #1103 from DJ2LS/dependabot/npm_and_yarn/freedata_gui/develop/bootstrap-vue-next-0.45.7
Bump bootstrap-vue-next from 0.45.4 to 0.45.7 in /freedata_gui
2026-07-23 08:52:44 +02:00
DJ2LS 31fee1aaf3
Merge pull request #1102 from DJ2LS/dependabot/pip/develop/nuitka-lte-4.1.3
Update nuitka requirement from <=4.1.2 to <=4.1.3
2026-07-23 08:52:25 +02:00
DJ2LS c24760e896
Merge pull request #1109 from spinkham/fix/send-arq-raw
fix send_arq_raw: busy check always fired, and the command class didn't exist
2026-07-23 08:51:48 +02:00
DJ2LS 93e0159fb9
Merge pull request #1110 from spinkham/fix/irs-success-event
restore the IRS success event that was lost in an April 2024 merge
2026-07-23 08:51:37 +02:00
dj2ls 08ecd45d5c adjusted readme 2026-07-23 08:51:17 +02:00
dj2ls 7e33527123 old broadcasts expire 2026-07-23 08:42:42 +02:00
Steve Pinkham f19c775a3a fix: emit arq-session-finished on IRS success again (lost April 2024)
The IRS success branch set ENDED and returned without the
session-finished event, while abort, failure and the ISS success path
all send one. A successful inbound raw transfer was invisible to every
websocket/REST consumer, and the received payload was dropped with it
(handle_raw returns the data into a call chain that discards it).

c2388a65 emitted exactly this event, data= included; it vanished by
ef18f4cc without that commit's IRS diff touching the lines, so this
looks like a merge casualty rather than a decision. Restore the event
and add a regression test: one finished event with success=True,
payload round-trips through the base64 data field.

The original also pushed session statistics gated on enable_stats, but
that key is no longer in the config schema (config.py STATION), so the
strict lookup raises KeyError; the two existing stats sites in the
failure and abort paths have the same latent problem. Restoring just
the event here; the stats question is worth its own look.

No setARQ(False) here: dispatch() already clears busy on this path.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 18:30:05 -04:00
Steve Pinkham f49e5076b3 fix: send_arq_raw referenced a command class that doesn't exist
command_arq_raw.SendARQRawCommand isn't defined anywhere; the class is
ARQRawCommand. The always-503 busy bug hid this AttributeError, so the
endpoint can never have worked end to end.
2026-07-12 12:38:16 -04:00
Steve Pinkham 8def0df2ae fix: send_arq_raw busy check compared a threading.Event, not the ARQ state
POST /modem/send_arq_raw returned 503 Modem Busy on every request:
is_modem_busy is a threading.Event and the object is always truthy.
Use getARQ() like the beacon, message send and CQ handler do.

Note for later readers: is_set() would be inverted, since setARQ(True)
clears the event. getARQ() == True means busy.
2026-07-12 12:38:16 -04:00
dependabot[bot] 589b4f52d5
Bump globals from 17.6.0 to 17.7.0 in /freedata_gui
Bumps [globals](https://github.com/sindresorhus/globals) from 17.6.0 to 17.7.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v17.6.0...v17.7.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 17.7.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-01 16:13:56 +00:00
dependabot[bot] 2e04c96e66
Bump vue from 3.5.22 to 3.5.39 in /freedata_gui
Bumps [vue](https://github.com/vuejs/core) from 3.5.22 to 3.5.39.
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/compare/v3.5.22...v3.5.39)

---
updated-dependencies:
- dependency-name: vue
  dependency-version: 3.5.39
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-01 16:13:50 +00:00
dependabot[bot] cadc2030c7
Bump dompurify from 3.4.0 to 3.4.11 in /freedata_gui
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.4.0 to 3.4.11.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/3.4.0...3.4.11)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-version: 3.4.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-01 16:13:41 +00:00
dependabot[bot] 50e07ea9fb
Bump bootstrap-vue-next from 0.45.4 to 0.45.7 in /freedata_gui
Bumps [bootstrap-vue-next](https://github.com/bootstrap-vue-next/bootstrap-vue-next/tree/HEAD/packages/bootstrap-vue-next) from 0.45.4 to 0.45.7.
- [Release notes](https://github.com/bootstrap-vue-next/bootstrap-vue-next/releases)
- [Changelog](https://github.com/bootstrap-vue-next/bootstrap-vue-next/blob/main/packages/bootstrap-vue-next/CHANGELOG.md)
- [Commits](https://github.com/bootstrap-vue-next/bootstrap-vue-next/commits/nuxt-v0.45.7/packages/bootstrap-vue-next)

---
updated-dependencies:
- dependency-name: bootstrap-vue-next
  dependency-version: 0.45.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-01 16:13:34 +00:00
dependabot[bot] 2cb4738b7d
Update nuitka requirement from <=4.1.2 to <=4.1.3
Updates the requirements on [nuitka](https://github.com/Nuitka/Nuitka) to permit the latest version.
- [Changelog](https://github.com/Nuitka/Nuitka/blob/develop/Changelog.rst)
- [Commits](https://github.com/Nuitka/Nuitka/compare/0.3.11a...4.1.3)

---
updated-dependencies:
- dependency-name: nuitka
  dependency-version: 4.1.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-01 16:12:43 +00:00
dependabot[bot] 7396e35504
Bump actions/checkout from 6 to 7
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-01 16:12:31 +00:00
DJ2LS 4912cad8d8
Merge pull request #1100 from DJ2LS/develop
dependency update
2026-06-03 09:08:36 +02:00
DJ2LS 749b8de92e
Merge pull request #1096 from DJ2LS/dependabot/npm_and_yarn/freedata_gui/develop/globals-17.6.0
Bump globals from 17.3.0 to 17.6.0 in /freedata_gui
2026-06-03 09:07:43 +02:00
DJ2LS 78b8d166cb
Merge pull request #1095 from DJ2LS/dependabot/npm_and_yarn/freedata_gui/develop/i18next-26.3.0
Bump i18next from 25.5.3 to 26.3.0 in /freedata_gui
2026-06-03 09:07:31 +02:00
DJ2LS f687d62e73
Merge pull request #1094 from DJ2LS/dependabot/pip/develop/nuitka-lte-4.1.2
Update nuitka requirement from <=4.0.8 to <=4.1.2
2026-06-03 09:07:17 +02:00
DJ2LS 654b166a50
Merge pull request #1097 from DJ2LS/dependabot/npm_and_yarn/freedata_gui/develop/core-js-3.49.0
Bump core-js from 3.46.0 to 3.49.0 in /freedata_gui
2026-06-03 09:07:02 +02:00
DJ2LS 6cd6f497f6
Merge pull request #1098 from DJ2LS/dependabot/npm_and_yarn/freedata_gui/develop/babel/core-7.29.7
Bump @babel/core from 7.28.5 to 7.29.7 in /freedata_gui
2026-06-03 09:06:47 +02:00
DJ2LS 5ede45fedc
Merge pull request #1099 from DJ2LS/dependabot/npm_and_yarn/freedata_gui/develop/bootstrap-vue-next-0.45.4
Bump bootstrap-vue-next from 0.45.0 to 0.45.4 in /freedata_gui
2026-06-03 09:06:28 +02:00
dependabot[bot] f1f208cdc7
Bump bootstrap-vue-next from 0.45.0 to 0.45.4 in /freedata_gui
Bumps [bootstrap-vue-next](https://github.com/bootstrap-vue-next/bootstrap-vue-next/tree/HEAD/packages/bootstrap-vue-next) from 0.45.0 to 0.45.4.
- [Release notes](https://github.com/bootstrap-vue-next/bootstrap-vue-next/releases)
- [Changelog](https://github.com/bootstrap-vue-next/bootstrap-vue-next/blob/main/packages/bootstrap-vue-next/CHANGELOG.md)
- [Commits](https://github.com/bootstrap-vue-next/bootstrap-vue-next/commits/nuxt-v0.45.4/packages/bootstrap-vue-next)

---
updated-dependencies:
- dependency-name: bootstrap-vue-next
  dependency-version: 0.45.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-02 23:20:47 +00:00
dependabot[bot] 165bc22af7
Bump @babel/core from 7.28.5 to 7.29.7 in /freedata_gui
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.28.5 to 7.29.7.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.29.7/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-version: 7.29.7
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-02 23:20:34 +00:00
dependabot[bot] 20aaae1c6d
Bump core-js from 3.46.0 to 3.49.0 in /freedata_gui
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.46.0 to 3.49.0.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.49.0/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-version: 3.49.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-02 23:20:25 +00:00