Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
83ce6dc
feat(ui): add centralized dark theme system (PStheme)
Mar 7, 2026
20c3817
perf(parser): replace eval() with dynamic field access in PSload
Mar 7, 2026
2db494d
chore: fix CRLF line endings, add .gitattributes
Mar 7, 2026
736559f
perf(ui): add PStheme, defer spectral delay computation to Run click
Mar 7, 2026
8606ff9
perf(spectral): replace eval() with dynamic field access in plot files
Mar 7, 2026
8d4eb68
feat(ui): unified dark theme across all dashboards
Mar 7, 2026
632f277
fix(ui): unify font size via PStheme, remove all hardcoded FontSize v…
Mar 7, 2026
1456aff
fix(ui): pixel-based CP resize, remove duplicate widgets, fix topbar …
Mar 8, 2026
97ceee9
chore: remove dead code and unused compat shims
Mar 8, 2026
d6c68ec
fix(spectral): handle short/empty logs in Spectral Analyzer without c…
Mar 8, 2026
13e5369
refactor: str2double, preallocate arrays, extract preset callback
Mar 8, 2026
daeabdb
perf(ui): cache smooth() in Log Viewer, remove eval()
Mar 8, 2026
06d2d43
fix(ui): add file dropdowns to PID Error/Stats, fix checkbox layout a…
Mar 8, 2026
4348516
perf(parser): use --output-dir instead of copying decoder and log files
Mar 8, 2026
c0f4702
fix(ui): add drawnow after figure(1) to fix maximize race condition
Mar 8, 2026
66413a8
fix(filter-sim): fall back to BF 4.2 header names for filter params
Mar 8, 2026
9065100
fix(filter-sim): correct BF filter type mapping (0=PT1 not OFF)
Mar 8, 2026
5f9a075
fix(parser): replace str2num with str2double across codebase
Mar 8, 2026
16995e9
fix(ui): fix Freq×Throttle colorbars and Step Response 4-column layout
Mar 8, 2026
d0963ad
fix(ui): dynamic plot widths and PSgrid resize for all dashboards
Mar 8, 2026
1a295a1
feat(filter-sim): redesign with 2x4 layout and edit boxes
Mar 10, 2026
a1c7020
fix(filter-sim): log frequency toggle no longer freezes GUI
Mar 10, 2026
eb30d34
fix(filter-sim): Show Both hides right column properly
Mar 10, 2026
ad473cb
fix(filter-sim): unify layout into applyLayout() for all toggle combos
Mar 10, 2026
9c6760e
fix(filter-sim): suppress log-axis warnings during redraw
Mar 10, 2026
7dd446d
fix(parser): handle BF 2025.12 headerless format in PSparseBFversion
Mar 11, 2026
7e1fb11
feat(motor-noise): RPM overlay overhaul for Freq×Time and Freq×Throttle
Mar 11, 2026
e0ad651
feat(ui): PID Slider Tool with PTB/BF math toggle
Mar 11, 2026
2ae9570
fix(ui): stick overlay, KISS parsing, firmware switch cleanup
Mar 12, 2026
10edfa9
fix(ui): preset header no longer resets dropdowns, colorbar orphan cl…
Mar 12, 2026
f0b6bc8
fix(ui): clear smoothCacheLV on firmware switch, defensive length check
Mar 12, 2026
09fca6f
fix(ui): unify motor colors to FPV standard from PStheme
Mar 12, 2026
8fb3596
fix(firmware): Step Response crash for RF/KISS/AP + Stats crash for A…
Mar 12, 2026
9b37c14
fix(ui): Rotorflight stick overlay — collective is -500..500 not 1000…
Mar 12, 2026
43eac43
fix(rotorflight): override setpoint_3_ with governor throttle (rcComm…
Mar 12, 2026
88d22ca
feat(rotorflight): show servo data in Motor slots + dynamic labels ba…
Mar 12, 2026
c2ce675
fix(firmware): auto-detect firmware from log headers instead of dropdown
Mar 13, 2026
7be3151
fix(compat): replace subplot() with tag-based axes + CI/build/macOS u…
Mar 14, 2026
b026103
fix(ui): dynamic axis scaling, motor expansion, FileNum reload, Step …
Mar 14, 2026
4db149e
feat(ui): Test Signal Config, PStheme colors, Filter Sim/Test Signal …
Mar 15, 2026
5da63c2
fix(filter-sim): plot fidelity across all 8 subplots
Mar 15, 2026
2e1733e
feat(step-response): SD shading, error bars, raw traces, period tool,…
Mar 16, 2026
005d024
fix(filter-sim): fixed LPF step 4ms range + notch phase +-90 deg clamp
Mar 22, 2026
63bfcc2
fix(filter-sim): Emuflight per-axis keys + gyro rate from looptime he…
Mar 23, 2026
2ad0907
feat(ui): Period tool - red markers on all LV axes + ms/Hz annotation
Mar 24, 2026
8a54212
feat(ui): eRPM overlay on motor subplot
Mar 24, 2026
e65bc09
fix(ui): 4 per-motor RPM checkboxes, Stats mode-switch cleanup
Mar 25, 2026
39ac3a1
feat(ui): Setup Info diff, Filter Sim overhaul, Copy CLI
Mar 28, 2026
dd49b98
feat(spectral): Motor Noise panels, RPM overlay, hex/octo, perf cache
Mar 29, 2026
476dd27
perf(spectral): PSD/render cache, Motor Noise FFT cache, hex/octo eRP…
Mar 29, 2026
e246037
perf(motor-noise): pre-compute coherence for all 3 gyro axes, cache i…
Mar 30, 2026
2111689
feat(spectral): use gyroUnfilt for Gyro prefilt on BF 4.5+, fallback …
Mar 30, 2026
81e7aaf
feat(step-response): vectorized FFT, subsample/threshold controls, sn…
Apr 2, 2026
279a268
feat(spectral): pre/post filter PSD overlay polish
Apr 2, 2026
f60eb96
feat(spectral): TPA diagnostic annotation on Freq x Throttle spectrog…
Apr 4, 2026
223fa5b
fix(compat): old BF logs crash on missing gyroADC fields
Apr 4, 2026
59c9504
fix(spectral): delete unchecked RPY panels instead of cla-only
Apr 4, 2026
a88a11f
feat(ui): add Gyro(pf) checkbox to Log Viewer
Apr 5, 2026
66a25d2
fix(spectral): Sub 100Hz column vanishes on re-render
Apr 6, 2026
6c24cb1
fix(spectral): skip gyroPrefilt default when data unavailable
Apr 6, 2026
314c558
chore: bump version to 26.04.0-rc1
Apr 6, 2026
3d51de1
ci: update macOS runners and all actions to latest
Apr 6, 2026
95d539b
fix(parser): guard INAV rcData_3_ and setpoint_3_ plot
Apr 19, 2026
0e1f949
fix(parser): QS JSON path doubling + AP older log compat
Apr 19, 2026
92107f1
chore: bump version to 26.05.0
May 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
*.m text eol=lf
*.sh text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.md text eol=lf
*.txt text eol=lf
Makefile text eol=lf
Dockerfile text eol=lf
24 changes: 12 additions & 12 deletions .github/workflows/build-builders.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,17 @@ jobs:
contents: read
packages: write
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0

- uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
- uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0
- uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0
with:
context: ./packaging/appimage
push: true
Expand All @@ -37,17 +37,17 @@ jobs:
contents: read
packages: write
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0

- uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
- uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0
- uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0
with:
context: ./packaging/windows
push: true
Expand All @@ -59,17 +59,17 @@ jobs:
contents: read
packages: write
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0

- uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
- uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0
- uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0
with:
context: ./packaging/macos
push: true
Expand Down
26 changes: 26 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: CI

on:
push:
branches: [main, pidscope]
pull_request:
branches: [main]

permissions: {}

jobs:
test:
runs-on: ubuntu-latest
permissions:
contents: read
packages: read
container:
image: ghcr.io/${{ github.repository_owner }}/pidscope-builder-appimage:latest
credentials:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Run unit tests
run: octave --no-gui --eval "run('tests/run_tests.m')"
134 changes: 94 additions & 40 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,34 @@ env:
permissions: {}

jobs:
# Stage 0: Run tests before building anything
test:
runs-on: ubuntu-latest
permissions:
contents: read
packages: read
container:
image: ghcr.io/${{ github.repository_owner }}/pidscope-builder-appimage:latest
credentials:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Run unit tests
run: octave --no-gui --eval "run('tests/run_tests.m')"

# Stage 1: Build Docker builder images (3 parallel)
build-appimage-builder:
needs: test
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
- uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
Expand All @@ -33,14 +51,15 @@ jobs:
docker push ${{ env.REGISTRY }}/${{ github.repository_owner }}/pidscope-builder-appimage:latest

build-windows-builder:
needs: test
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
- uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
Expand All @@ -51,24 +70,31 @@ jobs:
docker build -t ${{ env.REGISTRY }}/${{ github.repository_owner }}/pidscope-builder-windows:latest ./packaging/windows
docker push ${{ env.REGISTRY }}/${{ github.repository_owner }}/pidscope-builder-windows:latest

build-macos-builder:
runs-on: ubuntu-latest
build-macos-blackbox:
needs: test
strategy:
matrix:
include:
- runner: macos-15
arch_name: arm64
- runner: macos-15-intel
arch_name: x86_64
runs-on: ${{ matrix.runner }}
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Build blackbox_decode
run: |
git clone --depth 1 https://github.com/betaflight/blackbox-tools.git
cd blackbox-tools
make DEBUG= obj/blackbox_decode
cp obj/blackbox_decode ../blackbox_decode.${{ matrix.arch_name }}
codesign --force --sign - ../blackbox_decode.${{ matrix.arch_name }}

- uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push builder image
run: |
docker build -t ${{ env.REGISTRY }}/${{ github.repository_owner }}/pidscope-builder-macos:latest ./packaging/macos
docker push ${{ env.REGISTRY }}/${{ github.repository_owner }}/pidscope-builder-macos:latest
name: blackbox-decode-${{ matrix.arch_name }}
path: blackbox_decode.${{ matrix.arch_name }}

# Stage 2: Build packages (each depends only on its own builder)
build-appimage:
Expand All @@ -78,9 +104,9 @@ jobs:
contents: read
packages: read
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
- uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
Expand All @@ -95,7 +121,7 @@ jobs:
-v ${{ github.workspace }}/dist:/dist \
${{ env.REGISTRY }}/${{ github.repository_owner }}/pidscope-builder-appimage:latest

- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
with:
name: appimage
path: dist/PIDscope-*-x86_64.AppImage
Expand All @@ -107,9 +133,9 @@ jobs:
contents: read
packages: read
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
- uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
Expand All @@ -124,36 +150,64 @@ jobs:
-v ${{ github.workspace }}/dist:/dist \
${{ env.REGISTRY }}/${{ github.repository_owner }}/pidscope-builder-windows:latest

- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
with:
name: windows-zip
path: dist/PIDscope-*-windows-x86_64.zip

build-macos:
needs: build-macos-builder
runs-on: ubuntu-latest
needs: build-macos-blackbox
runs-on: macos-15
permissions:
contents: read
packages: read
env:
INAV_BB_VERSION: "9.0.0"
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
pattern: blackbox-decode-*
merge-multiple: true

- name: Download INAV blackbox_decode
run: |
brew install zstd
wget -q "https://github.com/iNavFlight/blackbox-tools/releases/download/v${INAV_BB_VERSION}/blackbox-tools-${INAV_BB_VERSION}_macos-aarch64.tar.zst" -O inav-arm64.tar.zst
tar --zstd -xf inav-arm64.tar.zst && cp bin/blackbox_decode blackbox_decode_INAV.arm64 && rm -rf bin share inav-arm64.tar.zst
wget -q "https://github.com/iNavFlight/blackbox-tools/releases/download/v${INAV_BB_VERSION}/blackbox-tools-${INAV_BB_VERSION}_macos-x86_64.tar.zst" -O inav-x86.tar.zst
tar --zstd -xf inav-x86.tar.zst && cp bin/blackbox_decode blackbox_decode_INAV.x86_64 && rm -rf bin share inav-x86.tar.zst

- name: Build macOS ZIP
- name: Package macOS ZIP
run: |
VERSION=$(tr -d '[:space:]' < VERSION)
STAGING="/tmp/PIDscope-${VERSION}-macos"
mkdir -p "$STAGING"
cp PIDscope.m "$STAGING/"
cp -r src "$STAGING/"
cp VERSION "$STAGING/"
cp packaging/macos/pidscope.command "$STAGING/"
chmod +x "$STAGING/pidscope.command"
cp blackbox_decode.arm64 blackbox_decode.x86_64 "$STAGING/"
cp blackbox_decode_INAV.arm64 blackbox_decode_INAV.x86_64 "$STAGING/"
chmod +x "$STAGING"/blackbox_decode*
if [ -f packaging/com.pidscope.PIDscope.png ]; then cp packaging/com.pidscope.PIDscope.png "$STAGING/PIDscope.png"; fi
cat > "$STAGING/README-macOS.txt" <<'HEREDOC'
PIDscope - Blackbox Flight Log Analyzer

SETUP:
1. brew install octave
2. xattr -cr ~/Downloads/PIDscope-*-macos
3. Double-click pidscope.command
(Octave packages are installed automatically on first launch)

Project: https://buymeacoffee.com/dzikus
License: GPL v3
HEREDOC
mkdir -p dist
docker pull ${{ env.REGISTRY }}/${{ github.repository_owner }}/pidscope-builder-macos:latest
docker run --rm \
-v ${{ github.workspace }}:/src \
-v ${{ github.workspace }}/dist:/dist \
${{ env.REGISTRY }}/${{ github.repository_owner }}/pidscope-builder-macos:latest
cd /tmp && zip -r -q "$GITHUB_WORKSPACE/dist/PIDscope-${VERSION}-macos-universal.zip" "PIDscope-${VERSION}-macos"

- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
with:
name: macos-zip
path: dist/PIDscope-*-macos-universal.zip
Expand All @@ -166,12 +220,12 @@ jobs:
permissions:
contents: write
steps:
- uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
path: artifacts

- name: Create GitHub Release
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 # v2.2.2
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1
with:
files: |
artifacts/appimage/*
Expand Down
Loading