Upstream version 2.10D

pull/2/head
Stelios Bounanos 2008-02-16 05:57:07 +00:00
rodzic 66bbde2415
commit a458af58ac
6 zmienionych plików z 132 dodań i 50 usunięć

Wyświetl plik

@ -7,6 +7,7 @@ Change Log:
4) The volume sliders will now be hidden if the mixer is disabled 4) The volume sliders will now be hidden if the mixer is disabled
5) Rename some classes so that fldigi builds on Mac OSX. 5) Rename some classes so that fldigi builds on Mac OSX.
Many thanks to Justin Burket and Diane Bruce. Many thanks to Justin Burket and Diane Bruce.
6) Added a <MODEM> macro that changes the current modem
2.09 1) Modified src/Makefile.am for FreeBSD name space clash 2.09 1) Modified src/Makefile.am for FreeBSD name space clash
2) Added psk multi-channel viewer with regex search capability 2) Added psk multi-channel viewer with regex search capability

Wyświetl plik

@ -4,7 +4,7 @@
AC_COPYRIGHT([Copyright (C) 2007 Stelios Bounanos, M0GLD (m0gld AT enotty DOT net)]) AC_COPYRIGHT([Copyright (C) 2007 Stelios Bounanos, M0GLD (m0gld AT enotty DOT net)])
AC_PREREQ(2.61) AC_PREREQ(2.61)
AC_INIT([fldigi], [2.10C], [w1hkj AT w1hkj DOT com]) AC_INIT([fldigi], [2.10D], [w1hkj AT w1hkj DOT com])
AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_AUX_DIR([build-aux])
# define build, build_cpu, build_vendor, build_os # define build, build_cpu, build_vendor, build_os

Wyświetl plik

@ -2,6 +2,7 @@
#include "macros.h" #include "macros.h"
#include "macroedit.h" #include "macroedit.h"
#include "globals.h"
#include <string> #include <string>
@ -20,35 +21,57 @@ Fl_Hold_Browser *macroDefs=(Fl_Hold_Browser *)0;
static int iMacro; static int iMacro;
// fl_color(0) is always the foreground colour
#define LINE_SEP "@B0"
void loadBrowser(Fl_Widget *widget) { void loadBrowser(Fl_Widget *widget) {
Fl_Browser *w = (Fl_Browser *)widget; Fl_Browser *w = (Fl_Browser *)widget;
w->add("<CALL>\tother call");
w->add("<FREQ>\tmy frequency");
w->add("<LOC>\tother locator");
w->add("<MODE>\tmode");
w->add("<NAME>\tremote name");
w->add("<QTH>\tother qth");
w->add("<RST>\tother RST");
w->add("<MYCALL>\tmy call"); w->add("<MYCALL>\tmy call");
w->add("<MYLOC>\tmy locator"); w->add("<MYLOC>\tmy locator");
w->add("<MYNAME>\tmy name"); w->add("<MYNAME>\tmy name");
w->add("<MYQTH>\tmy qth"); w->add("<MYQTH>\tmy qth");
w->add("<MYRST>\tmy RST"); w->add("<MYRST>\tmy RST");
w->add(LINE_SEP);
w->add("<CALL>\tother call");
w->add("<LOC>\tother locator");
w->add("<NAME>\tremote name");
w->add("<QTH>\tother qth");
w->add("<RST>\tother RST");
w->add(LINE_SEP);
w->add("<FREQ>\tmy frequency");
w->add("<MODE>\tmode");
w->add(LINE_SEP);
w->add("<LDT>\tLocal datetime"); w->add("<LDT>\tLocal datetime");
w->add("<ILDT>\tLocal datetime in iso-8601"); w->add("<ILDT>\tLDT in iso-8601 format");
w->add("<ZDT>\tZulu datetime"); w->add("<ZDT>\tZulu datetime");
w->add("<IZDT>\tZulu datetime in iso-8601"); w->add("<IZDT>\tZDT in iso-8601 format");
w->add("<ID>\tMode ID'r");
w->add("<TEXT>\tVideo text"); w->add(LINE_SEP);
w->add("<CWID>\tCW identifier");
w->add("<RX>\treceive");
w->add("<TX>\ttransmit");
w->add("<VER>\tFldigi + version");
w->add("<CNTR>\tcontest cnt"); w->add("<CNTR>\tcontest cnt");
w->add("<DECR>\tdecr cnt"); w->add("<DECR>\tdecr cnt");
w->add("<INCR>\tincr cnt"); w->add("<INCR>\tincr cnt");
w->add(LINE_SEP);
w->add("<ID>\tMode ID'r");
w->add("<TEXT>\tVideo text");
w->add("<CWID>\tCW identifier");
w->add(LINE_SEP);
w->add("<RX>\treceive");
w->add("<TX>\ttransmit");
w->add("<LOG>\tsave QSO data"); w->add("<LOG>\tsave QSO data");
w->add("<VER>\tFldigi + version");
w->add("<TIMER>\trepeat every NNN sec"); w->add("<TIMER>\trepeat every NNN sec");
w->add(LINE_SEP);
char s[48];
for (size_t i = 0; i < NUM_MODES; i++) {
snprintf(s, sizeof(s), "<MODEM>%s", mode_info[i].sname);
w->add(s);
}
} }
void cbMacroEditOK(Fl_Widget *w, void *) void cbMacroEditOK(Fl_Widget *w, void *)
@ -76,7 +99,10 @@ void cbInsertMacro(Fl_Widget *, void *)
string edittext = macrotext->value(); string edittext = macrotext->value();
string text = macroDefs->text(nbr); string text = macroDefs->text(nbr);
size_t tab = text.find('\t'); size_t tab = text.find('\t');
text.erase(tab); if (tab != string::npos)
text.erase(tab);
if (text == LINE_SEP)
return;
macrotext->insert(text.c_str()); macrotext->insert(text.c_str());
macrotext->take_focus(); macrotext->take_focus();
} }

Wyświetl plik

@ -9,6 +9,7 @@
#include "confdialog.h" #include "confdialog.h"
#include "logger.h" #include "logger.h"
#include "newinstall.h" #include "newinstall.h"
#include "globals.h"
#include <FL/Fl.H> #include <FL/Fl.H>
#include "File_Selector.h" #include "File_Selector.h"
@ -52,6 +53,7 @@ void pDECR(string &, size_t &);
void pINCR(string &, size_t &); void pINCR(string &, size_t &);
void pLOG(string &, size_t &); void pLOG(string &, size_t &);
void pTIMER(string &, size_t &); void pTIMER(string &, size_t &);
void pMODEM(string &, size_t &);
MTAGS mtags[] = { MTAGS mtags[] = {
{"<CALL>", pCALL}, {"<CALL>", pCALL},
@ -81,6 +83,7 @@ MTAGS mtags[] = {
{"<INCR>", pINCR}, {"<INCR>", pINCR},
{"<LOG>", pLOG}, {"<LOG>", pLOG},
{"<TIMER>", pTIMER}, {"<TIMER>", pTIMER},
{"<MODEM>", pMODEM},
{0, 0} {0, 0}
}; };
@ -282,6 +285,31 @@ void pTIMER(string &s, size_t &i)
progdefaults.useTimer = true; progdefaults.useTimer = true;
} }
void pMODEM(string &s, size_t &i)
{
if ((i = s.find('>', i)) == string::npos)
return;
size_t len = s.length();
while (++i < len)
if (!isspace(s[i]))
break;
size_t j = i;
while (++j < len)
if (isspace(s[j]))
break;
string name = s.substr(i, j-i);
for (j = 0; j < NUM_MODES; j++) {
if (name == mode_info[j].sname) {
if (active_modem->get_mode() != mode_info[j].mode)
init_modem(mode_info[j].mode);
s.clear();
break;
}
}
}
int MACROTEXT::loadMacros(string filename) int MACROTEXT::loadMacros(string filename)
{ {
string mLine; string mLine;
@ -453,6 +481,9 @@ string mtext =
// <RX> retn to receive\n\ // <RX> retn to receive\n\
// <TX> start transmit\n\ // <TX> start transmit\n\
// <VERSION> Fldigi + version\n\ // <VERSION> Fldigi + version\n\
// <MODEM> name changes the current modem to name. name is the short modem name\n\
// as it appears in the status/quick change box at the bottom left corner\n\
// of the main window\n\
//\n\ //\n\
// Contest macro definitions:\n\ // Contest macro definitions:\n\
// <CNTR> substitute the contest counter - no change in value\n\ // <CNTR> substitute the contest counter - no change in value\n\

Wyświetl plik

@ -49,7 +49,7 @@ extern waterfall *wf;
// Change the following for DCD low pass filter adjustment // Change the following for DCD low pass filter adjustment
#define SQLCOEFF 0.01 #define SQLCOEFF 0.01
#define SQLDECAY 100 #define SQLDECAY 50
//===================================================================== //=====================================================================
@ -347,6 +347,7 @@ void psk::findsignal()
frequency = ftest; frequency = ftest;
set_freq(frequency); set_freq(frequency);
freqerr = 0.0; freqerr = 0.0;
sigsearch = 0;
} }
// searchBW = progdefaults.SearchRange; // searchBW = progdefaults.SearchRange;
// ftest = wf->peakFreq((int)(frequency), searchBW); // ftest = wf->peakFreq((int)(frequency), searchBW);
@ -383,10 +384,7 @@ void psk::afc()
{ {
if (!afcon) if (!afcon)
return; return;
// if (sigsearch) phaseafc();
// findsignal();
else if (dcd == true)
phaseafc();
} }
@ -484,8 +482,8 @@ int psk::rx_process(const double *buf, int len)
if (pskviewer && !bHistory) pskviewer->rx_process(buf, len); if (pskviewer && !bHistory) pskviewer->rx_process(buf, len);
if (evalpsk) evalpsk->sigdensity(); if (evalpsk) evalpsk->sigdensity();
if (afcon == 2) // if (afcon == 2)
sigsearch = 0; // sigsearch = 0;
delta = twopi * frequency / samplerate; delta = twopi * frequency / samplerate;

Wyświetl plik

@ -8,6 +8,7 @@
#include <config.h> #include <config.h>
#include <string> #include <string>
#include <ctime>
#ifdef RIGCATTEST #ifdef RIGCATTEST
#include "rigCAT.h" #include "rigCAT.h"
@ -59,6 +60,15 @@ void printhex(unsigned char *s, int len)
std::cout << hex << (unsigned int)(s[i] & 0xFF) << " "; std::cout << hex << (unsigned int)(s[i] & 0xFF) << " ";
std::cout << std::endl; std::cout << std::endl;
} }
char * printtime()
{
time_t t;
time(&t);
tm *now = gmtime(&t);
static char sztime[80];
strftime(sztime, 79, "[%H:%M:%S]", now);
return sztime;
}
bool readpending = false; bool readpending = false;
int readtimeout; int readtimeout;
@ -68,8 +78,11 @@ bool hexout( string s, int retnbr)
// thread might call this function while a read from the rig is in process // thread might call this function while a read from the rig is in process
// wait here until that processing is finished or a timeout occurs // wait here until that processing is finished or a timeout occurs
// reset the readpending & return false if a timeout occurs // reset the readpending & return false if a timeout occurs
//printhex(s);
readtimeout = 500; // 500 msec timeout // debug code
//std::cout << printtime() << "Cmd: "; printhex(s);
readtimeout = (rig.wait +rig.timeout) * rig.retries + 2000; // 2 second min timeout
while (readpending && readtimeout--) while (readpending && readtimeout--)
MilliSleep(1); MilliSleep(1);
if (readtimeout == 0) { if (readtimeout == 0) {
@ -78,38 +91,51 @@ bool hexout( string s, int retnbr)
return false; return false;
} }
int num = 0;
memset(sendbuff,0, 200);
for (unsigned int i = 0; i < s.length(); i++)
sendbuff[i] = s[i];
readpending = true; readpending = true;
rigio.FlushBuffer();
rigio.WriteBuffer(sendbuff, s.size());
if (rig.echo == true)
rigio.ReadBuffer (replybuff, s.size());
memset (replybuff, 0, 200); for (int n = 0; n < rig.retries; n++) {
int num = 0;
memset(sendbuff,0, 200);
for (unsigned int i = 0; i < s.length(); i++)
sendbuff[i] = s[i];
rigio.FlushBuffer();
rigio.WriteBuffer(sendbuff, s.size());
if (rig.echo == true)
rigio.ReadBuffer (replybuff, s.size());
memset (replybuff, 0, 200);
// wait interval before trying to read response // wait interval before trying to read response
if ((readtimeout = rig.wait) > 0) if ((readtimeout = rig.wait) > 0)
while (readtimeout--) while (readtimeout--)
MilliSleep(1); MilliSleep(1);
if (retnbr > 0) { if (retnbr > 0) {
num = rigio.ReadBuffer (replybuff, retnbr > 200 ? 200 : retnbr); num = rigio.ReadBuffer (replybuff, retnbr > 200 ? 200 : retnbr);
// debug code // debug code
// if (num) /*
// printhex(replybuff, num); if (num) {
// else std::cout << printtime() << "Rsp (" << n << "): ";
// std::cout << "no reply" << std::endl; fflush(stdout); printhex(replybuff, num);
} else
std::cout << printtime() << "Rsp (" << n << "): no reply" << std::endl;
std::cout.flush();
*/
}
if (retnbr == 0 || num == retnbr) {
readpending = false;
return true;
//
if ((readtimeout = rig.timeout) > 0)
while (readtimeout--)
MilliSleep(1);
}
} }
readpending = false; readpending = false;
if (retnbr == 0 || num == retnbr)
return true;
return false; return false;
} }