FT-991A: complete and tested on a real radio. FTDX10, FTDX101D, FTDX101MP and FT-710 have experimental profiles (written from their CAT manuals, tested only against a simulator): other radios. A built-in simulator ("mock") lets you try everything without a radio. What each radio supports: capability matrix.
Connect the radio's rear USB jack straight to the Pi (a short, good-quality cable; avoid unpowered hubs). Switch the radio on.
lsusb # expect a "Silicon Labs CP210x" entry (CAT) and a "USB Audio CODEC"-style entry
ls /dev/serial/by-id/ # the FT-991A's USB bridge presents TWO serial ports (CAT and a second one)
arecord -l ; aplay -l # the radio's sound card, e.g. "card 1: CODEC [USB Audio CODEC]"
The app finds the CAT port itself: it probes only Silicon Labs USB serial ports, sending the read-only ID; and
accepting the one that answers ID0670; (FT-991A). You can also set radio.serial_port explicitly (Admin > Config). The service user must be in
group dialout (the installer does this). Only one program may use the port: close any other CAT software. If the radio is switched off
or unplugged the page shows it as offline and reconnects by itself.
You set these once on the radio. The only menus the program changes by itself are the microphone source ones (below), when you press the microphone button or the last operator leaves. Menu numbers are from the official CAT manual (1711-D).
Basics (every use)
| Menu | Setting | Value |
|---|---|---|
| 031 CAT RATE | 4800 / 9600 / 19200 / 38400 | 38400 (the default of the app; if you change it set radio.baud to match) |
| 036 TX TOT | OFF, 1-30 min | set a value (e.g. 3 min): the radio's own backstop if the Pi ever fails |
| 047, 071, 076, 108 (PTT select) | DAKY / RTS / DTR | DAKY, so nothing can key the radio by toggling the RTS/DTR serial lines. The app opens the port with DTR/RTS low regardless |
| 033 CAT RTS | ENABLE / DISABLE | DISABLE. With ENABLE the radio only talks while the RTS line is high, and the app never raises RTS (it could key the radio); the radio then stays silent and the app says "radio offline" (seen after a factory reset) |
| 032 CAT TOT | leave at the default; raise it only if you see CAT timeouts |
Microphone source: managed by the app (0 = MIC, 1 = REAR)
| Menu | Mode | Remote in use (microphone button on) | Nobody remote (at the radio) |
|---|---|---|---|
| 106 SSB MIC SELECT | SSB | REAR | MIC |
| 045 AM MIC SELECT | AM | REAR | MIC |
| 074 FM MIC SELECT | FM, C4FM | REAR | MIC |
| 070 DATA IN SELECT | DATA modes | REAR | stays REAR (it only matters in the DATA modes) |
Where the audio comes in and goes out: USB (bench-found on a real FT-991A after a reset: the app keyed the radio but no RF came out, because the port menus were on DATA)
| Menu | Mode | Value |
|---|---|---|
| 109 SSB PORT SELECT | SSB | USB (1) |
| 048 AM PORT SELECT | AM | USB (1) |
| 077 FM PORT SELECT | FM, C4FM | USB (1) |
| 072 DATA PORT SELECT | DATA modes | USB (1; see the FreeDV table) |
If PTT from the app keys the radio but an external power meter shows nothing (in SSB, no audio means no RF), check these first.
Receive level sent to the Pi (0-100, default 50): 107 SSB OUT LEVEL in USB/LSB, 073 DATA OUT LEVEL in the DATA modes (and 046 AM, 075 FM, 054 CW, 099 RTTY). If the browser audio is too quiet,
raise it (90 was right on one tested radio, 50 on another) before using audio.rx_gain_db.
FreeDV in the DATA modes (the FreeDV guide's setup; switch on the FreeDV tab's DATA option after setting them)
| Menu | Setting | Value |
|---|---|---|
| 059 CW FREQ DISPLAY | DIRECT FREQ | |
| 062 DATA MODE | PSK / OTHER | OTHER |
| 064 OTHER DISP (SSB), 065 OTHER SHIFT (SSB) | +1500 Hz both | |
| 066 DATA LCUT FREQ, 068 DATA HCUT FREQ | OFF both | |
| 070 DATA IN SELECT | MIC / REAR | REAR |
| 071 DATA PTT SELECT | DAKY | |
| 072 DATA PORT SELECT | DATA / USB | USB (the manual numbers it 1 = DATA, 2 = USB, but a real radio took 0 = DATA, 1 = USB: check the display) |
Not set for FreeDV, but worth knowing: 110 SSB TX BPF narrows the SSB transmit audio (it matters only if you use plain USB/LSB for FreeDV, which is why the DATA modes are recommended), and the speech processor must be off.
Other menus that decide where transmit audio comes from and where receive audio goes (109 SSB PORT SELECT and the AM/FM equivalents) are listed in the manual but without a ready recipe: if your audio does not flow, follow the steps in audio and change one menu at a time.
Power off is an administrator button in the page (PS0;). Power on radio appears in the offline banner when the radio is in standby
(the server sends dummy data, waits 1.4 s, then PS1;, as the manual requires). Both work over USB on the FT-991A, because its USB serial port
stays available in standby while the DC supply is on.
[radio]
model = "ft991a"
serial_port = "auto" # or "/dev/ttyUSB0"; stable names are under /dev/serial/by-id/
baud = 38400
[audio]
backend = "auto" # real radio -> alsa
input_device = "" # radio -> Pi, e.g. "plughw:CARD=CODEC,DEV=0"; empty = auto when exactly one USB audio CODEC exists
output_device = "" # Pi -> radio
A device name is an ALSA name such as plughw:CARD=CODEC,DEV=0, not a bare number (a number like 0 is refused). Leave both empty unless
auto-detection fails.