Skip to content

Contest with F1–F8 Macros

In 20 minutes, go from "contest starts in 30 min" to "macros are set, CW flies at the press of a button, SSB voice is recorded".

Prerequisites

  • CAT setup finished (Hamlib send_morse needs an active CAT connection, and so does SSB PTT)
  • Built-in microphone or USB mic for SSB recordings
  • A radio partner or dummy load to test before the contest

Step 1 — Create a Contest Log

  1. Main window → sidebar → "Contest"
  2. Toolbar "+ Log" → a sheet opens
  3. Required fields:
    • Contest template: e.g. CQ-WW CW 2026 or USKA Field Day SSB (39 templates built in, see the Contest module)
    • Category-Operator: SINGLE-OP (solo) or MULTI-OP-SINGLE / MULTI-OP-MULTI (see the Multi-Op tutorial)
    • Power, Mode, Assisted/Non-Assisted, Bands — Cabrillo header tags, taken straight from the template default; you only need to check them
  4. "Create"

The log is now active. The F1–F8 macro row appears below the QSO entry form.

Step 2 — Mode Indicator Above the Buttons

Above the F1–F8 row you'll see a small indicator:

DisplayMeaning
🔵 CWTRX mode (from CAT) is CW → clicking sends via Hamlib send_morse
🟠 SSBTRX mode is LSB/USB/AM → clicking plays the .m4a recording via PTT toggle
inactiveNo CAT connection or no macro in the slot

The beauty: you don't have to switch anything. When you move between CW and SSB during the contest (dual-mode contests), the macro behavior changes automatically too.

Step 3 — CW Macros (ready to use immediately)

The factory assignment matches the N1MM standard and works for 80% of all contests right away:

SlotLabelCW text
F1CQCQ TEST {MyCall} {MyCall} TEST
F2Exch{TheirCall} 5NN {Snt}
F3TUTU {MyCall}
F4MyCall{MyCall}
F5HisCall{TheirCall}
F6??
F75NN5NN
F8AGNAGN

Available variables in CW templates:

VariableReplacement
{MyCall}Your callsign from Station settings (or per-log override)
{TheirCall}The contents of the call field in the form
{Snt}RST sent (default 599 for CW)
{Rcv}RST received (what you entered in the field)
{Cnt}Running QSO number (serial)
{Exch}Contest exchange (e.g. CQ zone, section)

Step 4 — Customize Macros

  1. Settings → Macros (⌘, → "Macros" tab)
  2. You see 8 slots as rows
  3. Per slot you can change:
    • Label (what's printed on the button)
    • CW text (template with variables)
    • SSB audio (see next step)

Factory reset: the "Reset to factory assignment" button at the bottom — restores the N1MM defaults (all 8 slots at once).

Save contest-specific sets?

Right now there's only one global 8-slot set. For changing contests you have to adjust or reset. Multi-set storage is on the roadmap.

Step 5 — SSB Voice Recordings

For SSB contests you replace the CW text with an audio file. On the first run, macOS asks for microphone permissionNSMicrophoneUsageDescription in the app's Info.plist explains why.

  1. Select a macro slot, button "Record" (or the microphone icon)
  2. A 3-2-1 recording runs with a seconds timer
  3. "Stop" → an AAC/m4a file is saved to ~/Documents/HAM-Tools/Macros/Contest/
  4. "Preview" (without PTT) to check
  5. On a bad take: "Delete" → record again

Tips for clean recordings:

  • Deliberately skip 2 seconds of leading silence — the PTT toggle needs no buffer at the start of the recording
  • Leave 0.5 seconds of trailing time at the end — PTT is only released when the AudioPlayer finishes (onFinish callback)
  • A USB headset sounds audibly better than the Mac mic
  • Avoid clipping — the TRX mic level does the rest

Step 6 — TRX Voice Keyer (ICOM V1–V4, Yaesu V1–V5) as an Alternative

If your TRX has a built-in voice keyer (ICOM IC-7300, IC-7610, IC-9700, IC-705; Yaesu FT-991/A, FT-710, FTDX-10/101), you can use the TRX's internal slots instead of the HAM-Tools macros.

Every entry form (DX, Contest, POTA, SOTA, WWFF, BOTA) has a V1 / V2 / V3 / V4 / Stop button row — it triggers the TRX slots over CAT. For Yaesu profiles, since 1.9.10 there's an additional V5 (Yaesu has five slots, ICOM four).

When is which worth it?

ScenarioRecommendation
You have ICOM and want to mix CW + SSBHAM-Tools macros (CW + SSB), voice keyer only as backup
You don't have a voice-keyer-capable TRXHAM-Tools SSB recordings, no V1–V4
You're doing SSB-only contest with an ICOM IC-7610TRX V1–V4 (better sound, less CPU load on the Mac)
You're doing CW onlyHAM-Tools macros (V1–V4 is SSB-only)

Recording the voice keyer

That's done via the TRX menu, not through HAM-Tools. On the IC-7300, for example: Menu → MEM/CH → VOICE → REC. HAM-Tools only triggers playback.

Step 7 — During the Contest

Keyboard workflow during the contest:

  1. F1 → send the CQ call
  2. Type the caller into the call field (or double-click from the bandmap)
  3. F2 → send the exchange (CQ-WW: K1AA 5NN 03, Field Day: K1AA 5NN 1A WMA)
  4. The other station answers with their exchange — you type it into the RST/Exch field
  5. Return logs the QSO
  6. F3 → send TU, new round

Stop / abort: With CW there's no hard stop (the Morse flies through). With SSB, clicking any other macro button stops the running recording via PTT release. Safety workaround: turn off TRX VOX, then a manual PTT button locks everything.

Common Problems

F1 is pressed, but no tone / no transmit
→ CAT status green? radio.hamlibMode must be known. Test in the CAT tab whether the frequency is live. If not → walk through CAT setup again.

SSB recording doesn't play back
→ File present? Check ~/Documents/HAM-Tools/Macros/Contest/ for the .m4a. If it's there, it's probably a PTT problem — the TRX profile has supportsPTT: false, you need an external interface.

Variable {Cnt} shows 0
→ The serial counter only counts up once QSOs are logged. Before the first QSO, the serial is logically empty.

Microphone permission denied
→ System Settings → Privacy & Security → Microphone → turn on HAM-Tools. If the app doesn't appear in the list: try a recording once, and macOS will then ask automatically.

CW works but the send speed is too slow/fast
→ Hamlib uses the TRX's internal WPM setting. Change it in the TRX menu (IC-7300: speed knob top right, Yaesu FT-991A: menu item Z2-15).

Next Steps

HAM-Tools © HB9HJI · Funkwelt