* Changed method of generating Farnsworth code
  * Added Farnsworth specifier to WPM macro tag;
    <WPM:WW:FF> WW = WPM, FF = Farnsworth WPM
pull/2/head
David Freese 2012-06-28 13:29:55 -05:00
rodzic ae08433b05
commit ce90378544
6 zmienionych plików z 70 dodań i 31 usunięć

Wyświetl plik

@ -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;

Wyświetl plik

@ -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();
}

Wyświetl plik

@ -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

Wyświetl plik

@ -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();

Wyświetl plik

@ -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"));

Wyświetl plik

@ -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)