kopia lustrzana https://github.com/jamescoxon/dl-fldigi
Upstream version 2.10M
rodzic
b295c0f877
commit
b4bd00695e
|
|
@ -19,6 +19,7 @@ Change Log:
|
|||
15) Added support to the PortAudio backend for separate capture and playback
|
||||
devices and sample rates
|
||||
16) Added mt63 500/1000/2000 modes
|
||||
17) Added psk acquisition level control
|
||||
|
||||
2.09 1) Modified src/Makefile.am for FreeBSD name space clash
|
||||
2) Added psk multi-channel viewer with regex search capability
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
AC_COPYRIGHT([Copyright (C) 2007, 2008 Stelios Bounanos, M0GLD (m0gld AT enotty DOT net)])
|
||||
|
||||
AC_PREREQ(2.61)
|
||||
AC_INIT([fldigi], [2.10L], [w1hkj AT w1hkj DOT com])
|
||||
AC_INIT([fldigi], [2.10M], [w1hkj AT w1hkj DOT com])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
|
||||
# define build, build_cpu, build_vendor, build_os
|
||||
|
|
|
|||
|
|
@ -1050,6 +1050,13 @@ static void cb_cntTimeout(Fl_Spinner* o, void*) {
|
|||
progdefaults.changed = true;
|
||||
}
|
||||
|
||||
Fl_Counter *cntACQsn=(Fl_Counter *)0;
|
||||
|
||||
static void cb_cntACQsn(Fl_Counter* o, void*) {
|
||||
progdefaults.ACQsn = (int)o->value();
|
||||
progdefaults.changed = true;
|
||||
}
|
||||
|
||||
Fl_Group *tabMT63=(Fl_Group *)0;
|
||||
|
||||
Fl_Check_Button *btnMT63_8bit=(Fl_Check_Button *)0;
|
||||
|
|
@ -2082,8 +2089,7 @@ fect after a restart.");
|
|||
o->end();
|
||||
}
|
||||
{ Fl_Group* o = tabPSK = new Fl_Group(0, 50, 400, 170, "Psk");
|
||||
o->hide();
|
||||
{ Fl_Counter* o = cntSearchRange = new Fl_Counter(120, 60, 80, 21, "Search Range");
|
||||
{ Fl_Counter* o = cntSearchRange = new Fl_Counter(11, 60, 80, 21, "Acq Srch Range");
|
||||
o->type(1);
|
||||
o->minimum(10);
|
||||
o->maximum(500);
|
||||
|
|
@ -2153,9 +2159,20 @@ fect after a restart.");
|
|||
}
|
||||
o->end();
|
||||
}
|
||||
{ Fl_Counter* o = cntACQsn = new Fl_Counter(220, 60, 80, 21, "Acq s/n (db)");
|
||||
o->type(1);
|
||||
o->minimum(3);
|
||||
o->maximum(20);
|
||||
o->step(1);
|
||||
o->value(6);
|
||||
o->callback((Fl_Callback*)cb_cntACQsn);
|
||||
o->align(FL_ALIGN_RIGHT);
|
||||
o->value(progdefaults.ACQsn);
|
||||
}
|
||||
o->end();
|
||||
}
|
||||
{ Fl_Group* o = tabMT63 = new Fl_Group(0, 50, 400, 170, "MT-63");
|
||||
o->hide();
|
||||
{ Fl_Group* o = new Fl_Group(5, 60, 390, 155);
|
||||
o->box(FL_ENGRAVED_FRAME);
|
||||
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
|
|||
code {} {}
|
||||
Fl_Window {} {
|
||||
label {fldigi - config} open
|
||||
xywh {520 101 400 250} type Double color 45 selection_color 51 align 80 visible
|
||||
xywh {396 414 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
|
||||
|
|
@ -1155,14 +1155,14 @@ progdefaults.changed = true;}
|
|||
}
|
||||
Fl_Group tabPSK {
|
||||
label Psk open
|
||||
xywh {0 50 400 170} hide
|
||||
xywh {0 50 400 170}
|
||||
} {
|
||||
Fl_Counter cntSearchRange {
|
||||
label {Search Range}
|
||||
label {Acq Srch Range}
|
||||
callback {progdefaults.SearchRange = (int)o->value();
|
||||
wf->redraw_marker();
|
||||
progdefaults.changed = true;}
|
||||
xywh {120 60 80 21} type Simple align 8 minimum 10 maximum 500 step 10 value 200
|
||||
xywh {11 60 80 21} type Simple align 8 minimum 10 maximum 500 step 10 value 200
|
||||
code0 {o->value(progdefaults.SearchRange);}
|
||||
}
|
||||
Fl_Group {} {
|
||||
|
|
@ -1237,10 +1237,17 @@ progdefaults.changed = true;}
|
|||
code3 {o->value(progdefaults.VIEWERtimeout);}
|
||||
}
|
||||
}
|
||||
Fl_Counter cntACQsn {
|
||||
label {Acq s/n (db)}
|
||||
callback {progdefaults.ACQsn = (int)o->value();
|
||||
progdefaults.changed = true;} selected
|
||||
xywh {220 60 80 21} type Simple align 8 minimum 3 maximum 20 step 1 value 6
|
||||
code0 {o->value(progdefaults.ACQsn);}
|
||||
}
|
||||
}
|
||||
Fl_Group tabMT63 {
|
||||
label {MT-63} open selected
|
||||
xywh {0 50 400 170}
|
||||
label {MT-63} open
|
||||
xywh {0 50 400 170} hide
|
||||
} {
|
||||
Fl_Group {} {open
|
||||
xywh {5 60 390 155} box ENGRAVED_FRAME align 21
|
||||
|
|
|
|||
|
|
@ -165,6 +165,7 @@ extern Fl_Check_Button *btnShowFrequencies;
|
|||
extern Fl_Spinner *cntChannels;
|
||||
extern Fl_Spinner *cntStartFrequency;
|
||||
extern Fl_Spinner *cntTimeout;
|
||||
extern Fl_Counter *cntACQsn;
|
||||
extern Fl_Group *tabMT63;
|
||||
extern Fl_Check_Button *btnMT63_8bit;
|
||||
extern Fl_Check_Button *btnmt63_interleave;
|
||||
|
|
|
|||
|
|
@ -21,10 +21,11 @@ struct configuration {
|
|||
double RTTYsweetspot;
|
||||
double PSKsweetspot;
|
||||
bool StartAtSweetSpot;
|
||||
// for PSK mail interface
|
||||
// for PSK & PSK mail interface
|
||||
bool PSKmailSweetSpot;
|
||||
int SearchRange;
|
||||
int ServerOffset;
|
||||
double ACQsn;
|
||||
// RTTY
|
||||
double rtty_squelch;
|
||||
int rtty_shift;
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
#define PskSampleRate (8000)
|
||||
#define PipeLen (64)
|
||||
|
||||
#define SNTHRESHOLD 2.0
|
||||
#define SNTHRESHOLD 6.0
|
||||
#define AFCDECAYSLOW 8
|
||||
//=====================================================================
|
||||
|
||||
|
|
@ -70,6 +70,7 @@ private:
|
|||
int dcd;
|
||||
int dcdbits;
|
||||
complex quality;
|
||||
int acquire;
|
||||
|
||||
void rx_symbol(complex symbol);
|
||||
void rx_bit(int bit);
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ configuration progdefaults = {
|
|||
true, // bool PSKmailSweetSpot;
|
||||
200, // int SearchRange;
|
||||
40, // int ServerOffset;
|
||||
6.0, // double ACQsn;
|
||||
// RTTY
|
||||
25.0, // double rtty_squelch;
|
||||
3, // int rtty_shift; = 170
|
||||
|
|
@ -204,6 +205,7 @@ enum TAG { \
|
|||
FONTNBR, FONTSIZE, FONTCOLOR,
|
||||
STARTATSWEETSPOT, PSKMAILSWEETSPOT,
|
||||
PSKSEARCHRANGE, PSKSERVEROFFSET,
|
||||
ACQSN,
|
||||
CWSWEETSPOT, PSKSWEETSPOT, RTTYSWEETSPOT,
|
||||
RTTYSQUELCH, RTTYSHIFT, RTTYBAUD,
|
||||
RTTYBITS, RTTYPARITY, RTTYSTOP, RTTYREVERSE,
|
||||
|
|
@ -315,6 +317,7 @@ void configuration::writeDefaultsXML()
|
|||
writeXMLint(f, "PSKSERVEROFFSET", ServerOffset);
|
||||
writeXMLdbl(f, "CWSWEETSPOT", CWsweetspot);
|
||||
writeXMLdbl(f, "PSKSWEETSPOT", PSKsweetspot);
|
||||
writeXMLdbl(f, "ACQSN", ACQsn);
|
||||
writeXMLdbl(f, "RTTYSWEETSPOT", RTTYsweetspot);
|
||||
writeXMLdbl(f, "RTTYSQUELCH", rtty_squelch);
|
||||
writeXMLint(f, "RTTYSHIFT", rtty_shift);
|
||||
|
|
@ -516,6 +519,8 @@ bool configuration::readDefaultsXML()
|
|||
case PSKSERVEROFFSET :
|
||||
ServerOffset = atoi(xml->getNodeData());
|
||||
break;
|
||||
case ACQSN :
|
||||
ACQsn = atof(xml->getNodeData());
|
||||
case CWSWEETSPOT :
|
||||
CWsweetspot = atof(xml->getNodeData());
|
||||
break;
|
||||
|
|
@ -908,6 +913,7 @@ bool configuration::readDefaultsXML()
|
|||
else if (!strcmp("PSKMAILSWEETSPOT", nodeName)) tag = PSKMAILSWEETSPOT;
|
||||
else if (!strcmp("PSKSEARCHRANGE", nodeName)) tag = PSKSEARCHRANGE;
|
||||
else if (!strcmp("PSKSERVEROFFSET", nodeName)) tag = PSKSERVEROFFSET;
|
||||
else if (!strcmp("ACQSN", nodeName)) tag = ACQSN;
|
||||
else if (!strcmp("CWSWEETSPOT", nodeName)) tag = CWSWEETSPOT;
|
||||
else if (!strcmp("PSKSWEETSPOT", nodeName)) tag = PSKSWEETSPOT;
|
||||
else if (!strcmp("RTTYSWEETSPOT", nodeName)) tag = RTTYSWEETSPOT;
|
||||
|
|
@ -1230,6 +1236,7 @@ int configuration::openDefaults() {
|
|||
btnPSKmailSweetSpot->value(PSKmailSweetSpot);
|
||||
cntSearchRange->value(SearchRange);
|
||||
cntServerOffset->value(ServerOffset);
|
||||
cntACQsn->value(ACQsn);
|
||||
|
||||
btnCursorBWcolor->color(
|
||||
fl_rgb_color(cursorLineRGBI.R, cursorLineRGBI.G, cursorLineRGBI.B) );
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
#include <sys/ioctl.h>
|
||||
#include <math.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <FL/fl_ask.H>
|
||||
|
||||
|
|
|
|||
|
|
@ -115,6 +115,11 @@ int mt63::rx_process(const double *buf, int len)
|
|||
snr = 99.9;
|
||||
display_metric(snr);
|
||||
|
||||
// static char msg1[15];
|
||||
// double s2n = 10.0*log10( snr );
|
||||
// snprintf(msg1, sizeof(msg1), "s/n %2d dB", (int)(floor(s2n)));
|
||||
// put_Status1(msg1);
|
||||
|
||||
if (squelchon && snr < squelch)
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -218,6 +218,8 @@ psk::psk(trx_mode pskmode) : modem()
|
|||
for (int i = 0; i < 16; i++)
|
||||
syncbuf[i] = 0.0;
|
||||
E1 = E2 = E3 = 0.0;
|
||||
acquire = 0;
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
|
|
@ -335,11 +337,12 @@ void psk::findsignal()
|
|||
} else { // normal signal search algorithm
|
||||
f1 = (int)(frequency - progdefaults.SearchRange/2);
|
||||
f2 = (int)(frequency + progdefaults.SearchRange/2);
|
||||
if (evalpsk->sigpeak(ftest, f1, f2) > SNTHRESHOLD ) {
|
||||
if (evalpsk->sigpeak(ftest, f1, f2) > pow(10, progdefaults.ACQsn / 10.0) ) {
|
||||
frequency = ftest;
|
||||
set_freq(frequency);
|
||||
freqerr = 0.0;
|
||||
sigsearch = 0;
|
||||
acquire = DCDOFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -359,13 +362,14 @@ void psk::phaseafc()
|
|||
frequency -= freqerr;
|
||||
set_freq (frequency);
|
||||
}
|
||||
if (acquire) acquire--;
|
||||
}
|
||||
|
||||
void psk::afc()
|
||||
{
|
||||
if (!afcon)
|
||||
return;
|
||||
if (dcd == true)
|
||||
if (dcd == true || acquire)
|
||||
phaseafc();
|
||||
}
|
||||
|
||||
|
|
@ -398,11 +402,13 @@ void psk::rx_symbol(complex symbol)
|
|||
switch (dcdshreg) {
|
||||
case 0xAAAAAAAA: /* DCD on by preamble */
|
||||
dcd = true;
|
||||
acquire = 0;
|
||||
quality = complex (1.0, 0.0);
|
||||
break;
|
||||
|
||||
case 0: /* DCD off by postamble */
|
||||
dcd = false;
|
||||
acquire = 0;
|
||||
quality = complex (0.0, 0.0);
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -175,12 +175,13 @@ void viewpsk::findsignal(int ch)
|
|||
int ftest;
|
||||
int f1 = (int)(nomfreq[ch] - VSEARCHWIDTH);
|
||||
int f2 = (int)(nomfreq[ch] + VSEARCHWIDTH);
|
||||
if (evalpsk->sigpeak(ftest, f1, f2) > VSNTHRESHOLD) {
|
||||
if (evalpsk->sigpeak(ftest, f1, f2) > pow(10, progdefaults.ACQsn / 10.0) ) {
|
||||
frequency[ch] = ftest;
|
||||
sigsearch[ch] = 0;
|
||||
}
|
||||
else
|
||||
else {
|
||||
frequency[ch] = nomfreq[ch];
|
||||
}
|
||||
freqerr[ch] = 0.0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue