kopia lustrzana https://github.com/jamescoxon/dl-fldigi
CW Farnsworth
* Changed method of generating Farnsworth code * Added Farnsworth specifier to WPM macro tag; <WPM:WW:FF> WW = WPM, FF = Farnsworth WPMpull/2/head
rodzic
ae08433b05
commit
ce90378544
|
@ -260,7 +260,7 @@ cw::cw() : modem()
|
|||
cw_send_dot_length = DOT_MAGIC / cw_send_speed;
|
||||
cw_send_dash_length = 3 * cw_send_dot_length;
|
||||
symbollen = (int)(samplerate * 1.2 / progdefaults.CWspeed);
|
||||
fsymlen = (int)((50*(samplerate * 1.2 / progdefaults.CWfarnsworth) - 41*symbollen)/9);
|
||||
fsymlen = (int)(samplerate * 1.2 / progdefaults.CWfarnsworth);
|
||||
|
||||
memset(rx_rep_buf, 0, sizeof(rx_rep_buf));
|
||||
|
||||
|
@ -353,7 +353,7 @@ void cw::reset_rx_filter()
|
|||
cw_send_dot_length = DOT_MAGIC / cw_send_speed;
|
||||
cw_send_dash_length = 3 * cw_send_dot_length;
|
||||
symbollen = (int)(samplerate * 1.2 / progdefaults.CWspeed);
|
||||
fsymlen = (int)((50*(samplerate * 1.2 / progdefaults.CWfarnsworth) - 41*symbollen)/9);
|
||||
fsymlen = (int)(samplerate * 1.2 / progdefaults.CWfarnsworth);
|
||||
|
||||
phaseacc = 0.0;
|
||||
FFTphase = 0.0;
|
||||
|
@ -386,14 +386,14 @@ void cw::sync_parameters()
|
|||
int lowerwpm, upperwpm, nusymbollen, nufsymlen;
|
||||
|
||||
int wpm = usedefaultWPM ? progdefaults.defCWspeed : progdefaults.CWspeed;
|
||||
int fwpm = usedefaultWPM ? progdefaults.defCWspeed : progdefaults.CWfarnsworth;
|
||||
int fwpm = progdefaults.CWfarnsworth;
|
||||
|
||||
cw_send_dot_length = DOT_MAGIC / progdefaults.CWspeed;
|
||||
|
||||
cw_send_dash_length = 3 * cw_send_dot_length;
|
||||
|
||||
nusymbollen = (int)(samplerate * 1.2 / wpm);
|
||||
nufsymlen = (int)((50*(samplerate * 1.2 / fwpm) - 41*symbollen)/9);
|
||||
nufsymlen = (int)(samplerate * 1.2 / fwpm);
|
||||
|
||||
if (symbollen != nusymbollen ||
|
||||
nufsymlen != fsymlen ||
|
||||
|
@ -1054,7 +1054,7 @@ void cw::send_symbol(int bits, int len)
|
|||
q_carryover = 0;
|
||||
|
||||
} else { // last symbol = 1
|
||||
duration = 2 * symbollen - kpre - knum;
|
||||
duration = 2 * len - kpre - knum;
|
||||
carryover = 0;
|
||||
sample = 0;
|
||||
|
||||
|
@ -1118,10 +1118,7 @@ void cw::send_ch(int ch)
|
|||
|
||||
if ((chout == ' ') || (chout == '\n')) {
|
||||
firstelement = false;
|
||||
if (progdefaults.CWusefarnsworth)
|
||||
flen = 4 * fsymlen;
|
||||
else
|
||||
flen = 4 * symbollen;
|
||||
flen = 4 * symbollen;
|
||||
while (flen - symbollen > 0) {
|
||||
send_symbol(0, symbollen);
|
||||
flen -= symbollen;
|
||||
|
@ -1141,14 +1138,24 @@ void cw::send_ch(int ch)
|
|||
}
|
||||
|
||||
// loop sending out binary bits of cw character
|
||||
// at WPM or Farnsworth rate
|
||||
if (progdefaults.CWusefarnsworth && (progdefaults.CWspeed <= progdefaults.CWfarnsworth))
|
||||
flen = fsymlen;
|
||||
else
|
||||
flen = symbollen;
|
||||
|
||||
int charlen = 0;
|
||||
while (code > 1) {
|
||||
send_symbol(code, symbollen);// & 1);
|
||||
send_symbol(code, flen);
|
||||
charlen++;
|
||||
code = code >> 1;
|
||||
}
|
||||
if (progdefaults.CWusefarnsworth)
|
||||
flen = fsymlen;
|
||||
else
|
||||
flen = symbollen;
|
||||
|
||||
// inter character space at WPM/FWPM rate
|
||||
flen = symbollen;
|
||||
if (progdefaults.CWusefarnsworth && (progdefaults.CWspeed <= progdefaults.CWfarnsworth))
|
||||
flen += (symbollen - fsymlen)*charlen;
|
||||
|
||||
while(flen - symbollen > 0) {
|
||||
send_symbol(0, symbollen);
|
||||
flen -= symbollen;
|
||||
|
|
|
@ -1166,9 +1166,6 @@ Fl_Value_Slider2 *sldrCWxmtWPM=(Fl_Value_Slider2 *)0;
|
|||
static void cb_sldrCWxmtWPM(Fl_Value_Slider2* o, void*) {
|
||||
progdefaults.CWspeed = (int)o->value();
|
||||
cntCW_WPM->value(progdefaults.CWspeed);
|
||||
sldrCWfarnsworth->maximum(progdefaults.CWspeed);
|
||||
if (sldrCWfarnsworth->value() > progdefaults.CWspeed)
|
||||
sldrCWfarnsworth->value(progdefaults.CWspeed);
|
||||
progdefaults.changed = true;
|
||||
sync_cw_parameters();
|
||||
}
|
||||
|
|
|
@ -1403,7 +1403,7 @@ behaves inside the waterfall} xywh {34 207 150 22} down_box BORDER_BOX align 8
|
|||
xywh {-4 25 595 347} selection_color 50 align 9
|
||||
} {
|
||||
Fl_Group tabCW {
|
||||
label CW
|
||||
label CW open
|
||||
xywh {0 50 540 320}
|
||||
} {
|
||||
Fl_Tabs tabsCW {open
|
||||
|
@ -1498,9 +1498,6 @@ progdefaults.changed = true;}
|
|||
label {TX WPM}
|
||||
callback {progdefaults.CWspeed = (int)o->value();
|
||||
cntCW_WPM->value(progdefaults.CWspeed);
|
||||
sldrCWfarnsworth->maximum(progdefaults.CWspeed);
|
||||
if (sldrCWfarnsworth->value() > progdefaults.CWspeed)
|
||||
sldrCWfarnsworth->value(progdefaults.CWspeed);
|
||||
progdefaults.changed = true;
|
||||
sync_cw_parameters();}
|
||||
tooltip {My transmit CW WPM} xywh {20 240 440 20} type Horizontal align 8 minimum 5 maximum 100 step 1 value 20 textsize 14
|
||||
|
|
|
@ -3777,9 +3777,6 @@ void cb_cntCW_WPM(Fl_Widget * w, void *v)
|
|||
Fl_Counter2 *cnt = (Fl_Counter2 *) w;
|
||||
progdefaults.CWspeed = (int)cnt->value();
|
||||
sldrCWxmtWPM->value(progdefaults.CWspeed);
|
||||
if (sldrCWfarnsworth->value() > progdefaults.CWspeed)
|
||||
sldrCWfarnsworth->value(progdefaults.CWspeed);
|
||||
sldrCWfarnsworth->maximum(progdefaults.CWspeed);
|
||||
progdefaults.changed = true;
|
||||
sync_cw_parameters();
|
||||
restoreFocus();
|
||||
|
|
|
@ -167,7 +167,7 @@ void loadBrowser(Fl_Widget *widget) {
|
|||
w->add(_("<POST:+/-nn.n>\tCW QSK post-timing"));
|
||||
w->add(_("<PRE:nn.n>\tCW QSK pre-timing"));
|
||||
w->add(_("<RISE:nn.n>\tCW rise time"));
|
||||
w->add(_("<WPM:NN>\tCW WPM"));
|
||||
w->add(_("<WPM:NN:FF>\tCW WPM:Farnsworth"));
|
||||
|
||||
w->add(LINE_SEP);
|
||||
w->add(_("<AFC:on|off|t>\tAFC on,off,toggle"));
|
||||
|
|
|
@ -185,14 +185,32 @@ static void pWPM(std::string &s, size_t &i, size_t endbracket)
|
|||
return;
|
||||
}
|
||||
int number;
|
||||
std::string sTime = s.substr(i+5, endbracket - i - 5);
|
||||
if (sTime.length() > 0) {
|
||||
sscanf(sTime.c_str(), "%d", &number);
|
||||
std::string snumber = s.substr(i+5, endbracket - i - 5);
|
||||
|
||||
if (snumber.length() > 0) {
|
||||
|
||||
// first value = WPM
|
||||
sscanf(snumber.c_str(), "%d", &number);
|
||||
if (number < 5) number = 5;
|
||||
if (number > 200) number = 200;
|
||||
progdefaults.CWspeed = number;
|
||||
sldrCWxmtWPM->value(number);
|
||||
printf("wpm %d\n", number);
|
||||
|
||||
// second value = Farnsworth WPM
|
||||
size_t pos;
|
||||
if ((pos = snumber.find(":")) != std::string::npos) {
|
||||
snumber.erase(0, pos+1);
|
||||
if (snumber.length())
|
||||
sscanf(snumber.c_str(), "%d", &number);
|
||||
if (number < 15) number = 15;
|
||||
if (number > 200) number = 200;
|
||||
progdefaults.CWfarnsworth = number;
|
||||
sldrCWfarnsworth->value(number);
|
||||
printf("fwpm %d\n", number);
|
||||
}
|
||||
}
|
||||
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
}
|
||||
|
||||
|
@ -256,17 +274,40 @@ static void setwpm(int d)
|
|||
cntCW_WPM->value(d);
|
||||
}
|
||||
|
||||
static void setfwpm(int d)
|
||||
{
|
||||
sldrCWfarnsworth->value(d);
|
||||
progdefaults.CWusefarnsworth = true;
|
||||
btnCWusefarnsworth->value(1);
|
||||
}
|
||||
|
||||
static void doWPM(std::string s)
|
||||
{
|
||||
int number;
|
||||
std::string sTime = s.substr(6);
|
||||
if (sTime.length() > 0) {
|
||||
sscanf(sTime.c_str(), "%d", &number);
|
||||
std::string snumber = s.substr(6);
|
||||
|
||||
if (snumber.length() > 0) {
|
||||
|
||||
// first value = WPM
|
||||
sscanf(snumber.c_str(), "%d", &number);
|
||||
if (number < 5) number = 5;
|
||||
if (number > 200) number = 200;
|
||||
progdefaults.CWspeed = number;
|
||||
REQ(setwpm, number);
|
||||
|
||||
// second value = Farnsworth WPM
|
||||
size_t pos;
|
||||
if ((pos = snumber.find(":")) != std::string::npos) {
|
||||
snumber.erase(0, pos+1);
|
||||
if (snumber.length())
|
||||
sscanf(snumber.c_str(), "%d", &number);
|
||||
if (number < 15) number = 15;
|
||||
if (number > 200) number = 200;
|
||||
progdefaults.CWfarnsworth = number;
|
||||
REQ(setfwpm, number);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void pQueWPM(std::string &s, size_t &i, size_t endbracket)
|
||||
|
|
Ładowanie…
Reference in New Issue