|
|
|
---
|
|
|
|
title: Packet radio, VARA (FM+HF), Mobilinkd, Digirig and the SignaLink USB on Linux
|
|
|
|
summary: >
|
|
|
|
Some basic configuration of my HF and VHF/UHF rigs to participate in the
|
|
|
|
Winlink world...
|
|
|
|
date: 2024-03-30T22:28:25+0100
|
|
|
|
# lastmod: 2024-03-23T18:47:43+0000
|
|
|
|
coverCaption: An example, a session to OE7XKG-10 on 144.950 MHz.
|
|
|
|
categories:
|
|
|
|
- amateur-radio
|
|
|
|
tags:
|
|
|
|
- packet radio
|
|
|
|
- vara fm
|
|
|
|
- vara hf
|
|
|
|
- winlink
|
|
|
|
- digirig
|
|
|
|
- mobilinkd
|
|
|
|
- signalink
|
|
|
|
- sdr
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
Out of curiosity I began another "research-session" because it is really time to get
|
|
|
|
that Winlink back on my Linux laptop (I used OpenBSD on this machine for some months now
|
|
|
|
and I haven't got a single chance to get wine onto that) -- I will stay Linux for a while
|
|
|
|
I guess.
|
|
|
|
|
|
|
|
I've been using a Surface 2 Go for some time (well, a really short time) but ditched it again
|
|
|
|
because I wasn't really satisfied with its performance.
|
|
|
|
|
|
|
|
There are several different devices and software solutions to send winlink messages and I
|
|
|
|
won't cover all of them. The following examples exist because I own the necessary devices
|
|
|
|
and I already have the software to work with them.
|
|
|
|
|
|
|
|
_I would choose the Digirig as my favourite device because it just works every time and it
|
|
|
|
also provides a USB soundcard to the computer (like the SignaLink USB)._
|
|
|
|
|
|
|
|
## Digirig
|
|
|
|
|
|
|
|
The Digirig gets controlled with `rigctld` -- I use different models for the
|
|
|
|
HF and the FM rig -- but the rig configuration is the same for both:
|
|
|
|
|
|
|
|
~~~json
|
|
|
|
"hamlib_rigs": {
|
|
|
|
"my_rig": {
|
|
|
|
"address": "127.0.0.1:4532",
|
|
|
|
"network": "tcp"
|
|
|
|
}
|
|
|
|
},
|
|
|
|
~~~
|
|
|
|
|
|
|
|
That part of the pat configuration makes sure that pat can transmit with the radio.
|
|
|
|
|
|
|
|
### Packet radio
|
|
|
|
|
|
|
|
Using <kbd>AX.25+agwpe</kbd> within pat in combination with Direwolf -- but
|
|
|
|
this combination felt a bit slow (which might only be my subjective opinion).
|
|
|
|
|
|
|
|
Someone might want to tune direwolf for better throughput or more reliable connections,
|
|
|
|
but I'm not a direwolf expert and I rarely use it in favour of VARA FM.
|
|
|
|
|
|
|
|
Besides that, I never used packetradio on HF yet. (300bps)
|
|
|
|
|
|
|
|
~~~json
|
|
|
|
"ax25": {
|
|
|
|
"engine": "linux",
|
|
|
|
"rig": "",
|
|
|
|
"beacon": {
|
|
|
|
"every": 3600,
|
|
|
|
"message": "Winlink P2P",
|
|
|
|
"destination": "IDENT"
|
|
|
|
}
|
|
|
|
"agwpe": {
|
|
|
|
"addr": "127.0.0.1:8000",
|
|
|
|
"radio_port": 0
|
|
|
|
},
|
|
|
|
~~~
|
|
|
|
|
|
|
|
The <kbd>agwpe</kbd> section is used by Direwolf:
|
|
|
|
|
|
|
|
~~~console {hl_lines="8"}
|
|
|
|
$ direwolf -c /etc/direwolf/direwolf.conf -p
|
|
|
|
Dire Wolf version 1.7
|
|
|
|
Includes optional support for: gpsd hamlib cm108-ptt dns-sd
|
|
|
|
|
|
|
|
Reading config file /etc/direwolf/direwolf.conf
|
|
|
|
Audio device for both receive and transmit: plughw:1,0 (channel 0)
|
|
|
|
Channel 0: 1200 baud, AFSK 1200 & 2200 Hz, A+, 44100 sample rate.
|
|
|
|
Ready to accept AGW client application 0 on port 8000 ...
|
|
|
|
Ready to accept KISS TCP client application 0 on port 8001 ...
|
|
|
|
DNS-SD: Avahi: Failed to create Avahi client: Daemon not running
|
|
|
|
Virtual KISS TNC is available on /dev/pts/8
|
|
|
|
Created symlink /tmp/kisstnc -> /dev/pts/8
|
|
|
|
~~~
|
|
|
|
|
|
|
|
The `direwolf.conf` file looks like this (comments removed):
|
|
|
|
|
|
|
|
~~~squid
|
|
|
|
ADEVICE plughw:1,0
|
|
|
|
CHANNEL 0
|
|
|
|
MYCALL OE7DRT
|
|
|
|
MODEM 1200
|
|
|
|
PTT /dev/ttyUSB0 RTS DTR
|
|
|
|
AGWPORT 8000
|
|
|
|
KISSPORT 8001
|
|
|
|
IGTXLIMIT 6 10
|
|
|
|
~~~
|
|
|
|
|
|
|
|
Direwolf will warn you if the input audio level is way off; I adjust them
|
|
|
|
with the program `alsamixer` (<kbd>F6</kbd> to select the USB soundcard,
|
|
|
|
then <kbd>F5</kbd> to list all devices, disable _Auto Gain Control_ with <kbd>m</kbd>
|
|
|
|
(mute)).
|
|
|
|
|
|
|
|
Direwolf handles the PTT via the RTS line of the Digirig.
|
|
|
|
|
|
|
|
### VARA FM
|
|
|
|
|
|
|
|
The corresponding configuratoin in the pat config file:
|
|
|
|
|
|
|
|
~~~json
|
|
|
|
"varafm": {
|
|
|
|
"addr": "127.0.0.1:8300",
|
|
|
|
"bandwidth": 0,
|
|
|
|
"rig": "my_rig",
|
|
|
|
"ptt_ctrl": true
|
|
|
|
},
|
|
|
|
~~~
|
|
|
|
|
|
|
|
Start `rigctld` with a <kbd>Dummy</kbd> model - just to use the USB port
|
|
|
|
of the Digirig for PTT:
|
|
|
|
|
|
|
|
~~~console
|
|
|
|
$ rigctld -m 1 -p /dev/ttyUSB0 -P RTS -s 9600 -vvvv
|
|
|
|
~~~
|
|
|
|
|
|
|
|
I start VARA FM by running a small script called `varafm.sh`:
|
|
|
|
|
|
|
|
~~~sh
|
|
|
|
#!/usr/bin/sh
|
|
|
|
# Start VARA via wine
|
|
|
|
|
|
|
|
WINEPREFIX=/home/dominic/.wine-winlink wine "C:\\VARA FM\\VARAFM.exe"
|
|
|
|
~~~
|
|
|
|
|
|
|
|
In VARA FM set the USB soundcard, adjust the volume in `alsamixer` and on your
|
|
|
|
radio, set <kbd>PTT</kbd> to <kbd>VOX</kbd> -- I tried to use <kbd>COM1</kbd> but
|
|
|
|
that crashed wine several times (that is why I set up _rigctl_ before).
|
|
|
|
|
|
|
|
If you need to stop rigctl: you can usually do that with
|
|
|
|
<kbd>CTRL</kbd> + <kbd>C</kbd> but this might not work. So either stop the running
|
|
|
|
pat process by hitting <kbd>CTRL</kbd> + <kbd>C</kbd> in the "pat terminal" or by
|
|
|
|
killing rigctld with `kill $(pgrep rigctld)`.
|
|
|
|
|
|
|
|
I also adjust the volumes while connecting to keep the ALC (DIG gain on the TX-500)
|
|
|
|
correct and also the input volume in VARA FM.
|
|
|
|
|
|
|
|
### VARA HF
|
|
|
|
|
|
|
|
Back to the TX-500, the pat configuration looks like:
|
|
|
|
|
|
|
|
~~~json
|
|
|
|
"varahf": {
|
|
|
|
"addr": "127.0.0.1:8300",
|
|
|
|
"bandwidth": 2300,
|
|
|
|
"rig": "my_rig",
|
|
|
|
"ptt_ctrl": true
|
|
|
|
},
|
|
|
|
~~~
|
|
|
|
|
|
|
|
I start rigctld like:
|
|
|
|
|
|
|
|
~~~console
|
|
|
|
$ rigctld -m 2050 -r /dev/ttyUSB0 -d /dev/ttyUSB0 -p /dev/ttyUSB0 -P RTS -s 9600 -vvv
|
|
|
|
~~~
|
|
|
|
|
|
|
|
This is for the CAT protocol <kbd>Lab599</kbd>. If you use the older implementation
|
|
|
|
(<kbd>Kenwood TS-2000</kbd>) start rigctl with the proper model:
|
|
|
|
|
|
|
|
~~~console
|
|
|
|
$ rigctld -m 2014 -r /dev/ttyUSB0 -d /dev/ttyUSB0 -p /dev/ttyUSB0 -P RTS -s 9600 -vvv
|
|
|
|
~~~
|
|
|
|
|
|
|
|
## Mobilinkd
|
|
|
|
|
|
|
|
{{< alert "circle-info" >}}
|
|
|
|
The Mobilinkd TNC4 is a KISS TNC and does not provide a USB soundcard -- I only use
|
|
|
|
the Mobilinkd in conjunction with packet radio.
|
|
|
|
{{< /alert >}}
|
|
|
|
|
|
|
|
I will use <kbd>AX.25+linux</kbd> in pat with the TNC4 paired via Bluetooth.
|
|
|
|
|
|
|
|
First of all, power on the TNC4 and pair it -- I use _blueman-manager_ for this.
|
|
|
|
|
|
|
|
Then we need the serial port -- right click on <kbd>TNC4 Mobilinkd</kbd> and select
|
|
|
|
_Connect with_ <kbd>Serial port</kbd>
|
|
|
|
|
|
|
|
That will create a serial port at `/dev/rfcomm0`.
|
|
|
|
|
|
|
|
In order to use it in pat, we need to use `kissattach` on that serial device.
|
|
|
|
|
|
|
|
First we need to setup an AX.25 port called <kbd>wl2k</kbd> in `/etc/ax25/axports`:
|
|
|
|
|
|
|
|
~~~squid
|
|
|
|
# /etc/ax25/axports
|
|
|
|
#
|
|
|
|
# The format of this file is:
|
|
|
|
#
|
|
|
|
# name callsign speed paclen window description
|
|
|
|
#
|
|
|
|
|
|
|
|
#1 OH2BNS-1 1200 255 2 144.675 MHz (1200 bps)
|
|
|
|
#2 OH2BNS-9 38400 255 7 TNOS/Linux (38400 bps)
|
|
|
|
wl2k OE7DRT 1200 255 7 Winlink
|
|
|
|
~~~
|
|
|
|
|
|
|
|
This needs also some configuration work in the pat configuration:
|
|
|
|
|
|
|
|
~~~json
|
|
|
|
"ax25_linux": {
|
|
|
|
"port": "wl2k"
|
|
|
|
},
|
|
|
|
"serial-tnc": {
|
|
|
|
"path": "/dev/rfcomm0",
|
|
|
|
"serial_baud": 9600,
|
|
|
|
"hbaud": 1200,
|
|
|
|
"type": "Kenwood",
|
|
|
|
"rig": ""
|
|
|
|
},
|
|
|
|
~~~
|
|
|
|
|
|
|
|
Now we can attach a KISS interface to the serial port:
|
|
|
|
|
|
|
|
~~~console
|
|
|
|
$ sudo kissattach /dev/rfcomm0 wl2k
|
|
|
|
AX.25 port wl2k bound to device ax0
|
|
|
|
~~~
|
|
|
|
|
|
|
|
Select your PacketRadio Gateway (CALLSIGN-10 usually) and connect using
|
|
|
|
<kbd>AX.25+linux</kbd>.
|
|
|
|
|
|
|
|
To de-attach the KISS interface we need to kill the process:
|
|
|
|
|
|
|
|
~~~console
|
|
|
|
$ sudo kill $(pgrep kissattach)
|
|
|
|
~~~
|
|
|
|
|
|
|
|
## SignaLink USB
|
|
|
|
|
|
|
|
I haven't used this now for a while, but I wanted to include this in this list,
|
|
|
|
as it provides a USB soundcard to the computer just like the Digirig does -- but
|
|
|
|
it does not provide a serial interface to control the PTT.
|
|
|
|
|
|
|
|
### Packet radio
|
|
|
|
|
|
|
|
Start direwolf (using the same configuration as with the Digirig), it will
|
|
|
|
complain about not finding `/dev/ttyUSB0` for PTT control. I don't use this that
|
|
|
|
often and I don't use another USB device at the same time so I don't care about this.
|
|
|
|
If you have another device connected as `/dev/ttyUSB0` you should probably remove its
|
|
|
|
reference from the direwolf configuration file.
|
|
|
|
|
|
|
|
As mode I select <kbd>AX.25+agwpe</kbd> and I set the output volume of the
|
|
|
|
<kbd>PCM2906C Audio CODEC</kbd> to 100% -- the SignaLink USB will now control the PTT.
|
|
|
|
|
|
|
|
### VARA FM
|
|
|
|
|
|
|
|
Start VARA FM (I use my script mentioned above) and select the proper sound card.
|
|
|
|
The input volume level can be adjusted with the volume knob on the radio and the RX
|
|
|
|
knob on the SignaLink USB. The output volume level can be checked and adjusted with the
|
|
|
|
tune function withing the Soundcard menu from within VARA FM. You may also try the
|
|
|
|
Auto-tune function.
|
|
|
|
|
|
|
|
### VARA HF
|
|
|
|
|
|
|
|
I never tested this because I have no cable for the TX-500 and the SignaLink USB,
|
|
|
|
but as the Signalink only provides a soundcard you have to add another USB cable
|
|
|
|
for CAT control of the radio. You then start rigctld with the proper values for
|
|
|
|
that specific radio.
|
|
|
|
|
|
|
|
{{< alert "circle-info" >}}
|
|
|
|
That is the reason for the Digirig that combines these two functions
|
|
|
|
in one device.
|
|
|
|
{{< /alert >}}
|
|
|
|
|
|
|
|
## Some systemd unit-file examples
|
|
|
|
|
|
|
|
Put them into `$HOME/.config/systemd/user`. I created them at the
|
|
|
|
beginning of my "Linux Winlink journey" but actually I only let pat
|
|
|
|
start the webgui at boot - the other stuff I start with scripts or
|
|
|
|
I search the command history (autocomplete) in my shell.
|
|
|
|
|
|
|
|
I don't even let pat listen to something because this is my main laptop
|
|
|
|
and I like the services started in a terminal window.
|
|
|
|
|
|
|
|
### pat
|
|
|
|
|
|
|
|
~~~systemd
|
|
|
|
[Unit]
|
|
|
|
Description="pat winlink"
|
|
|
|
After=network.target rigctld.service ardopc.service
|
|
|
|
Wants=rigctld.service ardopc.service
|
|
|
|
|
|
|
|
[Service]
|
|
|
|
Type=simple
|
|
|
|
ExecStart=/home/dominic/bin/pat --listen "ardop,telnet" http
|
|
|
|
TimeoutSec=10
|
|
|
|
|
|
|
|
[Install]
|
|
|
|
WantedBy=default.target
|
|
|
|
~~~
|
|
|
|
|
|
|
|
### rigctld
|
|
|
|
|
|
|
|
~~~systemd
|
|
|
|
[Unit]
|
|
|
|
Description="rigctld for TX-500 using Digirig"
|
|
|
|
After=network.target
|
|
|
|
Before=pat.service ardopc.service
|
|
|
|
|
|
|
|
[Service]
|
|
|
|
Type=simple
|
|
|
|
; -m 2050 for Lab599 TX-500 CAT protocol
|
|
|
|
; ExecStart=/usr/bin/rigctld -m 2050 -r /dev/ttyUSB0 -p /dev/ttyUSB0 -P RTS -s 9600 -vvvv
|
|
|
|
; -m 2014 for Kenwood TS-2000 CAT protocol
|
|
|
|
; ExecStart=/usr/bin/rigctld -m 2014 -r /dev/ttyUSB0 -p /dev/ttyUSB0 -P RTS -s 9600 -vvvv
|
|
|
|
ExecStart=/usr/bin/rigctld -m 2014 -r /dev/ttyUSB0 -d /dev/ttyUSB0 -p /dev/ttyUSB0 -P RTS -s 9600 -vvvv
|
|
|
|
TimeoutSec=10
|
|
|
|
|
|
|
|
[Install]
|
|
|
|
WantedBy=default.target
|
|
|
|
~~~
|
|
|
|
|
|
|
|
You can change the used protocol (<kbd>Kenwood TS-2000</kbd> or <kbd>Lab599 TX-500</kbd> for CAT control within
|
|
|
|
the menu on the TX-500 (last menu setting)).
|
|
|
|
|
|
|
|
### ardopc
|
|
|
|
|
|
|
|
~~~systemd
|
|
|
|
[Unit]
|
|
|
|
Description="ardopc for TX-500 using Digirig"
|
|
|
|
After=network.target
|
|
|
|
Before=pat.service
|
|
|
|
|
|
|
|
[Service]
|
|
|
|
Type=simple
|
|
|
|
; ExecStart=/home/dominic/bin/ardopc 8515 hw:1,0 hw:1,0 -c /dev/ttyUSB0:9600 -p /dev/ttyUSB0:9600
|
|
|
|
ExecStart=/home/dominic/bin/ardopc 8515 plughw:1,0 plughw:1,0
|
|
|
|
TimeoutSec=10
|
|
|
|
|
|
|
|
[Install]
|
|
|
|
WantedBy=default.target
|
|
|
|
~~~
|
|
|
|
|
|
|
|
Maybe `hw:…` works better, but I had less trouble when using `plughw:…`.
|
|
|
|
|
|
|
|
## Decoding other stations
|
|
|
|
|
|
|
|
### APRS
|
|
|
|
|
|
|
|
#### With direwolf
|
|
|
|
|
|
|
|
This also sends a beacon and the received stations to APRS-IS. You can watch it on
|
|
|
|
<https://aprs.fi>.
|
|
|
|
|
|
|
|
~~~console
|
|
|
|
$ rtl_fm -M fm -f 144.8M -p 36 -s 24000 -g 42 - | direwolf -c sdr-1200bps.conf -r 24000 -D 1 -B 1200 -
|
|
|
|
~~~
|
|
|
|
|
|
|
|
The direwolf configuration:
|
|
|
|
|
|
|
|
~~~squid
|
|
|
|
ACHANNELS 1
|
|
|
|
ADEVICE null null
|
|
|
|
CHANNEL 0
|
|
|
|
|
|
|
|
MYCALL {callsign}
|
|
|
|
IGLOGIN {callsign} {passcode}
|
|
|
|
IGSERVER rotate.aprs2.net
|
|
|
|
|
|
|
|
MODEM 1200
|
|
|
|
|
|
|
|
AGWPORT 8000
|
|
|
|
KISSPORT 8001
|
|
|
|
|
|
|
|
PBEACON sendto=IG delay=0:30 every=30:00 symbol="igate" overlay=R lat=X long=Y alt=in_meter comment="144.8MHz Receive-only gateway AFSK 1200bps"
|
|
|
|
|
|
|
|
IGTXLIMIT 6 10
|
|
|
|
~~~
|
|
|
|
|
|
|
|
#### With multimon-ng
|
|
|
|
|
|
|
|
~~~console
|
|
|
|
$ rtl_fm -f 144.8M -g 42 -s 22050 -l 20 - | multimon-ng -t raw -a AFSK1200 -
|
|
|
|
~~~
|
|
|
|
|
|
|
|
#### With sdrangel
|
|
|
|
|
|
|
|
Add a channel and select <kbd>Packet Demoulator</kbd>.
|
|
|
|
|
|
|
|
Once packet gets demodulated, add a feature and select APRS:
|
|
|
|
|
|
|
|
![Upper left portion of the whole SDRAngen window highlighting the 'Add feature' button](add-feat.png)
|
|
|
|
|
|
|
|
![Example view of the APRS feature window](aprs.png)
|
|
|
|
|
|
|
|
The APRS feature windows let you connect to APRS-IS (top right of the APRS window).
|
|
|
|
|
|
|
|
You can also add another feature called <kbd>Map</kbd> to display the received
|
|
|
|
APRS packets on a map.
|
|
|
|
|
|
|
|
![Cropped view of the map feature window](map.png)
|
|
|
|
|
|
|
|
### Packet radio
|
|
|
|
|
|
|
|
#### With direwolf
|
|
|
|
|
|
|
|
~~~console
|
|
|
|
$ rtl_fm -f 144.950M -M fm -s 200000 -r 32000 -g 35 | direwolf -n 1 -r 32000 -b 16 -t 0 -
|
|
|
|
~~~
|
|
|
|
|
|
|
|
~~~console
|
|
|
|
$ rtl_fm -M fm -f 144.950M -s 22050 | direwolf -n 1 -r 22050 -b 16 -
|
|
|
|
~~~
|
|
|
|
|
|
|
|
#### With sdrangel
|
|
|
|
|
|
|
|
Add a channel and select <kbd>Packet Demoulator</kbd>.
|
|
|
|
|
|
|
|
![An example of a decoded packet session](packet-session.png "A quick connection try at home
|
|
|
|
(the gateway is out of reach so we don't get an answer back)")
|
|
|
|
|
|
|
|
### VARA HF
|
|
|
|
|
|
|
|
We can only decode with VARA HF in monitor mode. It is possible that we can't decode anything.
|
|
|
|
|
|
|
|
### POCSAG
|
|
|
|
|
|
|
|
#### With multimon-ng
|
|
|
|
|
|
|
|
~~~console
|
|
|
|
$ rtl_fm -M fm -f 438.025M -s 22050 | multimon-ng -t raw -a POCSAG512 -a POCSAG1200 -a POCSAG2400 -a FLEX -f alpha -
|
|
|
|
~~~
|
|
|
|
|
|
|
|
#### With sdrangel
|
|
|
|
|
|
|
|
![Settings of the main settings window](main.png)
|
|
|
|
|
|
|
|
Set the frequency to <kbd>438.025 MHz</kbd> (in Austria) and add a channel
|
|
|
|
(pink mark box). Select <kbd>Pager Demodulator</kbd> and start decoding
|
|
|
|
(click the Play button).
|
|
|
|
|
|
|
|
That will decode the set POCSAG modulation (defaults to 1200 baud).
|
|
|
|
|
|
|
|
![Example of the decode in SDRAngel](pocsag-decode.png)
|
|
|
|
|