Skip to content

About

.NET library for recognizing amateur radio callsigns in decoded text (RTTY, CW, ...): callsign form, DXCC country (cty.dat), confirmation from MASTER.SCP and list of heard stations. Without graphical interface, so that it can be used in all our applications (RttyDecoder and others).

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

HamCallsign

Biblioteca .NET pentru recunoasterea indicativelor de radioamator in text decodat (RTTY, CW, ...): forma indicativului, tara DXCC (cty.dat), confirmarea din MASTER.SCP si lista statiilor auzite. Fara interfata grafica, ca sa poata fi folosita in toate aplicatiile noastre (RttyDecoder si altele).

  • tinte: netstandard2.0 si net8.0
  • datele (cty.dat, MASTER.SCP) sunt incluse in biblioteca; optional se actualizeaza saptamanal
  • aceleasi rezultate ca aplicatia Android (Yaesu-FTX1-CAT-Control), verificate de teste

Ce recunoaste

Forma Exemplu Tara cautata dupa
indicativ simplu (regula din Android) YO9VA, 3B8CF, K1A indicativ
prefix litera+cifra urmat de cifra, doar daca cty.dat are prefixul S50A, A61BK, E73A, T77C, 3DA0RS indicativ
sufix neutru /P /M /QRP /A /B /LH /J /R YO9VA/P indicativ
maritim / aeronautic mobil /MM /AM OH2BH/MM - (fara tara)
prefix de tara inainte DL/YO9VA, KH6/W6IWI/P prefix (DL, KH6)
alt district W6IWI/4 W4IWI
prefix de tara dupa DL1ABC/EA8 EA8

Formele din randul al doilea seamana cu zgomotul de decodare (I00P, K00A), de aceea se accepta doar cand cty.dat confirma un prefix de cel putin 2 caractere (S5, A6, E7, ...; 3 pentru 3DA). Callsign.TryParse(word, out c) fara cty.dat ramane exact regula Android; CallsignRecognizer si Callsign.TryParse(word, cty, out c) folosesc si confirmarea.

Punctuatia din jurul cuvantului ((YO9VA),) e ignorata. Indicativele din cty.dat cu intrare exacta (=4U1ITU, zone suprascrise) au prioritate fata de prefix.

Utilizare

using HamCallsign;

// o data, la pornire (copiile din cache daca exista si sunt valide, altfel cele incluse)
string cache = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "YO9VA", "MyApp");
var data = ReferenceData.Load(cache);
_ = ReferenceData.UpdateAsync(cache);   // in fundal; datele noi se folosesc la urmatoarea pornire

var recognizer = data.CreateRecognizer();
recognizer.MyCall = "YO9VA";            // indicativul propriu: recunoscut, dar nu intra in lista

// un singur cuvant
var m = recognizer.Recognize("DL/W6IWI");
// m.Entity.Name = "Fed. Rep. of Germany", m.Entity.Continent = "EU", m.Status = FormatOnly (W6IWI nu e in MASTER.SCP)

// text pe bucati, exact cum vine din decodor
var tracker = new CallsignTracker(recognizer);
tracker.CallsignRecognized += match => { /* evidentiere in terminal */ };
tracker.StationHeard += (station, isNew) => { /* actualizare lista */ };
tracker.Feed("CQ CQ DE W6I");
tracker.Feed("WI W6IWI K\n");
IReadOnlyList<HeardStation> stations = tracker.Stations;   // cele mai recente primele
File.WriteAllText("statii.csv", tracker.ToCsv());

Pentru evidentierea in terminal, CallsignHighlighter imparte fluxul in bucati de afisat:

var hl = new CallsignHighlighter(recognizer);
foreach (var seg in hl.Feed(chunk))
    if (seg.Match is { } m) AddColored(seg.Text, m.Status);   // indicativ (fara punctuatie)
    else AddPlain(seg.Text);                                 // restul, inclusiv spatii si '\n'
ShowProvisional(hl.PendingWord);   // cuvantul neterminat, decis la urmatoarea bucata

CallsignStatus:

  • Known - forma valida si indicativul e in MASTER.SCP sau in lista LoTW (match.KnownIn spune in care)
  • FormatOnly - forma valida, dar necunoscut (poate fi corect sau o eroare de decodare)
  • Own - indicativul propriu

MASTER.SCP si LoTW se folosesc doar ca semn de incredere; biblioteca nu corecteaza niciodata textul.

Actualizarea datelor

ReferenceData.UpdateAsync(folder) descarca cty.dat (country-files.com) si MASTER.SCP (supercheckpartial.com) daca cele din folder sunt mai vechi de 7 zile, si lista utilizatorilor LoTW (lotw-user-activity.csv, ARRL) daca e mai veche de o zi - cu If-Modified-Since, deci o lista neschimbata nu se mai descarca. Din LoTW se pastreaza doar indicativele active in ultimii 3 ani (~120.000). LoTW nu e inclusa in biblioteca (~6 MB): pana la prima descarcare lista e goala (includeLotw: false o sare). Un fisier se inlocuieste doar daca cel nou e valid, scrierea e atomica, iar la orice eroare (fara internet etc.) nu se intampla nimic - nu arunca exceptii.

Verificare online (pachetul HamCallsign.Online)

Separat, pentru ca are nevoie de cont si de internet: QRZ.com (serviciul XML) si HamQTH.com (gratuit). CallsignVerifier verifica intai listele locale, apoi QRZ.com, apoi HamQTH.com, o singura data pe indicativ si sesiune, cu cautarile pe rand:

using HamCallsign.Online;

var verifier = new CallsignVerifier(c => recognizer.KnownIn(c) != KnownSources.None);
verifier.QrzUsername = "..."; verifier.QrzPassword = "...";          // optional
verifier.HamQthUsername = "..."; verifier.HamQthPassword = "...";    // optional
verifier.VerificationUpdated += Redraw;                             // pe firul UI

verifier.RequestVerification(match.Callsign);                      // nu se asteapta
var state = verifier.GetState(match.Callsign);   // Pending / Confirmed / NotFound / Unavailable
var info = verifier.GetResult(match.Callsign);   // nume, oras, tara, grid (daca l-a gasit online)

Se lucreaza pe indicativul de baza: YO9VA/P si DL/YO9VA folosesc raspunsul pentru YO9VA.

Folosire intr-o aplicatie

Ca submodul git:

git submodule add https://github.com/Eugen68/HamCallsign.git external/HamCallsign
<ProjectReference Include="..\..\external\HamCallsign\src\HamCallsign\HamCallsign.csproj" />

Mai tarziu si ca pachet NuGet (dotnet pack src/HamCallsign; CI-ul publica .nupkg ca artefact).

Teste

dotnet test

tests/HamCallsign.Tests/Golden/android_callsigns.txt contine raspunsurile aplicatiei Android (CwTextRepair.esteIndicativValid si CtyDatabase.cauta) pentru 79.018 cuvinte, generate cu patch-ul tools/android-patch/callsign-prefix.patch aplicat (prefixele S5, A6, E7, ...). Daca regula se schimba in Android, fisierul se regenereaza cu:

tools/android-golden/regenerate.sh /cale/catre/Yaesu-FTX1-CAT-Control

Licenta

MIT, vezi LICENSE. Datele terte: THIRD-PARTY-NOTICES.md.

About

.NET library for recognizing amateur radio callsigns in decoded text (RTTY, CW, ...): callsign form, DXCC country (cty.dat), confirmation from MASTER.SCP and list of heard stations. Without graphical interface, so that it can be used in all our applications (RttyDecoder and others).

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages