-
Notifications
You must be signed in to change notification settings - Fork 1
Zadani
Cilem je navrhnout univerzalni radioamatersky denik (logbook), ktery bude urcen zejmena pro rekreacni cinnost, ale bude mozne ho pouzit i pro obcasny contesting na KV, VKV (ale pro tuto cinnost nebude optimalizovan). Cilem je univerzalnost, modularnost a rozsiritelnost. Co se tyka univerzalnosti, inspiraci muze byt napr. logger32 pro windows. Dale se lze inspirovat z cqrlog, tucnak (specializovany denik pro VKV zavody), ham radio deluxe, atp.
- Repositar + wiki :)
-
Zakladni build system a adresarova struktura pro jednotlive casti + main.cpp/main.c pro jednotlive casti
- ui/qt - Qt rozhrani
- library - klientska knihovna
- server - server
- docs - doxygen dokumentace k library
-
Server: implementace nesifrovaneho prihlaseni oproti pevne danemu heslu
- Server - hlavni trida serveru
- Config - trida pro konfiguraci pomoci .ini + server.cfg ukazka
- UserRegistry - overuje identitu uzivatele
- SimpleUserRegistry - naivni implementace s std::map<jmeno, heslo>
- Request - HTTP Request
- RequestParser - HTTP request parser
- RequestHandler - Zpracovava prichozi dotazy a vola patrictny Responder.
- RequestResponder - Abstraktni trida pro odpoved na dotazy
- Responder::Root - responder pro /
- Responder::Login - responder pro /login
- Reply - HTTP reply
- Session - Spravuje jednoho prihlaseneho uzivatele
- SessionManager - Spravuje sessiony
- library: implementace nesifrovaneho prihlaseni k serveru
-
eventloop.c/eventloop.h
-
HAMEventLoopUICallbacks
- void *timeout_add(int interval, HAMTimeoutCallback *callback, void *user_data);
- void timeout_remove(void *handle);
- void *input_add(int fd, HAMInputCondition cond, HAMInputCallback *callback, void *user_data);
- void input_remove(void *handle);
- void ham_eventloop_set_ui_callbacks(HAMInputUICallbacks *callbacks);
- void *ham_timeout_add(int interval, HAMTimeoutCallback *callback, void *user_data);
- void ham_timeout_remove(void *handle);
- void *ham_input_add(int fd, HAMInputCondition cond, HAMInputCallback *callback, void *user_data);
- void ham_input_remove(void *handle);
-
HAMEventLoopUICallbacks
-
connection.c/connection.h
-
HAMConnectionUICallbacks
- void connected(HAMConnection *connection);
- void disconnected(HAMConnection *connection, const char *reason);
- void ham_connection_set_ui_callbacks(HAMConnectionUICallbacks *callbacks);
- HAMConnection *ham_connection_new(const char *hostname, int port, const char *username, int port);
- ham_connection_connect(HAMConnection *connection);
- ham_connection_disconnect(HAMConnection *connection);
- ham_connection_destroy(HAMConnection *connection);
-
HAMConnectionUICallbacks
-
parser.c/parser.h
- HAMParser *ham_parser_new();
- int ham_parser_parse(HAMResponse *response, char *data);
- void ham_parser_reset(HAMParser *parser);
- void ham_parser_destroy(HAMParser *parser);
-
reply.c/reply.h
- HAMReply *ham_reply_new();
- ...
- ham_reply_destroy(HAMReply *reply);
- request.c/request.h
-
eventloop.c/eventloop.h
-
Qt rozhrani:
- QtEventLoop - implementace HAMEventLoopUICallbacks v Qt
- QtConnection - implementace HAMConnectionUICallbacks pro Qt + wrappovani funkci z connection.h do Qt.
- MainWindow - Hlavni okno umoznujici zadani jmena/hesla/serveru/portu a prihlaseni.
Frontend GUI (prakticky v cemkoliv, ale v ramci bakalarky Qt, pac to pekne vypada a umim v tom :) )
|
libhamlog (C)
|
Server ----
| |
HAMLib MySQL
V ramci prace C++/Qt aplikace, jinak v cemkoliv. Predstava
Dobra featura je nejak rychle zajistit vkladani, napr. moznost vepsat vse do jednoho pole (vyhoda v zavode) nebo vepsat postupne do jednotlivych poli (pokud je cas), automaticke predvyplnovani, napr. vepsanim "ok2gpb,.20", se doplni OK2GPB, prijate soutezni cislo 20, cas/datum spojeni, RTX 599 (nebo 59 podle modu), STX 599, ostatni informace se doplni z qrz.com nebo jineho logbooku, predvyplni se nastavene pasmo a mod (nebo se precte pres hamlib). Nebo napr. vepsanim ok2gpb,58 se doplni prijaty report 58, nebo vepsanim prijateho soutezniho kodu (pro VKV zavody), napr. ok2gpb,59,002,jn89ge (znacka, prijaty report, prijate poradove cislo spojeni, lokator). U lokatoru lze optimalizovat, ze pri zadani napr. 89ge se doplni pocatecni pismena lokatoru z vlastniho lokatoru, atp. Je treba to nejak dobre navrhnout.
Taky dobra funkce je mit moznost rychle preladit radio pres hamlib vepsanim frekvence napr. 14145u, preladi na 14.145 MHz a USB mod. Nebo preladit na frekvenci stanice a predvyplnit udaje kliknutim/vybranim stanice z DXcluster.
Tohle vsechno se da vyresit necim jako "prikazovy radek" nekde dole v GUI a spravnou detekci prikazu.
Knihovna poskytujici rozhrani pro pripojeni k serveru.
Modularni v C++ (+ boost). Podpora pro SSL. Jako protokol HTTP
V pripade serveru v C++ jde opet vyuzit kus libtransportu.
Do deniku se bude ukladat zejmena CALL (znacka protistanice), QTH (umisteni, napr. Rim), GRID/QRA locator (souradnicovy system Maidenhead Locator), adresa (lookup napr. pres qrz.com nebo callbook, LOTW atd.), datum spojeni, cas spojeni, volitelne i delka spojeni nebo cas ukonceni spojeni, MODE (FM/LSB/USB/CW..., volitelne digi mody RTTY/PSK/AMTOR/PACTOR/WSJT..), FREQ (frekvence), COMMENT, OPERATOR (znacka operatora uskutecnujiciho spojeni), USER_FIELDS (uzivatelem volitelne polozky, cim vice, tim lepe :), RST RX (report prijato, napr. 599 [pro CW 3 cislice, jinak 2 - 59], viz http://www.crk.cz/CZ/RSTC), RST TX (report vyslano, napr. 599), IOTA (IOTA reference number, napr. EU-128, nejlepe mit databazi [optional] http://www.rsgbiota.org/), mozna i optional dalsi diplomy (napr. SOTA, LOTA, ...), prijate soutezni poradove cislo, odeslane soutezni poradove cislo (moznost zapnout si automatickou inkrementaci a moznost nulovani, tak aby se u vkladanych spojeni pri zavodu inkrementovalo automaticky, tedy 001, 002, ...), CONTEST (nazev zavodu, aktivity), COUNTY (USA kod okresu), Priznak pro vyrizovani QSL (jestli se bude zpracovavat QSL), Datum odeslani QSL (mozna rozdelit na papirove, EQSL, LOTW....), Datum prijeti QSL (mozna rozdelit na papirove, EQSL, LOTW...), QSL manager (pres jakou stanici pujde QSL nebo prazdne, pokud stanice nema managara), Vzdalenost v km, Azimut, Jmeno operatora protistanice.
TODO: Navrhnout tabulky
Jestli zbude cas, ale rozhodne si myslim, ze pro domaci uzivatele vyhodnejsi nez instalace MySQL.
Vkladaci dialog, po zapsani znacky se zobrazi predchozi spojeni s danou stanici a na kterych pasmech a ve kterych modech bylo spojeni uskutecneno a ktere kombinace chybi (napr. tabulka), dohledaji se informace jako jmeno operatora, adresa, QTH napr. pres qrz.com.
Nevim jestli jsou i jine sluzby nez qrz.com, nebo jestli existuje nejaka lokalni databaze, ale v kazdem pripade by bylo fajn mit qrz.com podporu jako samostatny modul.
Dekoduje se prefix - celkem orisek, nekde na to bude nejaky kod, databaze platnych zemi se vsak meni, obecna pravidla: http://www.crk.cz/CZ/PREFC, seznam aktualnich prefixu: http://www.crk.cz/CZ/DXCCPC, nutno brat v uvahu i nedomaci stanice v zahranici, tedy napr. 9A/OK2JRQ je ceska stanice v chorvatsku, atp., muzou byt dalsi kombinace OK2JRQ/MM (ceska stanice na lodi), 9A/OK2JRQ/MM (ceska stanice na lodi v chorvatsku), OK2JRQ/AM (cesta stanice v letadle), OK2JRQ/P (ceska stanice na jinem nez domovskem QTH - portable), OK2JRQ/M (ceska stanice mobilni - v aute), nebo jeste silenejsi kombinace, ktere nekdy pouzivaji zahranicni stanice: UA3PBR/P2 (ruska stanice portable v okresu s prirazenym kodem 2), dale mohou existovat ruzne vyjimky a specialni prilezitostne znacky, coz muze zpusobovat nejednoznacnosti pri dekodovani. Dale se zobrazi nazev zeme, vzdalenost, cas/datum v miste protistanice.
Uvidim co s tim (asi to ani nebude modul, ale mozna jo), zatim jen aby se na to nezapomnelo :).
Dale: Vypocet statistik DXCC a ruznych diplomu, kolik bodu bylo dosazeno v danem diplomu, s kolika ruznymi prefixy/zememi na kterem pasmu bylo pracovano a celkove na vsech pasmech/modech. Asi nejlepe formou pluginu/skriptu definujicich SQL dotazy a operace s vysledky.
Dalsi funkce, integrace s: Telnet na DXCluster, Call lookup (qrz.com, LOTW, local callbook, ...),
Uz zmineno vyse.
zobrazeni umisteni protistanice (Xearth)
optional: satellites tracking (predict, ...) , predikce sireni (voacap for linux, splat?, ...), digi mody pres zvukovku (linpsk, gpsk, ...).
Uvidime, hlavni je navhrnout moduly tak, aby vsechno tohle bylo mozne :). Budu na to myslet.