Serial i/o Stopbits

Added stopbits configuration for hamlib and rigcat serial i/o
pull/2/head
David Freese 2009-09-14 14:31:27 -05:00
rodzic 765c6d91b2
commit f9423b45b4
9 zmienionych plików z 1060 dodań i 982 usunięć

Wyświetl plik

@ -1445,6 +1445,13 @@ btnInitRIGCAT->redraw_label();
progdefaults.changed = true;
}
Fl_Value_Slider *valRigCatStopbits=(Fl_Value_Slider *)0;
static void cb_valRigCatStopbits(Fl_Value_Slider* o, void*) {
progdefaults.RigCatStopbits = (int)o->value();
progdefaults.changed = true;
}
Fl_Group *tabHamlib=(Fl_Group *)0;
Fl_Check_Button *chkUSEHAMLIB=(Fl_Check_Button *)0;
@ -1609,6 +1616,13 @@ btnInitHAMLIB->labelcolor(FL_RED);
btnInitHAMLIB->redraw_label();
}
Fl_Value_Slider *valHamRigStopbits=(Fl_Value_Slider *)0;
static void cb_valHamRigStopbits(Fl_Value_Slider* o, void*) {
progdefaults.HamRigStopbits = (int)o->value();
progdefaults.changed = true;
}
Fl_Group *grpMemmap=(Fl_Group *)0;
Fl_Check_Button *chkUSEMEMMAP=(Fl_Check_Button *)0;
@ -2227,6 +2241,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);
@ -3665,7 +3680,6 @@ 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"));
@ -3731,6 +3745,7 @@ an merging"));
} // Fl_Group* o
{ Fl_Group* o = new Fl_Group(0, 50, 500, 320, _("RigCAT"));
o->tooltip(_("Rig Control using xml spec file"));
o->hide();
{ chkUSERIGCAT = new Fl_Check_Button(195, 60, 110, 20, _("Use RigCAT"));
chkUSERIGCAT->tooltip(_("RigCAT used for rig control"));
chkUSERIGCAT->down_box(FL_DOWN_BOX);
@ -3770,7 +3785,7 @@ an merging"));
cntRigCatWait->align(FL_ALIGN_TOP_LEFT);
o->value(progdefaults.RigCatWait);
} // Fl_Value_Input* cntRigCatWait
{ Fl_Choice* o = mnuXmlRigBaudrate = new Fl_Choice(386, 154, 99, 22, _("Baud rate:"));
{ Fl_Choice* o = mnuXmlRigBaudrate = new Fl_Choice(386, 150, 99, 22, _("Baud rate:"));
mnuXmlRigBaudrate->tooltip(_("Pick baud rate from list"));
mnuXmlRigBaudrate->down_box(FL_BORDER_BOX);
mnuXmlRigBaudrate->callback((Fl_Callback*)cb_mnuXmlRigBaudrate);
@ -3824,12 +3839,24 @@ an merging"));
chkRigCatRTSCTSflow->callback((Fl_Callback*)cb_chkRigCatRTSCTSflow);
o->value(progdefaults.RigCatRTSCTSflow);
} // Fl_Check_Button* chkRigCatRTSCTSflow
{ Fl_Value_Slider* o = valRigCatStopbits = new Fl_Value_Slider(425, 190, 60, 22, _("Stopbits"));
valRigCatStopbits->type(1);
valRigCatStopbits->color(FL_BACKGROUND2_COLOR);
valRigCatStopbits->selection_color((Fl_Color)40);
valRigCatStopbits->minimum(1);
valRigCatStopbits->maximum(2);
valRigCatStopbits->step(1);
valRigCatStopbits->value(2);
valRigCatStopbits->textsize(14);
valRigCatStopbits->callback((Fl_Callback*)cb_valRigCatStopbits);
valRigCatStopbits->align(FL_ALIGN_LEFT);
o->value(progdefaults.RigCatStopbits);
} // Fl_Value_Slider* valRigCatStopbits
grpRigCAT->end();
} // Fl_Group* grpRigCAT
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);
@ -3857,35 +3884,34 @@ an merging"));
inpRIGdev->callback((Fl_Callback*)cb_inpRIGdev);
o->value(progdefaults.HamRigDevice.c_str());
} // Fl_Input_Choice* inpRIGdev
{ Fl_Value_Input* o = cntHamlibRetries = new Fl_Value_Input(30, 137, 70, 24, _("Retries"));
{ Fl_Value_Input* o = cntHamlibRetries = new Fl_Value_Input(30, 133, 70, 24, _("Retries"));
cntHamlibRetries->tooltip(_("# times to resend command before giving up"));
cntHamlibRetries->callback((Fl_Callback*)cb_cntHamlibRetries);
cntHamlibRetries->align(FL_ALIGN_TOP_LEFT);
o->value(progdefaults.HamlibRetries);
} // Fl_Value_Input* cntHamlibRetries
{ Fl_Value_Input* o = cntHamlibTimeout = new Fl_Value_Input(155, 137, 70, 24, _("Retry Interval (ms)"));
{ Fl_Value_Input* o = cntHamlibTimeout = new Fl_Value_Input(155, 133, 70, 24, _("Retry Interval (ms)"));
cntHamlibTimeout->tooltip(_("Msec\'s between retries"));
cntHamlibTimeout->callback((Fl_Callback*)cb_cntHamlibTimeout);
cntHamlibTimeout->align(FL_ALIGN_TOP_LEFT);
o->value(progdefaults.HamlibTimeout);
} // Fl_Value_Input* cntHamlibTimeout
{ Fl_Value_Input* o = cntHamlibWriteDelay = new Fl_Value_Input(30, 183, 70, 24, _("Write delay (ms)"));
{ Fl_Value_Input* o = cntHamlibWriteDelay = new Fl_Value_Input(30, 176, 70, 24, _("Write delay (ms)"));
cntHamlibWriteDelay->tooltip(_("Msec\'s between sequential commands"));
cntHamlibWriteDelay->callback((Fl_Callback*)cb_cntHamlibWriteDelay);
cntHamlibWriteDelay->align(FL_ALIGN_TOP_LEFT);
o->value(progdefaults.HamlibWriteDelay);
} // Fl_Value_Input* cntHamlibWriteDelay
{ Fl_Value_Input* o = cntHamlibWait = new Fl_Value_Input(156, 182, 70, 24, _("Post write delay (ms)"));
{ Fl_Value_Input* o = cntHamlibWait = new Fl_Value_Input(156, 176, 70, 24, _("Post write delay (ms)"));
cntHamlibWait->tooltip(_("Wait interval (msecs) before reading response"));
cntHamlibWait->callback((Fl_Callback*)cb_cntHamlibWait);
cntHamlibWait->align(FL_ALIGN_TOP_LEFT);
o->value(progdefaults.HamlibWait);
} // Fl_Value_Input* cntHamlibWait
{ Fl_Choice* o = mnuBaudRate = new Fl_Choice(385, 138, 99, 22, _("Baud rate:"));
{ Fl_Choice* o = mnuBaudRate = new Fl_Choice(385, 127, 99, 22, _("Baud rate:"));
mnuBaudRate->tooltip(_("Serial port baud rate"));
mnuBaudRate->down_box(FL_BORDER_BOX);
mnuBaudRate->callback((Fl_Callback*)cb_mnuBaudRate);
mnuBaudRate->align(FL_ALIGN_TOP_LEFT);
o->add(szBaudRates);
o->value(progdefaults.HamRigBaudrate);
} // Fl_Choice* mnuBaudRate
@ -3957,6 +3983,19 @@ an merging"));
chkHamlibXONXOFFflow->callback((Fl_Callback*)cb_chkHamlibXONXOFFflow);
o->value(progdefaults.HamlibXONXOFFflow);
} // Fl_Check_Button* chkHamlibXONXOFFflow
{ Fl_Value_Slider* o = valHamRigStopbits = new Fl_Value_Slider(424, 162, 60, 22, _("Stopbits"));
valHamRigStopbits->type(1);
valHamRigStopbits->color(FL_BACKGROUND2_COLOR);
valHamRigStopbits->selection_color((Fl_Color)40);
valHamRigStopbits->minimum(1);
valHamRigStopbits->maximum(2);
valHamRigStopbits->step(1);
valHamRigStopbits->value(2);
valHamRigStopbits->textsize(14);
valHamRigStopbits->callback((Fl_Callback*)cb_valHamRigStopbits);
valHamRigStopbits->align(FL_ALIGN_LEFT);
o->value(progdefaults.HamRigStopbits);
} // Fl_Value_Slider* valHamRigStopbits
grpHamlib->end();
} // Fl_Group* grpHamlib
tabHamlib->end();

Wyświetl plik

@ -89,8 +89,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
@ -1508,7 +1508,7 @@ 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
@ -1620,7 +1620,7 @@ progdefaults.changed = true;}
}
Fl_Group {} {
label RigCAT open
tooltip {Rig Control using xml spec file} xywh {0 50 500 320}
tooltip {Rig Control using xml spec file} xywh {0 50 500 320} hide
} {
Fl_Check_Button chkUSERIGCAT {
label {Use RigCAT}
@ -1697,7 +1697,7 @@ progdefaults.changed = true;}
btnInitRIGCAT->labelcolor(FL_RED);
btnInitRIGCAT->redraw_label();
progdefaults.changed = true;} open
tooltip {Pick baud rate from list} xywh {386 154 99 22} down_box BORDER_BOX
tooltip {Pick baud rate from list} xywh {386 150 99 22} down_box BORDER_BOX
code0 {o->add(szBaudRates);}
code1 {o->value(progdefaults.XmlRigBaudrate);}
} {}
@ -1792,11 +1792,18 @@ progdefaults.changed = true;}
tooltip {Rig uses RTS/CTS handshake} xywh {50 320 170 20} down_box DOWN_BOX
code0 {o->value(progdefaults.RigCatRTSCTSflow);}
}
Fl_Value_Slider valRigCatStopbits {
label Stopbits
callback {progdefaults.RigCatStopbits = (int)o->value();
progdefaults.changed = true;}
xywh {425 190 60 22} type Horizontal color 7 selection_color 40 align 4 minimum 1 maximum 2 step 1 value 2 textsize 14
code0 {o->value(progdefaults.RigCatStopbits);}
}
}
}
Fl_Group tabHamlib {
label Hamlib open
xywh {0 50 500 320} hide
xywh {0 50 500 320}
} {
Fl_Check_Button chkUSEHAMLIB {
label {Use Hamlib}
@ -1843,7 +1850,7 @@ btnInitHAMLIB->redraw_label();} open
callback {progdefaults.HamlibRetries = (int)o->value();
btnInitHAMLIB->labelcolor(FL_RED);
btnInitHAMLIB->redraw_label();}
tooltip {\# times to resend command before giving up} xywh {30 137 70 24} align 5
tooltip {\# times to resend command before giving up} xywh {30 133 70 24} align 5
code0 {o->value(progdefaults.HamlibRetries);}
}
Fl_Value_Input cntHamlibTimeout {
@ -1851,7 +1858,7 @@ btnInitHAMLIB->redraw_label();}
callback {progdefaults.HamlibTimeout = (int)o->value();
btnInitHAMLIB->labelcolor(FL_RED);
btnInitHAMLIB->redraw_label();}
tooltip {Msec's between retries} xywh {155 137 70 24} align 5
tooltip {Msec's between retries} xywh {155 133 70 24} align 5
code0 {o->value(progdefaults.HamlibTimeout);}
}
Fl_Value_Input cntHamlibWriteDelay {
@ -1859,7 +1866,7 @@ btnInitHAMLIB->redraw_label();}
callback {progdefaults.HamlibWriteDelay = (int)o->value();
btnInitHAMLIB->labelcolor(FL_RED);
btnInitHAMLIB->redraw_label();}
tooltip {Msec's between sequential commands} xywh {30 183 70 24} align 5
tooltip {Msec's between sequential commands} xywh {30 176 70 24} align 5
code0 {o->value(progdefaults.HamlibWriteDelay);}
}
Fl_Value_Input cntHamlibWait {
@ -1867,7 +1874,7 @@ btnInitHAMLIB->redraw_label();}
callback {progdefaults.HamlibWait = (int)o->value();
btnInitHAMLIB->labelcolor(FL_RED);
btnInitHAMLIB->redraw_label();}
tooltip {Wait interval (msecs) before reading response} xywh {156 182 70 24} align 5
tooltip {Wait interval (msecs) before reading response} xywh {156 176 70 24} align 5
code0 {o->value(progdefaults.HamlibWait);}
}
Fl_Choice mnuBaudRate {
@ -1875,7 +1882,7 @@ btnInitHAMLIB->redraw_label();}
callback {progdefaults.HamRigBaudrate = o->value();
btnInitHAMLIB->labelcolor(FL_RED);
btnInitHAMLIB->redraw_label();} open
tooltip {Serial port baud rate} xywh {385 138 99 22} down_box BORDER_BOX align 5
tooltip {Serial port baud rate} xywh {385 127 99 22} down_box BORDER_BOX
code0 {o->add(szBaudRates);}
code1 {o->value(progdefaults.HamRigBaudrate);}
} {}
@ -1965,6 +1972,13 @@ btnInitHAMLIB->redraw_label();}
tooltip {Rig requires Xon/Xoff flow control} xywh {269 281 185 20} down_box DOWN_BOX
code0 {o->value(progdefaults.HamlibXONXOFFflow);}
}
Fl_Value_Slider valHamRigStopbits {
label Stopbits
callback {progdefaults.HamRigStopbits = (int)o->value();
progdefaults.changed = true;} selected
xywh {424 162 60 22} type Horizontal color 7 selection_color 40 align 4 minimum 1 maximum 2 step 1 value 2 textsize 14
code0 {o->value(progdefaults.HamRigStopbits);}
}
}
}
Fl_Group {} {

Wyświetl plik

@ -220,6 +220,7 @@ extern Fl_Round_Button *btnRigCatDTRptt;
extern Fl_Check_Button *btnRigCatRTSplus;
extern Fl_Check_Button *btnRigCatDTRplus;
extern Fl_Check_Button *chkRigCatRTSCTSflow;
extern Fl_Value_Slider *valRigCatStopbits;
extern Fl_Group *tabHamlib;
extern Fl_Check_Button *chkUSEHAMLIB;
extern Fl_Group *grpHamlib;
@ -239,6 +240,7 @@ extern Fl_Check_Button *btnHamlibDTRplus;
extern Fl_Check_Button *chkHamlibRTSplus;
extern Fl_Check_Button *chkHamlibRTSCTSflow;
extern Fl_Check_Button *chkHamlibXONXOFFflow;
extern Fl_Value_Slider *valHamRigStopbits;
extern Fl_Group *grpMemmap;
extern Fl_Check_Button *chkUSEMEMMAP;
extern Fl_Round_Button *btnMEMMAPptt;

Wyświetl plik

@ -539,6 +539,9 @@
" 0: 300; 1: 600; 2: 1200; 3: 2400; 4: 4800; 5: 9600; 6: 19200;\n" \
" 7: 38400; 8: 57600; 9: 115200; 10: 230400; 11: 460800.", \
1) /* 600 baud */ \
ELEM_(int, HamRigStopbits, "HAMRIGSTOPBITS", \
"Hamlib stopbits <1/2>.", \
2) /* 600 baud */ \
ELEM_(std::string, XmlRigFilename, "XMLRIGFILENAME", \
"RigCAT XML file name", \
"") \
@ -548,6 +551,9 @@
ELEM_(int, XmlRigBaudrate, "XMLRIGBAUDRATE", \
"RigCAT rig baud rate. See HAMRIGBAUDRATE.", \
1) /* 600 baud */ \
ELEM_(int, RigCatStopbits, "RIGCATSTOPBITS", \
"RigCAT stopbits. <1/2>", \
2) /* 600 baud */ \
ELEM_(bool, TTYptt, "TTYPTT", \
"Use separate device for PTT", \
false) \

Wyświetl plik

@ -52,6 +52,9 @@ public:
bool RTSCTS(){return rtscts;}
void SetPTT(bool b);
void Stopbits(int n) {stopbits = (n == 1 ? 1 : 2);}
int Stopbits() { return stopbits;}
int ReadBuffer (unsigned char *b, int nbr);
int WriteBuffer(unsigned char *str, int nbr);
void FlushBuffer();
@ -72,6 +75,7 @@ private:
bool rts;
bool rtsptt;
bool rtscts;
int stopbits;
char bfr[2048];
//Methods
bool IOselect();
@ -88,6 +92,7 @@ public:
rtsptt = dtrptt = false;
rtscts = false;
baud = CBR_9600;
stopbits = 2;
};
Cserial( std::string portname) {
device = portname;
@ -148,6 +153,9 @@ public:
bool RTSCTS(){return rtscts;}
void SetPTT(bool b);
void Stopbits(int n) {stopbits = (n == 1 ? 1 : 2);}
int Stopbits() { return stopbits;}
//Members
private:
std::string device;
@ -182,7 +190,7 @@ private:
bool rts;
bool rtsptt;
bool rtscts;
int stopbits;
};
#endif // __MINGW32__

Wyświetl plik

@ -122,6 +122,11 @@ void hamlib_get_defaults()
chkHamlibRTSCTSflow->value(progdefaults.HamlibRTSCTSflow);
chkHamlibXONXOFFflow->value(progdefaults.HamlibXONXOFFflow);
xcvr->getConf("stop_bits", szParam);
progdefaults.HamRigStopbits = 2;
if (strcmp(szParam, "1") == 0) progdefaults.HamRigStopbits = 1;
valHamRigStopbits->value(progdefaults.HamRigStopbits);
xcvr->close();
}
@ -186,6 +191,7 @@ bool hamlib_init(bool bPtt)
else
xcvr->setConf("serial_handshake", "None");
}
xcvr->setConf("stop_bits", progdefaults.HamRigStopbits == 1 ? "1" : "2");
string::size_type c = progdefaults.HamConfig.find('#');
if (c != string::npos)
@ -200,7 +206,6 @@ bool hamlib_init(bool bPtt)
conf += end;
}
}
xcvr->open();
}
catch (const RigException& Ex) {

Wyświetl plik

@ -50,8 +50,8 @@ const struct rig_caps* Rig::getCaps(void)
void Rig::open(void)
{
int err;
if ((err = rig_open(rig)) != RIG_OK)
int err = rig_open(rig);
if (err != RIG_OK)
throw RigException(err);
}

Wyświetl plik

@ -984,11 +984,13 @@ bool rigCAT_init(bool useXML)
rigio.RTSptt(progdefaults.RigCatRTSptt);
rigio.DTRptt(progdefaults.RigCatDTRptt);
rigio.RTSCTS(progdefaults.RigCatRTSCTSflow);
rigio.Stopbits(progdefaults.RigCatStopbits);
LOG_INFO("\n\
Serial port parameters:\n\
device : %s\n\
baudrate : %d\n\
stopbits : %d\n\
retries : %d\n\
timeout : %d\n\
wait : %d\n\
@ -1000,6 +1002,7 @@ flowcontrol: %c\n\
echo : %c\n",
rigio.Device().c_str(),
rigio.Baud(),
rigio.Stopbits(),
progdefaults.RigCatRetries,
progdefaults.RigCatTimeout,
progdefaults.RigCatWait,

Wyświetl plik

@ -38,6 +38,7 @@ Cserial::Cserial() {
rtsptt = dtrptt = false;
rtscts = false;
status = 0;
stopbits = 2;
fd = -1;
}
@ -69,7 +70,7 @@ bool Cserial::OpenPort() {
newtio.c_cflag &= ~PARENB;
if (0)
if (stopbits == 1)
newtio.c_cflag &= ~CSTOPB; // 1 stop bit
else
newtio.c_cflag |= CSTOPB; // 2 stop bit
@ -284,7 +285,7 @@ BOOL Cserial::OpenPort()
if(hComm == INVALID_HANDLE_VALUE)
return FALSE;
ConfigurePort( baud, 8, FALSE, NOPARITY, ONESTOPBIT);
ConfigurePort( baud, 8, FALSE, NOPARITY, stopbits);
FlushBuffer();