Merged 3.22.0 with berlios/pu/cs development work
  on packet modem
pull/1/head
Chris Sylvain 2011-05-23 17:40:56 -05:00 zatwierdzone przez David Freese
rodzic b74102f9c6
commit 4931d1d150
18 zmienionych plików z 3389 dodań i 225 usunięć

Wyświetl plik

@ -366,6 +366,8 @@ fldigi_SOURCES += \
include/rsid.h \
include/rtty.h \
include/view_rtty.h \
include/pkt.h \
include/nco.h \
include/rx_extract.h \
include/speak.h \
include/serial.h \
@ -477,6 +479,7 @@ fldigi_SOURCES += \
spot/spot.cxx \
ssb/ssb.cxx \
throb/throb.cxx \
packet/pkt.cxx \
trx/modem.cxx \
trx/trx.cxx \
waterfall/colorbox.cxx \

Wyświetl plik

@ -170,7 +170,7 @@ void rtty::restart()
case 4 : rtty_parity = RTTY_PARITY_ONE; break;
default : rtty_parity = RTTY_PARITY_NONE; break;
}
rtty_stop = progdefaults.rtty_stop;
// (exists below already) rtty_stop = progdefaults.rtty_stop;
txmode = LETTERS;
rxmode = LETTERS;

Wyświetl plik

@ -955,6 +955,49 @@ Fl_Group *tabModems=(Fl_Group *)0;
Fl_Tabs *tabsModems=(Fl_Tabs *)0;
Fl_Group *tabContestia=(Fl_Group *)0;
Fl_Choice *mnuContestia_Bandwidth=(Fl_Choice *)0;
static void cb_mnuContestia_Bandwidth(Fl_Choice* o, void*) {
progdefaults.contestiabw = o->value();
set_contestia_default_integ();
resetOLIVIA();
progdefaults.changed = true;
}
Fl_Choice *mnuContestia_Tones=(Fl_Choice *)0;
static void cb_mnuContestia_Tones(Fl_Choice* o, void*) {
progdefaults.contestiatones = o->value();
set_contestia_default_integ();
resetCONTESTIA();
progdefaults.changed = true;
}
Fl_Counter2 *cntContestia_smargin=(Fl_Counter2 *)0;
static void cb_cntContestia_smargin(Fl_Counter2* o, void*) {
progdefaults.contestiasmargin = (int)(o->value());
resetCONTESTIA();
progdefaults.changed = true;
}
Fl_Counter2 *cntContestia_sinteg=(Fl_Counter2 *)0;
static void cb_cntContestia_sinteg(Fl_Counter2* o, void*) {
progdefaults.contestiasinteg = (int)(o->value());
resetCONTESTIA();
progdefaults.changed = true;
}
Fl_Check_Button *btnContestia_8bit=(Fl_Check_Button *)0;
static void cb_btnContestia_8bit(Fl_Check_Button* o, void*) {
progdefaults.contestia8bit = o->value();
progdefaults.changed = true;
}
Fl_Group *tabCW=(Fl_Group *)0;
Fl_Tabs *tabsCW=(Fl_Tabs *)0;
@ -1450,49 +1493,6 @@ static void cb_btnOlivia_8bit(Fl_Check_Button* o, void*) {
progdefaults.changed = true;
}
Fl_Group *tabContestia=(Fl_Group *)0;
Fl_Choice *mnuContestia_Bandwidth=(Fl_Choice *)0;
static void cb_mnuContestia_Bandwidth(Fl_Choice* o, void*) {
progdefaults.contestiabw = o->value();
set_contestia_default_integ();
resetOLIVIA();
progdefaults.changed = true;
}
Fl_Choice *mnuContestia_Tones=(Fl_Choice *)0;
static void cb_mnuContestia_Tones(Fl_Choice* o, void*) {
progdefaults.contestiatones = o->value();
set_contestia_default_integ();
resetCONTESTIA();
progdefaults.changed = true;
}
Fl_Counter2 *cntContestia_smargin=(Fl_Counter2 *)0;
static void cb_cntContestia_smargin(Fl_Counter2* o, void*) {
progdefaults.contestiasmargin = (int)(o->value());
resetCONTESTIA();
progdefaults.changed = true;
}
Fl_Counter2 *cntContestia_sinteg=(Fl_Counter2 *)0;
static void cb_cntContestia_sinteg(Fl_Counter2* o, void*) {
progdefaults.contestiasinteg = (int)(o->value());
resetCONTESTIA();
progdefaults.changed = true;
}
Fl_Check_Button *btnContestia_8bit=(Fl_Check_Button *)0;
static void cb_btnContestia_8bit(Fl_Check_Button* o, void*) {
progdefaults.contestia8bit = o->value();
progdefaults.changed = true;
}
Fl_Group *tabPSK=(Fl_Group *)0;
Fl_Tabs *tabsPSK=(Fl_Tabs *)0;
@ -1701,6 +1701,105 @@ static void cb_valTHOR_PATHS(Fl_Counter2* o, void*) {
progdefaults.changed = true;
}
Fl_Group *tabPacket=(Fl_Group *)0;
Fl_Choice *selPacket_Baud=(Fl_Choice *)0;
static void cb_selPacket_Baud(Fl_Choice* o, void*) {
progdefaults.PKT_BAUD_SELECT = o->value();
updatePACKET();
progdefaults.changed = true;
}
Fl_Counter2 *valPacket_LoSig_RXGain=(Fl_Counter2 *)0;
static void cb_valPacket_LoSig_RXGain(Fl_Counter2* o, void*) {
progdefaults.PKT_LOSIG_RXGAIN = o->value();
updatePACKET();
progdefaults.changed = true;
}
Fl_Counter2 *valPacket_HiSig_RXGain=(Fl_Counter2 *)0;
static void cb_valPacket_HiSig_RXGain(Fl_Counter2* o, void*) {
progdefaults.PKT_HISIG_RXGAIN = o->value();
updatePACKET();
progdefaults.changed = true;
}
Fl_Counter2 *valPacket_LoSig_TXGain=(Fl_Counter2 *)0;
static void cb_valPacket_LoSig_TXGain(Fl_Counter2* o, void*) {
progdefaults.PKT_LOSIG_TXGAIN = o->value();
updatePACKET();
progdefaults.changed = true;
}
Fl_Counter2 *valPacket_HiSig_TXGain=(Fl_Counter2 *)0;
static void cb_valPacket_HiSig_TXGain(Fl_Counter2* o, void*) {
progdefaults.PKT_HISIG_TXGAIN = o->value();
updatePACKET();
progdefaults.changed = true;
}
Fl_Check_Button *btnPktRXTimestamp=(Fl_Check_Button *)0;
static void cb_btnPktRXTimestamp(Fl_Check_Button* o, void*) {
progdefaults.PKT_RXTimestamp=o->value();
progdefaults.changed = true;
}
Fl_Check_Button *btnPktexpandCmp=(Fl_Check_Button *)0;
static void cb_btnPktexpandCmp(Fl_Check_Button* o, void*) {
progdefaults.PKT_expandCmp=o->value();
progdefaults.changed = true;
}
Fl_Check_Button *btnPktexpandMicE=(Fl_Check_Button *)0;
static void cb_btnPktexpandMicE(Fl_Check_Button* o, void*) {
progdefaults.PKT_expandMicE=o->value();
progdefaults.changed = true;
}
Fl_Check_Button *btnPktexpandPHG=(Fl_Check_Button *)0;
static void cb_btnPktexpandPHG(Fl_Check_Button* o, void*) {
progdefaults.PKT_expandPHG=o->value();
progdefaults.changed = true;
}
Fl_Check_Button *btnPktunitsSI=(Fl_Check_Button *)0;
static void cb_btnPktunitsSI(Fl_Check_Button* o, void*) {
progdefaults.PKT_unitsSI=o->value();
if (progdefaults.PKT_unitsSI) {
progdefaults.PKT_unitsEnglish=false;
btnPktunitsEnglish->value(false);
}
progdefaults.changed = true;
}
Fl_Check_Button *btnPktunitsEnglish=(Fl_Check_Button *)0;
static void cb_btnPktunitsEnglish(Fl_Check_Button* o, void*) {
progdefaults.PKT_unitsEnglish=o->value();
if (progdefaults.PKT_unitsSI) {
progdefaults.PKT_unitsSI=false;
btnPktunitsSI->value(false);
}
progdefaults.changed = true;
}
Fl_Check_Button *btnPktPreferXhairScope=(Fl_Check_Button *)0;
static void cb_btnPktPreferXhairScope(Fl_Check_Button* o, void*) {
progdefaults.PKT_PreferXhairScope=o->value();
progdefaults.changed = true;
}
Fl_Group *tabRig=(Fl_Group *)0;
Fl_Tabs *tabsRig=(Fl_Tabs *)0;
@ -2905,6 +3004,7 @@ static const char szOliviaTones[] = "2|4|8|16|32|64|128|256";
static const char szOliviaBandwidth[] = "125|250|500|1000|2000";
static const char szContestiaTones[] = "2|4|8|16|32|64|128|256";
static const char szContestiaBandwidth[] = "125|250|500|1000|2000";
static const char szPktBauds[] = "1200|300|2400";
static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600|115200|230400|460800";
static const char szProsigns[] = "~|%|&|+|=|{|}|<|>|[|]| ";
{ Fl_Double_Window* o = new Fl_Double_Window(500, 400, _("Fldigi configuration"));
@ -2913,7 +3013,7 @@ static const char szProsigns[] = "~|%|&|+|=|{|}|<|>|[|]| ";
o->selection_color((Fl_Color)51);
o->labelsize(18);
o->align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE);
{ tabsConfigure = new Fl_Tabs(-4, 0, 521, 372);
{ tabsConfigure = new Fl_Tabs(-4, 0, 544, 372);
tabsConfigure->color((Fl_Color)FL_LIGHT1);
tabsConfigure->selection_color((Fl_Color)FL_LIGHT1);
{ tabOperator = new Fl_Group(0, 25, 500, 345, _("Operator"));
@ -3340,7 +3440,6 @@ ab and newline are automatically included."));
tabMBars->end();
} // Fl_Group* tabMBars
{ tabContest = new Fl_Group(0, 50, 500, 320, _("Contest"));
tabContest->hide();
{ Fl_Group* o = new Fl_Group(5, 60, 490, 80, _("Exchanges"));
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
@ -3577,6 +3676,7 @@ ab and newline are automatically included."));
tabWF_UI->end();
} // Fl_Group* tabWF_UI
{ tabRxText = new Fl_Group(0, 50, 500, 320, _("Rx Text"));
tabRxText->hide();
{ Fl_Check_Button* o = btn_rx_lowercase = new Fl_Check_Button(27, 75, 389, 20, _("Print CW / RTTY / THROB / CONTESTIA in lowercase"));
btn_rx_lowercase->down_box(FL_DOWN_BOX);
btn_rx_lowercase->callback((Fl_Callback*)cb_btn_rx_lowercase);
@ -3903,11 +4003,83 @@ an merging"));
} // Fl_Tabs* tabsWaterfall
tabWaterfall->end();
} // Fl_Group* tabWaterfall
{ tabModems = new Fl_Group(-4, 25, 521, 347, _("Modems"));
{ tabModems = new Fl_Group(-4, 25, 544, 347, _("Modems"));
tabModems->hide();
{ tabsModems = new Fl_Tabs(-4, 25, 521, 347);
{ tabsModems = new Fl_Tabs(-4, 25, 544, 347);
tabsModems->selection_color((Fl_Color)FL_LIGHT1);
tabsModems->align(FL_ALIGN_TOP_RIGHT);
{ tabContestia = new Fl_Group(0, 50, 500, 320, _("Contestia"));
{ Fl_Group* o = new Fl_Group(5, 60, 490, 200);
o->box(FL_ENGRAVED_FRAME);
{ Fl_Choice* o = mnuContestia_Bandwidth = new Fl_Choice(60, 80, 85, 20, _("Bandwidth"));
mnuContestia_Bandwidth->tooltip(_("Select bandwidth"));
mnuContestia_Bandwidth->down_box(FL_BORDER_BOX);
mnuContestia_Bandwidth->callback((Fl_Callback*)cb_mnuContestia_Bandwidth);
mnuContestia_Bandwidth->align(FL_ALIGN_RIGHT);
o->add(szContestiaBandwidth);
o->value(2);
} // Fl_Choice* mnuContestia_Bandwidth
{ Fl_Choice* o = mnuContestia_Tones = new Fl_Choice(321, 80, 70, 20, _("Tones"));
mnuContestia_Tones->tooltip(_("Select number of tones"));
mnuContestia_Tones->down_box(FL_BORDER_BOX);
mnuContestia_Tones->callback((Fl_Callback*)cb_mnuContestia_Tones);
mnuContestia_Tones->align(FL_ALIGN_RIGHT);
o->add(szContestiaTones);
o->value(2);
} // Fl_Choice* mnuContestia_Tones
{ Fl_Group* o = new Fl_Group(60, 119, 379, 100, _("Receive synchronizer"));
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ Fl_Counter2* o = cntContestia_smargin = new Fl_Counter2(80, 150, 70, 20, _("Tune margin (tone frequency spacing)"));
cntContestia_smargin->tooltip(_("Change ONLY to experiment"));
cntContestia_smargin->type(1);
cntContestia_smargin->box(FL_UP_BOX);
cntContestia_smargin->color((Fl_Color)FL_BACKGROUND_COLOR);
cntContestia_smargin->selection_color((Fl_Color)FL_INACTIVE_COLOR);
cntContestia_smargin->labeltype(FL_NORMAL_LABEL);
cntContestia_smargin->labelfont(0);
cntContestia_smargin->labelsize(14);
cntContestia_smargin->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
cntContestia_smargin->minimum(2);
cntContestia_smargin->maximum(128);
cntContestia_smargin->step(1);
cntContestia_smargin->value(8);
cntContestia_smargin->callback((Fl_Callback*)cb_cntContestia_smargin);
cntContestia_smargin->align(FL_ALIGN_RIGHT);
cntContestia_smargin->when(FL_WHEN_CHANGED);
o->labelsize(FL_NORMAL_SIZE);
} // Fl_Counter2* cntContestia_smargin
{ Fl_Counter2* o = cntContestia_sinteg = new Fl_Counter2(80, 180, 70, 20, _("Integration period (FEC blocks)"));
cntContestia_sinteg->tooltip(_("Change ONLY to experiment"));
cntContestia_sinteg->type(1);
cntContestia_sinteg->box(FL_UP_BOX);
cntContestia_sinteg->color((Fl_Color)FL_BACKGROUND_COLOR);
cntContestia_sinteg->selection_color((Fl_Color)FL_INACTIVE_COLOR);
cntContestia_sinteg->labeltype(FL_NORMAL_LABEL);
cntContestia_sinteg->labelfont(0);
cntContestia_sinteg->labelsize(14);
cntContestia_sinteg->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
cntContestia_sinteg->minimum(2);
cntContestia_sinteg->maximum(128);
cntContestia_sinteg->step(1);
cntContestia_sinteg->value(4);
cntContestia_sinteg->callback((Fl_Callback*)cb_cntContestia_sinteg);
cntContestia_sinteg->align(FL_ALIGN_RIGHT);
cntContestia_sinteg->when(FL_WHEN_CHANGED);
o->labelsize(FL_NORMAL_SIZE);
} // Fl_Counter2* cntContestia_sinteg
o->end();
} // Fl_Group* o
{ btnContestia_8bit = new Fl_Check_Button(60, 229, 200, 20, _("8-bit extended characters"));
btnContestia_8bit->tooltip(_("Enable this for Latin-1 accented characters"));
btnContestia_8bit->down_box(FL_DOWN_BOX);
btnContestia_8bit->callback((Fl_Callback*)cb_btnContestia_8bit);
btnContestia_8bit->hide();
} // Fl_Check_Button* btnContestia_8bit
o->end();
} // Fl_Group* o
tabContestia->end();
} // Fl_Group* tabContestia
{ tabCW = new Fl_Group(0, 50, 504, 320, _("CW"));
tabCW->hide();
{ tabsCW = new Fl_Tabs(0, 50, 504, 320);
@ -4307,7 +4479,7 @@ an merging"));
} // Fl_Tabs* tabsCW
tabCW->end();
} // Fl_Group* tabCW
{ tabDomEX = new Fl_Group(0, 50, 500, 320, _("DomEX"));
{ tabDomEX = new Fl_Group(0, 50, 500, 320, _("Dom"));
tabDomEX->hide();
{ Fl_Group* o = new Fl_Group(5, 60, 490, 180);
o->box(FL_ENGRAVED_FRAME);
@ -4401,7 +4573,7 @@ an merging"));
} // Fl_Group* o
tabDomEX->end();
} // Fl_Group* tabDomEX
{ tabFeld = new Fl_Group(0, 50, 500, 320, _("Feldhell"));
{ tabFeld = new Fl_Group(0, 50, 500, 320, _("FH"));
tabFeld->hide();
{ Fl_Group* o = new Fl_Group(5, 60, 490, 145);
o->box(FL_ENGRAVED_FRAME);
@ -4623,80 +4795,8 @@ an merging"));
} // Fl_Group* o
tabOlivia->end();
} // Fl_Group* tabOlivia
{ tabContestia = new Fl_Group(0, 50, 500, 320, _("Contestia"));
tabContestia->hide();
{ Fl_Group* o = new Fl_Group(5, 60, 490, 200);
o->box(FL_ENGRAVED_FRAME);
{ Fl_Choice* o = mnuContestia_Bandwidth = new Fl_Choice(60, 80, 85, 20, _("Bandwidth"));
mnuContestia_Bandwidth->tooltip(_("Select bandwidth"));
mnuContestia_Bandwidth->down_box(FL_BORDER_BOX);
mnuContestia_Bandwidth->callback((Fl_Callback*)cb_mnuContestia_Bandwidth);
mnuContestia_Bandwidth->align(FL_ALIGN_RIGHT);
o->add(szContestiaBandwidth);
o->value(2);
} // Fl_Choice* mnuContestia_Bandwidth
{ Fl_Choice* o = mnuContestia_Tones = new Fl_Choice(321, 80, 70, 20, _("Tones"));
mnuContestia_Tones->tooltip(_("Select number of tones"));
mnuContestia_Tones->down_box(FL_BORDER_BOX);
mnuContestia_Tones->callback((Fl_Callback*)cb_mnuContestia_Tones);
mnuContestia_Tones->align(FL_ALIGN_RIGHT);
o->add(szContestiaTones);
o->value(2);
} // Fl_Choice* mnuContestia_Tones
{ Fl_Group* o = new Fl_Group(60, 119, 379, 100, _("Receive synchronizer"));
o->box(FL_ENGRAVED_FRAME);
o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE);
{ Fl_Counter2* o = cntContestia_smargin = new Fl_Counter2(80, 150, 70, 20, _("Tune margin (tone frequency spacing)"));
cntContestia_smargin->tooltip(_("Change ONLY to experiment"));
cntContestia_smargin->type(1);
cntContestia_smargin->box(FL_UP_BOX);
cntContestia_smargin->color((Fl_Color)FL_BACKGROUND_COLOR);
cntContestia_smargin->selection_color((Fl_Color)FL_INACTIVE_COLOR);
cntContestia_smargin->labeltype(FL_NORMAL_LABEL);
cntContestia_smargin->labelfont(0);
cntContestia_smargin->labelsize(14);
cntContestia_smargin->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
cntContestia_smargin->minimum(2);
cntContestia_smargin->maximum(128);
cntContestia_smargin->step(1);
cntContestia_smargin->value(8);
cntContestia_smargin->callback((Fl_Callback*)cb_cntContestia_smargin);
cntContestia_smargin->align(FL_ALIGN_RIGHT);
cntContestia_smargin->when(FL_WHEN_CHANGED);
o->labelsize(FL_NORMAL_SIZE);
} // Fl_Counter2* cntContestia_smargin
{ Fl_Counter2* o = cntContestia_sinteg = new Fl_Counter2(80, 180, 70, 20, _("Integration period (FEC blocks)"));
cntContestia_sinteg->tooltip(_("Change ONLY to experiment"));
cntContestia_sinteg->type(1);
cntContestia_sinteg->box(FL_UP_BOX);
cntContestia_sinteg->color((Fl_Color)FL_BACKGROUND_COLOR);
cntContestia_sinteg->selection_color((Fl_Color)FL_INACTIVE_COLOR);
cntContestia_sinteg->labeltype(FL_NORMAL_LABEL);
cntContestia_sinteg->labelfont(0);
cntContestia_sinteg->labelsize(14);
cntContestia_sinteg->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
cntContestia_sinteg->minimum(2);
cntContestia_sinteg->maximum(128);
cntContestia_sinteg->step(1);
cntContestia_sinteg->value(4);
cntContestia_sinteg->callback((Fl_Callback*)cb_cntContestia_sinteg);
cntContestia_sinteg->align(FL_ALIGN_RIGHT);
cntContestia_sinteg->when(FL_WHEN_CHANGED);
o->labelsize(FL_NORMAL_SIZE);
} // Fl_Counter2* cntContestia_sinteg
o->end();
} // Fl_Group* o
{ btnContestia_8bit = new Fl_Check_Button(60, 229, 200, 20, _("8-bit extended characters"));
btnContestia_8bit->tooltip(_("Enable this for Latin-1 accented characters"));
btnContestia_8bit->down_box(FL_DOWN_BOX);
btnContestia_8bit->callback((Fl_Callback*)cb_btnContestia_8bit);
btnContestia_8bit->hide();
} // Fl_Check_Button* btnContestia_8bit
o->end();
} // Fl_Group* o
tabContestia->end();
} // Fl_Group* tabContestia
{ tabPSK = new Fl_Group(-4, 50, 521, 322, _("PSK"));
tabPSK->hide();
{ tabsPSK = new Fl_Tabs(-4, 50, 521, 322);
tabsPSK->selection_color((Fl_Color)FL_LIGHT1);
{ Fl_Group* o = new Fl_Group(0, 75, 500, 295, _("General"));
@ -5055,6 +5155,141 @@ an merging"));
} // Fl_Group* o
tabTHOR->end();
} // Fl_Group* tabTHOR
{ tabPacket = new Fl_Group(0, 50, 540, 320, _("Packet"));
tabPacket->hide();
{ Fl_Group* o = new Fl_Group(5, 60, 490, 296);
o->box(FL_ENGRAVED_FRAME);
{ Fl_Choice* o = selPacket_Baud = new Fl_Choice(44, 85, 100, 20, _("Baud rate"));
selPacket_Baud->tooltip(_("Select packet baudrate"));
selPacket_Baud->down_box(FL_BORDER_BOX);
selPacket_Baud->callback((Fl_Callback*)cb_selPacket_Baud);
selPacket_Baud->align(FL_ALIGN_RIGHT);
selPacket_Baud->when(FL_WHEN_CHANGED);
o->add(szPktBauds);
o->value(progdefaults.PKT_BAUD_SELECT);
} // Fl_Choice* selPacket_Baud
{ Fl_Counter2* o = valPacket_LoSig_RXGain = new Fl_Counter2(42, 120, 63, 20, _("RX Low Freq Gain"));
valPacket_LoSig_RXGain->tooltip(_("Processing gain to apply to lower tone (in dB)"));
valPacket_LoSig_RXGain->type(1);
valPacket_LoSig_RXGain->box(FL_UP_BOX);
valPacket_LoSig_RXGain->color((Fl_Color)FL_BACKGROUND_COLOR);
valPacket_LoSig_RXGain->selection_color((Fl_Color)FL_INACTIVE_COLOR);
valPacket_LoSig_RXGain->labeltype(FL_NORMAL_LABEL);
valPacket_LoSig_RXGain->labelfont(0);
valPacket_LoSig_RXGain->labelsize(14);
valPacket_LoSig_RXGain->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
valPacket_LoSig_RXGain->minimum(-6);
valPacket_LoSig_RXGain->maximum(6);
valPacket_LoSig_RXGain->step(0.5);
valPacket_LoSig_RXGain->callback((Fl_Callback*)cb_valPacket_LoSig_RXGain);
valPacket_LoSig_RXGain->align(FL_ALIGN_RIGHT);
valPacket_LoSig_RXGain->when(FL_WHEN_CHANGED);
o->value(progdefaults.PKT_LOSIG_RXGAIN);
o->labelsize(FL_NORMAL_SIZE);
} // Fl_Counter2* valPacket_LoSig_RXGain
{ Fl_Counter2* o = valPacket_HiSig_RXGain = new Fl_Counter2(42, 145, 63, 20, _("RX High Freq Gain"));
valPacket_HiSig_RXGain->tooltip(_("Processing gain to apply to higher tone (in dB)"));
valPacket_HiSig_RXGain->type(1);
valPacket_HiSig_RXGain->box(FL_UP_BOX);
valPacket_HiSig_RXGain->color((Fl_Color)FL_BACKGROUND_COLOR);
valPacket_HiSig_RXGain->selection_color((Fl_Color)FL_INACTIVE_COLOR);
valPacket_HiSig_RXGain->labeltype(FL_NORMAL_LABEL);
valPacket_HiSig_RXGain->labelfont(0);
valPacket_HiSig_RXGain->labelsize(14);
valPacket_HiSig_RXGain->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
valPacket_HiSig_RXGain->minimum(-6);
valPacket_HiSig_RXGain->maximum(6);
valPacket_HiSig_RXGain->step(0.5);
valPacket_HiSig_RXGain->callback((Fl_Callback*)cb_valPacket_HiSig_RXGain);
valPacket_HiSig_RXGain->align(FL_ALIGN_RIGHT);
valPacket_HiSig_RXGain->when(FL_WHEN_CHANGED);
o->value(progdefaults.PKT_HISIG_RXGAIN);
o->labelsize(FL_NORMAL_SIZE);
} // Fl_Counter2* valPacket_HiSig_RXGain
{ Fl_Counter2* o = valPacket_LoSig_TXGain = new Fl_Counter2(268, 120, 63, 20, _("TX Low Freq Gain"));
valPacket_LoSig_TXGain->tooltip(_("Processing gain to apply to lower tone (in dB)"));
valPacket_LoSig_TXGain->type(1);
valPacket_LoSig_TXGain->box(FL_UP_BOX);
valPacket_LoSig_TXGain->color((Fl_Color)FL_BACKGROUND_COLOR);
valPacket_LoSig_TXGain->selection_color((Fl_Color)FL_INACTIVE_COLOR);
valPacket_LoSig_TXGain->labeltype(FL_NORMAL_LABEL);
valPacket_LoSig_TXGain->labelfont(0);
valPacket_LoSig_TXGain->labelsize(14);
valPacket_LoSig_TXGain->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
valPacket_LoSig_TXGain->minimum(-6);
valPacket_LoSig_TXGain->maximum(6);
valPacket_LoSig_TXGain->step(0.5);
valPacket_LoSig_TXGain->callback((Fl_Callback*)cb_valPacket_LoSig_TXGain);
valPacket_LoSig_TXGain->align(FL_ALIGN_RIGHT);
valPacket_LoSig_TXGain->when(FL_WHEN_CHANGED);
o->value(progdefaults.PKT_LOSIG_TXGAIN);
o->labelsize(FL_NORMAL_SIZE);
} // Fl_Counter2* valPacket_LoSig_TXGain
{ Fl_Counter2* o = valPacket_HiSig_TXGain = new Fl_Counter2(268, 145, 63, 20, _("TX High Freq Gain"));
valPacket_HiSig_TXGain->tooltip(_("Processing gain to apply to higher tone (in dB)"));
valPacket_HiSig_TXGain->type(1);
valPacket_HiSig_TXGain->box(FL_UP_BOX);
valPacket_HiSig_TXGain->color((Fl_Color)FL_BACKGROUND_COLOR);
valPacket_HiSig_TXGain->selection_color((Fl_Color)FL_INACTIVE_COLOR);
valPacket_HiSig_TXGain->labeltype(FL_NORMAL_LABEL);
valPacket_HiSig_TXGain->labelfont(0);
valPacket_HiSig_TXGain->labelsize(14);
valPacket_HiSig_TXGain->labelcolor((Fl_Color)FL_FOREGROUND_COLOR);
valPacket_HiSig_TXGain->minimum(-6);
valPacket_HiSig_TXGain->maximum(6);
valPacket_HiSig_TXGain->step(0.5);
valPacket_HiSig_TXGain->callback((Fl_Callback*)cb_valPacket_HiSig_TXGain);
valPacket_HiSig_TXGain->align(FL_ALIGN_RIGHT);
valPacket_HiSig_TXGain->when(FL_WHEN_CHANGED);
o->value(progdefaults.PKT_HISIG_TXGAIN);
o->labelsize(FL_NORMAL_SIZE);
} // Fl_Counter2* valPacket_HiSig_TXGain
{ Fl_Check_Button* o = btnPktRXTimestamp = new Fl_Check_Button(39, 180, 165, 20, _("add RX timestamps"));
btnPktRXTimestamp->tooltip(_("Prepend timestamp to each RX packet"));
btnPktRXTimestamp->down_box(FL_DOWN_BOX);
btnPktRXTimestamp->callback((Fl_Callback*)cb_btnPktRXTimestamp);
o->value(progdefaults.PKT_RXTimestamp);
} // Fl_Check_Button* btnPktRXTimestamp
{ Fl_Check_Button* o = btnPktexpandCmp = new Fl_Check_Button(268, 180, 190, 20, _("decode Compressed data"));
btnPktexpandCmp->tooltip(_("Decode received Compressed Position data"));
btnPktexpandCmp->down_box(FL_DOWN_BOX);
btnPktexpandCmp->callback((Fl_Callback*)cb_btnPktexpandCmp);
o->value(progdefaults.PKT_expandCmp);
} // Fl_Check_Button* btnPktexpandCmp
{ Fl_Check_Button* o = btnPktexpandMicE = new Fl_Check_Button(39, 206, 165, 20, _("decode Mic-E data"));
btnPktexpandMicE->tooltip(_("Decode received Mic-E data"));
btnPktexpandMicE->down_box(FL_DOWN_BOX);
btnPktexpandMicE->callback((Fl_Callback*)cb_btnPktexpandMicE);
o->value(progdefaults.PKT_expandMicE);
} // Fl_Check_Button* btnPktexpandMicE
{ Fl_Check_Button* o = btnPktexpandPHG = new Fl_Check_Button(39, 233, 165, 20, _("decode PHG data"));
btnPktexpandPHG->tooltip(_("Decode received PHG data"));
btnPktexpandPHG->down_box(FL_DOWN_BOX);
btnPktexpandPHG->callback((Fl_Callback*)cb_btnPktexpandPHG);
o->value(progdefaults.PKT_expandPHG);
} // Fl_Check_Button* btnPktexpandPHG
{ Fl_Check_Button* o = btnPktunitsSI = new Fl_Check_Button(39, 260, 165, 20, _("use SI units"));
btnPktunitsSI->tooltip(_("Display decoded data values in SI units"));
btnPktunitsSI->down_box(FL_DOWN_BOX);
btnPktunitsSI->callback((Fl_Callback*)cb_btnPktunitsSI);
o->value(progdefaults.PKT_unitsSI);
} // Fl_Check_Button* btnPktunitsSI
{ Fl_Check_Button* o = btnPktunitsEnglish = new Fl_Check_Button(39, 287, 165, 20, _("use English units"));
btnPktunitsEnglish->tooltip(_("Display decoded data in English units"));
btnPktunitsEnglish->down_box(FL_DOWN_BOX);
btnPktunitsEnglish->callback((Fl_Callback*)cb_btnPktunitsEnglish);
o->value(progdefaults.PKT_unitsEnglish);
} // Fl_Check_Button* btnPktunitsEnglish
{ Fl_Check_Button* o = btnPktPreferXhairScope = new Fl_Check_Button(268, 206, 165, 20, _("Use cross-hair scope"));
btnPktPreferXhairScope->tooltip(_("Defaults to syncscope instead of phase (cross-hair) scope"));
btnPktPreferXhairScope->down_box(FL_DOWN_BOX);
btnPktPreferXhairScope->callback((Fl_Callback*)cb_btnPktPreferXhairScope);
o->value(progdefaults.PKT_PreferXhairScope);
} // Fl_Check_Button* btnPktPreferXhairScope
o->end();
} // Fl_Group* o
tabPacket->end();
} // Fl_Group* tabPacket
tabsModems->end();
} // Fl_Tabs* tabsModems
tabModems->end();

Wyświetl plik

@ -94,18 +94,20 @@ static const char szOliviaTones[] = "2|4|8|16|32|64|128|256";
static const char szOliviaBandwidth[] = "125|250|500|1000|2000";
static const char szContestiaTones[] = "2|4|8|16|32|64|128|256";
static const char szContestiaBandwidth[] = "125|250|500|1000|2000";
static const char szPktBauds[] = "1200|300|2400";
static const char szBaudRates[] = "300|600|1200|2400|4800|9600|19200|38400|57600|115200|230400|460800";
static const char szProsigns[] = "~|%|&|+|=|{|}|<|>|[|]| ";} {}
static const char szProsigns[] = "~|%|&|+|=|{|}|<|>|[|]| ";} {selected
}
Fl_Window {} {
label {Fldigi configuration} open
xywh {616 61 500 400} type Double color 45 selection_color 51 labelsize 18 align 80 non_modal visible
} {
Fl_Tabs tabsConfigure {open
xywh {-4 0 521 372} color 50 selection_color 50
xywh {-4 0 544 372} color 50 selection_color 50
} {
Fl_Group tabOperator {
label Operator
callback {progdefaults.changed = true;} selected
callback {progdefaults.changed = true;}
tooltip {Operator information} xywh {0 25 500 345} when 1
} {
Fl_Group {} {
@ -583,7 +585,7 @@ progdefaults.changed = true;}
}
Fl_Group tabContest {
label Contest
xywh {0 50 500 320} hide
xywh {0 50 500 320}
} {
Fl_Group {} {
label Exchanges open
@ -862,7 +864,7 @@ WF_UI();}
}
Fl_Group tabRxText {
label {Rx Text} open
xywh {0 50 500 320}
xywh {0 50 500 320} hide
} {
Fl_Check_Button btn_rx_lowercase {
label {Print CW / RTTY / THROB / CONTESTIA in lowercase}
@ -1189,11 +1191,69 @@ behaves inside the waterfall} xywh {15 196 150 22} down_box BORDER_BOX align 8
}
Fl_Group tabModems {
label Modems open
xywh {-4 25 521 347} hide
xywh {-4 25 544 347} hide
} {
Fl_Tabs tabsModems {open
xywh {-4 25 521 347} selection_color 50 align 9
xywh {-4 25 544 347} selection_color 50 align 9
} {
Fl_Group tabContestia {
label Contestia open
xywh {0 50 500 320}
} {
Fl_Group {} {open
xywh {5 60 490 200} box ENGRAVED_FRAME
} {
Fl_Choice mnuContestia_Bandwidth {
label Bandwidth
callback {progdefaults.contestiabw = o->value();
set_contestia_default_integ();
resetOLIVIA();
progdefaults.changed = true;} open
tooltip {Select bandwidth} xywh {60 80 85 20} down_box BORDER_BOX align 8
code0 {o->add(szContestiaBandwidth);}
code1 {o->value(2);}
} {}
Fl_Choice mnuContestia_Tones {
label Tones
callback {progdefaults.contestiatones = o->value();
set_contestia_default_integ();
resetCONTESTIA();
progdefaults.changed = true;} open
tooltip {Select number of tones} xywh {321 80 70 20} down_box BORDER_BOX align 8
code0 {o->add(szContestiaTones);}
code1 {o->value(2);}
} {}
Fl_Group {} {
label {Receive synchronizer} open
xywh {60 119 379 100} box ENGRAVED_FRAME align 21
} {
Fl_Counter cntContestia_smargin {
label {Tune margin (tone frequency spacing)}
callback {progdefaults.contestiasmargin = (int)(o->value());
resetCONTESTIA();
progdefaults.changed = true;}
tooltip {Change ONLY to experiment} xywh {80 150 70 20} type Simple align 8 minimum 2 maximum 128 step 1 value 8
code0 {o->labelsize(FL_NORMAL_SIZE);}
class Fl_Counter2
}
Fl_Counter cntContestia_sinteg {
label {Integration period (FEC blocks)}
callback {progdefaults.contestiasinteg = (int)(o->value());
resetCONTESTIA();
progdefaults.changed = true;}
tooltip {Change ONLY to experiment} xywh {80 180 70 20} type Simple align 8 minimum 2 maximum 128 step 1 value 4
code0 {o->labelsize(FL_NORMAL_SIZE);}
class Fl_Counter2
}
}
Fl_Check_Button btnContestia_8bit {
label {8-bit extended characters}
callback {progdefaults.contestia8bit = o->value();
progdefaults.changed = true;}
tooltip {Enable this for Latin-1 accented characters} xywh {60 229 200 20} down_box DOWN_BOX hide
}
}
}
Fl_Group tabCW {
label CW
xywh {0 50 504 320} hide
@ -1590,7 +1650,7 @@ progdefaults.changed = true;} open
}
}
Fl_Group tabDomEX {
label DomEX
label Dom
xywh {0 50 500 320} hide
} {
Fl_Group {} {open
@ -1651,7 +1711,7 @@ progdefaults.changed = true;}
}
}
Fl_Group tabFeld {
label Feldhell
label FH
xywh {0 50 500 320} hide
} {
Fl_Group {} {open
@ -1856,67 +1916,9 @@ progdefaults.changed = true;}
}
}
}
Fl_Group tabContestia {
label Contestia open
xywh {0 50 500 320} hide
} {
Fl_Group {} {open
xywh {5 60 490 200} box ENGRAVED_FRAME
} {
Fl_Choice mnuContestia_Bandwidth {
label Bandwidth
callback {progdefaults.contestiabw = o->value();
set_contestia_default_integ();
resetOLIVIA();
progdefaults.changed = true;} open
tooltip {Select bandwidth} xywh {60 80 85 20} down_box BORDER_BOX align 8
code0 {o->add(szContestiaBandwidth);}
code1 {o->value(2);}
} {}
Fl_Choice mnuContestia_Tones {
label Tones
callback {progdefaults.contestiatones = o->value();
set_contestia_default_integ();
resetCONTESTIA();
progdefaults.changed = true;} open
tooltip {Select number of tones} xywh {321 80 70 20} down_box BORDER_BOX align 8
code0 {o->add(szContestiaTones);}
code1 {o->value(2);}
} {}
Fl_Group {} {
label {Receive synchronizer} open
xywh {60 119 379 100} box ENGRAVED_FRAME align 21
} {
Fl_Counter cntContestia_smargin {
label {Tune margin (tone frequency spacing)}
callback {progdefaults.contestiasmargin = (int)(o->value());
resetCONTESTIA();
progdefaults.changed = true;}
tooltip {Change ONLY to experiment} xywh {80 150 70 20} type Simple align 8 minimum 2 maximum 128 step 1 value 8
code0 {o->labelsize(FL_NORMAL_SIZE);}
class Fl_Counter2
}
Fl_Counter cntContestia_sinteg {
label {Integration period (FEC blocks)}
callback {progdefaults.contestiasinteg = (int)(o->value());
resetCONTESTIA();
progdefaults.changed = true;}
tooltip {Change ONLY to experiment} xywh {80 180 70 20} type Simple align 8 minimum 2 maximum 128 step 1 value 4
code0 {o->labelsize(FL_NORMAL_SIZE);}
class Fl_Counter2
}
}
Fl_Check_Button btnContestia_8bit {
label {8-bit extended characters}
callback {progdefaults.contestia8bit = o->value();
progdefaults.changed = true;}
tooltip {Enable this for Latin-1 accented characters} xywh {60 229 200 20} down_box DOWN_BOX hide
}
}
}
Fl_Group tabPSK {
label PSK open
xywh {-4 50 521 322}
xywh {-4 50 521 322} hide
} {
Fl_Tabs tabsPSK {open
xywh {-4 50 521 322} selection_color 50
@ -2202,6 +2204,121 @@ progdefaults.changed = true;}
}
}
}
Fl_Group tabPacket {
label Packet open
xywh {0 50 540 320} hide
} {
Fl_Group {} {open
xywh {5 60 490 296} box ENGRAVED_FRAME
} {
Fl_Choice selPacket_Baud {
label {Baud rate}
callback {progdefaults.PKT_BAUD_SELECT = o->value();
updatePACKET();
progdefaults.changed = true;} open
tooltip {Select packet baudrate} xywh {44 85 100 20} down_box BORDER_BOX align 8 when 1
code0 {o->add(szPktBauds);}
code1 {o->value(progdefaults.PKT_BAUD_SELECT);}
} {}
Fl_Counter valPacket_LoSig_RXGain {
label {RX Low Freq Gain}
callback {progdefaults.PKT_LOSIG_RXGAIN = o->value();
updatePACKET();
progdefaults.changed = true;}
tooltip {Processing gain to apply to lower tone (in dB)} xywh {42 120 63 20} type Simple align 8 minimum -6 maximum 6 step 0.5
code0 {o->value(progdefaults.PKT_LOSIG_RXGAIN);}
code1 {o->labelsize(FL_NORMAL_SIZE);}
class Fl_Counter2
}
Fl_Counter valPacket_HiSig_RXGain {
label {RX High Freq Gain}
callback {progdefaults.PKT_HISIG_RXGAIN = o->value();
updatePACKET();
progdefaults.changed = true;}
tooltip {Processing gain to apply to higher tone (in dB)} xywh {42 145 63 20} type Simple align 8 minimum -6 maximum 6 step 0.5
code0 {o->value(progdefaults.PKT_HISIG_RXGAIN);}
code1 {o->labelsize(FL_NORMAL_SIZE);}
class Fl_Counter2
}
Fl_Counter valPacket_LoSig_TXGain {
label {TX Low Freq Gain}
callback {progdefaults.PKT_LOSIG_TXGAIN = o->value();
updatePACKET();
progdefaults.changed = true;}
tooltip {Processing gain to apply to lower tone (in dB)} xywh {268 120 63 20} type Simple align 8 minimum -6 maximum 6 step 0.5
code0 {o->value(progdefaults.PKT_LOSIG_TXGAIN);}
code1 {o->labelsize(FL_NORMAL_SIZE);}
class Fl_Counter2
}
Fl_Counter valPacket_HiSig_TXGain {
label {TX High Freq Gain}
callback {progdefaults.PKT_HISIG_TXGAIN = o->value();
updatePACKET();
progdefaults.changed = true;}
tooltip {Processing gain to apply to higher tone (in dB)} xywh {268 145 63 20} type Simple align 8 minimum -6 maximum 6 step 0.5
code0 {o->value(progdefaults.PKT_HISIG_TXGAIN);}
code1 {o->labelsize(FL_NORMAL_SIZE);}
class Fl_Counter2
}
Fl_Check_Button btnPktRXTimestamp {
label {add RX timestamps}
callback {progdefaults.PKT_RXTimestamp=o->value();
progdefaults.changed = true;}
tooltip {Prepend timestamp to each RX packet} xywh {39 180 165 20} down_box DOWN_BOX
code0 {o->value(progdefaults.PKT_RXTimestamp);}
}
Fl_Check_Button btnPktexpandCmp {
label {decode Compressed data}
callback {progdefaults.PKT_expandCmp=o->value();
progdefaults.changed = true;}
tooltip {Decode received Compressed Position data} xywh {268 180 190 20} down_box DOWN_BOX
code0 {o->value(progdefaults.PKT_expandCmp);}
}
Fl_Check_Button btnPktexpandMicE {
label {decode Mic-E data}
callback {progdefaults.PKT_expandMicE=o->value();
progdefaults.changed = true;}
tooltip {Decode received Mic-E data} xywh {39 206 165 20} down_box DOWN_BOX
code0 {o->value(progdefaults.PKT_expandMicE);}
}
Fl_Check_Button btnPktexpandPHG {
label {decode PHG data}
callback {progdefaults.PKT_expandPHG=o->value();
progdefaults.changed = true;}
tooltip {Decode received PHG data} xywh {39 233 165 20} down_box DOWN_BOX
code0 {o->value(progdefaults.PKT_expandPHG);}
}
Fl_Check_Button btnPktunitsSI {
label {use SI units}
callback {progdefaults.PKT_unitsSI=o->value();
if (progdefaults.PKT_unitsSI) {
progdefaults.PKT_unitsEnglish=false;
btnPktunitsEnglish->value(false);
}
progdefaults.changed = true;}
tooltip {Display decoded data values in SI units} xywh {39 260 165 20} down_box DOWN_BOX
code0 {o->value(progdefaults.PKT_unitsSI);}
}
Fl_Check_Button btnPktunitsEnglish {
label {use English units}
callback {progdefaults.PKT_unitsEnglish=o->value();
if (progdefaults.PKT_unitsSI) {
progdefaults.PKT_unitsSI=false;
btnPktunitsSI->value(false);
}
progdefaults.changed = true;}
tooltip {Display decoded data in English units} xywh {39 287 165 20} down_box DOWN_BOX
code0 {o->value(progdefaults.PKT_unitsEnglish);}
}
Fl_Check_Button btnPktPreferXhairScope {
label {Use cross-hair scope}
callback {progdefaults.PKT_PreferXhairScope=o->value();
progdefaults.changed = true;}
tooltip {Defaults to syncscope instead of phase (cross-hair) scope} xywh {268 206 165 20} down_box DOWN_BOX
code0 {o->value(progdefaults.PKT_PreferXhairScope);}
}
}
}
}
}
Fl_Group tabRig {

Wyświetl plik

@ -90,6 +90,7 @@
#include "dominoex.h"
#include "feld.h"
#include "throb.h"
#include "pkt.h"
#include "wwv.h"
#include "analysis.h"
#include "ssb.h"
@ -431,6 +432,10 @@ void cb_rtty75N(Fl_Widget *w, void *arg);
void cb_rtty75W(Fl_Widget *w, void *arg);
void cb_rttyCustom(Fl_Widget *w, void *arg);
void cb_pkt1200(Fl_Widget *w, void *arg);
void cb_pkt300(Fl_Widget *w, void *arg);
void cb_pkt2400(Fl_Widget *w, void *arg);
Fl_Widget *modem_config_tab;
Fl_Menu_Item *quick_change;
@ -559,6 +564,13 @@ Fl_Menu_Item quick_change_rtty[] = {
{ 0 }
};
Fl_Menu_Item quick_change_pkt[] = {
{ "1200 baud", 0, cb_pkt1200, (void *)MODE_PACKET },
{ " 300 baud", 0, cb_pkt300, (void *)MODE_PACKET },
{ "2400 baud", 0, cb_pkt2400, (void *)MODE_PACKET },
{ 0 }
};
inline int minmax(int val, int min, int max)
{
val = val < max ? val : max;
@ -812,6 +824,31 @@ void set_dominoex_tab_widgets()
chkDominoEX_FEC->value(progdefaults.DOMINOEX_FEC);
}
//
void cb_pkt1200(Fl_Widget *w, void *arg)
{
progdefaults.PKT_BAUD_SELECT = 0;
selPacket_Baud->value(progdefaults.PKT_BAUD_SELECT);
cb_init_mode(w, arg);
}
void cb_pkt300(Fl_Widget *w, void *arg)
{
progdefaults.PKT_BAUD_SELECT = 1;
selPacket_Baud->value(progdefaults.PKT_BAUD_SELECT);
cb_init_mode(w, arg);
}
void cb_pkt2400(Fl_Widget *w, void *arg)
{
progdefaults.PKT_BAUD_SELECT = 2;
selPacket_Baud->value(progdefaults.PKT_BAUD_SELECT);
cb_init_mode(w, arg);
}
//
static void busy_cursor(void*)
{
Fl::first_window()->cursor(FL_CURSOR_WAIT);
@ -1062,6 +1099,13 @@ void init_modem(trx_mode mode, int freq)
quick_change = quick_change_throb;
break;
case MODE_PACKET:
startup_modem(*mode_info[mode].modem ? *mode_info[mode].modem :
*mode_info[mode].modem = new pkt(mode), freq);
modem_config_tab = tabPacket;
quick_change = quick_change_pkt;
break;
case MODE_WWV:
startup_modem(*mode_info[mode].modem ? *mode_info[mode].modem :
*mode_info[mode].modem = new wwv, freq);
@ -1079,7 +1123,12 @@ void init_modem(trx_mode mode, int freq)
default:
LOG_ERROR("Unknown mode: %" PRIdPTR, mode);
return init_modem(MODE_PSK31, freq);
mode = MODE_PSK31;
startup_modem(*mode_info[mode].modem ? *mode_info[mode].modem :
*mode_info[mode].modem = new psk(mode), freq);
quick_change = quick_change_psk;
modem_config_tab = tabPSK;
break;
}
#if BENCHMARK_MODE
@ -2985,6 +3034,10 @@ Fl_Menu_Item menu_[] = {
{ mode_info[MODE_THROBX4].name, 0, cb_init_mode, (void *)MODE_THROBX4, 0, FL_NORMAL_LABEL, 0, 14, 0},
{0,0,0,0,0,0,0,0,0},
//{ "Packet", 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL, 0, 14, 0},
{ "Packet", 0, cb_init_mode, (void *)MODE_PACKET, 0, FL_NORMAL_LABEL, 0, 14, 0},
//{0,0,0,0,0,0,0,0,0},
{"WEFAX", 0, 0, 0, FL_SUBMENU, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_WEFAX_576].name, 0, cb_init_mode, (void *)MODE_WEFAX_576, 0, FL_NORMAL_LABEL, 0, 14, 0},
{ mode_info[MODE_WEFAX_288].name, 0, cb_init_mode, (void *)MODE_WEFAX_288, 0, FL_NORMAL_LABEL, 0, 14, 0},
@ -5717,6 +5770,11 @@ void resetCONTESTIA() {
trx_start_modem(active_modem);
}
void updatePACKET() {
if (active_modem->get_mode() == MODE_PACKET)
trx_start_modem(active_modem);
}
void resetTHOR() {
trx_mode md = active_modem->get_mode();
if (md == MODE_THOR4 || md == MODE_THOR5 || md == MODE_THOR8 ||

Wyświetl plik

@ -479,7 +479,13 @@ complex *sfft::run(const complex& input)
goertzel::goertzel(int n, double freq, double sr)
{
reset(n, freq, sr);
double w;
w = 2 * M_PI * freq / sr;
k1 = cos(w);
k2 = sin(w);
k3 = 2.0 * k1;
Q0 = Q1 = Q2 = 0.0;
count = N = n;
}
goertzel::~goertzel()
@ -496,42 +502,38 @@ void goertzel::reset()
void goertzel::reset(int n, double freq, double sr)
{
double w;
SR = sr;
FREQ = freq;
K = FREQ / SR;
N = n;
w = 2 * M_PI * FREQ / SR;
w = 2 * M_PI * freq / sr;
k1 = cos(w);
k2 = sin(w);
k3 = 2.0 * k1;
Q0 = Q1 = Q2 = 0.0;
count = N;
count = N = n;
isvalid = false;
}
bool goertzel::run(double sample)
{
Q0 = sample + k3*Q1 - Q2;
Q2 = Q1;
Q1 = Q0;
if (!isvalid && --count == 0) {
// count = N;
isvalid = true;
}
return isvalid;
Q0 = sample + k3*Q1 - Q2;
Q2 = Q1;
Q1 = Q0;
if (--count == 0) {
count = N;
return true;
}
return false;
}
double goertzel::real()
{
return ((0.5*k3*Q1 - Q2)/N);
return ((0.5*k3*Q1 - Q2)/N);
}
double goertzel::imag()
{
return ((k2*Q1)/N);
return ((k2*Q1)/N);
}
double goertzel::mag()
{
return (Q2*Q2 + Q1*Q1 - k3*Q2*Q1);
return (Q2*Q2 + Q1*Q1 - k3*Q2*Q1);
}

Wyświetl plik

@ -110,6 +110,8 @@ const struct mode_info_t mode_info[NUM_MODES] = {
{ MODE_THROBX2, &throbx2_modem, "THRBX2", "ThrobX 2", "", "THRBX", "TX2" },
{ MODE_THROBX4, &throbx4_modem, "THRBX4", "ThrobX 4", "", "THRBX", "TX4" },
{ MODE_PACKET, &pkt_modem, "PACKET", "Packet", "", "PKT", "PKT" },
{ MODE_SSB, &ssb_modem, "SSB", "SSB", "", "SSB", "" },
{ MODE_WWV, &wwv_modem, "WWV", "WWV", "", "", "" },
{ MODE_ANALYSIS, &anal_modem, "ANALYSIS", _("Freq Analysis"), "", "", "" }

Wyświetl plik

@ -138,6 +138,12 @@ extern Fl_Input2 *inpWaterfallClickText;
extern Fl_Choice *mnuWaterfallWheelAction;
extern Fl_Group *tabModems;
extern Fl_Tabs *tabsModems;
extern Fl_Group *tabContestia;
extern Fl_Choice *mnuContestia_Bandwidth;
extern Fl_Choice *mnuContestia_Tones;
extern Fl_Counter2 *cntContestia_smargin;
extern Fl_Counter2 *cntContestia_sinteg;
extern Fl_Check_Button *btnContestia_8bit;
extern Fl_Group *tabCW;
extern Fl_Tabs *tabsCW;
extern Fl_Value_Slider2 *sldrCWbandwidth;
@ -198,12 +204,6 @@ extern Fl_Choice *mnuOlivia_Tones;
extern Fl_Counter2 *cntOlivia_smargin;
extern Fl_Counter2 *cntOlivia_sinteg;
extern Fl_Check_Button *btnOlivia_8bit;
extern Fl_Group *tabContestia;
extern Fl_Choice *mnuContestia_Bandwidth;
extern Fl_Choice *mnuContestia_Tones;
extern Fl_Counter2 *cntContestia_smargin;
extern Fl_Counter2 *cntContestia_sinteg;
extern Fl_Check_Button *btnContestia_8bit;
extern Fl_Group *tabPSK;
extern Fl_Tabs *tabsPSK;
extern Fl_Counter2 *cntSearchRange;
@ -233,6 +233,19 @@ extern Fl_Check_Button *valTHOR_FILTER;
extern Fl_Counter2 *valTHOR_BW;
extern Fl_Value_Slider2 *valThorCWI;
extern Fl_Counter2 *valTHOR_PATHS;
extern Fl_Group *tabPacket;
extern Fl_Choice *selPacket_Baud;
extern Fl_Counter2 *valPacket_LoSig_RXGain;
extern Fl_Counter2 *valPacket_HiSig_RXGain;
extern Fl_Counter2 *valPacket_LoSig_TXGain;
extern Fl_Counter2 *valPacket_HiSig_TXGain;
extern Fl_Check_Button *btnPktRXTimestamp;
extern Fl_Check_Button *btnPktexpandCmp;
extern Fl_Check_Button *btnPktexpandMicE;
extern Fl_Check_Button *btnPktexpandPHG;
extern Fl_Check_Button *btnPktunitsSI;
extern Fl_Check_Button *btnPktunitsEnglish;
extern Fl_Check_Button *btnPktPreferXhairScope;
extern Fl_Group *tabRig;
extern Fl_Tabs *tabsRig;
extern Fl_Group *grpHWPTT;

Wyświetl plik

@ -448,6 +448,44 @@
ELEM_(double, ThorCWI, "THORCWI", \
"CWI threshold (CWI detection and suppression)", \
0.0) \
/* PACKET */ \
ELEM_(int, PKT_BAUD_SELECT, "PKTBAUDSELECT", \
"Packet baud rate. Values are as follows:\n" \
" 0: 1200 (V/UHF); 1: 300 (HF); 2: 2400 (V/UHF)", \
0) /* 1200 baud (V/UHF) default. */ \
ELEM_(double, PKT_LOSIG_RXGAIN, "LOSIGRXGAIN", \
"Signal gain for lower frequency (Mark) tone (in dB)", \
0.0) \
ELEM_(double, PKT_HISIG_RXGAIN, "HISIGRXGAIN", \
"Signal gain for higher frequency (Space) tone (in dB)", \
0.0) \
ELEM_(double, PKT_LOSIG_TXGAIN, "LOSIGTXGAIN", \
"Signal gain for Mark (lower frequency) tone (in dB)", \
0.0) \
ELEM_(double, PKT_HISIG_TXGAIN, "HISIGTXGAIN", \
"Signal gain for Space (higher frequency) tone (in dB)", \
0.0) \
ELEM_(bool, PKT_PreferXhairScope, "PKTPREFERXHAIRSCOPE", \
"Default to syncscope (detected symbol scope)", \
false) ELEM_(bool, PKT_RXTimestamp, "PKTRXTIMESTAMP", \
"No timestamps on RX packets by default", \
false) \
\
ELEM_(bool, PKT_expandMicE, "PKTEXPANDMICE", \
"decode received Mic-E data", \
false) \
ELEM_(bool, PKT_expandPHG, "PKTEXPANDPHG", \
"decode received PHG data", \
false) \
ELEM_(bool, PKT_expandCmp, "PKTEXPANDCMP", \
"decode received Compressed Position data", \
false) \
ELEM_(bool, PKT_unitsSI, "PKTUNITSSI", \
"display decoded data in SI units", \
false) \
ELEM_(bool, PKT_unitsEnglish, "PKTUNITSENGLISH", \
"display decoded data in English units", \
false) \
/* DOMINOEX */ \
ELEM_(double, DOMINOEX_BW, "DOMINOEXBW", \
"Filter bandwidth factor (bandwidth relative to signal width)", \

Wyświetl plik

@ -140,9 +140,6 @@ public:
class goertzel {
private:
double SR;
double FREQ;
double K;
int N;
int count;
double Q0;

Wyświetl plik

@ -226,6 +226,7 @@ extern void resetOLIVIA();
extern void resetCONTESTIA();
extern void resetTHOR();
extern void resetDOMEX();
extern void updatePACKET();
extern void resetSoundCard();
extern void restoreFocus(Fl_Widget* w = 0);
extern void setReverse(int);

Wyświetl plik

@ -120,7 +120,6 @@ enum {
MODE_THOR5,
MODE_THOR8,
MODE_THOR11,
// MODE_TSOR11,
MODE_THOR16,
MODE_THOR22,
MODE_THOR_FIRST = MODE_THOR4,
@ -135,6 +134,8 @@ enum {
MODE_THROB_FIRST = MODE_THROB1,
MODE_THROB_LAST = MODE_THROBX4,
MODE_PACKET,
MODE_SSB,
MODE_WWV,
MODE_ANALYSIS,

Wyświetl plik

@ -233,6 +233,7 @@ extern modem *psk250r_modem;
extern modem *psk500r_modem;
extern modem *rtty_modem;
extern modem *pkt_modem;
extern modem *olivia_modem;
extern modem *contestia_modem;
@ -241,7 +242,6 @@ extern modem *thor4_modem;
extern modem *thor5_modem;
extern modem *thor8_modem;
extern modem *thor11_modem;
//extern modem *tsor11_modem;
extern modem *thor16_modem;
extern modem *thor22_modem;

138
src/include/nco.h 100644
Wyświetl plik

@ -0,0 +1,138 @@
// ---------------------------------------------------------------------
// nco.h -- a generic NCO class
//
//
// This file is a proposed part of fldigi.
//
// Copyright (C) 2010
// Dave Freese, W1HKJ
// Chris Sylvain, KB3CS
//
// fldigi is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// fldigi is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with fldigi; if not, write to the Free Software
// Foundation, Inc.
// 59 Temple Place
// Suite 330
// Boston, MA 02111-1307 USA
// ---------------------------------------------------------------------
#ifndef NCO_H
#define NCO_H
#include "complex.h"
class NCO {
#define NCO_SINETABLE_LEN (1<<8) // == 256
private:
double SampleRate;
double Frequency;
double Phase;
double Phase_incr;
bool sinetable_ready;
double sinetable[NCO_SINETABLE_LEN+1];
public:
NCO() { sinetable_ready = false; }
~NCO() { };
void init(double freq, double phase, double sr) {
SampleRate = sr;
Frequency = freq;
Phase = phase / TWOPI; // normalize radians to [0,1]
Phase_incr = freq / sr;
if (sinetable_ready == false) {
double step = 1.0 / NCO_SINETABLE_LEN;
for (int i = 0; i < NCO_SINETABLE_LEN; i++)
sinetable[i] = sin(step * i * TWOPI);
sinetable[NCO_SINETABLE_LEN] = sinetable[0]; /* == 0.0 */
sinetable_ready = true;
}
}
inline void setfreq(double freq) {
Frequency = freq;
Phase_incr = freq / SampleRate;
}
inline double getfreq() { return Frequency; }
inline void setphase(double phase) { Phase = phase / TWOPI; }
inline double getphase() { return Phase * TWOPI; }
inline void setphaseacc(double phase) { Phase = phase; }
inline double getphaseacc() { return Phase; }
#ifndef NDEBUG
double interpolate(double phase) {
#else
inline double interpolate(double phase) {
#endif
int iphase;
double frac1, frac2;
iphase = (int) floor(phase * NCO_SINETABLE_LEN);
frac1 = (phase * NCO_SINETABLE_LEN) - iphase;
frac2 = 1.0 - frac1;
iphase %= NCO_SINETABLE_LEN;
return (sinetable[iphase] * frac2) + (sinetable[iphase+1] * frac1);
}
double sample() {
double sample = interpolate(Phase);
Phase += Phase_incr;
if (Phase > 1) {
Phase -= 1;
// Phase might be .le. abs(machine-epsilon)
if (Phase < 0.0) Phase = 0.0;
}
return sample;
}
complex complex_sample() {
complex sample;
// M_PI_2 / TWOPI = M_PI / 2 / 2 / M_PI = 1 / 4
double t = Phase + 0.25;
if (t > 1.0) {
t -= 1;
// Phase might be .le. abs(machine-epsilon)
if (t < 0.0) t = 0.0;
}
sample.re = interpolate(t); // cos
sample.im = interpolate(Phase); // sin
Phase += Phase_incr;
if (Phase > 1.0) {
Phase -= 1;
if (Phase < 0.0) Phase = 0.0;
}
return sample;
}
};
#endif

240
src/include/pkt.h 100644
Wyświetl plik

@ -0,0 +1,240 @@
// ---------------------------------------------------------------------
// pkt.h -- 1200/300/2400 baud AX.25
//
//
// This file is a proposed part of fldigi. Adapted very liberally from
// rtty.h, with many thanks to John Hansen, W2FS, who wrote
// 'dcc.doc' and 'dcc2.doc', GNU Octave, GNU Radio Companion, and finally
// Bartek Kania (bk.gnarf.org) whose 'aprs.c' expository coding style helped
// shape this implementation.
//
// Copyright (C) 2010
// Dave Freese, W1HKJ
// Chris Sylvain, KB3CS
//
// fldigi is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// fldigi is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with fldigi; if not, write to the Free Software
// Foundation, Inc.
// 59 Temple Place
// Suite 330
// Boston, MA 02111-1307 USA
// ---------------------------------------------------------------------
#ifndef PKT_H
#define PKT_H
#include "complex.h"
#include "modem.h"
#include "globals.h"
#include "debug.h"
//#include "filters.h"
//#include "fftfilt.h"
#include "digiscope.h"
#include "waterfall.h"
#include "trx.h"
#include "nco.h"
#define PKT_SampleRate 12000
#define PKT_MinBaudRate 300
#define PKT_MaxSymbolLen (PKT_SampleRate / PKT_MinBaudRate)
#define PKT_DetectLen 16
#define PKT_SyncDispLen 24
#define PKT_IdleLen 120
#define PKT_MinSignalPwr 0.1
// is adjval too small? maybe 0.25 ? too large?
#define PKT_PLLAdjVal 0.1
// special and unique start+end of AX.25 frame symbol
#define PKT_Flag 0x7e
// number of mark bits prior to start of frame at 1200 baud
#define PKT_MarkBits 320
// number of flags used indicate start or end of frame at 1200 baud
#define PKT_StartFlags 24
#define PKT_EndFlags 12
// 70 bytes addr + 256 payload + 2 FCS + 1 Control + 1 Protocol ID
#define MAXOCTETS 340
// 136 bits minimum (including start and end flags) - AX.25 v2.2 section 3.9
// == 15 octets. we count only one of the two flags, though.
#define MINOCTETS 14
enum PKT_RX_STATE {
PKT_RX_STATE_IDLE = 0,
PKT_RX_STATE_DROP,
PKT_RX_STATE_START,
PKT_RX_STATE_DATA,
PKT_RX_STATE_STOP
};
enum PKT_MicE_field {
Null = 0x00,
Space = 0x20,
Zero = 0x30,
One,
Two,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
P0 = 0x40,
P100,
North = 0x50,
East,
South,
West,
Invalid = 0xFF
};
struct PKT_PHG_table {
const char *s;
unsigned char l;
};
class pkt : public modem {
public:
static const double CENTER[];
static const double SHIFT[];
static const int BAUD[];
static const int BITS[];
private:
int symbollen;
int pkt_stoplen, pkt_detectlen;
int pkt_syncdisplen, pkt_idlelen;
int pkt_startlen;
double pkt_shift;
int pkt_baud;
int pkt_nbits;
double pkt_ctrfreq;
double pkt_squelch;
double pkt_BW;
bool pkt_reverse;
int scounter; // audio sample counter
double lo_signal_gain, hi_signal_gain;
NCO *nco_lo, *nco_hi, *nco_mid;
PKT_RX_STATE rxstate;
double idle_signal_pwr, *idle_signal_buf;
int idle_signal_buf_ptr;
void idle_signal_power(double sample);
complex lo_signal_energy, *lo_signal_buf;
complex hi_signal_energy, *hi_signal_buf;
complex mid_signal_energy, *mid_signal_buf;
double lo_signal_corr, hi_signal_corr, mid_signal_corr;
int correlate_buf_ptr;
double signal_gain, signal_pwr, *signal_buf;
int signal_buf_ptr;
double *pipe, *dsppipe; // SyncScope
int pipeptr;
// SCBLOCKSIZE * 2 = 1024 ( == MAX_ZLEN )
complex QI[MAX_ZLEN]; // PhaseScope
int QIptr;
double yt_avg;
bool clear_zdata;
double signal_power, noise_power, power_ratio, snr_avg;
double corr_power(complex v);
void correlate(double sample);
int detect_drop;
void detect_signal();
double lo_sync, hi_sync, mid_symbol;
int lo_sync_ptr, hi_sync_ptr;
bool prev_symbol, pll_symbol;
void do_sync();
int seq_ones; // number of sequential ones in data
int select_val;
void set_pkt_modem_params(int i);
void rx_data();
void rx(bool bit);
void Metric();
unsigned char bitreverse(unsigned char in, int n);
unsigned char rxbuf[MAXOCTETS], *cbuf;
unsigned int computeFCS(unsigned char *h, unsigned char *t);
bool checkFCS(unsigned char *cp);
void do_put_rx_char(unsigned char *cp);
void clear_syncscope();
void update_syncscope();
// inline complex mixer(complex in);
// MicE encodings:
// 3 char groups,
// max 12 char values per group,
// 5 encodings per char value
static PKT_MicE_field MicE_table[][12][5];
void expand_MicE(unsigned char *I, unsigned char *E);
static PKT_PHG_table PHG_table[];
void expand_PHG(unsigned char *I);
void expand_Cmp(unsigned char *I);
// transmit
int preamble, pretone, postamble;
double lo_txgain, hi_txgain;
NCO *lo_tone, *hi_tone;
void send_symbol(bool bit);
int tx_char_count, nr_ones;
bool currbit, nostuff, did_pkt_head;
void send_char(unsigned char c);
unsigned char txbuf[MAXOCTETS], *tx_cbuf;
void send_msg(unsigned char c);
public:
pkt(trx_mode mode);
~pkt();
void init();
void rx_init();
void tx_init(SoundBase *sc);
void restart();
int rx_process(const double *buf, int len);
int tx_process();
void set_freq(double);
};
#endif

Wyświetl plik

@ -909,7 +909,7 @@ void configuration::testCommPorts()
snprintf(ttyname, sizeof(ttyname), "/dev/%s", dp->d_name);
if (stat(ttyname, &st) == -1 || !S_ISCHR(st.st_mode))
continue;
LOG_INFO("Found serial port %s", ttyname);
LOG_VERBOSE("Found serial port %s", ttyname);
inpTTYdev->add(ttyname);
#if USE_HAMLIB
inpRIGdev->add(ttyname);
@ -971,7 +971,7 @@ out:
# endif
# endif // __WOE32__
LOG_INFO("Found serial port %s", ttyname);
LOG_VERBOSE("Found serial port %s", ttyname);
inpTTYdev->add(ttyname);
# if USE_HAMLIB
inpRIGdev->add(ttyname);
@ -984,7 +984,7 @@ out:
if ( !(stat(gbuf.gl_pathv[j], &st) == 0 && S_ISCHR(st.st_mode)) ||
strstr(gbuf.gl_pathv[j], "modem") )
continue;
LOG_INFO("Found serial port %s", gbuf.gl_pathv[j]);
LOG_VERBOSE("Found serial port %s", gbuf.gl_pathv[j]);
inpTTYdev->add(gbuf.gl_pathv[j]);
# if USE_HAMLIB
inpRIGdev->add(gbuf.gl_pathv[j]);

2319
src/packet/pkt.cxx 100644

Plik diff jest za duży Load Diff

Wyświetl plik

@ -91,12 +91,12 @@ modem *olivia_modem = 0;
modem *contestia_modem = 0;
modem *rtty_modem = 0;
modem *pkt_modem = 0;
modem *thor4_modem = 0;
modem *thor5_modem = 0;
modem *thor8_modem = 0;
modem *thor11_modem = 0;
//modem *tsor11_modem = 0;
modem *thor16_modem = 0;
modem *thor22_modem = 0;