UDP/CLOUD log record

* add write log record to UDP socket concurrent with other
    internal and external logbook recording.  UDP record in
    ADIF format and contains the fields specified on the UDP
    field selection dialog.
  * Add field selection for cloud logbook export
  * UDP and CLOUD export records are terminated by the <EOR>
    tag.
  * Make field selection paradigm identical for udp and cloud
    exports.
  * ADIF specification compliance
    . change frequency field comma, ",", to period "."
This commit is contained in:
dave-w1hkj 2024-05-02 22:57:52 -05:00
parent 6d87dd4ddf
commit af361f7d6c
12 changed files with 3453 additions and 141 deletions

View file

@ -2707,6 +2707,43 @@ if (url.empty() || apiKey.empty()) {
progdefaults.changed = true;
}
Fl_Button *btnCLOUDselect=(Fl_Button *)0;
static void cb_btnCLOUDselect(Fl_Button*, void*) {
wCLDfields->show();
}
Fl_Input2 *txt_udp_address=(Fl_Input2 *)0;
static void cb_txt_udp_address(Fl_Input2* o, void*) {
progdefaults.udp_address = o->value();
progdefaults.changed = true;
}
Fl_Input2 *txt_udp_port=(Fl_Input2 *)0;
static void cb_txt_udp_port(Fl_Input2* o, void*) {
progdefaults.udp_port = o->value();
progdefaults.changed = true;
}
Fl_Check_Button *btn_enable_udp_logging=(Fl_Check_Button *)0;
static void cb_btn_enable_udp_logging(Fl_Check_Button* o, void*) {
progdefaults.enable_udp_logging = o->value();
progdefaults.changed = true;
}
Fl_Button *btnUDPselect=(Fl_Button *)0;
static void cb_btnUDPselect(Fl_Button*, void*) {
wUDPfields->show();
}
static void cb_TEST(Fl_Button*, void*) {
udp_test();
}
Fl_Check_Button *btnNagMe=(Fl_Check_Button *)0;
static void cb_btnNagMe(Fl_Check_Button* o, void*) {
@ -11753,61 +11790,114 @@ work!"));
tab_tree->add(_("Logging/LoTW"));
o->end();
} // Fl_Group* o
{ Fl_Group* o = new Fl_Group(200, 0, 600, 350, _("Logging/Cloudlog"));
{ Fl_Group* o = new Fl_Group(200, 0, 600, 350, _("Logging/Cloud-UDP"));
o->box(FL_ENGRAVED_BOX);
o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
o->hide();
{ Fl_Group* o = new Fl_Group(205, 25, 590, 35, _("This allows for logging of QSOs to a Cloudlog instance."));
o->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
{ Fl_Group* o = new Fl_Group(210, 29, 580, 165, _("Log QSO record to a Cloudlog instance."));
o->box(FL_ENGRAVED_BOX);
o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
{ Fl_Check_Button* o = btnEnCloudlog = new Fl_Check_Button(232, 153, 70, 15, _("Enable Cloudlog API logging"));
btnEnCloudlog->tooltip(_("This enables logging of QSOs to Cloudlog via API"));
btnEnCloudlog->down_box(FL_DOWN_BOX);
btnEnCloudlog->callback((Fl_Callback*)cb_btnEnCloudlog);
o->value(progdefaults.EnCloudlog);
} // Fl_Check_Button* btnEnCloudlog
{ Fl_Input2* o = txt_cloudlog_api_url = new Fl_Input2(286, 70, 400, 24, _("API URL:"));
txt_cloudlog_api_url->tooltip(_("Enter the URL of your Cloudlog API"));
txt_cloudlog_api_url->box(FL_DOWN_BOX);
txt_cloudlog_api_url->color(FL_BACKGROUND2_COLOR);
txt_cloudlog_api_url->selection_color(FL_SELECTION_COLOR);
txt_cloudlog_api_url->labeltype(FL_NORMAL_LABEL);
txt_cloudlog_api_url->labelfont(0);
txt_cloudlog_api_url->labelsize(14);
txt_cloudlog_api_url->labelcolor(FL_FOREGROUND_COLOR);
txt_cloudlog_api_url->callback((Fl_Callback*)cb_txt_cloudlog_api_url);
txt_cloudlog_api_url->align(Fl_Align(FL_ALIGN_LEFT));
txt_cloudlog_api_url->when(FL_WHEN_RELEASE);
o->value(progdefaults.cloudlog_api_url.c_str());
} // Fl_Input2* txt_cloudlog_api_url
{ Fl_Input2* o = txt_cloudlog_api_key = new Fl_Input2(286, 110, 400, 24, _("API Key:"));
txt_cloudlog_api_key->tooltip(_("Enter the API key for your Cloudlog instance"));
txt_cloudlog_api_key->box(FL_DOWN_BOX);
txt_cloudlog_api_key->color(FL_BACKGROUND2_COLOR);
txt_cloudlog_api_key->selection_color(FL_SELECTION_COLOR);
txt_cloudlog_api_key->labeltype(FL_NORMAL_LABEL);
txt_cloudlog_api_key->labelfont(0);
txt_cloudlog_api_key->labelsize(14);
txt_cloudlog_api_key->labelcolor(FL_FOREGROUND_COLOR);
txt_cloudlog_api_key->callback((Fl_Callback*)cb_txt_cloudlog_api_key);
txt_cloudlog_api_key->align(Fl_Align(FL_ALIGN_LEFT));
txt_cloudlog_api_key->when(FL_WHEN_RELEASE);
o->value(progdefaults.cloudlog_api_key.c_str());
} // Fl_Input2* txt_cloudlog_api_key
{ Fl_Spinner* o = sp_cloudlog_station_id = new Fl_Spinner(710, 109, 60, 25, _("Station ID:"));
sp_cloudlog_station_id->maximum(9999);
sp_cloudlog_station_id->callback((Fl_Callback*)cb_sp_cloudlog_station_id);
sp_cloudlog_station_id->align(Fl_Align(FL_ALIGN_TOP));
o->value(progdefaults.cloudlog_station_id);
} // Fl_Spinner* sp_cloudlog_station_id
{ btnTestApiKey = new Fl_Button(690, 148, 80, 24, _("Initialize"));
btnTestApiKey->tooltip(_("Test API Key"));
btnTestApiKey->callback((Fl_Callback*)cb_btnTestApiKey);
} // Fl_Button* btnTestApiKey
{ btnCLOUDselect = new Fl_Button(488, 150, 118, 20, _("Select Fields"));
btnCLOUDselect->tooltip(_("Open field selection dialog"));
btnCLOUDselect->callback((Fl_Callback*)cb_btnCLOUDselect);
} // Fl_Button* btnCLOUDselect
o->end();
} // Fl_Group* o
{ Fl_Check_Button* o = btnEnCloudlog = new Fl_Check_Button(265, 76, 70, 15, _("Enable Cloudlog API logging"));
btnEnCloudlog->tooltip(_("This enables logging of QSOs to Cloudlog via API"));
btnEnCloudlog->down_box(FL_DOWN_BOX);
btnEnCloudlog->callback((Fl_Callback*)cb_btnEnCloudlog);
o->value(progdefaults.EnCloudlog);
} // Fl_Check_Button* btnEnCloudlog
{ Fl_Input2* o = txt_cloudlog_api_url = new Fl_Input2(310, 131, 379, 24, _("API URL:"));
txt_cloudlog_api_url->tooltip(_("Enter the URL of your Cloudlog API"));
txt_cloudlog_api_url->box(FL_DOWN_BOX);
txt_cloudlog_api_url->color(FL_BACKGROUND2_COLOR);
txt_cloudlog_api_url->selection_color(FL_SELECTION_COLOR);
txt_cloudlog_api_url->labeltype(FL_NORMAL_LABEL);
txt_cloudlog_api_url->labelfont(0);
txt_cloudlog_api_url->labelsize(14);
txt_cloudlog_api_url->labelcolor(FL_FOREGROUND_COLOR);
txt_cloudlog_api_url->callback((Fl_Callback*)cb_txt_cloudlog_api_url);
txt_cloudlog_api_url->align(Fl_Align(FL_ALIGN_LEFT));
txt_cloudlog_api_url->when(FL_WHEN_RELEASE);
o->value(progdefaults.cloudlog_api_url.c_str());
} // Fl_Input2* txt_cloudlog_api_url
{ Fl_Input2* o = txt_cloudlog_api_key = new Fl_Input2(310, 171, 379, 24, _("API Key:"));
txt_cloudlog_api_key->tooltip(_("Enter the API key for your Cloudlog instance"));
txt_cloudlog_api_key->box(FL_DOWN_BOX);
txt_cloudlog_api_key->color(FL_BACKGROUND2_COLOR);
txt_cloudlog_api_key->selection_color(FL_SELECTION_COLOR);
txt_cloudlog_api_key->labeltype(FL_NORMAL_LABEL);
txt_cloudlog_api_key->labelfont(0);
txt_cloudlog_api_key->labelsize(14);
txt_cloudlog_api_key->labelcolor(FL_FOREGROUND_COLOR);
txt_cloudlog_api_key->callback((Fl_Callback*)cb_txt_cloudlog_api_key);
txt_cloudlog_api_key->align(Fl_Align(FL_ALIGN_LEFT));
txt_cloudlog_api_key->when(FL_WHEN_RELEASE);
o->value(progdefaults.cloudlog_api_key.c_str());
} // Fl_Input2* txt_cloudlog_api_key
{ Fl_Spinner* o = sp_cloudlog_station_id = new Fl_Spinner(310, 215, 60, 25, _("Station ID:"));
sp_cloudlog_station_id->maximum(9999);
sp_cloudlog_station_id->callback((Fl_Callback*)cb_sp_cloudlog_station_id);
o->value(progdefaults.cloudlog_station_id);
} // Fl_Spinner* sp_cloudlog_station_id
{ btnTestApiKey = new Fl_Button(696, 313, 80, 24, _("Initialize"));
btnTestApiKey->tooltip(_("Test API Key"));
btnTestApiKey->callback((Fl_Callback*)cb_btnTestApiKey);
} // Fl_Button* btnTestApiKey
CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Logging/Cloudlog"));
{ Fl_Group* o = new Fl_Group(210, 200, 580, 141, _("Broadcast UDP ADIF record"));
o->box(FL_ENGRAVED_BOX);
o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
{ Fl_Input2* o = txt_udp_address = new Fl_Input2(286, 248, 486, 22, _("Address"));
txt_udp_address->tooltip(_("IP Address for ARQ interface\nIP Address format: nnn.nnn.nnn.nnn\nor name: i.\
e. localhost"));
txt_udp_address->box(FL_DOWN_BOX);
txt_udp_address->color(FL_BACKGROUND2_COLOR);
txt_udp_address->selection_color(FL_SELECTION_COLOR);
txt_udp_address->labeltype(FL_NORMAL_LABEL);
txt_udp_address->labelfont(0);
txt_udp_address->labelsize(14);
txt_udp_address->labelcolor(FL_FOREGROUND_COLOR);
txt_udp_address->callback((Fl_Callback*)cb_txt_udp_address);
txt_udp_address->align(Fl_Align(FL_ALIGN_LEFT));
txt_udp_address->when(FL_WHEN_CHANGED);
o->labelsize(FL_NORMAL_SIZE);
o->value(progdefaults.udp_address.c_str());
} // Fl_Input2* txt_udp_address
{ Fl_Input2* o = txt_udp_port = new Fl_Input2(286, 282, 76, 22, _("Port"));
txt_udp_port->tooltip(_("IP Address Port Number"));
txt_udp_port->box(FL_DOWN_BOX);
txt_udp_port->color(FL_BACKGROUND2_COLOR);
txt_udp_port->selection_color(FL_SELECTION_COLOR);
txt_udp_port->labeltype(FL_NORMAL_LABEL);
txt_udp_port->labelfont(0);
txt_udp_port->labelsize(14);
txt_udp_port->labelcolor(FL_FOREGROUND_COLOR);
txt_udp_port->callback((Fl_Callback*)cb_txt_udp_port);
txt_udp_port->align(Fl_Align(FL_ALIGN_LEFT));
txt_udp_port->when(FL_WHEN_CHANGED);
o->labelsize(FL_NORMAL_SIZE);
o->value(progdefaults.udp_port.c_str());
} // Fl_Input2* txt_udp_port
{ Fl_Check_Button* o = btn_enable_udp_logging = new Fl_Check_Button(412, 285, 71, 15, _("Enable"));
btn_enable_udp_logging->down_box(FL_DOWN_BOX);
btn_enable_udp_logging->callback((Fl_Callback*)cb_btn_enable_udp_logging);
o->value(progdefaults.enable_udp_logging);
} // Fl_Check_Button* btn_enable_udp_logging
{ btnUDPselect = new Fl_Button(533, 283, 119, 20, _("Select Fields"));
btnUDPselect->tooltip(_("Open field selection dialog"));
btnUDPselect->callback((Fl_Callback*)cb_btnUDPselect);
} // Fl_Button* btnUDPselect
{ Fl_Button* o = new Fl_Button(700, 283, 70, 20, _("TEST"));
o->callback((Fl_Callback*)cb_TEST);
} // Fl_Button* o
o->end();
} // Fl_Group* o
CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Logging/Cloud-UDP"));
config_pages.push_back(p);
tab_tree->add(_("Logging/Cloudlog"));
tab_tree->close(_("Logging"));
tab_tree->add(_("Logging/Cloud-UDP"));
o->end();
} // Fl_Group* o
{ Fl_Group* o = new Fl_Group(200, 0, 600, 350, _("Logging/QSO logging"));

View file

@ -467,7 +467,7 @@ for (size_t i = 0; i < sizeof(qrzbxml)/sizeof(*qrzbxml); i++)
qrzbxml[i]->value(b == qrzbxml[i]);} {}
}
Function {set_qrzweb_buttons(Fl_Button* b)} {open return_type void
Function {set_qrzweb_buttons(Fl_Button* b)} {return_type void
} {
code {Fl_Button* qrzbweb[] = { btnQRZWEBnotavailable, btnQRZonline,
btnHAMCALLonline,
@ -503,7 +503,7 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
static const char szProsigns[] = "~|%|&|+|=|{|}|<|>|[|]| ";} {}
Fl_Window {} {
label {Fldigi configuration} open
xywh {544 31 800 380} type Double color 45 selection_color 51 labelsize 18 align 80 resizable size_range {750 380 0 380} visible
xywh {900 39 800 380} type Double color 45 selection_color 51 labelsize 18 align 80 resizable size_range {750 380 0 380} visible
} {
Fl_Group {} {open
xywh {0 0 201 380} resizable
@ -2634,14 +2634,14 @@ progdefaults.changed = true;}
}
}
Fl_Group {} {
label {IDs/RsID} open
label {IDs/RsID}
xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("IDs/RsID"));}
code1 {config_pages.push_back(p);}
code2 {tab_tree->add(_("IDs/RsID"));}
} {
Fl_Group {} {
label {Reed-Solomon ID (Rx)} open
label {Reed-Solomon ID (Rx)}
xywh {216 20 560 220} box ENGRAVED_FRAME align 21
} {
Fl_Check_Button chkRSidNotifyOnly {
@ -3294,51 +3294,50 @@ o->label((inpLOTW_pwd->type() & FL_SECRET_INPUT) ? _("Show") : _("Hide"));}
}
}
Fl_Group {} {
label {Logging/Cloudlog}
label {Logging/Cloud-UDP} open selected
xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Logging/Cloudlog"));}
code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Logging/Cloud-UDP"));}
code1 {config_pages.push_back(p);}
code2 {tab_tree->add(_("Logging/Cloudlog"));}
code3 {tab_tree->close(_("Logging"));}
code2 {tab_tree->add(_("Logging/Cloud-UDP"));}
} {
Fl_Group {} {
label {This allows for logging of QSOs to a Cloudlog instance.} open
xywh {205 25 590 35} align 16
} {}
Fl_Check_Button btnEnCloudlog {
label {Enable Cloudlog API logging}
callback {btnEnCloudlog->value(o->value());
label {Log QSO record to a Cloudlog instance.} open
xywh {210 29 580 165} box ENGRAVED_BOX align 21
} {
Fl_Check_Button btnEnCloudlog {
label {Enable Cloudlog API logging}
callback {btnEnCloudlog->value(o->value());
progdefaults.EnCloudlog=o->value();
progdefaults.changed = true;}
tooltip {This enables logging of QSOs to Cloudlog via API} xywh {265 76 70 15} down_box DOWN_BOX
code0 {o->value(progdefaults.EnCloudlog);}
}
Fl_Input txt_cloudlog_api_url {
label {API URL:}
callback {progdefaults.cloudlog_api_url = o->value();
tooltip {This enables logging of QSOs to Cloudlog via API} xywh {232 153 70 15} down_box DOWN_BOX
code0 {o->value(progdefaults.EnCloudlog);}
}
Fl_Input txt_cloudlog_api_url {
label {API URL:}
callback {progdefaults.cloudlog_api_url = o->value();
progdefaults.changed = true;}
tooltip {Enter the URL of your Cloudlog API} xywh {310 131 379 24}
code0 {o->value(progdefaults.cloudlog_api_url.c_str());}
class Fl_Input2
}
Fl_Input txt_cloudlog_api_key {
label {API Key:}
callback {progdefaults.cloudlog_api_key = o->value();
tooltip {Enter the URL of your Cloudlog API} xywh {286 70 400 24}
code0 {o->value(progdefaults.cloudlog_api_url.c_str());}
class Fl_Input2
}
Fl_Input txt_cloudlog_api_key {
label {API Key:}
callback {progdefaults.cloudlog_api_key = o->value();
progdefaults.changed = true;}
tooltip {Enter the API key for your Cloudlog instance} xywh {310 171 379 24}
code0 {o->value(progdefaults.cloudlog_api_key.c_str());}
class Fl_Input2
}
Fl_Spinner sp_cloudlog_station_id {
label {Station ID:}
callback {progdefaults.cloudlog_station_id=o->value();
tooltip {Enter the API key for your Cloudlog instance} xywh {286 110 400 24}
code0 {o->value(progdefaults.cloudlog_api_key.c_str());}
class Fl_Input2
}
Fl_Spinner sp_cloudlog_station_id {
label {Station ID:}
callback {progdefaults.cloudlog_station_id=o->value();
progdefaults.changed = true;}
xywh {310 215 60 25} maximum 9999
code0 {o->value(progdefaults.cloudlog_station_id);}
}
Fl_Button btnTestApiKey {
label Initialize
callback {std::string url;
xywh {710 109 60 25} align 1 maximum 9999
code0 {o->value(progdefaults.cloudlog_station_id);}
}
Fl_Button btnTestApiKey {
label Initialize
callback {std::string url;
std::string apiKey;
url = txt_cloudlog_api_url->value();
apiKey = txt_cloudlog_api_key->value();
@ -3352,7 +3351,55 @@ if (url.empty() || apiKey.empty()) {
btnTestApiKey->color(FL_RED);
}
progdefaults.changed = true;}
tooltip {Test API Key} xywh {696 313 80 24}
tooltip {Test API Key} xywh {690 148 80 24}
}
Fl_Button btnCLOUDselect {
label {Select Fields}
callback {wCLDfields->show();}
tooltip {Open field selection dialog} xywh {488 150 118 20}
}
}
Fl_Group {} {
label {Broadcast UDP ADIF record} open
xywh {210 200 580 141} box ENGRAVED_BOX align 21
} {
Fl_Input txt_udp_address {
label Address
callback {progdefaults.udp_address = o->value();
progdefaults.changed = true;}
tooltip {IP Address for ARQ interface
IP Address format: nnn.nnn.nnn.nnn
or name: i.e. localhost} xywh {286 248 486 22} when 1
code0 {o->labelsize(FL_NORMAL_SIZE);}
code1 {o->value(progdefaults.udp_address.c_str());}
class Fl_Input2
}
Fl_Input txt_udp_port {
label Port
callback {progdefaults.udp_port = o->value();
progdefaults.changed = true;}
tooltip {IP Address Port Number} xywh {286 282 76 22} when 1
code0 {o->labelsize(FL_NORMAL_SIZE);}
code1 {o->value(progdefaults.udp_port.c_str());}
class Fl_Input2
}
Fl_Check_Button btn_enable_udp_logging {
label Enable
callback {progdefaults.enable_udp_logging = o->value();
progdefaults.changed = true;}
xywh {412 285 71 15} down_box DOWN_BOX
code0 {o->value(progdefaults.enable_udp_logging);}
}
Fl_Button btnUDPselect {
label {Select Fields}
callback {wUDPfields->show();}
tooltip {Open field selection dialog} xywh {533 283 119 20}
}
Fl_Button {} {
label TEST
callback {udp_test();}
xywh {700 283 70 20}
}
}
}
Fl_Group {} {
@ -8705,7 +8752,7 @@ number to the default value.} xywh {624 313 73 22}
}
}
Fl_Group grpOperator {
label {Operator-Station} open
label {Operator-Station}
xywh {200 0 600 350} box ENGRAVED_BOX color 50 align 21 hide
code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Operator-Station"));}
code1 {config_pages.push_back(p);}
@ -11792,7 +11839,7 @@ WF_UI();}
}
}
Fl_Group {} {
label {Waterfall/Display} open selected
label {Waterfall/Display}
xywh {200 0 600 350} box ENGRAVED_BOX align 21 hide
code0 {CONFIG_PAGE *p = new CONFIG_PAGE(o, _("Waterfall/Display"));}
code1 {config_pages.push_back(p);}

View file

@ -1644,7 +1644,7 @@ void remove_windows()
std::string titles[] = {
"scope view", "record loader", "cluster viewer", "dxcc window",
"viewer", "logbook", "lotw review",
"export", "cabrillo",
"export", "cabrillo", "UDP fields",
"config", "notify",
"mfsk rxwin", "mfsk txwin",
"thor rxwin", "thor txwin",
@ -1657,7 +1657,7 @@ void remove_windows()
scopeview, dlgRecordLoader,
dxcluster_viewer, dxcc_window,
dlgViewer, dlgLogbook, lotw_review_dialog,
wExport, wCabrillo,
wExport, wCabrillo, wUDPfields,
dlgConfig, notify_window,
picRxWin, picTxWin,
thorpicRxWin, thorpicTxWin,

View file

@ -290,6 +290,11 @@ extern Fl_Input2 *txt_cloudlog_api_key;
#include <FL/Fl_Spinner.H>
extern Fl_Spinner *sp_cloudlog_station_id;
extern Fl_Button *btnTestApiKey;
extern Fl_Button *btnCLOUDselect;
extern Fl_Input2 *txt_udp_address;
extern Fl_Input2 *txt_udp_port;
extern Fl_Check_Button *btn_enable_udp_logging;
extern Fl_Button *btnUDPselect;
extern Fl_Check_Button *btnNagMe;
extern Fl_Check_Button *btnClearOnSave;
extern Fl_Check_Button *btnCallUpperCase;

View file

@ -1347,6 +1347,16 @@
ELEM_(int, tracefile_timeout, "tracefile_timeout", \
"Tqsl trace file timeout in seconds", \
15) \
/* UDP log interface */ \
ELEM_(std::string, udp_address, "UDP_LOG_ADDRESS", \
"IP Address of UDP broadcast socket", \
"127.0.0.1") \
ELEM_(std::string, udp_port, "UDP_LOG_PORT", \
"IP port number of UDP socket", \
"9876") \
ELEM_(bool, enable_udp_logging, "ENABLE_UDP_LOGGING", \
"set TRUE to enable UDP broadcast of log record", \
false) \
/* MacLogger interface */ \
ELEM_(bool, connect_to_maclogger, "CONNECT_TO_MACLOGGER", \
"Connect to MacLogger UDP server on 255.255.255.255 / 9932", \

View file

@ -4,6 +4,7 @@
#define lgbook_h
#include <FL/Fl.H>
#include "flinput2.h"
#include "logger.h"
// Avoid 'nitems' macro collision between FreeBSD's sys/params.h and fltk's
// FL/Fl_Check_Browser.H (http://www.fltk.org/str.php?L2984)
#undef nitems
@ -186,5 +187,111 @@ extern Fl_Check_Button *btnCabState;
extern Fl_Check_Button *btnCabCounty;
extern Fl_Button *btnCabClearAllFields;
extern Fl_Button *btnCabCheckAllFields;
extern Fl_Double_Window *wUDPfields;
extern Fl_Check_Button *btn_udp_Call;
extern Fl_Check_Button *btn_udp_Name;
extern Fl_Check_Button *btn_udp_Freq;
extern Fl_Check_Button *btn_udp_Band;
extern Fl_Check_Button *btn_udp_Mode;
extern Fl_Check_Button *btn_udp_QSOdateOn;
extern Fl_Check_Button *btn_udp_QSOdateOff;
extern Fl_Check_Button *btn_udp_TimeON;
extern Fl_Check_Button *btn_udp_TimeOFF;
extern Fl_Check_Button *btn_udp_TX_pwr;
extern Fl_Check_Button *btn_udp_RSTsent;
extern Fl_Check_Button *btn_udp_RSTrcvd;
extern Fl_Check_Button *btn_udp_Qth;
extern Fl_Check_Button *btn_udp_LOC;
extern Fl_Check_Button *btn_udp_State;
extern Fl_Check_Button *btn_udp_Age;
extern Fl_Check_Button *btn_udp_StaCall;
extern Fl_Check_Button *btn_udp_StaCity;
extern Fl_Check_Button *btn_udp_StaGrid;
extern Fl_Check_Button *btn_udp_Operator;
extern Fl_Check_Button *btn_udp_Province;
extern Fl_Check_Button *btn_udp_Country;
extern Fl_Check_Button *btn_udp_Notes;
extern Fl_Check_Button *btn_udp_QSLrcvd;
extern Fl_Check_Button *btn_udp_QSLsent;
extern Fl_Check_Button *btn_udp_eQSLrcvd;
extern Fl_Check_Button *btn_udp_eQSLsent;
extern Fl_Check_Button *btn_udp_LOTWrcvd;
extern Fl_Check_Button *btn_udp_LOTWsent;
extern Fl_Check_Button *btn_udp_QSL_VIA;
extern Fl_Check_Button *btn_udp_SerialIN;
extern Fl_Check_Button *btn_udp_SerialOUT;
extern Fl_Check_Button *btn_udp_Check;
extern Fl_Check_Button *btn_udp_XchgIn;
extern Fl_Check_Button *btn_udp_MyXchg;
extern Fl_Check_Button *btn_udp_CNTY;
extern Fl_Check_Button *btn_udp_CONT;
extern Fl_Check_Button *btn_udp_CQZ;
extern Fl_Check_Button *btn_udp_DXCC;
extern Fl_Check_Button *btn_udp_IOTA;
extern Fl_Check_Button *btn_udp_ITUZ;
extern Fl_Check_Button *btn_udp_Class;
extern Fl_Check_Button *btn_udp_Section;
extern Fl_Check_Button *btn_udp_cwss_serno;
extern Fl_Check_Button *btn_udp_cwss_prec;
extern Fl_Check_Button *btn_udp_cwss_check;
extern Fl_Check_Button *btn_udp_cwss_section;
extern Fl_Check_Button *btn_udp_1010;
extern Fl_Button *btnUDPClearAllFields;
extern Fl_Button *btnUDPCheckAllFields;
extern Fl_Return_Button *btnUDPOK;
extern Fl_Button *btnUDPcancel;
extern Fl_Double_Window *wCLDfields;
extern Fl_Check_Button *btn_cloud_Call;
extern Fl_Check_Button *btn_cloud_Name;
extern Fl_Check_Button *btn_cloud_Freq;
extern Fl_Check_Button *btn_cloud_Band;
extern Fl_Check_Button *btn_cloud_Mode;
extern Fl_Check_Button *btn_cloud_QSOdateOn;
extern Fl_Check_Button *btn_cloud_QSOdateOff;
extern Fl_Check_Button *btn_cloud_TimeON;
extern Fl_Check_Button *btn_cloud_TimeOFF;
extern Fl_Check_Button *btn_cloud_TX_pwr;
extern Fl_Check_Button *btn_cloud_RSTsent;
extern Fl_Check_Button *btn_cloud_RSTrcvd;
extern Fl_Check_Button *btn_cloud_Qth;
extern Fl_Check_Button *btn_cloud_LOC;
extern Fl_Check_Button *btn_cloud_State;
extern Fl_Check_Button *btn_cloud_Age;
extern Fl_Check_Button *btn_cloud_StaCall;
extern Fl_Check_Button *btn_cloud_StaCity;
extern Fl_Check_Button *btn_cloud_StaGrid;
extern Fl_Check_Button *btn_cloud_Operator;
extern Fl_Check_Button *btn_cloud_Province;
extern Fl_Check_Button *btn_cloud_Country;
extern Fl_Check_Button *btn_cloud_Notes;
extern Fl_Check_Button *btn_cloud_QSLrcvd;
extern Fl_Check_Button *btn_cloud_QSLsent;
extern Fl_Check_Button *btn_cloud_eQSLrcvd;
extern Fl_Check_Button *btn_cloud_eQSLsent;
extern Fl_Check_Button *btn_cloud_LOTWrcvd;
extern Fl_Check_Button *btn_cloud_LOTWsent;
extern Fl_Check_Button *btn_cloud_QSL_VIA;
extern Fl_Check_Button *btn_cloud_SerialIN;
extern Fl_Check_Button *btn_cloud_SerialOUT;
extern Fl_Check_Button *btn_cloud_Check;
extern Fl_Check_Button *btn_cloud_XchgIn;
extern Fl_Check_Button *btn_cloud_MyXchg;
extern Fl_Check_Button *btn_cloud_CNTY;
extern Fl_Check_Button *btn_cloud_CONT;
extern Fl_Check_Button *btn_cloud_CQZ;
extern Fl_Check_Button *btn_cloud_DXCC;
extern Fl_Check_Button *btn_cloud_IOTA;
extern Fl_Check_Button *btn_cloud_ITUZ;
extern Fl_Check_Button *btn_cloud_Class;
extern Fl_Check_Button *btn_cloud_Section;
extern Fl_Check_Button *btn_cloud_cwss_serno;
extern Fl_Check_Button *btn_cloud_cwss_prec;
extern Fl_Check_Button *btn_cloud_cwss_check;
extern Fl_Check_Button *btn_cloud_cwss_section;
extern Fl_Check_Button *btn_cloud_1010;
extern Fl_Button *btnCLDClearAllFields;
extern Fl_Button *btnCLDCheckAllFields;
extern Fl_Return_Button *btnCLDOK;
extern Fl_Button *btnCLDcancel;
void create_logbook_dialogs();
#endif

View file

@ -47,4 +47,120 @@ extern const char *logmode;
extern std::string str_lotw;
// ---------------------------------------------------------------------
// UDP log record export
struct EXPORT_LOG_FIELDS {
int call;
int mode;
int freq;
int band;
int date_on;
int time_on;
int date_off;
int time_off;
int name;
int qth;
int state;
int province;
int country;
int rst_sent;
int rst_rcvd;
int tx_pwr;
int county;
int dxcc;
int cqz;
int iota;
int continent;
int ituz;
int gridsquare;
int qsl_rcvd;
int qsl_sent;
int eqsl_rcvd;
int eqsl_sent;
int lotw_rcvd;
int lotw_sent;
int qsl_via;
int notes;
int srx;
int stx;
int xchg1;
int myxchg;
int arrl_class;
int arrl_sect;
int op_call;
int sta_call;
int mygrid;
int mycity;
int check;
int age;
int ten_ten;
int cwss_serno;
int cwss_prec;
int cwss_check;
int cwss_section;
EXPORT_LOG_FIELDS() {
call =
mode =
freq =
band =
date_on =
time_on =
date_off =
time_off =
name =
qth =
state =
province =
country =
rst_sent =
rst_rcvd =
tx_pwr =
county =
dxcc =
cqz =
iota =
continent =
ituz =
gridsquare =
qsl_rcvd =
qsl_sent =
eqsl_rcvd =
eqsl_sent =
lotw_rcvd =
lotw_sent =
qsl_via =
notes =
srx =
stx =
xchg1 =
myxchg =
arrl_class =
arrl_sect =
op_call =
sta_call =
mygrid =
mycity =
check =
age =
ten_ten =
cwss_serno =
cwss_prec =
cwss_check =
cwss_section = 1;
}
};
extern EXPORT_LOG_FIELDS udp_fields;
extern void save_udp_prefs();
extern void load_udp_prefs();
extern EXPORT_LOG_FIELDS cloud_fields;
extern void save_cloud_prefs();
extern void load_cloud_prefs();
// ---------------------------------------------------------------------
#endif

View file

@ -140,4 +140,20 @@ extern void writeLog(std::string fname, cQsoDb *db);
extern const char* log_power();
//======================================================================
// eQSL
extern void submit_eQSL(cQsoRec &rec, std::string msg);
//======================================================================
//======================================================================
// Cloudlog
extern void submit_cloudlog(cQsoRec &rec);
//======================================================================
//======================================================================
// UDP log
extern void post_udp_log(cQsoRec &rec);
extern void udp_test();
//======================================================================
#endif

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
# data file for the Fltk User Interface Designer (fluid)
version 1.0305
version 1.0309
i18n_type 1
i18n_include "gettext.h"
i18n_function _
@ -23,6 +23,9 @@ decl {\#include "pixmaps.h"} {private local
decl {\#include "flinput2.h"} {public local
}
decl {\#include "logger.h"} {public local
}
decl {// Avoid 'nitems' macro collision between FreeBSD's sys/params.h and fltk's
// FL/Fl_Check_Browser.H (http://www.fltk.org/str.php?L2984)
\#undef nitems
@ -900,8 +903,8 @@ wBrowser->allowResize (1);
wBrowser->gridEnabled (0);
dlgLogbook->xclass(PACKAGE_TARNAME);} {}
Fl_Window wCabrillo {
label {Cabrillo Setup} open
xywh {495 31 675 340} type Double visible
label {Cabrillo Setup}
xywh {583 34 675 340} type Double hide
} {
Fl_Group {} {
label {Select Records to Export} open
@ -989,7 +992,7 @@ WriteCabrillo();}
xywh {533 172 70 15} down_box DOWN_BOX value 1
}
Fl_Check_Button btnCabState {
label State selected
label State
xywh {533 196 70 15} down_box DOWN_BOX value 1
}
Fl_Check_Button btnCabCounty {
@ -1028,4 +1031,838 @@ btnCabRSTrcvd->value(1);}
}
}
}
Fl_Window wUDPfields {
label {UDP export fields} open
xywh {566 318 423 405} type Double visible
} {
Fl_Group {} {
label {Select Fields to Export} open selected
xywh {5 5 410 397} box ENGRAVED_FRAME align 21
} {
Fl_Check_Button btn_udp_Call {
label Call
callback {udp_fields.call = o->value();}
xywh {13 26 70 15} down_box DOWN_BOX value 1
code0 {o->value(udp_fields.call);}
}
Fl_Check_Button btn_udp_Name {
label Name
callback {udp_fields.name = o->value();}
xywh {13 47 70 15} down_box DOWN_BOX value 1
code0 {o->value(udp_fields.name);}
}
Fl_Check_Button btn_udp_Freq {
label Freq
callback {udp_fields.freq = o->value();}
xywh {13 68 70 15} down_box DOWN_BOX value 1
code0 {o->value(udp_fields.freq);}
}
Fl_Check_Button btn_udp_Band {
label Band
callback {udp_fields.band = o->value();}
xywh {13 90 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.band);}
}
Fl_Check_Button btn_udp_Mode {
label Mode
callback {udp_fields.mode = o->value();}
xywh {13 111 70 15} down_box DOWN_BOX value 1
code0 {o->value(udp_fields.mode);}
}
Fl_Check_Button btn_udp_QSOdateOn {
label {QSO Date On}
callback {udp_fields.date_on = o->value();}
xywh {13 133 70 15} down_box DOWN_BOX value 1
code0 {o->value(udp_fields.date_on);}
}
Fl_Check_Button btn_udp_QSOdateOff {
label {QSO Date Off}
callback {udp_fields.date_off = o->value();}
xywh {13 154 70 15} down_box DOWN_BOX value 1
code0 {o->value(udp_fields.date_off);}
}
Fl_Check_Button btn_udp_TimeON {
label {Time ON}
callback {udp_fields.time_on = o->value();}
xywh {13 176 70 15} down_box DOWN_BOX value 1
code0 {o->value(udp_fields.time_on);}
}
Fl_Check_Button btn_udp_TimeOFF {
label {Time OFF}
callback {udp_fields.time_off = o->value();}
xywh {13 197 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.time_off);}
}
Fl_Check_Button btn_udp_TX_pwr {
label {TX Power}
callback {udp_fields.tx_pwr = o->value();}
xywh {13 219 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.tx_pwr);}
}
Fl_Check_Button btn_udp_RSTsent {
label {RST sent}
callback {udp_fields.rst_sent = o->value();}
xywh {13 240 70 15} down_box DOWN_BOX value 1
code0 {o->value(udp_fields.rst_sent);}
}
Fl_Check_Button btn_udp_RSTrcvd {
label {RST rcvd}
callback {udp_fields.rst_rcvd = o->value();}
xywh {13 262 70 15} down_box DOWN_BOX value 1
code0 {o->value(udp_fields.rst_rcvd);}
}
Fl_Check_Button btn_udp_Qth {
label Qth
callback {udp_fields.qth = o->value();}
xywh {13 283 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.qth);}
}
Fl_Check_Button btn_udp_LOC {
label LOC
callback {udp_fields.gridsquare = o->value();}
xywh {13 305 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.gridsquare);}
}
Fl_Check_Button btn_udp_State {
label State
callback {udp_fields.state = o->value();}
xywh {13 326 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.state);}
}
Fl_Check_Button btn_udp_Age {
label Age
callback {udp_fields.age = o->value();}
xywh {13 348 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.age);}
}
Fl_Check_Button btn_udp_StaCall {
label {Station Call}
callback {udp_fields.sta_call = o->value();}
xywh {147 26 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.sta_call);}
}
Fl_Check_Button btn_udp_StaCity {
label {Station QTH}
callback {udp_fields.mycity = o->value();}
xywh {147 47 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.mycity);}
}
Fl_Check_Button btn_udp_StaGrid {
label {Station LOC}
callback {udp_fields.mygrid = o->value();}
xywh {147 68 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.mygrid);}
}
Fl_Check_Button btn_udp_Operator {
label Operator
callback {udp_fields.op_call = o->value();}
xywh {147 90 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.op_call);}
}
Fl_Check_Button btn_udp_Province {
label Province
callback {udp_fields.province = o->value();}
xywh {147 111 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.province);}
}
Fl_Check_Button btn_udp_Country {
label Country
callback {udp_fields.country = o->value();}
xywh {147 133 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.country);}
}
Fl_Check_Button btn_udp_Notes {
label Notes
callback {udp_fields.notes = o->value();}
xywh {147 154 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.notes);}
}
Fl_Check_Button btn_udp_QSLrcvd {
label {QSL rcvd date}
callback {udp_fields.qsl_rcvd = o->value();}
xywh {147 176 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.qsl_rcvd);}
}
Fl_Check_Button btn_udp_QSLsent {
label {QSL sent date}
callback {udp_fields.qsl_sent = o->value();}
xywh {147 197 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.qsl_sent);}
}
Fl_Check_Button btn_udp_eQSLrcvd {
label {eQSL rcvd date}
callback {udp_fields.eqsl_rcvd = o->value();}
xywh {147 219 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.eqsl_rcvd);}
}
Fl_Check_Button btn_udp_eQSLsent {
label {eQSL sent date}
callback {udp_fields.eqsl_sent = o->value();}
xywh {147 240 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.eqsl_sent);}
}
Fl_Check_Button btn_udp_LOTWrcvd {
label {LoTW rcvd date}
callback {udp_fields.lotw_rcvd = o->value();}
xywh {147 262 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.lotw_rcvd);}
}
Fl_Check_Button btn_udp_LOTWsent {
label {LoTW sent date}
callback {udp_fields.lotw_sent = o->value();}
xywh {147 283 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.lotw_sent);}
}
Fl_Check_Button btn_udp_QSL_VIA {
label {QSL-VIA}
callback {udp_fields.qsl_via = o->value();}
xywh {147 305 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.qsl_via);}
}
Fl_Check_Button btn_udp_SerialIN {
label {Serial \# in}
callback {udp_fields.srx = o->value();}
xywh {147 326 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.srx);}
}
Fl_Check_Button btn_udp_SerialOUT {
label {Serial \# out}
callback {udp_fields.stx = o->value();}
xywh {147 348 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.stx);}
}
Fl_Check_Button btn_udp_Check {
label Check
callback {udp_fields.check = o->value();}
xywh {281 26 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.check);}
}
Fl_Check_Button btn_udp_XchgIn {
label {Exchange In}
callback {udp_fields.xchg1 = o->value();}
xywh {281 47 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.xchg1);}
}
Fl_Check_Button btn_udp_MyXchg {
label {Exchange Out}
callback {udp_fields.myxchg = o->value();}
xywh {281 68 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.myxchg);}
}
Fl_Check_Button btn_udp_CNTY {
label County
callback {udp_fields.county = o->value();}
xywh {281 90 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.county);}
}
Fl_Check_Button btn_udp_CONT {
label Continent
callback {udp_fields.continent = o->value();}
xywh {281 111 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.continent);}
}
Fl_Check_Button btn_udp_CQZ {
label CQZ
callback {udp_fields.cqz = o->value();}
xywh {281 133 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.cqz);}
}
Fl_Check_Button btn_udp_DXCC {
label DXCC
callback {udp_fields.dxcc = o->value();}
xywh {281 154 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.dxcc);}
}
Fl_Check_Button btn_udp_IOTA {
label IOTA
callback {udp_fields.iota = o->value();}
xywh {281 176 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.iota);}
}
Fl_Check_Button btn_udp_ITUZ {
label ITUZ
callback {udp_fields.ituz = o->value();}
xywh {281 197 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.ituz);}
}
Fl_Check_Button btn_udp_Class {
label {FD class}
callback {udp_fields.arrl_class = o->value();}
xywh {281 219 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.arrl_class);}
}
Fl_Check_Button btn_udp_Section {
label {FD section}
callback {udp_fields.arrl_sect = o->value();}
xywh {281 240 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.arrl_sect);}
}
Fl_Check_Button btn_udp_cwss_serno {
label {CW SS SerNo R}
callback {udp_fields.cwss_serno = o->value();}
tooltip {CW sweepstakes rcvd ser. no.} xywh {281 262 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.cwss_serno);}
}
Fl_Check_Button btn_udp_cwss_prec {
label {CW SS Prec'}
callback {udp_fields.cwss_prec = o->value();}
tooltip {CW sweepstakes precedence} xywh {281 283 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.cwss_prec);}
}
Fl_Check_Button btn_udp_cwss_check {
label {CW SS Check}
callback {udp_fields.cwss_check = o->value();}
xywh {281 305 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.cwss_check);}
}
Fl_Check_Button btn_udp_cwss_section {
label {CW SS Section}
callback {udp_fields.cwss_section = o->value();}
tooltip {CW sweepstakes section} xywh {281 326 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.cwss_section);}
}
Fl_Check_Button btn_udp_1010 {
label {10-10}
callback {udp_fields.ten_ten = o->value();}
tooltip {CW sweepstakes section} xywh {281 348 70 15} down_box DOWN_BOX
code0 {o->value(udp_fields.ten_ten);}
}
Fl_Button btnUDPClearAllFields {
label {Clear All}
callback {btn_udp_Call->value(0);
btn_udp_Name->value(0);
btn_udp_Freq->value(0);
btn_udp_Band->value(0);
btn_udp_Mode->value(0);
btn_udp_QSOdateOn->value(0);
btn_udp_QSOdateOff->value(0);
btn_udp_TimeON->value(0);
btn_udp_TimeOFF->value(0);
btn_udp_TX_pwr->value(0);
btn_udp_RSTsent->value(0);
btn_udp_RSTrcvd->value(0);
btn_udp_Qth->value(0);
btn_udp_LOC->value(0);
btn_udp_State->value(0);
btn_udp_Age->value(0);
btn_udp_StaCall->value(0);
btn_udp_StaGrid->value(0);
btn_udp_StaCity->value(0);
btn_udp_Operator->value(0);
btn_udp_Province->value(0);
btn_udp_Country->value(0);
btn_udp_Notes->value(0);
btn_udp_QSLrcvd->value(0);
btn_udp_QSLsent->value(0);
btn_udp_eQSLrcvd->value(0);
btn_udp_eQSLsent->value(0);
btn_udp_LOTWrcvd->value(0);
btn_udp_LOTWsent->value(0);
btn_udp_QSL_VIA->value(0);
btn_udp_SerialIN->value(0);
btn_udp_SerialOUT->value(0);
btn_udp_Check->value(0);
btn_udp_XchgIn->value(0);
btn_udp_MyXchg->value(0);
btn_udp_CNTY->value(0);
btn_udp_CONT->value(0);
btn_udp_CQZ->value(0);
btn_udp_DXCC->value(0);
btn_udp_IOTA->value(0);
btn_udp_ITUZ->value(0);
btn_udp_Class->value(0);
btn_udp_Section->value(0);
btn_udp_cwss_serno->value(0);
btn_udp_cwss_prec->value(0);
btn_udp_cwss_section->value(0);
btn_udp_cwss_check->value(0);
btn_udp_1010->value(0);}
xywh {8 373 85 20}
}
Fl_Button btnUDPCheckAllFields {
label {Check All}
callback {btn_udp_Call->value(1);
btn_udp_Name->value(1);
btn_udp_Freq->value(1);
btn_udp_Band->value(1);
btn_udp_Mode->value(1);
btn_udp_QSOdateOn->value(1);
btn_udp_QSOdateOff->value(1);
btn_udp_TimeON->value(1);
btn_udp_TimeOFF->value(1);
btn_udp_TX_pwr->value(1);
btn_udp_RSTsent->value(1);
btn_udp_RSTrcvd->value(1);
btn_udp_Qth->value(1);
btn_udp_LOC->value(1);
btn_udp_State->value(1);
btn_udp_Age->value(1);
btn_udp_StaCall->value(1);
btn_udp_StaGrid->value(1);
btn_udp_StaCity->value(1);
btn_udp_Operator->value(1);
btn_udp_Province->value(1);
btn_udp_Country->value(1);
btn_udp_Notes->value(1);
btn_udp_QSLrcvd->value(1);
btn_udp_QSLsent->value(1);
btn_udp_eQSLrcvd->value(1);
btn_udp_eQSLsent->value(1);
btn_udp_LOTWrcvd->value(1);
btn_udp_LOTWsent->value(1);
btn_udp_QSL_VIA->value(1);
btn_udp_SerialIN->value(1);
btn_udp_SerialOUT->value(1);
btn_udp_Check->value(1);
btn_udp_XchgIn->value(1);
btn_udp_MyXchg->value(1);
btn_udp_CNTY->value(1);
btn_udp_CONT->value(1);
btn_udp_CQZ->value(1);
btn_udp_DXCC->value(1);
btn_udp_IOTA->value(1);
btn_udp_ITUZ->value(1);
btn_udp_Class->value(1);
btn_udp_Section->value(1);
btn_udp_cwss_serno->value(1);
btn_udp_cwss_prec->value(1);
btn_udp_cwss_check->value(1);
btn_udp_cwss_section->value(1);
btn_udp_1010->value(1);}
xywh {101 373 85 20}
}
Fl_Return_Button btnUDPOK {
label OK
callback {save_udp_prefs();
wUDPfields->hide();}
xywh {308 373 85 20}
}
Fl_Button btnUDPcancel {
label Cancel
callback {wUDPfields->hide();}
xywh {204 373 85 20}
}
}
}
Fl_Window wCLDfields {
label {Cloud Log export fields} open
xywh {566 318 423 405} type Double visible
} {
Fl_Group {} {
label {Select Fields to Export} open selected
xywh {5 5 410 397} box ENGRAVED_FRAME align 21
} {
Fl_Check_Button btn_cloud_Call {
label Call
callback {cloud_fields.call = o->value();}
xywh {13 26 70 15} down_box DOWN_BOX value 1
code0 {o->value(cloud_fields.call);}
}
Fl_Check_Button btn_cloud_Name {
label Name
callback {cloud_fields.name = o->value();}
xywh {13 47 70 15} down_box DOWN_BOX value 1
code0 {o->value(cloud_fields.name);}
}
Fl_Check_Button btn_cloud_Freq {
label Freq
callback {cloud_fields.freq = o->value();}
xywh {13 68 70 15} down_box DOWN_BOX value 1
code0 {o->value(cloud_fields.freq);}
}
Fl_Check_Button btn_cloud_Band {
label Band
callback {cloud_fields.band = o->value();}
xywh {13 90 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.band);}
}
Fl_Check_Button btn_cloud_Mode {
label Mode
callback {cloud_fields.mode = o->value();}
xywh {13 111 70 15} down_box DOWN_BOX value 1
code0 {o->value(cloud_fields.mode);}
}
Fl_Check_Button btn_cloud_QSOdateOn {
label {QSO Date On}
callback {cloud_fields.date_on = o->value();}
xywh {13 133 70 15} down_box DOWN_BOX value 1
code0 {o->value(cloud_fields.date_on);}
}
Fl_Check_Button btn_cloud_QSOdateOff {
label {QSO Date Off}
callback {cloud_fields.date_off = o->value();}
xywh {13 154 70 15} down_box DOWN_BOX value 1
code0 {o->value(cloud_fields.date_off);}
}
Fl_Check_Button btn_cloud_TimeON {
label {Time ON}
callback {cloud_fields.time_on = o->value();}
xywh {13 176 70 15} down_box DOWN_BOX value 1
code0 {o->value(cloud_fields.time_on);}
}
Fl_Check_Button btn_cloud_TimeOFF {
label {Time OFF}
callback {cloud_fields.time_off = o->value();}
xywh {13 197 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.time_off);}
}
Fl_Check_Button btn_cloud_TX_pwr {
label {TX Power}
callback {cloud_fields.tx_pwr = o->value();}
xywh {13 219 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.tx_pwr);}
}
Fl_Check_Button btn_cloud_RSTsent {
label {RST sent}
callback {cloud_fields.rst_sent = o->value();}
xywh {13 240 70 15} down_box DOWN_BOX value 1
code0 {o->value(cloud_fields.rst_sent);}
}
Fl_Check_Button btn_cloud_RSTrcvd {
label {RST rcvd}
callback {cloud_fields.rst_rcvd = o->value();}
xywh {13 262 70 15} down_box DOWN_BOX value 1
code0 {o->value(cloud_fields.rst_rcvd);}
}
Fl_Check_Button btn_cloud_Qth {
label Qth
callback {cloud_fields.qth = o->value();}
xywh {13 283 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.qth);}
}
Fl_Check_Button btn_cloud_LOC {
label LOC
callback {cloud_fields.gridsquare = o->value();}
xywh {13 305 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.gridsquare);}
}
Fl_Check_Button btn_cloud_State {
label State
callback {cloud_fields.state = o->value();}
xywh {13 326 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.state);}
}
Fl_Check_Button btn_cloud_Age {
label Age
callback {cloud_fields.age = o->value();}
xywh {13 348 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.age);}
}
Fl_Check_Button btn_cloud_StaCall {
label {Station Call}
callback {cloud_fields.sta_call = o->value();}
xywh {147 26 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.sta_call);}
}
Fl_Check_Button btn_cloud_StaCity {
label {Station QTH}
callback {cloud_fields.mycity = o->value();}
xywh {147 47 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.mycity);}
}
Fl_Check_Button btn_cloud_StaGrid {
label {Station LOC}
callback {cloud_fields.mygrid = o->value();}
xywh {147 68 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.mygrid);}
}
Fl_Check_Button btn_cloud_Operator {
label Operator
callback {cloud_fields.op_call = o->value();}
xywh {147 90 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.op_call);}
}
Fl_Check_Button btn_cloud_Province {
label Province
callback {cloud_fields.province = o->value();}
xywh {147 111 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.province);}
}
Fl_Check_Button btn_cloud_Country {
label Country
callback {cloud_fields.country = o->value();}
xywh {147 133 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.country);}
}
Fl_Check_Button btn_cloud_Notes {
label Notes
callback {cloud_fields.notes = o->value();}
xywh {147 154 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.notes);}
}
Fl_Check_Button btn_cloud_QSLrcvd {
label {QSL rcvd date}
callback {cloud_fields.qsl_rcvd = o->value();}
xywh {147 176 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.qsl_rcvd);}
}
Fl_Check_Button btn_cloud_QSLsent {
label {QSL sent date}
callback {cloud_fields.qsl_sent = o->value();}
xywh {147 197 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.qsl_sent);}
}
Fl_Check_Button btn_cloud_eQSLrcvd {
label {eQSL rcvd date}
callback {cloud_fields.eqsl_rcvd = o->value();}
xywh {147 219 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.eqsl_rcvd);}
}
Fl_Check_Button btn_cloud_eQSLsent {
label {eQSL sent date}
callback {cloud_fields.eqsl_sent = o->value();}
xywh {147 240 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.eqsl_sent);}
}
Fl_Check_Button btn_cloud_LOTWrcvd {
label {LoTW rcvd date}
callback {cloud_fields.lotw_rcvd = o->value();}
xywh {147 262 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.lotw_rcvd);}
}
Fl_Check_Button btn_cloud_LOTWsent {
label {LoTW sent date}
callback {cloud_fields.lotw_sent = o->value();}
xywh {147 283 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.lotw_sent);}
}
Fl_Check_Button btn_cloud_QSL_VIA {
label {QSL-VIA}
callback {cloud_fields.qsl_via = o->value();}
xywh {147 305 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.qsl_via);}
}
Fl_Check_Button btn_cloud_SerialIN {
label {Serial \# in}
callback {cloud_fields.srx = o->value();}
xywh {147 326 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.srx);}
}
Fl_Check_Button btn_cloud_SerialOUT {
label {Serial \# out}
callback {cloud_fields.stx = o->value();}
xywh {147 348 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.stx);}
}
Fl_Check_Button btn_cloud_Check {
label Check
callback {cloud_fields.check = o->value();}
xywh {281 26 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.check);}
}
Fl_Check_Button btn_cloud_XchgIn {
label {Exchange In}
callback {cloud_fields.xchg1 = o->value();}
xywh {281 47 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.xchg1);}
}
Fl_Check_Button btn_cloud_MyXchg {
label {Exchange Out}
callback {cloud_fields.myxchg = o->value();}
xywh {281 68 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.myxchg);}
}
Fl_Check_Button btn_cloud_CNTY {
label County
callback {cloud_fields.county = o->value();}
xywh {281 90 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.county);}
}
Fl_Check_Button btn_cloud_CONT {
label Continent
callback {cloud_fields.continent = o->value();}
xywh {281 111 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.continent);}
}
Fl_Check_Button btn_cloud_CQZ {
label CQZ
callback {cloud_fields.cqz = o->value();}
xywh {281 133 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.cqz);}
}
Fl_Check_Button btn_cloud_DXCC {
label DXCC
callback {cloud_fields.dxcc = o->value();}
xywh {281 154 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.dxcc);}
}
Fl_Check_Button btn_cloud_IOTA {
label IOTA
callback {cloud_fields.iota = o->value();}
xywh {281 176 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.iota);}
}
Fl_Check_Button btn_cloud_ITUZ {
label ITUZ
callback {cloud_fields.ituz = o->value();}
xywh {281 197 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.ituz);}
}
Fl_Check_Button btn_cloud_Class {
label {FD class}
callback {cloud_fields.arrl_class = o->value();}
xywh {281 219 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.arrl_class);}
}
Fl_Check_Button btn_cloud_Section {
label {FD section}
callback {cloud_fields.arrl_sect = o->value();}
xywh {281 240 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.arrl_sect);}
}
Fl_Check_Button btn_cloud_cwss_serno {
label {CW SS SerNo R}
callback {cloud_fields.cwss_serno = o->value();}
tooltip {CW sweepstakes rcvd ser. no.} xywh {281 262 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.cwss_serno);}
}
Fl_Check_Button btn_cloud_cwss_prec {
label {CW SS Prec'}
callback {cloud_fields.cwss_prec = o->value();}
tooltip {CW sweepstakes precedence} xywh {281 283 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.cwss_prec);}
}
Fl_Check_Button btn_cloud_cwss_check {
label {CW SS Check}
callback {cloud_fields.cwss_check = o->value();}
xywh {281 305 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.cwss_check);}
}
Fl_Check_Button btn_cloud_cwss_section {
label {CW SS Section}
callback {cloud_fields.cwss_section = o->value();}
tooltip {CW sweepstakes section} xywh {281 326 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.cwss_section);}
}
Fl_Check_Button btn_cloud_1010 {
label {10-10}
callback {cloud_fields.ten_ten = o->value();}
tooltip {CW sweepstakes section} xywh {281 348 70 15} down_box DOWN_BOX
code0 {o->value(cloud_fields.ten_ten);}
}
Fl_Button btnCLDClearAllFields {
label {Clear All}
callback {btn_cloud_Call->value(0);
btn_cloud_Name->value(0);
btn_cloud_Freq->value(0);
btn_cloud_Band->value(0);
btn_cloud_Mode->value(0);
btn_cloud_QSOdateOn->value(0);
btn_cloud_QSOdateOff->value(0);
btn_cloud_TimeON->value(0);
btn_cloud_TimeOFF->value(0);
btn_cloud_TX_pwr->value(0);
btn_cloud_RSTsent->value(0);
btn_cloud_RSTrcvd->value(0);
btn_cloud_Qth->value(0);
btn_cloud_LOC->value(0);
btn_cloud_State->value(0);
btn_cloud_Age->value(0);
btn_cloud_StaCall->value(0);
btn_cloud_StaGrid->value(0);
btn_cloud_StaCity->value(0);
btn_cloud_Operator->value(0);
btn_cloud_Province->value(0);
btn_cloud_Country->value(0);
btn_cloud_Notes->value(0);
btn_cloud_QSLrcvd->value(0);
btn_cloud_QSLsent->value(0);
btn_cloud_eQSLrcvd->value(0);
btn_cloud_eQSLsent->value(0);
btn_cloud_LOTWrcvd->value(0);
btn_cloud_LOTWsent->value(0);
btn_cloud_QSL_VIA->value(0);
btn_cloud_SerialIN->value(0);
btn_cloud_SerialOUT->value(0);
btn_cloud_Check->value(0);
btn_cloud_XchgIn->value(0);
btn_cloud_MyXchg->value(0);
btn_cloud_CNTY->value(0);
btn_cloud_CONT->value(0);
btn_cloud_CQZ->value(0);
btn_cloud_DXCC->value(0);
btn_cloud_IOTA->value(0);
btn_cloud_ITUZ->value(0);
btn_cloud_Class->value(0);
btn_cloud_Section->value(0);
btn_cloud_cwss_serno->value(0);
btn_cloud_cwss_prec->value(0);
btn_cloud_cwss_section->value(0);
btn_cloud_cwss_check->value(0);
btn_cloud_1010->value(0);}
xywh {8 373 85 20}
}
Fl_Button btnCLDCheckAllFields {
label {Check All}
callback {btn_cloud_Call->value(1);
btn_cloud_Name->value(1);
btn_cloud_Freq->value(1);
btn_cloud_Band->value(1);
btn_cloud_Mode->value(1);
btn_cloud_QSOdateOn->value(1);
btn_cloud_QSOdateOff->value(1);
btn_cloud_TimeON->value(1);
btn_cloud_TimeOFF->value(1);
btn_cloud_TX_pwr->value(1);
btn_cloud_RSTsent->value(1);
btn_cloud_RSTrcvd->value(1);
btn_cloud_Qth->value(1);
btn_cloud_LOC->value(1);
btn_cloud_State->value(1);
btn_cloud_Age->value(1);
btn_cloud_StaCall->value(1);
btn_cloud_StaGrid->value(1);
btn_cloud_StaCity->value(1);
btn_cloud_Operator->value(1);
btn_cloud_Province->value(1);
btn_cloud_Country->value(1);
btn_cloud_Notes->value(1);
btn_cloud_QSLrcvd->value(1);
btn_cloud_QSLsent->value(1);
btn_cloud_eQSLrcvd->value(1);
btn_cloud_eQSLsent->value(1);
btn_cloud_LOTWrcvd->value(1);
btn_cloud_LOTWsent->value(1);
btn_cloud_QSL_VIA->value(1);
btn_cloud_SerialIN->value(1);
btn_cloud_SerialOUT->value(1);
btn_cloud_Check->value(1);
btn_cloud_XchgIn->value(1);
btn_cloud_MyXchg->value(1);
btn_cloud_CNTY->value(1);
btn_cloud_CONT->value(1);
btn_cloud_CQZ->value(1);
btn_cloud_DXCC->value(1);
btn_cloud_IOTA->value(1);
btn_cloud_ITUZ->value(1);
btn_cloud_Class->value(1);
btn_cloud_Section->value(1);
btn_cloud_cwss_serno->value(1);
btn_cloud_cwss_prec->value(1);
btn_cloud_cwss_check->value(1);
btn_cloud_cwss_section->value(1);
btn_cloud_1010->value(1);}
xywh {101 373 85 20}
}
Fl_Return_Button btnCLDOK {
label OK
callback {save_cloud_prefs();
wCLDfields->hide();}
xywh {308 373 85 20}
}
Fl_Button btnCLDcancel {
label Cancel
callback {wCLDfields->hide();}
xywh {204 373 85 20}
}
}
}
}

View file

@ -32,6 +32,8 @@
#include <fstream>
#include <vector>
#include <FL/Fl_Preferences.H>
#include "icons.h"
#include "logger.h"
#include "lgbook.h"
@ -55,6 +57,8 @@
#include "lookupcall.h"
#include "fd_logger.h"
#include "socket.h"
#include "n3fjp_logger.h"
#include "dx_cluster.h"
@ -63,12 +67,20 @@
#include <FL/fl_ask.H>
//---------------------------------------------------------------------
//======================================================================
const char *logmode;
static std::string log_msg;
static std::string errmsg;
static std::string notes;
//======================================================================
std::string comma2period(std::string in)
{
for (size_t n = 0; n < in.length(); n++)
if (in[n] == ',') in[n] = '.';
return in;
}
//======================================================================
// LoTW
@ -79,16 +91,6 @@ static std::string lotw_log_fname;
static int tracefile_timeout = 0;
std::string str_lotw;
//======================================================================
// eQSL
void submit_eQSL(cQsoRec &rec, std::string msg);
//======================================================================
//======================================================================
// Cloudlog
void submit_cloudlog(cQsoRec &rec);
//======================================================================
//
static std::string adif;
void writeADIF () {
@ -294,7 +296,7 @@ std::string lotw_rec(cQsoRec &rec)
temp = rec.getField(FREQ);
temp.resize(7);
putadif(FREQ, temp.c_str(), strrec);
putadif(FREQ, comma2period(temp).c_str(), strrec);
putadif(QSO_DATE, rec.getField(QSO_DATE), strrec);
@ -332,7 +334,7 @@ void submit_ADIF(cQsoRec &rec)
putadif(QSO_DATE_OFF, rec.getField(QSO_DATE_OFF));
putadif(TIME_OFF, rec.getField(TIME_OFF));
putadif(CALL, rec.getField(CALL));
putadif(FREQ, rec.getField(FREQ));
putadif(FREQ, comma2period(rec.getField(FREQ)).c_str());
putadif(ADIF_MODE, adif2export(rec.getField(ADIF_MODE)).c_str());
std::string sm = adif2submode(rec.getField(ADIF_MODE));
@ -458,6 +460,8 @@ void submit_record(cQsoRec &rec)
submit_eQSL(rec, "");
if (progdefaults.EnCloudlog)
submit_cloudlog(rec);
if (progdefaults.enable_udp_logging)
post_udp_log(rec);
n3fjp_add_record(rec);
}
@ -692,7 +696,7 @@ void submit_eQSL(cQsoRec &rec, std::string msg)
tempstr = rec.getField(FREQ);
tempstr.resize(7);
putadif(FREQ, tempstr.c_str(), eQSL_data);
putadif(FREQ, comma2period(tempstr).c_str(), eQSL_data);
putadif(BAND, rec.getField(BAND), eQSL_data);
putadif(QSO_DATE, sDate_on.c_str(), eQSL_data);
tempstr = rec.getField(TIME_ON);
@ -796,42 +800,180 @@ void makeEQSL(const char *message)
}
//----------------------------------------------------------------------
// Cloud Log export
//----------------------------------------------------------------------
EXPORT_LOG_FIELDS cloud_fields;
void submit_cloudlog(cQsoRec &rec)
{
std::string cloudlog_data;
std::string tempstr;
cloudlog_data = "";
putadif(CALL, rec.getField(CALL), cloudlog_data);
putadif(ADIF_MODE, adif2export(rec.getField(ADIF_MODE)).c_str(), cloudlog_data);
std::string sm = adif2submode(rec.getField(ADIF_MODE));
if (!sm.empty())
putadif(SUBMODE, sm.c_str(), cloudlog_data);
cloudlog_data.clear();
if (cloud_fields.call)
putadif(CALL, rec.getField(CALL), cloudlog_data);
if (cloud_fields.mode) {
putadif(ADIF_MODE, adif2export(rec.getField(ADIF_MODE)).c_str(), cloudlog_data);
std::string sm = adif2submode(rec.getField(ADIF_MODE));
if (!sm.empty())
putadif(SUBMODE, sm.c_str(), cloudlog_data);
}
if (cloud_fields.freq)
putadif(FREQ, comma2period(rec.getField(FREQ)).c_str(), cloudlog_data);
if (cloud_fields.band)
putadif(BAND, rec.getField(BAND), cloudlog_data);
if (cloud_fields.date_on)
putadif(QSO_DATE, sDate_on.c_str(), cloudlog_data);
if (cloud_fields.time_on) {
tempstr = rec.getField(TIME_ON);
if (tempstr.length() > 4) tempstr.erase(4);
putadif(TIME_ON, tempstr.c_str(), cloudlog_data);
}
if (cloud_fields.date_off)
putadif(QSO_DATE_OFF, rec.getField(QSO_DATE_OFF), cloudlog_data);
if (cloud_fields.time_off) {
tempstr = rec.getField(TIME_ON);
if (tempstr.length() > 4) tempstr.erase(4);
putadif(TIME_OFF, tempstr.c_str(), cloudlog_data);
}
if (cloud_fields.name)
putadif(NAME, rec.getField(NAME), cloudlog_data);
if (cloud_fields.qth)
putadif(QTH, rec.getField(QTH), cloudlog_data);
if (cloud_fields.state)
putadif(STATE, rec.getField(STATE), cloudlog_data);
if (cloud_fields.province)
putadif(VE_PROV, rec.getField(VE_PROV), cloudlog_data);
if (cloud_fields.country)
putadif(COUNTRY, rec.getField(COUNTRY), cloudlog_data);
if (cloud_fields.rst_sent)
putadif(RST_SENT, rec.getField(RST_SENT), cloudlog_data);
if (cloud_fields.rst_rcvd)
putadif(RST_RCVD, rec.getField(RST_RCVD), cloudlog_data);
if (cloud_fields.tx_pwr)
putadif(TX_PWR, rec.getField(TX_PWR), cloudlog_data);
if (cloud_fields.county)
putadif(CNTY, rec.getField(CNTY), cloudlog_data);
if (cloud_fields.dxcc)
putadif( DXCC, rec.getField(DXCC), cloudlog_data);
if (cloud_fields.cqz)
putadif(CQZ, rec.getField(CQZ), cloudlog_data);
if (cloud_fields.iota)
putadif(IOTA, rec.getField(IOTA), cloudlog_data);
if (cloud_fields.continent)
putadif(CONT, rec.getField(CONT), cloudlog_data);
if (cloud_fields.ituz)
putadif(ITUZ, rec.getField(ITUZ), cloudlog_data);
if (cloud_fields.gridsquare)
putadif(GRIDSQUARE, rec.getField(GRIDSQUARE), cloudlog_data);
if (cloud_fields.qsl_rcvd)
putadif(QSLRDATE, rec.getField(QSLRDATE), cloudlog_data);
if (cloud_fields.qsl_sent)
putadif(QSLSDATE, rec.getField(QSLSDATE), cloudlog_data);
if (cloud_fields.eqsl_rcvd)
putadif(EQSLRDATE, rec.getField(EQSLRDATE), cloudlog_data);
if (cloud_fields.eqsl_sent)
putadif(EQSLSDATE, rec.getField(EQSLSDATE), cloudlog_data);
if (cloud_fields.lotw_rcvd)
putadif(LOTWRDATE, rec.getField(LOTWRDATE), cloudlog_data);
if (cloud_fields.lotw_sent)
putadif(LOTWSDATE, rec.getField(LOTWSDATE), cloudlog_data);
if (cloud_fields.qsl_via)
putadif(QSL_VIA, rec.getField(QSL_VIA), cloudlog_data);
if (cloud_fields.notes) {
std::string temp = rec.getField(NOTES);
for (size_t n = 0; n < temp.length(); n++)
if (temp[n] == '\n') temp[n] = ';';
putadif(NOTES, temp.c_str(), cloudlog_data);
}
if (cloud_fields.srx)
putadif(SRX, rec.getField(SRX), cloudlog_data);
if (cloud_fields.stx)
putadif(STX, rec.getField(STX), cloudlog_data);
if (cloud_fields.xchg1)
putadif(XCHG1, rec.getField(XCHG1), cloudlog_data);
if (cloud_fields.myxchg)
putadif(MYXCHG, rec.getField(MYXCHG), cloudlog_data);
if (cloud_fields.arrl_class)
putadif(CLASS, rec.getField(CLASS), cloudlog_data);
if (cloud_fields.arrl_sect)
putadif(ARRL_SECT, rec.getField(ARRL_SECT), cloudlog_data);
if (cloud_fields.op_call)
putadif(OP_CALL, rec.getField(OP_CALL), cloudlog_data);
if (cloud_fields.sta_call)
putadif(STA_CALL, rec.getField(STA_CALL), cloudlog_data);
if (cloud_fields.mygrid)
putadif(MY_GRID, rec.getField(MY_GRID), cloudlog_data);
if (cloud_fields.mycity)
putadif(MY_CITY, rec.getField(MY_CITY), cloudlog_data);
if (cloud_fields.check)
putadif(CHECK, rec.getField(CHECK), cloudlog_data);
if (cloud_fields.age)
putadif(AGE, rec.getField(AGE), cloudlog_data);
if (cloud_fields.ten_ten)
putadif(TEN_TEN, rec.getField(TEN_TEN), cloudlog_data);
if (cloud_fields.cwss_check)
putadif(SS_CHK, rec.getField(SS_CHK), cloudlog_data);
if (cloud_fields.cwss_serno)
putadif(SS_SERNO, rec.getField(SS_SERNO), cloudlog_data);
if (cloud_fields.cwss_prec)
putadif(SS_PREC, rec.getField(SS_PREC), cloudlog_data);
if (cloud_fields.cwss_section)
putadif(SS_SEC, rec.getField(SS_SEC), cloudlog_data);
tempstr = rec.getField(FREQ);
tempstr.resize(7);
size_t p = 0;
if ((p = tempstr.find(",")) != std::string::npos)
tempstr.replace(p, 1, ".");
putadif(FREQ, tempstr.c_str(), cloudlog_data);
putadif(BAND, rec.getField(BAND), cloudlog_data);
putadif(QSO_DATE, sDate_on.c_str(), cloudlog_data);
tempstr = rec.getField(TIME_ON);
if (tempstr.length() > 4) tempstr.erase(4);
putadif(TIME_ON, tempstr.c_str(), cloudlog_data);
putadif(QSO_DATE_OFF, rec.getField(QSO_DATE_OFF), cloudlog_data);
putadif(TIME_OFF, rec.getField(TIME_OFF), cloudlog_data);
putadif(GRIDSQUARE, rec.getField(GRIDSQUARE), cloudlog_data);
putadif(NAME, rec.getField(NAME), cloudlog_data);
putadif(QTH, rec.getField(QTH), cloudlog_data);
putadif(STATE, rec.getField(STATE), cloudlog_data);
putadif(VE_PROV, rec.getField(VE_PROV), cloudlog_data);
putadif(COUNTRY, rec.getField(COUNTRY), cloudlog_data);
putadif(RST_SENT, rec.getField(RST_SENT), cloudlog_data);
putadif(RST_RCVD, rec.getField(RST_RCVD), cloudlog_data);
putadif(STX, rec.getField(STX), cloudlog_data);
putadif(SRX, rec.getField(SRX), cloudlog_data);
cloudlog_data.append("<EOR>");
tempstr.clear();
std::string cloudlogUrl = progdefaults.cloudlog_api_url;
cloudlogUrl = cloudlogUrl + "/index.php/api/qso";
@ -839,3 +981,570 @@ void submit_cloudlog(cQsoRec &rec)
int cloudlogStationId = progdefaults.cloudlog_station_id;
post_http(cloudlogUrl.c_str(), cloudlogApiKey.c_str(), cloudlogStationId, cloudlog_data.c_str(), EQSL_xmlpage, 5.0);
}
static int cld_first_use = 1;
void save_cloud_prefs()
{
cloud_fields.name = btn_cloud_Name->value();
cloud_fields.freq = btn_cloud_Freq->value();
cloud_fields.band = btn_cloud_Band->value();
cloud_fields.mode = btn_cloud_Mode->value();
cloud_fields.date_on = btn_cloud_QSOdateOn->value();
cloud_fields.date_off = btn_cloud_QSOdateOff->value();
cloud_fields.time_on = btn_cloud_TimeON->value();
cloud_fields.time_off = btn_cloud_TimeOFF->value();
cloud_fields.tx_pwr = btn_cloud_TX_pwr->value();
cloud_fields.rst_sent = btn_cloud_RSTsent->value();
cloud_fields.rst_rcvd = btn_cloud_RSTrcvd->value();
cloud_fields.qth = btn_cloud_Qth->value();
cloud_fields.gridsquare = btn_cloud_LOC->value();
cloud_fields.state = btn_cloud_State->value();
cloud_fields.age = btn_cloud_Age->value();
cloud_fields.sta_call = btn_cloud_StaCall->value();
cloud_fields.mygrid = btn_cloud_StaGrid->value();
cloud_fields.mycity = btn_cloud_StaCity->value();
cloud_fields.op_call = btn_cloud_Operator->value();
cloud_fields.province = btn_cloud_Province->value();
cloud_fields.country = btn_cloud_Country->value();
cloud_fields.notes = btn_cloud_Notes->value();
cloud_fields.qsl_rcvd = btn_cloud_QSLrcvd->value();
cloud_fields.qsl_sent = btn_cloud_QSLsent->value();
cloud_fields.eqsl_rcvd = btn_cloud_eQSLrcvd->value();
cloud_fields.eqsl_sent = btn_cloud_eQSLsent->value();
cloud_fields.lotw_rcvd = btn_cloud_LOTWrcvd->value();
cloud_fields.lotw_sent = btn_cloud_LOTWsent->value();
cloud_fields.qsl_via = btn_cloud_QSL_VIA->value();
cloud_fields.srx = btn_cloud_SerialIN->value();
cloud_fields.stx = btn_cloud_SerialOUT->value();
cloud_fields.check = btn_cloud_Check->value();
cloud_fields.xchg1 = btn_cloud_XchgIn->value();
cloud_fields.myxchg = btn_cloud_MyXchg->value();
cloud_fields.county = btn_cloud_CNTY->value();
cloud_fields.continent = btn_cloud_CONT->value();
cloud_fields.cqz = btn_cloud_CQZ->value();
cloud_fields.dxcc = btn_cloud_DXCC->value();
cloud_fields.iota = btn_cloud_IOTA->value();
cloud_fields.ituz = btn_cloud_ITUZ->value();
cloud_fields.arrl_class = btn_cloud_Class->value();
cloud_fields.arrl_sect = btn_cloud_Section->value();
cloud_fields.cwss_serno = btn_cloud_cwss_serno->value();
cloud_fields.cwss_prec = btn_cloud_cwss_prec->value();
cloud_fields.cwss_check = btn_cloud_cwss_check->value();
cloud_fields.cwss_section = btn_cloud_cwss_section->value();
cloud_fields.ten_ten = btn_cloud_1010->value();
std::string pref;
Fl_Preferences spref(HomeDir.c_str(), "w1hkj.com", "cloud_fields");
spref.set("cld_first_use", 0);
spref.set("call", cloud_fields.call);
spref.set("mode", cloud_fields.mode);
spref.set("freq", cloud_fields.freq);
spref.set("band", cloud_fields.band);
spref.set("date_on", cloud_fields.date_on);
spref.set("time_on", cloud_fields.time_on);
spref.set("date_off", cloud_fields.date_off);
spref.set("time_off", cloud_fields.time_off);
spref.set("name", cloud_fields.name);
spref.set("qth", cloud_fields.qth);
spref.set("state", cloud_fields.state);
spref.set("province", cloud_fields.province);
spref.set("country", cloud_fields.country);
spref.set("rst_sent", cloud_fields.rst_sent);
spref.set("rst_rcvd", cloud_fields.rst_rcvd);
spref.set("tx_pwr", cloud_fields.tx_pwr);
spref.set("county", cloud_fields.country);
spref.set("dxcc", cloud_fields.dxcc);
spref.set("cqz", cloud_fields.cqz);
spref.set("iota", cloud_fields.iota);
spref.set("continent", cloud_fields.continent);
spref.set("ituz", cloud_fields.ituz);
spref.set("gridsquare", cloud_fields.gridsquare);
spref.set("qsl_rcvd", cloud_fields.qsl_rcvd);
spref.set("qsl_sent", cloud_fields.qsl_sent);
spref.set("eqsl_rcvd", cloud_fields.eqsl_rcvd);
spref.set("eqsl_sent", cloud_fields.eqsl_sent);
spref.set("lotw_rcvd", cloud_fields.lotw_rcvd);
spref.set("lotw_sent", cloud_fields.lotw_sent);
spref.set("qsl_via", cloud_fields.qsl_via);
spref.set("notes", cloud_fields.notes);
spref.set("srx", cloud_fields.srx);
spref.set("stx", cloud_fields.stx);
spref.set("xchg1", cloud_fields.xchg1);
spref.set("myxchg", cloud_fields.myxchg);
spref.set("arrl_class", cloud_fields.arrl_class);
spref.set("arrl_sect", cloud_fields.arrl_sect);
spref.set("op_call", cloud_fields.op_call);
spref.set("sta_call", cloud_fields.sta_call);
spref.set("mygrid", cloud_fields.mygrid);
spref.set("mycity", cloud_fields.mycity);
spref.set("check", cloud_fields.check);
spref.set("age", cloud_fields.age);
spref.set("ten_ten", cloud_fields.ten_ten);
spref.set("cwss_serno", cloud_fields.cwss_serno);
spref.set("cwss_prec", cloud_fields.cwss_prec);
spref.set("cwss_check", cloud_fields.cwss_check);
spref.set("cwss_section", cloud_fields.cwss_section);
}
void load_cloud_prefs()
{
std::string pref;
Fl_Preferences spref(HomeDir.c_str(), "w1hkj.com", "cloud_fields");
spref.get("cld_first_use", cld_first_use, cld_first_use);
if (cld_first_use)
return;
spref.get("call", cloud_fields.call, cloud_fields.call);
spref.get("mode", cloud_fields.mode, cloud_fields.mode);
spref.get("freq", cloud_fields.freq, cloud_fields.freq);
spref.get("band", cloud_fields.band, cloud_fields.band);
spref.get("date_on", cloud_fields.date_on, cloud_fields.date_on);
spref.get("time_on", cloud_fields.time_on, cloud_fields.time_on);
spref.get("date_off", cloud_fields.date_off, cloud_fields.date_off);
spref.get("time_off", cloud_fields.time_off, cloud_fields.time_off);
spref.get("name", cloud_fields.name, cloud_fields.name);
spref.get("qth", cloud_fields.qth, cloud_fields.qth);
spref.get("state", cloud_fields.state, cloud_fields.state);
spref.get("province", cloud_fields.province, cloud_fields.province);
spref.get("country", cloud_fields.country, cloud_fields.country);
spref.get("rst_sent", cloud_fields.rst_sent, cloud_fields.rst_sent);
spref.get("rst_rcvd", cloud_fields.rst_rcvd, cloud_fields.rst_rcvd);
spref.get("tx_pwr", cloud_fields.tx_pwr, cloud_fields.tx_pwr);
spref.get("county", cloud_fields.country, cloud_fields.country);
spref.get("dxcc", cloud_fields.dxcc, cloud_fields.dxcc);
spref.get("cqz", cloud_fields.cqz, cloud_fields.cqz);
spref.get("iota", cloud_fields.iota, cloud_fields.iota);
spref.get("continent", cloud_fields.continent, cloud_fields.continent);
spref.get("ituz", cloud_fields.ituz, cloud_fields.ituz);
spref.get("gridsquare", cloud_fields.gridsquare, cloud_fields.gridsquare);
spref.get("qsl_rcvd", cloud_fields.qsl_rcvd, cloud_fields.qsl_rcvd);
spref.get("qsl_sent", cloud_fields.qsl_sent, cloud_fields.qsl_sent);
spref.get("eqsl_rcvd", cloud_fields.eqsl_rcvd, cloud_fields.eqsl_rcvd);
spref.get("eqsl_sent", cloud_fields.eqsl_sent, cloud_fields.eqsl_sent);
spref.get("lotw_rcvd", cloud_fields.lotw_rcvd, cloud_fields.lotw_rcvd);
spref.get("lotw_sent", cloud_fields.lotw_sent, cloud_fields.lotw_sent);
spref.get("qsl_via", cloud_fields.qsl_via, cloud_fields.qsl_via);
spref.get("notes", cloud_fields.notes, cloud_fields.notes);
spref.get("srx", cloud_fields.srx, cloud_fields.srx);
spref.get("stx", cloud_fields.stx, cloud_fields.stx);
spref.get("xchg1", cloud_fields.xchg1, cloud_fields.xchg1);
spref.get("myxchg", cloud_fields.myxchg, cloud_fields.myxchg);
spref.get("arrl_class", cloud_fields.arrl_class, cloud_fields.arrl_class);
spref.get("arrl_sect", cloud_fields.arrl_sect, cloud_fields.arrl_sect);
spref.get("op_call", cloud_fields.op_call, cloud_fields.op_call);
spref.get("sta_call", cloud_fields.sta_call, cloud_fields.sta_call);
spref.get("mygrid", cloud_fields.mygrid, cloud_fields.mygrid);
spref.get("mycity", cloud_fields.mycity, cloud_fields.mycity);
spref.get("check", cloud_fields.check, cloud_fields.check);
spref.get("age", cloud_fields.age, cloud_fields.age);
spref.get("ten_ten", cloud_fields.ten_ten, cloud_fields.ten_ten);
spref.get("cwss_serno", cloud_fields.cwss_serno, cloud_fields.cwss_serno);
spref.get("cwss_prec", cloud_fields.cwss_prec, cloud_fields.cwss_prec);
spref.get("cwss_check", cloud_fields.cwss_check, cloud_fields.cwss_check);
spref.get("cwss_section", cloud_fields.cwss_section, cloud_fields.cwss_section);
}
//----------------------------------------------------------------------
// UDP log export
//----------------------------------------------------------------------
EXPORT_LOG_FIELDS udp_fields;
void post_udp_log(cQsoRec &rec)
{
std::string udp_data;
std::string tempstr;
udp_data.clear();
if (udp_fields.call)
putadif(CALL, rec.getField(CALL), udp_data);
if (udp_fields.mode) {
putadif(ADIF_MODE, adif2export(rec.getField(ADIF_MODE)).c_str(), udp_data);
std::string sm = adif2submode(rec.getField(ADIF_MODE));
if (!sm.empty())
putadif(SUBMODE, sm.c_str(), udp_data);
}
if (udp_fields.freq)
putadif(FREQ, comma2period(rec.getField(FREQ)).c_str(), udp_data);
if (udp_fields.band)
putadif(BAND, rec.getField(BAND), udp_data);
if (udp_fields.date_on)
putadif(QSO_DATE, sDate_on.c_str(), udp_data);
if (udp_fields.time_on) {
tempstr = rec.getField(TIME_ON);
if (tempstr.length() > 4) tempstr.erase(4);
putadif(TIME_ON, tempstr.c_str(), udp_data);
}
if (udp_fields.date_off)
putadif(QSO_DATE_OFF, rec.getField(QSO_DATE_OFF), udp_data);
if (udp_fields.time_off) {
tempstr = rec.getField(TIME_ON);
if (tempstr.length() > 4) tempstr.erase(4);
putadif(TIME_OFF, tempstr.c_str(), udp_data);
}
if (udp_fields.name)
putadif(NAME, rec.getField(NAME), udp_data);
if (udp_fields.qth)
putadif(QTH, rec.getField(QTH), udp_data);
if (udp_fields.state)
putadif(STATE, rec.getField(STATE), udp_data);
if (udp_fields.province)
putadif(VE_PROV, rec.getField(VE_PROV), udp_data);
if (udp_fields.country)
putadif(COUNTRY, rec.getField(COUNTRY), udp_data);
if (udp_fields.rst_sent)
putadif(RST_SENT, rec.getField(RST_SENT), udp_data);
if (udp_fields.rst_rcvd)
putadif(RST_RCVD, rec.getField(RST_RCVD), udp_data);
if (udp_fields.tx_pwr)
putadif(TX_PWR, rec.getField(TX_PWR), udp_data);
if (udp_fields.county)
putadif(CNTY, rec.getField(CNTY), udp_data);
if (udp_fields.dxcc)
putadif( DXCC, rec.getField(DXCC), udp_data);
if (udp_fields.cqz)
putadif(CQZ, rec.getField(CQZ), udp_data);
if (udp_fields.iota)
putadif(IOTA, rec.getField(IOTA), udp_data);
if (udp_fields.continent)
putadif(CONT, rec.getField(CONT), udp_data);
if (udp_fields.ituz)
putadif(ITUZ, rec.getField(ITUZ), udp_data);
if (udp_fields.gridsquare)
putadif(GRIDSQUARE, rec.getField(GRIDSQUARE), udp_data);
if (udp_fields.qsl_rcvd)
putadif(QSLRDATE, rec.getField(QSLRDATE), udp_data);
if (udp_fields.qsl_sent)
putadif(QSLSDATE, rec.getField(QSLSDATE), udp_data);
if (udp_fields.eqsl_rcvd)
putadif(EQSLRDATE, rec.getField(EQSLRDATE), udp_data);
if (udp_fields.eqsl_sent)
putadif(EQSLSDATE, rec.getField(EQSLSDATE), udp_data);
if (udp_fields.lotw_rcvd)
putadif(LOTWRDATE, rec.getField(LOTWRDATE), udp_data);
if (udp_fields.lotw_sent)
putadif(LOTWSDATE, rec.getField(LOTWSDATE), udp_data);
if (udp_fields.qsl_via)
putadif(QSL_VIA, rec.getField(QSL_VIA), udp_data);
if (udp_fields.notes) {
std::string temp = rec.getField(NOTES);
for (size_t n = 0; n < temp.length(); n++)
if (temp[n] == '\n') temp[n] = ';';
putadif(NOTES, temp.c_str(), udp_data);
}
if (udp_fields.srx)
putadif(SRX, rec.getField(SRX), udp_data);
if (udp_fields.stx)
putadif(STX, rec.getField(STX), udp_data);
if (udp_fields.xchg1)
putadif(XCHG1, rec.getField(XCHG1), udp_data);
if (udp_fields.myxchg)
putadif(MYXCHG, rec.getField(MYXCHG), udp_data);
if (udp_fields.arrl_class)
putadif(CLASS, rec.getField(CLASS), udp_data);
if (udp_fields.arrl_sect)
putadif(ARRL_SECT, rec.getField(ARRL_SECT), udp_data);
if (udp_fields.op_call)
putadif(OP_CALL, rec.getField(OP_CALL), udp_data);
if (udp_fields.sta_call)
putadif(STA_CALL, rec.getField(STA_CALL), udp_data);
if (udp_fields.mygrid)
putadif(MY_GRID, rec.getField(MY_GRID), udp_data);
if (udp_fields.mycity)
putadif(MY_CITY, rec.getField(MY_CITY), udp_data);
if (udp_fields.check)
putadif(CHECK, rec.getField(CHECK), udp_data);
if (udp_fields.age)
putadif(AGE, rec.getField(AGE), udp_data);
if (udp_fields.ten_ten)
putadif(TEN_TEN, rec.getField(TEN_TEN), udp_data);
if (udp_fields.cwss_check)
putadif(SS_CHK, rec.getField(SS_CHK), udp_data);
if (udp_fields.cwss_serno)
putadif(SS_SERNO, rec.getField(SS_SERNO), udp_data);
if (udp_fields.cwss_prec)
putadif(SS_PREC, rec.getField(SS_PREC), udp_data);
if (udp_fields.cwss_section)
putadif(SS_SEC, rec.getField(SS_SEC), udp_data);
udp_data.append("<EOR>");
Socket * udp_socket;
try {
udp_socket = new Socket(Address(progdefaults.udp_address.c_str(), progdefaults.udp_port.c_str(), "udp"));
udp_socket->connect();
if (udp_socket->send( udp_data.c_str(), udp_data.length() ) != udp_data.length())
throw SocketException("udp send failed");
LOG_INFO("UDP record: %s", udp_data.c_str());
} catch (const SocketException& e) {
tempstr.assign("Could not send udp data to ").append(progdefaults.udp_address);
tempstr.append(", port ").append(progdefaults.udp_port);
tempstr.append(": ").append(e.what());
LOG_ERROR("%s", tempstr.c_str());
}
}
void udp_test()
{
Socket *udp_socket;
std::string payload = "Test UDP broadcast on ";
payload.append(progdefaults.udp_address).append(" : " ).append(progdefaults.udp_port);
char udp_data[50 + payload.length()];
snprintf(udp_data, sizeof(udp_data), "<FLDIGI_TEST:%d>%s<STATION_CALLSIGN:5>W1HKJ<EOR>",
(int)payload.length(), payload.c_str() );
try {
udp_socket = new Socket(Address(progdefaults.udp_address.c_str(), progdefaults.udp_port.c_str(), "udp"));
udp_socket->connect();
if (udp_socket->send( udp_data, strlen(udp_data) ) != strlen(udp_data))
throw SocketException("udp send failed");
LOG_INFO("UDP TEST record: %s", udp_data);
fl_alert2("Sent UDP test record:\n%s", udp_data);
} catch (const SocketException& e) {
std::string tempstr;
tempstr.assign("Could not send udp data to ").append(progdefaults.udp_address);
tempstr.append(", port ").append(progdefaults.udp_port);
tempstr.append(": ").append(e.what());
LOG_ERROR("%s", tempstr.c_str());
}
}
static int udp_first_use = 1;
void save_udp_prefs()
{
udp_fields.name = btn_udp_Name->value();
udp_fields.freq = btn_udp_Freq->value();
udp_fields.band = btn_udp_Band->value();
udp_fields.mode = btn_udp_Mode->value();
udp_fields.date_on = btn_udp_QSOdateOn->value();
udp_fields.date_off = btn_udp_QSOdateOff->value();
udp_fields.time_on = btn_udp_TimeON->value();
udp_fields.time_off = btn_udp_TimeOFF->value();
udp_fields.tx_pwr = btn_udp_TX_pwr->value();
udp_fields.rst_sent = btn_udp_RSTsent->value();
udp_fields.rst_rcvd = btn_udp_RSTrcvd->value();
udp_fields.qth = btn_udp_Qth->value();
udp_fields.gridsquare = btn_udp_LOC->value();
udp_fields.state = btn_udp_State->value();
udp_fields.age = btn_udp_Age->value();
udp_fields.sta_call = btn_udp_StaCall->value();
udp_fields.mygrid = btn_udp_StaGrid->value();
udp_fields.mycity = btn_udp_StaCity->value();
udp_fields.op_call = btn_udp_Operator->value();
udp_fields.province = btn_udp_Province->value();
udp_fields.country = btn_udp_Country->value();
udp_fields.notes = btn_udp_Notes->value();
udp_fields.qsl_rcvd = btn_udp_QSLrcvd->value();
udp_fields.qsl_sent = btn_udp_QSLsent->value();
udp_fields.eqsl_rcvd = btn_udp_eQSLrcvd->value();
udp_fields.eqsl_sent = btn_udp_eQSLsent->value();
udp_fields.lotw_rcvd = btn_udp_LOTWrcvd->value();
udp_fields.lotw_sent = btn_udp_LOTWsent->value();
udp_fields.qsl_via = btn_udp_QSL_VIA->value();
udp_fields.srx = btn_udp_SerialIN->value();
udp_fields.stx = btn_udp_SerialOUT->value();
udp_fields.check = btn_udp_Check->value();
udp_fields.xchg1 = btn_udp_XchgIn->value();
udp_fields.myxchg = btn_udp_MyXchg->value();
udp_fields.county = btn_udp_CNTY->value();
udp_fields.continent = btn_udp_CONT->value();
udp_fields.cqz = btn_udp_CQZ->value();
udp_fields.dxcc = btn_udp_DXCC->value();
udp_fields.iota = btn_udp_IOTA->value();
udp_fields.ituz = btn_udp_ITUZ->value();
udp_fields.arrl_class = btn_udp_Class->value();
udp_fields.arrl_sect = btn_udp_Section->value();
udp_fields.cwss_serno = btn_udp_cwss_serno->value();
udp_fields.cwss_prec = btn_udp_cwss_prec->value();
udp_fields.cwss_check = btn_udp_cwss_check->value();
udp_fields.cwss_section = btn_udp_cwss_section->value();
udp_fields.ten_ten = btn_udp_1010->value();
std::string pref;
Fl_Preferences spref(HomeDir.c_str(), "w1hkj.com", "udp_fields");
spref.set("udp_first_use", 0);
spref.set("call", udp_fields.call);
spref.set("mode", udp_fields.mode);
spref.set("freq", udp_fields.freq);
spref.set("band", udp_fields.band);
spref.set("date_on", udp_fields.date_on);
spref.set("time_on", udp_fields.time_on);
spref.set("date_off", udp_fields.date_off);
spref.set("time_off", udp_fields.time_off);
spref.set("name", udp_fields.name);
spref.set("qth", udp_fields.qth);
spref.set("state", udp_fields.state);
spref.set("province", udp_fields.province);
spref.set("country", udp_fields.country);
spref.set("rst_sent", udp_fields.rst_sent);
spref.set("rst_rcvd", udp_fields.rst_rcvd);
spref.set("tx_pwr", udp_fields.tx_pwr);
spref.set("county", udp_fields.country);
spref.set("dxcc", udp_fields.dxcc);
spref.set("cqz", udp_fields.cqz);
spref.set("iota", udp_fields.iota);
spref.set("continent", udp_fields.continent);
spref.set("ituz", udp_fields.ituz);
spref.set("gridsquare", udp_fields.gridsquare);
spref.set("qsl_rcvd", udp_fields.qsl_rcvd);
spref.set("qsl_sent", udp_fields.qsl_sent);
spref.set("eqsl_rcvd", udp_fields.eqsl_rcvd);
spref.set("eqsl_sent", udp_fields.eqsl_sent);
spref.set("lotw_rcvd", udp_fields.lotw_rcvd);
spref.set("lotw_sent", udp_fields.lotw_sent);
spref.set("qsl_via", udp_fields.qsl_via);
spref.set("notes", udp_fields.notes);
spref.set("srx", udp_fields.srx);
spref.set("stx", udp_fields.stx);
spref.set("xchg1", udp_fields.xchg1);
spref.set("myxchg", udp_fields.myxchg);
spref.set("arrl_class", udp_fields.arrl_class);
spref.set("arrl_sect", udp_fields.arrl_sect);
spref.set("op_call", udp_fields.op_call);
spref.set("sta_call", udp_fields.sta_call);
spref.set("mygrid", udp_fields.mygrid);
spref.set("mycity", udp_fields.mycity);
spref.set("check", udp_fields.check);
spref.set("age", udp_fields.age);
spref.set("ten_ten", udp_fields.ten_ten);
spref.set("cwss_serno", udp_fields.cwss_serno);
spref.set("cwss_prec", udp_fields.cwss_prec);
spref.set("cwss_check", udp_fields.cwss_check);
spref.set("cwss_section", udp_fields.cwss_section);
}
void load_udp_prefs()
{
std::string pref;
Fl_Preferences spref(HomeDir.c_str(), "w1hkj.com", "udp_fields");
spref.get("udp_first_use", udp_first_use, udp_first_use);
if (udp_first_use)
return;
spref.get("call", udp_fields.call, udp_fields.call);
spref.get("mode", udp_fields.mode, udp_fields.mode);
spref.get("freq", udp_fields.freq, udp_fields.freq);
spref.get("band", udp_fields.band, udp_fields.band);
spref.get("date_on", udp_fields.date_on, udp_fields.date_on);
spref.get("time_on", udp_fields.time_on, udp_fields.time_on);
spref.get("date_off", udp_fields.date_off, udp_fields.date_off);
spref.get("time_off", udp_fields.time_off, udp_fields.time_off);
spref.get("name", udp_fields.name, udp_fields.name);
spref.get("qth", udp_fields.qth, udp_fields.qth);
spref.get("state", udp_fields.state, udp_fields.state);
spref.get("province", udp_fields.province, udp_fields.province);
spref.get("country", udp_fields.country, udp_fields.country);
spref.get("rst_sent", udp_fields.rst_sent, udp_fields.rst_sent);
spref.get("rst_rcvd", udp_fields.rst_rcvd, udp_fields.rst_rcvd);
spref.get("tx_pwr", udp_fields.tx_pwr, udp_fields.tx_pwr);
spref.get("county", udp_fields.country, udp_fields.country);
spref.get("dxcc", udp_fields.dxcc, udp_fields.dxcc);
spref.get("cqz", udp_fields.cqz, udp_fields.cqz);
spref.get("iota", udp_fields.iota, udp_fields.iota);
spref.get("continent", udp_fields.continent, udp_fields.continent);
spref.get("ituz", udp_fields.ituz, udp_fields.ituz);
spref.get("gridsquare", udp_fields.gridsquare, udp_fields.gridsquare);
spref.get("qsl_rcvd", udp_fields.qsl_rcvd, udp_fields.qsl_rcvd);
spref.get("qsl_sent", udp_fields.qsl_sent, udp_fields.qsl_sent);
spref.get("eqsl_rcvd", udp_fields.eqsl_rcvd, udp_fields.eqsl_rcvd);
spref.get("eqsl_sent", udp_fields.eqsl_sent, udp_fields.eqsl_sent);
spref.get("lotw_rcvd", udp_fields.lotw_rcvd, udp_fields.lotw_rcvd);
spref.get("lotw_sent", udp_fields.lotw_sent, udp_fields.lotw_sent);
spref.get("qsl_via", udp_fields.qsl_via, udp_fields.qsl_via);
spref.get("notes", udp_fields.notes, udp_fields.notes);
spref.get("srx", udp_fields.srx, udp_fields.srx);
spref.get("stx", udp_fields.stx, udp_fields.stx);
spref.get("xchg1", udp_fields.xchg1, udp_fields.xchg1);
spref.get("myxchg", udp_fields.myxchg, udp_fields.myxchg);
spref.get("arrl_class", udp_fields.arrl_class, udp_fields.arrl_class);
spref.get("arrl_sect", udp_fields.arrl_sect, udp_fields.arrl_sect);
spref.get("op_call", udp_fields.op_call, udp_fields.op_call);
spref.get("sta_call", udp_fields.sta_call, udp_fields.sta_call);
spref.get("mygrid", udp_fields.mygrid, udp_fields.mygrid);
spref.get("mycity", udp_fields.mycity, udp_fields.mycity);
spref.get("check", udp_fields.check, udp_fields.check);
spref.get("age", udp_fields.age, udp_fields.age);
spref.get("ten_ten", udp_fields.ten_ten, udp_fields.ten_ten);
spref.get("cwss_serno", udp_fields.cwss_serno, udp_fields.cwss_serno);
spref.get("cwss_prec", udp_fields.cwss_prec, udp_fields.cwss_prec);
spref.get("cwss_check", udp_fields.cwss_check, udp_fields.cwss_check);
spref.get("cwss_section", udp_fields.cwss_section, udp_fields.cwss_section);
}
void save_export_prefs()
{
}
void load_export_prefs()
{
}

View file

@ -70,6 +70,7 @@
#include "lgbook.h"
#include "logsupport.h"
#include "logger.h"
#include "qso_db.h"
#include "dx_dialog.h"
#include "contest.h"
@ -1121,6 +1122,8 @@ void status::loadLastState()
//----------------------------------------------------------------------
modeband.load_mode_state();
load_udp_prefs();
load_cloud_prefs();
set_debug_mask(debug_mask);
}