diff --git a/src/dialogs/confdialog.cxx b/src/dialogs/confdialog.cxx index fd2ba0a1..61c103a2 100644 --- a/src/dialogs/confdialog.cxx +++ b/src/dialogs/confdialog.cxx @@ -16,6 +16,7 @@ #include "Viewer.h" #include "pskrep.h" #include "logsupport.h" +#include "hamlib.h" Fl_Double_Window *dlgConfig; void set_qrz_buttons(Fl_Button* b) { @@ -1360,7 +1361,7 @@ Fl_ComboBox *cboHamlibRig=(Fl_ComboBox *)0; static void cb_cboHamlibRig(Fl_ComboBox*, void*) { btnInitHAMLIB->labelcolor(FL_RED); btnInitHAMLIB->redraw_label(); -progdefaults.changed = true; +hamlib_get_defaults(); } Fl_Input_Choice *inpRIGdev=(Fl_Input_Choice *)0; @@ -1369,7 +1370,6 @@ static void cb_inpRIGdev(Fl_Input_Choice* o, void*) { progdefaults.HamRigDevice = o->value(); btnInitHAMLIB->labelcolor(FL_RED); btnInitHAMLIB->redraw_label(); -progdefaults.changed = true; } Fl_Choice *mnuBaudRate=(Fl_Choice *)0; @@ -1378,16 +1378,14 @@ static void cb_mnuBaudRate(Fl_Choice* o, void*) { progdefaults.HamRigBaudrate = o->value(); btnInitHAMLIB->labelcolor(FL_RED); btnInitHAMLIB->redraw_label(); -progdefaults.changed = true; } -Fl_Counter *cntHamlibtRetries=(Fl_Counter *)0; +Fl_Counter *cntHamlibRetries=(Fl_Counter *)0; -static void cb_cntHamlibtRetries(Fl_Counter* o, void*) { +static void cb_cntHamlibRetries(Fl_Counter* o, void*) { progdefaults.HamlibRetries = (int)o->value(); btnInitHAMLIB->labelcolor(FL_RED); btnInitHAMLIB->redraw_label(); -progdefaults.changed = true; } Fl_Counter *cntHamlibTimeout=(Fl_Counter *)0; @@ -1396,7 +1394,6 @@ static void cb_cntHamlibTimeout(Fl_Counter* o, void*) { progdefaults.HamlibTimeout = (int)o->value(); btnInitHAMLIB->labelcolor(FL_RED); btnInitHAMLIB->redraw_label(); -progdefaults.changed = true; } Fl_Counter *cntHamlibWait=(Fl_Counter *)0; @@ -1405,7 +1402,6 @@ static void cb_cntHamlibWait(Fl_Counter* o, void*) { progdefaults.HamlibWait = (int)o->value(); btnInitHAMLIB->labelcolor(FL_RED); btnInitHAMLIB->redraw_label(); -progdefaults.changed = true; } Fl_Input2 *inpHamlibConfig=(Fl_Input2 *)0; @@ -1414,7 +1410,6 @@ static void cb_inpHamlibConfig(Fl_Input2* o, void*) { progdefaults.HamConfig = o->value(); btnInitHAMLIB->labelcolor(FL_RED); btnInitHAMLIB->redraw_label(); -progdefaults.changed = true; } Fl_Button *btnInitHAMLIB=(Fl_Button *)0; @@ -1439,7 +1434,6 @@ static void cb_btnHamlibCMDptt(Fl_Round_Button* o, void*) { btnInitHAMLIB->labelcolor(FL_RED); btnInitHAMLIB->redraw_label(); -progdefaults.changed = true; } Fl_Check_Button *btnHamlibDTRplus=(Fl_Check_Button *)0; @@ -1448,7 +1442,6 @@ static void cb_btnHamlibDTRplus(Fl_Check_Button* o, void*) { progdefaults.HamlibDTRplus = o->value(); btnInitHAMLIB->labelcolor(FL_RED); btnInitHAMLIB->redraw_label(); -progdefaults.changed = true; } Fl_Check_Button *chkHamlibRTSplus=(Fl_Check_Button *)0; @@ -1460,7 +1453,6 @@ chkHamlibRTSCTSflow->value(0); } btnInitHAMLIB->labelcolor(FL_RED); btnInitHAMLIB->redraw_label(); -progdefaults.changed = true; } Fl_Check_Button *chkHamlibRTSCTSflow=(Fl_Check_Button *)0; @@ -1474,7 +1466,6 @@ if (o->value() == 1) { } btnInitHAMLIB->labelcolor(FL_RED); btnInitHAMLIB->redraw_label(); -progdefaults.changed = true; } Fl_Check_Button *chkHamlibXONXOFFflow=(Fl_Check_Button *)0; @@ -1487,7 +1478,6 @@ if (o->value() == 1) { } btnInitHAMLIB->labelcolor(FL_RED); btnInitHAMLIB->redraw_label(); -progdefaults.changed = true; } Fl_Counter *cntHamlibWriteDelay=(Fl_Counter *)0; @@ -1496,7 +1486,6 @@ static void cb_cntHamlibWriteDelay(Fl_Counter* o, void*) { progdefaults.HamlibWriteDelay = (int)o->value(); btnInitHAMLIB->labelcolor(FL_RED); btnInitHAMLIB->redraw_label(); -progdefaults.changed = true; } Fl_Group *grpMemmap=(Fl_Group *)0; @@ -2078,6 +2067,7 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600 { tabOperator = new Fl_Group(0, 25, 500, 345, _("Operator")); tabOperator->callback((Fl_Callback*)cb_tabOperator); tabOperator->when(FL_WHEN_CHANGED); + tabOperator->hide(); { Fl_Group* o = new Fl_Group(5, 35, 490, 165, _("Station")); o->box(FL_ENGRAVED_FRAME); o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE); @@ -3429,10 +3419,10 @@ an merging")); tabModems->end(); } // Fl_Group* tabModems { tabRig = new Fl_Group(0, 25, 500, 345, _("Rig")); - tabRig->hide(); { tabsRig = new Fl_Tabs(0, 25, 500, 345); tabsRig->selection_color(FL_LIGHT1); { Fl_Group* o = new Fl_Group(0, 50, 500, 320, _("Hardware PTT")); + o->hide(); { grpHWPTT = new Fl_Group(5, 100, 490, 190); grpHWPTT->box(FL_ENGRAVED_FRAME); { inpTTYdev = new Fl_Input_Choice(200, 143, 150, 22, _("Device:")); @@ -3614,7 +3604,6 @@ an merging")); o->end(); } // Fl_Group* o { tabHamlib = new Fl_Group(0, 50, 500, 320, _("Hamlib")); - tabHamlib->hide(); { chkUSEHAMLIB = new Fl_Check_Button(195, 60, 100, 20, _("Use Hamlib")); chkUSEHAMLIB->tooltip(_("Hamlib used for rig control")); chkUSEHAMLIB->down_box(FL_DOWN_BOX); @@ -3649,29 +3638,29 @@ an merging")); o->add(szBaudRates); o->value(progdefaults.HamRigBaudrate); } // Fl_Choice* mnuBaudRate - { Fl_Counter* o = cntHamlibtRetries = new Fl_Counter(15, 140, 75, 20, _("Retries")); - cntHamlibtRetries->tooltip(_("Number of times to resend\ncommand before giving up")); - cntHamlibtRetries->type(1); - cntHamlibtRetries->minimum(1); - cntHamlibtRetries->maximum(10); - cntHamlibtRetries->step(1); - cntHamlibtRetries->value(5); - cntHamlibtRetries->callback((Fl_Callback*)cb_cntHamlibtRetries); - cntHamlibtRetries->align(FL_ALIGN_TOP_LEFT); + { Fl_Counter* o = cntHamlibRetries = new Fl_Counter(15, 140, 100, 20, _("Retries")); + cntHamlibRetries->tooltip(_("Number of times to resend\ncommand before giving up")); + cntHamlibRetries->type(1); + cntHamlibRetries->minimum(1); + cntHamlibRetries->maximum(10); + cntHamlibRetries->step(1); + cntHamlibRetries->value(5); + cntHamlibRetries->callback((Fl_Callback*)cb_cntHamlibRetries); + cntHamlibRetries->align(FL_ALIGN_TOP_LEFT); o->value(progdefaults.HamlibRetries); - } // Fl_Counter* cntHamlibtRetries - { Fl_Counter* o = cntHamlibTimeout = new Fl_Counter(150, 140, 75, 20, _("Retry interval (ms)")); + } // Fl_Counter* cntHamlibRetries + { Fl_Counter* o = cntHamlibTimeout = new Fl_Counter(150, 140, 100, 20, _("Retry interval (ms)")); cntHamlibTimeout->tooltip(_("Msec\'s between retries")); cntHamlibTimeout->type(1); cntHamlibTimeout->minimum(2); - cntHamlibTimeout->maximum(200); + cntHamlibTimeout->maximum(20000); cntHamlibTimeout->step(1); cntHamlibTimeout->value(10); cntHamlibTimeout->callback((Fl_Callback*)cb_cntHamlibTimeout); cntHamlibTimeout->align(FL_ALIGN_TOP_LEFT); o->value(progdefaults.HamlibTimeout); } // Fl_Counter* cntHamlibTimeout - { Fl_Counter* o = cntHamlibWait = new Fl_Counter(150, 186, 75, 20, _("Post write delay (ms)")); + { Fl_Counter* o = cntHamlibWait = new Fl_Counter(150, 186, 100, 20, _("Post write delay (ms)")); cntHamlibWait->tooltip(_("Msec\'s between sequential commands")); cntHamlibWait->type(1); cntHamlibWait->minimum(0); @@ -3737,7 +3726,7 @@ an merging")); chkHamlibXONXOFFflow->callback((Fl_Callback*)cb_chkHamlibXONXOFFflow); o->value(progdefaults.HamlibXONXOFFflow); } // Fl_Check_Button* chkHamlibXONXOFFflow - { Fl_Counter* o = cntHamlibWriteDelay = new Fl_Counter(15, 186, 75, 20, _("Write delay (ms)")); + { Fl_Counter* o = cntHamlibWriteDelay = new Fl_Counter(15, 186, 100, 20, _("Write delay (ms)")); cntHamlibWriteDelay->tooltip(_("Msec\'s between sequential commands")); cntHamlibWriteDelay->type(1); cntHamlibWriteDelay->minimum(0); diff --git a/src/dialogs/confdialog.fl b/src/dialogs/confdialog.fl index 993e21ac..13c2e6a4 100644 --- a/src/dialogs/confdialog.fl +++ b/src/dialogs/confdialog.fl @@ -49,6 +49,8 @@ decl {\#include "flinput2.h"} {public decl {\#include "logsupport.h"} {} +decl {\#include "hamlib.h"} {} + decl {Fl_Double_Window *dlgConfig;} {public } @@ -81,8 +83,8 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600 } { Fl_Group tabOperator { label Operator - callback {progdefaults.changed = true;} open selected - xywh {0 25 500 345} when 1 + callback {progdefaults.changed = true;} open + xywh {0 25 500 345} when 1 hide } { Fl_Group {} { label Station open @@ -1400,14 +1402,14 @@ progdefaults.changed = true;} } Fl_Group tabRig { label Rig open - xywh {0 25 500 345} hide + xywh {0 25 500 345} } { Fl_Tabs tabsRig {open xywh {0 25 500 345} selection_color 50 } { Fl_Group {} { label {Hardware PTT} open - xywh {0 50 500 320} + xywh {0 50 500 320} hide } { Fl_Group grpHWPTT {open xywh {5 100 490 190} box ENGRAVED_FRAME @@ -1673,7 +1675,7 @@ progdefaults.changed = true;} } Fl_Group tabHamlib { label Hamlib open - xywh {0 50 500 320} hide + xywh {0 50 500 320} } { Fl_Check_Button chkUSEHAMLIB { label {Use Hamlib} @@ -1692,14 +1694,14 @@ btnInitHAMLIB->redraw(); progdefaults.changed = true;} tooltip {Hamlib used for rig control} xywh {195 60 100 20} down_box DOWN_BOX } - Fl_Group grpHamlib {open + Fl_Group grpHamlib {open selected xywh {5 83 490 277} box ENGRAVED_FRAME } { Fl_Box cboHamlibRig { label {Rig:} callback {btnInitHAMLIB->labelcolor(FL_RED); btnInitHAMLIB->redraw_label(); -progdefaults.changed = true;} +hamlib_get_defaults();} tooltip {Select the rig by name} xywh {65 93 160 22} box DOWN_BOX color 7 align 4 code0 {o->readonly();} class Fl_ComboBox @@ -1708,8 +1710,7 @@ progdefaults.changed = true;} label {Device:} callback {progdefaults.HamRigDevice = o->value(); btnInitHAMLIB->labelcolor(FL_RED); -btnInitHAMLIB->redraw_label(); -progdefaults.changed = true;} open +btnInitHAMLIB->redraw_label();} open tooltip {Serial port} xywh {340 93 144 22} code0 {o->value(progdefaults.HamRigDevice.c_str());} } {} @@ -1717,46 +1718,41 @@ progdefaults.changed = true;} open label {Baud rate:} callback {progdefaults.HamRigBaudrate = o->value(); btnInitHAMLIB->labelcolor(FL_RED); -btnInitHAMLIB->redraw_label(); -progdefaults.changed = true;} open +btnInitHAMLIB->redraw_label();} open tooltip {Serial port baud rate} xywh {385 139 99 22} down_box BORDER_BOX align 5 code0 {o->add(szBaudRates);} code1 {o->value(progdefaults.HamRigBaudrate);} } {} - Fl_Counter cntHamlibtRetries { + Fl_Counter cntHamlibRetries { label Retries callback {progdefaults.HamlibRetries = (int)o->value(); btnInitHAMLIB->labelcolor(FL_RED); -btnInitHAMLIB->redraw_label(); -progdefaults.changed = true;} +btnInitHAMLIB->redraw_label();} tooltip {Number of times to resend -command before giving up} xywh {15 140 75 20} type Simple align 5 minimum 1 maximum 10 step 1 value 5 +command before giving up} xywh {15 140 100 20} type Simple align 5 minimum 1 maximum 10 step 1 value 5 code0 {o->value(progdefaults.HamlibRetries);} } Fl_Counter cntHamlibTimeout { label {Retry interval (ms)} callback {progdefaults.HamlibTimeout = (int)o->value(); btnInitHAMLIB->labelcolor(FL_RED); -btnInitHAMLIB->redraw_label(); -progdefaults.changed = true;} - tooltip {Msec's between retries} xywh {150 140 75 20} type Simple align 5 minimum 2 maximum 200 step 1 value 10 +btnInitHAMLIB->redraw_label();} + tooltip {Msec's between retries} xywh {150 140 100 20} type Simple align 5 minimum 2 maximum 20000 step 1 value 10 code0 {o->value(progdefaults.HamlibTimeout);} } Fl_Counter cntHamlibWait { label {Post write delay (ms)} callback {progdefaults.HamlibWait = (int)o->value(); btnInitHAMLIB->labelcolor(FL_RED); -btnInitHAMLIB->redraw_label(); -progdefaults.changed = true;} - tooltip {Msec's between sequential commands} xywh {150 186 75 20} type Simple align 5 minimum 0 maximum 100 step 1 value 5 +btnInitHAMLIB->redraw_label();} + tooltip {Msec's between sequential commands} xywh {150 186 100 20} type Simple align 5 minimum 0 maximum 100 step 1 value 5 code0 {o->value(progdefaults.HamlibWait);} } Fl_Input inpHamlibConfig { label {Advanced configuration:} callback {progdefaults.HamConfig = o->value(); btnInitHAMLIB->labelcolor(FL_RED); -btnInitHAMLIB->redraw_label(); -progdefaults.changed = true;} +btnInitHAMLIB->redraw_label();} tooltip {Optional configuration in format: param=val ...} xywh {20 326 320 22} align 5 code0 {inpHamlibConfig->value(progdefaults.HamConfig.c_str());} @@ -1781,8 +1777,7 @@ effect when rig mode changes.} xywh {340 217 144 22} down_box BORDER_BOX align 5 callback {progdefaults.HamlibCMDptt=o->value(); btnInitHAMLIB->labelcolor(FL_RED); -btnInitHAMLIB->redraw_label(); -progdefaults.changed = true;} +btnInitHAMLIB->redraw_label();} tooltip {PTT is a hamlib command} xywh {45 218 200 20} down_box DIAMOND_DOWN_BOX selection_color 1 code0 {o->value(progdefaults.HamlibCMDptt);} } @@ -1790,8 +1785,7 @@ progdefaults.changed = true;} label {DTR +12} callback {progdefaults.HamlibDTRplus = o->value(); btnInitHAMLIB->labelcolor(FL_RED); -btnInitHAMLIB->redraw_label(); -progdefaults.changed = true;} +btnInitHAMLIB->redraw_label();} tooltip {Initial state of DTR} xywh {45 248 90 20} down_box DOWN_BOX code0 {o->value(progdefaults.HamlibDTRplus);} } @@ -1802,8 +1796,7 @@ if (o->value() == 1) { chkHamlibRTSCTSflow->value(0); } btnInitHAMLIB->labelcolor(FL_RED); -btnInitHAMLIB->redraw_label(); -progdefaults.changed = true;} +btnInitHAMLIB->redraw_label();} tooltip {Initial state of RTS} xywh {269 248 85 20} down_box DOWN_BOX code0 {o->value(progdefaults.HamlibRTSplus);} } @@ -1816,8 +1809,7 @@ if (o->value() == 1) { progdefaults.HamlibXONXOFFflow = false; } btnInitHAMLIB->labelcolor(FL_RED); -btnInitHAMLIB->redraw_label(); -progdefaults.changed = true;} +btnInitHAMLIB->redraw_label();} tooltip {Rig requires RTS/CTS flow control} xywh {45 281 170 20} down_box DOWN_BOX code0 {o->value(progdefaults.HamlibRTSCTSflow);} } @@ -1829,8 +1821,7 @@ if (o->value() == 1) { progdefaults.HamlibRTSCTSflow = false; } btnInitHAMLIB->labelcolor(FL_RED); -btnInitHAMLIB->redraw_label(); -progdefaults.changed = true;} +btnInitHAMLIB->redraw_label();} tooltip {Rig requires Xon/Xoff flow control} xywh {269 281 185 20} down_box DOWN_BOX code0 {o->value(progdefaults.HamlibXONXOFFflow);} } @@ -1838,9 +1829,8 @@ progdefaults.changed = true;} label {Write delay (ms)} callback {progdefaults.HamlibWriteDelay = (int)o->value(); btnInitHAMLIB->labelcolor(FL_RED); -btnInitHAMLIB->redraw_label(); -progdefaults.changed = true;} - tooltip {Msec's between sequential commands} xywh {15 186 75 20} type Simple align 5 minimum 0 maximum 100 step 1 +btnInitHAMLIB->redraw_label();} + tooltip {Msec's between sequential commands} xywh {15 186 100 20} type Simple align 5 minimum 0 maximum 100 step 1 code0 {o->value(progdefaults.HamlibWriteDelay);} } } diff --git a/src/include/confdialog.h b/src/include/confdialog.h index 82bf39f2..aae4ae85 100644 --- a/src/include/confdialog.h +++ b/src/include/confdialog.h @@ -217,7 +217,7 @@ extern Fl_Group *grpHamlib; extern Fl_ComboBox *cboHamlibRig; extern Fl_Input_Choice *inpRIGdev; extern Fl_Choice *mnuBaudRate; -extern Fl_Counter *cntHamlibtRetries; +extern Fl_Counter *cntHamlibRetries; extern Fl_Counter *cntHamlibTimeout; extern Fl_Counter *cntHamlibWait; extern Fl_Input2 *inpHamlibConfig; diff --git a/src/include/configuration.h b/src/include/configuration.h index c6b633f8..914a0306 100644 --- a/src/include/configuration.h +++ b/src/include/configuration.h @@ -377,6 +377,7 @@ struct configuration void testCommPorts(); const char* strBaudRate(); int BaudRate(size_t); + int nBaudRate(const char *); void initFonts(void); }; diff --git a/src/include/hamlib.h b/src/include/hamlib.h index 37ffe528..7279f906 100644 --- a/src/include/hamlib.h +++ b/src/include/hamlib.h @@ -22,6 +22,7 @@ extern int hamlib_setmode(rmode_t); extern rmode_t hamlib_getmode(); extern int hamlib_setwidth(pbwidth_t); extern pbwidth_t hamlib_getwidth(); +extern void hamlib_get_defaults(); #endif diff --git a/src/misc/configuration.cxx b/src/misc/configuration.cxx index 4cd8c97e..16828803 100644 --- a/src/misc/configuration.cxx +++ b/src/misc/configuration.cxx @@ -668,6 +668,14 @@ const char* configuration::strBaudRate() return (szBaudRates[HamRigBaudrate + 1]); } +int configuration::nBaudRate(const char *szBR) +{ + for (size_t i = 1; i < sizeof(szBaudRates); i++) + if (strcmp(szBaudRates[i], szBR) == 0) + return i - 1; + return 0; +} + int configuration::BaudRate(size_t n) { if (n > sizeof(szBaudRates) + 1) return 1200; diff --git a/src/rigcontrol/hamlib.cxx b/src/rigcontrol/hamlib.cxx index a7fbf976..fabf2f3b 100644 --- a/src/rigcontrol/hamlib.cxx +++ b/src/rigcontrol/hamlib.cxx @@ -71,6 +71,64 @@ void show_error(const char* msg1, const char* msg2 = 0) LOG_ERROR("%s", error.c_str()); } +void hamlib_get_defaults() +{ + char szParam[40]; + + progdefaults.HamRigModel = hamlib_get_rig_model(cboHamlibRig->index()); + + xcvr->init(progdefaults.HamRigModel); + + if (xcvr->getCaps()->port_type != RIG_PORT_SERIAL) { + xcvr->close(); + return; + } + + xcvr->getConf("serial_speed", szParam); + progdefaults.HamRigBaudrate = progdefaults.nBaudRate(szParam); + mnuBaudRate->value(progdefaults.HamRigBaudrate); + + xcvr->getConf("post_write_delay", szParam); + sscanf(szParam, "%d", &progdefaults.HamlibWait); + cntHamlibWait->value(progdefaults.HamlibWait); + + xcvr->getConf("write_delay", szParam); + sscanf(szParam, "%d", &progdefaults.HamlibWriteDelay); + cntHamlibWriteDelay->value(progdefaults.HamlibWriteDelay); + + xcvr->getConf("timeout", szParam); + sscanf(szParam, "%d", &progdefaults.HamlibTimeout); + cntHamlibTimeout->value(progdefaults.HamlibTimeout); + + xcvr->getConf("retry", szParam); + sscanf(szParam, "%d", &progdefaults.HamlibRetries); + cntHamlibRetries->value(progdefaults.HamlibRetries); + + xcvr->getConf("rts_state", szParam); + if (strcmp(szParam, "ON") == 0) + progdefaults.HamlibRTSplus = true; + else + progdefaults.HamlibRTSplus = false; + chkHamlibRTSplus->value(progdefaults.HamlibRTSplus); + + xcvr->getConf("dtr_state", szParam); + if (strcmp(szParam, "ON") == 0) + progdefaults.HamlibDTRplus = true; + else + progdefaults.HamlibDTRplus = false; + btnHamlibDTRplus->value(progdefaults.HamlibDTRplus); + + progdefaults.HamlibRTSCTSflow = false; + progdefaults.HamlibXONXOFFflow = false; + xcvr->getConf("serial_handshake", szParam); + if (strcmp(szParam, "Hardware") == 0) progdefaults.HamlibRTSCTSflow = true; + if (strcmp(szParam, "XONXOFF") == 0) progdefaults.HamlibXONXOFFflow = true; + chkHamlibRTSCTSflow->value(progdefaults.HamlibRTSCTSflow); + chkHamlibXONXOFFflow->value(progdefaults.HamlibXONXOFFflow); + + xcvr->close(); +} + bool hamlib_init(bool bPtt) { freq_t freq;