mirror of
https://git.code.sf.net/p/fldigi/fldigi
synced 2026-08-13 17:47:54 -04:00
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:
parent
6d87dd4ddf
commit
af361f7d6c
12 changed files with 3453 additions and 141 deletions
|
|
@ -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"));
|
||||
|
|
|
|||
|
|
@ -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);}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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", \
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue