A while back, I wrote a Ruby gem that abstracts the FLDigi API into a ruby object that you can manipulate using object methods (see here). The short version is that it makes it really easy to use FLDigi as an HF radio modem by simply reading and writing data in a ruby program (much like a using serial port). I thought it would be fun to add a PropNET client, since 99% of the code was already there. I did, and it didn’t work. It would construct and send packets, but they wouldn’t show up properly on the PropNET web site. They would show up as fragments, which means they were heard, but did not decode properly. I found some discussion on the ‘webz about how the CRC16 implementation that the PropNET guys were using at one time was broken, and as a result, it was “interesting” to write a client to work properly. I also read that it had since been fixed.
All of this led me to dig a little deeper into CRC16, thinking that could be my problem. Lo and behold, I learned something. There are a lot of CRC16 standards out there. And while they’re all philosophically the same, they differ in the details (which means they produce different checksums for the same data). I finally resorted to capturing live PropNET updates off of the radio on 10 meters, then comparing them with the results that were decoded properly on the PropNET web site. Once I had a sample set of three captured updates that decoded correctly, I started feeding them into each of the different CRC16 versions one at a time, until I found a match. I also had to figure out which part of the beacon was actually being checksummed. It turns out it’s the second line only, from the beginning of the line up to the “/” character, but not including the “^” character. The documentation on the PropNET web site skipped over that little tidbit. Anyway, it turns out PropNET uses CRC16 CCITT. I was then able to go change my code to use CRC16 CCITT, and send my own updates that now decode properly and show up on the PropNET maps. Woot!
If you’re looking for a PropNET client that works with FLDigi (or in my case, I was looking for a PropNET client that ran on something other than Windows/Wine), I’ve now got one that works. Have a look here.
It’s easy to run, just crank it up on the command line:
jfrancis@vader ~/Dropbox/tmp/ruby/fldigi-ruby $ ./propnet.rb –call N0GQ –band 10 –grid CN87wu –phg PHG510046
2014-10-26 10:07:26 -0700 Sending beacon…
2014-10-26 10:07:49 -0700 Done.
The transmitted beacon looks like this:
FOR INFO: http://www.PropNET.org
It loops forever and sends packets at whatever rate you specify in the PHG. At some point in the (hopefully near) future, I’ll add options for switching frequencies and sending beacons on multiple bands. The code is all there, it’s just a matter of adding the command line options. I’m also going to add an option to grab the location data from GPSD and calculate the gridsquare on the fly. Which would make for an interesting map if you ran the PropNET client from a moving vehicle. Kind of like HF APRS or something. Speaking of which, I’m also still dabbling with an HF APRS client for FLDigi. Slowly, but surely as I have free time…
When it works, you get data like this on the PropNET site: