Skip to content

Commit 6d6d7d8

Browse files
committed
docs: align docs with codebase
1 parent 44e32e3 commit 6d6d7d8

File tree

15 files changed

+307
-117
lines changed

15 files changed

+307
-117
lines changed

.github/workflows/linux-appimage.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ jobs:
229229
cmake --install build/appimage --prefix AppDir/usr
230230
231231
docdir="AppDir/usr/share/doc/dsd-neo"
232-
required=(LICENSE COPYRIGHT THIRD_PARTY.md lesser.txt)
232+
required=(LICENSE COPYRIGHT THIRD_PARTY.md licenses/ezpwd-LGPL-2.1-or-later.txt licenses/pffft-FFTPACK.txt)
233233
for f in "${required[@]}"; do
234234
if [ ! -f "$docdir/$f" ]; then
235235
echo "ERROR: missing required license file: $docdir/$f" >&2

.github/workflows/macos-ci.yaml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,11 @@ jobs:
238238
chmod +x "$STAGE/dsd-neo.sh" || true
239239
# Bundle license/notice files
240240
DOCDIR="$STAGE/share/doc/dsd-neo"
241-
mkdir -p "$DOCDIR"
242-
cp -f LICENSE COPYRIGHT THIRD_PARTY.md src/third_party/ezpwd/lesser.txt "$DOCDIR/"
243-
for f in LICENSE COPYRIGHT THIRD_PARTY.md lesser.txt; do
241+
mkdir -p "$DOCDIR/licenses"
242+
cp -f LICENSE COPYRIGHT THIRD_PARTY.md "$DOCDIR/"
243+
cp -f src/third_party/ezpwd/lesser.txt "$DOCDIR/licenses/ezpwd-LGPL-2.1-or-later.txt"
244+
cp -f src/third_party/pffft/COPYING "$DOCDIR/licenses/pffft-FFTPACK.txt"
245+
for f in LICENSE COPYRIGHT THIRD_PARTY.md licenses/ezpwd-LGPL-2.1-or-later.txt licenses/pffft-FFTPACK.txt; do
244246
if [ ! -f "$DOCDIR/$f" ]; then
245247
echo "ERROR: missing required license file $f in $DOCDIR" >&2
246248
exit 1

.github/workflows/windows-ci.yaml

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ jobs:
7676
$stage = 'dist/dsd-neo-msvc'
7777
$binDir = Join-Path $stage 'bin'
7878
$docDir = Join-Path $stage 'share/doc/dsd-neo'
79-
New-Item -ItemType Directory -Force -Path $binDir,$docDir | Out-Null
79+
$licenseDir = Join-Path $docDir 'licenses'
80+
New-Item -ItemType Directory -Force -Path $binDir,$docDir,$licenseDir | Out-Null
8081
Copy-Item -Force $exe $binDir
8182
8283
$triplet = $env:VCPKG_TARGET_TRIPLET
@@ -90,8 +91,10 @@ jobs:
9091
-DestinationDir $binDir `
9192
-SearchDirs $searchDirs
9293
93-
Copy-Item -Force LICENSE,COPYRIGHT,THIRD_PARTY.md,'src/third_party/ezpwd/lesser.txt' $docDir -ErrorAction SilentlyContinue
94-
$required = @('LICENSE','COPYRIGHT','THIRD_PARTY.md','lesser.txt')
94+
Copy-Item -Force LICENSE,COPYRIGHT,THIRD_PARTY.md $docDir -ErrorAction SilentlyContinue
95+
Copy-Item -Force 'src/third_party/ezpwd/lesser.txt' (Join-Path $licenseDir 'ezpwd-LGPL-2.1-or-later.txt') -ErrorAction SilentlyContinue
96+
Copy-Item -Force 'src/third_party/pffft/COPYING' (Join-Path $licenseDir 'pffft-FFTPACK.txt') -ErrorAction SilentlyContinue
97+
$required = @('LICENSE','COPYRIGHT','THIRD_PARTY.md','licenses/ezpwd-LGPL-2.1-or-later.txt','licenses/pffft-FFTPACK.txt')
9598
foreach ($f in $required) {
9699
$p = Join-Path $docDir $f
97100
if (!(Test-Path $p)) { throw "Missing required license file in staged docs: $p" }
@@ -258,7 +261,8 @@ jobs:
258261
$stage = 'dist/dsd-neo-mingw'
259262
$binDir = Join-Path $stage 'bin'
260263
$docDir = Join-Path $stage 'share/doc/dsd-neo'
261-
New-Item -ItemType Directory -Force -Path $binDir,$docDir | Out-Null
264+
$licenseDir = Join-Path $docDir 'licenses'
265+
New-Item -ItemType Directory -Force -Path $binDir,$docDir,$licenseDir | Out-Null
262266
Copy-Item -Force $exe $binDir
263267
$triplet = $env:VCPKG_TARGET_TRIPLET
264268
if (-not $triplet) { $triplet = $env:VCPKG_DEFAULT_TRIPLET }
@@ -283,8 +287,10 @@ jobs:
283287
-DestinationDir $binDir `
284288
-SearchDirs $searchDirs
285289
286-
Copy-Item -Force LICENSE,COPYRIGHT,THIRD_PARTY.md,'src/third_party/ezpwd/lesser.txt' $docDir -ErrorAction SilentlyContinue
287-
$required = @('LICENSE','COPYRIGHT','THIRD_PARTY.md','lesser.txt')
290+
Copy-Item -Force LICENSE,COPYRIGHT,THIRD_PARTY.md $docDir -ErrorAction SilentlyContinue
291+
Copy-Item -Force 'src/third_party/ezpwd/lesser.txt' (Join-Path $licenseDir 'ezpwd-LGPL-2.1-or-later.txt') -ErrorAction SilentlyContinue
292+
Copy-Item -Force 'src/third_party/pffft/COPYING' (Join-Path $licenseDir 'pffft-FFTPACK.txt') -ErrorAction SilentlyContinue
293+
$required = @('LICENSE','COPYRIGHT','THIRD_PARTY.md','licenses/ezpwd-LGPL-2.1-or-later.txt','licenses/pffft-FFTPACK.txt')
288294
foreach ($f in $required) {
289295
$p = Join-Path $docDir $f
290296
if (!(Test-Path $p)) { throw "Missing required license file in staged docs: $p" }

CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,14 @@ add_custom_target(uninstall
311311
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
312312

313313
# Install license/notice files with binaries
314-
install(FILES LICENSE COPYRIGHT THIRD_PARTY.md src/third_party/ezpwd/lesser.txt
314+
install(FILES LICENSE COPYRIGHT THIRD_PARTY.md
315315
DESTINATION ${CMAKE_INSTALL_DOCDIR})
316+
install(FILES src/third_party/ezpwd/lesser.txt
317+
DESTINATION ${CMAKE_INSTALL_DOCDIR}/licenses
318+
RENAME ezpwd-LGPL-2.1-or-later.txt)
319+
install(FILES src/third_party/pffft/COPYING
320+
DESTINATION ${CMAKE_INSTALL_DOCDIR}/licenses
321+
RENAME pffft-FFTPACK.txt)
316322

317323
add_subdirectory(src/platform)
318324
add_subdirectory(src/core)

COPYRIGHT

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ Legacy ISC-licensed portions from the original DSD author remain identified via
44

55
The D-STAR radio-header processing path (scrambler, interleaver, Viterbi decode, CRC) was rewritten in 2025 under GPL-3.0-or-later to replace prior GPL-2.0-only contributions.
66

7-
Third-party code retains its original notices in-place; notably, ezpwd Reed-Solomon contains GPL-3.0-or-later/LGPL components (see src/third_party/ezpwd/ and src/third_party/ezpwd/lesser.txt). A summary of bundled third-party code lives in THIRD_PARTY.md.
7+
Third-party code retains its original notices in-place; notably, ezpwd Reed-Solomon contains GPL-3.0-or-later/LGPL components (see src/third_party/ezpwd/ and src/third_party/ezpwd/lesser.txt). Installed third-party license texts are shipped under share/doc/dsd-neo/licenses/. A summary of bundled third-party code lives in THIRD_PARTY.md.

README.md

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# DSD-neo
22

3-
A modular and performance‑enhanced version of the well-known Digital Speech Decoder (DSD) with a modern CMake build, split into focused libraries (runtime, DSP, IO, FEC, crypto, protocol, core, ui) and a thin CLI.
3+
A modular and performance‑enhanced version of the well-known Digital Speech Decoder (DSD) with a modern CMake build, split into focused libraries (`runtime`, `platform`, `dsp`, `io`, `engine`, `fec`, `crypto`, `protocol`, `core`, `ui`) and a thin CLI.
44

55
Project homepage: https://github.com/arancormonk/dsd-neo
66

@@ -35,7 +35,7 @@ This project is an active work in progress as we decouple from the upstream fork
3535
## Overview
3636

3737
- A performance‑enhanced fork of [lwvmobile/dsd-fme](https://github.com/lwvmobile/dsd-fme), which is a fork of [szechyjs/dsd](https://github.com/szechyjs/dsd)
38-
- Modularized fork with clear boundaries: `runtime`, `dsp`, `io`, `fec`, `crypto`, `protocol`, `core`, plus `ui` and a CLI app.
38+
- Modularized fork with clear boundaries: `runtime`, `platform`, `dsp`, `io`, `engine`, `fec`, `crypto`, `protocol`, `core`, plus `ui` and a CLI app.
3939
- Protocol coverage: DMR, dPMR, D‑STAR, NXDN, P25 Phase 1/2, X2‑TDMA, EDACS, ProVoice, M17, YSF.
4040
- Requires [arancormonk/mbelib-neo](https://github.com/arancormonk/mbelib-neo) for IMBE/AMBE vocoder primitives.
4141
- Public headers live under `include/dsd-neo/...` and are included as `#include <dsd-neo/<module>/<header>>`.
@@ -72,6 +72,10 @@ This project is an active work in progress as we decouple from the upstream fork
7272
- Optional auto‑PPM correction from the timing error detector for long unattended runs.
7373
- Device control from the UI: toggle bias‑tee, switch AGC/manual gain, adjust bandwidth and squelch, and retune quickly.
7474

75+
- M17 encode tooling
76+
77+
- Generate M17 signals for test/airgap workflows: stream voice (`-fZ`), packet (`-fP`), and BERT (`-fB`) encoders.
78+
7579
- Expanded DSP controls for power users
7680

7781
- Changes apply instantly from the UI and persist across retunes.
@@ -92,7 +96,7 @@ Requirements
9296
- C compiler with C11 and C++ compiler with C++14 support.
9397
- CMake ≥ 3.20.
9498
- Dependencies:
95-
- Required: libsndfile, ncurses (wide), PulseAudio.
99+
- Required: libsndfile; a curses backend (ncursesw/PDCurses); and an audio backend (PulseAudio by default, PortAudio on Windows).
96100
- Optional: librtlsdr (RTL‑SDR support), Codec2 (additional vocoder paths), help2man (man page generation).
97101
- Vocoder: mbelib-neo (`mbe-neo` CMake package) is required.
98102

@@ -104,7 +108,7 @@ OS package hints
104108
- `brew install cmake ninja libsndfile ncurses pulseaudio librtlsdr codec2`
105109
- Windows:
106110
- Preferred binary: the native MSVC ZIP. The MinGW ZIP is an alternative native build.
107-
- Source builds can use MSVC or MinGW (via MSYS2).
111+
- Source builds use CMake presets with vcpkg; set `VCPKG_ROOT` and use `win-msvc-*` or `win-mingw-*` presets in `CMakePresets.json`.
108112

109113
Using CMake presets (recommended)
110114

@@ -167,6 +171,8 @@ cmake --build build/dev-release --target uninstall
167171
- `-DDSD_ENABLE_NATIVE=ON` — Enable `-march=native -mtune=native` (non‑portable binaries).
168172
- `-DDSD_ENABLE_ASAN=ON` — AddressSanitizer in Debug builds.
169173
- `-DDSD_ENABLE_UBSAN=ON` — UndefinedBehaviorSanitizer in Debug builds.
174+
- Audio backend selection:
175+
- `-DDSD_USE_PORTAUDIO=ON` — Use PortAudio instead of PulseAudio (default on Windows).
170176
- UI and behavior toggles:
171177
- `-DCOLORS=OFF` — Disable ncurses color output.
172178
- `-DCOLORSLOGS=OFF` — Disable colored terminal/log output.
@@ -208,7 +214,7 @@ Common options:
208214
## Tests and Examples
209215

210216
- Run all tests: `ctest --preset dev-debug -V` (or `ctest --test-dir build/dev-debug -V`).
211-
- Scope: unit tests for protocol helpers (P25 p1/p2, IDEN maps, CRC/RS), crypto, and FEC primitives are included and run via CTest.
217+
- Scope: unit tests cover runtime config parsing/validation, DSP primitives (filters/resampler/demod helpers), and FEC/crypto helpers.
212218
- Contributions: prefer small, testable helpers and add focused tests under `tests/<area>`.
213219

214220
## Documentation
@@ -220,13 +226,15 @@ Common options:
220226

221227
- Apps: `apps/dsd-cli` — CLI entrypoint, target `dsd-neo`.
222228
- Core: `src/core`, headers `<dsd-neo/core/...>` — glue (audio, vocoder, frame dispatch, GPS, file import).
229+
- Engine: `src/engine`, headers `<dsd-neo/engine/...>` — top-level decode/encode runner and lifecycle.
230+
- Platform: `src/platform`, headers `<dsd-neo/platform/...>` — cross-platform primitives (audio backend, sockets, threading, timing, curses).
223231
- Runtime: `src/runtime`, headers `<dsd-neo/runtime/...>` — config, logging, aligned memory, rings, worker pool, RT scheduling, git version.
224232
- DSP: `src/dsp`, headers `<dsd-neo/dsp/...>` — demod pipeline, resampler, filters, FLL/TED, SIMD helpers.
225-
- IO: `src/io`, headers `<dsd-neo/io/...>` — radio (RTL‑SDR), audio (PulseAudio + UDP PCM input/output), control (UDP/rigctl/serial).
233+
- IO: `src/io`, headers `<dsd-neo/io/...>` — radio (RTL‑SDR), audio (PulseAudio/PortAudio + UDP PCM input/output), control (UDP/rigctl/serial).
226234
- FEC: `src/fec`, headers `<dsd-neo/fec/...>` — BCH, Golay, Hamming, RS, BPTC, CRC/FCS.
227235
- Crypto: `src/crypto`, headers `<dsd-neo/crypto/...>` — RC2/RC4/DES/AES and helpers.
228236
- Protocols: `src/protocol/<name>`, headers `<dsd-neo/protocol/<name>/...>` — DMR, dPMR, D‑STAR, NXDN, P25, X2‑TDMA, EDACS, ProVoice, M17, YSF.
229-
- Third‑party: `src/third_party/ezpwd` INTERFACE target `dsd-neo_ezpwd`.
237+
- Third‑party: `src/third_party/ezpwd` (INTERFACE target `dsd-neo_ezpwd`), `src/third_party/pffft` (FFT helper).
230238

231239
## Tooling
232240

@@ -238,11 +246,11 @@ Common options:
238246

239247
- Languages: C (C11) and C++ (C++14). Indent width 4 spaces; no tabs; brace all control statements; line length ≤ 120.
240248
- Use project‑prefixed includes only: `#include <dsd-neo/...>`.
241-
- Before sending changes: build presets you touched, run `tools/format.sh`, address feasible clang‑tidy warnings.
249+
- Before sending changes: build presets you touched, run `tools/format.sh`, address feasible clang‑tidy and cppcheck warnings.
242250

243251
## License
244252

245253
- Project license: GPL‑3.0‑or‑later (see `LICENSE`).
246254
- Portions remain under ISC per the original DSD author (see `COPYRIGHT`).
247-
- Third-party notices live in `THIRD_PARTY.md` (ezpwd LGPL text: `src/third_party/ezpwd/lesser.txt`).
255+
- Third-party notices live in `THIRD_PARTY.md` (installed license texts: `share/doc/dsd-neo/licenses/`).
248256
- Source files carry SPDX identifiers reflecting their license.

THIRD_PARTY.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Third-Party Notices
22

3-
- **ezpwd Reed-Solomon** (Hard Consulting Corporation) — GPL-3.0-or-later; `rs_base` is LGPL-2.1-or-later (per upstream notice). License texts: project GPL license and `src/third_party/ezpwd/lesser.txt` (LGPL).
4-
- **pffft** (Julien Pommier, based on FFTPACKv4 by Dr Paul Swarztrauber/NCAR) — BSD-like FFTPACK license; `src/third_party/pffft/COPYING`.
3+
- **ezpwd Reed-Solomon** (Hard Consulting Corporation) — GPL-3.0-or-later; `rs_base` is LGPL-2.1-or-later (per upstream notice). License text: `src/third_party/ezpwd/lesser.txt` (installed as `share/doc/dsd-neo/licenses/ezpwd-LGPL-2.1-or-later.txt`).
4+
- **pffft** (Julien Pommier, based on FFTPACKv4 by Dr Paul Swarztrauber/NCAR) — BSD-like FFTPACK license; `src/third_party/pffft/COPYING` (installed as `share/doc/dsd-neo/licenses/pffft-FFTPACK.txt`).
55
- **Tiny AES** (`src/crypto/crypt-aes.c`) — Unlicense/public domain; original upstream https://github.com/kokke/tiny-AES-c.
66

77
All third-party files retain their original headers; consult the referenced paths for details.

0 commit comments

Comments
 (0)