About HFConverse
HFConverse is a cross-platform application for controlling SCS PACTOR modems and operating Winlink radio email (Pending approval), for Windows, macOS and Linux. It is designed around the SCS PTC-IIusb and PTC-IIIusb, with the SCS P4 Dragon (DR-7800/DR-7400) and PXdragon DR-9400 also selectable — see Supported modems, below, for each model's verification status.
It brings together, in one program:
- A terminal for talking directly to the modem.
- Winlink email (Pending approval) — compose, send and receive messages, currently over a Telnet (internet) connection to the Winlink network, with radio (PACTOR) transport planned.
- Keyboard-to-keyboard PACTOR QSOs — live, half-duplex text conversations with another station.
- RTTY (Baudot) — the classic radioteletype mode.
- Image transfer — send a picture to another HFConverse station during a QSO.
- QSL cards — exchange digital QSL cards with other HFConverse operators and keep them in an album.
- Macros — user-defined canned messages, fired by button or function key, for QSO and RTTY.
- On the Air — announce your PACTOR presence to a live web list of active stations, and see who else is on.
- Worked Station — look up a callsign (name, QTH, locator, photo) and see the distance and beam heading to them.
- QSO logging — keep a simple log of your contacts (ADIF), see who you've worked before, and optionally feed each QSO to another logger (Log4OM, HRD) over your network.
HFConverse is amateur-radio software: to use the on-air features you need a licence, a suitable transceiver, and an SCS PACTOR modem connected to your computer.
Working other stations
A PACTOR, RTTY or AMTOR QSO through HFConverse works with any station running any other PACTOR software — Alpha/Simple32, MixW, Airmail, RMS Express, Paxon and the rest. That's because PACTOR, AMTOR and RTTY are implemented in the modem's own firmware, not in HFConverse: your computer just sends text to your modem and reads text back from it, the same way every other PACTOR program does. The modem-to-modem link on the air is identical no matter what software either operator is running. The only requirement is that the other station has a genuine SCS PACTOR-capable modem at a matching PACTOR level — that's true whatever software they use.
The one feature that's HFConverse-specific is QSL card and image exchange (see QSL cards, below) — it only works when the other station is also running HFConverse.
Getting started
What you need
- An SCS modem connected to your computer (USB).
- Your transceiver connected to the modem as normal for PACTOR/RTTY operation.
- Your amateur callsign, and — for Winlink — a Winlink account/password.
Installing HFConverse
Windows has an installer; macOS and Linux are still portable apps — no .dmg or .deb/.rpm/AppImage yet, you get a self-contained folder and run the program directly out of it. Whichever way you install, your settings always live in a per-user folder (see Where your data lives, below), never inside the program's own folder — so installing, moving, or uninstalling never touches your data.
Windows: run the installer, HFConverse-win-x64-Setup.exe. It installs HFConverse with a Start Menu entry, an optional desktop shortcut, and a proper uninstaller under Windows' Apps & Features — no separate .NET installation needed, it's self-contained. There's no code-signing certificate yet, so Windows SmartScreen will show an "unrecognized publisher" warning the first time you run it — click More info, then Run anyway. Expected for software shared directly like this, not a sign anything's wrong with the download. (The PTC-IIusb's USB-serial chip is supported by drivers built into Windows 10/11, so it should just appear as a COM port once plugged in.)
macOS: download and unzip the build for your Mac (HFConverse-macos-arm64.zip for Apple Silicon, HFConverse-macos-x64.zip for Intel), then run these one-time commands in Terminal — macOS's Gatekeeper blocks an app that isn't signed with a paid Apple Developer ID and notarized, which this isn't, and these steps are how you tell the Mac you trust it anyway:
xattr -cr HFConverse.app # drop the quarantine flag from the transfer
chmod +x HFConverse.app/Contents/MacOS/HFConverseTerminal # zips don't keep the executable bit
codesign --force --deep --sign - HFConverse.app # ad-hoc signature - required on Apple Silicon
open HFConverse.app
If it's still blocked after that, Control-click HFConverse.app in Finder and choose Open, or allow it via System Settings ▸ Privacy & Security ▸ Open Anyway. You only need to do this once per copy of the app. (The PTC-IIusb's FTDI USB-serial chip: modern macOS includes the driver, and the port shows up as /dev/tty.usbserial-XXXX; if it doesn't appear, install the FTDI VCP driver.)
Linux: download and unzip HFConverse-linux-x64.zip, then bash run.sh — that's the whole install, no code-signing step to work around. Two things worth sorting before you plug the modem in, both general Linux/VM setup rather than anything HFConverse-specific:
- Serial port access — your user account needs to be in the
dialoutgroup (name varies by distro) to open/dev/ttyUSB0//dev/ttyACM0without root:sudo usermod -aG dialout $USER, then log out and back in. - USB passthrough — if you're running Linux in a VM, the modem's USB-serial adapter has to be explicitly passed through to the VM in your hypervisor's settings, or it won't show up as a device at all.
If the app won't start and complains about globalization/ICU, that's a missing libicu package on a minimal system, not a corrupt download — install it, or set the environment variable DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1 before running run.sh as a quick workaround.
Supported modems
HFConverse talks to SCS PACTOR modems over their serial cmd: command interface. Each modem below has been checked command-by-command against its own SCS manual, using the PTC-IIusb v4.0 manual as the baseline HFC was originally built and verified against — not just "should probably work."
Supported:
- SCS PTC-IIusb — the primary development/reference modem. Every command HFC sends is verified against its manual (v4.0).
- SCS PTC-IIIusb — checked command-by-command against its own manual (v4.1): every command HFC sends exists with identical syntax and behaviour, including full "Modem drives the radio" CAT control. (PACTOR-3 capable; a few CAT/system chapter section numbers differ from the IIusb manual, but nothing is missing or changed.)
- SCS P4 Dragon (DR-7800/DR-7400) — selectable in the modem list and the abstraction seam is built, but this one has not yet been independently verified against the Dragon's own command reference the way the two PTC models above have. Treat as provisional until confirmed. One thing that is confirmed regardless: like the DR-9400, this modem's own manual states outright that AMTOR-ARQ is not implemented, so the AMTOR ARQ item in the Mode menu is disabled on this modem too.
- SCS PXdragon DR-9400 (a different, newer product from the P4 Dragon DR-7800/DR-7400 above) — checked command-by-command against its own Command Reference (firmware V1.00.00) and added with three limitations HFC enforces automatically, since the DR-9400's own manual states outright that RTTY transmission is not implemented (receive-only), that reading the current frequency back from the radio is not possible with the current firmware, and that AMTOR-ARQ is not implemented at all. On this modem: the RTTY (Baudot) screen works for receive only — Transmit and Send CQ are disabled with an on-screen explanation; "Modem drives the radio" isn't offered as a CAT control method (its "Read From Radio" query would never succeed) — use PC-driven CAT, Hamlib, or the FlexRadio API instead, or tune by hand; and the AMTOR ARQ item in the Mode menu is disabled outright. Everything else, including real PACTOR-4, matches the PTC-IIusb baseline. See
claude/DR-9400-compatibility-check.mdfor the full command-by-command table.
Not supported:
- SCS PTC-Plus — checked against its manual and found incompatible, so it is not offered as a modem choice. It's an older, PACTOR-1-only design: several commands HFC relies on don't exist on it at all (
FSKAmpl,PSKAmpl,MYLevel,MYSelc,SERBaud), and — most importantly — it has no transceiver remote-control (CAT) capability whatsoever at the hardware level (no CAT port, none ofTYpe/Offset/Frequency). "Modem drives the radio" simply has nothing to talk to on this modem. - SCS Z80-PTC (the original 1990s SCS PACTOR modem, predating even the PTC-Plus) — not offered as a modem choice. Note: this is an assumed/unverified call, not a manual-checked one — the copy of its manual available to Claude has no extractable text (scan with no OCR layer), so a command-by-command check like the PTC-Plus one above couldn't be run. Given its age (pre-PTC-Plus, PACTOR-1-only Z80 hardware) it's treated as unsupported on the same reasoning that ruled out the PTC-Plus, but this should be confirmed with a proper manual check (or real hardware) before being treated as certain.
- Any other SCS modem not listed above hasn't been checked yet and should be assumed unsupported until it has been.
Which modem is "active"? HFC has one place that decides this: the modem you pick in the port selector when you connect. That choice is remembered (shown read-only on Settings ▸ Equipment ▸ Modem Model) and is what drives both the RTTY-transmit and "Modem drives the radio" limitations above — so a DR-9400's limitations follow you until you connect with a different modem.
First run: Station Settings
Before operating, open Settings ▸ Configuration… and fill in your station details. At minimum:
- Callsign — your amateur callsign. Required before you can operate: Send CQ and Auto CQ stay disabled on every operating screen — with a tooltip explaining why — until this is set, so HFConverse can never key an unidentified transmission.
- Locator — your Maidenhead grid (e.g.
IO81), used for distance/bearing calculations. - Winlink password — if you intend to use Winlink email. On Windows this is stored encrypted (DPAPI); on macOS it is obfuscated in the settings folder.
- CAT configuration — how (if at all) the radio's frequency is controlled. See Radio control (CAT) below.
Settings are saved automatically and remembered between sessions.
Where your data lives: settings, your mailbox, and favorites are stored in your user application-data folder —
%APPDATA%\PactorModemControl\on Windows,~/.config/PactorModemControl/on macOS and Linux. This is separate from the program itself (and from wherever you happen to have unzipped the portable app folder — see Installing HFConverse above), so it survives updates and even a full reinstall. Your Winlink password is machine-specific and won't transfer to another computer — you re-enter it there.
Connecting to the modem
On startup HFConverse either auto-connects to your last-used port (if you enabled that in settings and the port is present) or shows the port selector.
In the port selector you choose:
- the serial port the modem is on,
- the modem type (PTC-IIusb, PTC-IIIusb, P4 Dragon, or PXdragon DR-9400 — see Supported modems above),
- the port parameters (baud rate etc.).
Press Connect to open the link and enter the Terminal.
Is the modem really there? Opening the serial port on its own doesn't prove a modem is attached and switched on. So on connecting, HFConverse briefly polls the modem: the status line shows "Port open", then "Connected" once the modem actually answers — or "No response - check modem" if nothing replies. If you see "No response", check the modem is powered on, plugged in, and that you picked the right port.
Auto-connect splash: if enabled, a short countdown appears on startup before it connects automatically. You can cancel it to go to the port selector instead. The countdown length and whether it's enabled are set in Settings.
Startup splash: when HFConverse launches it briefly shows the HFC logo and version number before the main window appears.
Running your modem over a network (optional)
If your modem needs to be sited away from the computer running HFConverse — a shared shack, a remote receive site, anywhere Ethernet reaches but a USB cable can't — SCS documents two ways to do this, and both work with HFConverse completely unchanged, because each one ends in an ordinary virtual COM port that you pick from the port selector exactly like a local one:
- Any USB SCS modem (DR-7400, PTC-IIusb, PTC-IIIusb, etc.) — a USB↔LAN adapter such as the Silex DS-510, paired with Silex's "SX Virtual Link" software on the controlling PC. The adapter's own USB driver (and SCS's normal USB driver for the modem) both still need installing on that PC.
- DR-7800 with the built-in Ethernet option — connect it to the network directly and run a SER2NET driver (SCS recommends the free "HW Virtual Serial Port" from HW-group) on the controlling PC, which tunnels the serial stream over TCP/IP.
Either way, once the virtual COM port shows up in your OS's device list, select it in HFConverse's port selector as normal — HFConverse has no idea the connection isn't local, and needs no configuration for it.
One DR-7800-specific limit: its built-in Ethernet mode can only be claimed by one computer at a time — it isn't a shared network resource, even though it's sitting on your network. If you need to hand control from one PC to another, disconnect on the first before connecting from the second.
The Terminal
The Terminal is the direct line to your modem — everything you type is sent to the PTC, and everything the PTC says comes back in the log. It's both the working screen and the place you switch into other operating modes from.
- Log — the main area shows the running conversation with the modem. Sent commands are prefixed with
>. Right-click a selection for Copy, or Add selection to Callsign to feed a callsign straight into the PACTOR Link panel below. - Command box — type a command and press Send (or Enter). The line-ending (None / CR / CRLF) is selectable; CR is the PTC default.
- Quick Commands — buttons for common actions (Query Status, Listen on/off).
- PACTOR Link panel — Callsign, Long path (!), Robust (%) and an optional Freq kHz (if PTC transceiver control is set up), plus Connect, Disconnect and Open K2K (jumps straight to the K2K screen). Connect and Disconnect enable and disable automatically depending on whether a link is currently up, so you can't send either at the wrong moment. See Operating HFC, below, for a full walkthrough.
- Hex view — toggles a hexadecimal view of the raw bytes, useful for troubleshooting.
- Local echo — shows what you send inline in the log.
- Live status bar — decodes the PTC's status byte so you can see the current mode and whether you're transmitting or receiving.
Listening to the channel
Listen puts the modem into monitor mode: it decodes PACTOR and Unproto traffic it overhears without taking part, so you can see who is working whom on a frequency. It only works while you're in standby, not during a link of your own — and it's also what the K2K screen turns on automatically so an incoming call can be answered.
Expect the status line to go quiet while Listen is on, and don't read that as a fault. With Listen off, the modem is continuously assessing whether the channel sounds busy, and reporting each time that changes — that's the STANDBY / CHANNEL-BUSY traffic you'll see scrolling in the log. It stops running that check while it's monitoring, so there is nothing left to report until it actually decodes something. Reports resume the moment it does, including
[CONNECT-FRAME: CALL]when it hears a station calling someone.
From the Terminal you reach the other operating modes via the Mode menu (see below). The Terminal stays available while you're in another mode — switching modes never drops your connection.
Operating modes (the Mode menu)
Operating modes are chosen from the Mode menu in the menu bar. The menu is enabled only while you're connected. Currently available:
- Keyboard QSO (PACTOR) — live keyboard-to-keyboard conversations.
- RTTY (Baudot) — radioteletype.
- PSK31 — a narrow, modern alternative to RTTY.
- AMTOR ARQ — keyboard-to-keyboard AMTOR, PACTOR's older ARQ cousin, plus an FEC-based CQ broadcast. See AMTOR, below.
CW isn't offered. It was built in full — receive decode, type-to-send, speed/weight controls — and put through real on-air testing, but the modem's own CW decoder proved unreliable enough on live signals (badly garbling shorter characters, and on one occasion locking the modem up entirely) that it's been withdrawn rather than shipped as-is. The Mode menu has no CW entry, and there's no timeline for revisiting it.
Switching to a mode keeps your modem connection alive; closing the mode screen returns you to the Terminal exactly as you left it. You switch modes via the Terminal — while you're in one mode, the others are greyed in the menu, so Close back to the Terminal first, then pick the one you want.
Keyboard QSO (PACTOR)
A keyboard-to-keyboard QSO is a live, two-way text conversation with another station over a PACTOR link. Because PACTOR is half-duplex — only one station transmits at a time — HFConverse uses a type-ahead, send-when-it's-your-turn model rather than sending every keystroke immediately.
The three panels
- Received (top, large) — the incoming text from the other station, plus a copy of what you've sent (prefixed
>>). - Outgoing queue (bottom-left) — text you've composed and staged, waiting to be transmitted.
- Compose (bottom-right) — where you type your next over while the other station is still sending.
How a QSO flows
- While the other station transmits, type your reply into Compose.
- Press Send (or Ctrl+Enter) to move it into the Outgoing queue. Nothing goes on air yet.
- When it's your turn, the queue is released to the modem — either manually or automatically, depending on your over-mode setting — and the link is then handed to the other station once your text has gone out.
The strip at the top of the screen shows whose turn it is: Transmitting (our over) or Receiving.
Over-mode: Manual vs Auto-flush
Set in Settings ▸ Keyboard-to-Keyboard (QSO):
- Manual (default) — you press Over to transmit the queued text. Always reliable; you control the rhythm of the QSO.
- Auto-flush — queued text is released automatically when the link turns to your transmit. Convenient, but confirm it behaves as you expect on air before relying on it; Manual always works.
Over and Changeover (Ctrl+Y)
PACTOR only changes direction when one of the two stations asks for it. The modem does not hand the link over by itself just because it has run out of text to send — with nothing queued, the sending station simply keeps the link idling. HFConverse gives you two controls for this, side by side in the action row:
- Over (send queue) — sends everything in the Outgoing queue, then asks the modem to change over so the other station can reply. The modem holds the changeover until your text has actually been transmitted, so nothing is cut off. Only enabled when there's something in the queue.
- Changeover (Ctrl+Y) — asks for a changeover without sending any text. It does one of two things depending on whose turn it is:
- While you're transmitting — hands the link to the other station (anything still in the modem's buffer goes out first).
- While you're receiving — asks for a break-in: the other station's transmission is interrupted and the link turns to you.
Ctrl+Y works from anywhere on the Keyboard QSO screen, including while you're typing in Compose. It's the same key SCS modems have always used for changeover, so it will feel familiar if you've used a PTC terminal program before.
The status line confirms what happened: "Changeover requested…", "Break-in requested.", "Your turn to transmit…" or "Link changed over – receiving."
With Auto-flush on, queued text is released as soon as the link turns to you and the link is handed straight back afterwards, so a typed-ahead reply goes out and returns the turn in one step. You can still use Changeover (Ctrl+Y) at any time.
Not yet confirmed on air. Over and Changeover were added in version 0.0.0.2 and are built from the SCS manuals. The break-in behaviour in particular (Ctrl+Y while receiving) is documented for the modem's host mode but not explicitly for the terminal mode HFConverse uses, so please report how it behaves in a real QSO.
Using Over and Changeover in a real QSO
A few everyday situations, and which control to reach for:
The normal rhythm. While the other station is sending, type your reply in Compose and press Ctrl+Enter to queue it. You can queue several lines. When the top strip shows Transmitting (our over), press Over. Your text goes out, then the link turns back to the other station. It's still good manners to end your text with "k", "over" or "bk", as on any other mode — HFConverse handles the actual turnaround, but the other operator can see at a glance that you've finished.
It's your turn but you've nothing to say. Perhaps the other station asked a question you'll answer later, or you're simply handing back for their next item. Press Ctrl+Y. The link turns to them without you sending any text.
You want to get a word in while they're still sending. For example, they've misunderstood something, or you need to leave in a hurry. Press Ctrl+Y while you're receiving to ask for a break-in. Their transmission is interrupted and the link turns to you. Use this sparingly, just as you would on voice. Then queue your text and press Over, which sends it and hands back.
You pressed Over while it wasn't your turn. HFConverse treats that as a break-in: your text is held by the modem, the link turns to you, and the text goes out. The link then stays with you, so press Ctrl+Y when you're done to hand back.
The link seems stuck, with neither station sending. Check the top strip. If it says Transmitting (our over), the link is waiting on you: press Ctrl+Y to hand over, or queue something and press Over. If it says Receiving, the other operator has the turn; wait, or break in with Ctrl+Y.
The other station isn't using HFConverse. That's fine. Ctrl+Y is the standard PACTOR changeover, so it works with any PTC terminal program. They hand the turn back with their own program's changeover key, and HFConverse follows along.
Signing off. Send your final "73" with Over. Once you've seen the other station's last over, disconnect from the Terminal screen's PACTOR Link panel (see The conversation, and ending it below).
Tip: Don't press Ctrl+Y repeatedly if nothing seems to happen straight away. A changeover while you're sending waits until everything already queued at the modem has been transmitted, which can take several seconds on a slow or marginal link. Watch the top strip and the status line instead.
Sending CQ
The Send CQ button transmits your CQ call once — disabled, with a tooltip explaining why, until your callsign is set (see First run: Station Settings), since HFConverse won't key an unidentified transmission. The CQ text is a macro you can edit — see Macros below — so you can word your CQ however you like; by default it's CQ CQ CQ de <yourcall> ×3 pse k. Make sure the modem is in the appropriate calling mode first. (If auto-presence is enabled, sending CQ also announces you on the air — see On the Air.)
Auto CQ repeats that same call automatically instead of you pressing Send CQ each time — handy for unattended or semi-attended calling. Press Auto CQ to start; it sends the CQ, pauses briefly, and sends it again, up to a configurable limit (Settings ▸ Keyboard-to-Keyboard (QSO) ▸ Number of auto CQ calls, 5–20). It stops on its own the moment a station connects, or once the call limit is reached — whichever comes first — and you can always stop it early with Stop CQ. The status line keeps you posted on how many calls have gone out and why it stopped.
Frequency and favorites
If PTC transceiver control is configured (see Radio control), the QSO screen can tune your radio directly:
- Frequency box + Tune — enter a frequency in kHz and tune.
- Read From Radio — ask the radio its current frequency.
- Favorites — save frequently-used QSO frequencies with a name, pick them from a dropdown to tune instantly, and manage them (add/rename/delete/reorder) in a floating Favorites window you can keep open while you operate. Favorites are for QSO operating; Winlink gateways are handled separately.
The QSO screen reopens on the last frequency you used there. If transceiver control isn't set up, the frequency controls are disabled and you tune the radio by hand.
Operating HFC — a K2K PACTOR QSO, step by step
This section walks through a complete K2K contact between two HFConverse operators: Operator 1, who calls CQ, and Operator 2, who answers. Both are assumed to have their radio and modem already connected and working (see Getting started, above).
The PACTOR Link panel
Before the walkthrough, here's what each control in the Terminal screen's PACTOR Link panel does.
- Callsign — the callsign of the station you want to link to. Only used when you are the one initiating the connection (see Operator 2's part of the walkthrough); it plays no part in calling CQ. You can type it in directly, or capture it straight from the log: select the callsign in a received line, right-click, and choose Add selection to Callsign — it fills the box for you (and won't fire on an implausible selection, like a signal report or "CQ" itself). The log's right-click menu also offers a plain Copy, unrelated to the Callsign box, for pulling any text out of the log.
- Long path (!) — tells the modem to allow for the extra propagation delay of a long-path signal (the signal travelling the other way around the globe to reach the far station, rather than the direct/short-path route). Long path is sometimes the stronger path — around grey-line, or when the short path is absorbed or noisy — but it takes noticeably longer to arrive. PACTOR's link-level timing is tuned for ordinary short-path delay, so a long-path contact can fail to establish, or connect unreliably, unless this is set. It's an operator judgement call based on propagation/antenna heading, not something HFConverse can detect on its own, which is why it defaults off.
- Robust (%) — asks the modem to use a slower, more redundant exchange for the initial connect handshake itself, trading connect speed for a much better chance of linking successfully under weak or marginal signal conditions (flutter, QSB, low SNR). It only affects getting the link established — once connected, PACTOR's normal automatic speed negotiation still applies to the actual traffic, so the QSO isn't stuck at a slow speed just because Robust was used to get it going. Try it if an ordinary Connect to a weak station keeps failing.
- Freq kHz — an optional frequency (in kHz) to send along with the Connect command, so the modem can set the radio's VFO as part of issuing the connect. This only does anything if your station is configured for PTC transceiver control (Settings ▸ CAT Configuration) — where the modem itself drives the radio — because that's the only path that can carry a frequency inside the Connect command itself. If you're using Hamlib or a FlexRadio API connection instead, HFConverse warns you in the log that entering a frequency here won't have any effect, since the modem's own connect command never reaches Hamlib or the Flex API. Left blank by default; there's no need to fill it in unless you specifically want the PTC to retune the radio at the moment you connect.
- Connect / Disconnect — issue the PACTOR link/unlink commands. Each is only enabled when it makes sense: Connect needs the modem open, the port state showing Connected, no link already active, and a callsign actually typed in; Disconnect needs the modem open and a link actually active.
- Open K2K — jumps straight to the K2K (QSO) screen, using the same navigation the Mode menu uses. It's always available, whether or not a link exists yet, and it never happens automatically — you always click it yourself. It's a shortcut, not a replacement for the Mode menu, which still works exactly as before.
A note on "linked" status: HFConverse enables Disconnect (and disables Connect) based on the modem reporting itself in an active ARQ mode. While Listen is on, the modem can also briefly report that same mode while it's merely overhearing other stations' traffic passing nearby on the air — not a link of your own. This is normal and harmless (it settles once the other traffic finishes), but it's worth knowing that "Disconnect is enabled" means "the modem currently looks linked," not an absolute guarantee it's linked to you specifically.
Step by step: Operator 1 (the CQ caller)
- From the Terminal screen, click Open K2K in the PACTOR Link panel (or use Mode ▸ K2K). No link exists yet, so this is available immediately.
- The K2K screen opens and automatically puts the modem into Listen — standing by to auto-answer an incoming connect, and lighting the modem's PACTOR-mode indicator.
- Click Call CQ. HFConverse starts a PACTOR Unproto broadcast (100 Bd FSK, readable by any PACTOR station), sends the CQ text, then closes the broadcast and returns the modem to its command prompt.
- HFConverse immediately re-asserts Listen, so Operator 1 is back to standing by for a reply the moment the CQ finishes transmitting.
- Operator 1 now waits. If another station connects to them, the link comes up automatically — nothing further to click. Received text starts appearing directly in the K2K screen, whichever screen Operator 1 is looking at.
Step by step: Operator 2 (answering the CQ)
- Operator 2 hears Operator 1's CQ arrive in the Terminal log. Rather than retyping it, Operator 2 selects the callsign in the log, right-clicks, and chooses Add selection to Callsign — it drops straight into the PACTOR Link panel's Callsign box.
- Still on the Terminal screen, Operator 2 checks the rest of the PACTOR Link panel: Long path or Robust ticked only if propagation calls for them (see above); Freq kHz left blank unless Operator 2 specifically wants the PTC to retune the radio as part of connecting.
- Click Connect. HFConverse sends the PACTOR connect command with whatever options were set.
- Once the modem reports the link as active, Connect disables and Disconnect enables in the panel — a quick visual confirmation the link came up, even before checking the log.
- Click Open K2K to jump to the K2K screen and start typing. (If Operator 2 opened K2K first, before connecting, that's equally valid — Connect works the same either way, since Connect lives on the Terminal screen regardless of which screen is currently shown.)
The conversation, and ending it
Both operators are now on the K2K screen, composing and sending text back and forth in the normal half-duplex way (Send queues text; Over flushes the queue and hands the "floor" to the other station; Changeover / Ctrl+Y passes the floor with nothing to send, or breaks in while receiving — see Over and Changeover (Ctrl+Y)). If a third station's callsign comes up during the conversation, the K2K screen's own Received box has the same right-click pair — Copy and Add selection to working callsign — for capturing it, though there it fills the Working callsign box used by the message macros rather than the PACTOR Link panel's Connect field.
To end the contact, either operator returns to the Terminal screen (closing K2K returns to the same live Terminal session, it doesn't drop the link) and clicks Disconnect in the PACTOR Link panel — enabled for exactly as long as the link is up. There's no separate disconnect control on the K2K screen itself; Disconnect always lives in the PACTOR Link panel.
Image transfer
During a keyboard QSO with another HFConverse station, you can send a picture over the radio link. This is not SSTV — the image travels as a compressed file and arrives intact (no analogue scanning), so both stations see exactly the same picture. It's opened with the Send Image… button on the QSO screen, which brings up a floating window you can keep open while you carry on the QSO.
Important: keep images small
PACTOR is slow. A full-resolution phone photo would take hours to send. HFConverse automatically shrinks the picture (down-scales it and compresses it hard) so it's practical to send, and — crucially — it tells you the size and estimated transfer time before you send anything, so you're never caught out by a transfer that would take an hour. A small, heavily-compressed image is a few minutes over PACTOR; that's the sensible working range.
The window
- Send (left panel) — choose an image, see a preview of the shrunk version that will actually be sent, and the estimate (e.g. "14.2 KB, about 6 min").
- Receive (right panel) — when another HFConverse station sends you an image, it builds here as it arrives, with a progress bar. When it's complete you can save it.
Sending an image
- With a QSO link established, press Send Image….
- Press Choose Image… and pick a picture. The left panel shows the shrunk preview and the size/time estimate.
- If you're happy with the estimate, press Send. A progress bar tracks the transfer; Cancel stops it.
Receiving an image
You don't need to do anything special to receive — the window watches the incoming data and starts building the picture automatically when an image arrives (ordinary QSO text is ignored). When the picture is complete and has passed its integrity check, press Save Received… to keep it.
Because the transfer rides on the connected link, both stations should let the image finish before carrying on with keyboard text, to avoid mixing the two.
QSL cards
HFConverse can exchange digital QSL cards with other HFConverse operators, and keep the ones you receive in an album. A QSL card is just an image sent over the same mechanism as image transfer — tagged so the receiving station files it in their album with your callsign and the date.
Unlike a regular QSO, this is an HFConverse-only feature: it uses a small wire format of HFConverse's own, so it only works when the other station is also running HFConverse. Working a station on other software (Alpha/Simple32, MixW, etc.) is unaffected either way — the QSO itself works the same regardless — you just can't exchange QSL cards or images with them.
HFConverse doesn't design your card — you make it in whatever tool you like (it can be any size), then upload it into HFConverse. HFConverse resizes it to a standard card size so it's practical to send over the air.
Setting your QSL card
In Settings ▸ Station Information ▸ My QSL Card, press Upload… and choose your card image. A preview shows the resized card that will actually be sent. Remove clears it.
Sending your card
During a QSO, open the image-transfer window (Send Image…) and press Send my QSL Card. Your stored card is sent, tagged with your callsign, and the other operator receives it into their album.
The QSL album
Open QSL ▸ QSL Album… to browse cards you've received. Each card is stored with the sender's callsign and the date it arrived. The album has:
- a gallery list on the left and a large view of the selected card on the right,
- a search box to filter by callsign (type part of a call to narrow the list),
- a sort control — by received date (newest first) or by callsign,
- a count showing how many cards match your search, and a Delete Card button.
The album is your own local collection; it needs no connection to browse once you're in the app.
RTTY (Baudot)
RTTY is the classic radioteletype mode: a continuous FSK (frequency-shift keying) text mode. Unlike a PACTOR QSO there's no connection or error correction — whatever you transmit is keyed straight to air, and whatever the demodulator hears is printed. Like a QSO it's half-duplex and uses the same type-ahead model.
Starting and stopping
- Start RTTY puts the modem into RTTY at the selected baud rate and begins receiving.
- Exit RTTY returns the modem to the normal PACTOR prompt. It's also a safe thing to press if you're ever unsure whether the modem is still transmitting — see If the modem seems stuck transmitting, below.
Operating
- Received (top) shows decoded incoming text.
- Compose (below) is where you type ahead while receiving.
- Transmit keys up and sends your composed text; Receive / STOP drops back to listening. (Or press Ctrl+Enter in the compose box to transmit.)
- Send CQ sends your CQ call (the same editable CQ macro used on the QSO screen — see Macros). (If auto-presence is enabled, it also announces you on the air — see On the Air.)
- After you Transmit or Send CQ, HFConverse also drops back to receive on its own a few seconds after your text should have finished sending, as a safety net — you don't have to press Receive / STOP yourself for a normal transmission to end.
If the modem seems stuck transmitting
If the transmit indicator won't clear and you're not sure the modem has stopped sending, press the red Receive / STOP button. It always sends a stop-transmit sequence to the modem, whatever HFConverse's own display currently shows — so it's safe (and the right thing) to press even if you're not sure what state things are actually in. Exit RTTY does the same thing before it leaves RTTY mode, so it works as a stop as well as an exit.
If neither brings the transmit indicator down, the modem's power switch is the fallback of last resort. Please treat this as something to test cautiously the first few times — at reduced power or into a dummy load, watching the transmit indicator, with a hand near the power switch — rather than assuming it's fully proven; it's a recent addition responding to a real stuck-transmit incident, and hasn't yet had extensive on-air use.
RTTY controls
- Baud — 45 (the amateur standard), 50 or 75.
- Shift — the mark/space tone pair: High (2100/2300) or Low (1400/1200). The modem's command set also has a "custom" tone-pair option beyond these two standard sets, but HFConverse doesn't currently expose a way to set custom tones — only High and Low are offered.
- Polarity — Normal / Reverse — flips which tone is Mark and which is Space, on both transmit and receive. If a signal won't decode and looks like RTTY, try Reverse — signals are often received "upside down" relative to your settings, depending on the other station's radio and audio chain. This is the control you'll reach for most.
AFSK, not switchable FSK: the PTC-IIusb doesn't have a separate hardware FSK keying output the way some older dedicated RTTY terminal units did. Everything it sends for RTTY (and AMTOR, and PACTOR-1) goes out as a pair of audio tones fed into your radio's normal SSB audio chain, with the radio simply sitting in USB/LSB — there's no AFSK/FSK mode to choose because the modem only works this one way. What genuinely does need to match the other station is the Mark/Space assignment (the Polarity control, above) and the tone pair (Shift) — get either wrong and a perfectly good signal just won't decode.
Tuning in RTTY
If PTC transceiver control is set up, the RTTY screen has its own frequency controls:
- Freq kHz + Tune + Read From Radio — as on the QSO screen.
- Step buttons (±100 Hz, ±1 kHz) — nudge the frequency to hunt across a band for signals.
RTTY remembers its own last-used frequency separately from the QSO screen, since you tend to operate the two on different frequencies. If transceiver control isn't configured, tune the radio by hand.
Operating HFC — an RTTY QSO, step by step
RTTY works fundamentally differently from K2K. PACTOR is an ARQ/connected mode — Connect and Disconnect establish and end a tracked link between two stations. RTTY has no such thing: it's a continuous, unconnected FSK converse mode, exactly the way RTTY has always worked on the air. Both stations simply tune to the same frequency and take turns transmitting by mutual courtesy and timing — there's no handshake, no "linked" status, and nothing in HFConverse that confirms the other station actually copied you. Only what appears in your own Received box tells you anything happened.
This section walks through a complete RTTY contact between two HFConverse operators: Operator 1, who calls CQ, and Operator 2, who answers. Both are assumed to have their radio and modem already connected and working (see Getting started, above).
The RTTY screen's controls
- Start RTTY / Exit RTTY — Start RTTY enters the modem's RTTY personality at the selected baud rate and applies your Shift/Polarity settings; Exit RTTY leaves it and returns to the PACTOR command prompt. Exit RTTY is always available once the modem is open, even if HFConverse's own tracking of whether you're "in RTTY" is out of step with the modem — deliberately, so it always works as an escape hatch.
- Baud / Shift / Polarity — the standard RTTY parameters (45/50/75 baud; mark/space tone pair; normal or reversed). Changed live if you're already in RTTY.
- Working callsign — unlike the PACTOR Link panel's Callsign box, this has nothing to do with a link (RTTY doesn't have one). It's purely for macro substitution — anywhere a macro uses
<CALL>(e.g. a reply macro reading "de \<CALL>"), this is what gets substituted in. Fill it in from the other station's CQ the same way as K2K: select their callsign in the Received box, right-click, and choose Add selection to working callsign (the menu also has a plain Copy, for pulling any text out of the log). - Send CQ / Transmit / Receive-STOP — Send CQ transmits your CQ macro; Transmit sends whatever's in the Compose box. Send CQ stays disabled — with a tooltip explaining why — until your callsign is set in Settings. Both key the transmitter via the same changeover sequence and both arm an automatic stop a few seconds after the text should have finished sending. Receive / STOP always sends a full stop-transmit sequence and is always clickable, whether or not you think you're currently transmitting — it's the safety-critical un-key button, so it's never gated on the app's own state tracking.
- Frequency / Tune — as on the K2K screen, active only if PTC transceiver control (or another supported CAT method) is configured.
A note on transmit safety: after an on-air incident where a stuck transmission couldn't be stopped from the app, RTTY was hardened with several layers of defence — an automatic stop timed to the length of what you just sent, an always-available Receive/STOP button, and Exit RTTY itself now running the same stop sequence before it leaves RTTY. If the modem ever seems to stay keyed, press Receive / STOP — it's designed to work regardless of what the app thinks your current state is.
Unlike PACTOR, there's no passive listening. In K2K, Listen mode lets the modem sit at the PACTOR prompt and still decode incoming traffic — you don't need the QSO screen open to know something's happening. RTTY has nothing equivalent. Start RTTY isn't just a UI state — it's the command that switches the modem's demodulator into the Baudot personality in the first place. Until that's been sent, the modem isn't decoding RTTY at all, no matter what's on screen, and the RTTY screen's Received box only exists (and only receives) while that screen is open. In practice this means: both operators need to already be in RTTY, with Start RTTY clicked and a matching baud rate and shift, before either one can hear anything from the other — including a CQ. There's no ARQ handshake to negotiate this automatically, so baud/shift have to be agreed by convention or prior arrangement (45 baud is the near-universal default).
Step by step: Operator 1 (the CQ caller)
- From the Terminal screen, open Mode ▸ RTTY (Baudot).
- Click Start RTTY. HFConverse enters RTTY at the selected baud and applies your Shift/Polarity settings; the status strip shows "Receiving." This is also the point at which the modem starts actually decoding Baudot — nothing was received before this.
- Click Send CQ. HFConverse changes the modem over to transmit and sends the CQ macro text (edit it under Macros if you want your own wording).
- The modem is automatically returned to receive shortly after the CQ should have finished sending — or press Receive / STOP yourself the moment you're done.
- Operator 1 now listens. There's no automatic notification of a reply the way a PACTOR link lights up — watch the Received box for someone answering.
Step by step: Operator 2 (answering the CQ)
- For Operator 2 to hear anything at all, they need to already be in RTTY themselves: Mode ▸ RTTY (Baudot), then Start RTTY, at the same baud rate and shift Operator 1 is using. (In practice this usually means both operators were already parked in RTTY, watching the same frequency, the way RTTY operating has always worked — Operator 2 doesn't discover the CQ by chance while doing something else in the app.)
- Once receiving, Operator 1's CQ appears in Operator 2's own Received box. Operator 2 selects the callsign, right-clicks, and chooses Add selection to working callsign — it drops into the Working box, ready for any reply macro that uses
<CALL>. - Operator 2 types a reply into Compose (or uses a macro that expands
<CALL>to Operator 1's callsign), then clicks Transmit — or waits for a natural gap once Operator 1 has clearly stopped sending, since nothing in the software enforces turn-taking the way PACTOR's ARQ link does. - Operator 1 sees the reply appear in their own Received box and replies in turn, exactly the same way. From here it's a normal back-and-forth: type ahead into Compose while receiving, Transmit when it's your turn.
Ending it
Either operator clicks Exit RTTY when the contact is over. This runs the same stop-transmit safety sequence used by Receive/STOP first, then leaves RTTY and returns the modem to the PACTOR command prompt. Closing the RTTY screen does the same automatically if you're still in RTTY when you close it.
PSK31
PSK31 is a narrow, modern alternative to RTTY — about 60 Hz wide, and noticeably better at digging a signal out of noise. Reach it from Mode ▸ PSK31.
If you can drive the RTTY screen you can drive this one. It works exactly the same way: type into the compose box while you're receiving, then press Transmit (or Ctrl+Enter) to send it. Macros, function keys, the working callsign box and Send CQ all behave identically, and share the same macro list.
There is also less to set up than RTTY. There's no baud rate, no shift, and no tone pair to choose — PSK31 has only one speed, and the audio tone is worked out from your existing settings. A radio already set up for PACTOR or RTTY is already set up for PSK31.
Getting started
- Tune to a PSK31 frequency (14070 kHz is the usual 20m watering hole).
- Click Start PSK31.
- Watch the Received pane. When you see decoded text, you're tuned in.
Tuning matters far more than it does in RTTY. A PSK31 signal is only about 60 Hz wide and needs tuning to within a few Hz before it will decode at all — where RTTY tolerates being some way off. Use the Step buttons to move the radio's dial while hunting for a signal, then the Carrier −1 Hz / +1 Hz buttons for the fine work.
Carrier tuning versus dial stepping
These do different things and it's worth being clear which is which:
- Step (±100 Hz, ±1 kHz) moves your radio's dial, exactly as on the RTTY screen. This is for moving around the band.
- Carrier (±1 Hz) moves the modem's decoder, not the radio. This is the fine adjustment that pulls a signal into decode once you're close. It only works while receiving.
Clear Send Buffer
Unlike RTTY, PSK31 holds your typed-ahead text on the modem rather than in HFConverse. So if you've queued text and then think better of it, Clear Send Buffer is the only way to take it back — the modem confirms with *** CLR. This is different from Clear Receive, which only tidies up your own screen and touches nothing on the modem.
Stopping, and leaving
Receive / STOP ends a transmission, and Exit PSK31 leaves the mode and returns the modem to the PACTOR command prompt. Exit always stops any transmission first — the modem treats "quit" during a transmission as an instruction to close the transmission down rather than to leave, so stopping first is what makes leaving clean.
One counterintuitive setting. PSK31's transmit audio level is controlled by the FSK output level slider (Settings ▸ Equipment ▸ Modem), not the PSK one — the PSK slider is for PACTOR-2/3. Whatever level already works for PACTOR or RTTY will normally be right here too. Be careful not to over-drive the transmitter: PSK31's amplitude varies as it sends, and an over-driven PSK31 signal becomes extremely wide and will annoy the whole band.
AMTOR
AMTOR is PACTOR's older ARQ ancestor — a connected, error-corrected keyboard mode, just like Keyboard QSO, but running AMTOR's own protocol and traditionally addressed by a 4-letter Selcall rather than a full callsign. Reach it from Mode ▸ AMTOR ARQ.
Not on every modem. AMTOR-ARQ isn't implemented in firmware on the SCS PXdragon DR-9400 or the P4 Dragon (DR-7800/DR-7400) — both modems' own manuals say so outright. On those two, the AMTOR ARQ item in the Mode menu is disabled entirely rather than offered and left to fail; see Supported modems, above.
The screen
Structurally, this is Keyboard QSO's layout carrying a different protocol underneath: Received (top, incoming text plus a copy of what you've sent), Outgoing queue (bottom-left, staged text waiting for your turn), and Compose (bottom-right, where you type while the other station is sending). It shares the same Manual / Auto-flush over-mode setting as Keyboard QSO (Settings ▸ Keyboard-to-Keyboard (QSO)) — press Over (send queue) yourself in Manual, or let it release automatically in Auto-flush.
- Working — the other station's Selcall or callsign. Type it in, or select it from the Received panel, right-click, and choose Add selection to working callsign — the same pattern as every other operating screen. It's what
<CALL>expands to in macros. - Send CQ / Auto CQ / Stop CQ — AMTOR has no PACTOR-style Unproto broadcast; HFConverse instead switches the modem into AMTOR's FEC mode to send your CQ text, then returns it to standby. Both Send CQ and Auto CQ stay disabled — with a tooltip explaining why — until your callsign is set in Settings. Auto CQ repeats it on a loop until you press Stop CQ or a station connects.
- Frequency, Favorites, Macros — work the same way as the other operating screens, with two things worth knowing: AMTOR has no Centre Frequency (CF) box (CF is a PACTOR-community convention that doesn't carry over) — just a dial frequency, the same as RTTY — and AMTOR keeps its own, separate Favorites list. Frequencies you've saved for PACTOR QSOs won't show up here, and vice versa.
How a contact happens
Opening the AMTOR screen automatically puts the modem into AMTOR standby and arms Listen, so an incoming AMTOR ARQ call connects and starts appearing in Received on its own — the same auto-answer behaviour as Keyboard QSO's CQ-and-wait side. This screen doesn't currently offer a way to dial a specific station's Selcall directly; Send CQ (or Auto CQ) and waiting for a reply is how a contact starts from here.
Once linked, it's the familiar half-duplex rhythm: type ahead into Compose while receiving, Send ▸ queue to stage it, Over (send queue) (or auto-flush) to transmit when it's your turn. Press Close when the contact is over — HFConverse sends the stop sequence and returns the modem to the normal PACTOR command prompt, the same as leaving any other mode.
New, and not yet confirmed on air. AMTOR ARQ QSO is a recent addition — built and verified command-by-command against the SCS manuals, but not yet exercised in a real over-the-air contact. Worth keeping an eye on if anything behaves unexpectedly the first few times out.
Macros
Macros are short, reusable pieces of text you send at the press of a button or a function key — the canned phrases you use over and over in a QSO or RTTY contact (calling CQ, sending a signal report, signing off). They work on the Keyboard QSO, RTTY, PSK31 and AMTOR screens and share one common list, so a macro you create is available in any of them.
Substitution tokens
A macro's text can contain tokens in angle brackets that are filled in automatically when you use it:
<CALL>— the other station's callsign (from the Working box, below)<MYCALL>— your callsign<MYNAME>— your name<MYLOC>— your locator<FREQ>— the current frequency on screen<ANTENNA>— your antenna (from Equipment settings)<RADIO>— your radio (from Equipment settings)<MODEM>— your connected modem model<DATE>— today's date (UTC)<TIMEUTC>— the current time (UTC)<TIMELOC>— the current time (local)<CR>— a line break
For example, a macro with the text <CALL> DE <MYCALL> UR 599 NAME <MYNAME> HW? becomes G4XYZ DE MW0GBQ UR 599 NAME MARTIN HW? when you use it during a QSO with G4XYZ.
The Working callsign
Because several tokens depend on knowing who you're talking to, each operating screen has a Working box — the other station's callsign. You can:
- type it in directly, or
- capture it from the received text: select the callsign in the Received panel, right-click, and choose Add selection to working callsign. (Selecting it yourself means portable calls like
MW0GBQ/Pare captured exactly as you highlight them.)
Whatever's in the Working box is what <CALL> expands to.
Using a macro
There are two ways to fire a macro, and both drop the finished text into the compose box so you can tweak it before sending:
- Function keys — a macro can be assigned a key F1–F12; pressing that key on the QSO, RTTY, PSK31 or AMTOR screen fires it instantly.
- The Macros window — press Macros… to open it, then double-click a macro to use it.
Creating and editing macros
The Macros window is also the editor. Its list shows each macro with its assigned function key. To create one, press New, then set:
- a Label (what you'll recognise it by),
- a Function key (optional — F1 to F12, or None),
- the Text to send (with any tokens),
and press Save macro. A legend of the available tokens is shown right there in the editor. Each function key can belong to only one macro, so assigning a key that's already used moves it to the new macro. HFConverse comes with a few starter macros (Call, Greeting, 73) which you can edit or delete.
The Send CQ macro
The first macro in the list, Send CQ button, is special: it's the text sent by the Send CQ button on the QSO and RTTY screens. You can edit its text like any other macro (to word your CQ how you like, using tokens such as <MYCALL>), but it can't be deleted, and it isn't assigned to a function key — it belongs to the Send CQ button instead. When you select it in the editor, the function-key control is disabled and a note reminds you it's the Send CQ button's macro. Its default text is CQ CQ CQ de <MYCALL> <MYCALL> <MYCALL> pse k.
On the Air (PACTOR presence)
The On the Air feature lets you announce that you're active on a PACTOR frequency, and see a live list of other stations doing the same. It replaces the old habit of announcing yourself in a chat group — HFConverse operators publish to a shared list that everyone running the app (and anyone visiting the web page) can see.
Open it from the On the Air menu. The window has two halves: the live list of stations on the air (left), and your own announce panel (right). It's a floating window — you can keep it open while you operate.
Frequencies are Centre Frequency (CF)
Throughout this feature, frequencies are shown and entered as Centre Frequency (CF) in kHz — not your dial reading. This is the PACTOR community convention: because SCS modems use a 1500 Hz centre tone, quoting the centre frequency lets operators with other equipment work out their own dial setting. On USB, your dial sits 1.5 kHz below the CF (e.g. 14109 CF = 14107.50 dial). HFConverse does this conversion for you when it tunes the radio.
Seeing who's on
The list shows each active station's callsign, CF frequency, activity and when they were last heard. It refreshes on its own. A station drops off the list automatically about 15 minutes after they stop announcing. View web page opens the same list in your browser at mw0gbq.hamserve.uk/presence.
Announcing yourself
Announcing is entirely optional and you choose when. Fill in the announce panel — your callsign, the CF you're on, and what you're doing (it pre-fills sensibly from the screen you were on) — and press Go on the air. A green LED shows you're on air; press Go off the air (red LED) to stop. While you're on air, HFConverse quietly re-announces every few minutes so you stay on the list, and removes you promptly when you go off.
HFConverse takes you off the air automatically when you close the operating mode or quit the app, so you won't be left showing as active after you've finished. (If the app is closed abnormally — a crash or power-loss — the list still clears you within about 15 minutes.)
Auto-presence on Send CQ
If you switch on ‘Auto presence: announce when I press Send CQ’ (in Settings ▸ Lookup & Presence), then pressing Send CQ on the QSO, RTTY, PSK31 or AMTOR screen automatically puts you on the air with your current frequency and mode. It stays opt-in — nothing is announced unless you both turn the setting on and send CQ.
Staying in sync while you're on the air
Once you're on the air — whether you pressed Go on the air yourself or auto-presence put you there — tuning to a new frequency or pressing Read From Radio on the operating screen updates your announced CF to match, so the list doesn't sit on a stale frequency until the next re-announce. This only ever refreshes an announcement that's already live; it never puts you on the air by itself.
Working a spot
Double-click a station in the list to go and work them. HFConverse asks you to confirm — and if the spot is in a different mode from the one you're in, it asks before switching (e.g. “Switch from QSO to RTTY and tune to 14109 CF?”). On confirming, it changes to the right mode (if it can tell which from their activity) and tunes your radio to their frequency. It never changes mode or frequency without asking first. (Tuning needs transceiver control set up; otherwise it tells you the frequency to set by hand.)
On the Air alerts (Pushover)
On the Air alerts send a notification to your phone, tablet or desktop when a station you're interested in comes up on the On the Air list. You don't need HFConverse running to receive them. Alerts are set up on the website, not in the app, and delivered by Pushover, a notification service.
Alerts cover PACTOR spots only for now. You get one alert when a matching station appears on the air in PACTOR, and another if it moves to a different band. Routine re-announces, frequency changes within the same band, going off the air and other modes don't send anything.
What you need
- A Pushover account.
- The Pushover app on each device you want alerts on (iPhone/iPad, Android, or desktop). Pushover is a one-time payment of US$4.99 per platform, paid to Pushover, not to HFConverse. There's no subscription.
- An email address, used to log in to the alerts page.
Setting up alerts
- Create your Pushover account at pushover.net/signup, then install the Pushover app and log in to it on your device(s).
- Find your user key. Log in at pushover.net. Your user key (30 letters and numbers) is shown at the top of the dashboard. Copy it.
- Log in to alerts at mw0gbq.hamserve.uk/alerts. Enter your email and press Email me a login link. Open the email and click the link, then press Log in. There's no password: the link works once and expires after 15 minutes, and the first time you use it your account is created. (Check your spam folder if it doesn't arrive.)
- Link Pushover. In the Pushover card, paste your user key and press Link. If the page shows a Connect Pushover button instead, press it and confirm on pushover.net; you'll be brought straight back.
- Send a test alert to check a notification arrives on your device.
- Add your rules (see below).
Alert rules
Each rule is a callsign and a band. Leave the callsign blank for any callsign, or choose Any band. For example:
- G4ABC · Any band: tell me whenever G4ABC comes up.
- Any callsign · 20m: tell me when anyone comes up on 20m.
- Any callsign · Any band: tell me about everyone.
Rules match the base callsign, so a rule for MW0GBQ also covers MW0GBQ/P, MW0GBQ/M and so on. If several of your rules match the same spot you still get just one alert. You can have up to 20 rules.
A typical alert reads "MW0GBQ/P is on the air — 20m", with "PACTOR on 14109.00 kHz (CF)" and "Activity: CQ · Grid: IO81" underneath. If the station changes band you get "MW0GBQ/P has moved to 40m". Tapping it opens the On the Air page. As on the list, the frequency is the centre frequency (CF).
Settings and limits
- Your callsign. Enter it under Settings and you won't be alerted when you come on the air yourself.
- Pause all alerts. Turns everything off without deleting your rules. Press Resume alerts to turn them back on.
- Quiet repeats. The same station on the same band won't alert you again for 60 minutes, so a station that drops off and comes back doesn't send a stream of pushes. A move to a different band still alerts straight away.
- Daily limit. There's a cap of 50 alerts per account per day.
- Stale alerts expire. Alerts disappear from your device after about 15 minutes, matching how long a spot stays on the list.
Stopping alerts and your data
Use Disconnect in the Pushover card to stop alerts on this site, or Delete my account under Account to remove your email, callsign, Pushover key, rules and alert history completely. If Pushover ever rejects your key (for example, you deleted your Pushover account), alerts stop and the page asks you to reconnect.
Worked Station (callsign lookup)
The Worked Station window shows you who you're working. Open it from the On the Air menu (or have it open automatically at startup — see Settings). Type a callsign and press Look up, or let it fill in automatically from the Working callsign box on the QSO, RTTY, PSK31 or AMTOR screen.
It shows:
- Country and flag — worked out from the callsign itself, so they always appear, even with no internet. (UK nations show their own flag — an MW call shows the Welsh dragon, a GM call the Scottish saltire, and so on.)
- Name, QTH and locator — from QRZ.com and/or HamQTH.com, if you've entered your lookup details in Settings.
- A photo — the operator's profile picture, if their record has one (blank otherwise).
- Distance and beam heading — the great-circle distance (in miles or kilometres, your choice in Settings) and the bearing in degrees, handy for pointing a beam. This needs your own locator set in Station Information, and the other station's locator (from the lookup).
Setting up lookups
In the Settings ▸ Lookup & Presence tab, enter your QRZ.com and/or HamQTH.com username and password. QRZ requires a paid XML subscription for full data; a HamQTH account is free. You can fill in either or both — if both are set, HFConverse tries QRZ first and falls back to HamQTH. Leave a username blank to switch that provider off. Your passwords are stored securely, separately from your other settings, the same way as your Winlink password.
Each provider has a Test button beside it: press it to check your credentials without leaving Settings — it attempts a real login and shows the result in green (connected) or red (with the reason it failed).
Choose miles or kilometres for the distance readout there too, and optionally tick show the Worked Station window on startup.
The flag and country always work with no account and no internet — the online details (name, QTH, locator, photo) are the part that needs a provider.
Logging a QSO
The Worked Station window is also where you log a contact. Above the buttons are two fields — Mode and Frequency (kHz) — and a large green Log QSO button.
- When you look up a station while operating in Keyboard QSO or RTTY, the Mode and Frequency fill in automatically from that mode screen — so logging is just one click.
- When you're working from the terminal (no mode screen open), pick the Mode from the dropdown and type the Frequency yourself.
- The Log QSO button stays disabled until there's a callsign, a mode and a frequency — the details a log entry needs.
Press Log QSO and the contact is saved. The button briefly changes to "Logged ✓" so you can't log the same contact twice by accident; it re-arms when you look up a new station. Signal reports are recorded as 599 (the usual convention on these modes).
Worked before? If you've logged a station on HFConverse before, an amber "Worked before on HFC" badge appears when you look them up, with the date and mode you last worked them.
The QSO log
Your contacts are kept in a simple ADIF log file. HFConverse's log is deliberately modest — it's not a full logbook (dedicated logging programs like Log4OM do that job): it's there to record your HFConverse contacts and hand them on cleanly.
Open Log ▸ QSO Log… to see it. The window lists your contacts newest-first, with a search box to filter by callsign, and an Export ADIF… button that saves a copy of the log you can import into any other logging program or upload to LoTW/eQSL. If you log a QSO while the window is open, it appears in the list straight away.
Sending QSOs to another logger
If you already run a logging program like Log4OM or Ham Radio Deluxe, HFConverse can send each QSO to it automatically over your network, so your main logbook stays complete.
In Settings ▸ Terminal & Modes ▸ QSO Logging, tick Send logged QSOs to an external logger over UDP, and set the host (use 127.0.0.1 if the logger runs on the same PC) and UDP port. In your logger, add an ADIF-message UDP inbound on that same port (in Log4OM: Connections ▸ Inbound). From then on, logging a QSO in HFConverse also sends it to that logger. Your own local log is always kept regardless of this setting.
Winlink email (Pending approval)
HFConverse includes a Winlink email client. Winlink is a worldwide radio email system; HFConverse currently connects to it over Telnet (an internet connection to the Winlink servers), with radio (PACTOR) transport planned for the future.
Registration note: connecting to Winlink's production servers requires your client to be registered with the Winlink Development Team. HFConverse's registration is in progress; testing is done against the development server.
The Mailbox
Open Winlink ▸ Mailbox…. The mailbox has three folders:
- Inbox — received messages.
- Outbox — messages composed and waiting to be sent.
- Sent — messages that have been sent.
Each message is stored as its own file, so your mail persists between sessions.
Composing a message
Use Compose to write a new message: enter recipient(s), a subject, the body, and optionally attach files. Press to queue it — the message goes to the Outbox ready to send.
You can also Reply, Reply All, or Forward an existing message; HFConverse pre-fills the recipients, subject (Re:/Fw:) and quoted body.
Deleting messages
Select a message and press Delete. You can select several messages at once (Ctrl-click to add individual ones, Shift-click to select a range) and delete them together. HFConverse always asks you to confirm first — "Are you sure you want to delete N emails?" — so a bulk delete can't happen by accident.
Sending and receiving
Press Send / Receive to open a session with the Winlink server. A Winlink session is bidirectional: in one session it sends anything waiting in your Outbox and collects any mail waiting for you — so it's worth running even when your Outbox is empty, just to check for incoming mail.
The session window shows a live log of the exchange, and lets you Copy or Save the log.
If the server declines a message, it's marked with the reason and a Retry button, rather than being silently re-sent forever.
Radio control (CAT)
HFConverse can control your transceiver's frequency in several ways, chosen in Settings ▸ CAT Configuration:
- None — no frequency control; you tune the radio by hand. Frequency controls in the operating screens are disabled.
- Modem drives the radio (Modem-TRX) — the modem itself controls the radio through its own transceiver-control port, using whichever "language" your radio speaks (see Choosing your radio type, below). You set your radio type, port parameters, and a frequency offset.
- Hamlib — HFConverse talks to a separately-running
rigctldprogram (part of the free Hamlib software package), which in turn talks to your radio. Useful for radios that have no direct connection to the modem — a network-controlled SDR transceiver, for example. - FlexRadio API (direct) — for FlexRadio owners, HFConverse talks straight to the radio's own network API, with no separate
rigctldprocess to run. Enter your Flex's IP address (and slice, if you use more than one) in Settings. - Direct Serial — the PC would drive the radio directly over a second serial port. Can be configured in Settings, but not yet functional (planned).
Tune, Read From Radio, and (on the QSO screen) Favorites all work the same way regardless of which of these three live modes — Modem-TRX, Hamlib, or FlexRadio API — you've chosen, on the Terminal, QSO and RTTY screens alike. Pick whichever mode matches how your radio is actually connected and configure it there; if CAT is set to None or Direct Serial, those controls stay disabled and you tune manually.
Choosing your radio type
When CAT is set to Modem drives the radio, start by picking your Radio Type. The fields underneath it change to match, so you'll only ever see the settings your particular radio actually needs.
One thing worth knowing before you pick: some newer Yaesu radios aren't controlled as "Yaesu" at all. The FT-450, FT-950, FT-2000 and FT-9000 use a Kenwood-style protocol on their remote-control port, not Yaesu's own. If you have one of these four models, set Radio Type to Kenwood, then use the "This radio is" field that appears underneath to pick the Yaesu option shown there — Radio Type itself stays on Kenwood. If your Yaesu is a different model, set Radio Type to Yaesu as normal, and pick your exact model from the list that appears — tuning works either way, but the modem needs to know your exact model before "Read from radio" will work.
Setting up Hamlib (rigctld)
Hamlib is a free, separate program from the SCS/HFConverse world — it's the standard way a lot of ham radio software talks to a radio it doesn't have a built-in driver for. HFConverse doesn't open a serial port or talk to your radio directly in this mode: you run rigctld yourself (Hamlib's background daemon), and HFConverse connects to it over a plain TCP connection. This is the right choice for a radio that has no direct link to the modem — a network-controlled SDR transceiver is the typical case.
There are two separate links to get right, and it helps to hold them apart from the start: rigctld to your radio (a serial cable, or a network connection), and HFConverse to rigctld (always a TCP connection, normally on port 4532). Most setup trouble comes from mixing the two up.
1. Install Hamlib
Install it on the machine that can actually reach your radio. That doesn't have to be the same machine running HFConverse — the two only need a network path between them — but the simplest setup by far is both on one computer.
Hamlib is published by the Hamlib project itself; on Windows take the official release build, on macOS it's usually installed with Homebrew, and on Linux it's in your distribution's package manager (often as libhamlib-utils).
Windows: note where it installed to. The Windows build typically lands somewhere like
C:\Program Files\Hamlib-w64-4.7.2\bin\and doesn't necessarily add itself to your PATH. If a command that starts withrigctldcomes back as "not recognised", that's all this is — change to that folder first (cd "C:\Program Files\Hamlib-w64-4.7.2\bin") and run it from there. Nothing is broken.
2. Find your radio's model number
Every radio Hamlib supports has a number, and this is what tells rigctld which "language" to speak. Run rigctl --list to see them — it's a long list (well over a thousand), so filter it rather than scrolling: rigctl --list | findstr /i yaesu on Windows, or rigctl --list | grep -i yaesu on macOS and Linux. If rigctl isn't recognised, it's the PATH point above — run it from the Hamlib folder.
FlexRadio owners — a genuine trap. Model 2036 looks like the obvious choice and turns up in plenty of forum posts, but it only emulates legacy Kenwood CAT over the network. Models 23005–23012 are the modern native backends, one per slice (A–H), and talk to the radio's own network API directly. 23005 (slice A) is the one to start with, and it's what was used to verify this during development — including confirming that the SmartSDR desktop application does not need to be open for it to work.
3. Fill in the Hamlib settings in HFConverse
In Settings ▸ CAT Configuration, set Control Method to Hamlib, then complete the panel underneath:
- Host — where rigctld is running:
127.0.0.1if that's this same computer, otherwise that machine's IP address. - Port — the port rigctld listens on for programs like HFConverse.
4532unless you deliberately change it. - Rig Model — the number you found in step 2.
- Radio Device — what rigctld connects to on the radio side: a serial port (
COM3,/dev/ttyUSB0) for a cabled radio, oraddress:portfor a networked one (a FlexRadio's own API is port 4992, so192.168.1.50:4992). HFConverse never opens this itself — rigctld does. - Serial Speed — only for a cabled radio; leave it blank for a networked one.
4. Copy the command and start rigctld
As you fill those in, the Command preview box at the bottom of the panel builds the exact command to start rigctld with. Click Copy command, paste it into a terminal window, and run it. The button stays disabled until Rig Model and Radio Device are both filled in, since a command with gaps in it wouldn't run.
Two things to know about that terminal window:
- rigctld must stay running for the whole session. It's not a background service — it runs in that window, and closing the window stops it, which will take your radio control down mid-QSO. Leave it open and minimised.
- Start rigctld before you connect in HFConverse, not after. HFConverse looks for it at connect time.
If you want more detail while you're getting things working, add -vvvvv to the end of the command by hand — rigctld will then report every exchange with the radio, which makes it obvious whether the problem is at the radio end or HFConverse's.
5. Prove it works before you rely on it
Connect in HFConverse as normal, then:
- Press Read From Radio on the terminal screen. A frequency appearing means the whole chain — HFConverse → rigctld → radio — is working.
- Run Test PTT (Settings ▸ CAT Configuration ▸ Radio Test). It keys the radio briefly after a confirmation prompt, then reads the radio's own reported state back to check it genuinely keyed rather than just accepting the command. Worth doing once before you trust PTT in a real QSO.
If it doesn't work
| What you see | What it usually means |
|---|---|
rigctld "is not recognised" / "command not found" |
rigctld isn't on your PATH. cd to the Hamlib folder and run it from there. |
| rigctld exits immediately, complaining it can't open the port | Something else already has the radio's serial port — a logger, or another CAT program. Only one program can hold it at a time. Close the other one. |
| rigctld reports "Permission denied" on Linux | Your user isn't in the dialout group, which owns serial devices. Add yourself, then log out and back in. |
| rigctld starts, but HFConverse's log says it can't reach it | The HFConverse → rigctld link. Check Host and Port match where rigctld is actually listening, and that rigctld is still running in its window. |
| Both connect, but "Unable to read radio frequency" | The rigctld → radio link. Usually the wrong model number, or the wrong Radio Device/Serial Speed. Restart rigctld with -vvvvv and watch what it says when you press Read From Radio. |
PTT (Hamlib and FlexRadio API)
For a radio reached over Hamlib or the FlexRadio API — i.e. one with no direct hardware PTT line to the modem — HFConverse can key and unkey PTT for you automatically:
- Automatic, follows the modem. Once connected, HFConverse watches the modem's own transmit/receive status and keys PTT on the instant it becomes the sender, unkeying again the instant it goes back to receive — for both PACTOR QSOs and RTTY. There's nothing to press for this during normal operating; it just tracks what the modem is already doing.
- Fail-safe watchdog. If PTT is somehow left continuously keyed for an extended period (about 10 minutes — well beyond any normal PACTOR over or RTTY transmit burst), it is forced off automatically, regardless of what the rest of the app thinks the state is.
- Test PTT (Settings ▸ CAT Configuration ▸ Radio Test) briefly keys the radio, after a confirmation prompt, and — unlike simply trusting that rigctld or the Flex API accepted the command — reads the radio's own reported PTT state back to confirm it actually keyed, then confirms it cleanly unkeys again afterward. Use this once after setting up Hamlib or the FlexRadio API, to prove the whole chain (HFConverse → rigctld/API → radio) genuinely works before relying on it in a QSO.
- If a PTT command is ever rejected, you'll see a note in the terminal log (
rigctld did not accept PTT on/offor the FlexRadio equivalent) rather than it failing silently.
Modem-TRX (the PTC driving the radio directly) is unaffected by any of this — PTT there is a dedicated hardware line (manual: Pin 3) the modem switches itself, independent of CAT, so none of the above applies.
Reading the radio's frequency
With CAT set to Modem drives the radio, Hamlib, or FlexRadio API, HFConverse reads the radio's current frequency and shows it for you automatically: when you first connect, and again each time you open the QSO, RTTY, PSK31 or AMTOR screen (the radio is the source of truth, so it's re-read rather than remembered). You can also press Read From Radio on the terminal or any of those screens at any time. If the radio doesn't answer, you'll see an "Unable to read radio frequency" message on the terminal; on the operating screens it quietly keeps your last-used frequency instead.
Max PACTOR Level — what the modem is actually using
The Max PACTOR Level dropdown (Settings ▸ Equipment ▸ Modem) is what HFConverse asks the modem to use, sent automatically every time you connect. If your modem doesn't support the level you've picked (for example, PACTOR-4 on a PTC-IIusb, which only goes up to PACTOR-2), HFConverse quietly asks for the highest level your modem actually supports instead — you're never left with a setting the modem can't honour. Once you're connected, a note underneath the dropdown shows the level the modem actually reports back, so you can always see what's really in effect rather than just what you selected.
SCS P4 Dragon (DR-7800/DR-7400) owners — picking level 3 specifically: these modems ship with a compatibility mode switched on by default (for working with older PACTOR software) that has an odd side effect: asking for level 3 makes the modem silently store level 4 instead. It only affects a deliberate choice of 3 — 1, 2 and 4 all work exactly as selected, and if you just leave it on the modem's maximum you'll never notice, since 3-becomes-4 and "already 4" land in the same place. If you do need to genuinely cap a link at PACTOR-3 on one of these modems, Settings will show a note explaining this when level 3 is selected; HFConverse doesn't currently turn that compatibility mode off for you.
Modem audio output level (FSK/PSK)
Separately from your radio's own power and mic-gain, the modem itself has a transmit audio output level you can adjust — how "loud" the modem drives the radio's audio input. This is in Settings ▸ Equipment ▸ Modem, underneath Max PACTOR Level, as two sliders:
- FSK output level — used for FSK modes (PACTOR-1, AMTOR, RTTY), 30–3000 mV peak-to-peak, default 60.
- PSK output level — used for PSK modes (PACTOR-2/3), 30–3000 mV peak-to-peak, default 140.
When no modem is connected, the sliders show the levels you last saved. Once you're connected they show the modem's own current values — while HFConverse is reading those from the modem the sliders are briefly disabled, with a "Reading current FSK/PSK/PACTOR levels from the modem…" note, so an edit you make can't be quietly overwritten by that read finishing a moment later. Changes only take effect when you click Save in the Settings window, the same as every other setting — dragging a slider doesn't change anything on the modem until you save.
How to use these: set your radio's own mic-gain/drive level first, using whatever facility your radio provides — these sliders are for fine trim afterwards, not the primary way to set your transmit audio. The manual recommends leaving the PSK level near its default (140) and doing most of your level-setting with the radio's mic-gain instead.
The modem forgets these every time it is switched off. Both levels live in the modem's memory only — power it off and they return to 60 mV FSK / 140 mV PSK, whatever you had set. HFConverse remembers the levels you save here and sends them back to the modem automatically each time it connects, so a power cycle no longer costs you your settings; you'll see a line in the terminal log confirming what was restored. Two things worth knowing: HFConverse only does this once you've saved these levels at least once (until then it leaves your modem exactly as it finds it), and if the modem restarts while HFConverse is still connected it can't tell — reconnect to get your levels back.
Serial baud rate (PC to modem)
The speed HFConverse and the modem talk to each other over the serial cable is set in Settings ▸ Equipment ▸ Modem, under Baud rate. The dropdown is greyed out until you're connected, and lists the rates your particular modem supports — plus Auto, which lets the modem work the speed out for itself each time it powers up.
When you're connected, the dropdown shows what the modem is currently set to. Change it and click Save and you'll see: "Baud rate change will take place following a modem reboot." This is the modem's own behaviour, not a limitation of HFConverse — it only adopts a new serial rate at its next power-on. A reset command won't do it; the modem has to be physically switched off and on. HFConverse remembers the new rate and will use it when you reconnect afterwards.
If you're unsure, leave it on Auto. A fixed rate is mainly useful when the modem is switched on by a timer, or needs to be ready for a host-mode program the moment it powers up, without waiting to be spoken to first.
Settings reference
Open with Settings ▸ Configuration…. Settings are organised into focused tabs:
- Station — your identity (callsign, selcall, operator name, QTH, locator, email) and postal address.
- Equipment — radio/TRX, antenna and power, plus your modem model (chosen from a list of SCS models, or "Other"), modem behaviour, the serial baud rate between PC and modem, and (under Max PACTOR Level) the FSK/PSK transmit output level sliders — see Modem audio output level and Serial baud rate, above.
- Winlink — your Winlink address, the CMS Telnet host/port, and your Winlink password.
- Lookup & Presence — QRZ/HamQTH lookup credentials (with Test buttons), distance units (miles/km), and auto-presence.
- Terminal & Modes — terminal defaults (local echo, hex view, line-ending, logging), the Keyboard-to-Keyboard (QSO) over-mode, your QSL card, and QSO logging (broadcast a copy of each logged QSO to an external logger over UDP).
- Appearance & Startup — the interface theme, auto-connect on startup and its countdown, and whether to show the On the Air and Worked Station windows on startup.
- CAT Configuration — transceiver control mode and its parameters (see Radio control).
Saving and unsaved changes
The Save button writes your settings; Close leaves the window. If you've made changes and try to Close (or close the window with the X) without saving, HFConverse asks whether to Save, Discard, or Cancel — so you can't lose edits by closing the window absent-mindedly.
Theme (light, dark or system)
Under Appearance & Startup you can choose a Dark (default), Light, or System interface. System matches your computer's own light/dark setting. Light mode applies to the menus, dialogs and panels; the terminal, QSO and RTTY console panes stay dark on purpose (a console is easier to read that way). A theme change — including System — takes effect the next time you start HFConverse (System reads your computer's setting at startup), and the setting shows a reminder when a change is pending.
Help, About & supporting HFC
The Help menu has three items:
- Donate to HFC… — HFConverse is free. If you find it useful and would like to contribute towards its development, this opens a short, no-pressure window with a link to the donation page. It's entirely optional — there are no nag screens, and the app is fully functional whether or not you ever donate.
- Support… — opens the HFConverse support/help page in your web browser (for help using the software — as distinct from donating).
- About HFConverse… — shows the version, author, a short description, and a link to donate.
When you update to a new version, HFConverse shows a brief one-time note letting you know what version you're now on and pointing at the Donate option — shown once per update, never repeatedly, and never on a fresh install.
Checking your version (for HFC-to-HFC testing)
If you're testing HFC-to-HFC with another operator — each of you running your own copy of HFConverse against your own SCS modem — it's worth both checking Help ▸ About HFConverse… before a session and confirming you're on the same version number (shown as four parts, e.g. 1.0.0.1). A version mismatch isn't necessarily a problem, but if something behaves unexpectedly during a test, a version check is a quick first thing to rule out.
Appendix: a note on frequencies and modes
- Frequencies throughout HFConverse are entered in kHz (e.g.
14083.0). (In the QSO log they are stored in MHz, as the ADIF standard requires — HFConverse converts for you, so you always type kHz.) - The QSO-log Mode list offers the modes the SCS PTC-IIusb operates and that you'd log as a two-way contact: PACTOR, RTTY, AMTOR, PACKET, PSK, CW, SSTV. (Maritime modes may be added later.)
- For RTTY and AMTOR with the standard tone settings, your transceiver sideband matters — check your modem's manual for the correct sideband for the tone pair you've selected.
- RTTY is conventionally operated at 45 baud, 170 Hz shift on the amateur HF bands.
This is a working draft. Sections are added as features are built. A final edit — consistent voice, screenshots, worked examples — will follow once the application is feature-complete.