RAYNET in my area use EasyPAL to transmit images and other data. A limitation with this so far is that EasyPAL is only available for Windows. Thankfully this looks to change. PA0MBO has a DRM transceiver for Linux, TRXAMADRM. I thought I’d see if it would run on a Raspberry Pi.
I downloaded Version 3.1 and removed the Windows version and the pre-compiled binaries for X86. I then checked the code into Git so that I can keep track of any changes. I installed the following packages on the Pi:
I then ran
The build took quite a while, and left me with ARM binaries for the Raspberry Pi.
There are a few scripts present. The one that seems to work is startdrmtrx.sh. This produced the separate receive and transmit applications and a waterfall window.
Setting up sound
I have a Signalink USB connected via a powered USB hub. I don’t know how much current the Signalink draws. The Raspberry Pi has limited USB output current.
The sound device is selected by card number. Using alsamixer I was able to find that my Signalink USB adapter was card 1. I connected directly into the Signalink’s “Speaker” input from the headphone output of my netbook running EasyPAL and played waterfall texts until my callsign appeared clearly in the waterfall display.
It is not easy to set the input level. The transmit data is louder than the waterfall text data, so waterfall text is not a good way of setting levels. When the level is correct for receiving data, you should be able to see the four pilot signals as solid lines in the waterfall with the data as a nicely contained grey texture around it. If anything the screen shot shows an input that is too loud, but not so loud that the reception fails. I installed Audacity and used its input level meter and a short test recording to check that the input level was correct.
The picture in the image was provided with the software. Despite the promising results shown, I was not able to receive a whole image without asking EasyPAL to make multiple transmission attempts. TRXAMADRM does support the EasyPAL BSR mechanism to request retries. I didn’t have the sound output wired up to test this.
The problem seems to be CPU load, Some of that may come from the DRMTST back-end program which performs the decode, some from the TCL front end which uses Expect to parse the status information that it outputs at quite a high rate, some from the filesystem and IO writing the file. My Raspberry Pi also performs some network infrastructure duties, but load from these is low. The high load causes processing to pause, which causes input audio to be lost and decoding to fail.
Running the DRMTST backend on its own
The data is received by the program drmtst. This is controlled by an ini file, which is generated by the TCL front end. It also needs some other files from its working directory, so is run in the “linux” directory. The drmtst program produces the waterfall display and outputs a lot of information to the console. The console on the Raspberry Pi had difficulty coping with the load, so I redirected the program output to the /dev/null special device.
drmtst > /dev/null
The CPU load was reduced to about 50%. It was lower when the program was successfully receiving data. I was able to transmit in modes A and B and have the files received correctly. They appear in the picsrx folder, and are shown automatically in the Raspberry Pi’s file manager.
I also tested EasyPAL’s RS2 error correcting mode. The file was received with an rs2 extension and a separate utility provided with the application was used to decode it. The RS2 feature is designed to allow the image to be reconstructed from partial data. I don’t know how well this would work with an “incomplete” file in RXAMADRM.
RXAMADRM is useful as an EasyPAL receiver in this configuration.
I have not tested transmit yet, or tested the system over a real radio link.
It would be useful to remove the waterfall display and the copious console output from the drmtst program. The output could be replaced with a much smaller status display showing that drmtst is receiving. The smaller drmtst could then be used as part of an automated process befitting of the Raspberry Pi.