From 28abb21cfd99531a65ef88280c09771d612b616f Mon Sep 17 00:00:00 2001 From: Stelios Bounanos Date: Wed, 10 Sep 2008 04:43:38 +0100 Subject: [PATCH] Upstream version 3.03AM --- ChangeLog | 6 ++ configure.ac | 2 +- src/dialogs/confdialog.cxx | 169 +++++++++++++++++++++++------------- src/dialogs/confdialog.fl | 141 +++++++++++++++++++----------- src/dialogs/fl_digi.cxx | 12 ++- src/globals/globals.cxx | 10 +-- src/include/confdialog.h | 4 +- src/include/configuration.h | 1 + src/include/fl_digi.h | 1 + src/include/waterfall.h | 3 + src/main.cxx | 8 +- src/misc/arq_io.cxx | 2 + src/misc/configuration.cxx | 33 +++++-- src/misc/xmlrpc.cxx | 90 +++++++++++++++---- src/rigcontrol/hamlib.cxx | 51 +---------- src/rigcontrol/rigio.cxx | 2 +- 16 files changed, 341 insertions(+), 194 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6177e43a..307224b5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -35,6 +35,12 @@ Change Log: replays audio history buffer. 20) OS X resize handle / button overlay fixed 21) Modified sound port Event Log message. + 22) Added Callsign to Title Bar "NO CALLSIGN SET" if the MyCallsign is + void. + 23) Added "log.clear" to xmlrpc command set - clears the data in the + logbook fields. + 24) If compiled into the executable the xmlrpc server is always started. + ARQ server is also started. Both can be serviced concurrently. 3.02 1) Added hamlib interface for rig control diff --git a/configure.ac b/configure.ac index c482af78..11403fe0 100644 --- a/configure.ac +++ b/configure.ac @@ -9,7 +9,7 @@ dnl major and minor must be integers; patch may dnl contain other characters or be empty m4_define(FLDIGI_MAJOR, [3]) m4_define(FLDIGI_MINOR, [0]) -m4_define(FLDIGI_PATCH, [3AL]) +m4_define(FLDIGI_PATCH, [3AM]) AC_INIT([fldigi], FLDIGI_MAJOR.FLDIGI_MINOR[FLDIGI_PATCH], [w1hkj AT w1hkj DOT com]) diff --git a/src/dialogs/confdialog.cxx b/src/dialogs/confdialog.cxx index 7195f2c8..83742f00 100644 --- a/src/dialogs/confdialog.cxx +++ b/src/dialogs/confdialog.cxx @@ -30,6 +30,8 @@ progdefaults.secText = o->value(); progdefaults.secText.append(" "); txtSecondary->value(progdefaults.secText.c_str()); } +progdefaults.myCall = o->value(); +update_main_title(); progdefaults.changed = true; } @@ -405,45 +407,13 @@ o->value(1); progdefaults.changed = true; } -Fl_Check_Button *chkUSERIGCAT=(Fl_Check_Button *)0; - -static void cb_chkUSERIGCAT(Fl_Check_Button* o, void*) { - if (o->value() == 1) { - chkUSEHAMLIB->value(0); - chkUSEMEMMAP->value(0); - btnPTT[1]->value(0); - btnPTT[1]->deactivate(); - btnPTT[2]->value(0); - btnPTT[2]->deactivate(); - btnPTT[3]->activate(); - cboHamlibRig->deactivate(); - inpRIGdev->deactivate(); - mnuBaudRate->deactivate(); - } else { - if (btnPTT[3]->value() == 1) - btnPTT[0]->value(1); - btnPTT[3]->value(0); - btnPTT[3]->deactivate(); - } -for (int i = 0; i < 4; btnPTT[i++]->redraw()); -progdefaults.changed = true; -} - -static void cb_btnPTT2(Fl_Round_Button* o, void*) { - btnPTT[0]->value(0); -btnPTT[1]->value(0); -btnPTT[2]->value(0); -btnPTT[4]->value(0); -o->value(1); -progdefaults.changed = true; -} - Fl_Check_Button *chkUSEHAMLIB=(Fl_Check_Button *)0; static void cb_chkUSEHAMLIB(Fl_Check_Button* o, void*) { if (o->value() == 1) { chkUSEMEMMAP->value(0); chkUSERIGCAT->value(0); + chkUSEXMLRPC->value(0); btnPTT[3]->value(0); btnPTT[3]->deactivate(); btnPTT[2]->value(0); @@ -477,7 +447,7 @@ static void cb_mnuBaudRate(Fl_Choice*, void*) { progdefaults.changed = true; } -static void cb_btnPTT3(Fl_Round_Button* o, void*) { +static void cb_btnPTT2(Fl_Round_Button* o, void*) { btnPTT[0]->value(0); btnPTT[2]->value(0); btnPTT[3]->value(0); @@ -492,12 +462,47 @@ static void cb_inpRIGdev(Fl_Input_Choice*, void*) { progdefaults.changed = true; } +Fl_Check_Button *chkUSERIGCAT=(Fl_Check_Button *)0; + +static void cb_chkUSERIGCAT(Fl_Check_Button* o, void*) { + if (o->value() == 1) { + chkUSEHAMLIB->value(0); + chkUSEMEMMAP->value(0); + chkUSEXMLRPC->value(0); + btnPTT[1]->value(0); + btnPTT[1]->deactivate(); + btnPTT[2]->value(0); + btnPTT[2]->deactivate(); + btnPTT[3]->activate(); + cboHamlibRig->deactivate(); + inpRIGdev->deactivate(); + mnuBaudRate->deactivate(); + } else { + if (btnPTT[3]->value() == 1) + btnPTT[0]->value(1); + btnPTT[3]->value(0); + btnPTT[3]->deactivate(); + } +for (int i = 0; i < 4; btnPTT[i++]->redraw()); +progdefaults.changed = true; +} + +static void cb_btnPTT3(Fl_Round_Button* o, void*) { + btnPTT[0]->value(0); +btnPTT[1]->value(0); +btnPTT[2]->value(0); +btnPTT[4]->value(0); +o->value(1); +progdefaults.changed = true; +} + Fl_Check_Button *chkUSEMEMMAP=(Fl_Check_Button *)0; static void cb_chkUSEMEMMAP(Fl_Check_Button* o, void*) { if(o->value() == 1){ chkUSEHAMLIB->value(0); chkUSERIGCAT->value(0); + chkUSEXMLRPC->value(0); btnPTT[3]->value(0); btnPTT[3]->deactivate(); btnPTT[1]->value(0); @@ -525,6 +530,26 @@ o->value(1); progdefaults.changed = true; } +Fl_Check_Button *chkUSEXMLRPC=(Fl_Check_Button *)0; + +static void cb_chkUSEXMLRPC(Fl_Check_Button* o, void*) { + if(o->value() == 1){ + chkUSEHAMLIB->value(0); + chkUSERIGCAT->value(0); + chkUSEMEMMAP->value(0); + btnPTT[3]->value(0); + btnPTT[3]->deactivate(); + btnPTT[1]->value(0); + btnPTT[1]->deactivate(); + btnPTT[2]->activate(); + cboHamlibRig->deactivate(); + inpRIGdev->deactivate(); + mnuBaudRate->deactivate(); + } +for (int i = 0; i < 4; btnPTT[i++]->redraw()); +progdefaults.changed = true; +} + Fl_Button *btnInit_Interface=(Fl_Button *)0; static void cb_btnInit_Interface(Fl_Button*, void*) { @@ -1416,6 +1441,7 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600 tabOperator->selection_color((Fl_Color)51); tabOperator->callback((Fl_Callback*)cb_tabOperator); tabOperator->when(FL_WHEN_CHANGED); + tabOperator->hide(); { inpMyCallsign = new Fl_Input(78, 36, 85, 24, "Callsign:"); inpMyCallsign->callback((Fl_Callback*)cb_inpMyCallsign); } // Fl_Input* inpMyCallsign @@ -1626,7 +1652,8 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600 o->hide(); { Fl_Group* o = new Fl_Group(5, 56, 390, 158); o->box(FL_ENGRAVED_FRAME); - { Fl_Check_Button* o = btnWaterfallHistoryDefault = new Fl_Check_Button(15, 66, 170, 20, "Click Replays History"); + { Fl_Check_Button* o = btnWaterfallHistoryDefault = new Fl_Check_Button(15, 66, 266, 20, "Lft/Rt Click Replays History always"); + btnWaterfallHistoryDefault->tooltip("Disabled - Ctrl-Lft click plays history"); btnWaterfallHistoryDefault->down_box(FL_DOWN_BOX); btnWaterfallHistoryDefault->callback((Fl_Callback*)cb_btnWaterfallHistoryDefault); o->value(progdefaults.WaterfallHistoryDefault); @@ -1713,7 +1740,6 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600 tabVideo->end(); } // Fl_Group* tabVideo { tabRig = new Fl_Group(0, 25, 400, 195, "Rig"); - tabRig->hide(); { Fl_Group* o = new Fl_Group(10, 36, 185, 150, "Ptt"); o->box(FL_ENGRAVED_FRAME); o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE); @@ -1756,24 +1782,8 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600 } // Fl_Round_Button* btnPTT[4] o->end(); } // Fl_Group* o - { Fl_Tabs* o = new Fl_Tabs(200, 34, 200, 152); - { Fl_Group* o = new Fl_Group(200, 60, 200, 120, "RigCAT"); - { chkUSERIGCAT = new Fl_Check_Button(345, 75, 20, 20, "use rigCAT"); - chkUSERIGCAT->down_box(FL_DOWN_BOX); - chkUSERIGCAT->callback((Fl_Callback*)cb_chkUSERIGCAT); - chkUSERIGCAT->align(FL_ALIGN_LEFT); - } // Fl_Check_Button* chkUSERIGCAT - { btnPTT[3] = new Fl_Round_Button(345, 105, 20, 19, "use RigCAT PTT"); - btnPTT[3]->down_box(FL_DIAMOND_DOWN_BOX); - btnPTT[3]->selection_color((Fl_Color)1); - btnPTT[3]->callback((Fl_Callback*)cb_btnPTT2); - btnPTT[3]->align(FL_ALIGN_LEFT); - btnPTT[3]->deactivate(); - } // Fl_Round_Button* btnPTT[3] - o->end(); - } // Fl_Group* o - { Fl_Group* o = new Fl_Group(200, 60, 200, 120, "Hamlib"); - o->hide(); + { Fl_Tabs* o = new Fl_Tabs(200, 34, 200, 150); + { Fl_Group* o = new Fl_Group(200, 60, 200, 120, "Ham"); { chkUSEHAMLIB = new Fl_Check_Button(350, 64, 20, 20, "use Hamlib"); chkUSEHAMLIB->down_box(FL_DOWN_BOX); chkUSEHAMLIB->callback((Fl_Callback*)cb_chkUSEHAMLIB); @@ -1802,7 +1812,7 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600 { btnPTT[1] = new Fl_Round_Button(350, 83, 20, 20, "use Hamlib PTT"); btnPTT[1]->down_box(FL_DIAMOND_DOWN_BOX); btnPTT[1]->selection_color((Fl_Color)1); - btnPTT[1]->callback((Fl_Callback*)cb_btnPTT3); + btnPTT[1]->callback((Fl_Callback*)cb_btnPTT2); btnPTT[1]->align(FL_ALIGN_LEFT); btnPTT[1]->deactivate(); } // Fl_Round_Button* btnPTT[1] @@ -1812,20 +1822,63 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600 } // Fl_Input_Choice* inpRIGdev o->end(); } // Fl_Group* o - { Fl_Group* o = new Fl_Group(200, 60, 200, 120, "Memmap"); + { Fl_Group* o = new Fl_Group(200, 60, 200, 120, "RigCAT"); o->hide(); - { chkUSEMEMMAP = new Fl_Check_Button(345, 75, 20, 20, "use Memmap"); + { chkUSERIGCAT = new Fl_Check_Button(350, 121, 20, 20, "use rigCAT"); + chkUSERIGCAT->down_box(FL_DOWN_BOX); + chkUSERIGCAT->callback((Fl_Callback*)cb_chkUSERIGCAT); + chkUSERIGCAT->align(FL_ALIGN_LEFT); + } // Fl_Check_Button* chkUSERIGCAT + { btnPTT[3] = new Fl_Round_Button(350, 147, 20, 19, "use RigCAT PTT"); + btnPTT[3]->down_box(FL_DIAMOND_DOWN_BOX); + btnPTT[3]->selection_color((Fl_Color)1); + btnPTT[3]->callback((Fl_Callback*)cb_btnPTT3); + btnPTT[3]->align(FL_ALIGN_LEFT); + btnPTT[3]->deactivate(); + } // Fl_Round_Button* btnPTT[3] + { Fl_Output* o = new Fl_Output(205, 65, 190, 50); + o->type(12); + o->box(FL_BORDER_BOX); + o->color(FL_LIGHT1); + o->value("Control specified in rig.xml\nfile"); + } // Fl_Output* o + o->end(); + } // Fl_Group* o + { Fl_Group* o = new Fl_Group(200, 60, 200, 120, "Mem"); + o->hide(); + { chkUSEMEMMAP = new Fl_Check_Button(350, 131, 20, 20, "use Memmap"); chkUSEMEMMAP->down_box(FL_DOWN_BOX); chkUSEMEMMAP->callback((Fl_Callback*)cb_chkUSEMEMMAP); chkUSEMEMMAP->align(FL_ALIGN_LEFT); } // Fl_Check_Button* chkUSEMEMMAP - { btnPTT[2] = new Fl_Round_Button(345, 105, 20, 20, "use Memmap PTT"); + { btnPTT[2] = new Fl_Round_Button(350, 151, 20, 20, "use Memmap PTT"); btnPTT[2]->down_box(FL_DIAMOND_DOWN_BOX); btnPTT[2]->selection_color((Fl_Color)1); btnPTT[2]->callback((Fl_Callback*)cb_btnPTT4); btnPTT[2]->align(FL_ALIGN_LEFT); btnPTT[2]->deactivate(); } // Fl_Round_Button* btnPTT[2] + { Fl_Output* o = new Fl_Output(205, 70, 190, 58); + o->type(12); + o->box(FL_BORDER_BOX); + o->color(FL_LIGHT1); + o->value("Control via Memory Mapped\nshared variables\nie: Kachina program"); + } // Fl_Output* o + o->end(); + } // Fl_Group* o + { Fl_Group* o = new Fl_Group(200, 60, 200, 120, "Ext"); + o->hide(); + { chkUSEXMLRPC = new Fl_Check_Button(366, 142, 20, 20, "use xmlrpc program"); + chkUSEXMLRPC->down_box(FL_DOWN_BOX); + chkUSEXMLRPC->callback((Fl_Callback*)cb_chkUSEXMLRPC); + chkUSEXMLRPC->align(FL_ALIGN_LEFT); + } // Fl_Check_Button* chkUSEXMLRPC + { Fl_Output* o = new Fl_Output(205, 67, 190, 58); + o->type(12); + o->box(FL_BORDER_BOX); + o->color(FL_LIGHT1); + o->value("Rig control via external\nprogram using xmlrpc\nremote calls."); + } // Fl_Output* o o->end(); } // Fl_Group* o o->end(); diff --git a/src/dialogs/confdialog.fl b/src/dialogs/confdialog.fl index 0eebde32..aaf62189 100644 --- a/src/dialogs/confdialog.fl +++ b/src/dialogs/confdialog.fl @@ -46,8 +46,8 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600 } { Fl_Group tabOperator { label Oper - callback {progdefaults.changed = true;} open selected - xywh {0 25 400 195} color 51 selection_color 51 when 1 + callback {progdefaults.changed = true;} open + xywh {0 25 400 195} color 51 selection_color 51 when 1 hide } { Fl_Input inpMyCallsign { label {Callsign:} @@ -61,6 +61,8 @@ progdefaults.secText = o->value(); progdefaults.secText.append(" "); txtSecondary->value(progdefaults.secText.c_str()); } +progdefaults.myCall = o->value(); +update_main_title(); progdefaults.changed = true;} xywh {78 36 85 24} } @@ -359,10 +361,10 @@ progdefaults.changed = true; xywh {5 56 390 158} box ENGRAVED_FRAME } { Fl_Check_Button btnWaterfallHistoryDefault { - label {Click Replays History} + label {Lft/Rt Click Replays History always} callback {progdefaults.WaterfallHistoryDefault = o->value(); progdefaults.changed = true;} - xywh {15 66 170 20} down_box DOWN_BOX + tooltip {Disabled - Ctrl-Lft click plays history} xywh {15 66 266 20} down_box DOWN_BOX code0 {o->value(progdefaults.WaterfallHistoryDefault);} } } @@ -445,8 +447,8 @@ progdefaults.changed = true;} } } Fl_Group tabRig { - label Rig - xywh {0 25 400 195} hide + label Rig open + xywh {0 25 400 195} } { Fl_Group {} { label Ptt open @@ -507,55 +509,18 @@ progdefaults.changed = true;} } } Fl_Tabs {} {open - xywh {200 34 200 152} + xywh {200 34 200 150} } { Fl_Group {} { - label RigCAT open + label Ham open selected xywh {200 60 200 120} - } { - Fl_Check_Button chkUSERIGCAT { - label {use rigCAT} - callback {if (o->value() == 1) { - chkUSEHAMLIB->value(0); - chkUSEMEMMAP->value(0); - btnPTT[1]->value(0); - btnPTT[1]->deactivate(); - btnPTT[2]->value(0); - btnPTT[2]->deactivate(); - btnPTT[3]->activate(); - cboHamlibRig->deactivate(); - inpRIGdev->deactivate(); - mnuBaudRate->deactivate(); - } else { - if (btnPTT[3]->value() == 1) - btnPTT[0]->value(1); - btnPTT[3]->value(0); - btnPTT[3]->deactivate(); - } -for (int i = 0; i < 4; btnPTT[i++]->redraw()); -progdefaults.changed = true;} - xywh {345 75 20 20} down_box DOWN_BOX align 4 - } - Fl_Round_Button {btnPTT[3]} { - label {use RigCAT PTT} - callback {btnPTT[0]->value(0); -btnPTT[1]->value(0); -btnPTT[2]->value(0); -btnPTT[4]->value(0); -o->value(1); -progdefaults.changed = true;} - xywh {345 105 20 19} down_box DIAMOND_DOWN_BOX selection_color 1 align 4 deactivate - } - } - Fl_Group {} { - label Hamlib open - xywh {200 60 200 120} hide } { Fl_Check_Button chkUSEHAMLIB { label {use Hamlib} callback {if (o->value() == 1) { chkUSEMEMMAP->value(0); chkUSERIGCAT->value(0); + chkUSEXMLRPC->value(0); btnPTT[3]->value(0); btnPTT[3]->deactivate(); btnPTT[2]->value(0); @@ -602,12 +567,55 @@ progdefaults.changed = true;} } Fl_Input_Choice inpRIGdev { label {Port:} - callback {progdefaults.changed = true;} open selected + callback {progdefaults.changed = true;} open xywh {246 130 144 22} deactivate } {} } Fl_Group {} { - label Memmap open + label RigCAT open + xywh {200 60 200 120} hide + } { + Fl_Check_Button chkUSERIGCAT { + label {use rigCAT} + callback {if (o->value() == 1) { + chkUSEHAMLIB->value(0); + chkUSEMEMMAP->value(0); + chkUSEXMLRPC->value(0); + btnPTT[1]->value(0); + btnPTT[1]->deactivate(); + btnPTT[2]->value(0); + btnPTT[2]->deactivate(); + btnPTT[3]->activate(); + cboHamlibRig->deactivate(); + inpRIGdev->deactivate(); + mnuBaudRate->deactivate(); + } else { + if (btnPTT[3]->value() == 1) + btnPTT[0]->value(1); + btnPTT[3]->value(0); + btnPTT[3]->deactivate(); + } +for (int i = 0; i < 4; btnPTT[i++]->redraw()); +progdefaults.changed = true;} + xywh {350 121 20 20} down_box DOWN_BOX align 4 + } + Fl_Round_Button {btnPTT[3]} { + label {use RigCAT PTT} + callback {btnPTT[0]->value(0); +btnPTT[1]->value(0); +btnPTT[2]->value(0); +btnPTT[4]->value(0); +o->value(1); +progdefaults.changed = true;} + xywh {350 147 20 19} down_box DIAMOND_DOWN_BOX selection_color 1 align 4 deactivate + } + Fl_Output {} { + xywh {205 65 190 50} type Multiline box BORDER_BOX color 50 + code0 {o->value("Control specified in rig.xml\\nfile");} + } + } + Fl_Group {} { + label Mem open xywh {200 60 200 120} hide } { Fl_Check_Button chkUSEMEMMAP { @@ -615,6 +623,7 @@ progdefaults.changed = true;} callback {if(o->value() == 1){ chkUSEHAMLIB->value(0); chkUSERIGCAT->value(0); + chkUSEXMLRPC->value(0); btnPTT[3]->value(0); btnPTT[3]->deactivate(); btnPTT[1]->value(0); @@ -631,7 +640,7 @@ progdefaults.changed = true;} } for (int i = 0; i < 4; btnPTT[i++]->redraw()); progdefaults.changed = true;} - xywh {345 75 20 20} down_box DOWN_BOX align 4 + xywh {350 131 20 20} down_box DOWN_BOX align 4 } Fl_Round_Button {btnPTT[2]} { label {use Memmap PTT} @@ -641,7 +650,39 @@ btnPTT[3]->value(0); btnPTT[4]->value(0); o->value(1); progdefaults.changed = true;} - xywh {345 105 20 20} down_box DIAMOND_DOWN_BOX selection_color 1 align 4 deactivate + xywh {350 151 20 20} down_box DIAMOND_DOWN_BOX selection_color 1 align 4 deactivate + } + Fl_Output {} { + xywh {205 70 190 58} type Multiline box BORDER_BOX color 50 + code0 {o->value("Control via Memory Mapped\\nshared variables\\nie: Kachina program");} + } + } + Fl_Group {} { + label Ext open + xywh {200 60 200 120} hide + } { + Fl_Check_Button chkUSEXMLRPC { + label {use xmlrpc program} + callback {if(o->value() == 1){ + chkUSEHAMLIB->value(0); + chkUSERIGCAT->value(0); + chkUSEMEMMAP->value(0); + btnPTT[3]->value(0); + btnPTT[3]->deactivate(); + btnPTT[1]->value(0); + btnPTT[1]->deactivate(); + btnPTT[2]->activate(); + cboHamlibRig->deactivate(); + inpRIGdev->deactivate(); + mnuBaudRate->deactivate(); + } +for (int i = 0; i < 4; btnPTT[i++]->redraw()); +progdefaults.changed = true;} + xywh {366 142 20 20} down_box DOWN_BOX align 4 + } + Fl_Output {} { + xywh {205 67 190 58} type Multiline box BORDER_BOX color 50 + code0 {o->value("Rig control via external\\nprogram using xmlrpc\\nremote calls.");} } } } diff --git a/src/dialogs/fl_digi.cxx b/src/dialogs/fl_digi.cxx index f20b41a5..c14371fa 100644 --- a/src/dialogs/fl_digi.cxx +++ b/src/dialogs/fl_digi.cxx @@ -1608,6 +1608,15 @@ int below(Fl_Widget* w) return (a & FL_ALIGN_BOTTOM) ? w->y() + w->h() + FL_NORMAL_SIZE : w->y() + w->h(); } +char main_window_title[256]; +void update_main_title() { + snprintf(main_window_title, sizeof(main_window_title), + "%s %s -- %s", + PACKAGE_NAME, PACKAGE_VERSION, + progdefaults.myCall.empty() ? "NO CALLSIGN SET" : progdefaults.myCall.c_str()); + if (fl_digi_main != NULL) + fl_digi_main->label(main_window_title); +} void create_fl_digi_main() { @@ -1616,7 +1625,8 @@ void create_fl_digi_main() { if (twoscopes) WNOM -= 2*DEFAULT_SW; - fl_digi_main = new Fl_Double_Window(WNOM, HNOM, PACKAGE_NAME" "PACKAGE_VERSION);//"fldigi"); + update_main_title(); + fl_digi_main = new Fl_Double_Window(WNOM, HNOM, main_window_title); mnu = new Fl_Menu_Bar(0, 0, WNOM - 150 - pad, Hmenu); // FL_NORMAL_SIZE may have changed; update the menu items for (size_t i = 0; i < sizeof(menu_)/sizeof(menu_[0]); i++) diff --git a/src/globals/globals.cxx b/src/globals/globals.cxx index d5471f64..d7782596 100644 --- a/src/globals/globals.cxx +++ b/src/globals/globals.cxx @@ -80,12 +80,12 @@ const struct mode_info_t mode_info[NUM_MODES] = { { MODE_BPSK31, &psk31_modem, "BPSK31", "BPSK-31", "PSK31", "PSK31" }, { MODE_QPSK31, &qpsk31_modem, "QPSK31", "QPSK-31", "QPSK31", "QPSK31" }, - { MODE_PSK63, &psk63_modem, "PSK-63", "BPSK-63", "PSK63", "PSK63" }, + { MODE_PSK63, &psk63_modem, "BPSK63", "BPSK-63", "PSK63", "PSK63" }, { MODE_QPSK63, &qpsk63_modem, "QPSK63", "QPSK-63", "QPSK63", "QPSK63" }, - { MODE_PSK125, &psk125_modem, "PSK125", "BPSK-125", "PSK125", "PSK125" }, - { MODE_QPSK125, &qpsk125_modem, "QPSK-125", "QPSK-125", "QPSK125", "PSK125" }, - { MODE_PSK250, &psk250_modem, "PSK-250", "BPSK-250", "PSK250", "PSK250" }, - { MODE_QPSK250, &qpsk250_modem, "QPSK-250", "QPSK-250", "QPSK250", "QPSK250" }, + { MODE_PSK125, &psk125_modem, "BPSK125", "BPSK-125", "PSK125", "PSK125" }, + { MODE_QPSK125, &qpsk125_modem, "QPSK125", "QPSK-125", "QPSK125", "PSK125" }, + { MODE_PSK250, &psk250_modem, "BPSK250", "BPSK-250", "PSK250", "PSK250" }, + { MODE_QPSK250, &qpsk250_modem, "QPSK250", "QPSK-250", "QPSK250", "QPSK250" }, { MODE_OLIVIA, &olivia_modem, "OLIVIA", "Olivia", "", "OLIVIA" }, diff --git a/src/include/confdialog.h b/src/include/confdialog.h index f8dab5ae..ea7c954f 100644 --- a/src/include/confdialog.h +++ b/src/include/confdialog.h @@ -67,13 +67,15 @@ extern Fl_Round_Button *btnDTRplusV; #include extern Fl_Input_Choice *inpTTYdev; extern Fl_Round_Button *btnPTT[5]; -extern Fl_Check_Button *chkUSERIGCAT; extern Fl_Check_Button *chkUSEHAMLIB; extern Fl_ComboBox *cboHamlibRig; #include extern Fl_Choice *mnuBaudRate; extern Fl_Input_Choice *inpRIGdev; +extern Fl_Check_Button *chkUSERIGCAT; +#include extern Fl_Check_Button *chkUSEMEMMAP; +extern Fl_Check_Button *chkUSEXMLRPC; extern Fl_Button *btnInit_Interface; extern Fl_Group *tabQRZ; extern Fl_Check_Button *btnQRZnotavailable; diff --git a/src/include/configuration.h b/src/include/configuration.h index d4228a42..b0d4a7d1 100644 --- a/src/include/configuration.h +++ b/src/include/configuration.h @@ -141,6 +141,7 @@ struct configuration { int chkUSEMEMMAPis; int chkUSEHAMLIBis; int chkUSERIGCATis; + int chkUSEXMLRPCis; string PTTdev; string CWFSKport; string HamRigDevice; diff --git a/src/include/fl_digi.h b/src/include/fl_digi.h index 63ee981a..f9113018 100644 --- a/src/include/fl_digi.h +++ b/src/include/fl_digi.h @@ -95,6 +95,7 @@ extern Digiscope *digiscope; extern void toggleRSID(); extern void create_fl_digi_main(); +extern void update_main_title(); extern Fl_Menu_Item menu_[]; extern Fl_Menu_Item *getMenuItem(const char *caption); extern void activate_rig_menu_item(bool b); diff --git a/src/include/waterfall.h b/src/include/waterfall.h index 7726b4ad..07ab72a9 100644 --- a/src/include/waterfall.h +++ b/src/include/waterfall.h @@ -359,6 +359,9 @@ public: qsy->deactivate(); wfdisp->useBands(!on); } + void setXMLRPC(bool on) { + wfdisp->useBands(!on); + } double Pwr(int i) { return wfdisp->Pwr(i); } int handle(int event); diff --git a/src/main.cxx b/src/main.cxx index 3bfa9f27..5842bbc0 100644 --- a/src/main.cxx +++ b/src/main.cxx @@ -273,7 +273,7 @@ int main(int argc, char ** argv) arq_init(); #if USE_XMLRPC - if (progdefaults.xmlrpc_server) +// if (progdefaults.xmlrpc_server) XML_RPC_Server::start(progdefaults.xmlrpc_address.c_str(), progdefaults.xmlrpc_port.c_str()); #endif @@ -442,7 +442,7 @@ int parse_args(int argc, char **argv, int& idx) #endif OPT_CONFIG_DIR, OPT_EXPERIMENTAL, OPT_ARQ_ADDRESS, OPT_ARQ_PORT, #if USE_XMLRPC - OPT_CONFIG_XMLRPC, OPT_CONFIG_XMLRPC_ADDRESS, OPT_CONFIG_XMLRPC_PORT, + OPT_CONFIG_XMLRPC_ADDRESS, OPT_CONFIG_XMLRPC_PORT, #endif OPT_FONT, OPT_WFALL_WIDTH, OPT_WFALL_HEIGHT, OPT_WINDOW_WIDTH, OPT_WINDOW_HEIGHT, @@ -468,7 +468,6 @@ int parse_args(int argc, char **argv, int& idx) { "arq-server-port", 1, 0, OPT_ARQ_PORT }, #if USE_XMLRPC - { "xmlrpc-server", 0, 0, OPT_CONFIG_XMLRPC }, { "xmlrpc-server-address", 1, 0, OPT_CONFIG_XMLRPC_ADDRESS }, { "xmlrpc-server-port", 1, 0, OPT_CONFIG_XMLRPC_PORT }, #endif @@ -536,9 +535,6 @@ int parse_args(int argc, char **argv, int& idx) break; #if USE_XMLRPC - case OPT_CONFIG_XMLRPC: - progdefaults.xmlrpc_server = true; - break; case OPT_CONFIG_XMLRPC_ADDRESS: progdefaults.xmlrpc_address = optarg; break; diff --git a/src/misc/arq_io.cxx b/src/misc/arq_io.cxx index eabc105b..6275d448 100644 --- a/src/misc/arq_io.cxx +++ b/src/misc/arq_io.cxx @@ -144,8 +144,10 @@ bool bSend0x06 = false; void process_msgque() { + memset(txmsgst.buffer, ARQBUFSIZ, 0); int nbytes = msgrcv (txmsgid, (void *)&txmsgst, ARQBUFSIZ, 0, IPC_NOWAIT); if (nbytes > 0) { + arqtext.clear(); arqtext = txmsgst.buffer; parse_arqtext(); if (arqtext.length() > 0) { diff --git a/src/misc/configuration.cxx b/src/misc/configuration.cxx index 335c92ac..3eceb474 100644 --- a/src/misc/configuration.cxx +++ b/src/misc/configuration.cxx @@ -160,6 +160,7 @@ configuration progdefaults = { 0, // int chkUSEMEMMAPis 0, // int chkUSEHAMLIBis 0, // int chkUSERIGCATis + 0, // int chkUSEXMLRPCis #if defined(__linux__) "/dev/ttyS0", // string PTTdev "/dev/ttyS1", // string CWFSKport @@ -317,7 +318,7 @@ enum TAG { \ BTNUSB, BTNPTTIS, RTSPTT, DTRPTT, RTSPLUS, DTRPLUS, CHOICEHAMLIBIS, CHKUSEMEMMAPIS, - CHKUSEHAMLIBIS, CHKUSERIGCATIS, + CHKUSEHAMLIBIS, CHKUSERIGCATIS, CHKUSEXMLRPCIS, HAMRIGNAME, HAMRIGDEVICE, HAMRIGBAUDRATE, PTTDEV, SECONDARYTEXT, @@ -507,6 +508,7 @@ void configuration::writeDefaultsXML() writeXMLint(f, "CHKUSEMEMMAPIS", chkUSEMEMMAPis); writeXMLint(f, "CHKUSEHAMLIBIS", chkUSEHAMLIBis); writeXMLint(f, "CHKUSERIGCATIS", chkUSERIGCATis); + writeXMLint(f, "CHKUSEXMLRPCIS", chkUSEXMLRPCis); writeXMLstr(f, "HAMRIGNAME", HamRigName); writeXMLstr(f, "HAMRIGDEVICE", HamRigDevice); writeXMLint(f, "HAMRIGBAUDRATE", HamRigBaudrate); @@ -921,6 +923,9 @@ bool configuration::readDefaultsXML() case CHKUSERIGCATIS : chkUSERIGCATis = atoi(xml->getNodeData()); break; + case CHKUSEXMLRPCIS : + chkUSEXMLRPCis = atoi(xml->getNodeData()); + break; case HAMRIGNAME : HamRigName = xml->getNodeData(); break; @@ -1266,6 +1271,7 @@ bool configuration::readDefaultsXML() else if (!strcmp("CHKUSEMEMMAPIS", nodeName)) tag = CHKUSEMEMMAPIS; else if (!strcmp("CHKUSEHAMLIBIS", nodeName)) tag = CHKUSEHAMLIBIS; else if (!strcmp("CHKUSERIGCATIS", nodeName)) tag = CHKUSERIGCATIS; + else if (!strcmp("CHKUSEXMLRPCIS", nodeName)) tag = CHKUSEXMLRPCIS; else if (!strcmp("HAMRIGNAME", nodeName)) tag = HAMRIGNAME; else if (!strcmp("HAMRIGDEVICE", nodeName)) tag = HAMRIGDEVICE; else if (!strcmp("HAMRIGBAUDRATE", nodeName)) tag = HAMRIGBAUDRATE; @@ -1470,25 +1476,36 @@ int configuration::setDefaults() { inpTTYdev->value(PTTdev.c_str()); if(chkUSEMEMMAPis) { - chkUSEMEMMAP->value(1); chkUSEHAMLIB->value(0); chkUSERIGCAT->value(0); + chkUSEMEMMAP->value(1); + chkUSEHAMLIB->value(0); chkUSERIGCAT->value(0); chkUSEXMLRPC->value(0); cboHamlibRig->deactivate(); inpRIGdev->deactivate(); mnuBaudRate->deactivate(); btnPTT[1]->deactivate(); btnPTT[2]->activate(); btnPTT[3]->deactivate(); } else if (chkUSEHAMLIBis) { - chkUSEMEMMAP->value(0); chkUSERIGCAT->value(0); chkUSEHAMLIB->value(1); + chkUSEHAMLIB->value(1); + chkUSEMEMMAP->value(0); chkUSERIGCAT->value(0); chkUSEXMLRPC->value(0); cboHamlibRig->activate(); inpRIGdev->activate(); mnuBaudRate->activate(); btnPTT[1]->activate(); btnPTT[2]->deactivate(); btnPTT[3]->deactivate(); } else if (chkUSERIGCATis) { - chkUSEMEMMAP->value(0); chkUSEHAMLIB->value(0); chkUSERIGCAT->value(1); + chkUSERIGCAT->value(1); + chkUSEMEMMAP->value(0); chkUSEHAMLIB->value(0); chkUSEXMLRPC->value(0); cboHamlibRig->deactivate(); inpRIGdev->deactivate(); mnuBaudRate->deactivate(); btnPTT[1]->deactivate(); btnPTT[2]->deactivate(); btnPTT[3]->activate(); - } else { + } else if (chkUSEXMLRPCis) { + chkUSEXMLRPC->value(1); chkUSEMEMMAP->value(0); chkUSEHAMLIB->value(0); chkUSERIGCAT->value(0); + cboHamlibRig->deactivate(); + inpRIGdev->deactivate(); + mnuBaudRate->deactivate(); + btnPTT[1]->deactivate(); btnPTT[2]->deactivate(); btnPTT[3]->deactivate(); + } else { + chkUSEMEMMAP->value(0); chkUSEHAMLIB->value(0); + chkUSERIGCAT->value(0); chkUSEHAMLIB->value(0); chkUSEXMLRPC->value(0); btnPTT[1]->deactivate(); btnPTT[2]->deactivate(); btnPTT[3]->deactivate(); } @@ -1689,6 +1706,12 @@ void configuration::initInterface() { activate_rig_menu_item(true); } #endif + } else if (chkUSEXMLRPCis) { + cboBand->hide(); + btnSideband->hide(); + wf->USB(true); + wf->setXMLRPC(1); + activate_rig_menu_item(false); } else { wf->USB(true); cboBand->show(); diff --git a/src/misc/xmlrpc.cxx b/src/misc/xmlrpc.cxx index 6ee9c64f..3c60753f 100644 --- a/src/misc/xmlrpc.cxx +++ b/src/misc/xmlrpc.cxx @@ -55,6 +55,8 @@ #include "rigio.h" #include "debug.h" +string strOK = "OK"; + using namespace std; struct rpc_method @@ -586,7 +588,8 @@ public: void execute(const xmlrpc_c::paramList& params, xmlrpc_c::value* retval) { REQ(&modem::searchUp, active_modem); - *retval = xmlrpc_c::value_nil(); +// *retval = xmlrpc_c::value_nil(); + *retval = xmlrpc_c::value_string(strOK); } }; @@ -601,7 +604,8 @@ public: void execute(const xmlrpc_c::paramList& params, xmlrpc_c::value* retval) { REQ(&modem::searchDown, active_modem); - *retval = xmlrpc_c::value_nil(); +// *retval = xmlrpc_c::value_nil(); + *retval = xmlrpc_c::value_string(strOK); } }; @@ -663,6 +667,19 @@ public: } }; +void xmlrpc_set_qsy(long long f, long long fmid) +{ + LOG_DEBUG("rfc = %ld, audio = %ld", f, fmid); + if (active_modem->freqlocked() == true) { + active_modem->set_freqlock(false); + active_modem->set_freq((int)fmid); + active_modem->set_freqlock(true); + } else + active_modem->set_freq((int)fmid); + wf->rfcarrier(f); + wf->movetocenter(); +} + class Main_set_freq : public xmlrpc_c::method { public: @@ -673,13 +690,18 @@ public: } void execute(const xmlrpc_c::paramList& params, xmlrpc_c::value* retval) { - double d = wf->rfcarrier(); - double rfc = params.getDouble(0, 0.0); + double d = params.getDouble(0, 0.0); + long long int rfc = (long long int)d; int mc = active_modem->get_freq(); - rigCAT_set_qsy((long long int)rfc, mc); - rigMEM_set_qsy((long long int)rfc, mc); + if (progdefaults.chkUSEXMLRPCis) + xmlrpc_set_qsy(rfc, mc); + if (progdefaults.chkUSERIGCATis) + rigCAT_set_qsy(rfc, mc); + if (progdefaults.chkUSEMEMMAPis) + rigMEM_set_qsy(rfc, mc); #if USE_HAMLIB - hamlib_set_qsy((long long int)rfc, mc); + if (progdefaults.chkUSEHAMLIBis) + hamlib_set_qsy(rfc, mc); #endif *retval = xmlrpc_c::value_double(d); } @@ -697,10 +719,15 @@ public: { double rfc = wf->rfcarrier() + params.getDouble(0); int mc = active_modem->get_freq(); - rigCAT_set_qsy((long long int)rfc, mc); - rigMEM_set_qsy((long long int)rfc, mc); + if (progdefaults.chkUSEXMLRPCis) + xmlrpc_set_qsy((long long int)rfc, mc); + if (progdefaults.chkUSERIGCATis) + rigCAT_set_qsy((long long int)rfc, mc); + if (progdefaults.chkUSEMEMMAPis) + rigMEM_set_qsy((long long int)rfc, mc); #if USE_HAMLIB - hamlib_set_qsy((long long int)rfc, mc); + if (progdefaults.chkUSEHAMLIBis) + hamlib_set_qsy((long long int)rfc, mc); #endif *retval = xmlrpc_c::value_double(rfc); } @@ -992,7 +1019,8 @@ public: REQ(set_button, btnRSID, false); REQ(set_button, wf->xmtrcv, true); } - *retval = xmlrpc_c::value_nil(); +// *retval = xmlrpc_c::value_nil(); + *retval = xmlrpc_c::value_string(strOK); } }; @@ -1011,7 +1039,8 @@ public: REQ(set_button, btnRSID, false); REQ(set_button, btnTune, !btnTune->value()); } - *retval = xmlrpc_c::value_nil(); +// *retval = xmlrpc_c::value_nil(); + *retval = xmlrpc_c::value_string(strOK); } }; @@ -1029,7 +1058,8 @@ public: REQ(set_button, wf->xmtrcv, false); else if (btnRSID->value()) REQ(set_button, btnRSID, false); - *retval = xmlrpc_c::value_nil(); +// *retval = xmlrpc_c::value_nil(); + *retval = xmlrpc_c::value_string(strOK); } }; @@ -1045,7 +1075,8 @@ public: { if (trx_state == STATE_TX || trx_state == STATE_TUNE) REQ(abort_tx); - *retval = xmlrpc_c::value_nil(); +// *retval = xmlrpc_c::value_nil(); + *retval = xmlrpc_c::value_string(strOK); } }; @@ -1060,7 +1091,8 @@ public: void execute(const xmlrpc_c::paramList& params, xmlrpc_c::value* retval) { REQ(&Main_run_macro::run_macro, params.getInt(0, 0, MAXMACROS-1)); - *retval = xmlrpc_c::value_nil(); +// *retval = xmlrpc_c::value_nil(); + *retval = xmlrpc_c::value_string(strOK); } static void run_macro(int i) { macros.execute(i); } }; @@ -1091,7 +1123,8 @@ public: { if (!(wf->xmtrcv->value() || btnTune->value() || btnRSID->value())) REQ(set_button, btnRSID, true); - *retval = xmlrpc_c::value_nil(); +// *retval = xmlrpc_c::value_nil(); + *retval = xmlrpc_c::value_string(strOK); } }; @@ -1265,6 +1298,22 @@ public: } }; +class Log_clear : public xmlrpc_c::method +{ +public: + Log_clear() + { + _signature = "s:n"; + _help = "Clears the contents of the log fields."; + } + void execute(const xmlrpc_c::paramList& params, xmlrpc_c::value* retval) + { + REQ(clearQSO); +// *retval = xmlrpc_c::value_nil(); + *retval = xmlrpc_c::value_string(strOK); + } +}; + // ============================================================================= class Text_get_rx_length : public xmlrpc_c::method @@ -1278,6 +1327,8 @@ public: void execute(const xmlrpc_c::paramList& params, xmlrpc_c::value* retval) { *retval = xmlrpc_c::value_int(ReceiveText->buffer()->length()); +// *retval = xmlrpc_c::value_nil(); + *retval = xmlrpc_c::value_string(strOK); } }; @@ -1319,7 +1370,8 @@ public: void execute(const xmlrpc_c::paramList& params, xmlrpc_c::value* retval) { REQ(&FTextBase::clear, ReceiveText); - *retval = xmlrpc_c::value_nil(); +// *retval = xmlrpc_c::value_nil(); + *retval = xmlrpc_c::value_string(strOK); } }; @@ -1371,7 +1423,8 @@ public: void execute(const xmlrpc_c::paramList& params, xmlrpc_c::value* retval) { REQ(&FTextBase::clear, TransmitText); - *retval = xmlrpc_c::value_nil(); +// *retval = xmlrpc_c::value_nil(); + *retval = xmlrpc_c::value_string(strOK); } }; @@ -1463,6 +1516,7 @@ void XML_RPC_Server::add_methods(void) methods->push_back(rpc_method(new Log_get_notes, "log.get_notes")); methods->push_back(rpc_method(new Log_get_locator, "log.get_locator")); methods->push_back(rpc_method(new Log_get_az, "log.get_az")); + methods->push_back(rpc_method(new Log_clear, "log.clear")); methods->push_back(rpc_method(new Text_get_rx_length, "text.get_rx_length")); methods->push_back(rpc_method(new Text_get_rx, "text.get_rx")); diff --git a/src/rigcontrol/hamlib.cxx b/src/rigcontrol/hamlib.cxx index 38dd9222..4f277f9b 100644 --- a/src/rigcontrol/hamlib.cxx +++ b/src/rigcontrol/hamlib.cxx @@ -48,8 +48,6 @@ static long int hamlib_freq; static rmode_t hamlib_rmode = RIG_MODE_USB; static pbwidth_t hamlib_pbwidth = 3000; -// FIXME: remove static int ioctl_bits; - static int dummy = 0; static void *hamlib_loop(void *args); @@ -63,35 +61,6 @@ void show_error(const char* msg1, const char* msg2 = 0) LOG_ERROR("%s", error.c_str()); } -/* FIXME: remove this function -bool hamlib_setRTSDTR() -{ - if (progdefaults.RTSplus == false && progdefaults.DTRplus == false) - return true; - - int hamlibfd = open(progdefaults.HamRigDevice.c_str(), O_RDWR | O_NOCTTY | O_NDELAY); - - if (hamlibfd < 0) { - show_error("Cannot open PTT device", progdefaults.HamRigDevice.c_str()); - return false; - } - - ioctl(hamlibfd, TIOCMGET, &ioctl_bits); - - if (progdefaults.RTSplus) - ioctl_bits |= TIOCM_RTS; // set RTS bit - else - ioctl_bits &= ~TIOCM_RTS; // clear RTS bit - if (progdefaults.DTRplus) - ioctl_bits |= TIOCM_DTR; // set DTR bit - else - ioctl_bits &= ~TIOCM_DTR; // clear DTR bit - ioctl(hamlibfd, TIOCMSET, &ioctl_bits); - close(hamlibfd); - return true; -} -*/ - #ifdef __CYGWIN__ // convert COMx to /dev/ttySy with y = x - 1 static void adjust_port(string& port) @@ -148,10 +117,6 @@ bool hamlib_init(bool bPtt) return false; } -// if (hamlib_setRTSDTR() == false) { -// return -1; -// } - try { model = (*prig)->rig_model; xcvr->init(model); @@ -169,21 +134,14 @@ bool hamlib_init(bool bPtt) return false; } -// if (hamlib_setRTSDTR() == false) -// return -1; - MilliSleep(200); - // char temp[80]; - // xcvr->getConf("dtr_state", temp); - // LOG_DEBUG("Hamlib DTR = %s", temp); - try { need_freq = true; freq = xcvr->getFreq(); if (freq == 0) { xcvr->close(); - show_error(__func__, "transceiver not responding"); + show_error(__func__, "Rig not responding"); return false; } } @@ -239,7 +197,6 @@ void hamlib_close(void) hamlib_exit = true; int count = 20; while (!hamlib_closed) { -// cerr << "." << flush; MilliSleep(50); if (!count--) { show_error(__func__, "Hamlib stuck, transceiver on fire"); @@ -389,9 +346,8 @@ static void *hamlib_loop(void *args) } } catch (const RigException& Ex) { - show_error(__func__, "No transceiver comms"); + show_error(__func__, "Rig not responding: freq"); freqok = false; - hamlib_exit = true; } } if (hamlib_exit) @@ -403,9 +359,8 @@ static void *hamlib_loop(void *args) modeok = true; } catch (const RigException& Ex) { - show_error(__func__, "No transceiver comms"); + show_error(__func__, "Rig not responding: mode"); modeok = false; - hamlib_exit = true; } } fl_unlock (&hamlib_mutex); diff --git a/src/rigcontrol/rigio.cxx b/src/rigcontrol/rigio.cxx index 92f993eb..2313eedd 100644 --- a/src/rigcontrol/rigio.cxx +++ b/src/rigcontrol/rigio.cxx @@ -441,7 +441,7 @@ void rigCAT_setfreq(long long f) list::iterator itrCmd; string strCmd; - LOG_DEBUG("set frequency"); + LOG_DEBUG("set frequency %ld", f); itrCmd = commands.begin(); while (itrCmd != commands.end()) {