Obraz systemu Debian na komputer jednopłytkowy ALIX z uzupełniem o programy radioamatorskie
APRX, Direwold, MMDVMHost, SvxLink i inne

~~~~~~~~~~~~~~~~~~~~~
KONFIGURACJA DIREWOLF
~~~~~~~~~~~~~~~~~~~~~

UWAGA! Jak wspomniano wcześniej procesor AMD Geode LX na płytce ALIX nie obsługuje intrukcji SSE. Direwolf jest soundmodemem, czyli programem który używając wejścia i wyjścia z karty dźwiękowej dekoduje i generuje transmisję APRS programowo, przy pomocy odpowiedniego algorytmu DSP (digital signal processing). Pewną wadozaletą Direwolf jest to, że tak naprawdę uruchamia on kilka osobnych wątków algorytmu, które są zestrojone na nieco inne częstotliwości tonów MARK i SPACE modulacji AFSK. Dzięki takiemu podejściu Direwolf kompensuje delikatne różnice w prędkości bodowej wynikłe z niedokosnałości innych stacji APRS. Z drugiej jednak strony użyty algorytm jest (jak to zwykle bywa z DSP) dość wymagający obliczeniowo.

W normalnym przypadku DireWolf jest skompilowany z ustawieniami powodującymi używanie instrukcji SSE, które znacznie przyspieszają wykonywanie bardzo dużej ilości mnożeń i dodawań. Direwolf zawarty w tym obrazie został skompilowany z wyłączeniem tej opcji, dzięki temu program jest w stanie w ogóle pracować. Niestety odbywa się to kosztem bardzo dużego obciążenia procesora. Direwolf podczas pracy zużywa praktycznie 100% czasu procesora AMD Geode LX800 i to przy automatycznie obniżonej częstotliwości próbkowania audio (do 32kHz). Oznacza to, że uruchamiając Direwolf nie będziemy w stanie wykorzystywać ALIXa w zasadzie do niczego wiecej.

Ponieważ Direwolf jest soundmodemem i niczym więcej oznacza to, że ALIX powinien być wyposażony w kartę dźwiękową, gdyż nie ma możliwości użycia np. modemu KISS podłączonego o portu szeregowego. Jeżeli używana wersja płytki ALIX nie ma zintegrowanej karty dźwiękowej (na układzie Realtek) należy zakupić zewnętrzną, podłączaną po USB. Najpopularniejszymi do tego celu są tanie 'dongle' reklamowane na allegro jako 'karta dźwiękowa USB 7.1', 'karta muzyczna 5.1 USB Jack', 'karta muzyczna 3D sound' itp. Wspólną ich cechą jest mała (najczęściej czarna) obudowa przypominająca dużego pendrive. Dwa złącza jack 3.5mm, oraz czasami dwie diody sygnalizujące pracę, oraz dwa przyciski. Kosztują one poniżej 20pln i bazują na jednym i tym samym układzie przetworników cyfra-analog i analog-cyfra. Do słuchania muzyki zbytnio się nie nadają ze względu na słabą jakość dźwięku i dość znaczne szumy ale do celów APRS wystarczą.

Konfiguracja direwolf odbywa się przez plik /etc/direwolf.conf. Ma on zdecydowanie odmienną strukturę niż ten z APRX, lecz jest pewne parametry zostały już skonfigurowane. Program oferuję nieco więcej opcji niż jest to opisane poniżej. Posiada np. zaawansowane opcję filtrowania w odniesieniu do digi czy igate, umożliwiające określenie jakie dokładnie ramki będa retransmitowane/nadawane. Ze względu na mnogość opcji filtrowania (obszar/promień wokół stacji, ramki pozyjne, pogodowe, telemetryczne, wiadomości itp) nie zostaną one tu uwzględnione.

strzałka W pierwszej części należy wybrać odpowiedni interfejs audio. Konfiguracja w systemie Linux wygląda miej więcej tak:
'ADEVICE plughw:1,0'

Normalnie interfejsy audio są liczone od zera i w przypadku płytek ALIX pozbawionych wewnętrznej karty audio karta USB powinna zostać wykryta jako 'plughw:0,0' , jednakże z nie do końca znanych mi przyczyn tak się nie dzieje. Zapewne wpływ na to ma sam sterownik. Generalnie w przypadku wątliwości można posłużyć się trzema poleceniami:
'aplay -l' < - listuje wszystkie urządzenia wyjśćiowe
'arecord -l' < - listuje wszystkie urzązenia wejściowe
'lsusb -t' < - listuje w postaci drzewa wszystkie urządzenia podłączone do USB

Wartym zauważenia jest fakt, że wspomniane wyżej 'czarne' dongle audio USB czasami nie pokazują się w lsusb jeżeli nie wywoła sie go z opcjonalnym parametrem '-t' listującym w postaci drzewa. Nie wiem dlaczego się tak dzieje, ale po prostu tak jest. Pomimo tego dziwnego zachowania interfejs działa bez problemu.

Wynikiem działania polecenia 'aplay -l' może być następujący listing:

mateusz@mateusz-Latitude-E5510:~$ aplay -l
**** Lista PLAYBACK urządzeń ****
karta 0: MID [HDA Intel MID], urządzenie 0: 92HD81B1X5 Analog [92HD81B1X5 Analog]
Urządzenia podrzędne: 0/1
Urządzenie podrzędne #0: subdevice #0
karta 0: MID [HDA Intel MID], urządzenie 3: HDMI 0 [HDMI 0]
Urządzenia podrzędne: 1/1
Urządzenie podrzędne #0: subdevice #0
karta 0: MID [HDA Intel MID], urządzenie 7: HDMI 1 [HDMI 1]
Urządzenia podrzędne: 1/1
Urządzenie podrzędne #0: subdevice #0


Oczywiście w tym przypadku jest to listing nie z ALIXa ale z mojego laptopa, stąd oczywiste różnice (w tym językowe). Co do zasady pierwsza pierwsza cyfra występująca po 'plughw:' oznacza numer karty (tu wszędzie zero). Natomiast druga cyfra oznacza numer urzązenia (tu 0, 3, albo 7)

strzałka Pozostałe opcje dotyczące dźwięku, czyli 'ARATE' i 'ACHANNELS' pozostawiamy bez zmian. Tym bardziej, że jak wspomniałem prędkość próbkowania zostanie i tak obniżona z 44100 ze względu na brak mocy procesora

strzałka W sekcji 'MODEM 0' należy podać znak własny stacji
'MYCALL SR9NXX'

strzałka Reszte ustawień pozostawiamy bez zmian aż dojdziemy do konfiguracji 'PTT'. Tutaj ustawienia będą różniły się w zależności od tego w jaki sposób radiotelefon będzie interfejsowany do ALIX. Z całą pewnością można stwierdzić, że jeżeli zależy nam na nadawaniu to nie powinniśmy korzystać z funkcji VOX. Alix posiada kilka linii GPIO ale w zasadzie nie ma możliwości ich użycia w direwolf ze względu na brak opowiedniego API. Wobec tego użytkownik jest de facto skazany na użycie portu szeregowego. Czy to na USB czy zintegrowanego z ALIXem. Należy odkomentować, zakomentowaną przez '#' linię
'PTT /dev/ttyUSB0 RTS -DTR'

/dev/ttyUSB0 < - wskazuje że do sterowania PTT będzie używany konwerter na USB
RTS < - ustawia linię RTS ze stanem wysokim jako aktywnym
-DTR < - ustawia linię DTR ze stanem niskim jako aktywnym

Jeżeli więc radiotelefon włącza nadawanie przy stanie niskim na lini PTT (po ściągnięciu PTT do masy) należy go podłączyć do DTR. Jeżeli nadajnik załącza się przy stanie wysokim na PTT (podciągnięcie PTT do B+) to należy użyć RTS.

strzałka Direwolf może pracować jako 'wirtualny TNC z wykorzystaniem protokołu AGW Packet Engine i KISS over TCP. Opcje te konfiguruje się opcjami:
'AGWPORT 8000'
'KISSPORT 8001'

UWAGA!!!!!!!! Direwolf będzie uruchamiał te usługi na wszystkich interfejsach, również na eth0 funkcjonującym jako WAN. Należy zachować daleko idącą powściągliwość jeżeli na interfejsie eth0 jest publiczny adres IP (bezpośrednio albo przez przekierowanie). Dostep do Direwolf na portach 8000 i 8001 NIE jest chroniony żadnym hasłem i może tam podłączyć się dowolna osoba. Do tego należy założyć że amatorsko napisana aplikacja ma istotne luki bezpieczeństwa i jest podatna na ataki. Jeżeli więc ALIX ma bezpośrednie wyjście na świat należy rozważyć zablokowanie w iptables możliwości podłączenia się z zewnątrz na port 8000 i 8001

strzałka W dalszej części należy skonfigurować wysyłanie własnych beaconów. Można dostosować istniejące przykłady albo stworzyć własną konfigurację od początku, np w poniższy sposób:
'PBEACON delay=00:30 every=20 overlay=I symbol="igate" lat=50^00.00N long=022^00.00E comment="direwolf igate" via=WIDE2-1'

delay=00:30 < - pierwsza ramka zostanie nadana 30 sekund po starcie programu
every=20 < - każda kolejna będzie nadawana po 20 minutach od poprzedniej
oberlay=I < - Litera I wpisana w symbol
symbol=igate < - Czarny romb symbolizujący igate
lat, lon < - współrzędne geograficzne w formacie stopnie, minuty dziesiętne
comment < - komentarz (treść) ramki
via=WIDE2-1 < - ramka będzie nadawana ze ścieżką WIDE2-1

strzałka Direwolf może pracować również jako digipeater. Jego konfiguracja opiera się na wpisywaniu wyrażeń regularnych Regexp, które muszą spełniać powtarzane ramki. Może to być postrzegane jako nieco zawiłe ale przynajmniej w odróżnieniu od APRX funkcja digi działa tu tak jak powinna. Zasada tworzenia Regexp została dość obszernie wyjaśniona w języku angielskim, w komentarzach do pliku konfiguracyjnego. Poniżej znajduje się jednak kilka przykładowych konfiguracji
'DIGIPEAT 0 0 ^SR9NXX$ ^WIDE[1-2]-[1-2]'

0 0 < - oznacza odpowiednio interfejs wejściowy i wyjściowy.
^ < - oznacza że przed WIDE nie może znajdować się żaden inny znak. Zabezpiecza przed powtarzaniem uszkodzonych ramek (np GWIDE zostanie odrzucone)
[1-2] < - oznacza cyfrę z zakresu 1 do 2.
$ < - oznacza że po ostatniej cyfrze nie może znajdować się żaden inny znak. Zabezpiecza przed retransmisją dziwadełek w postaci np WIDE1-13
SR9NXX< - znak własny stacji

W tej linii wyrażenia regularne pojawiają się dwa razy. Pierwsze z nich '^SR9NXX$' odnosi się do elementów ścieżki które, będą zamieniane bezpośrednio na znak digi bez zastosowania powtarzania wg zasady WIDEn-N. W uproszczeniu wpisanie tam znaku własnego stacji spowoduje, że digi będzie powtarzało ramki w których jest wymienione "z imienia i nazwiska".

Drugie wystąpienie wyrażenia regularnego, tym razem ze słowem kluczowym WIDE odnosi się do ścieżek które będą powtarzane wg zasady WIDEn-N. Jeżeli więc digi odbierze ścieżkę WIDE2-2 to wstawi na początku swój znak z H-bitem i zmniejszy liczbę pozostałych przeskoków. W efekcie nadane zostanie coś takiego: SR9NXX*,WIDE2-1. Wpisanie tego regexp jako pierwszego spowodowało by, że ścieżka została by skrócona a WIDE2-2 po prostu zostało by zastąpione przez SR9NXX i naturalnie ramka nie była by już dalej powtarzana.

Jeżeli interesuje nas tylko i wyłącznie funkcjonalność małego digi, tj powtarzającego tylko WIDE1-1 (SILNIE ZALECANE!!) to można użyć czegoś takiego:
'DIGIPEAT 0 0 ^SR9NXX$ ^WIDE[1]-[1]'

strzałka Direwolf ma oczywiście funckjonalność bramki internetowej (igate). Aby ją włączyć należy przede wszystkim wpisać opcję z adresem rządanego serwera APRS-IS oraz loginu i passcode.
'IGSERVER euro.aprs2.net'
'IGLOGIN SR9NXX 12345'

Dodatkowo warto włączyć wysyłanie bezpośrednio do serwera APRS-IS ramki pozycyjnej. Jak widać jedyną różnicą w porównaniu z konfiguracją ramek wysyłanych po radiu jest brak ścieżki i wskazanie parametru sendto na IG
'PBEACON sendto=IG delay=00:30 every=20 overlay=I symbol="igate" lat=50^00.00N long=022^00.00E comment="direwolf igate"'

Powyższa konfiguracja jest wystarczająca do uruchomienia bramki odbiorczej RX-igate

~~~~~~~~~~~~~~~~~~~~~
URUCHAMIANIE DIREWOLF
~~~~~~~~~~~~~~~~~~~~~

Direwolf odróżnia się od APRX i innych usług systemowych sposobem uruchamiania. O ile w przypadku APRX wystarczyło wpisać 'systemctl start aprx' tutaj takie podejście nie będzie właściwe. Direwolf działa w trybie interactive co oznacza, że cały czas będzie wyświetlał na konsoli swoje wyjście. Aby mógł pracować w tle obecny jest specjalny skrypt, który będzie go uruchamiał na tzw. screenie czyli konsoli tekstowej która może pracować w tle. Skrypt jest uruchamiany co minutę przez cron i sprawdza czy Direwolf działa - jeżeli tak nie jest to program jest uruchamiany.

Domyślnie wywoływanie tego skryptu jest zablokowane. Można to zmienić przez edycję crontab. Należy więc wydać polecenie 'nano /etc/crontab' i odkomentować linijkę
'#* * * * * root cd /etc && ./dw-start.sh'

Następnie należy zrestartować cron
'systemctl stop cron'
'systemctl start cron'

Podgląd pracy Direwolf jest możliwy przez wydanie polecenia:
'screen -r direwolf'

Będąc podłączonym do screena dostępne są między innymi te dwa, ważne skróty klawiszowe:
CTRL + C - powoduje wyłączenie Direwolf i zamknięcie screen
CTRL + A + D (trzymać CTRL potem wcisnąć A a potem D) - odłączenie od screena i przestawienie go na pracę w tle.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DIREWOLF I REGULACJA GLOŚNOŚCI
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Do poprawnej pracy direwolf należy odpowiednio nastawić poziom głośności. Do tego celu służy polecenie 'alsamixer -V all'. Należy przede wszystkim zwrócić uwagę na to aby wyłączona była opcja "Automatic Gain Control" albo "AGC" jeżeli takowa w ogóle występuje. W tym celu należy używając strzałek lewo prawo wybrać pozycję AGC i nacisnąć literę M na klawiaturze tak aby kanał był oznaczony jako 'MM' a nie '00'

Następnie należy nastawić kanał CAPTURE, oraz regulację głośności w radiotelefonie tak aby podawany przy każdej ramce poziom głosności (audio level w konsoli Direwolf) był w granicach 30 do 50. Poziom wyjściow (PCM) należy dobrać tak aby nadawane ramki nie były zbyt ciche lub na ucho "przesterowane". Oczywiście warto przy tym korzystać z aprs.fi albo radia wyposażonego w możliwość dekodowania APRS aby sprawdzić czy nadawane ramki są odbierane przez innych poprawnie.

Generalnie po wyjściu z alsamixer poziomy głosności powinny zostać zapisane na stałe w systemie. Jeżeli jednak po restarcie ustawienia wracaja do innych - domyślnych nalezy wpisać w konsoli
'alsactl store'




  PRZEJDŹ NA FORUM