Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
05b8662
fix: replace assets_icons.h with inline canvas arrow drawing
pingequalab May 6, 2026
1470580
fix: forward-declare furi_hal_spi_bus_handle_external_extra
pingequalab May 6, 2026
7cdf8e8
fix: remove furi_hal_spi_bus_handle_external_extra (not in firmware API)
pingequalab May 6, 2026
5f182db
Fix build: Forward declare 'furi_hal_spi_bus_handle_external_extra' t…
pingequalab May 6, 2026
9a65da2
cleanup: remove stray module.elf.c from root
pingequalab May 6, 2026
83127ca
fix(arbiter): single-handle SPI for OFW compatibility + UI spacing tweak
pingequalab May 6, 2026
9cfaa73
ci: bump checkout@v4→v5 + setup-python@v5→v6 (Node 24 compat)
pingequalab May 6, 2026
f89c499
chore: gitignore .handoff_*.md (local dev prompts, not for public repo)
pingequalab May 6, 2026
74da87a
build: refresh dist FAP after arbiter single-handle rewrite
pingequalab May 6, 2026
ad8e169
release: v0.5.1 — OFW compatibility + UI polish
pingequalab May 6, 2026
04ac8c5
chore(fam): fix fap_version tuple format, add fap_weburl for Catalog …
pingequalab May 6, 2026
3ca9636
docs: sync hardware install + third-party app config from QuickStart …
pingequalab May 9, 2026
4ffecc0
chore: gitignore .roadmap.md (local-only project plan, not for public…
pingequalab May 9, 2026
a02f4cb
chore: remove orphan images/screenshot_scanner.png
pingequalab May 9, 2026
29a409e
docs: embed QuickStart card in README hero (side-by-side layout)
pingequalab May 14, 2026
9af79a7
chore: gitignore _preview/ (local HTML render previews)
pingequalab May 14, 2026
05f50f7
release: v0.5.2 — readable export filenames + meaningful jammer log +…
pingequalab May 15, 2026
e081095
docs(README): sync v0.5.2 features + roadmap
pingequalab May 16, 2026
8565bf7
docs(README): real-device photos + demo GIF + About screenshot
pingequalab May 20, 2026
db4f7c0
docs(README): demo GIF in hero, drop hard-to-read QuickStart card
pingequalab May 20, 2026
828b8c0
docs(README): replace hero hardware photo with dual-antenna scanner shot
pingequalab May 20, 2026
a5079c5
chore(gitignore): exclude PROJECT_STATUS.md (internal status doc)
pingequalab May 22, 2026
33e1312
refactor: rebrand user-facing "jammer" → "signal generator"
pingequalab May 22, 2026
acd0330
docs(fam): qualify catalog description as "CW signal generator"
pingequalab May 22, 2026
c169266
docs(CHANGELOG): record jammer → signal generator rebrand under [Unre…
pingequalab May 22, 2026
b188297
release: v0.5.3 — rebrand transmit feature "Jammer" → "Signal Generator"
pingequalab May 22, 2026
d7bd38d
docs(README): refresh screenshots for Signal Generator rebrand
pingequalab May 22, 2026
9647bba
fix(jammer): restore payload-flood engine + flush CW FIFO for real RF…
claude Jun 12, 2026
1377049
fix(jammer): port huuck held-bus driver model so the carrier actually…
claude Jun 12, 2026
fc29298
fix(jammer): flush TX FIFO before CW ignition to stop intermittent ca…
pingequalab Jun 12, 2026
2b50fc5
perf(jammer): dwell per channel on multi-channel CW hop so the synthe…
pingequalab Jun 12, 2026
3f8ce1f
docs(nrf24): correct diag expected-register comment to device-verifie…
pingequalab Jun 12, 2026
6b6ce97
revert(jammer): restore full-strength continuous-carrier hop (drop dw…
pingequalab Jun 12, 2026
60b1728
docs+ui: drop +20dBm overclaim, frame power as compliance-conservativ…
pingequalab Jun 12, 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
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: '3.11'

Expand Down
14 changes: 14 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,17 @@ build/
# Internal-only docs (not for public repo)
PUBLISH.md
GITHUB_PUBLISH_OVERVIEW.md

# 接力提示词(本地开发用,内含路径/未公开技术细节,不上 git)
.handoff_*.md
.roadmap.md
_preview/

# Claude 操作日志(本地副本,主版本在 NAS handoff/worklog.md)
worklog.md

# 项目状态接续文档(含未公开 v0.6.0 计划/内部路径,主版本在 NAS handoff/)
PROJECT_STATUS.md

# 关键节点本地备份(backup-project.sh 产物)
backups/
125 changes: 125 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,131 @@ All notable changes to PINGEQUA RF Lab.
Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
versioning: [SemVer](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Fixed
- **Signal Generator (NRF24) produced little or no measurable RF effect** —
rewrote the jammer's SPI/CE driving model to match the proven-working
[huuck/FlipperZeroNRFJammer](https://github.com/huuck/FlipperZeroNRFJammer).
- Root cause was **not** the engine choice (constant-carrier vs payload):
it was the bus-arbitration layer. The old worker wrapped every channel
hop in `pq_chip_with_nrf24` (acquire → callback → release **per chunk**)
with 5–50 ms yields between, so the constant carrier was repeatedly
interrupted by bus release/re-acquire — starting unreliably or not at
all. huuck instead **acquires the SPI bus once and holds it**, keeps CE
high, and runs a tight `RF_CH`-hopping loop.
- New **held-session driver model** (`pq_chip_nrf24_session_begin/end`):
while jamming, the worker owns the external SPI bus for the whole run,
keeps CE high, and hops `RF_CH` in a tight uninterrupted loop. CC1101 is
asleep during the jammer scene, so exclusive bus ownership is safe; the
scanner and other scenes keep using the per-callback arbiter.
- Constant-carrier start is now a faithful port of huuck's
`startConstCarrier`, including the **second `set_tx_mode` (CE LOW→HIGH
re-pulse) after loading the FIFO** — the documented ignition step the
old single-edge `setup_cw` was missing.
- All non-reactive modes hop the constant carrier across their band
(CW Custom single freq; BLE Adv {2,26,80}; WiFi 1/6/11 ch 1–23 / 26–48 /
51–73; ALL 0–125). Live mode-switching re-ignites within the held session.

## [0.5.3] — 2026-05-22

### Changed
- **Renamed the transmit feature from "Jammer" to "Signal Generator"**
on every user-facing surface — the main-menu item (`NRF24 Signal Gen`),
the transmit-view header (`SIGNAL GEN`), the app description, and the
exported-data surface. Functionality is unchanged.
- Session-log directory `…/pingequa/jammer` → `…/pingequa/siggen`;
filename prefix `jam_…` → `siggen_…`.
- CSV header `Jammer Session` → `Signal Generator Session`; field
`reactive_jams` → `reactive_events`.
- Settings file `jammer.conf` → `siggen.conf`.
- **One-time migration note:** older `jammer.conf` and `…/jammer/` logs
are not read by the new build; jammer mode/channel resets to the
default (CW Custom @ ch 42) once on first launch after updating.

## [0.5.2] — 2026-05-15

Minor release — readable export filenames + meaningful jammer log fields + new About screen with drive-traffic QR codes.

### Added
- **About screen** (main-menu → About). Three pages, Up/Down to navigate,
Back to return. Right-edge progress-bar indicator shows current page.
- **Page 1 — Brand + Shop QR**: title, version, hardware identifier,
slogan "Precision Gear for Hackers", and a scannable QR encoding
`HTTPS://PINGEQUA.COM` (offline-generated bit array, no QR library at
runtime). Scan with any modern phone to open the shop.
- **Page 2 — GitHub QR**: a separate QR encoding
`HTTPS://GITHUB.COM/PINGEQUALAB/RF-LAB` so you can land on the
source repo from a single scan.
- **Page 3 — Legal**: concise authorized-testing notice + MIT license.

### Changed
- **Scanner CSV filenames** now use wall-clock + peak channel:
`scan_<YYYY-MM-DD>_<HHMMSS>_ch<peak>.csv`. Sorting by name in qFlipper
= sorting by time; filename itself summarizes the export.
- Falls back to `scan_boot<tick>_ch<peak>.csv` when RTC is not set
(avoids 1970 garbage names).
- Same-second collisions get `_1.._99` suffix.
- **Jammer session log filenames** now: `jam_<YYYY-MM-DD>_<HHMMSS>_<mode>_<dur>s.csv`.
Mode short-name and scene duration in seconds embedded in the filename.
- **Jammer session log fields rebuilt** for actual analysis value
(was: 100% redundant `#` header section + `key,value` section duplicating
every field; useless `start_boot_ms` / `end_boot_ms` / `mode_index`;
misleading `cw_channel` written for non-CW modes).
- Single `key,value` CSV section, no duplication.
- New fields: `datetime`, `engine` (CW or Reactive), `target_freq_mhz`
(e.g. `2405/2410/2414/2419 (WiFi ch1 pilots)` derived from profile),
`scene_duration_s` (one decimal, explicitly named so it isn't mistaken
for TX-active time).
- Conditional output: `cw_channel` + `cw_freq_mhz` only for CW Custom;
`reactive_jams` only for BLE React.
- Removed: redundant header block, `mode_index`, `start/end_boot_ms`,
`duration_ms`, `chunks` (which reset per OK cycle, misleading).
- **Scanner CSV header**: added `# Datetime` line; dropped `# Boot ms`
(boot-relative ms is meaningless once wall-clock is present).

### Notes for users
- This release is purely additive on top of v0.5.1 — every existing
feature is preserved (7-mode jammer, Scanner CSV export, settings
persistence, OFW/Momentum/Unleashed/RogueMaster compatibility).
- If you parsed the old jammer log format programmatically, the column
names changed. The new schema is documented in
[`core/pq_jammer_log.h`](core/pq_jammer_log.h).

## [0.5.1] — 2026-05-06

Patch release — broader firmware compatibility + UI polish.

### Fixed
- **OFW compatibility**: chip arbiter rewritten to single-handle SPI design.
Previously used `furi_hal_spi_bus_handle_external_extra` which is a
Momentum-only symbol — CI rejected the FAP on OFW SDK with
`Symbols not resolved`. Now uses only the standard `external` handle
and manually toggles PA4/PC3 CS lines via GPIO. SPI timing, command
framing, and W_TX_PAYLOAD latch behavior all preserved. Two CS lines
still never simultaneously LOW (verified). Real-device regression
passed: BLE/WiFi jamming + Scanner + Sub-GHz Read clean exit all work.
- **Jammer view spacing**: `2402/26/80MHz` (freq) and `@080 2480MHz N358`
(tag) rows had only 1px gap, `@` character visually cramped against
the freq row baseline. Bumped TAG_BASELINE 48→50 and BTM_DIV_Y 51→52
for 3px breathing space.
- **Scanner CSV cosmetic**: `# Peak channel: 14 (2414 MHz, 32 hits)`
comment was being split into two columns by Excel CSV importer (comma
inside the comment). Replaced with semicolon `; 32 hits)`.

### Changed
- **CI**: `actions/checkout` v4→v5, `actions/setup-python` v5→v6 to run
on Node.js 24 (Node 20 is deprecated as of GitHub announcement; full
removal Sep 2026).
- **Internal**: removed stray `module.elf.c` build artifact from repo root.

### Notes for users
- If you installed v0.5.0 on **OFW / Unleashed / RogueMaster** and it
refused to launch — that's the bug v0.5.1 fixes. Re-install from
Releases.
- Momentum users: v0.5.0 worked fine; v0.5.1 has the same behavior
+ UI polish.

## [0.5.0] — 2026-05-05

Data export & settings persistence. v0.5.0 adds research-grade CSV export
Expand Down
Loading
Loading