diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0885cea..2dcf509 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -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' diff --git a/.gitignore b/.gitignore index e96e8e1..3acdb06 100644 --- a/.gitignore +++ b/.gitignore @@ -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/ diff --git a/CHANGELOG.md b/CHANGELOG.md index e9b10b3..05632d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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___ch.csv`. Sorting by name in qFlipper + = sorting by time; filename itself summarizes the export. + - Falls back to `scan_boot_ch.csv` when RTC is not set + (avoids 1970 garbage names). + - Same-second collisions get `_1.._99` suffix. +- **Jammer session log filenames** now: `jam____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 diff --git a/README.md b/README.md index b445929..5ac6372 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,19 @@
- - PINGEQUA 2-in-1 RF Devboard — nRF24L01+ + CC1101 with antennas - + + + + + +
+ + PINGEQUA 2-in-1 RF Devboard hardware + +
The Hardware · 2-in-1 NRF24 + CC1101 +
+ PINGEQUA RF Lab live demo — main menu navigation on Flipper Zero +
Live Demo · Scanner · Signal Gen · About +
# PINGEQUA RF Lab @@ -13,7 +24,7 @@ [![Platform](https://img.shields.io/badge/platform-Flipper%20Zero-FF8200?style=flat-square)](https://flipperzero.one/) [![Release](https://img.shields.io/github/v/release/pingequalab/rf-lab?style=flat-square&color=success&label=release)](https://github.com/pingequalab/rf-lab/releases/latest) [![Firmware](https://img.shields.io/badge/firmware-OFW%20%7C%20Momentum%20%7C%20Unleashed%20%7C%20RogueMaster-blue?style=flat-square)](#firmware-compatibility) -[![FAP size](https://img.shields.io/badge/FAP-40%20KB-success?style=flat-square)](dist/) +[![FAP size](https://img.shields.io/badge/FAP-44%20KB-success?style=flat-square)](dist/) [![License](https://img.shields.io/badge/license-MIT-yellow?style=flat-square)](LICENSE) [![Hardware](https://img.shields.io/badge/hardware-PINGEQUA%202--in--1-000000?style=flat-square)](https://www.pingequa.com/products/flipper-zero-nrf24-cc1101-2-in-1-rf-devboard?utm_source=github&utm_medium=readme&utm_campaign=rflab&utm_content=badge) @@ -29,9 +40,11 @@ An open-source Flipper Application Package (FAP) that turns Flipper Zero plus th - **2.4 GHz spectrum analyzer** — 126 channels real-time with WiFi 1/6/11 + BLE 37/38/39 band markers, max-hold, microsecond dwell tuning, cursor inspection, **CSV scan export** (long-press OK, v0.5.0+) - **NRF24 jammer with 7 modes** (v0.4.0+): - - CW Custom · BLE Adv · **BLE React** (RPD reactive — first on Flipper NRF24) · WiFi 1/6/11 (pilot-aware OFDM) · ALL 2.4G - - Real-device verified to disconnect BLE devices and 2.4 GHz WiFi within room range + - CW Custom · BLE Adv · **BLE React** (RPD reactive — first on Flipper NRF24) · WiFi 1/6/11 (CW band hop) · ALL 2.4G + - Disrupts nearby BLE / 2.4 GHz WiFi at close range - **Auto session log** + **mode/channel persistence** (v0.5.0+) +- **Human-readable export filenames** (v0.5.2+) — `scan__