Upstream version 1.37f-exp

pull/2/head
Stelios Bounanos 2007-08-14 02:18:58 +01:00
rodzic 0872322213
commit e1efe8c816
12 zmienionych plików z 262 dodań i 38 usunięć

Wyświetl plik

@ -1,6 +1,6 @@
Change Log:
1.36 1) Increased TxPPM to +/- 50000 to match the RxPPM range
1.37 1) Increased TxPPM to +/- 50000 to match the RxPPM range
2) Changed all audio i/o to separate 2 channel control (stereo)
3) Added right channel CW QRQ signal
4) Added right channel pseudo FSK signal
@ -24,6 +24,7 @@ Change Log:
The new libraries provide portaudio sound card mapping, and the
ability to save and playback wav files (when fldigi is run as:
fldigi TEST).
16) Added Azimuth computation to QRZ query (submitted by WA5ZNU).
1.34 1) Cleaned up unused code segments
2) Modified CW decoder to allow setting upper and lower limits on
Tx WPM

Wyświetl plik

@ -1013,6 +1013,7 @@ static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600
{ Fl_Check_Button* o = btnViewXmtSignal = new Fl_Check_Button(108, 105, 137, 20, "View Xmt Signal");
o->down_box(FL_DOWN_BOX);
o->callback((Fl_Callback*)cb_btnViewXmtSignal);
o->hide();
o->value(progdefaults.viewXmtSignal);
}
{ Fl_Counter* o = cntLowFreqCutoff = new Fl_Counter(280, 84, 94, 21, "Low Freq Cutoff");

Wyświetl plik

@ -168,14 +168,14 @@ progdefaults.changed = true;}
Fl_Check_Button btnViewXmtSignal {
label {View Xmt Signal}
callback {progdefaults.viewXmtSignal=o->value();
progdefaults.changed = true;}
xywh {108 105 137 20} down_box DOWN_BOX
progdefaults.changed = true;} selected
xywh {108 105 137 20} down_box DOWN_BOX hide
code0 {o->value(progdefaults.viewXmtSignal);}
}
Fl_Counter cntLowFreqCutoff {
label {Low Freq Cutoff}
callback {progdefaults.LowFreqCutoff=(int)(o->value());
progdefaults.changed = true;} selected
progdefaults.changed = true;}
xywh {280 84 94 21} type Simple minimum 0 maximum 500 step 50 value 300
code0 {o->value(progdefaults.LowFreqCutoff);}
}

Wyświetl plik

@ -0,0 +1,151 @@
// generated by Fast Light User Interface Designer (fluid) version 1.0107
#ifndef Config_h
#define Config_h
#include <FL/Fl.H>
#include "globals.h"
#include "modem.h"
#include "configuration.h"
extern Fl_Double_Window *dlgConfig;
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Tabs.H>
extern Fl_Tabs *tabsConfigure;
#include <FL/Fl_Group.H>
extern Fl_Group *tabOperator;
#include <FL/Fl_Input.H>
extern Fl_Input *inpMyCallsign;
extern Fl_Input *inpMyName;
extern Fl_Input *inpMyQth;
extern Fl_Input *inpMyLocator;
#include <FL/Fl_Check_Button.H>
extern Fl_Check_Button *btnUseLeadingZeros;
#include <FL/Fl_Value_Input.H>
extern Fl_Value_Input *nbrContestStart;
extern Fl_Value_Input *nbrContestDigits;
extern Fl_Group *tabWaterfall;
extern Fl_Check_Button *btnBlackman;
extern Fl_Check_Button *btnHamming;
extern Fl_Check_Button *btnHanning;
extern Fl_Check_Button *btnTriangular;
extern Fl_Check_Button *btnUseCursorLines;
extern Fl_Check_Button *btnUseBWTracks;
extern Fl_Check_Button *btnUseCursorCenterLine;
extern Fl_Check_Button *btnViewXmtSignal;
#include <FL/Fl_Counter.H>
extern Fl_Counter *cntLowFreqCutoff;
#include "colorbox.h"
extern colorbox *Palette;
#include <FL/Fl_Button.H>
extern Fl_Button *btnColor[9];
extern Fl_Button *btnLoadPalette;
extern Fl_Button *btnSavePalette;
extern Fl_Group *tabInterface;
#include <FL/Fl_Round_Button.H>
extern Fl_Input *inpTTYdev;
extern Fl_Round_Button *btnRTSptt;
extern Fl_Round_Button *btnDTRptt;
extern Fl_Round_Button *btnRTSplusV;
extern Fl_Round_Button *btnDTRplusV;
#include <FL/Fl_Box.H>
extern Fl_Round_Button *btnPTT[5];
extern Fl_Check_Button *chkUSEMEMMAP;
extern Fl_Check_Button *chkUSERIGCAT;
extern Fl_Check_Button *chkUSEHAMLIB;
extern Fl_ComboBox *cboHamlibRig;
extern Fl_Input *inpRIGdev;
#include <FL/Fl_Choice.H>
extern Fl_Choice *mnuBaudRate;
extern Fl_Button *btnInit_Interface;
extern Fl_Check_Button *btnQRZnotavailable;
extern Fl_Check_Button *btnQRZsocket;
extern Fl_Check_Button *btnQRZcdrom;
extern Fl_Group *tabSoundCard;
extern Fl_Tabs *tabsSoundCard;
extern Fl_Group *tabMixer;
#include <FL/Fl_Light_Button.H>
extern void setMixerInput(int);
extern Fl_Light_Button *btnLineIn;
extern Fl_Light_Button *btnMicIn;
#include <FL/Fl_Value_Slider.H>
extern void setPCMvolume(double);
extern Fl_Value_Slider *valPCMvolume;
#include <FL/Fl_Input_Choice.H>
extern Fl_Input_Choice *menuMix;
extern void resetMixerControls();
extern Fl_Check_Button *btnMixer;
extern Fl_Group *tabAudio;
#include <FL/Fl_Spinner.H>
extern Fl_Spinner *cntRxRateCorr;
extern Fl_Spinner *cntTxRateCorr;
extern Fl_Spinner *cntTxOffset;
extern Fl_Group *AudioIO;
extern Fl_Round_Button *btnAudioIO[2];
extern Fl_Input_Choice *menuOSSDev;
extern Fl_Input_Choice *menuPADev;
extern Fl_Value_Input *valCWsweetspot;
extern Fl_Value_Input *valRTTYsweetspot;
extern Fl_Value_Input *valPSKsweetspot;
extern Fl_Check_Button *btnStartAtSweetSpot;
extern Fl_Check_Button *btnsendid;
extern Fl_Group *tabModems;
extern Fl_Tabs *tabsModems;
extern Fl_Group *tabCW;
extern Fl_Value_Slider *sldrCWbandwidth;
extern Fl_Counter *cntCWrange;
extern Fl_Check_Button *btnCWrcvTrack;
#include <FL/Fl_Value_Output.H>
extern Fl_Value_Output *valCWrcvWPM;
#include <FL/Fl_Progress.H>
extern Fl_Progress *prgsCWrcvWPM;
extern Fl_Value_Slider *sldrCWxmtWPM;
extern Fl_Counter *cntCWlowerlimit;
extern Fl_Counter *cntCWupperlimit;
extern Fl_Counter *cntCWweight;
extern Fl_Counter *cntCWdash2dot;
extern Fl_Counter *cntCWrisetime;
extern Fl_Counter *cntCWdefWPM;
extern Fl_Group *tabCWQSK;
extern Fl_Check_Button *btnQSK;
extern Fl_Counter *cntPreTiming;
extern Fl_Counter *cntPostTiming;
extern Fl_Group *tabDomEX;
extern Fl_Input *txtSecondary;
extern Fl_Button *btnRestartDomEX;
extern Fl_Counter *valDominoEX_BW;
extern Fl_Group *tabFeld;
#include "fontdef.h"
extern Fl_Choice *selHellFont;
extern Fl_Value_Slider *sldrHellBW;
extern Fl_Check_Button *btnHellXmtWidth;
extern Fl_Check_Button *btnHellRcvWidth;
extern Fl_Check_Button *btnBlackboard;
extern Fl_Check_Button *btnHellFastAttack;
extern Fl_Check_Button *btnHellSlowAttack;
extern Fl_Check_Button *btnFeldHellIdle;
extern Fl_Group *tabOlivia;
extern Fl_Choice *mnuOlivia_Tones;
extern Fl_Choice *mnuOlivia_Bandwidth;
extern Fl_Button *btnRestartOlivia;
extern Fl_Check_Button *btnPSKmailSweetSpot;
extern Fl_Group *tabRTTY;
extern Fl_Choice *selShift;
extern Fl_Choice *selBaud;
extern Fl_Choice *selBits;
extern Fl_Choice *selParity;
extern Fl_Choice *selStopBits;
extern Fl_Check_Button *chkPseudoFSK;
extern Fl_Button *btnRestartRtty;
extern Fl_Check_Button *btnCRCRLF;
extern Fl_Check_Button *btnAUTOCRLF;
extern Fl_Counter *cntrAUTOCRLF;
extern Fl_Check_Button *btnRTTY_USB;
extern Fl_Round_Button *btnRTTYafc[3];
extern Fl_Check_Button *btnPreferXhairScope;
#include <FL/Fl_Return_Button.H>
extern Fl_Return_Button *btnCloseConfig;
extern Fl_Button *btnSaveConfig;
Fl_Double_Window* ConfigureDialog();
void openConfig();
void closeDialog();
void createConfig();
#endif

Wyświetl plik

@ -468,7 +468,7 @@ void textview::drawmodify()
// find the screen location for the character redraw
size_t posidx = laststartidx;
int posX = 0, posY = charheight - descent;
char c;
char c = 0;
fl_font(TextFont, TextSize);
while (posidx < modidx) {
@ -483,7 +483,7 @@ void textview::drawmodify()
}
// should now be pointing to the (x,y) screen location for the character
char cstr[] = "";
cstr[0] = c = buff[modidx];
cstr[0] = buff[modidx];
// erase existing
if ((attr[modidx] & 0x20) == 0x20)
fl_color(FL_YELLOW);
@ -1102,7 +1102,8 @@ int TextEdit::nextChar()
modidx = xmtidx;
damage(4);
Fl::unlock();
Fl::awake();
Fl::flush();
// Fl::awake();
return (buff[xmtidx++]);
}

Wyświetl plik

@ -110,6 +110,7 @@ Fl_Input *inpRstOut;
Fl_Input *inpQth;
Fl_Input *inpLoc;
Fl_Input *inpNotes;
Fl_Input *inpAZ; // WA5ZNU
Fl_Button *qsoTime;
Fl_Button *qsoClear;
Fl_Button *qsoSave;
@ -832,6 +833,7 @@ void clearQSO()
inpRstOut->value("");
inpQth->value("");
inpLoc->value("");
inpAZ->value(""); // WA5ZNU
inpNotes->value("");
Fl::unlock();
}
@ -1137,13 +1139,19 @@ void create_fl_digi_main() {
Y += Hqsoframe;
Fl_Group *qsoFrame2 = new Fl_Group(0,Y, WNOM, Hnotes);
inpNotes = new Fl_Input(89 + 22, Y, WNOM - 89 - 44 - 22, Hnotes,"Notes:");
inpNotes = new Fl_Input(136, Y, WNOM - 136 - 44 - 120, Hnotes,"Notes:"); // WA5ZNU
inpNotes->align(FL_ALIGN_LEFT);
cboBand = new Fl_ComboBox(2, Y, 85, Hnotes, "");
cboBand->hide();
btnSideband = new Fl_Button(88, Y+1, 22, 22, "U");
btnSideband->callback(cb_btnSideband, 0);
btnSideband->hide();
inpAZ = new Fl_Input(WNOM - 44 - 80, Y, 80, Hnotes, "AZ:"); // WA5ZNU
inpAZ->align(FL_ALIGN_LEFT);
qsoSave = new Fl_Button(WNOM - 42, Y + 1, 40, Hnotes- 2, "Save");
qsoSave->callback(qsoSave_cb, 0);
qsoFrame2->resizable(inpNotes);
@ -1152,7 +1160,6 @@ void create_fl_digi_main() {
int sw = 15;
Fl_Group *MixerFrame = new Fl_Group(0,Y,sw, Hrcvtxt + Hxmttxt);
// valRcvMixer = new Fl_Slider(0, Y, sw, (Hrcvtxt + Hxmttxt)/2 - 15, "R");
valRcvMixer = new Fl_Slider(0, Y, sw, (Htext)/2, "");
valRcvMixer->type(FL_VERT_NICE_SLIDER);
valRcvMixer->color(fl_rgb_color(0,110,30));
@ -1160,7 +1167,6 @@ void create_fl_digi_main() {
valRcvMixer->selection_color(fl_rgb_color(255,255,0));
valRcvMixer->range(1.0,0.0);
valRcvMixer->callback( (Fl_Callback *)cb_RcvMixer);
// valXmtMixer = new Fl_Slider(0, Y + (Hrcvtxt + Hxmttxt)/2, sw, (Hrcvtxt + Hxmttxt)/2 - 15, "T");
valXmtMixer = new Fl_Slider(0, Y + (Htext)/2, sw, (Htext)/2, "");
valXmtMixer->type(FL_VERT_NICE_SLIDER);
valXmtMixer->color(fl_rgb_color(110,0,30));
@ -1438,6 +1444,7 @@ void put_S2Nstatus(char *msg)
void put_WARNstatus(double val)
{
Fl::lock();
if (val < 0.05)
WARNstatus->color(FL_BLACK);
if (val > 0.05)
@ -1447,6 +1454,7 @@ void put_WARNstatus(double val)
if (val > 0.98)
WARNstatus->color(FL_DARK_RED);
WARNstatus->redraw();
Fl::unlock();
}
@ -1463,7 +1471,6 @@ void clear_StatusMessages()
StatusBar->label("");
S2Nstatus->label("");
IMDstatus->label("");
// WARNstatus->label("");
Fl::unlock();
Fl::awake();
}

Wyświetl plik

@ -74,6 +74,7 @@ extern Fl_Input *inpRstOut;
extern Fl_Input *inpQth;
extern Fl_Input *inpLoc;
extern Fl_Input *inpNotes;
extern Fl_Input *inpAZ; // WA5ZNU
extern Fl_Button *qsoClear;
extern Fl_Button *qsoSave;
extern Fl_Button *btnMacroTimer;

Wyświetl plik

@ -1,6 +1,6 @@
#ifndef _VERSION_H
#define _VERSION_H
#define FLDIGI_VERSION "1.37e-exp"
#define FLDIGI_VERSION "1.37f-exp"
#endif

Wyświetl plik

@ -147,9 +147,9 @@ int main(int argc, char ** argv) {
arqchecks();
Fl::lock(); // start the gui thread!!
// Fl::visual(FL_RGB); // insure 24 bit color operation
Fl::visual(FL_RGB); // insure 24 bit color operation
Fl::visual(FL_DOUBLE|FL_INDEX|FL_RGB);
// Fl::visual(FL_DOUBLE|FL_INDEX| FL_RGB);
fl_register_images();
Fl::set_fonts(0);

Wyświetl plik

@ -35,6 +35,8 @@
#include <sys/time.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <math.h>
#include <ctype.h>
#include <FL/fl_ask.H>
@ -45,7 +47,7 @@
#include "qrzcall.h"
#include "main.h"
#include "Config.h"
#include "Config.h"
#include "fl_digi.h"
#include "qrzlib.h"
@ -243,12 +245,72 @@ int getRecord()
return 0;
}
// code submitted by WA5ZNU
//#define MY_QRA ("CM87wk")
int bearing(const char *, const char *);
void qra(const char *, double &, double &);
int bearing(const char *myqra, const char *dxqra) {
double lat1, lat1r, lon1;
double lat2, lat2r, lon2;
double dlong, arg1, arg2a, arg2b, arg2, bearingr, bearing;
double k=180.0/M_PI;
qra(dxqra, lat2, lon2);
qra(myqra, lat1, lon1);
//std::cout << lat1 << " " << lon1 << std::endl << lat2 << " " << lon2 << std::endl; cout.flush();
lat1r=lat1/k;
lat2r=lat2/k;
dlong = lon2/k - lon1/k;
arg1 = sin(dlong) * cos(lat2r);
arg2a = cos(lat1r) * sin(lat2r);
arg2b = sin(lat1r) * cos(lat2r) * cos(dlong);
arg2 = arg2a - arg2b;
bearingr = atan2(arg1, arg2);
bearing = floor(0.5+fmod(360.0 + (bearingr * k), 360.0));
return (int)bearing;
}
// code submitted by WA5ZNU
void qra(const char *szqra, double &lat, double &lon) {
int c1 = toupper(szqra[0])-'A';
int c2 = toupper(szqra[1])-'A';
int c3 = szqra[2]-'0';
int c4 = szqra[3]-'0';
int c5, c6;
if (strlen(szqra) > 4) {
c5 = toupper(szqra[4])-'A';
c6 = toupper(szqra[5])-'A';
lat = (((c2 * 10.0) + c4 + ((c6 + 0.5)/24.0)) - 90.0);
lon = (((c1 * 20.0) + (c3 * 2.0) + ((c5 + 0.5) / 12.0)) - 180.0);
} else {
lat = (((c2 * 10.0) + c4 ) - 90.0);
lon = (((c1 * 20.0) + (c3 * 2.0)) - 180.0);
}
}
void QRZ_disp_result()
{
Fl::lock();
inpName->value(qrzfname.c_str());
inpQth->value(qrzqth.c_str());
inpLoc->value(qrzgrid.c_str());
// code provided by WA5ZNU
if (!progdefaults.myLocator.empty()) {
char buf[10];
buf[0] = '\0';
if (!qrzgrid.empty()) {
int b = bearing( progdefaults.myLocator.c_str(), qrzgrid.c_str() );
int br = (b + 180) % 360;
snprintf(buf, 256, "%03d / %03d", b, br);
}
inpAZ->value(buf);
}
inpNotes->value(qrznotes.c_str());
Fl::unlock();
}

Wyświetl plik

@ -197,29 +197,31 @@ void modem::set_samplerate(int smprate)
void modem::ModulateXmtr(double *buffer, int len)
{
scard->write_samples(buffer, len);
if (progdefaults.viewXmtSignal)
for (int i = 0; i < len; i++) {
scdata[scptr] = buffer[i] * 0.1;
scptr++;
if (scptr == 512) {
wf->sig_data(scdata, 512);
scptr = 0;
}
}
return;
// if (progdefaults.viewXmtSignal)
// for (int i = 0; i < len; i++) {
// scdata[scptr] = buffer[i] * 0.01;
// scptr++;
// if (scptr == 512) {
// wf->sig_data(scdata, 512);
// scptr = 0;
// }
// }
}
void modem::ModulateStereo(double *left, double *right, int len)
{
scard->write_stereo(left, right, len);
if (progdefaults.viewXmtSignal)
for (int i = 0; i < len; i++) {
scdata[scptr] = left[i] * 0.1;
scptr++;
if (scptr == 512) {
wf->sig_data(scdata, 512);
scptr = 0;
}
}
return;
// if (progdefaults.viewXmtSignal)
// for (int i = 0; i < len; i++) {
// scdata[scptr] = left[i] * 0.01;
// scptr++;
// if (scptr == 512) {
// wf->sig_data(scdata, 512);
// scptr = 0;
// }
// }
}

Wyświetl plik

@ -365,7 +365,7 @@ Fl::lock();
for (; sigy > ynext; sigy--) sig_img[sigpixel += IMAGE_WIDTH] = graylevel;
sig_img[sigpixel++] = graylevel;
}
inpFreq->redraw();
// inpFreq->redraw();
redraw();
Fl::unlock();
}
@ -418,14 +418,12 @@ void WFdisp::sig_data( double *sig, int len ) {
}
inpFreq->value(szFrequency);
inpFreq->redraw();
Fl::unlock();
Fl::awake();
// signal level indicator
put_WARNstatus(peakaudio);
Fl::unlock();
Fl::awake();
return;
}