kopia lustrzana https://github.com/jamescoxon/dl-fldigi
				
				
				
			Upstream version 2.11AD
							rodzic
							
								
									66da44c68e
								
							
						
					
					
						commit
						6aa0e8a3b3
					
				| 
						 | 
				
			
			@ -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, [11])
 | 
			
		||||
m4_define(FLDIGI_PATCH, [AC])
 | 
			
		||||
m4_define(FLDIGI_PATCH, [AD])
 | 
			
		||||
 | 
			
		||||
AC_INIT([fldigi], FLDIGI_MAJOR.FLDIGI_MINOR[FLDIGI_PATCH], [w1hkj AT w1hkj DOT com])
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@ m4_if([$3], [yes],
 | 
			
		|||
                      esac],
 | 
			
		||||
                 [ac_cv_want_[]$1=check])
 | 
			
		||||
    ])
 | 
			
		||||
m4_if([$4], [yes], [ac_cv_want_[]$1=check], [ac_cv_want_[]$1=yes])
 | 
			
		||||
m4_if([$4], [no], [ac_cv_want_[]$1=yes])
 | 
			
		||||
 | 
			
		||||
if test "x$ac_cv_want_[]$1" = "xno"; then
 | 
			
		||||
    AC_DEFINE([USE_]PKG_NAME_UC, 0)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,6 +63,7 @@ void dex::rx_init()
 | 
			
		|||
	met2 = 0.0;
 | 
			
		||||
	counter = 0;
 | 
			
		||||
	phase[0] = 0.0;
 | 
			
		||||
	currmag = prev1mag = prev2mag = 0.0;
 | 
			
		||||
	for (int i = 0; i < DEXMAXFFTS; i++)
 | 
			
		||||
		phase[i+1] = 0.0;
 | 
			
		||||
	put_MODEstatus(mode);
 | 
			
		||||
| 
						 | 
				
			
			@ -321,7 +322,29 @@ void dex::decodesymbol()
 | 
			
		|||
	c = (int)floor(fdiff + .5) - 2;
 | 
			
		||||
	if (c < 0) c += DEXNUMMTONES;
 | 
			
		||||
 | 
			
		||||
	decodeEX(c);
 | 
			
		||||
//	decodeEX(c);
 | 
			
		||||
 | 
			
		||||
	unsigned char symbols[4];
 | 
			
		||||
	double avg = (currmag + prev1mag + prev2mag) / 3.0;
 | 
			
		||||
	if (avg == 0.0) avg = 1e-20;
 | 
			
		||||
	double softmag = currmag / avg;
 | 
			
		||||
		
 | 
			
		||||
	for (int i = 0; i < 4; i++) {
 | 
			
		||||
// hard symbol decode
 | 
			
		||||
		if (progdefaults.DEXsoft == false) {
 | 
			
		||||
			if ((c & 1) == 1) symbols[3-i] = 255;
 | 
			
		||||
			else symbols[3-i] = 1;
 | 
			
		||||
// soft symbol decode
 | 
			
		||||
		} else
 | 
			
		||||
			symbols[3-i] = (unsigned char)clamp(256.0 * (c & 1) * softmag, 1, 255);
 | 
			
		||||
		
 | 
			
		||||
		c = c / 2;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Rxinlv->symbols(symbols);
 | 
			
		||||
 | 
			
		||||
	for (int i = 0; i < 4; i++) decodePairs(symbols[i]);
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int dex::harddecode()
 | 
			
		||||
| 
						 | 
				
			
			@ -416,7 +439,8 @@ void dex::eval_s2n()
 | 
			
		|||
		}	
 | 
			
		||||
		noise /= (paths * DEXNUMMTONES * 2  * (doublespaced?2:1) - 1);
 | 
			
		||||
	
 | 
			
		||||
		s2n = decayavg( s2n, sig / noise, 8);
 | 
			
		||||
		if (noise)
 | 
			
		||||
			s2n = decayavg( s2n, sig / noise, 8);
 | 
			
		||||
 | 
			
		||||
		metric = 3*(20*log10(s2n) - 9.0);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -463,12 +487,15 @@ int dex::rx_process(const double *buf, int len)
 | 
			
		|||
				if (--synccounter <= 0) {
 | 
			
		||||
					synccounter = symlen;
 | 
			
		||||
					currsymbol = harddecode();
 | 
			
		||||
					currmag = pipe[pipeptr].vector[currsymbol].mag();
 | 
			
		||||
					eval_s2n();
 | 
			
		||||
        		    decodesymbol();
 | 
			
		||||
					synchronize();
 | 
			
		||||
					update_syncscope();
 | 
			
		||||
					eval_s2n();
 | 
			
		||||
					prev2symbol = prev1symbol;
 | 
			
		||||
					prev1symbol = currsymbol;
 | 
			
		||||
					prev2mag = prev1mag;
 | 
			
		||||
					prev1mag = currmag;
 | 
			
		||||
				}
 | 
			
		||||
				pipeptr++;
 | 
			
		||||
				if (pipeptr >= twosym)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -916,6 +916,13 @@ static void cb_valDEX_PATHS(Fl_Counter* o, void*) {
 | 
			
		|||
progdefaults.changed = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Fl_Check_Button *valDEXSoft=(Fl_Check_Button *)0;
 | 
			
		||||
 | 
			
		||||
static void cb_valDEXSoft(Fl_Check_Button* o, void*) {
 | 
			
		||||
  progdefaults.DEXsoft = o->value();
 | 
			
		||||
progdefaults.changed = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Fl_Group *tabDomEX=(Fl_Group *)0;
 | 
			
		||||
 | 
			
		||||
Fl_Input *txtSecondary=(Fl_Input *)0;
 | 
			
		||||
| 
						 | 
				
			
			@ -2096,7 +2103,6 @@ l with your sound hardware.");
 | 
			
		|||
          { tabDEX = new Fl_Group(0, 44, 400, 170, "Dex");
 | 
			
		||||
            tabDEX->color((Fl_Color)51);
 | 
			
		||||
            tabDEX->selection_color((Fl_Color)51);
 | 
			
		||||
            tabDEX->hide();
 | 
			
		||||
            { txtDEXSecondary = new Fl_Input(20, 75, 360, 44, "Secondary Text");
 | 
			
		||||
              txtDEXSecondary->type(4);
 | 
			
		||||
              txtDEXSecondary->callback((Fl_Callback*)cb_txtDEXSecondary);
 | 
			
		||||
| 
						 | 
				
			
			@ -2127,6 +2133,11 @@ l with your sound hardware.");
 | 
			
		|||
              valDEX_PATHS->callback((Fl_Callback*)cb_valDEX_PATHS);
 | 
			
		||||
              o->value(progdefaults.DEX_PATHS);
 | 
			
		||||
            } // Fl_Counter* valDEX_PATHS
 | 
			
		||||
            { Fl_Check_Button* o = valDEXSoft = new Fl_Check_Button(110, 177, 70, 15, "Soft decode");
 | 
			
		||||
              valDEXSoft->down_box(FL_DOWN_BOX);
 | 
			
		||||
              valDEXSoft->callback((Fl_Callback*)cb_valDEXSoft);
 | 
			
		||||
              o->value(progdefaults.DEXsoft);
 | 
			
		||||
            } // Fl_Check_Button* valDEXSoft
 | 
			
		||||
            tabDEX->end();
 | 
			
		||||
          } // Fl_Group* tabDEX
 | 
			
		||||
          { tabDomEX = new Fl_Group(0, 50, 400, 170, "Dom");
 | 
			
		||||
| 
						 | 
				
			
			@ -2173,6 +2184,7 @@ l with your sound hardware.");
 | 
			
		|||
          { tabFeld = new Fl_Group(0, 50, 400, 170, "Feld");
 | 
			
		||||
            tabFeld->color((Fl_Color)51);
 | 
			
		||||
            tabFeld->selection_color((Fl_Color)51);
 | 
			
		||||
            tabFeld->hide();
 | 
			
		||||
            { Fl_Choice* o = selHellFont = new Fl_Choice(175, 62, 122, 20, "Feld Hell Font:");
 | 
			
		||||
              selHellFont->down_box(FL_BORDER_BOX);
 | 
			
		||||
              selHellFont->labelfont(4);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1056,7 +1056,7 @@ progdefaults.changed = true;}
 | 
			
		|||
          }
 | 
			
		||||
          Fl_Group tabDEX {
 | 
			
		||||
            label Dex open
 | 
			
		||||
            xywh {0 44 400 170} color 51 selection_color 51 hide
 | 
			
		||||
            xywh {0 44 400 170} color 51 selection_color 51
 | 
			
		||||
          } {
 | 
			
		||||
            Fl_Input txtDEXSecondary {
 | 
			
		||||
              label {Secondary Text}
 | 
			
		||||
| 
						 | 
				
			
			@ -1087,6 +1087,13 @@ progdefaults.changed = true;}
 | 
			
		|||
              xywh {20 174 63 21} type Simple minimum 4 maximum 8 step 1 value 5
 | 
			
		||||
              code0 {o->value(progdefaults.DEX_PATHS);}
 | 
			
		||||
            }
 | 
			
		||||
            Fl_Check_Button valDEXSoft {
 | 
			
		||||
              label {Soft decode}
 | 
			
		||||
              callback {progdefaults.DEXsoft = o->value();
 | 
			
		||||
progdefaults.changed = true;} selected
 | 
			
		||||
              xywh {110 177 70 15} down_box DOWN_BOX
 | 
			
		||||
              code0 {o->value(progdefaults.DEXsoft);}
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          Fl_Group tabDomEX {
 | 
			
		||||
            label Dom open
 | 
			
		||||
| 
						 | 
				
			
			@ -1131,7 +1138,7 @@ progdefaults.changed = true;}
 | 
			
		|||
          }
 | 
			
		||||
          Fl_Group tabFeld {
 | 
			
		||||
            label Feld open
 | 
			
		||||
            xywh {0 50 400 170} color 51 selection_color 51
 | 
			
		||||
            xywh {0 50 400 170} color 51 selection_color 51 hide
 | 
			
		||||
          } {
 | 
			
		||||
            Fl_Choice selHellFont {
 | 
			
		||||
              label {Feld Hell Font:}
 | 
			
		||||
| 
						 | 
				
			
			@ -1144,7 +1151,7 @@ progdefaults.changed = true;} open
 | 
			
		|||
            } {}
 | 
			
		||||
            Fl_Value_Slider sldrHellBW {
 | 
			
		||||
              label {Filter BW}
 | 
			
		||||
              callback {progdefaults.HELL_BW = sldrHellBW->value();} selected
 | 
			
		||||
              callback {progdefaults.HELL_BW = sldrHellBW->value();}
 | 
			
		||||
              xywh {30 190 345 20} type Horizontal color 215 align 5 minimum 10 maximum 2400 step 5 value 400 textsize 14
 | 
			
		||||
              code0 {o->value(progdefaults.HELL_BW);}
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -142,6 +142,7 @@ extern Fl_Input *txtDEXSecondary;
 | 
			
		|||
extern Fl_Counter *valDEX_BW;
 | 
			
		||||
extern Fl_Check_Button *valDEX_FILTER;
 | 
			
		||||
extern Fl_Counter *valDEX_PATHS;
 | 
			
		||||
extern Fl_Check_Button *valDEXSoft;
 | 
			
		||||
extern Fl_Group *tabDomEX;
 | 
			
		||||
extern Fl_Input *txtSecondary;
 | 
			
		||||
extern Fl_Counter *valDominoEX_BW;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,6 +79,7 @@ struct configuration {
 | 
			
		|||
	bool		DEX_FILTER;
 | 
			
		||||
	string		DEXsecText;
 | 
			
		||||
	int			DEX_PATHS;
 | 
			
		||||
	bool		DEXsoft;
 | 
			
		||||
// DOMINOEX
 | 
			
		||||
	double		DOMINOEX_BW;
 | 
			
		||||
	bool		DOMINOEX_FILTER;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -93,6 +93,10 @@ protected:
 | 
			
		|||
	int currsymbol;
 | 
			
		||||
	int prev1symbol;
 | 
			
		||||
	int prev2symbol;
 | 
			
		||||
	
 | 
			
		||||
	double currmag;
 | 
			
		||||
	double prev1mag;
 | 
			
		||||
	double prev2mag;
 | 
			
		||||
 | 
			
		||||
	double met1;
 | 
			
		||||
	double met2;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,6 +84,7 @@ configuration progdefaults = {
 | 
			
		|||
	true,			// bool		DEX_FILTER;
 | 
			
		||||
	"fldigi-dex ",	// string	DEXsecText;
 | 
			
		||||
	5,				// int		DEX_PATHS;
 | 
			
		||||
	false,			// bool		DEX_soft;
 | 
			
		||||
// DOMINOEX
 | 
			
		||||
	2.0,			// double	DOMINOEX_BW;
 | 
			
		||||
	true,			// bool		DOMINOEX_FILTER
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -187,7 +187,18 @@ void FTextBase::readFile(void)
 | 
			
		|||
{
 | 
			
		||||
	const char *fn = file_select("Append text", "Text\t*.txt");
 | 
			
		||||
	if (fn) {
 | 
			
		||||
#ifdef WIN32
 | 
			
		||||
		string text;
 | 
			
		||||
		ifstream tfile(fn);
 | 
			
		||||
		char ch;
 | 
			
		||||
		while (tfile) {
 | 
			
		||||
			tfile.get(ch);
 | 
			
		||||
			if (ch != '\r') text += ch;
 | 
			
		||||
		}
 | 
			
		||||
		tbuf->append(text.c_str());
 | 
			
		||||
#else
 | 
			
		||||
		tbuf->appendfile(fn);
 | 
			
		||||
#endif
 | 
			
		||||
		insert_position(tbuf->length());
 | 
			
		||||
		show_insert_position();
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue