Skip to content
Eugen68Public

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

HamRig

Biblioteca .NET pentru controlul statiei (CAT) din aplicatiile noastre (RttyDecoder, CwDecoder, aplicatia mare): o singura interfata - frecventa, mod, PTT, evenimente la schimbare - cu doua moduri de conectare:

Direct (YaesuCatRig) OmniRig (OmniRigRig)
Statii Yaesu-urile noi (FTDX10 verificat; FTX-1, FTDX101, FT-710, FT-991A, FT-891) orice statie stiuta de OmniRig
Folosire simultana cu alte programe nu (portul COM e al unui singur program) da (OmniRig detine portul)
Actualizare instantanee (AI1: statia anunta singura) citire periodica (250 ms)
Comenzi frecventa, mod (toate modurile FTX-1), PTT (CAT sau RTS/DTR), manipulare RTS/DTR frecventa, mod (fara RTTY separat), PTT si manipulare doar RTS/DTR pe portul de manipulare (OmniRig nu face PTT)
Cerinte nimic in plus OmniRig instalat si configurat (Windows)
  • tinta: net8.0; OmniRig doar pe Windows
  • conectarea directa e portata din aplicatia Android Yaesu-FTX1-CAT-Control (RadioManager): 38400 baud, AI1;, FA pe 9 cifre, codurile de mod MD0x ale FTX-1, PTT si FSK pe RTS/DTR pe al doilea port USB al statiei (portul se deschide o singura data)

Statii verificate

Statie Direct (CAT Yaesu) OmniRig PTT Manipulare (FSK)
FTDX10 verificat verificat verificat (CAT si RTS/DTR) verificat

Compatibile (aceleasi comenzi CAT ca FTDX10: FA pe 9 cifre, MD0x, TX, AI1; cele cu USB apar ca doua porturi COM, "Enhanced" pentru CAT si "Standard" pentru PTT/FSK): FTX-1, FTDX101D/MP, FT-710, FT-991A, FT-891.

De stiut:

  • codurile de mod rare difera intre modele: la FT-991A MD0E e C4FM (aici apare ca PSK), FT-891 nu are E/F. Frecventa, PTT-ul, manipularea si modurile uzuale (LSB, USB, CW, DATA, RTTY) au aceleasi coduri;
  • ce face RTS si ce face DTR (PTT, FSK, CW) se alege din meniul statiei, nu din program;
  • viteza CAT trebuie sa fie aceeasi ca in meniul statiei.

Nu merg direct: Yaesu mai vechi cu frecventa pe 8 cifre (FT-950, FT-2000, FT-450 - citirea merge, schimbarea frecventei nu) si FT-817/857/897 (protocol binar). Pentru ele si pentru alte marci: OmniRig.

Utilizare

using HamRig;

var settings = new RigSettings
{
    Kind = RigKind.YaesuCat,       // sau RigKind.OmniRig (+ OmniRigNumber = 1 / 2)
    CatPort = "COM5",              // FTX-1: primul port, "Enhanced COM Port"
    CatBaud = 38400,               // ca in meniul statiei
    CatPttPin = SerialPin.None,    // PTT pe un pin al portului CAT (None / Rts / Dtr)

    // portul de manipulare si PTT - FTX-1: al doilea port, "Standard COM Port"
    KeyPort = "COM6",
    KeyBaud = 4800,
    KeyPortPttPin = SerialPin.Rts, // PTT aici sau la CatPttPin, nu in ambele locuri
    KeyPin = SerialPin.Dtr,        // FSK / keying CW: rig.SetKey(true/false)
};
// niciun pin de PTT ales = conexiunea directa: comanda CAT TX1;  OmniRig: fara PTT
// settings.Validate() spune ce nu e bine (PTT in doua locuri, acelasi pin pentru PTT si manipulare...)

using IRig rig = settings.CreateRig()!;
rig.StateChanged += s => Console.WriteLine($"{RigMath.FormatFrequency(s.FrequencyHz)} {RigMath.ModeName(s.Mode)} {(s.Transmitting ? "TX" : "RX")} - {s.StatusText}");
await rig.ConnectAsync();          // RigException: port ocupat/inexistent, statia nu raspunde, OmniRig lipsa

rig.SetFrequency(14_083_000);
rig.SetMode(RigMode.DataU);
rig.SetPtt(true);

StateChanged vine pe un fir din fundal (in WPF: Dispatcher.BeginInvoke). RigSettings se salveaza direct cu System.Text.Json; RigSettings.GetPortNames() da lista porturilor COM.

Frecventa semnalului si QSY

// frecventa RF a Mark-ului decodat la 2125 Hz in waterfall (USB/DATA-U: VFO + ton, LSB: VFO - ton)
double? rf = RigMath.ToneToRf(rig.State.FrequencyHz, rig.State.Mode, 2125);

// QSY: semnalul auzit la 1500 Hz adus pe 2125 Hz
if (RigMath.QsyDial(rig.State.FrequencyHz, rig.State.Mode, 1500, 2125) is { } dial) rig.SetFrequency(dial);

In modurile in care statia demoduleaza singura (RTTY, PSK, AM, FM) afisajul statiei e deja frecventa semnalului, iar ToneToRf / QsyDial intorc null.

Intr-o aplicatie

Un singur obiect IRig detine statia si toate modulele il folosesc pe acela (pentru conectarea directa, portul COM nu poate fi deschis de doua ori). Ca submodul git:

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

Teste

dotnet test

Fara statie: un FTX-1 simulat pe un port serial fals (tests/HamRig.Tests/FakeFtx1.cs) si un OmniRig simulat. Verificarea pe statia reala: din aplicatie (Setari > Conexiune statie > Testeaza).

Licenta

MIT, vezi LICENSE.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages