Upstream version 2.10

pull/2/head
Stelios Bounanos 2008-03-14 16:28:38 +00:00
rodzic 122cac96e8
commit 6d97a4e93a
5 zmienionych plików z 31 dodań i 311 usunięć

Wyświetl plik

@ -1,26 +1,31 @@
Change Log:
2.10 1) Added history (ctrl-Left-click in waterfall). Available after tracking
has started. This does not start a new signal acquisition.
2) Psk and ViewPsk use shared signal detection class
2.10 1) Added history decoding (ctrl-Left-click in waterfall). Available after
tracking has started. This does not start a new signal acquisition.
2) Rewrote Psk and ViewPsk to use shared signal detection class
3) Made OSS optional and added autoconf macro to detect its presence
4) The volume sliders will now be hidden if the mixer is disabled
5) Rename some classes so that fldigi builds on Mac OSX.
Many thanks to Justin Burket and Diane Bruce.
6) Added a <MODEM> macro that changes the current modem
7) Added "Log File" status to saved application state
8) Added Pulse Audio support
9) Added "use default audio device" if h/w changes
10) Added HELL80 mode
11) Fixes to ringbuffer / audio backends
12) Fixes to mfsk picture mode decoding
13) Changed frequency2 data file format, downward compatible
14) Added FELD_SLOWHELL, FELD_HELLX5 and FELD_HELLX9 modems
15) Added support to the PortAudio backend for separate capture and
5) Added a <MODEM> macro that changes the current modem
6) Added "Log File" status to saved application state
7) Added "use default audio device" if h/w changes
8) Fixes to ringbuffer / audio backends
9) Fixes to mfsk picture mode decoding
10) Changed frequency2 data file format, downward compatible
11) Added HELL80, FELD_SLOWHELL, FELD_HELLX5 and FELD_HELLX9 modems
12) Added Pulse Audio support with support for separate capture and
playback devices and sample rates
16) Added mt63 500/1000/2000 modes
17) Added psk acquisition level control
18) Added script to create .app bundles on OS X
13) Added mt63 500/1000/2000 modes
14) Added psk acquisition level control
15) Rename some classes so that fldigi builds on Mac OSX.
Added script to create .app bundles on OS X
Many thanks to Justin Burket and Diane Bruce.
16) Rx-slider, Tx-slider, Squelch-slider values added to the saved
application state.
17) Increased number of macros to 48. F11 & F12 now accessible by mouse
or keyboard. Alt Function key button changed to rotate forward (left-
click) and rotate reverse (right-click) through macro sets.
18) New color and font selection dialog - Rx / Tx widgets and macro button
background colors are user selectable
2.09 1) Modified src/Makefile.am for FreeBSD name space clash
2) Added psk multi-channel viewer with regex search capability

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, [2])
m4_define(FLDIGI_MINOR, [10])
m4_define(FLDIGI_PATCH, [Z])
m4_define(FLDIGI_PATCH, [])
AC_INIT([fldigi], FLDIGI_MAJOR.FLDIGI_MINOR[FLDIGI_PATCH], [w1hkj AT w1hkj DOT com])
@ -38,8 +38,8 @@ AC_CONFIG_HEADER([src/config.h])
AC_CONFIG_MACRO_DIR([m4])
AC_DEFINE([PACKAGE_HOME], ["http://www.w1hkj.com/Fldigi-2.x.html"], [Home page])
AC_DEFINE([PACKAGE_DOCS], ["http://www.w1hkj.com/FldigiHelp-2.0/index.html"], [Docs index])
AC_DEFINE([PACKAGE_HOME], ["http://www.w1hkj.com/Fldigi.html"], [Home page])
AC_DEFINE([PACKAGE_DOCS], ["http://www.w1hkj.com/FldigiHelp/index.html"], [Docs index])
# Checks for programs.

Wyświetl plik

@ -1165,293 +1165,7 @@ int below(Fl_Widget* w)
return (a & FL_ALIGN_BOTTOM) ? w->y() + w->h() + FL_NORMAL_SIZE : w->y() + w->h();
}
/*
void create_fl_digi_main() {
int pad = wSpace, Y = 0;
fl_digi_main = new Fl_Double_Window(
progStatus.mainX, progStatus.mainY,
progStatus.mainW, progStatus.mainH,
"fldigi");
mnu = new Fl_Menu_Bar(0, 0, progStatus.mainW - 142, Hmenu);
// FL_NORMAL_SIZE may have changed; update the menu items
for (size_t i = 0; i < sizeof(menu_)/sizeof(menu_[0]); i++)
if (menu_[i].text)
menu_[i].labelsize_ = FL_NORMAL_SIZE;
mnu->menu(menu_);
btnTune = new Fl_Button(progStatus.mainW - 142, 0, 60, Hmenu, "TUNE");
btnTune->type(FL_TOGGLE_BUTTON);
btnTune->callback(cbTune, 0);
btnMacroTimer = new Fl_Button(progStatus.mainW - 80 - pad, 0, 80, Hmenu);
btnMacroTimer->color(fl_rgb_color(255, 255, 100));
btnMacroTimer->labelcolor(FL_RED);
btnMacroTimer->callback(cbMacroTimerButton, 0);
btnMacroTimer->hide();
Fl_Box *bx = new Fl_Box(progStatus.mainW - 80 - pad, 0, 80, Hmenu,"");
bx->box(FL_UP_BOX);
Y += Hmenu;
Fl_Group *qsoFrame = new Fl_Group(0, Y, progStatus.mainW, Hqsoframe);
inpFreq = new Fl_Input(pad, Y + Hqsoframe/2 - pad, 85, Hqsoframe/2, "Frequency");
inpFreq->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
inpTime = new Fl_Input(rightof(inpFreq) + pad, Y + Hqsoframe/2 - pad, 45, Hqsoframe/2, "Time");
inpTime->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
qsoTime = new Fl_Button(rightof(inpTime) + pad, Y + Hqsoframe/2 - pad, 24, Hqsoframe/2);
Fl_Image *pixmap = new Fl_Pixmap(cal_16);
qsoTime->image(pixmap);
qsoTime->callback(qsoTime_cb, 0);
inpCall = new Fl_Input(rightof(qsoTime) + pad, Y + Hqsoframe/2 - pad, 80, Hqsoframe/2, "Call");
inpCall->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
// this is likely to be more readable in a constant width font
inpCall->textfont(FL_SCREEN);
inpName = new Fl_Input(rightof(inpCall) + pad, Y + Hqsoframe/2 - pad, 100, Hqsoframe/2, "Name");
inpName->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
inpRstIn = new Fl_Input(rightof(inpName) + pad, Y + Hqsoframe/2 - pad, 40, Hqsoframe/2, "RST(r)");
inpRstIn->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
inpRstOut = new Fl_Input(rightof(inpRstIn) + pad, Y + Hqsoframe/2 - pad, 40, Hqsoframe/2, "RST(s)");
inpRstOut->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
btnQRZ = new Fl_Button(progStatus.mainW - 40 - pad, Y + 1, 40, Hqsoframe/2 - pad, "QRZ");
btnQRZ->callback(cb_QRZ, 0);
inpLoc = new Fl_Input(leftof(btnQRZ) - pad - 80, Y + Hqsoframe/2 - pad, 80, Hqsoframe/2, "Locator");
inpLoc->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
inpLoc->textfont(FL_SCREEN);
inpQth = new Fl_Input(rightof(inpRstOut) + pad, Y + Hqsoframe/2 - pad,
leftof(inpLoc) - rightof(inpRstOut) - 2*pad, Hqsoframe/2, "QTH");
inpQth->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
qsoFrame->resizable(inpQth);
qsoClear = new Fl_Button(progStatus.mainW - 40 - pad, Y + Hqsoframe/2 + 1, 40, Hqsoframe/2 - pad, "Clear");
qsoClear->callback(qsoClear_cb, 0);
qsoFrame->end();
Y += Hqsoframe;
Fl_Group *qsoFrame2 = new Fl_Group(0,Y, progStatus.mainW, Hnotes);
qsoSave = new Fl_Button(progStatus.mainW - 40 - pad, Y + 1, 40, Hnotes - 2, "Save");
qsoSave->callback(qsoSave_cb, 0);
inpAZ = new Fl_Input(leftof(qsoSave) - 80 - pad, Y, 80, Hnotes, "AZ"); // WA5ZNU
inpAZ->align(FL_ALIGN_LEFT);
// align this vertically with the Call field
inpNotes = new Fl_Input(leftof(inpCall), Y, leftof(inpAZ) - leftof(inpCall) - 2*pad, Hnotes, "Notes");
inpNotes->align(FL_ALIGN_LEFT);
qsoFrame2->resizable(inpNotes);
btnSideband = new Fl_Button(leftof(inpNotes) - 2*pad - (Hnotes-2), Y+1, Hnotes-2, Hnotes-2, "U");
btnSideband->callback(cb_btnSideband, 0);
btnSideband->hide();
cboBand = new Fl_ComboBox(pad, Y, leftof(btnSideband) - pad, Hnotes, "");
cboBand->hide();
qsoFrame2->end();
Y += Hnotes;
int sw = 15;
int TextH = progStatus.mainH - 140 - Hwfall;
MixerFrame = new Fl_Group(0,Y,sw, TextH);
valRcvMixer = new Fl_Slider(0, Y, sw, (TextH)/2, "");
valRcvMixer->type(FL_VERT_NICE_SLIDER);
valRcvMixer->color(fl_rgb_color(0,110,30));
valRcvMixer->labeltype(FL_ENGRAVED_LABEL);
valRcvMixer->selection_color(fl_rgb_color(255,255,0));
valRcvMixer->range(1.0,0.0);
valRcvMixer->value(1.0);
valRcvMixer->callback( (Fl_Callback *)cb_RcvMixer);
valXmtMixer = new Fl_Slider(0, Y + (TextH)/2, sw, (TextH)/2, "");
valXmtMixer->type(FL_VERT_NICE_SLIDER);
valXmtMixer->color(fl_rgb_color(110,0,30));
valXmtMixer->labeltype(FL_ENGRAVED_LABEL);
valXmtMixer->selection_color(fl_rgb_color(255,255,0));
valXmtMixer->range(1.0,0.0);
valXmtMixer->value(1.0);
valXmtMixer->callback( (Fl_Callback *)cb_XmtMixer);
MixerFrame->end();
TiledGroup = new Fl_Tile_check(sw, Y, progStatus.mainW - sw, TextH);
int minRxHeight = progStatus.RxTextHeight;
int minTxHeight;
if (minRxHeight < 66) minRxHeight = 66;
minTxHeight = TextH - minRxHeight;
Fl_Box *minbox = new Fl_Box(sw,Y + 66, progStatus.mainW - sw, TextH - 66 - 32);
minbox->hide();
if (progdefaults.alt_text_widgets)
ReceiveText = new FTextView(sw, Y, progStatus.mainW - sw, minRxHeight, "");
else
ReceiveText = new TextView(sw, Y, progStatus.mainW - sw, minRxHeight, "");
ReceiveText->color(
fl_rgb_color(
progdefaults.RxColor.R,
progdefaults.RxColor.G,
progdefaults.RxColor.B));
FHdisp = new Raster(sw, Y, progStatus.mainW - sw, minRxHeight);
FHdisp->hide();
Y += minRxHeight;
if (progdefaults.alt_text_widgets)
TransmitText = new FTextEdit(sw, Y, progStatus.mainW - sw, minTxHeight);
else
TransmitText = new TextEdit(sw, Y, progStatus.mainW - sw, minTxHeight);
TransmitText->color(
fl_rgb_color(
progdefaults.TxColor.R,
progdefaults.TxColor.G,
progdefaults.TxColor.B));
Y += minTxHeight;
TiledGroup->resizable(minbox);
TiledGroup->end();
Fl_Group::current()->resizable(TiledGroup);
Fl_Box *macroFrame = new Fl_Box(0, Y, progStatus.mainW, Hmacros);
macroFrame->box(FL_ENGRAVED_FRAME);
int Wbtn = (progStatus.mainW - 30 - 8 - 4)/12;
int xpos = 2;
for (int i = 0; i < 12; i++) {
if (i == 4 || i == 8) {
bx = new Fl_Box(xpos, Y+2, 5, Hmacros - 4);
bx->box(FL_FLAT_BOX);
bx->color(FL_BLACK);
xpos += 4;
}
btnMacro[i] = new Fl_Button(xpos, Y+2, Wbtn, Hmacros - 4);
btnMacro[i]->callback(macro_cb, (void *)i);
btnMacro[i]->label( (macros.name[i]).c_str());
colorize_macro(i);
xpos += Wbtn;
}
bx = new Fl_Box(xpos, Y+2, progStatus.mainW - 32 - xpos, Hmacros - 4);
bx->box(FL_FLAT_BOX);
bx->color(FL_BLACK);
btnAltMacros = new Fl_Button(progStatus.mainW - 32, Y+2, 30, Hmacros - 4, "1");
btnAltMacros->callback(altmacro_cb, 0);
Y += Hmacros;
Fl_Pack *wfpack = new Fl_Pack(0, Y, progStatus.mainW, Hwfall);
std::cout << Y << " " << progStatus.mainW << " " << progStatus.mainW - Hwfall +24 << std::endl; std::cout.flush();
wfpack->type(1);
wf = new waterfall(0, Y, progStatus.mainW - Hwfall + 24, Hwfall);
wf->end();
Fl_Pack *ypack = new Fl_Pack(progStatus.mainW - (Hwfall-24), Y, Hwfall-24, Hwfall);
ypack->type(0);
digiscope = new Digiscope (progStatus.mainW - (Hwfall-24), Y, Hwfall-24, Hwfall-24);
pgrsSquelch = new Fl_Progress(
progStatus.mainW - (Hwfall-24), Y + Hwfall - 24,
Hwfall - 24, 12, "");
pgrsSquelch->color(FL_BACKGROUND2_COLOR, FL_DARK_GREEN);
sldrSquelch = new Fl_Slider(
FL_HOR_NICE_SLIDER,
progStatus.mainW - (Hwfall-24), Y + Hwfall - 12,
Hwfall - 24, 12, "");
sldrSquelch->minimum(0);
sldrSquelch->maximum(100);
sldrSquelch->step(1);
sldrSquelch->value(progStatus.sldrSquelchValue);
sldrSquelch->callback((Fl_Callback*)cb_sldrSquelch);
sldrSquelch->color(FL_INACTIVE_COLOR);
ypack->end();
Fl_Group::current()->resizable(wf);
wfpack->end();
Y += (Hwfall + 2);
Fl_Pack *hpack = new Fl_Pack(0, Y, progStatus.mainW, Hstatus);
hpack->type(1);
MODEstatus = new Fl_Button(0,Hmenu+TextH+Hxmttxt+Hwfall, Wmode, Hstatus, "");
MODEstatus->box(FL_DOWN_BOX);
MODEstatus->color(FL_BACKGROUND2_COLOR);
MODEstatus->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
MODEstatus->callback(status_cb, (void *)0);
MODEstatus->when(FL_WHEN_CHANGED);
MODEstatus->tooltip("Left clk - change mode\nRight clk - Modem Tab");
Status1 = new Fl_Box(Wmode,Hmenu+TextH+Hxmttxt+Hwfall, Ws2n, Hstatus, "");
Status1->box(FL_DOWN_BOX);
Status1->color(FL_BACKGROUND2_COLOR);
Status1->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
Status2 = new Fl_Box(Wmode+Ws2n, Hmenu+TextH+Hxmttxt+Hwfall, Wimd, Hstatus, "");
Status2->box(FL_DOWN_BOX);
Status2->color(FL_BACKGROUND2_COLOR);
Status2->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
StatusBar = new Fl_Box(
Wmode+Wimd+Ws2n, Hmenu+TextH+Hxmttxt+Hwfall, Wstatus, Hstatus, "");
StatusBar->box(FL_DOWN_BOX);
StatusBar->color(FL_BACKGROUND2_COLOR);
StatusBar->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
WARNstatus = new Fl_Box(
Wmode+Wimd+Ws2n+Wstatus, Hmenu+TextH+Hxmttxt+Hwfall,
Wwarn, Hstatus, "");
WARNstatus->box(FL_DIAMOND_DOWN_BOX);
WARNstatus->color(FL_BACKGROUND_COLOR);
WARNstatus->labelcolor(FL_RED);
WARNstatus->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
if (useCheckButtons) {
chk_afconoff = new Fl_Check_Button(
progStatus.mainW - bwAfcOnOff - bwSqlOnOff,
Hmenu+TextH+Hxmttxt+Hwfall,
bwAfcOnOff, Hstatus, "Afc");
chk_afconoff->callback(afconoff_cb, 0);
chk_afconoff->value(progStatus.afconoff);
chk_afconoff->tooltip("AFC on/off");
chk_sqlonoff = new Fl_Check_Button(
progStatus.mainW - bwSqlOnOff,
Hmenu+TextH+Hxmttxt+Hwfall,
bwSqlOnOff, Hstatus, "Sql");
chk_sqlonoff->callback(sqlonoff_cb, 0);
chk_sqlonoff->value(progStatus.sqlonoff);
chk_sqlonoff->tooltip("SQL on/off");
} else {
btn_afconoff = new Fl_Light_Button(
progStatus.mainW - bwAfcOnOff - bwSqlOnOff,
Hmenu+TextH+Hxmttxt+Hwfall,
bwAfcOnOff, Hstatus, "Afc");
btn_afconoff->callback(afconoff_cb, 0);
btn_afconoff->value(progStatus.afconoff);
btn_afconoff->tooltip("AFC on/off");
btn_sqlonoff = new Fl_Light_Button(
progStatus.mainW - bwSqlOnOff,
Hmenu+TextH+Hxmttxt+Hwfall,
bwSqlOnOff, Hstatus, "Sql");
btn_sqlonoff->callback(sqlonoff_cb, 0);
btn_sqlonoff->value(progStatus.sqlonoff);
btn_sqlonoff->tooltip("SQL on/off");
}
Fl_Group::current()->resizable(StatusBar);
hpack->end();
fl_digi_main->size_range(progStatus.mainW, progStatus.mainH);
fl_digi_main->end();
fl_digi_main->callback(cb_wMain);
#ifndef __APPLE__
make_pixmap(&fldigi_icon_pixmap, fldigi_icon_48_xpm);
fl_digi_main->icon((char *)fldigi_icon_pixmap);
#endif
fl_digi_main->xclass(PACKAGE_NAME);
}
*/
//*
void create_fl_digi_main() {
int pad = wSpace, Y = 0;
fl_digi_main = new Fl_Double_Window(WNOM, HNOM, "fldigi");
@ -1732,7 +1446,7 @@ void create_fl_digi_main() {
fl_digi_main->xclass(PACKAGE_NAME);
}
//*/
void put_freq(double frequency)
{

Wyświetl plik

@ -929,7 +929,7 @@ void SoundPort::src_data_reset(int mode)
rx_src_state = src_new(sample_converter, 2, &err);
if (!rx_src_state)
throw SndException(src_strerror(err));
rx_src_data->src_ratio = req_sample_rate / (dev_sample_rate[STREAM_IN] * (1.0 + rxppm / 1e6));
rx_src_data->src_ratio = req_sample_rate / dev_sample_rate[STREAM_IN] * (1.0 + rxppm / 1e6);
}
if (mode & 1 << O_WRONLY) {
if (tx_src_state)
@ -1349,7 +1349,7 @@ void SoundPulse::src_data_reset(int mode)
rx_src_state = src_new(sample_converter, stream_params.channels, &err);
if (!rx_src_state)
throw SndException(src_strerror(err));
rx_src_data->src_ratio = sample_frequency / (dev_sample_rate[0] * (1.0 + rxppm / 1e6));
rx_src_data->src_ratio = sample_frequency / dev_sample_rate[0] * (1.0 + rxppm / 1e6);
}
if (mode & 1 << O_WRONLY) {
if (tx_src_state)

Wyświetl plik

@ -98,8 +98,9 @@ void trx_trx_receive_loop()
}
catch (const SndException& e) {
put_status(e.what(), 5);
scard->Close();
#if USE_PORTAUDIO
if (e.error() == EBUSY && progdefaults.btnAudioIOis == 1) {
if (e.error() == EBUSY && progdefaults.btnAudioIOis == SND_IDX_PORT) {
SoundPort::terminate();
SoundPort::initialize();
}