Upstream version 3.0preX

pull/2/head
Stelios Bounanos 2008-07-24 13:22:53 +01:00
rodzic 29d5fe68e7
commit 45294abdec
12 zmienionych plików z 171 dodań i 79 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, [preW])
m4_define(FLDIGI_PATCH, [preX])
AC_INIT([fldigi], FLDIGI_MAJOR.FLDIGI_MINOR[FLDIGI_PATCH], [w1hkj AT w1hkj DOT com])
@ -81,9 +81,18 @@ AC_FUNC_STRFTIME
AC_FUNC_STRTOD
AC_CHECK_FUNCS([getaddrinfo gethostbyname localtime_r memmove memset mkdir select snprintf socket strcasecmp strchr strdup strerror strncasecmp strcasestr strrchr strstr strtol uname vsnprintf])
# Check for clock_gettime
LIBS_save="$LIBS"; LIBS=""
AC_SEARCH_LIBS([clock_gettime], [rt], [ac_cv_clock_gettime=1; EXTRA_LIBS="$EXTRA_LIBS $LIBS"],
[ac_cv_clock_gettime=0])
AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME, $ac_cv_clock_gettime, [Define to 1 if we have clock_gettime])
LIBS="$LIBS_save"
# Check for dlopen
AC_SEARCH_LIBS([dlopen], [dl], [ac_cv_dlopen=1], [ac_cv_dlopen=0])
LIBS_save="$LIBS"; LIBS=""
AC_SEARCH_LIBS([dlopen], [dl], [ac_cv_dlopen=1; EXTRA_LIBS="$EXTRA_LIBS $LIBS"], [ac_cv_dlopen=0])
AC_DEFINE_UNQUOTED(HAVE_DLOPEN, $ac_cv_dlopen, [Define to 1 if we have dlopen])
LIBS="$LIBS_save"
AC_SUBST([EXTRA_LIBS])
AC_PRESERVE_HELP_ORDER

Wyświetl plik

@ -6,8 +6,4 @@ AC_DEFUN([AC_FLDIGI_STATIC], [
*) AC_MSG_ERROR([bad value ${enableval} for --enable-static]) ;;
esac],
[ac_cv_static=no])
if test "x$ac_cv_static" = "xyes"; then
AC_CHECK_LIB([rt], [clock_gettime], [RTLIB=-lrt])
fi
AC_SUBST([RTLIB])
])

Wyświetl plik

@ -15,7 +15,7 @@ AM_CFLAGS = $(AM_CXXFLAGS)
AM_LDFLAGS = @MAC_UNIVERSAL_LDFLAGS@
LDADD = @PORTAUDIO_LIBS@ @BOOST_LDFLAGS@ @FLTK_LIBS@ @SNDFILE_LIBS@ \
@SAMPLERATE_LIBS@ @PULSEAUDIO_LIBS@ @HAMLIB_LIBS@ @IMAGE_LIBS@ @XMLRPC_LIBS@ @RTLIB@
@SAMPLERATE_LIBS@ @PULSEAUDIO_LIBS@ @HAMLIB_LIBS@ @IMAGE_LIBS@ @XMLRPC_LIBS@ @EXTRA_LIBS@
HAMLIB_SRC = include/hamlib.h rigcontrol/hamlib.cxx include/rigclass.h rigcontrol/rigclass.cxx

Wyświetl plik

@ -208,20 +208,13 @@ Fl_Menu_Item quick_change_qpsk[] = {
};
Fl_Menu_Item quick_change_mfsk[] = {
{ mode_info[MODE_MFSK8].name, 0, cb_init_mode, (void *)MODE_MFSK8 },
{ mode_info[MODE_MFSK16].name, 0, cb_init_mode, (void *)MODE_MFSK16 },
{ mode_info[MODE_MFSK32].name, 0, cb_init_mode, (void *)MODE_MFSK32 },
{ 0 }
};
Fl_Menu_Item quick_change_mfsk_exp[] = {
{ mode_info[MODE_MFSK8].name, 0, cb_init_mode, (void *)MODE_MFSK8 },
{ mode_info[MODE_MFSK16].name, 0, cb_init_mode, (void *)MODE_MFSK16 },
{ mode_info[MODE_MFSK32].name, 0, cb_init_mode, (void *)MODE_MFSK32 },
{ mode_info[MODE_MFSK4].name, 0, cb_init_mode, (void *)MODE_MFSK4 },
{ mode_info[MODE_MFSK8].name, 0, cb_init_mode, (void *)MODE_MFSK8 },
{ mode_info[MODE_MFSK16].name, 0, cb_init_mode, (void *)MODE_MFSK16 },
{ mode_info[MODE_MFSK11].name, 0, cb_init_mode, (void *)MODE_MFSK11 },
{ mode_info[MODE_MFSK22].name, 0, cb_init_mode, (void *)MODE_MFSK22 },
{ mode_info[MODE_MFSK31].name, 0, cb_init_mode, (void *)MODE_MFSK31 },
{ mode_info[MODE_MFSK32].name, 0, cb_init_mode, (void *)MODE_MFSK32 },
{ mode_info[MODE_MFSK64].name, 0, cb_init_mode, (void *)MODE_MFSK64 },
{ 0 }
};
@ -596,10 +589,7 @@ void init_modem(trx_mode mode)
case MODE_MFSK32:
startup_modem(*mode_info[mode].modem ? *mode_info[mode].modem :
*mode_info[mode].modem = new mfsk(mode));
if (progdefaults.experimental)
quick_change = quick_change_mfsk_exp;
else
quick_change = quick_change_mfsk;
quick_change = quick_change_mfsk;
break;
case MODE_MT63_500: case MODE_MT63_1000: case MODE_MT63_2000 :
@ -1339,16 +1329,14 @@ Fl_Menu_Item menu_[] = {
{0,0,0,0,0,0,0,0,0},
{"MFSK", 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_MFSK8].name, 0, cb_init_mode, (void *)MODE_MFSK8, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_MFSK16].name, 0, cb_init_mode, (void *)MODE_MFSK16, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_MFSK32].name, 0, cb_init_mode, (void *)MODE_MFSK32, 0, FL_NORMAL_LABEL, 0, 14, 0},
// experimental modes
{ mode_info[MODE_MFSK4].name, 0, cb_init_mode, (void *)MODE_MFSK4, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_MFSK8].name, 0, cb_init_mode, (void *)MODE_MFSK8, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_MFSK11].name, 0, cb_init_mode, (void *)MODE_MFSK11, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_MFSK16].name, 0, cb_init_mode, (void *)MODE_MFSK16, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_MFSK22].name, 0, cb_init_mode, (void *)MODE_MFSK22, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_MFSK31].name, 0, cb_init_mode, (void *)MODE_MFSK31, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_MFSK32].name, 0, cb_init_mode, (void *)MODE_MFSK32, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_MFSK64].name, 0, cb_init_mode, (void *)MODE_MFSK64, 0, FL_NORMAL_LABEL, 0, 14, 0},
{0,0,0,0,0,0,0,0,0},
{"MT63", 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL, 0, 14, 0},
@ -1464,36 +1452,6 @@ Fl_Menu_Item *getMenuItem(const char *caption)
return item;
}
void activate_experimental()
{
Fl_Menu_Item *m_exp = 0;
if (progdefaults.experimental) {
if ((m_exp = getMenuItem(mode_info[MODE_MFSK4].name)) != 0)
m_exp->show();
if ((m_exp = getMenuItem(mode_info[MODE_MFSK11].name)) != 0)
m_exp->show();
if ((m_exp = getMenuItem(mode_info[MODE_MFSK22].name)) != 0)
m_exp->show();
if ((m_exp = getMenuItem(mode_info[MODE_MFSK31].name)) != 0)
m_exp->show();
if ((m_exp = getMenuItem(mode_info[MODE_MFSK64].name)) != 0)
m_exp->show();
if ((m_exp = getMenuItem(mode_info[MODE_MFSK32].name)) != 0)
m_exp->flags |= FL_MENU_DIVIDER;
} else {
if ((m_exp = getMenuItem(mode_info[MODE_MFSK4].name)) != 0)
m_exp->hide();
if ((m_exp = getMenuItem(mode_info[MODE_MFSK11].name)) != 0)
m_exp->hide();
if ((m_exp = getMenuItem(mode_info[MODE_MFSK22].name)) != 0)
m_exp->hide();
if ((m_exp = getMenuItem(mode_info[MODE_MFSK31].name)) != 0)
m_exp->hide();
if ((m_exp = getMenuItem(mode_info[MODE_MFSK64].name)) != 0)
m_exp->hide();
}
}
void activate_rig_menu_item(bool b)
{
Fl_Menu_Item *rig = getMenuItem("Rig");
@ -1949,7 +1907,6 @@ void create_fl_digi_main() {
scopeview->end();
scopeview->hide();
activate_experimental();
}

Wyświetl plik

@ -103,8 +103,19 @@ const char* FSEL::select(const char* title, const char* filter, const char* def,
{
inst->chooser->title(title);
inst->chooser->filter(filter);
if (def)
inst->chooser->preset_file(def);
if (def) {
string pathname = def;
string path = "";
string name = "";
size_t indx = pathname.rfind('/');
if (indx != string::npos) {
name = pathname.substr(indx + 1);
path = pathname.substr(0, indx);
} else
name = def;
inst->chooser->preset_file(name.c_str());
inst->chooser->directory(path.c_str());
}
inst->chooser->options(Fl_Native_File_Chooser::PREVIEW);
inst->chooser->type(Fl_Native_File_Chooser::BROWSE_FILE);
@ -118,8 +129,19 @@ const char* FSEL::saveas(const char* title, const char* filter, const char* def,
{
inst->chooser->title(title);
inst->chooser->filter(filter);
if (def)
inst->chooser->preset_file(def);
if (def) {
string pathname = def;
string path = "";
string name = "";
size_t indx = pathname.rfind('/');
if (indx != string::npos) {
name = pathname.substr(indx + 1);
path = pathname.substr(0, indx);
} else
name = def;
inst->chooser->preset_file(name.c_str());
inst->chooser->directory(path.c_str());
}
inst->chooser->options(Fl_Native_File_Chooser::SAVEAS_CONFIRM |
Fl_Native_File_Chooser::NEW_FOLDER |
Fl_Native_File_Chooser::PREVIEW);

Wyświetl plik

@ -450,3 +450,83 @@ complex *sfft::run(const complex& input)
return &bins[first];
}
// ============================================================================
// Goertzel filter
// Optimized implementation of a DFT for a single frequency of interest
// SR = sample rate
// N = Block size (does not need to be a factor of 2!)
// bin size = SR / N
// K = frequency bin of interest = (N * freq / SR)
// N should be selected to make K an integer if possible
//
// Q0 = current sample
// Q1 = previous sample (1 delay)
// Q2 = previous sample (2 delay)
// w = (2 * pi * K / N)
// k1 = cos(w)
// k2 = sin(w)
// k3 = 2.0 * k1
// Q0, Q1, Q2 are initialized to zero
// Iterate N times:
// Q0 = k3*Q1 - Q2 + sample
// Q2 = Q1
// Q1 = Q0
//
// After N interations:
// real = (Q1 - Q2 * k1)
// imag = Q2 * k2
// or
// mag = Q1*Q1 + Q2*Q2 - Q1*Q2*k1
// ============================================================================
goertzel::goertzel(double sr, int n, int k)
{
double w;
SR = sr;
K = k;
N = n;
w = 4.0 * M_PI * K / N;
k1 = cos(w);
k2 = sin(w);
k3 = 2.0 * k1;
Q0 = Q1 = Q2 = 0.0;
count = N;
}
goertzel::~goertzel()
{
}
void goertzel::reset()
{
Q0 = Q1 = Q2 = 0.0;
count = N;
}
bool goertzel::run(double sample)
{
Q0 = k1 * Q1 - Q2 + sample;
Q2 = Q1;
Q1 = Q0;
if (--count == 0) {
count = N;
return true;
}
return false;
}
double goertzel::real()
{
return (Q1 - Q2 * k1);
}
double goertzel::imag()
{
return (Q2 * k2);
}
double goertzel::mag()
{
return (Q1*Q1 - Q2*Q2 - Q1*Q2*k1);
}

Wyświetl plik

@ -135,4 +135,31 @@ public:
};
//=============================================================================
// Goertzel DFT
//=============================================================================
class goertzel {
private:
double SR;
int K;
int N;
int count;
double Q0;
double Q1;
double Q2;
double k1;
double k2;
double k3;
public:
goertzel(double sr, int n, int k);
~goertzel();
void reset();
bool run(double v);
double real();
double imag();
double mag();
};
#endif /* _FILTER_H */

Wyświetl plik

@ -152,19 +152,16 @@ int main(int argc, char ** argv)
setlocale(LC_TIME, "");
#ifndef __CYGWIN__
fl_filename_expand(szHomedir, 119, "$HOME/.fldigi/");
#ifdef __CYGWIN__
fl_filename_expand(szHomedir, 119, "$HOME/fldigi.files/");
redirect_streams(HomeDir);
atexit(restore_streams);
#else
fl_filename_expand(szHomedir, 119, "$APPDATA/fldigi/");
fl_filename_expand(szHomedir, 119, "$HOME/.fldigi/");
#endif
HomeDir = szHomedir;
#ifdef __CYGWIN__
redirect_streams(HomeDir);
atexit(restore_streams);
#endif
set_platform_ui();
set_platform_ui();
generate_option_help();
generate_version_text();
@ -316,9 +313,6 @@ void generate_option_help(void) {
<< " Look for configuration files in DIRECTORY\n"
<< " The default is: " << HomeDir << "\n\n"
<< " --experimental\n"
<< " enable experimental modes\n\n"
#ifndef __CYGWIN__
<< " --rx-ipc-key KEY\n"
<< " Set the receive message queue key\n"
@ -765,10 +759,18 @@ double speed_test(int converter, unsigned repeat)
src_simple(&src, SRC_SINC_FASTEST, 1);
struct timespec t0, t1;
#ifdef _POSIX_MONOTONIC_CLOCK
clock_gettime(CLOCK_MONOTONIC, &t0);
#else
clock_gettime(CLOCK_REALTIME, &t0);
#endif
for (unsigned i = 0; i < repeat; i++)
src_simple(&src, SRC_SINC_FASTEST, 1);
#ifdef _POSIX_MONOTONIC_CLOCK
clock_gettime(CLOCK_MONOTONIC, &t1);
#else
clock_gettime(CLOCK_REALTIME, &t1);
#endif
delete [] src.data_in;
delete [] src.data_out;

Wyświetl plik

@ -83,7 +83,7 @@ void loadBrowser(Fl_Widget *widget) {
}
glob_t gbuf;
glob(string(HomeDir).append("/scripts/*").c_str(), 0, NULL, &gbuf);
glob(string(HomeDir).append("scripts/*").c_str(), 0, NULL, &gbuf);
if (gbuf.gl_pathc == 0) {
globfree(&gbuf);
return;

Wyświetl plik

@ -589,7 +589,7 @@ void MACROTEXT::loadDefault()
void MACROTEXT::openMacroFile()
{
string deffilename = HomeDir;
deffilename.append("/macros.mdf");
deffilename.append("macros.mdf");
const char *p = FSEL::select("Open macro file", "Fldigi macro definition file\t*.mdf", deffilename.c_str());
if (p)
loadMacros(p);
@ -598,7 +598,7 @@ void MACROTEXT::openMacroFile()
void MACROTEXT::saveMacroFile()
{
string deffilename = HomeDir;
deffilename.append("/macros.mdf");
deffilename.append("macros.mdf");
const char *p = FSEL::saveas("Save macro file", "Fldigi macro definition file\t*.mdf", deffilename.c_str());
if (p)
saveMacros(p);

Wyświetl plik

@ -536,7 +536,6 @@ int psk::rx_process(const double *buf, int len)
}
}
}
signalquality();
if (sigsearch)
findsignal();

Wyświetl plik

@ -56,7 +56,7 @@ void loadPalette()
FILE *clrfile = NULL;
if (palfilename.size() == 0) {
palfilename = HomeDir;
palfilename.append ("/fldigi.pal");
palfilename.append ("fldigi.pal");
}
const char *p = FSEL::select("Open palette", "Fldigi palette\t*.pal", palfilename.c_str());
if (!p) return;
@ -92,7 +92,7 @@ void savePalette()
FILE *clrfile = NULL;
if (palfilename.size() == 0) {
palfilename = HomeDir;
palfilename.append ("/fldigi.pal");
palfilename.append ("fldigi.pal");
}
const char *p = FSEL::saveas("Save palette", "Fldigi palette\t*.pal", palfilename.c_str());
if (!p) return;