Wiki / Using JTTYAF

From first launch
to a logged QSO.

If you've run RTTY or FT8 anywhere — WSJT-X, FT8CN, a contest logger — most of this will feel familiar. JTTY just removes the waiting. Read it straight through the first time; come back to a section when you need it.

1Install & first launch

Grab JTTYAF from the GitHub releases page as a free APK; the Google Play build is in review. Full install instructions live on the Download page.

The first time you open JTTYAF, Android will ask for permissions:

  • Microphone — the decoder reads audio through the microphone permission whether it comes from USB audio or the phone's mic. Required.
  • USB device access — needed for CAT control and rig audio. Choose Always so the app auto-reconnects when you replug the cable.
  • Notifications — lets the background-receive service show its persistent notification while the screen is off.
  • Location (optional) — only if you want the grid square filled from GPS.

2Set your callsign & grid

Open the Settings tab and fill in the operator card at the top. Your callsign is what %M expands to in every macro, so JTTYAF won't transmit until it's set.

Settings · OperatorSaved
CallsignK1AF
Grid squareFN42hk
Contest profileRTTY Roundup
Echo my transmissionsOn
Decode the whole passbandOn
RX/TX offset1500 Hz
Settings → Operator. Tap any row to edit. Grid square will offer to fill from GPS if you grant location.
Callsign
Your licensed callsign. JTTY's callsign atoms only fit standard calls (prefix, digit, up to three letters, no /); a portable suffix still goes out, but as free text.
Grid square
4- or 6-character Maidenhead locator. Used for distances and the FN42 grid atom.
Contest profile
General, RTTY Roundup or Field Day. Decides how exchange text is packed: Roundup sends 599 001 in one frame; Field Day packs class and section. See the mode page.
Echo my transmissions
Show what you send in the receive window, like a teleprinter. Leave it on — it's how you see the QSO as one conversation.
Decode the whole passband
Print every JTTY station between 300 and 2700 Hz. Turn it off to decode only around your RX offset and save battery.

3Connect your radio

JTTYAF talks to your rig over a single USB-C connection — both CAT (frequency, PTT) and audio ride on the same cable. Modern phones connect directly with USB-C; older devices need a USB-OTG adapter. Bluetooth CAT interfaces and network rigs are supported too.

USB CAT + AudioConnected
JTTYAFAndroid
Your rigIC-7300 · FT-891 · IC-705
Settings → Radio. One USB-C cable carries CAT control, audio, and PTT.
  1. Plug in. Connect your phone to the rig's USB port. Android will prompt for permission to talk to the device — accept it, and tick Always.
  2. Pick your rig. In Settings → Radio, open the Rig model picker and choose your transceiver.
  3. Set control mode to CAT. VOX, RTS and DTR are there if your setup needs them, but CAT is what you want with a modern HF rig over USB.
  4. Confirm CI-V / baud rate. The defaults usually match. If CAT won't connect, this is the first place to check.
  5. Put the rig in a data mode (DATA-USB / USB-D) with a wide filter. JTTY signals are only 127 Hz wide, but you want to see the whole segment.
  6. Pick a band. Tap the frequency pill at the top of the JTTY tab. The picker lists the preliminary JTTY dials — 14.090 is where everyone is.

No rig? You can still explore.

JTTYAF will decode from the phone's microphone — hold it up to a speaker on a JTTY-active radio, or play WSJT-X's sample recording at it, and the same print appears. Useful for learning the layout before you wire up CAT.

4Read the live print

The JTTY tab is where you'll spend your operating time. The receiver walks the whole passband and every decoded message prints as a line, newest at the bottom:

JTTY · 20m · 14.090 MHzRX
UTC        FREQ  S/N  MESSAGE
14:22:48  1512  -9  CQ W1AW CQ
14:23:04  1500  -3  CQ K1ABC CQ
14:23:09    TX       K1ABC K1AF
14:23:12  1500  -2  K1AF 599 001
14:23:31  2210 -13  CQ JA3YBK CQ
14:23:35  1500  -4  K1AF TNX ... 73 (incomplete)
The print. Time, audio frequency of the lowest tone, S/N in a 2500 Hz bandwidth, then the text. Your own transmissions echo in the TX colour.
Frequency
The audio offset of the signal's lowest tone. Tap the line and the RX/TX offset jumps to it, so your reply lands on top of the station you're answering.
Multi-frame messages
Frames chain into one line as they arrive. A missed frame shows as ...; a message that stops without its end-of-message bit prints as (incomplete) after three frame periods.
DX call
Tapping a line also drops that station's callsign into the DX call field, which is what %H expands to. You can type it instead.
Clear
Wipes the print. Everything stays in jtty_all.txt.

5The waterfall

The Waterfall tab shows the passband over time. JTTY signals are narrow four-lane ribbons about 127 Hz wide; the bright marker is your RX/TX offset, which sits on the lowest tone of your own signal.

20m · 14.090 MHzLive
3008001300180023002700
RX/TX 1500 Hz1.888 s per frame● 9 signals
Waterfall. Each ribbon is a station; each run of ribbon is one transmission, in multiples of 1.888 s. Tap a ribbon to move your offset onto it.

Tap-to-tune. Tap any ribbon to set the RX/TX offset to that signal. The offset marker is also where your transmission will go, so pick a clear spot before you call CQ.

6Send a message

Type into the box at the bottom of the JTTY tab — up to 80 characters — and watch the hint: 2 frame(s) · 3.8 s tells you how many 1.888-second frames the text packs into and how long the transmission will take. Then tap Send.

  1. JTTYAF keys PTT (CAT, RTS or DTR, whichever you set), waits the TX delay, and plays the whole GFSK buffer with the lowest tone on your offset.
  2. The print echoes your text in the TX colour as it goes out.
  3. PTT drops automatically when the buffer ends. Stop aborts early and drops the carrier cleanly.

There is no slot to wait for. If the other station is still sending, wait for their ribbon to end on the waterfall, then go. Text is upper-cased; characters outside the JTTY alphabet become #; anything over 80 characters is refused rather than cut short, so you always know what went out.

7Macros & the serial

The F1–F8 row above the text box loads a macro into the box and sends it. %M is your call, %H the DX call, %E is 599 plus the running serial. The defaults are the one-frame JTTY atoms, so a whole exchange is one tap per over:

KeyDefaultUse
F1CQ %M CQcall CQ
F2%H %Esend the exchange
F3TU %M CQthank them and call the next
F4%Manswer a CQ with your call
F5%H TUconfirm
F6%H AGN?ask for a repeat
F7NR?ask for the number
F8TU NOW %Mmoving on

Long-press an F-key to edit it; Reset to default brings the original back. Keys that use %H won't fire until a DX call is set. The Serial field shows the number %E will send next; it increments every time you log a QSO, and you can edit it by hand.

8Work a station

Running (you call CQ):

  1. Tap F1 — CQ K1AF CQ goes out in one frame.
  2. A station answers with their call. Tap their line: it becomes the DX call and your offset snaps to them.
  3. Tap F2 — K1ABC 599 017. Under the RTTY Roundup profile that's two frames.
  4. They send K1AF 599 001. Tap Log QSO, then F3 — TU K1AF CQ — and you're back to step 2 with the serial already bumped.

Search and pounce (you answer a CQ):

  1. Tap the CQ line in the print. DX call and offset are set.
  2. Tap F4 — just your call, one frame.
  3. They send the exchange. Tap F2 to send yours.
  4. They confirm with K1AF TU or TU NOW K1AF. Tap Log QSO. Done.

Didn't copy? F6 asks for a repeat of everything, F7 for just the number. Free text works anywhere — type TNX NEW ONE 73 and Send — it just takes more frames.

9Logging & uploads

Log QSO writes the contact to the on-device Log tab with MODE=JTTY, the serial you sent and the exchange you copied, and bumps the serial. If you've configured upload services, it also flies up to them the moment it's logged.

Logbook · auto-uploadSynced
QRZ
K1ABC FN42
Massachusetts · 20m · JTTY · #017
14:23
599 / 599
Cloud
DL7VEE JO62
Germany · 20m · JTTY · #016
14:11
599 / 599
Logbook. Pill badges show which services accepted each upload. Failed uploads stay visible with a retry indicator until they succeed.

Cloudlog / Wavelog

Open Settings → Cloudlog, paste your server URL, API key and station ID, tap Test, and toggle sync on. New QSOs upload automatically.

QRZ Logbook and World Radio League

Same idea: paste the API key from your account, toggle on. You can run several at once. Export ADIF in the Log tab writes a standard file for everything else.

10Background receive & history

JTTYAF keeps decoding with the screen off: a foreground service with a persistent notification holds the audio path open, so when you come back the print has everything that happened while you were away. Stop receiving to end it.

Everything received and sent is appended to jtty_all.txt in the app's files directory (Android/data/radio.ks3ckc.jttyaf/files/), in the style of WSJT-X's ALL.TXT. Clearing the print doesn't touch it.

11Field tips

  • Pick a clear offset before you call CQ. Your signal is only 127 Hz wide, but so is everyone else's — look at the waterfall and park where nobody is.
  • Use the RTTY Roundup profile whenever the exchange is 599 + serial. It halves the frames for F2.
  • Let the other station finish. There's no slot, so courtesy is the protocol: wait for their ribbon to end.
  • Turn off the wide search when portable. Decoding only around your offset is noticeably easier on the battery.
  • Set TX level with ALC auto-volume in Settings → Radio, then leave it. GFSK is constant-envelope, but an overdriven rig still splatters.
  • Star the GitHub repo if you want a nudge when a new release lands. Or grab the Play Store build and updates happen by themselves.

Something not behaving?

Read the next page: it walks you through the in-app bug reporter and the debug log so we can actually fix what you ran into. Reporting a bug →