Your first five minutes#
Digital Command Center (DCC), by KM4SPL, brings digital activity, a waterfall, a station map, and operating controls into one dashboard. Start with the browser demo; no radio, installation, or microphone access is needed.
- Open the gear menu, choose Profiles, and enter your callsign and Maidenhead grid. Watch for the saved indicator.
- Choose 20m and FT8 beside the dial. Leave Radio mode on USB-D for this test.
- Click Next cycle to receive sample messages. Green rows are stations calling CQ.
- Click a caller once to select it and set your receive offset. Double-click a CQ caller to enable simulated TX.
- Advance with Next cycle to follow the exchange, then open Session log. Use STOP ALL TX to end transmitting and disable automation.
The demo simulates a connected radio and a matched antenna. The messages, audio, transmissions, and contacts are generated examples. They are not on-air contacts.
Choose the right version#
| Version | Use it for | What you need |
|---|---|---|
| Browser demo | Learning controls and testing simulated contacts in all six modes. | A current browser. No radio required. |
| Decoder source preview | Current receive integrations, station audio, and local WAV decoding. | Python 3.11+, dependencies, and the relevant decoder applications. |
| Windows Alpha 1 | An earlier packaged, receive-only interface preview. | Windows 10/11. Extract and run DigitalCommandCenter.exe. |
The source preview is not a one-click Windows executable. Windows Alpha 1 does not include the newer multi-mode decoder integrations. Updating the website demo does not update an installed application.
Use the Projects download section for published files, checksums, and release notes. A prebuilt Raspberry Pi package is not currently published.
Set your station profile#
Open Settings → Profiles. Enter your station callsign, operator callsign, grid, profile name, and radio information. The demo begins with sample IC-705 and IC-7300 profiles; you can choose other radios from the searchable Hamlib catalog.
A grid such as EM92 or FN31 identifies an area of the world. Use your own station grid for a meaningful home position on the map. Changing profiles stops simulated TX.
Demo profile edits save as you type. Wait for the saved indicator before closing the page. Selecting a radio name in a profile identifies the station; configuring a real connection is a separate step in the Radio setup wizard.
Explore radio setup and Hamlib#
Choose Configure radio or Settings → Radio → Get my radio connected. The demo includes an offline Hamlib catalog with 313 backends. The installed app uses the catalog supplied by its installed Hamlib version.
- Search for the manufacturer or model and select the matching backend.
- Choose the connection type: serial CAT, network CAT, or an existing rigctld server.
- Enter the port or address. Serial examples include COM ports on Windows and device paths on Linux. Network connections use host:port.
- Choose the radio's baud setting or backend default. Set a CI-V address only when the radio requires it.
- Select capture and playback devices when available. Review any advanced settings, run the offered check, then save.
Leave unfamiliar advanced fields blank to use backend defaults. Changing a model clears its overrides. Editing setup after a successful check requires another check.
A demo check is simulated. A listed backend does not guarantee that every meter, data mode, or control works on that radio. The current source preview's service-based connection workflow needs a configured Linux radio host; selecting a COM port does not install a Windows CAT service. See Real radio host setup.
Band, radio mode, and digital mode#
Band selects a frequency preset. Radio mode is the transceiver's modulation setting, such as USB-D or USB. Digital mode selects the signal format, such as FT8 or RTTY. These are separate choices.
| Digital mode | Purpose | Timing / receive engine |
|---|---|---|
| FT8 | Short weak-signal contacts | 15-second periods; WSJT-X jt9 |
| FT4 | Faster short contacts | 7.5-second periods; WSJT-X jt9 |
| JS8 | Keyboard messages | JS8Call handles receive speeds; the demo uses normal-speed examples |
| WSPR | Propagation beacons | 120-second periods; WSJT-X wsprd |
| PSK31 | Text conversations | Continuous text via fldigi's BPSK31 modem |
| RTTY | Radioteletype text | Continuous text via fldigi's RTTY modem |
The demo changes presets and stops TX when you change modes. Unavailable band presets are disabled; switching from an unsupported band returns the demo to 20m. Text modes use generated message batches so Next cycle remains useful.
The installed decoder selector does not automatically retune hardware. Its band control uses the selected digital mode's presets. Presets are starting points; choose a frequency suitable for your station and local band plan.
Tune the RX and TX waterfall markers#
The large dial is the radio frequency. The waterfall shows audio offsets inside the received passband. For example, an RX marker at 1500 Hz is an audio offset, not a replacement for the MHz dial setting.
- Green / RX: the audio offset you are listening to.
- Red / TX: the selected transmit audio offset.
- Click the waterfall to move RX. Hold Shift while clicking to move TX.
- Drag either marker, or enter an exact value in the RX / TX boxes.
- With a marker focused, use Left / Right for 10-Hz steps, Shift + Left / Right for 1-Hz steps, and Home / End for the edges.
The demo covers 0–3000 Hz. Hold TX frequency keeps the TX marker independent when you select another caller. Find clear chooses a gap between the sample signals for TX.
Click the minus button above the waterfall to collapse it. Band, mode, dial, and offset controls remain available, while Band Activity and RX Frequency gain room. The plus button restores it; the collapsed state is saved.
Read Band Activity and RX Frequency#
Band Activity shows decoded messages across the displayed passband. RX Frequency shows messages near your chosen receive offset. In the demo that window is ±50 Hz.
Click a station's message to move RX to its audio frequency. The demo retains bounded history in both panes and inserts UTC dividers between receive periods; it does not empty the panes after each cycle. Changing digital modes starts a fresh set of demo activity for that mode.
Columns show UTC time, signal-to-noise ratio in dB, timing difference (DT), audio offset in Hz, and message text. A missing measurement appears as a dash; external text decoders may not provide all measurements.
The installed receiver keeps a bounded history per mode. Its RX tolerance is at least ±50 Hz and widens for broader modes such as RTTY.
Station colors and worked filters#
- Green: a station calling CQ.
- Red: your current contact while simulated TX is enabled.
- Normal background: other traffic, including stations exchanging messages with somebody else.
- A selection outline identifies the row you clicked; it does not mean you are transmitting.
Hide worked stations, beneath Auto sequence, hides calls already in the demo session log on the current band and mode. It affects the receive panes, roster, and map. Turn it off to see those stations again.
Skip worked changes which stations the simulator chooses for automated calls. Hiding a row and skipping it during automation are different controls.
Enable TX, answer CQ, and stop#
Double-click a CQ message to select the station and arm simulated TX for the opposite period. One click selects a station without arming TX. You can also use ENABLE TX after selecting a caller.
Armed means waiting for a transmit period; it does not mean the transmitter is already active. The lower-right radio box shows the state and countdown. It turns red during TX or Tune. Reception is muted during transmission, and a partly transmitted period cannot later produce a normal receive decode.
TUNE starts a simulated test tone with a 15-second limit. Press it again to cancel. STOP ALL TX ends TX and Tune and disables the automation controls. Changing band, profile, or mode also stops simulated TX.
WSPR is a receive-beacon demonstration: Enable TX and Log QSO are unavailable. The downloadable decoder preview is receive-only; demo transmit controls do not unlock real transmission.
Automation and contact sequences#
Auto sequence advances the sample exchange through replies and acknowledgments. Turn it off to choose a message in the TX Sequence list yourself.
- Tx even / 1st: chooses which alternating period the simulator uses.
- Hold TX freq: keeps the transmit offset fixed when selecting another station.
- Auto CQ: permits repeated CQ messages when the simulated transmitter is armed.
- Auto answer / CQ + answer: allow generated caller replies and contact progression in the simulator.
- CQ limit / Retry: bound repeated calls and retries in the simulated exchange.
Use Next cycle to see the result without waiting. FT8 and FT4 have different period lengths. JS8, PSK31, and RTTY examples demonstrate text exchanges; their real operating workflows are handled by their decoder applications.
TX Drive / ALC and safety meters#
The TX DRIVE / ALC slider sits directly below the safety meters. It changes simulated drive from 0–100% and remembers the setting.
With AUTO ALC — LOWER ONLY enabled, drive is capped at 65%. With that control off, higher drive produces a rising simulated ALC reading during TX or Tune. ALC returns to zero during receive. Reducing drive below 50% also reduces simulated forward power.
The demo assumes a matched antenna on each band, so SWR stays at 1.2:1. Forward and reflected power follow the simulated transmit state. These readings illustrate the interface; they do not measure an attached radio or antenna.
ALC means automatic level control. On actual hardware, use the radio and mode software's documentation to set audio drive; the demo's percentage thresholds are not a calibration for your transmitter.
Map, roster, and panel layout#
The map uses decoded station grids. The roster lists callsigns, grids, available signal information, and recent activity. A station without a usable grid cannot be placed accurately on the map.
Click a map marker or roster row for details. Use + / − to zoom, drag the map to pan, and use its view/reset controls to restore the view. Grid and signal-strength filters adjust what is shown.
The minus button at the top right of the map collapses the map and makes more room for the roster. Its saved state is independent of the waterfall's collapse control. The buttons become plus buttons when their panels are collapsed.
Temperature, double-click behavior, and sound#
Open Settings → System → Demo preferences to choose Fahrenheit or Celsius. Fahrenheit is the default. The same section can disable double-clicking a CQ station to enable TX.
Sound on starts synthetic digital-mode tones through your speakers. Set the demo volume with its nearby slider. Sound starts off on each load and mutes when you pause, hide the tab, or leave the page.
The sound is a simulation, not an encoded recording of the displayed messages. It does not use a microphone or open a radio connection. Pause freezes the simulation; Next cycle advances sample activity.
What stays saved#
The demo saves station profiles, the selected profile, radio setup, digital/radio mode choices, TX drive, and display preferences in that browser's storage. Profile edits save automatically; a status label confirms saving or reports unavailable storage.
Keep using the same browser, device, and website address to see those settings again. Private browsing, clearing site data, or changing browsers can remove or separate them. There is no account-based cloud synchronization.
Simulated contact logs and receive activity are temporary. Reloading starts a new session. Demo storage is separate from the installed station app's data. For a full demo reset, clearing this site's browser data removes saved profiles and preferences; record anything you want to keep first.
Session logging#
Open Session log in the demo banner to review simulated contacts. A completed automatic exchange or LOG QSO adds the selected contact. Duplicate calls on the same band and mode are not added twice.
The session log shows time, callsign, grid, band, digital mode, and radio. It clears when the page reloads. WSPR beacons are not two-way contacts and cannot be logged through this demo QSO control.
The installed interface includes ADIF import/export controls where supported. Demo contacts are learning examples; do not submit them as real contacts or award credit. This website's demo log is not synchronized with QRZ.
Install the decoder source preview on Windows#
- Install Python 3.11 or newer.
- Download and extract the decoder source ZIP.
- Open a terminal inside the extracted
dccfolder, whererun.pyandrequirements.txtare located. - Run the commands below. The first install needs internet access to obtain Python packages.
py -3 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe run.py --no-audio
Open http://127.0.0.1:8765 on that computer. Keep the terminal open while using the app. Press Ctrl+C there to stop it. To start again, run the last command from the same folder.
--no-audio is ideal without a radio: it allows local WAV tests and external decoder integrations without opening a microphone. Install the decoder engines described below before expecting real decodes.
Windows Alpha 1 has a different startup: extract its ZIP and run DigitalCommandCenter.exe. These Python instructions apply to the source preview.
Install on Linux or Raspberry Pi#
Use the decoder source ZIP. Install Python 3.11+, your distribution's Python virtual-environment support, and ALSA utilities. Install WSJT-X, JS8Call, or fldigi for the modes you plan to receive. Some platforms may need system libraries or build tools for Python audio dependencies.
From the extracted dcc folder:
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python run.py --no-audio
Open http://127.0.0.1:8765 in a browser on the same machine. The launcher binds to localhost. Running on a remote radio host with a service manager is a separate deployment step; this ZIP does not install those services automatically.
For ALSA capture, the default input is plughw:CARD=CODEC,DEV=0. Set FT8_AUDIO_DEVICE for a different ALSA input before starting without --no-audio. The optional --device argument selects PortAudio instead.
Select the radio audio input#
CAT controls the radio; audio carries the signal to be decoded. A working CAT connection alone does not supply receive audio.
On Windows, list audio devices and then select the radio's USB input:
.\.venv\Scripts\python.exe run.py --list-audio
.\.venv\Scripts\python.exe run.py --device "USB Audio CODEC"
Use the exact name shown on your computer, or its numeric device index. Names vary by radio and driver. Avoid selecting the computer microphone when the intended source is USB radio audio. Stop the previous app instance before restarting with another input.
The direct receiver captures mono 16-bit audio and resamples it to 12 kHz for the WSJT-X engines. Full, correctly timed receive periods matter: missing audio and incomplete initial cycles are discarded. Keep the computer clock synchronized for live weak-signal reception.
For JS8 or fldigi modes, choose the input in those applications; DCC receives their decoded output. You can leave DCC on --no-audio for those integrations.
Set up FT8, FT4, and WSPR#
Install WSJT-X. DCC runs its jt9 decoder for FT8 and FT4 and its wsprd decoder for WSPR in separate temporary working folders.
Keep the full WSJT-X installation intact, including its libraries. DCC searches PATH and common Windows locations including C:\WSJT\wsjtx\bin and C:\Program Files\WSJT-X\bin. For another location, set these in the same terminal before starting DCC:
$env:DCC_JT9_PATH='C:\your-wsjtx-folder\bin\jt9.exe'
$env:DCC_WSPRD_PATH='C:\your-wsjtx-folder\bin\wsprd.exe'
Replace those example paths with the files on your computer. Open Decoder setup / Test WAV in the installed app to check engine availability. Select the digital mode, provide audio, and allow a full receive period.
WSPR uses two-minute beacon periods and does not follow an FT8-style CQ exchange. Its records include available callsign, grid, transmit power, frequency, and drift. These receive integrations never key the transmitter.
Set up JS8Call reception#
- Install and open JS8Call.
- Configure its radio audio input and start receiving.
- In its Reporting/API settings, enable the TCP API on
127.0.0.1:2242. - Select JS8 in DCC's digital-mode selector.
DCC receives activity and directed messages, including callsign, grid, audio offset, signal report, and speed when JS8Call supplies them. JS8Call handles the signal decoding and receive speeds.
If you use another TCP port, set DCC_JS8_PORT before starting DCC. Keep JS8Call running. DCC reconnects after a connection failure and reports missing API access in its status area. The integration does not send messages or control PTT.
Set up PSK31 and RTTY with fldigi#
- Install and open fldigi, then configure its receive audio.
- Enable its XML-RPC server on
127.0.0.1:7362. - Choose BPSK31 for PSK31, or RTTY for RTTY.
- Select the matching digital mode in DCC.
For conventional amateur RTTY, 45.45 baud and 170-Hz shift are useful starting settings; match the actual received signal. Choose the carrier/audio offset in fldigi. Set DCC's RX offset near that carrier to include its text in RX Frequency.
DCC reads newly received text without clearing fldigi's receive buffer. Existing text is skipped when first connecting. Short incoming fragments are joined for readability. It reports a modem mismatch when the applications are set to different modes.
Set DCC_FLDIGI_PORT before starting DCC if your server uses another port. This integration does not tune fldigi's radio, add transmit text, or start transmission.
Decode a recording without a radio#
- Start the source preview with
--no-audio. - Open Decoder setup / Test WAV.
- Choose FT8, FT4, or WSPR as the recording mode.
- Select an uncompressed mono 16-bit WAV, then click Decode recording.
The recording limit is 125 seconds and 25 MB. Choose the correct mode for the recording. Longer supported recordings are processed one period at a time; a short incomplete tail is skipped. A standalone shorter recording can be attempted, but missing signal audio may prevent decoding.
Results appear in the test window. The file goes to your local DCC app, not to km4spl.com. To test JS8, use JS8Call's recording playback; for PSK31 or RTTY, use fldigi's File → Audio → Playback.
Official example recordings are available with the WSJT-X user guide. The browser demo's generated tones are not recordings suitable for validating a decoder.
Real radio host setup#
The source preview includes a Hamlib setup worker and receive-only rigctld configuration. Applying a connection through that workflow requires the matching Linux radio service, setup worker, permissions, and shared data directory. These services are not installed by opening the demo or running the source preview.
The package's RADIO_SETUP.md contains service examples and rollback behavior. Deploy the schema 2 worker with the matching app files. An older worker is rejected instead of being treated as a successful configuration.
Saved PTT options describe a future station configuration; the receive-only daemon uses PTT NONE. Remote rigctld owns its serial configuration, and receive audio must reach the decoder separately. Windows PortAudio capture is available, but there is no bundled Windows CAT service installer.
Until physical testing is complete, treat radio-specific menu settings, meter support, and CAT compatibility as items to verify for your model.
Verify downloads and understand updates#
Compare a downloaded ZIP's SHA-256 digest with the file published beside it. In PowerShell:
Get-FileHash .\Digital-Command-Center-Decoder-Preview.zip -Algorithm SHA256
Compare the full result with the decoder source checksum. The Windows Alpha checksum is a different file for a different ZIP.
Some installed builds expose Settings → System → App updates and demo. Update availability depends on a compatible published release; this website's source ZIP is not installed by that updater. For this preview, download the current source, extract it into a separate folder, and follow its included instructions.
Keep your station data before changing installations. Do not assume that replacing program files moves your data automatically.
Why is RX Frequency empty?#
It filters by audio offset, while Band Activity shows the whole passband. Click a visible station's message or move the green marker to its frequency. In the demo, messages more than 50 Hz away do not appear in RX Frequency.
If both panes are quiet, check that monitoring is on, the demo is not paused, and TX/Tune is not active. Click Next cycle. WSPR's natural period is two minutes, so Next cycle is especially useful there.
For the installed app, confirm that the selected engine is available, the audio or external decoder is running, and a complete receive period has elapsed.
Why did double-click or TX do nothing?#
Double-click a station that is actually calling CQ. Other traffic does not trigger the CQ shortcut. Check Settings → System → Demo preferences if double-click-to-TX has been disabled.
Being armed does not start TX immediately; watch the next-period countdown. Resume a paused demo to continue it. After STOP ALL TX, enable the desired automation controls again if you want automatic operation.
WSPR's demo is receive-only. The installed decoder preview is also receive-only; disabled real transmit controls are expected.
Decoder missing, failed, or no messages decoded#
- Engine missing: install WSJT-X, check the executable paths, and restart DCC after changing environment variables.
- Cannot start jt9 / wsprd: keep the complete WSJT-X installation together; copying only an executable can leave required libraries behind.
- No messages from a WAV: verify the recording's mode, mono 16-bit PCM format, length, and signal content. Speech, demo tones, or a recording of another mode will not decode as FT8.
- Live audio but no decodes: verify the correct USB input, receive level, radio mode, and computer time. Allow a full period after starting or retuning.
- Time limit exceeded: try a shorter recording and reduce other CPU-heavy work. The app limits each decoder process's run time.
JS8Call or fldigi is connected but text is missing#
First confirm that the other application itself shows newly decoded activity. DCC cannot display messages that its source decoder has not received.
For JS8Call, enable the TCP API and confirm the port matches DCC. For fldigi, enable XML-RPC and select BPSK31 or RTTY to match DCC. A mode mismatch appears in the status area.
fldigi's old receive text is skipped when DCC connects; wait for new characters. If Band Activity has text but RX Frequency does not, match DCC's RX offset to fldigi's carrier. Restart a disconnected decoder application and allow a few seconds for reconnection.
My profile or settings did not stay saved#
Confirm that you are using the same browser, device, and km4spl.com address. Leave private/incognito mode, allow site storage, and look for the saved indicator after editing.
A storage-unavailable message means changes may work only for the current page session. The demo cannot guarantee persistence if browser storage is blocked or cleared. Receive history and the simulated session log intentionally restart on reload.
The local app will not open#
- py or python3 not found: install the required Python version, reopen the terminal, and follow the matching operating-system instructions.
- requirements.txt not found: change into the extracted dcc folder before running the install commands.
- Module missing: install requirements using the same .venv interpreter used to launch run.py.
- Address already in use: close the previous DCC instance, or run
run.py --no-audio --port 8766and openhttp://127.0.0.1:8766. - Connection refused: keep the app terminal open and check its startup/error messages. Open localhost on the computer running the app.
Current validation and limits#
Real WSJT-X 2.6.1 executables decoded official sample recordings with 22 FT8, 19 FT4, and 9 WSPR messages. Tests also cover audio resampling, period splitting, incomplete audio, mode isolation, bounded history, and malformed input.
JS8Call and fldigi integrations passed localhost TCP and XML-RPC protocol tests. Full audio playback through those applications and reception using a physical radio have not yet been validated here.
The demo has desktop and phone checks for mode selection, receive filtering, TX/RX separation, saved preferences, and layout controls. Its waterfall and tones are visual/audio simulations. Some inherited interface controls remain preview elements; visible radio meters in the demo are not physical measurements.
When describing a problem, include the version (demo, source preview, or Alpha 1), digital mode, browser/operating system, exact error text, and the steps that caused it.
Quick glossary#
- RX / TX
- Receive / transmit.
- CQ / QSO
- A general call for a contact / a radio contact.
- CAT
- Computer control of a radio, such as reading or setting frequency.
- PTT
- Push-to-talk: the signal that keys a transmitter.
- ALC
- Automatic level control, which limits excessive transmitter drive.
- SWR
- Standing wave ratio: an indication of antenna-system impedance match.
- UTC
- The common time reference used for receive periods and logs.
- DT
- A decoded signal's timing difference relative to the expected period.
- SNR / dB
- Signal-to-noise ratio, reported in decibels when the decoder supplies it.
- Grid
- A Maidenhead locator describing a geographic area.
- Dial / audio offset
- The radio's tuned RF frequency / a signal's position inside the audio passband.
- Baud / shift
- Symbol rate / frequency separation between tones, often configured for RTTY.