Nowa wersja 0.3.9 z 6 maja 2007 działa poprawnie przy obliczaniu odległości dx. Wcześniej zakradł się błąd, który powodował w trakcie przeliczeń, że lon wszystkich stacji wynosiło zero stopni.
Pliki konfiguracyjne, zaadoptowane dla nowych standardów pracy digi APRS wraz z polskim SPn-n, można pobrać w przykładowej konfiguracji dla digi w Liwoczu.
Własny znak, pod którym digi pracuje w eterze - wysyła swoje beacony, ale także odpowiada na zapytania do stacji o tym znaku. Ponadto znak ten automatycznie jest wstawiany przez program w każdym miejscu konfiguracji, gdzie znajduje się w konfiguracji DIGI_CALL
digi_call: SR3NNN
Tekst, który będzie wysyłany w ramce własnego beaconu, należy zapisać w pliku digibcon.ini Wysyłanie tej ramki będzie się odbywało według:
beacon: [@]<time> <to-ports> [<dest>],[<digis>] <filename>
time = odstępy czasowe w minutach. Dodając '@' określamy
konkretną minutę pełnej godziny.
to-ports = <port>[,<port>]... określamy jeden port lub więcej portów,
albo określamy "all", aby beacon wysyłany był na wszystkich portach
dest = określamy adres przeznaczenia, wpisując DIGI_DEST program sam
będzie wstawiał adres przeznaczenia, który poniżej jest określony pod
komendą digi_dest
digis = <digi>[,digi]... adres digi, czyli ścieżka packetowa
filename = nazwa pliku zawierającego tekst dla ramki beaconu, zwykle
będzie to plik digibcon.ini
Przykład:
beacon: 20 all DIGI_DEST,WIDE2-2 digibcon.ini
W danym przykładzie beacon będzie wysyłany co 20 minut z adresem przeznaczenia określonym pod digi_dest i ścieżką packetową WIDE2-2. Będzie on również wysyłany jako odpowiedź na zapytanie (query) ?APRS?
Zalecane jest jednak skonfigurowanie beaconów, aby były wysyłane co 10 minut spełniając w ten sposób wymóg identyfikacji stacji automatycznej, ale z różnymi ścieżkami, czyli lokalnie co 10 minut, ale rzadziej z dłuższą ścieżką packetową. W tym celu należy posłużyć się znakiem @.
beacon: @0 all DIGI_DEST,WIDE2-2 digibcon.ini beacon: @10 all DIGI_DEST digibcon.ini beacon: @20 all DIGI_DEST,SP5-5 digibcon.ini beacon: @30 all DIGI_DEST digibcon.ini beacon: @40 all DIGI_DEST,WIDE2-2 digibcon.ini beacon: @50 all DIGI_DEST digibcon.ini
Dzięki takiej konfiguracj beacon, czyli ramka z tekstem zawartym w pliku digibcon.ini będzie wysyłany w następujący sposób:
@0 all DIGI_DEST,WIDE2-2 - o pełnej godzinie ze ścieżka
dwustopniową
@10 all DIGI_DEST - w 10 minucie bez ścieżki
@20 all DIGI_DEST,SP5-5 - w 20 minucie ze ścieżka pięciostopniową
@30 all DIGI_DEST - w 30 minucie bez ścieżki
@40 all DIGI_DEST,WIDE2-2 - w 40 minucie ze ścieżką dwustopniową
@50 all DIGI_DEST - w 50 minucie bez ścieżki
A także wysyłany jako odpowiedź na zapytanie (query) ?APRS?
Opcjonalnie można posłużyć się różnymi komentarzami dla poszczególnych beaconów (współrzędne, symbol, PHG będą zawsze takie same). W tym celu należy stworzyć kolejne pliki podobne do digibcon.ini z różnymi nazwami, jak np. beacon1.ini, beacon2.ini i przypisać je odpowiednim czasom wysyłania, ale posługując się zamiast 'beacon', komendą 'send'. Różnica pomiędzy 'beacon' a 'send' dotyczy funkcji query, na zapytania wysyłany jest jedynie tekst beaconu związany z 'beacon'. Będzie wówczas konfiguracja w rodzaju:
beacon: @0 all DIGI_DEST,WIDE2-2 digibcon.ini send: @10 all DIGI_DEST beacon1.ini send: @20 all DIGI_DEST,SP5-5 beacon2.ini beacon: @30 all DIGI_DEST digibcon.ini send: @40 all DIGI_DEST,WIDE2-2 beacon1.ini send: @50 all DIGI_DEST beacon2.ini
Ramka z tekstem beaconu zapisana w pliku digibcon.ini powinna zawierać dane, jak w przykładowej konfiguracji dla SR8NWF:
=4948.83NS02121.05E#PHG3630 W2,SPn,R Liwocz alt=562m asl
Szczegółowy opis beaconu znajduje się w ogólnym temacie dotyczącym digi.
Oprócz beaconów (pozycja) stacja może wysyłać ramki ze statusem, który daje dodatkowe informacje o stacji. Tekst ramki statusu należy wpisać w pliku digi_id.ini Wysyłanie ramki statusu będzie odbywało się według konfiguracji:
send: 30 all DIGI_DEST digi_id.ini
Można nawet dokładnie określić czas wysyłania statusu, nie tylko jego odstępy. Definiowanie odbywa się podobnie, jak w przypadku beaconów.
send: @15 all DIGI_DEST digi_id.ini send: @45 all DIGI_DEST digi_id.ini
Ramka statusu musi zaczynać się od >, który jest identyfikatorem danych APRS przewidzianym dla statusu przez specyfikację APRS. Dalsze informacje i ich kolejność są dowolne. Plik digi_id.ini dla SR8NWF zawiera następujący status:
>DIGI_NED: digipeater na Liwoczu 562m asl, klub SP8KJX op. SQ8ERB sq8erb@wp.pl
Własne ramki powinny być wysyłane na jeden ze standardowych adresów przeznaczenia. Zalecane jest wpisanie w nim informacji o programie obsługującym digi i jego wersji. W tym celu należy się posłużyć adresem APNDxx, gdzie APND oznacza program Digi_Ned, a xx wersję zgodnie z:
001 | 002 | 003 | 004 | 005 | 006 | 007 | 008 | 009 | 010 | 011 | 012 | 013 | 014 | 015 | 016 | 017 | 018 |
01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | 0G | 0H | 0I |
019 | 020 | 021 | 022 | 023 | 024 | 025 | 026 | 027 | 028 | 029 | 030 | 031 | 032 | 033 | 034 | 035 | 036 |
0J | 0K | 0L | 0M | 0N | 0O | 0P | 0Q | 0R | 0S | 0T | 0U | 0V | 0W | 0X | 0Y | 0Z | 10 |
037 | 038 | 039 | 040 | 041 | 042 | 043 | 044 | 045 | 046 | 047 | 048 | 049 | 050 | 051 | 052 | 053 | 054 |
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F | 1G | 1H | 1I |
Dla wersji 0.3.9 będzie to adres APND13. Należy wpisać:
digi_dest: APND13
Zdefiniowany tu adres przeznaczenia będzie wstawiany wszędzie, gdzie w konfiguracji jest DIGI_DEST
Duplicate checking wymaga przechowywania w pamięci powtórzonych ramek, aby nie powtarzać ich ponownie, kiedy docierają one kolejny raz od innych digi. Należy określić czas ich przechowywania. W digi_ned jest on określony pod komendą
keep_time: 300
Czas jest w sekundach, standardowo jest wpisane 300 sekund. Jest to długi okres, zwykle w digi ustawiane jest 30 sekund i w digi_ned też można tak ustawić, ale nie ma takiej potrzeby, bo stacje mobilowe będą wysyłały za każdym razem inną ramkę skoro ich pozycja się zmienia, stacje stałe nie muszą wysyłać tak często swojej pozycji. Krótszy czas jest potrzebny dla wiadomości, które są ponawiane, o ile nie dotarł ack, podobnie krótszy czas potrzebny jest dla query. W tym celu znajduje się w digi_ned komenda:
short_keep_time: 10
oraz korespondująca z nią:
data_prefix: :?~
I tu określone są prefiksy danych, czyli identyfikatory danych APRS, dla których duplicate checking będzie miał krótszy czas. Wiadomości w APRS mają identyfikator dwukropka, a query znak zapytania i są one już domyślnie umieszczone na liście dla short_keep_time.
Czas 30 sekund, który jest stosowany w digi opartych na samodzielnych TNC wynika z ograniczeń wewnętrznej pamięci, bo powtórzone ramki muszą być gdzieś przechowywane, aby można było z nimi porównywać nowo przychodzące. 30 sekund w zasadzie skutecznie eliminuje duplikaty, a TNC nie mają takich możliwości programowych, aby dać dwa różne czasy dla duplikatów, jak w digi_ned.
Zakwalifikowanie odebranej ramki, aby została powtórzona opiera się na takich kryteriach, jak port, na którym została odebrana, oraz kolejny adres digi (ścieżka); dodatkowo może być określony sposób obchodzenia się z ramką w zależności, czy jest to pierwszy, czy ostatni etap ścieżki i parę innych parametrów.
Do powyższych operacji można dodać liczbę, która jest maksymalną liczbą dla listy wcześniej zrealizowanych digi, domyślnie jest 1, dla innej wartości należy wpisać cyfrę 0-8.
Podstawowa funkcja powtarzania ramek określana jest komendą digipeat, a jej kryteria dotyczą:
digipeat: <from-ports> <due-digis> <to-ports> [operation[n] [<digis>]]
from-ports = <port>[,<port>]..., odebrane na porcie:
<port>[,<port>]..., lub "all" na wszystkich portach.
due-digis = <due>[,<due>]... lista "due" obejmuje formaty ścieżek (adres
digi), na które przypada kolejność w operowanej ramce. Np. SP3-3. Można
posłużyć się wariacjami w postaci ?, #, @ lub *.
to-ports = <port>[,<port>]... wysyłane na porcie: <port>[,<port>]...,
lub "all", aby wysyłać na wszystkich portach; "allbut" na wszystkich
portach z wykluczeniem odbierającego portu.
operation = add | replace | new | swap | hijack | erase |
keep | shift - sposób operowania ścieżką
n = liczba zaznaczonych digipeaterów w ścieżce jako
zrealizowane, domyślnie 1
digis = <digi>[,digi]... wstawiana ścieżka
(adres digi)
Przykład:
digipeat: all sp3-3 all swap0 sp3-2
digiend: <from-ports> <end-digis> <to-ports> [operation[n] [<digis>]]
from-ports = <port>[,<port>]..., odebrane na porcie:
<port>[,<port>]..., lub "all" na wszystkich portach.
end-digis = <end>[,<end>]... lista obejmuje formaty ścieżek (adres
digi), którymi są zakończone przychodzące ścieżki (poprzedni
zrealizowany element w ścieżce) i na które należy zareagować, np.
WIDE2-1. Można posłużyć się wariacjami w postaci ?, #, @ lub *.
to-ports = <port>[,<port>]... wysyłane na porcie: <port>[,<port>]...,
lub "all", aby wysyłać na wszystkich portach; "allbut" na wszystkich
portach z wykluczeniem odbierającego portu.
operation = add | replace | new | swap | hijack | erase |
keep | shift - sposób operowania ścieżką
n = liczba zaznaczonych digipeaterów w ścieżce jako
zrealizowane, domyślnie 1
digis = <digi>[,digi]... wstawiana ścieżka
(adres digi)
Przykład:
digiend: all wide2*,sp2* 2 add TAMA
DigiTo zadziała tylko wtedy, gdy jest adres przeznaczenia, a nie ma ścieżki (adresu digi) w ramce.
digito: <from-ports> <destinations> <to-ports> <ssid> [operation[n] [<digis>]]
from-ports = <port>[,<port>]..., odebrane na porcie:
<port>[,<port>]..., lub "all" na wszystkich portach.
destinations = <dest>[,<dest>]... lista
adresów przeznaczenia odebranych ramek, np. APRS, BEACON. Można
posłużyć się wariacjami w postaci ?, #, @ lub *.
to-ports = <port>[,<port>]... wysyłane na porcie: <port>[,<port>]...,
lub "all", aby wysyłać na wszystkich portach.
operation = add | replace | new | swap | hijack | erase |
keep | shift - sposób operowania ścieżką
n = liczba zaznaczonych digipeaterów w ścieżce jako
zrealizowane, domyślnie 1
digis = <digi>[,digi]... wstawiana ścieżka
(adres digi)
Przykład:
digito: all *-3 all 2 add0 DIGI_CALL
DigiSSID ma pierwszeństwo przed Digipeat.
digissid: <from-ports> <destinations> <to-ports> <ssid> [operation[n] [<digis>]]
from-ports = <port>[,<port>]..., odebrane na porcie:
<port>[,<port>]..., lub "all" na wszystkich portach; "allbut" na
wszystkich portach z wykluczeniem odbierającego portu.
destinations = <dest>[,<dest>]... lista adresów przeznaczenia odebranych
ramek, np. APRS, BEACON. Można posłużyć się wariacjami w postaci ?, #, @
lub *.
to-ports = <port>[,<port>]... wysyłane na porcie: <port>[,<port>]...,
lub "all", aby wysyłać na wszystkich portach; "allbut" na wszystkich
portach z wykluczeniem odbierającego portu.
operation = add | replace | new | swap | hijack | erase |
keep | shift - sposób operowania ścieżką
n = liczba zaznaczonych digipeaterów w ścieżce jako zrealizowane,
domyślnie 1
digis = <digi>[,digi]... wstawiana ścieżka (adres digi)
ssid = wstawiane SSID do adresu przeznaczenia
Przykład:
digissid: 1 *-12 all 0 add WIDE
DigiFirst zadziała tylko wtedy, jeśli due-digi jest pierwszym elementem ścieżki, ale jeśli jest już dalszym, to zadziała DigiNext.
digifirst: <from-ports> <due-digis> <to-ports> [operation[n] [<digis>]]
from-ports = <port>[,<port>]..., odebrane na porcie:
<port>[,<port>]..., lub "all" na wszystkich portach.
due-digis = <due>[,<due>]... lista "due" obejmuje formaty ścieżek (adres
digi), na które przypada kolejność w operowanej ramce. Można posłużyć
się wariacjami w postaci ?, #, @ lub *.
to-ports = <port>[,<port>]... wysyłane na porcie: <port>[,<port>]...,
lub "all", aby wysyłać na wszystkich portach; "allbut" na wszystkich
portach z wykluczeniem odbierającego portu.
operation = add | replace | new | swap | hijack | erase |
keep | shift - sposób operowania ścieżką
n = liczba zaznaczonych digipeaterów w ścieżce jako zrealizowane,
domyślnie 1
digis = <digi>[,digi]... wstawiana ścieżka (adres digi)
Przykład:
digifirst: all sp5-5 all swap DIGI_CALL,sp5-4
diginext: <from-ports> <due-digis> <to-ports> [operation[n] [<digis>]]
from-ports = <port>[,<port>]..., odebrane na porcie:
<port>[,<port>]..., lub "all" na wszystkich portach.
due-digis = <due>[,<due>]... lista "due" obejmuje formaty ścieżek (adres
digi), na które przypada kolejność w operowanej ramce. Można posłużyć
się wariacjami w postaci ?, #, @ lub *.
to-ports = <port>[,<port>]... wysyłane na porcie: <port>[,<port>]...,
lub "all", aby wysyłać na wszystkich portach; "allbut" na wszystkich
portach z wykluczeniem odbierającego portu.
operation = add | replace | new | swap | hijack | erase |
keep | shift - sposób operowania ścieżką
n = liczba zaznaczonych digipeaterów w ścieżce jako zrealizowane,
domyślnie 1
digis = <digi>[,digi]... wstawiana ścieżka (adres digi)
Przykład:
diginext: all sp5-5 all swap0 sp5-4
ssid_ignore_prefix: <char>[<char>]...
char = identyfikator danych APRS, które mają być pominięte przy powtarzaniu według DigiSSID. Przykład:
ssid_ignore_prefix: ~
Zazwyczaj stacja pracuje z jednym portem, stąd użyte jest uproszczenie - wszędzie porty określone są jako all.
Obsługa własnego znaku
digipeat: all DIGI_CALL all
Powtarzane są wszystkie ramki zawierające w ścieżce własny znak digi.
Obsługa WIDEn-n
digipeat: all wide7-7 all swap DIGI_CALL,wide2-1 digipeat: all wide7-6 all swap2 DIGI_CALL,wide2 digipeat: all wide6-6 all swap DIGI_CALL,wide2-1 digipeat: all wide6-5 all swap2 DIGI_CALL,wide2 digipeat: all wide5-5 all swap DIGI_CALL,wide2-1 digipeat: all wide5-4 all swap2 DIGI_CALL,wide2 digipeat: all wide4-4 all swap DIGI_CALL,wide2-1 digipeat: all wide4-3 all swap2 DIGI_CALL,wide2 digipeat: all wide3-3 all swap DIGI_CALL,wide2-1 digipeat: all wide3-2 all swap2 DIGI_CALL,wide2 digipeat: all wide2-2 all swap DIGI_CALL,wide2-1 digipeat: all wide2-1 all swap2 DIGI_CALL,wide2 digipeat: all wide1-1 all swap DIGI_CALL,wide1
Według aktualnych standardów APRS, obsługa WIDEn-n polega na wstawianiu do przekazywanej ramki znaku digi, czyli WIDEn-n jest trasowany. Limitowanie w digi_ned pozwala na przekazywanie ramek z nadmierną ścieżką, która zostaje jednocześnie zamieniona na zgodną z lokalnymi limitami. Np. WIDE6-6 nie tylko zostaje zredukowane o jeden (zwykle do WIDE6-5), ale także zamienione na WIDE2-1. Zostają zignorowane ramki, które przeszły już przez tyle digi, że nie mieszczą się w limicie. Np. WIDE5-3 przeszedł już przez dwa digi, obecny byłby trzecim stopniem, więc ramki z taką ścieżką nie są obsługiwane.
Obsługa SPn-n
digifirst: all sp7-7 all swap DIGI_CALL,sp7-6 diginext: all sp7-7 all swap0 sp7-6 digipeat: all sp7-6 all swap0 sp7-5 digipeat: all sp7-5 all swap0 sp7-4 digipeat: all sp7-4 all swap0 sp7-3 digipeat: all sp7-3 all swap0 sp7-2 digipeat: all sp7-2 all swap0 sp7-1 digipeat: all sp7-1 all swap sp7 digifirst: all sp6-6 all swap DIGI_CALL,sp6-5 diginext: all sp6-6 all swap0 sp6-5 digipeat: all sp6-5 all swap0 sp6-4 digipeat: all sp6-4 all swap0 sp6-3 digipeat: all sp6-3 all swap0 sp6-2 digipeat: all sp6-2 all swap0 sp6-1 digipeat: all sp6-1 all swap sp6 digifirst: all sp5-5 all swap DIGI_CALL,sp5-4 diginext: all sp5-5 all swap0 sp5-4 digipeat: all sp5-4 all swap0 sp5-3 digipeat: all sp5-3 all swap0 sp5-2 digipeat: all sp5-2 all swap0 sp5-1 digipeat: all sp5-1 all swap sp5 digifirst: all sp4-4 all swap DIGI_CALL,sp4-3 diginext: all sp4-4 all swap0 sp4-3 digipeat: all sp4-3 all swap0 sp4-2 digipeat: all sp4-2 all swap0 sp4-1 digipeat: all sp4-1 all swap sp4 digifirst: all sp3-3 all swap DIGI_CALL,sp3-2 diginext: all sp3-3 all swap0 sp3-2 digipeat: all sp3-2 all swap0 sp3-1 digipeat: all sp3-1 all swap sp3 digifirst: all sp2-2 all swap DIGI_CALL,sp2-1 diginext: all sp2-2 all swap0 sp2-1 digipeat: all sp2-1 all swap sp2 digipeat: all sp1-1 all swap sp1
Alias SPn-n nie jest limitowany, przyjmowane są wszystkie n-n. Digi nie wstawia swojego znaku do przekazywanej ramki, chyba, że jest on pierwszym digi, który przekazuje daną ramkę.
Funkcja Preempt dotyczy wstępnej operacji zanim ramka będzie podlegała wyżej wymienionym operacjom jej powtarzania. Polega ona na wyszukiwaniu określonych elementów ścieżki, gdyby one znalazły się na dalszym miejscu niż wynika to ze zwykłej kolejności. Dzięki niej nastąpi przejście do określonego miejsca ścieżki i wymazanie wcześniejszych nieużytych elementów.
preempt: <from-ports> <on-digis> [<replace>]
from-ports = <port>[,<port>]..., odebrane na porcie:
<port>[,<port>]..., lub "all" na wszystkich portach
on-digis = <find>[,<find>]... lista poszukiwanych elementów ścieżki
(adresów digi), na podstawie których zadziała Preempt. Można posłużyć
się wariacjami w postaci ?, #, @ lub *.
replace = wstawiany zamiennik (np. znak digi) w miejsce znalezionego. Jeśli replace nie jest określone, find pozostaje nie zmienione.
Przykład:
preempt: all SR3DPN POZN
preempt_keep: <digis>
digis = <keep>[,<keep>]... lista elementów ścieżki (adresów digi), które mają być zachowane, gdy zadziała Preempt. Można posłużyć się wariacjami w postaci ?, #, @ lub *.
Przykład:
preempt_keep: SR*,SP3*,SQ3*
preempt_never_keep: <digis>
digis = <keep>[,<keep>]... lista elementów ścieżki (adresów digi), które nigdy nie powinny być pozostawione, gdy zadziała Preempt. Można posłużyć się wariacjami w postaci ?, #, @ lub *.
Przykład:
preempt_never_keep: RELAY*,WIDE*,TRACE*,GATE*
local: <local-ports>
local-ports = <port>[,<port>]... lista portów lub "all", jeśli wszystkie porty
Przykład:
local: 2