Skip to content
hanzz edited this page Jul 28, 2011 · 20 revisions

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.

Postup:

  • DONE Repositar + wiki :)
  • DONE Zakladni build system a adresarova struktura pro jednotlive casti + main.cpp/main.c pro jednotlive casti
    • DONE ui/qt - Qt rozhrani
    • DONE library - klientska knihovna
    • DONE server - server
    • DONE docs - doxygen dokumentace k library

DONE Faze 1 [DONE 28.7.2011]:

  • DONE Server: implementace nesifrovaneho prihlaseni oproti pevne danemu heslu
    • DONE Server - hlavni trida serveru
    • DONE Config - trida pro konfiguraci pomoci .ini + server.cfg ukazka
    • UserRegistry - overuje identitu uzivatele
      • SimpleUserRegistry - naivni implementace s std::map<jmeno, heslo>
    • DONE Request - HTTP Request
    • DONE RequestParser - HTTP request parser
    • DONE RequestHandler - Zpracovava prichozi dotazy a vola patrictny Responder.
    • DONE RequestResponder - Abstraktni trida pro odpoved na dotazy
    • DONE Responder::Root - responder pro /
    • Responder::Login - responder pro /login
    • DONE Reply - HTTP reply
    • DONE Session - Spravuje jednoho prihlaseneho uzivatele
    • DONE SessionManager - Spravuje sessiony
  • library: implementace nesifrovaneho prihlaseni k serveru
    • DONE eventloop.c/eventloop.h
      • DONE HAMEventLoopUICallbacks
        • DONE void *timeout_add(int interval, HAMTimeoutCallback *callback, void *user_data);
        • DONE void timeout_remove(void *handle);
        • DONE void *input_add(int fd, HAMInputCondition cond, HAMInputCallback *callback, void *user_data);
        • DONE void input_remove(void *handle);
      • DONE void ham_eventloop_set_ui_callbacks(HAMInputUICallbacks *callbacks);
      • DONE void *ham_timeout_add(int interval, HAMTimeoutCallback *callback, void *user_data);
      • DONE void ham_timeout_remove(void *handle);
      • DONE void *ham_input_add(int fd, HAMInputCondition cond, HAMInputCallback *callback, void *user_data);
      • DONE void ham_input_remove(void *handle);
    • DONE connection.c/connection.h
      • DONE HAMConnectionUICallbacks
        • DONE void connected(HAMConnection *connection);
        • DONE void disconnected(HAMConnection *connection, const char *reason);
      • DONE void ham_connection_set_ui_callbacks(HAMConnectionUICallbacks *callbacks);
      • DONE HAMConnection *ham_connection_new(const char *hostname, int port, const char *username, int port);
      • DONE ham_connection_connect(HAMConnection *connection);
      • DONE ham_connection_disconnect(HAMConnection *connection);
      • DONE ham_connection_destroy(HAMConnection *connection);
    • DONE parser.c/parser.h
      • DONE HAMParser *ham_parser_new();
      • DONE int ham_parser_parse(HAMResponse *response, char *data);
      • DONE void ham_parser_reset(HAMParser *parser);
      • DONE void ham_parser_destroy(HAMParser *parser);
    • DONE reply.c/reply.h
      • DONE HAMReply *ham_reply_new();
      • DONE ...
      • DONE ham_reply_destroy(HAMReply *reply);
    • DONE request.c/request.h
  • DONE Qt rozhrani:
    • DONE QtEventLoop - implementace HAMEventLoopUICallbacks v Qt
    • DONE QtConnection - implementace HAMConnectionUICallbacks pro Qt + wrappovani funkci z connection.h do Qt.
    • DONE MainWindow - Hlavni okno umoznujici zadani jmena/hesla/serveru/portu a prihlaseni.

Architektura:

Frontend GUI (prakticky v cemkoliv, ale v ramci bakalarky Qt, pac to pekne vypada a umim v tom :) )
|
libhamlog (C)
|
Server ----
|         |
HAMLib    MySQL

Frontend

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.

libhamlog

Knihovna poskytujici rozhrani pro pripojeni k serveru.

Server

Modularni v C++ (+ boost). Podpora pro SSL. Jako protokol HTTP

Serverove moduly

Databazovy backend:

V pripade serveru v C++ jde opet vyuzit kus libtransportu.

MySQL

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

SQLite3

Jestli zbude cas, ale rozhodne si myslim, ze pro domaci uzivatele vyhodnejsi nez instalace MySQL.

Vyhledani operatora:

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.

Dekodovani prefixu:

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 :).

Serverove statistiky

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 moduly

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.