Skip to content

docs: FT8 TX audio pipeline notes#95

Merged
patrickrb merged 1 commit into
mainfrom
docs/ft8-tx-audio-pipeline
Jun 3, 2026
Merged

docs: FT8 TX audio pipeline notes#95
patrickrb merged 1 commit into
mainfrom
docs/ft8-tx-audio-pipeline

Conversation

@patrickrb
Copy link
Copy Markdown
Owner

Summary

Adds an FT8 TX audio pipeline section to CLAUDE.md capturing the two non-obvious failure modes diagnosed today (PR #93 and PR #94), so future debugging sessions don't have to walk the entire chain again.

Also fixes the stale applicationId reference (com.bg7yoz.ft8cn -> radio.ks3ckc.ft8af) -- the adb pull / pidof / logcat --pid examples in CLAUDE.md were silently producing empty results because the package name moved at some point but the docs didn't.

Notes captured

  1. libft8cn.so generates the entire FT8 waveform (Costas embedded) -- anything weird downstream is a transport problem.
  2. lateStartSkipMs threshold must be (15s - 12.64s) = 2.36s of cycle slack, not the cycle boundary. Wrong = chops leading Costas off every on-time TX.
  3. libusb_set_iso_packet_lengths must use (sampleRate * channels * bytesPerSample) / 1000 for USB FS, not wMaxPacketSize. Wrong = device clocks ~4% fast, tones miss the WSJT-X 6.25 Hz grid.

Both failure modes are silent at the rig -- keying works, audio is audible, ALC looks right, receivers see noise.

🤖 Generated with Claude Code

Captures the two non-obvious gotchas that just took a day to diagnose:

1. lateStartSkipMs must threshold against (15s - 12.64s) = 2.36s of
   slack, not the cycle boundary. Wrong: chops the leading Costas
   array off every on-time transmission. (PR #93)

2. libusb iso OUT packet length must be (rate*ch*bps)/1000, NOT the
   endpoint's wMaxPacketSize. Wrong: device clocks samples ~4% fast
   and FT8 tones land off the WSJT-X 6.25Hz grid. AudioTrack path is
   unaffected because the kernel UAC driver does this math. (PR #94)

Both failure modes are *silent* — the rig keys, audio is audible on
the rig speaker, ALC looks right, but receivers see noise. Without
this note in the project instructions, the next person (or the next
Claude Code session) re-walks the entire diagnostic chain from
debug.log → resampler audit → external WebSDR confirmation.

Also fixes the stale package name throughout — applicationId moved
from `com.bg7yoz.ft8cn` to `radio.ks3ckc.ft8af` at some point, but
the adb pull / logcat / pidof examples in CLAUDE.md still pointed
at the old name, so they would silently produce empty results.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@patrickrb patrickrb merged commit 8ff5c33 into main Jun 3, 2026
2 of 3 checks passed
@patrickrb patrickrb deleted the docs/ft8-tx-audio-pipeline branch June 3, 2026 16:21
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.

1 participant