Software

Here are a few of the software utilities or data files for various programs I've written which are freely available to other amateur radio operators:

 

APRS Local Information Beacons

In support of the APRS Local Info Initiative I've written this APRS Beacon and Beacon Editor for Windows which can push data via AGWPE & IGate. More information is available here.

Win32 Binary/EXE
Source Code
(as of August 25th, 2009)

 


Ham Radio Deluxe Utilities w/Source

Ham Radio Deluxe Utilities

Win32 Binary/EXE
Source Code
(as of August 24th, 2009)
(WinXP)
HRDU v1.5 for HRD 5.x (WinXP/Vista/Win7)

Automated LoTW uploads, import LoTW confirmations, logbook updates from QRZ.com, import eQSL confirmations, download eQSL card images, generate GlobalQSL ADIF upload files, update personal information in the HRD logbook, generate HTML logbooks for your web site and more.

Known Issues:

  • HRDU fails on login to eQSL accounts with multiple callsigns.

Ham Radio Deluxe Utilities Reporter (for Ham Radio Deluxe 4.x & 5.x)

This is my QSL label and envelope label printing program.

HRDU Reporter

It works with the Ham Radio Deluxe database. I suggest that before using this program you download, install and configure Ham Radio Deluxe Utilities because these two programs share settings. Using the QRZ.com XML service, HRDU updates the QSL address/routing information.

Win32 Binary/EXE
Source Code
(as of August 26th, 2009)

HRDU Reporter for HRD 5.x

"Mark DXCC Needed" and "Mark Selected as QSL Sent" functions are still being fixed

To access HRDU Reporter's configuration screen click the red arrow you see just to the left of "Program Configuration":

HRD Reporter Configuration


OmniRig / Ham Radio Deluxe Bridge (for HRD 3.x/4.x)

This program will connect to OmniRig (you select Rig 1 or Rig 2), it gets the frequency the rig is on and then, in the background modifies the HRD Log Add window's Band, Frequency, and optionally, Mode (LSB, USB, CW, AM, FM) fields. It's written for and tested on every band 160-6 including the WARC bands.Keystrokes are not pushed into the keyboard buffer so there's no concern about which application has focus and what you are typing at any given time. If the Log Add window is not visible, no problem, it waits if and till it appears to do its thing. Once this program is running, you can move the window out of the way and ignore it unless you want to terminate it. Please let me know if this works for you.

OmniRig to HRD Log



Shown on top HRD just to show the program at work


WebBuddy for Win500 (GRE PSR-500/PSR-600)

WebBuddy

WebBuddy parses HTML looking for frequency information and putting it into a format that the Starrsoft software will import. You can import nothing but frequencies if that's what you want. But there are also special functions to parse tables so that Alpha tags, Modes and Squelch codes are imported. The program stores a table of alpha substitutions so that long alpha tags can automatically be reduced to the scanner's 16 character alpha tag limit. There are other functions to format the data which are designed to reduce manual edits. Framed and non-framed web sites are supported. Download here.


ScanBuddy for GRE PSR-500/PSR-600 (Alpha)

ScanBuddy monitors Spectrum Sweeper "hits" of the GRE PSR-500 and PSR-600 scanners and logs this information. This information can be selectively sent to the clipboard to import into Win500. A better GUI, RadioReference.com lookups to aid in identifying the signal, and audio logging to be added. You can manually lock out frequencies or have the program automatically lock out a frequency after x hits. Saved data is automatically reloaded at startup so that analysis can be resumed.


This Winbatch script will talk to HRD via DDE. It will change the radio's operating frequency, the mode and whether transmit mode is on or off.


The following module contains old VB code which has been replaced by the HRD Utilities program. It contains three functions I wrote in Microsoft Access.

  • The first generates HTML from the logbook. It generates an HTML table where the rows are dynamically altered in color. You can view an example here with my logbook. To change the colors used just change the two values in the Javascript which is generated.
  • The second reads an eQSL ADIF file and updates the logbook to indicate which contacts have received an eQSL card. The time limit for matching QSOs is currently set to 5 minutes either side of your logbook. That is easily changed in the source.
  • The third function reads an LoTW ADIF file and stores LoTW confirmations in the Custom6 field. I have asked Simon Brown to add some LoTW fields to give the LoTW data a better storage location.

Please backup your databases. HRD has a built-in button that makes this as simple as clicking one button. And be sure and do so before running any functions in this source.


This file contains a Microsoft Access SQL query which can be used to display contacts which qualify for the DXXE Challenge Award. I created this SQL query as an experiment on how to dynamically generate a large OR SQL clause.


This file contains a COM object, including Delphi source code, which can be called from any language that does COM. It does database queries against the HRD database using the Microsoft JET DB driver.


How to Talk DDE with Ham Radio Deluxe from CodeGear's Delphi:

The following code works most of the time. The current version of HRD appears to over poll the data from the radio making it not only unfriendly if you run multiple programs on the same serial port, but I believe it also explains HRD's reputation of being difficult to control via DDE. If you watch the HRD DDE monitor you will see it polling the data very quickly and it appears that if HRD is in the polling function when DDE is initiated, DDE requests get tossed. Use the DDEClient component and set connections to manual rather than automatic. The looping time delay is to give HRD time to execute the DDE request. If you destroy the DDEClient object too quickly HRD either does not get or process the DDE request. I suspect the O/S eats requests in that case so that HRD never sees them. Also, you could shift the ExecuteMacro statement into the looping time delay and probably get a more consistent execution of the change frequency request.

procedure ChangeFreq(strFreq:String);
// strFreq would be something like '14030000' for 20 meters

var
 intTimeCounter : Integer;
begin
 HRD_DDEClient.SetLink('HRD_RADIO_000', 'HRD_CAT');
 if HRD_DDEClient.OpenLink then begin
   HRD_DDEClient.ExecuteMacro(pAnsiChar('freq '+strFreq),false);
   for intTimeCounter := 1 to 4 do begin
     Sleep(250);
     Application.ProcessMessages;
   end;
 HRD_DDEClient.CloseLink;
 end else
 ShowMessage('Link Failed');
end;

PSKReporter Delphi Interface Code

This is the Delphi translation of N1DQ's C interface to the PSKReporter SDK he developed along with a simple Test program showing how to send data to the www.pskreporter.info site. Download.


eQSL Download Utility

eQSL Download

This program will download an ADIF of all inbox/archive QSL cards and then download the QSL image for each eQSL card you've received. The program checks to see if the eQSL exists in the "Path to Store Cards" directory before downloading the card again. In other words, it will download it once and then if the file exists next time you run the program it will download only those eQSL cards that are missing.

The program was written using WinBatch. You can download a Windows binary of the program or download the source code.

The program does not currently check for invalid logins so make sure your callsign and password are correct. I'll add this check later when I have time. My goal was to get something that worked. I've used it on my inbox and my son's inbox so I know it works.


PC Clock Set from GPS

This Winbatch program will set the PC clock from an attached GPS. Source code is included in the zip file. The first commandline parameter is the COM port number the GPS is attached to. It will accept any COM port number that is valid for your PC. The second parameter is optional: a 'Y' or 'y' will show the results once it's done. Otherwise it silently updates the PC's clock.


CW Skimmer Scheduler

This file contains the source code for a couple of WinBatch scripts as well as precompiled EXEs that will automate CW Skimmer bandswitching. The purpose is to use CW Skimmer to rotate through the bands (you configure which) looking for CW activity. If you use the skimmer.dxwatch.com aggregator your data can be uploaded and viewed by others near-realtime. See the included readme.txt file for information on how to set the programs up.

The scheduler program uses Win32 API mailslots to allow multiple machines on a network to talk to each other. Each instance of the program can tell other instances which band it is monitoring and can automatically switch to another band if the band is already being monitored by another instance of CW Skimmer.


Optoelectronics Optocom Receiver Control

This is a Winbatch script that controls the Optocom receiver (no longer manufactured). There are some helper functions that do the dirty work of controlling the receiver along with some predefined control functions including turning the Optocom's BitBanger functionality on and off.


DX Monitor and CW Skimmer Alert File Generator/Updater

This program downloads active DXpedition callsigns from NG3K's web page and appends new callsigns or overwrites the old Alert lists for DX Monitor and CW Skimmer. Download the Windows EXE. This program was written using CodeGear's Delphi 2007.

Alert Generator/Update


DCU-1 Rotor Control

This is a Winbatch program (source only) that was written to control my Yaesu rotor with an Idiom Press serial interface via the commandline. Written for scheduled or remote control of the rotor.


UI-View32 Utilities

  • UIView32_ChangeMap: Change which map is being displayed via the commandline. This is useful to run from the schedule editor or from anywhere else when you need UI-View32 to display a particular map (such as before doing a scheduled screen capture). Calls the UI-View32 "Load a Favourite View" menu item. This file includes a Windows binary and WinBatch source code. Example:
    • UIView32_ChgMaps "My Map Name Here"
  • These are my updated right-click menu items for UI-View32. Copy or replace the items you want in your Uiview32.ini file under the [RIGHT_CLICK_URLS] ini file section.

Using OmniRig

Alex, VE3NEA has done a very nice job with OmniRig. Using it from any language that supports COM is very easy.

Here is a Delphi example:

var
 OmniRigEngine : Variant;
 ...

 OmniRigEngine := CreateOleObject('OmniRig.OmniRigX');
 OmniRigEngine.Rig1.FreqA := '21.035.980';

 ...

Using it from Winbatch is just as easy:

...
objOmniRig = ObjectCreate("OmniRig.OmniRigX")
objOmniRig.Rig1.FreqA =  '21.035.980'; 

...

Obviously it does a lot more than that but that's all it takes to start using OmniRig. You'll need to determine if you need to control Rig1 or Rig2 etc.


Using the K4HAV FCC Data Files

The K4HAV FCC datafiles are freely available and used by various ham radio programs. What I could not find documented was the file format of the 'converted' datafiles. Here are the details I've been able to reverse engineer from the data files:

Each addr_XX.txt file has a line of ascii and binary data for each Amateur callsign. You cannot treat the addr_XX.txt files as standard text files because binary EOF character values appear in the binary data. The format of each line is:

[Callsign]$[Name]&[Street Address]*[Zip Code]@[1 Char License Class][Previous Callsign if any]#[2 byte date containing birth date][2 byte date containing license effective date][2 byte date containing license expiration]

Now that you have the Zip Code you can go to the text file named [First Zip Code numeric value. eg. 7]ZIP and find the line containing the Zip Code value. Lines in that file are formatted as follows:

[ZipCode][City][State][County File Line Number]*

You get the County by going to the file named COUNTIES.TXT and reading the line number value we just got from the zip code file. You can read the file into an array and then just array[line no] making County lookups immediate.

You get the center coordinates of the county by going to the file named ZIP_AZ.TXT and finding the line which contains the Zip Code. The file is formatted as follows:

[ZipCode]*[5 digit Lat][4 digit Long, negative value assumed]

You can then calculate beam headings and grid square from the coords located in that file. You have to be aware though that, in some cases, the licensee may have one address on file with the FCC but physically operate from another location. The same applies to County information. QRZ.com information, on the other hand, is often updated to reflect the actual station location.

I haven't spent the time to completely unravel the date fields but this is what I know. The dates are calculated as follows: Add 29220 to the integer value and then CDate the resulting value. For early dates less than [unknown value] it appears you subtract 36316 from the value but I haven't had time to verify if that works in every case. At some point the FCC stopped including birthdate values so those callsign records will show a date value of 0.


PG Offline Yahoo Groups Reader

I like to use the PG Offline reader to download Yahoo groups that have technical information worth text-indexing. I use the program to download all messages and then run this Microsoft Access Basic module to export all the messages into a nice HTML text file. I then use dtSearch to index the files making the information available for complex searches.


GRLevelX Automation WinBatch Library

This library can be used to control the GRLevelX weather software. It includes a simple script processing engine for non-programmers.


Weather Graphics Digital Atmosphere Pro

This is a utility I wrote to help control Digital Atmosphere.