From 681c3e3d28edd2c91de8a6419ebd934a841aff1b Mon Sep 17 00:00:00 2001 From: John Greb Date: Sun, 17 May 2015 02:06:42 +0100 Subject: [PATCH] Fix merge: Replace some fsphil code. Add dialog control to adjust DominoEX tone-spacing Frequency tracking may be broken. --- src/dialogs/confdialog.cxx | 26 ++++++++++++++++++++++++++ src/dialogs/confdialog.fl | 10 ++++++++++ src/dialogs/confdialog.h | 1 + src/dominoex/dominoex.cxx | 1 + src/include/configuration.h | 3 +++ src/include/modem.h | 4 ++++ src/trx/modem.cxx | 27 +++++++++++++++++++++++++++ 7 files changed, 72 insertions(+) diff --git a/src/dialogs/confdialog.cxx b/src/dialogs/confdialog.cxx index 61bf6fa7..6b6aec92 100644 --- a/src/dialogs/confdialog.cxx +++ b/src/dialogs/confdialog.cxx @@ -2711,6 +2711,14 @@ resetDOMEX(); progdefaults.changed = true; } +Fl_Counter2 *valDominoEX_ADJ=(Fl_Counter2 *)0; + +static void cb_valDominoEX_ADJ(Fl_Counter2* o, void*) { + progdefaults.DOMINOEX_ADJ = o->value(); +resetDOMEX(); +progdefaults.changed = true; +} + Fl_Check_Button *chkDominoEX_FEC=(Fl_Check_Button *)0; static void cb_chkDominoEX_FEC(Fl_Check_Button* o, void*) { @@ -7941,6 +7949,24 @@ i on a\ntouch screen device such as a tablet.")); o->value(progdefaults.DOMINOEX_BW); o->labelsize(FL_NORMAL_SIZE); } // Fl_Counter2* valDominoEX_BW + { Fl_Counter2* o = valDominoEX_ADJ = new Fl_Counter2(156, 166, 63, 20, _("Tone-spacing adjust")); + valDominoEX_ADJ->tooltip(_("Tone-spacing adjust")); + valDominoEX_ADJ->type(1); + valDominoEX_ADJ->box(FL_UP_BOX); + valDominoEX_ADJ->color(FL_BACKGROUND_COLOR); + valDominoEX_ADJ->selection_color(FL_INACTIVE_COLOR); + valDominoEX_ADJ->labeltype(FL_NORMAL_LABEL); + valDominoEX_ADJ->labelfont(0); + valDominoEX_ADJ->labelsize(14); + valDominoEX_ADJ->labelcolor(FL_FOREGROUND_COLOR); + valDominoEX_ADJ->minimum(-100); + valDominoEX_ADJ->maximum(100); + valDominoEX_ADJ->callback((Fl_Callback*)cb_valDominoEX_ADJ); + valDominoEX_ADJ->align(Fl_Align(FL_ALIGN_RIGHT)); + valDominoEX_ADJ->when(FL_WHEN_CHANGED); + o->value(progdefaults.DOMINOEX_ADJ); + o->labelsize(FL_NORMAL_SIZE); + } // Fl_Counter2* valDominoEX_ADJ { Fl_Check_Button* o = chkDominoEX_FEC = new Fl_Check_Button(65, 171, 51, 20, _("FEC")); chkDominoEX_FEC->tooltip(_("Enable MultiPSK-compatible FEC")); chkDominoEX_FEC->down_box(FL_DOWN_BOX); diff --git a/src/dialogs/confdialog.fl b/src/dialogs/confdialog.fl index e7366f04..c4599d35 100644 --- a/src/dialogs/confdialog.fl +++ b/src/dialogs/confdialog.fl @@ -3338,6 +3338,16 @@ progdefaults.changed = true;} code1 {o->labelsize(FL_NORMAL_SIZE);} class Fl_Counter2 } + Fl_Counter valDominoEX_ADJ { + label {Tone-spacing adjust} + callback {progdefaults.DOMINOEX_ADJ = o->value(); +resetDOMEX(); +progdefaults.changed = true;} + tooltip {Tone-spacing adjust} xywh {156 166 63 20} type Simple align 8 minimum -100 maximum 100 value 0 + code0 {o->value(progdefaults.DOMINOEX_ADJ);} + code1 {o->labelsize(FL_NORMAL_SIZE);} + class Fl_Counter2 + } Fl_Check_Button chkDominoEX_FEC { label FEC callback {progdefaults.DOMINOEX_FEC = o->value(); diff --git a/src/dialogs/confdialog.h b/src/dialogs/confdialog.h index 24867d6d..468ad2ef 100644 --- a/src/dialogs/confdialog.h +++ b/src/dialogs/confdialog.h @@ -296,6 +296,7 @@ extern Fl_Group *tabDomEX; extern Fl_Input2 *txtSecondary; extern Fl_Check_Button *valDominoEX_FILTER; extern Fl_Counter2 *valDominoEX_BW; +extern Fl_Counter2 *valDominoEX_ADJ; extern Fl_Check_Button *chkDominoEX_FEC; extern Fl_Value_Slider2 *valDomCWI; extern Fl_Counter2 *valDominoEX_PATHS; diff --git a/src/dominoex/dominoex.cxx b/src/dominoex/dominoex.cxx index 05ba324d..ffab3a54 100644 --- a/src/dominoex/dominoex.cxx +++ b/src/dominoex/dominoex.cxx @@ -263,6 +263,7 @@ dominoex::dominoex(trx_mode md) } tonespacing = 1.0 * samplerate * doublespaced / symlen; + tonespacing += progdefaults.DOMINOEX_ADJ; bandwidth = NUMTONES * tonespacing; diff --git a/src/include/configuration.h b/src/include/configuration.h index a746c96b..74596844 100644 --- a/src/include/configuration.h +++ b/src/include/configuration.h @@ -587,6 +587,9 @@ ELEM_(double, DOMINOEX_BW, "DOMINOEXBW", \ "Filter bandwidth factor (bandwidth relative to signal width)", \ 2.0) \ + ELEM_(double, DOMINOEX_ADJ, "DOMINOEXADJ", \ + "Adjust tone-spacing", \ + 0.0) \ ELEM_(std::string, secText, "SECONDARYTEXT", \ "Secondary text (sent during keyboard idle times)", \ "") \ diff --git a/src/include/modem.h b/src/include/modem.h index 2f8823af..cda3d9f9 100644 --- a/src/include/modem.h +++ b/src/include/modem.h @@ -120,6 +120,7 @@ public: virtual void set_freq(double); /// Inlining small formulas is still faster and shorter. int get_freq() const { return (int)( frequency + 0.5 ); } + double track_freq(double freq); void init_freqlock(); void set_freqlock(bool); void set_sigsearch(int n) { sigsearch = n; freqerr = 0.0;}; @@ -159,6 +160,9 @@ public: CAP_TX = 1 << 6 }; +// UKHAS frequency tracking + unsigned char track_freq_lock; + // for CW modem use only bool get_cwTrack(); void set_cwTrack(bool); diff --git a/src/trx/modem.cxx b/src/trx/modem.cxx index 845d0642..dbb020ae 100644 --- a/src/trx/modem.cxx +++ b/src/trx/modem.cxx @@ -225,6 +225,7 @@ modem::modem() s2n_ncount = s2n_sum = s2n_sum2 = s2n_metric = 0.0; s2n_valid = false; + track_freq_lock = 0; bandwidth = 0.0; } @@ -249,8 +250,34 @@ void modem::init() set_freq(wf->Carrier()); } +double modem::track_freq(double freq) +{ + /* locking code in logger/rx_extract.cxx may have been lost in a previous merge + * - was added in commit 78f05cef33dc2c59211eebedeae4d97a11529b1d */ + if(track_freq_lock) return(freq); + + if(freq >= progdefaults.track_freq_min && + freq <= progdefaults.track_freq_max) + return(freq); + + double rf = wf->rfcarrier(); + double cf = (progdefaults.track_freq_max + progdefaults.track_freq_min) / 2; + + if(rf <= 0) return(freq); + + if(wf->USB()) rf += freq - cf; + else rf -= freq - cf; + + qsy(rf); + + return(cf); +} + void modem::set_freq(double freq) { + if(progdefaults.track_freq) + freq = track_freq(freq); + frequency = CLAMP( freq, progdefaults.LowFreqCutoff + bandwidth / 2,