Upstream version 3.0preR

pull/2/head
Stelios Bounanos 2008-07-08 11:13:03 +01:00
rodzic 7205cac932
commit 9f8298afa5
11 zmienionych plików z 181 dodań i 29 usunięć

Wyświetl plik

@ -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, [preQ])
m4_define(FLDIGI_PATCH, [preR])
AC_INIT([fldigi], FLDIGI_MAJOR.FLDIGI_MINOR[FLDIGI_PATCH], [w1hkj AT w1hkj DOT com])

Wyświetl plik

@ -969,6 +969,13 @@ static void cb_valTHOR_SOFT(Fl_Check_Button* o, void*) {
progdefaults.changed = true;
}
Fl_Value_Slider *valThorCWI=(Fl_Value_Slider *)0;
static void cb_valThorCWI(Fl_Value_Slider* o, void*) {
progdefaults.ThorCWI = o->value();
progdefaults.changed = true;
}
Fl_Group *tabDomEX=(Fl_Group *)0;
Fl_Input *txtSecondary=(Fl_Input *)0;
@ -1008,6 +1015,13 @@ static void cb_valDominoEX_PATHS(Fl_Counter* o, void*) {
progdefaults.changed = true;
}
Fl_Value_Slider *valDomCWI=(Fl_Value_Slider *)0;
static void cb_valDomCWI(Fl_Value_Slider* o, void*) {
progdefaults.DomCWI = o->value();
progdefaults.changed = true;
}
Fl_Group *tabFeld=(Fl_Group *)0;
Fl_Choice *selHellFont=(Fl_Choice *)0;
@ -1372,6 +1386,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:");
} // Fl_Input* inpMyCallsign
{ inpMyName = new Fl_Input(78, 62, 120, 24, "Name:");
@ -2050,7 +2065,6 @@ l with your sound hardware.");
{ tabModems = new Fl_Group(0, 25, 401, 195, "Modem");
tabModems->color((Fl_Color)51);
tabModems->selection_color((Fl_Color)51);
tabModems->hide();
{ tabsModems = new Fl_Tabs(0, 25, 401, 195);
tabsModems->color((Fl_Color)51);
tabsModems->selection_color((Fl_Color)10);
@ -2244,12 +2258,19 @@ l with your sound hardware.");
valTHOR_SOFT->callback((Fl_Callback*)cb_valTHOR_SOFT);
o->value(progdefaults.THOR_SOFT);
} // Fl_Check_Button* valTHOR_SOFT
{ Fl_Value_Slider* o = valThorCWI = new Fl_Value_Slider(120, 174, 260, 21, "CWI threshold:");
valThorCWI->type(1);
valThorCWI->step(0.01);
valThorCWI->textsize(14);
valThorCWI->callback((Fl_Callback*)cb_valThorCWI);
valThorCWI->align(FL_ALIGN_LEFT);
o->value(progdefaults.ThorCWI);
} // Fl_Value_Slider* valThorCWI
tabTHOR->end();
} // Fl_Group* tabTHOR
{ tabDomEX = new Fl_Group(0, 50, 400, 170, "Dom");
tabDomEX->color((Fl_Color)51);
tabDomEX->selection_color((Fl_Color)51);
tabDomEX->hide();
{ txtSecondary = new Fl_Input(20, 75, 360, 44, "Secondary Text");
txtSecondary->type(4);
txtSecondary->callback((Fl_Callback*)cb_txtSecondary);
@ -2286,6 +2307,14 @@ l with your sound hardware.");
valDominoEX_PATHS->hide();
o->value(progdefaults.DOMINOEX_PATHS);
} // Fl_Counter* valDominoEX_PATHS
{ Fl_Value_Slider* o = valDomCWI = new Fl_Value_Slider(125, 179, 260, 21, "CWI threshold:");
valDomCWI->type(1);
valDomCWI->step(0.01);
valDomCWI->textsize(14);
valDomCWI->callback((Fl_Callback*)cb_valDomCWI);
valDomCWI->align(FL_ALIGN_LEFT);
o->value(progdefaults.DomCWI);
} // Fl_Value_Slider* valDomCWI
tabDomEX->end();
} // Fl_Group* tabDomEX
{ tabFeld = new Fl_Group(0, 50, 400, 170, "Feld");
@ -2403,6 +2432,7 @@ l with your sound hardware.");
tabOlivia->end();
} // Fl_Group* tabOlivia
{ tabPSK = new Fl_Group(0, 50, 400, 170, "Psk");
tabPSK->hide();
{ Fl_Counter* o = cntSearchRange = new Fl_Counter(11, 60, 80, 21, "Acq Srch Range");
cntSearchRange->type(1);
cntSearchRange->minimum(10);

Wyświetl plik

@ -39,15 +39,15 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
code {} {}
Fl_Window {} {
label {fldigi - config} open
xywh {875 516 400 250} type Double color 45 selection_color 51 align 80 visible
xywh {849 557 400 250} type Double color 45 selection_color 51 align 80 visible
} {
Fl_Tabs tabsConfigure {open
xywh {0 0 405 220} color 47 selection_color 9
} {
Fl_Group tabOperator {
label Oper
callback {progdefaults.changed = true;} selected
xywh {0 25 400 195} color 51 selection_color 51 when 1
callback {progdefaults.changed = true;}
xywh {0 25 400 195} color 51 selection_color 51 when 1 hide
} {
Fl_Input inpMyCallsign {
label {Callsign:}
@ -985,7 +985,7 @@ progdefaults.changed = true;}
}
Fl_Group tabModems {
label Modem open
xywh {0 25 401 195} color 51 selection_color 51 hide
xywh {0 25 401 195} color 51 selection_color 51
} {
Fl_Tabs tabsModems {open
xywh {0 25 401 195} color 51 selection_color 10 align 9
@ -1155,10 +1155,17 @@ progdefaults.changed = true;}
xywh {215 130 108 20} down_box DOWN_BOX
code0 {o->value(progdefaults.THOR_SOFT);}
}
Fl_Value_Slider valThorCWI {
label {CWI threshold:}
callback {progdefaults.ThorCWI = o->value();
progdefaults.changed = true;}
xywh {120 174 260 21} type Horizontal align 4 step 0.01 textsize 14
code0 {o->value(progdefaults.ThorCWI);}
}
}
Fl_Group tabDomEX {
label Dom open
xywh {0 50 400 170} color 51 selection_color 51 hide
xywh {0 50 400 170} color 51 selection_color 51
} {
Fl_Input txtSecondary {
label {Secondary Text}
@ -1196,6 +1203,13 @@ progdefaults.changed = true;}
xywh {20 174 63 21} type Simple minimum 4 maximum 8 step 1 value 5 hide
code0 {o->value(progdefaults.DOMINOEX_PATHS);}
}
Fl_Value_Slider valDomCWI {
label {CWI threshold:}
callback {progdefaults.DomCWI = o->value();
progdefaults.changed = true;} selected
xywh {125 179 260 21} type Horizontal align 4 step 0.01 textsize 14
code0 {o->value(progdefaults.DomCWI);}
}
}
Fl_Group tabFeld {
label Feld open
@ -1329,7 +1343,7 @@ progdefaults.changed = true;}
}
Fl_Group tabPSK {
label Psk open
xywh {0 50 400 170}
xywh {0 50 400 170} hide
} {
Fl_Counter cntSearchRange {
label {Acq Srch Range}

Wyświetl plik

@ -78,6 +78,9 @@ void dominoex::rx_init()
syncfilter->reset();
Mu_datashreg = 1;
staticburst = false;
set_AFCrange(0.1);
set_AFCind(0.0);
}
@ -361,8 +364,8 @@ void dominoex::decodeDomino(int c)
ch = dominoex_varidec(sym);
if (!progdefaults.DOMINOEX_FEC)
recvchar(ch);
if (staticburst == false && outofrange == false)
recvchar(ch);
}
symcounter = 0;
}
@ -389,6 +392,12 @@ void dominoex::decodesymbol()
if (reverse) fdiff = -fdiff;
fdiff /= doublespaced;
fdiff /= paths;
if (fabs(fdiff) > 17)
outofrange = true;
else
outofrange = false;
c = (int)floor(fdiff + .5) - 2;
if (c < 0) c += NUMTONES;
@ -400,13 +409,43 @@ int dominoex::harddecode()
{
double x, max = 0.0;
int symbol = 0;
double avg = 0.0;
bool cwi[paths * numbins];
double cwmag;
for (int i = 0; i < paths * numbins; i++)
avg += pipe[pipeptr].vector[i].mag();
avg /= (paths * numbins);
if (avg < 1e-10) avg = 1e-10;
int numtests = 10;
int count = 0;
for (int i = 0; i < paths * numbins; i++) {
cwmag = 0.0;
count = 0;
for (int j = 1; j <= numtests; j++) {
int p = pipeptr - j;
if (p < 0) p += twosym;
cwmag = (pipe[j].vector[i].mag())/numtests;
if (cwmag >= 50.0 * (1.0 - progdefaults.ThorCWI) * avg) count++;
}
cwi[i] = (count == numtests);
}
for (int i = 0; i < (paths * numbins); i++) {
x = pipe[pipeptr].vector[i].mag();
if (x > max) {
max = x;
symbol = i;
if (cwi[i] == false) {
x = pipe[pipeptr].vector[i].mag();
avg += x;
if (x > max) {
max = x;
symbol = i;
}
}
}
staticburst = (max / avg < 1.2);
return symbol;
}
@ -458,6 +497,8 @@ void dominoex::synchronize()
double syn = -1;
double val, max = 0.0;
if (staticburst == true) return;
if (currsymbol == prev1symbol)
return;
if (prev1symbol == prev2symbol)
@ -475,6 +516,10 @@ void dominoex::synchronize()
syn = syncfilter->run(syn);
synccounter += (int) floor(1.0 * (syn - symlen) / NUMTONES + 0.5);
set_AFCind(1.0 * (synccounter - symlen) / symlen);
update_syncscope();
}
@ -546,7 +591,7 @@ int dominoex::rx_process(const double *buf, int len)
currsymbol = harddecode();
decodesymbol();
synchronize();
update_syncscope();
// update_syncscope();
eval_s2n();
prev2symbol = prev1symbol;
prev1symbol = currsymbol;
@ -783,7 +828,9 @@ void dominoex::decodeMuPskEX(int ch)
else symbols[3-i] = 1;//-255;
c = c / 2;
}
if (staticburst == true || outofrange == true)
symbols[3] = symbols[2] = symbols[1] = symbols[0] = 0;
MuPskRxinlv->symbols(symbols);
for (int i = 0; i < 4; i++) decodeMuPskSymbol(symbols[i]);

Wyświetl plik

@ -148,12 +148,14 @@ extern Fl_Counter *valTHOR_BW;
extern Fl_Check_Button *valTHOR_FILTER;
extern Fl_Counter *valTHOR_PATHS;
extern Fl_Check_Button *valTHOR_SOFT;
extern Fl_Value_Slider *valThorCWI;
extern Fl_Group *tabDomEX;
extern Fl_Input *txtSecondary;
extern Fl_Counter *valDominoEX_BW;
extern Fl_Check_Button *valDominoEX_FILTER;
extern Fl_Check_Button *chkDominoEX_FEC;
extern Fl_Counter *valDominoEX_PATHS;
extern Fl_Value_Slider *valDomCWI;
extern Fl_Group *tabFeld;
#include "fontdef.h"
extern Fl_Choice *selHellFont;

Wyświetl plik

@ -89,11 +89,13 @@ struct configuration {
string THORsecText;
int THOR_PATHS;
bool THOR_SOFT;
double ThorCWI;
// DOMINOEX
double DOMINOEX_BW;
bool DOMINOEX_FILTER;
bool DOMINOEX_FEC;
int DOMINOEX_PATHS;
double DomCWI;
// MT63
bool mt63_8bit;
int mt63_interleave;

Wyświetl plik

@ -119,6 +119,8 @@ protected:
int symbolbit;
bool filter_reset;
bool staticburst;
bool outofrange;
// tx variables
int txstate;

Wyświetl plik

@ -122,6 +122,7 @@ protected:
int symbolbit;
bool filter_reset;
bool staticburst;
// tx variables
int txstate;

Wyświetl plik

@ -540,7 +540,7 @@ void mfsk::afc()
sigsearch = 0;
}
if (progStatus.afconoff && (metric > progStatus.sldrSquelchValue || progStatus.sqlonoff == false)) {
if ( progStatus.afconoff == true && metric > progStatus.sldrSquelchValue ) {
if (pipeptr == 0)
prevvector = pipe[2*symlen - 1].vector[currsymbol];

Wyświetl plik

@ -94,11 +94,13 @@ configuration progdefaults = {
"fldigi-thor ", // string THORsecText;
5, // int THOR_PATHS;
false, // bool THOR_SOFT;
0.0, // double ThorCWI;
// DOMINOEX
2.0, // double DOMINOEX_BW;
true, // bool DOMINOEX_FILTER
false, // bool DOMINOEX_FEC
5, // int DOMINOEX_PATHS
0.0, // double DomCWI;
// MT63
false, // bool mt63_8bit;
32, // int mt63_interleave;
@ -267,8 +269,8 @@ enum TAG { \
CWTRACK, CWRISETIME, CWDASH2DOT,
XQSK, CWPRE, CWPOST, CWID, CWIDWPM,
OLIVIATONES, OLIVIABW, OLIVIASMARGIN, OLIVIASINTEG, OLIVIA8BIT,
THORBW, THORFILTER, THORSECTEXT, THORPATHS, THORSOFT,
DOMINOEXBW, DOMINOEXFILTER, DOMINOEXFEC, DOMINOEXPATHS,
THORBW, THORFILTER, THORSECTEXT, THORPATHS, THORSOFT, THORCWI,
DOMINOEXBW, DOMINOEXFILTER, DOMINOEXFEC, DOMINOEXPATHS, DOMCWI,
FELDFONTNBR,
HELLRCVWIDTH, HELLXMTWIDTH, HELLBLACKBOARD, HELLPULSEFAST, HELLXMTIDLE,
WFPREFILTER, LATENCY,
@ -416,11 +418,13 @@ void configuration::writeDefaultsXML()
writeXMLstr(f, "THORSECTEXT", THORsecText);
writeXMLint(f, "THORPATHS", THOR_PATHS);
writeXMLbool(f, "THORSOFT", THOR_SOFT);
writeXMLdbl(f, "THORCWI", ThorCWI);
writeXMLdbl(f, "DOMINOEXBW", DOMINOEX_BW);
writeXMLbool(f, "DOMINOEXFILTER", DOMINOEX_FILTER);
writeXMLbool(f, "DOMINOEXFEC", DOMINOEX_FEC);
writeXMLint(f, "DOMINOEXPATHS", DOMINOEX_PATHS);
writeXMLdbl(f, "DOMCWI", DomCWI);
writeXMLint(f, "FELDFONTNBR", feldfontnbr);
writeXMLbool(f, "HELLRCVWIDTH", HellRcvWidth);
@ -735,6 +739,9 @@ bool configuration::readDefaultsXML()
case THORSOFT :
THOR_SOFT = atoi(xml->getNodeData());
break;
case THORCWI :
ThorCWI = atof(xml->getNodeData());
break;
case DOMINOEXBW :
DOMINOEX_BW = atof(xml->getNodeData());
break;
@ -747,6 +754,9 @@ bool configuration::readDefaultsXML()
case DOMINOEXPATHS :
DOMINOEX_PATHS = atoi(xml->getNodeData());
break;
case DOMCWI :
DomCWI = atof(xml->getNodeData());
break;
case FELDFONTNBR :
feldfontnbr = atoi(xml->getNodeData());
break;
@ -1132,10 +1142,12 @@ bool configuration::readDefaultsXML()
else if (!strcmp("THORSECTEXT", nodeName)) tag = THORSECTEXT;
else if (!strcmp("THORPATHS", nodeName)) tag = THORPATHS;
else if (!strcmp("THORSOFT", nodeName)) tag = THORSOFT;
else if (!strcmp("THORCWI", nodeName)) tag = THORCWI;
else if (!strcmp("DOMINOEXBW", nodeName)) tag = DOMINOEXBW;
else if (!strcmp("DOMINOEXFILTER", nodeName)) tag = DOMINOEXFILTER;
else if (!strcmp("DOMINOEXFEC", nodeName)) tag = DOMINOEXFEC;
else if (!strcmp("DOMINOEXPATHS", nodeName)) tag = DOMINOEXPATHS;
else if (!strcmp("DOMCWI", nodeName)) tag = DOMCWI;
else if (!strcmp("FELDFONTNBR", nodeName)) tag = FELDFONTNBR;
else if (!strcmp("HELLRCVWIDTH", nodeName)) tag = HELLRCVWIDTH;
else if (!strcmp("HELLXMTWIDTH", nodeName)) tag = HELLXMTWIDTH;
@ -1361,11 +1373,13 @@ int configuration::setDefaults() {
valTHOR_FILTER->value(THOR_FILTER);
valTHOR_PATHS->value(THOR_PATHS);
valTHOR_SOFT->value(THOR_SOFT);
valThorCWI->value(ThorCWI);
valDominoEX_BW->value(DOMINOEX_BW);
valDominoEX_FILTER->value(DOMINOEX_FILTER);
chkDominoEX_FEC->value(DOMINOEX_FEC);
valDominoEX_PATHS->value(DOMINOEX_PATHS);
valDomCWI->value(DomCWI);
for (int i = 0; i < 5; i++) {
btnPTT[i]->value(0);

Wyświetl plik

@ -71,6 +71,7 @@ void thor::rx_init()
put_sec_char(0);
syncfilter->reset();
datashreg = 1;
set_AFCrange(0.1);
set_AFCind(0.0);
}
@ -315,14 +316,18 @@ void thor::decodesymbol()
int c;
double fdiff, softmag;
unsigned char symbols[4];
bool outofrange = false;
// Decode the IFK+ sequence, which results in a single nibble
fdiff = currsymbol - prev1symbol;
if (reverse) fdiff = -fdiff;
fdiff /= paths;
fdiff /= doublespaced;
if (fabs(fdiff) > 17) outofrange = true;
c = (int)floor(fdiff + .5) - 2;
if (c < 0) c += THORNUMTONES;
@ -332,16 +337,18 @@ void thor::decodesymbol()
softmag = clamp(255.0 * currmag / avgsig, 0.0, 255.0);
if (progdefaults.THOR_SOFT == false) {
if (staticburst == true || outofrange == true) // puncture the code
symbols[3] = symbols[2] = symbols[1] = symbols[0] = 0;
else if (progdefaults.THOR_SOFT == false) {
symbols[3] = (c & 1) == 1 ? 255 : 0; c /= 2;
symbols[2] = (c & 1) == 1 ? 255 : 0; c /= 2;
symbols[1] = (c & 1) == 1 ? 255 : 0; c /= 2;
symbols[0] = (c & 1) == 1 ? 255 : 0; c /= 2;
} else {
symbols[3] = (c & 1) == 1 ? softmag : 0; c /= 2;
symbols[2] = (c & 1) == 1 ? softmag : 0; c /= 2;
symbols[1] = (c & 1) == 1 ? softmag : 0; c /= 2;
symbols[0] = (c & 1) == 1 ? softmag : 0; c /= 2;
symbols[3] = (int)((c & 1) == 1 ? softmag : 0); c /= 2;
symbols[2] = (int)((c & 1) == 1 ? softmag : 0); c /= 2;
symbols[1] = (int)((c & 1) == 1 ? softmag : 0); c /= 2;
symbols[0] = (int)((c & 1) == 1 ? softmag : 0); c /= 2;
}
Rxinlv->symbols(symbols);
@ -354,13 +361,42 @@ int thor::harddecode()
{
double x, max = 0.0;
int symbol = 0;
double avg = 0.0;
bool cwi[paths * numbins];
double cwmag;
for (int i = 0; i < paths * numbins; i++)
avg += pipe[pipeptr].vector[i].mag();
avg /= (paths * numbins);
if (avg < 1e-10) avg = 1e-10;
int numtests = 10;
int count = 0;
for (int i = 0; i < paths * numbins; i++) {
cwmag = 0.0;
count = 0;
for (int j = 1; j <= numtests; j++) {
int p = pipeptr - j;
if (p < 0) p += twosym;
cwmag = (pipe[j].vector[i].mag())/numtests;
if (cwmag >= 50.0 * (1.0 - progdefaults.ThorCWI) * avg) count++;
}
cwi[i] = (count == numtests);
}
for (int i = 0; i < paths * numbins ; i++) {
x = pipe[pipeptr].vector[i].mag();
if (x > max) {
max = x;
symbol = i;
if (cwi[i] == false) {
x = pipe[pipeptr].vector[i].mag();
if (x > max) {
max = x;
symbol = i;
}
}
}
staticburst = (max / avg < 1.2);
return symbol;
}
@ -407,6 +443,8 @@ void thor::synchronize()
double syn = -1;
double val, max = 0.0;
if (staticburst == true) return;
if (currsymbol == prev1symbol)
return;
if (prev1symbol == prev2symbol)
@ -425,6 +463,8 @@ void thor::synchronize()
synccounter += (int) floor(1.0 * (syn - symlen) / THORNUMTONES + 0.5);
set_AFCind(1.0 * (synccounter - symlen) / symlen);
update_syncscope();
}