Proficio Experiment: HDSDR in Linux with voice, fldigi and wsjt-x, running on an old PC


I took this on mostly as a personal challenge, not at all certain it would all work in the end. I wanted to see if a Proficio could be made to work with HDSDR in Linux, thereby avoiding purchase of the latest and greatest from Microsoft and its PC hardware ecosystem. I was familiar with Quisk, liked it for its comprehensive collection of ham transceiver features, and understood it had already been proven to be cross-platform compatible. But, to my knowledge, HDSDR was still regarded as a Windows-only option. I can report that, for the last several days, I have been exercising my proficio in a variety of modes without ever having hooked it up to a Windows-based PC, all with HDSDR as the SDR core. So, for those willing and able to deal with Linux systems, I'd now suggest HDSDR is an option. With more scripting to automate installation and configuration, it might even become an option with substantial appeal, given HDSDR's receive-mode features and refined user-interface.

This was enabled by availability of some important pieces of code. First of course is the WINE compatibility layer in Linux. It is my understanding that HDSDR's developers made a particular effort to avoid coding techniques not compatible with WINE's api. As a result, HDSDR loads and looks right, processes I/Q signals, and passes audio to and from the Linux sound system. The HDSDR developers also made available a very basic dll that adds TX capability and is platform agnostic, ExtIO_SRlite.dll. What all that does not do is support USB control of softrock or proficio hardware. Enter usbsoftrock, a Linux command-line utility that can set the radio's LO frequency and ptt state, among other things. Since the proficio was built with softrock compatibilty in mind, usbsoftrock can be recompiled to do the essentials with a proficio, too.

My code contribution at this point is a tcl/tk script and related rigdef file to overcome the awkwardness of a command-line method of tuning and rx/tx control. What the script does is communicate with HDSDR through its CAT interface, using virtual serial ports. It relays tuning and ptt commands to the radio by invoking usbsoftrock. For voice-mode operation, the script sets up a virtual teletype terminal to talk to HDSDR. It periodically asks HDSDR for the frequency being displayed on its GUI. When a change is noted, it calculates the needed LO frequency, correcting for offset and calibration and sends that to the radio. The script also pops up on-screen a small window with two buttons for controlling ptt; one toggles the rx/tx state and the other acts as a momentary-contact TX switch. Hovering the mouse pointer over that window also causes the keyboard space-bar to act as a TX switch (HDSDR’s TX button is presently used only as an indicator). In digital modes, the script invokes native-linux versions of fldigi or wsjt-x and supports CAT communications between HDSDR and those app’s. It monitors virtual serial port traffic, looking for tuning or rx/tx commands. Those are relayed to the radio after formatting and adjustment similar to voice mode operation. In the case of fldigi, a few tested rig definitions proved poor surrogates, so a custom rigdef file was built to implement HDSDR’s CAT commands exactly (afaik). In wsjt-x, the Kenwood TS-2000 rig definition appears workable, apparently not relying on features available on a TS-2000, but not supported by HDSDR.

The result is a means to operate with HDSDR in Ubuntu 14.04 on a PC of ~2005 vintage, using native-linux features for virtual audio and serial cables. That virtuality results in a (relatively) clean desktop, with minimal spurious RF radiation or coupling and no signal degradation from non-essential d/a or a/d conversions. Incidentally, it occurs to me this might be particularly useful to folks building portable systems using micro-form-factor PC hardware having limited i/o. Except for the necessity to lock HDSDR’s tuning to a fixed offset from the LO, operation seems to me essentially un-compromised. Both fldigi and wsjt-x native-linux app’s appear to operate normally (they each have their own quirks...). Even with only 5 watts and 13 characters, I’m  finding JT65 to be oddly addictive, but I digress...

Below  are screen captures of the thing in various modes of operation. I’m happy to share code, configuration data, notes, etc., if somebody can advise on the best place to post a directory full of that stuff. I don’t have a step-by-step installation document. If there’s interest, I can put that on my to-do list.


The source files are available here:


The pop-up dialog at start-up of the script:

Voice/CW mode:



Cheers, Bruce, AG5GT

Join to automatically receive all group messages.