Skip to content

flipper: Frequency app for the CyberUnicorn console - #17

Draft
hellofrequencylab wants to merge 1 commit into
mainfrom
claude/project-thread-g3bhdt
Draft

hellofrequencylab wants to merge 1 commit into
mainfrom
claude/project-thread-g3bhdt

Conversation

@hellofrequencylab

@hellofrequencylab hellofrequencylab commented Oct 21, 2026 •

Copy link
Copy Markdown
Owner

Requested by Daniel

Project

flipper/

What changed

Before: writing a check-in placard needed the CyberUnicorn with its PN532 reader. The Flipper Zero could not take part.

After: open the Frequency app on the Flipper (Apps → NFC). It adds a second USB serial port that speaks the console's protocol, so the console can write and read NTAG213/215/216 placards and member cards through the Flipper's NFC.

  • apps/frequency switches USB to dual CDC the same way the stock USB-UART Bridge does, and leaves the CLI on the first port. It answers system.status, system.caps, hat.probe (reports pn532: true, because the console gates its tag tools on that), frequency.write_tag and frequency.read_tag. Anything else gets unknown_command.
  • A write is one tap. The app checks the NTAG type, lock bits and AUTH0, writes the NDEF URI TLV to the user pages, then reads it back to compare. It returns {uid, type, ntag, capacity, uri, written}, and failures use the error codes the console already maps: timeout "No card", write_failed, card_error.
  • tools/placard_nfc.py builds a .nfc file for the stock NFC app's Write, for writing without the app. The format is grounded in flipperzero-firmware's loader.
  • CLAUDE.md records the device firmware (Momentum mntm-012, API 87.1). It also notes that ufbt launch reports a read error when the app re-enumerates USB, and that this is expected.

Verification

  • ufbt builds clean for Target: 7, API: 87.1, which matches the device. ufbt lint passes.
  • Ran on hardware. Installed with ufbt launch, then talked to it over the new port /dev/cu.usbmodemflip_I5had0ha3:
    • system.status, system.caps and hat.probe answered.
    • wifi.scan got unknown_command, and an ftp:// URL got bad_args.
    • read_tag and write_tag with no tag emitted frequency.waiting_for_tag, then timed out with "No card".
    • Free heap was 141080 before and after those NFC sessions.
  • Not verified yet:
    • A write to a real tag.
    • The console end to end. Its Web Serial picker filters on the CH340 vendor id, so it needs a frequency-web change to show the Flipper.

🤖 Generated with Claude Code

…fc builder

apps/frequency opens a second USB serial port and speaks the console's
line protocol (system.status, system.caps, hat.probe, frequency.write_tag,
frequency.read_tag), writing the NDEF check-in link to an NTAG213/215/216
and reading it back. tools/placard_nfc.py builds a .nfc file for the
stock NFC app's Write, for use without the app.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants