Avendo a disposizione un hardware più potente (come un Rpi-3/4 o un PC) è possibile utilizzare come soft-modem direwolf al posto di soundmodem. Implementa le funzioni di base di un TNC Kiss, ma anche funzionalità aggiuntive rispetto al più semplice soundmodem. Può operare come APRS GPS Tracker, Digipeater e Gateway senza necessità di installare software aggiuntivo. Ha anche la possibilità di essere utilizzato via TCP/IP, e non solo attraverso lo stack ax25. L’elenco completo delle funzioni è disponibile sulla pagina GitHub del progetto.

Anche direwolf è disponibile fra i package installabili con apt-get. Ovviamente dato che è un progetto attivo, per utilizzare la versione più recente è sempre preferibile scaricare i sorgenti e compilarli autonomamente.

Il file di configurazione di direwolf è un semplice file di testo con una serie di istruzioni relative alla configurazione. Per l’uso come TNC, questo esempio è equivalente a quello di soundmodem:

PTT GPIO 4
ACHANNELS 1
CHANNEL 0
MYCALL I8ZSE-1
MODEM 1200

Anche per direwolf è possibile usare varie forme di PTT, tutte ben documentate nel manuale, come questa, PTT per un Yaesu ft897 collegato via CAT a 38400 bps:

PTT RIG 1023 /dev/ttyUSB0 38400

Direwolf ha la possibilità di visualizzare una serie di informazioni diagnostiche direttamente sulla stdout, che sono molto utili per mettere a punto il funzionamento del software. Per questo motivo, io preferisco avviarlo in un terminale autonomo, in modo che sia sempre possibile visualiizarle qualora se ne ravvisasse la necessità. Serve solo un tool, GNU screen, che se non già presente può essere installato con apt-get install screen. Screen è un terminal multiplexer, in grado di creare un terminale autonomo che continua ad operare in background anche se la sessione da cui è lanciata viene chiusa, a cui è possibile connettersi e disconnettersi in qualsiasi momento. Per lanciare direwolf io uso questo script:

echo "starting Direwolf..."
/usr/bin/screen -d -m -S direwolf /sbin/direwolf -p -c direwolf.conf -t 0
sleep 2
PTS=`ls -l /tmp/kisstnc | awk '{ print $11 }'`
/usr/sbin/kissattach $PTS ax0
# set kiss parameters
/usr/sbin/kissparms -c 1 -p ax0 -r 125 -t 250 -s 20 -f n -l 20
echo "... started"

Nella seconda linea /usr/bin/screen -d -m -S direwolf lancia un nuovo terminale disconnesso denominato direwolf, ed esegue in questo terminale il comando /usr/bin/direwolf -p -c direwolf.conf -t 0, che avvia direwolf leggendo il file di configurazione direwolf.conf dalla directory locale, con -p crea uno pseutoterminale a cui è possibile collegare il sottosistema ax25, mentre -t 0 disabilita la colorazione del testo.

Direwolf per rendere disponibile il nome dello pseudoterminale, che è assegnato dinamicamente, crea un link simbolico su /tmp/kisstnc. Nella quarta linea questo nome viene estratto dal link, ed assegnato alla variabile di ambiente PTS.

Successivamente kissattach connette questo pseudoterminale alla porta ax0, che avevamo creato precedentemente, mentre con kissparms configuriamo i parametri di temporizzazione del canale afsk.

Direwolf può essere eseguito in spazio utente, ma richiede che l’utente sia abilitato a gestire i dispositivi audio (quindi inserito nell’omonimo gruppo). E’ però anche necessario che alcuni dei comandi vengano eseguiti con i privilegi di root, e la cosa più semplice è quella di abilitare suid (chmod u+s) gli eseguibili necessari (direwolf, kissattach, kissparm, axlisten, axcall, etc).

Livelli audio

Sia soundmodem che direwolf richiedono una accurato settaggio dei livelli audio, sia in trasmissione che in ricezione. Una prima regolazione ‘grossa’ può essere effettuata usando i trimmer dell’interfaccia, mentre una più fine richiede di intervenire sul mixer di alsa, richiamabile con il comando alsamixer:

Regolare i livelli in trasmissione è più semplice, perchè – anche senza un misuratore della deviazione – basta ascoltare con un altro apparato il liivello di modulazione. Lato ricezione ritorna utile una delle caratteristiche di direwolf, che fra le informazioni diagnostiche riporta anche il livello audio, segnalando se è troppo alto o troppo basso. Anche sui raspberry meno performanti può quindi tornare utile installarlo,  per lanciarlo temporaneamente in modo da poter usare queesta indicazione per regolare il livello di ingresso. E’ consigliabile disabilitare il livello automatico, se disponibile, in modo da aver un risultato più accurato.
Dopo avere effettuato la configurazione dei livelli è bene memorizzarla con il comando alsactl store. In mancanza di questo passaggio i settaggi andranno persi al primo riavvio.
Per accedere al  terminale virtuale di direwolf basta lanciare screen -r direwolf, mentre per disconnettere il terminale, mantenendolo operativo in background, basta digitare in successione sulla tastiera CTRL-a e poi d.

Modem

Il protocollo ax-25 non ha fornisce specifiche per la tipologia di modem da usare per i collegamenti. Lo standard più diffuso in VHF/UHF è afsk, con due toni a 1200 e 2200Hz. Questo è bastato sulle caratteristiche del TNC-2 del TAPR, che utilizzava come modem un chip AM7910, non certo disegnato per l’uso in radio.  I due toni sono infatti quelli dello standard BELL202, usato nei modem telefonici a cavallo fra gli anni ’70 ed 80. E’ una tecnologia inefficiente ed obsoleta, continuare ad usarla ancora oggi è decisamente anacronistico, visto lo sviluppo che i modem hanno avuto in questi decenni.
Nel tempo si sono seguite varie strade per superare questa limitazione. La più nota di tutte è quella di G3RUH, con velocità 9600bps, pensato originariamente per l’uso via satellite, ma poi adottato anche per i collegamenti terrestri. Dalle nostre parti ha avuto una discreta diffusione SuperVozelj, un nodo multicanale con velocità superiori a 38kBaud. In genere sono soluzioni che richiedono una banda passante che eccede quella allocata alla voce, e – quindi – necessitano di hardware dedicato. Un’altra strada è quella di utilizzare sistemi di modulazione più evoluti, che consentano di sfruttare meglio il banda disponibile (circa 2.2kHz) e quindi di raggiungere veliocità maggiori usando apparecchiature radio standard. D’altro canto, del mio punto di vista per l’uso radioamatoriale la velocità è un parametro secondario, ed ha un senso solo per l’impiego in attività di emergenza.

Direwolf ha un documento specifico sulle caratteristiche delle tipologie di modem disponibile, e supporta anche fx25, una estensione del protocollo x25 che implementa il forward error correction, un metodo di  correzione degli errori di trasmissione basato sulla ridondanza dell’informazione. Anche soundmodem ha un modo interessante, newqps ovvero Q15X25, pensato per l’uso in HF, e che consente di rompere la ‘barriera’ di velocità dei vetusti standard Bell.

Sono tutti ambiti di sperimentazione: rimanere ancorati al modo TNC-2 è estremamente limitante.

Test

Una volta regolati i livelli, è il momento di testare il funzionamento del sistema. A questo scopo è utilissimo il Test CD di Stephen, WA8LMF, che contiene la registrazione del traffico radio nella zona di Los Angeles, e che può essere usato come ‘sorgente’ per testare il nostro sistema. Per elaborare i dati decodificati linux ha un comando apposito, axlisten, che visualizza in console tutto ciò che viene ricevuto. mentre con axcall è invece possibile effettuare una connessione con un’altra stazione packet radio e, quindi, testate anche la catena trasmittente.

A questo punto lo strato packet radio del nostro raspberry è pronto e funzionante, ed è possibile installare le applicazioni.
Sul mio nodo ne ho installate al momento due.

LinFBB

F6FBB è una applicazione per BBS ben nota, per inciso è la stessa – con minimi aggiustaggi – che usavo sul mio BBS packet nella prima metà degli anni ’80. LinFBB è la versione per Linux, anche questa installabile via apt-get o attraverso i sorgenti: valgono le stesse considerazioni fatte poco prima per Direwolf. Sulla rete c’è sempre documentazione su come gestirlo, per cui mi limito giusto a riportare il file un po’ più criptico, che è port.sys, (in genere /etc/ax25/fbb/port.sys, oppure /usr/local/etc/fbb/port.sys) :

# FBB7.0.10
#
#Ports TNCs
1 1
#
#Com Interface Adress (Hex) Baud
1 9 0 1200
#
#TNC NbCh Com MultCh Pacln Maxfr NbFwd MxBloc M/P-Fwd Mode Freq
0 0 0 0 0 0 0 0 00/01 ---- File-fwd.
1 4 1 ax0 250 7 2 10 30/05 XUWYL 144.875
#
# End of file.
#

Io faccio partire LinFBB al boot attraverso /etc/rc.local, che nel mio caso è:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.

## regen ssh keys on first boot
[ -f /etc/ssh/ssh_host_rsa_key.pub ] || ssh-keygen -A

/usr/sbin/soundmodem &
sleep 5
/sbin/xfbbd -s -a -l /var/log/xfbbd.log &
/usr/sbin/mheardd &
exit 0

LinFBB funziona in background, ma ci si può collegare  direttamente da console con il comando xfbbC -c -i <callsign>, il collegamento fra client e server avviene via TCP sulla porta 3386.

DxSpider beacon

Sul mio nodo ho attivato anche un beacon specializzato, che visualizza gli spot che passano attraverso la rete DxCluster, e più specificatamente il mio nodo dxcluster.i8zse.eu. Allo scopo ho scritto una piccola applicazione. Il nodo è normalmente in pausa, e rimane in attesa di un comando, inviato via un pacchetto UI. I comandi riconosciuti sono due: DXCLUSTER HELP, che invia un messaggio con le indicazioni di uso, e DXCLUSTER <filtro> che consente di impostare dei filtri di modo e di banda, e che attiva l’operatività del beacon. Il beacon per un periodo predefinito, al momento 10 minuti, invia sempre via UI, gli spot che soddisfano i filtri indicati. Trascorsi questi minuti, in assenza di nuovi comandi il beacon si disattiva.
Il software è scaricabile sul mio account github.

Parte 3