Screenshot: Kwik-X on WINEKwik-X

Data Transformer for HF Transmission

Kwik-X is an encoder/decoder designed primarily for the quick-n-easy transfer of binary data using amateur radio digital modes.

Motivation for this project

Em-Comm

Amateur Radio HF digital modes are a great way to transfer small amounts of data, and, especially in the realm of emergency communications, are gaining popularity even on the VHF/UHF bands.  While the more robust HF modes are not nearly as fast as packet or D-Star, they have a big advantage: aside from a computer and a radio, they require no extra hardware.  Modes such as MT-63 can be used via "acoustic coupling" by placing the computer and radio near each other so that their microphones are near each other's speakers, and manually pressing the PTT as one would do during normal voice communications.  A $200 netbook with free software and a $100 2m FM radio works just fine.  In fact, a ham radio isn't even needed; other audio transport links, such as telephones, can work as well.

Sure, better equipment will yield better results, but reducing the need for special equipment means more available communications assets in an emergency.  It might be handy if everyone had a portable welder in their go-kit, too, but I'd much rather carry a roll of duct tape!

Binary Data

Digital modes work well for plain text, but what if you want to transfer binary files?   What if you need to ensure 100% accurate copy (which is usually necessary for binary files)?   Flarq was developed to address this -- when used with Fldigi, it allows guaranteed reception of large amounts of binary data by -- but it has a couple of shortcomings with regard to the purpose described above.  It requires a hardware interface (or VOX control) to automate the handshaking.  It also precludes the use of transmission modes that don't support the ASCII control characters it uses.  It's also unsuitable for disseminating information to multiple parties simultaneously, since it requires a one-to-one connection session.

Requirements

A Compromise

While automated retransmission is nice, it's not necessary in many cases; if the underlying transport (e.g. MT63 over a strong FM link) is reasonably reliable and the file isn't too large, the entire file can be resent if it didn't make it the first time.  Eliminating this feature allows us to achieve the other goals.

Other options

There are a few stand-alone programs out there that will encode/decode binary files for text-mode transfers, but I haven't found any that are very easy to use in the situatiuon previously described.  Using them to accurately pull a file from a ham radio transmission requires effort, and you must still use a separate step to verify the received file.  A separate hash utility can be used for this, with the hash communicated over the same link and compared at the receiving end.  This checksum verification is also fairly easily accomplished by putting it in a .zip container, which has the added benefit of compressing some types of data for faster transmission at the same time.

Hardcore geeks have been manually doing this type of multi-step process for many years, over wired and wireless connections; my goal is simply to make it easier and more accessible to the average ham, and save time in an emergency situation.

The Program

Benefits/Features

Kwik-X isn't just for binary data.   Plain text documents (particularly larger ones) will also benefit from both the integrity check and the reduced transmission time.  This document, for example, can be sent in roughly half the time using Kwik-X.

Usage

Encoding

Encoding a File

  1. Verify that "File" is selected as the data source.
  2. Press the Encode button.
  3. A file open dialog will appear; choose the desired file.
  4. When encoding is finished, its size will be displayed at the bottom of the form, and the encoded data will appear in the clipboard window.
  5. Paste the encoded data into your communications program.

Encoding from the Clipboard

  1. Copy your text to the clipboard
  2. Verify that "Clipboard Text" is selected as the data source, and that the clipboard window shows your data.
  3. Press the Encode button.
  4. When encoding is finished, its size will be displayed at the bottom of the form, and the encoded data will appear in the clipboard window.
  5. Paste the encoded data into your communications program.

Decoding

Decoding to a File

  1. Find the encoded text in your communications software by looking for "(((((((("  and "))))))))".  Select it -- your selection must start with at least one "(", and end with at least one ")" -- and copy it to the clipboard.
  2. Verify that "File" is selected as the data source.
  3. Press the Decode button.
  4. When decoding is finished, a file open dialog will appear; choose the desired location and name for the file.
  5. When the data is saved, its size will be displayed at the bottom of the form.

Decoding to the Clipboard

  1. Find the encoded text in your communications software by looking for "(((((((("  and "))))))))".  Select it -- your selection must start with at least one "(", and end with at least one ")" -- and copy it to the clipboard.
  2. Verify that "Clipboard Text" is selected as the data source.
  3. Press the Decode button.
  4. When decoding is finished, its size will be displayed at the bottom of the form, and the decoded data will appear in the clipboard window.
  5. Paste the text into your desired application.

Notes

The current contents of the clipboard are displayed in the bottom half of the form.  This information is automatically updated when you move your mouse over the upper half of the form; this allows you to, for example, easily verify what you're about to encode before you hit the button.

You can disable the ZLib compression by deselecting its checkbox prior to encoding.  You may wish to do this, for example, if the recipient is using a different program to perform the Base64 decoding.  Normally, you will leave this option selected.

In testing, I found that once files got larger than about 2MB, they started taking a long time to encode.  This is of little concern, however.  If you're planning to transfer a single 2MB chunk over an HF mode, you're insane, anyway; that would take almost 30 hours using MT-63/2000 (20 cps), and over 2 weeks using Olivia-8/250 (1.46 cps) -- and if there's a single error, you get to start all over....

Future Features

(proposed, not promised!)

Change Log

1.0 - 02/21/2011 - Created.

Downloads

kwikx.zip (202k)
Source Code (13k)

Feedback

Questions, Comments, Suggestions?
Write me at kwikx@boling.us.