kopia lustrzana https://gitlab.com/Teuniz/DSRemote
				
				
				
			Work in progress.
							rodzic
							
								
									e81d22bc40
								
							
						
					
					
						commit
						680a1457a0
					
				
							
								
								
									
										4
									
								
								global.h
								
								
								
								
							
							
						
						
									
										4
									
								
								global.h
								
								
								
								
							| 
						 | 
				
			
			@ -35,7 +35,7 @@
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
#define PROGRAM_NAME          "DSRemote"
 | 
			
		||||
#define PROGRAM_VERSION       "0.31_1601041416"
 | 
			
		||||
#define PROGRAM_VERSION       "0.31_1601041900"
 | 
			
		||||
 | 
			
		||||
#define MAX_PATHLEN            4096
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -195,6 +195,8 @@ struct device_settings
 | 
			
		|||
  int fftbufsz;
 | 
			
		||||
  kiss_fftr_cfg k_cfg;
 | 
			
		||||
  kiss_fft_cpx *kiss_fftbuf;
 | 
			
		||||
  double math_fft_hscale;
 | 
			
		||||
  double math_fft_hcenter;
 | 
			
		||||
  double fft_v_sense;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										413
									
								
								interface.cpp
								
								
								
								
							
							
						
						
									
										413
									
								
								interface.cpp
								
								
								
								
							| 
						 | 
				
			
			@ -2171,8 +2171,15 @@ void UI_Mainwindow::chan_menu()
 | 
			
		|||
 | 
			
		||||
void UI_Mainwindow::math_menu()
 | 
			
		||||
{
 | 
			
		||||
  char str[1024];
 | 
			
		||||
 | 
			
		||||
  double val;
 | 
			
		||||
 | 
			
		||||
  QMenu menu,
 | 
			
		||||
        submenufft;
 | 
			
		||||
        submenufft,
 | 
			
		||||
        submenufftctr,
 | 
			
		||||
        submenuffthzdiv,
 | 
			
		||||
        submenufftsrc;
 | 
			
		||||
 | 
			
		||||
  QList<QAction *> actionList;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2181,6 +2188,97 @@ void UI_Mainwindow::math_menu()
 | 
			
		|||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if(devparms.timebasedelayenable)
 | 
			
		||||
  {
 | 
			
		||||
    val = 100.0 / devparms.timebasedelayscale;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    val = 100.0 / devparms.timebasescale;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  submenufftctr.setTitle("Center");
 | 
			
		||||
  convert_to_metric_suffix(str, devparms.math_fft_hscale * 5.0 , 1);
 | 
			
		||||
  strcat(str, "Hz");
 | 
			
		||||
  submenufftctr.addAction(str, this, SLOT(select_fft_ctr_5()));
 | 
			
		||||
  convert_to_metric_suffix(str, devparms.math_fft_hscale * 6.0 , 1);
 | 
			
		||||
  strcat(str, "Hz");
 | 
			
		||||
  submenufftctr.addAction(str, this, SLOT(select_fft_ctr_6()));
 | 
			
		||||
  convert_to_metric_suffix(str, devparms.math_fft_hscale * 7.0 , 1);
 | 
			
		||||
  strcat(str, "Hz");
 | 
			
		||||
  submenufftctr.addAction(str, this, SLOT(select_fft_ctr_7()));
 | 
			
		||||
  convert_to_metric_suffix(str, devparms.math_fft_hscale * 8.0 , 1);
 | 
			
		||||
  strcat(str, "Hz");
 | 
			
		||||
  submenufftctr.addAction(str, this, SLOT(select_fft_ctr_8()));
 | 
			
		||||
  if((devparms.math_fft_hscale * 9.0) < (val * 0.40001))
 | 
			
		||||
  {
 | 
			
		||||
    convert_to_metric_suffix(str, devparms.math_fft_hscale * 9.0 , 1);
 | 
			
		||||
    strcat(str, "Hz");
 | 
			
		||||
    submenufftctr.addAction(str, this, SLOT(select_fft_ctr_9()));
 | 
			
		||||
    if((devparms.math_fft_hscale * 10.0) < (val * 0.40001))
 | 
			
		||||
    {
 | 
			
		||||
      convert_to_metric_suffix(str, devparms.math_fft_hscale * 10.0 , 1);
 | 
			
		||||
      strcat(str, "Hz");
 | 
			
		||||
      submenufftctr.addAction(str, this, SLOT(select_fft_ctr_10()));
 | 
			
		||||
      if((devparms.math_fft_hscale * 11.0) < (val * 0.40001))
 | 
			
		||||
      {
 | 
			
		||||
        convert_to_metric_suffix(str, devparms.math_fft_hscale * 11.0 , 1);
 | 
			
		||||
        strcat(str, "Hz");
 | 
			
		||||
        submenufftctr.addAction(str, this, SLOT(select_fft_ctr_11()));
 | 
			
		||||
        if((devparms.math_fft_hscale * 12.0) < (val * 0.40001))
 | 
			
		||||
        {
 | 
			
		||||
          convert_to_metric_suffix(str, devparms.math_fft_hscale * 12.0 , 1);
 | 
			
		||||
          strcat(str, "Hz");
 | 
			
		||||
          submenufftctr.addAction(str, this, SLOT(select_fft_ctr_12()));
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  submenuffthzdiv.setTitle("Hz/Div");
 | 
			
		||||
  convert_to_metric_suffix(str, val / 20.0 , 2);
 | 
			
		||||
  strcat(str, "Hz/Div");
 | 
			
		||||
  submenuffthzdiv.addAction(str, this, SLOT(select_fft_hzdiv_20()));
 | 
			
		||||
  convert_to_metric_suffix(str, val / 40.0 , 2);
 | 
			
		||||
  strcat(str, "Hz/Div");
 | 
			
		||||
  submenuffthzdiv.addAction(str, this, SLOT(select_fft_hzdiv_40()));
 | 
			
		||||
  convert_to_metric_suffix(str, val / 100.0 , 2);
 | 
			
		||||
  strcat(str, "Hz/Div");
 | 
			
		||||
  submenuffthzdiv.addAction(str, this, SLOT(select_fft_hzdiv_100()));
 | 
			
		||||
  convert_to_metric_suffix(str, val / 200.0 , 2);
 | 
			
		||||
  strcat(str, "Hz/Div");
 | 
			
		||||
  submenuffthzdiv.addAction(str, this, SLOT(select_fft_hzdiv_200()));
 | 
			
		||||
 | 
			
		||||
  submenufftsrc.setTitle("Source");
 | 
			
		||||
  submenufftsrc.addAction("CH1",  this, SLOT(select_fft_ch1()));
 | 
			
		||||
  submenufftsrc.addAction("CH2",  this, SLOT(select_fft_ch2()));
 | 
			
		||||
  if(devparms.channel_cnt > 2)
 | 
			
		||||
  {
 | 
			
		||||
    submenufftsrc.addAction("CH3",  this, SLOT(select_fft_ch3()));
 | 
			
		||||
    submenufftsrc.addAction("CH4",  this, SLOT(select_fft_ch4()));
 | 
			
		||||
  }
 | 
			
		||||
  actionList = submenufftsrc.actions();
 | 
			
		||||
  if(devparms.math_fft_src == 0)
 | 
			
		||||
  {
 | 
			
		||||
    actionList[0]->setCheckable(true);
 | 
			
		||||
    actionList[0]->setChecked(true);
 | 
			
		||||
  }
 | 
			
		||||
  else if(devparms.math_fft_src == 1)
 | 
			
		||||
    {
 | 
			
		||||
      actionList[1]->setCheckable(true);
 | 
			
		||||
      actionList[1]->setChecked(true);
 | 
			
		||||
    }
 | 
			
		||||
    else if(devparms.math_fft_src == 2)
 | 
			
		||||
      {
 | 
			
		||||
        actionList[2]->setCheckable(true);
 | 
			
		||||
        actionList[2]->setChecked(true);
 | 
			
		||||
      }
 | 
			
		||||
      else if(devparms.math_fft_src == 3)
 | 
			
		||||
        {
 | 
			
		||||
          actionList[3]->setCheckable(true);
 | 
			
		||||
          actionList[3]->setChecked(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
  submenufft.setTitle("FFT");
 | 
			
		||||
  submenufft.addAction("On",   this, SLOT(toggle_fft()));
 | 
			
		||||
  submenufft.addAction("Off",  this, SLOT(toggle_fft()));
 | 
			
		||||
| 
						 | 
				
			
			@ -2188,13 +2286,9 @@ void UI_Mainwindow::math_menu()
 | 
			
		|||
  submenufft.addAction("Half", this, SLOT(toggle_fft_split()));
 | 
			
		||||
  submenufft.addAction("Vrms", this, SLOT(toggle_fft_unit()));
 | 
			
		||||
  submenufft.addAction("dBV",  this, SLOT(toggle_fft_unit()));
 | 
			
		||||
  submenufft.addAction("CH1",  this, SLOT(select_fft_ch1()));
 | 
			
		||||
  submenufft.addAction("CH2",  this, SLOT(select_fft_ch2()));
 | 
			
		||||
  if(devparms.channel_cnt > 2)
 | 
			
		||||
  {
 | 
			
		||||
    submenufft.addAction("CH3",  this, SLOT(select_fft_ch3()));
 | 
			
		||||
    submenufft.addAction("CH4",  this, SLOT(select_fft_ch4()));
 | 
			
		||||
  }
 | 
			
		||||
  submenufft.addMenu(&submenufftsrc);
 | 
			
		||||
  submenufft.addMenu(&submenufftctr);
 | 
			
		||||
  submenufft.addMenu(&submenuffthzdiv);
 | 
			
		||||
  actionList = submenufft.actions();
 | 
			
		||||
  if(devparms.math_fft == 1)
 | 
			
		||||
  {
 | 
			
		||||
| 
						 | 
				
			
			@ -2226,26 +2320,6 @@ void UI_Mainwindow::math_menu()
 | 
			
		|||
    actionList[5]->setCheckable(true);
 | 
			
		||||
    actionList[5]->setChecked(true);
 | 
			
		||||
  }
 | 
			
		||||
  if(devparms.math_fft_src == 0)
 | 
			
		||||
  {
 | 
			
		||||
    actionList[6]->setCheckable(true);
 | 
			
		||||
    actionList[6]->setChecked(true);
 | 
			
		||||
  }
 | 
			
		||||
  else if(devparms.math_fft_src == 1)
 | 
			
		||||
    {
 | 
			
		||||
      actionList[7]->setCheckable(true);
 | 
			
		||||
      actionList[7]->setChecked(true);
 | 
			
		||||
    }
 | 
			
		||||
    else if(devparms.math_fft_src == 2)
 | 
			
		||||
      {
 | 
			
		||||
        actionList[8]->setCheckable(true);
 | 
			
		||||
        actionList[8]->setChecked(true);
 | 
			
		||||
      }
 | 
			
		||||
      else if(devparms.math_fft_src == 3)
 | 
			
		||||
        {
 | 
			
		||||
          actionList[9]->setCheckable(true);
 | 
			
		||||
          actionList[9]->setChecked(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
  menu.addMenu(&submenufft);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3163,6 +3237,289 @@ void UI_Mainwindow::select_fft_ch4()
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UI_Mainwindow::select_fft_hzdiv_20()
 | 
			
		||||
{
 | 
			
		||||
  char str[512];
 | 
			
		||||
 | 
			
		||||
  double val;
 | 
			
		||||
 | 
			
		||||
  if(devparms.timebasedelayenable)
 | 
			
		||||
  {
 | 
			
		||||
    val = (100.0 / devparms.timebasedelayscale) / 20.0;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    val = (100.0 / devparms.timebasescale) / 20.0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  sprintf(str, ":MATH:FFT:HSC %e", val);
 | 
			
		||||
 | 
			
		||||
  set_cue_cmd(str);
 | 
			
		||||
 | 
			
		||||
  devparms.math_fft_hscale = val;
 | 
			
		||||
 | 
			
		||||
  strcpy(str, "FFT: ");
 | 
			
		||||
 | 
			
		||||
  convert_to_metric_suffix(str + strlen(str), val, 2);
 | 
			
		||||
 | 
			
		||||
  strcat(str, "Hz/Div");
 | 
			
		||||
 | 
			
		||||
  statusLabel->setText(str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UI_Mainwindow::select_fft_hzdiv_40()
 | 
			
		||||
{
 | 
			
		||||
  char str[512];
 | 
			
		||||
 | 
			
		||||
  double val;
 | 
			
		||||
 | 
			
		||||
  if(devparms.timebasedelayenable)
 | 
			
		||||
  {
 | 
			
		||||
    val = (100.0 / devparms.timebasedelayscale) / 40.0;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    val = (100.0 / devparms.timebasescale) / 40.0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  sprintf(str, ":MATH:FFT:HSC %e", val);
 | 
			
		||||
 | 
			
		||||
  set_cue_cmd(str);
 | 
			
		||||
 | 
			
		||||
  devparms.math_fft_hscale = val;
 | 
			
		||||
 | 
			
		||||
  strcpy(str, "FFT: ");
 | 
			
		||||
 | 
			
		||||
  convert_to_metric_suffix(str + strlen(str), val, 2);
 | 
			
		||||
 | 
			
		||||
  strcat(str, "Hz/Div");
 | 
			
		||||
 | 
			
		||||
  statusLabel->setText(str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UI_Mainwindow::select_fft_hzdiv_100()
 | 
			
		||||
{
 | 
			
		||||
  char str[512];
 | 
			
		||||
 | 
			
		||||
  double val;
 | 
			
		||||
 | 
			
		||||
  if(devparms.timebasedelayenable)
 | 
			
		||||
  {
 | 
			
		||||
    val = (100.0 / devparms.timebasedelayscale) / 100.0;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    val = (100.0 / devparms.timebasescale) / 100.0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  sprintf(str, ":MATH:FFT:HSC %e", val);
 | 
			
		||||
 | 
			
		||||
  set_cue_cmd(str);
 | 
			
		||||
 | 
			
		||||
  devparms.math_fft_hscale = val;
 | 
			
		||||
 | 
			
		||||
  strcpy(str, "FFT: ");
 | 
			
		||||
 | 
			
		||||
  convert_to_metric_suffix(str + strlen(str), val, 2);
 | 
			
		||||
 | 
			
		||||
  strcat(str, "Hz/Div");
 | 
			
		||||
 | 
			
		||||
  statusLabel->setText(str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UI_Mainwindow::select_fft_hzdiv_200()
 | 
			
		||||
{
 | 
			
		||||
  char str[512];
 | 
			
		||||
 | 
			
		||||
  double val;
 | 
			
		||||
 | 
			
		||||
  if(devparms.timebasedelayenable)
 | 
			
		||||
  {
 | 
			
		||||
    val = (100.0 / devparms.timebasedelayscale) / 200.0;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    val = (100.0 / devparms.timebasescale) / 200.0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  sprintf(str, ":MATH:FFT:HSC %e", val);
 | 
			
		||||
 | 
			
		||||
  set_cue_cmd(str);
 | 
			
		||||
 | 
			
		||||
  devparms.math_fft_hscale = val;
 | 
			
		||||
 | 
			
		||||
  strcpy(str, "FFT: ");
 | 
			
		||||
 | 
			
		||||
  convert_to_metric_suffix(str + strlen(str), val, 2);
 | 
			
		||||
 | 
			
		||||
  strcat(str, "Hz/Div");
 | 
			
		||||
 | 
			
		||||
  statusLabel->setText(str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UI_Mainwindow::select_fft_ctr_5()
 | 
			
		||||
{
 | 
			
		||||
  char str[512];
 | 
			
		||||
 | 
			
		||||
  sprintf(str, ":MATH:FFT:HCEN %e", devparms.math_fft_hscale * 5.0);
 | 
			
		||||
 | 
			
		||||
  set_cue_cmd(str);
 | 
			
		||||
 | 
			
		||||
  devparms.math_fft_hcenter = devparms.math_fft_hscale * 5.0;
 | 
			
		||||
 | 
			
		||||
  strcpy(str, "FFT center: ");
 | 
			
		||||
 | 
			
		||||
  convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hscale * 5.0, 1);
 | 
			
		||||
 | 
			
		||||
  strcat(str, "Hz");
 | 
			
		||||
 | 
			
		||||
  statusLabel->setText(str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UI_Mainwindow::select_fft_ctr_6()
 | 
			
		||||
{
 | 
			
		||||
  char str[512];
 | 
			
		||||
 | 
			
		||||
  sprintf(str, ":MATH:FFT:HCEN %e", devparms.math_fft_hscale * 6.0);
 | 
			
		||||
 | 
			
		||||
  set_cue_cmd(str);
 | 
			
		||||
 | 
			
		||||
  devparms.math_fft_hcenter = devparms.math_fft_hscale * 6.0;
 | 
			
		||||
 | 
			
		||||
  strcpy(str, "FFT center: ");
 | 
			
		||||
 | 
			
		||||
  convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hscale * 6.0, 1);
 | 
			
		||||
 | 
			
		||||
  strcat(str, "Hz");
 | 
			
		||||
 | 
			
		||||
  statusLabel->setText(str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UI_Mainwindow::select_fft_ctr_7()
 | 
			
		||||
{
 | 
			
		||||
  char str[512];
 | 
			
		||||
 | 
			
		||||
  sprintf(str, ":MATH:FFT:HCEN %e", devparms.math_fft_hscale * 7.0);
 | 
			
		||||
 | 
			
		||||
  set_cue_cmd(str);
 | 
			
		||||
 | 
			
		||||
  devparms.math_fft_hcenter = devparms.math_fft_hscale * 7.0;
 | 
			
		||||
 | 
			
		||||
  strcpy(str, "FFT center: ");
 | 
			
		||||
 | 
			
		||||
  convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hscale * 7.0, 1);
 | 
			
		||||
 | 
			
		||||
  strcat(str, "Hz");
 | 
			
		||||
 | 
			
		||||
  statusLabel->setText(str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UI_Mainwindow::select_fft_ctr_8()
 | 
			
		||||
{
 | 
			
		||||
  char str[512];
 | 
			
		||||
 | 
			
		||||
  sprintf(str, ":MATH:FFT:HCEN %e", devparms.math_fft_hscale * 8.0);
 | 
			
		||||
 | 
			
		||||
  set_cue_cmd(str);
 | 
			
		||||
 | 
			
		||||
  devparms.math_fft_hcenter = devparms.math_fft_hscale * 8.0;
 | 
			
		||||
 | 
			
		||||
  strcpy(str, "FFT center: ");
 | 
			
		||||
 | 
			
		||||
  convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hscale * 8.0, 1);
 | 
			
		||||
 | 
			
		||||
  strcat(str, "Hz");
 | 
			
		||||
 | 
			
		||||
  statusLabel->setText(str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UI_Mainwindow::select_fft_ctr_9()
 | 
			
		||||
{
 | 
			
		||||
  char str[512];
 | 
			
		||||
 | 
			
		||||
  sprintf(str, ":MATH:FFT:HCEN %e", devparms.math_fft_hscale * 9.0);
 | 
			
		||||
 | 
			
		||||
  set_cue_cmd(str);
 | 
			
		||||
 | 
			
		||||
  devparms.math_fft_hcenter = devparms.math_fft_hscale * 9.0;
 | 
			
		||||
 | 
			
		||||
  strcpy(str, "FFT center: ");
 | 
			
		||||
 | 
			
		||||
  convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hscale * 9.0, 1);
 | 
			
		||||
 | 
			
		||||
  strcat(str, "Hz");
 | 
			
		||||
 | 
			
		||||
  statusLabel->setText(str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UI_Mainwindow::select_fft_ctr_10()
 | 
			
		||||
{
 | 
			
		||||
  char str[512];
 | 
			
		||||
 | 
			
		||||
  sprintf(str, ":MATH:FFT:HCEN %e", devparms.math_fft_hscale * 10.0);
 | 
			
		||||
 | 
			
		||||
  set_cue_cmd(str);
 | 
			
		||||
 | 
			
		||||
  devparms.math_fft_hcenter = devparms.math_fft_hscale * 10.0;
 | 
			
		||||
 | 
			
		||||
  strcpy(str, "FFT center: ");
 | 
			
		||||
 | 
			
		||||
  convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hscale * 10.0, 1);
 | 
			
		||||
 | 
			
		||||
  strcat(str, "Hz");
 | 
			
		||||
 | 
			
		||||
  statusLabel->setText(str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UI_Mainwindow::select_fft_ctr_11()
 | 
			
		||||
{
 | 
			
		||||
  char str[512];
 | 
			
		||||
 | 
			
		||||
  sprintf(str, ":MATH:FFT:HCEN %e", devparms.math_fft_hscale * 11.0);
 | 
			
		||||
 | 
			
		||||
  set_cue_cmd(str);
 | 
			
		||||
 | 
			
		||||
  devparms.math_fft_hcenter = devparms.math_fft_hscale * 11.0;
 | 
			
		||||
 | 
			
		||||
  strcpy(str, "FFT center: ");
 | 
			
		||||
 | 
			
		||||
  convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hscale *11.0, 1);
 | 
			
		||||
 | 
			
		||||
  strcat(str, "Hz");
 | 
			
		||||
 | 
			
		||||
  statusLabel->setText(str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UI_Mainwindow::select_fft_ctr_12()
 | 
			
		||||
{
 | 
			
		||||
  char str[512];
 | 
			
		||||
 | 
			
		||||
  sprintf(str, ":MATH:FFT:HCEN %e", devparms.math_fft_hscale * 12.0);
 | 
			
		||||
 | 
			
		||||
  set_cue_cmd(str);
 | 
			
		||||
 | 
			
		||||
  devparms.math_fft_hcenter = devparms.math_fft_hscale * 12.0;
 | 
			
		||||
 | 
			
		||||
  strcpy(str, "FFT center: ");
 | 
			
		||||
 | 
			
		||||
  convert_to_metric_suffix(str + strlen(str), devparms.math_fft_hscale * 12.0, 1);
 | 
			
		||||
 | 
			
		||||
  strcat(str, "Hz");
 | 
			
		||||
 | 
			
		||||
  statusLabel->setText(str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1723,6 +1723,38 @@ int UI_Mainwindow::get_device_settings()
 | 
			
		|||
    devparms.math_fft_unit = 1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  usleep(TMC_GDS_DELAY);
 | 
			
		||||
 | 
			
		||||
  if(tmc_write(":MATH:FFT:HSC?") != 14)
 | 
			
		||||
  {
 | 
			
		||||
    line = __LINE__;
 | 
			
		||||
    goto OUT_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if(tmc_read() < 1)
 | 
			
		||||
  {
 | 
			
		||||
    line = __LINE__;
 | 
			
		||||
    goto OUT_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  devparms.math_fft_hscale = atof(device->buf);
 | 
			
		||||
 | 
			
		||||
  usleep(TMC_GDS_DELAY);
 | 
			
		||||
 | 
			
		||||
  if(tmc_write(":MATH:FFT:HCEN?") != 15)
 | 
			
		||||
  {
 | 
			
		||||
    line = __LINE__;
 | 
			
		||||
    goto OUT_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if(tmc_read() < 1)
 | 
			
		||||
  {
 | 
			
		||||
    line = __LINE__;
 | 
			
		||||
    goto OUT_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  devparms.math_fft_hcenter = atof(device->buf);
 | 
			
		||||
 | 
			
		||||
  QApplication::restoreOverrideCursor();
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								mainwindow.h
								
								
								
								
							
							
						
						
									
										12
									
								
								mainwindow.h
								
								
								
								
							| 
						 | 
				
			
			@ -396,6 +396,18 @@ private slots:
 | 
			
		|||
  void select_fft_ch2();
 | 
			
		||||
  void select_fft_ch3();
 | 
			
		||||
  void select_fft_ch4();
 | 
			
		||||
  void select_fft_hzdiv_20();
 | 
			
		||||
  void select_fft_hzdiv_40();
 | 
			
		||||
  void select_fft_hzdiv_100();
 | 
			
		||||
  void select_fft_hzdiv_200();
 | 
			
		||||
  void select_fft_ctr_5();
 | 
			
		||||
  void select_fft_ctr_6();
 | 
			
		||||
  void select_fft_ctr_7();
 | 
			
		||||
  void select_fft_ctr_8();
 | 
			
		||||
  void select_fft_ctr_9();
 | 
			
		||||
  void select_fft_ctr_10();
 | 
			
		||||
  void select_fft_ctr_11();
 | 
			
		||||
  void select_fft_ctr_12();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
  void closeEvent(QCloseEvent *);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -152,7 +152,8 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
 | 
			
		|||
 | 
			
		||||
  double h_step=0.0,
 | 
			
		||||
         step,
 | 
			
		||||
         step2;
 | 
			
		||||
         step2,
 | 
			
		||||
         fft_h_offset=0.0;
 | 
			
		||||
 | 
			
		||||
//  clk_start = clock();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -382,20 +383,33 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
 | 
			
		|||
 | 
			
		||||
      h_step = (double)curve_w / (double)devparms->fftbufsz;
 | 
			
		||||
 | 
			
		||||
      if(devparms->timebasedelayenable)
 | 
			
		||||
      {
 | 
			
		||||
        h_step *= (100.0 / devparms->timebasedelayscale) / devparms->math_fft_hscale;
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        h_step *= (100.0 / devparms->timebasescale) / devparms->math_fft_hscale;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      h_step /= 24.0;
 | 
			
		||||
 | 
			
		||||
      fft_v_sense = v_sense * 35;
 | 
			
		||||
 | 
			
		||||
      fft_v_offset = curve_h * 0.75;
 | 
			
		||||
 | 
			
		||||
      fft_h_offset = (curve_w / 2) - ((devparms->math_fft_hcenter / devparms->math_fft_hscale) * curve_w / devparms->hordivisions);
 | 
			
		||||
 | 
			
		||||
      painter->setPen(QPen(QBrush(QColor(128, 0, 255), Qt::SolidPattern), tracewidth, Qt::SolidLine, Qt::SquareCap, Qt::BevelJoin));
 | 
			
		||||
 | 
			
		||||
      for(i=0; i<devparms->fftbufsz; i++)
 | 
			
		||||
      {
 | 
			
		||||
        if(devparms->fftbufsz < (curve_w / 2))
 | 
			
		||||
        {
 | 
			
		||||
          painter->drawLine(i * h_step, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset, (i + 1) * h_step, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
          painter->drawLine(i * h_step + fft_h_offset, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset, (i + 1) * h_step + fft_h_offset, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
          if(i)
 | 
			
		||||
          {
 | 
			
		||||
            painter->drawLine(i * h_step, (devparms->fftbuf_out[i - 1] * fft_v_sense) + fft_v_offset, i * h_step, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
            painter->drawLine(i * h_step + fft_h_offset, (devparms->fftbuf_out[i - 1] * fft_v_sense) + fft_v_offset, i * h_step + fft_h_offset, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
| 
						 | 
				
			
			@ -404,29 +418,33 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
 | 
			
		|||
          {
 | 
			
		||||
            if(devparms->displaytype)
 | 
			
		||||
            {
 | 
			
		||||
              painter->drawPoint(i * h_step, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
              painter->drawPoint(i * h_step + fft_h_offset, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
              painter->drawLine(i * h_step, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset, (i + 1) * h_step, (devparms->fftbuf_out[i + 1] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
              painter->drawLine(i * h_step + fft_h_offset, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset, (i + 1) * h_step + fft_h_offset, (devparms->fftbuf_out[i + 1] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      sprintf(str, "FFT: CH%i ", devparms->math_fft_src + 1);
 | 
			
		||||
      sprintf(str, "FFT: CH%i  ", devparms->math_fft_src + 1);
 | 
			
		||||
 | 
			
		||||
      convert_to_metric_suffix(str + strlen(str), 10, 2);
 | 
			
		||||
 | 
			
		||||
      strcat(str, "dBV  ");
 | 
			
		||||
 | 
			
		||||
      convert_to_metric_suffix(str + strlen(str), devparms->math_fft_hscale, 2);
 | 
			
		||||
 | 
			
		||||
      strcat(str, "Hz/Div  ");
 | 
			
		||||
 | 
			
		||||
      if(devparms->timebasedelayenable)
 | 
			
		||||
      {
 | 
			
		||||
        convert_to_metric_suffix(str + strlen(str),
 | 
			
		||||
                                (devparms->fftbufsz * 2) / (devparms->timebasedelayscale * devparms->hordivisions),
 | 
			
		||||
                                0);
 | 
			
		||||
        convert_to_metric_suffix(str + strlen(str), 100.0 / devparms->timebasedelayscale, 0);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        convert_to_metric_suffix(str + strlen(str),
 | 
			
		||||
                                (devparms->fftbufsz * 2) / (devparms->timebasescale * devparms->hordivisions),
 | 
			
		||||
                                0);
 | 
			
		||||
        convert_to_metric_suffix(str + strlen(str), 100.0 / devparms->timebasescale, 0);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      strcat(str, "Sa/s");
 | 
			
		||||
| 
						 | 
				
			
			@ -741,20 +759,33 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
 | 
			
		|||
 | 
			
		||||
    h_step = (double)curve_w / (double)devparms->fftbufsz;
 | 
			
		||||
 | 
			
		||||
    if(devparms->timebasedelayenable)
 | 
			
		||||
    {
 | 
			
		||||
      h_step *= (100.0 / devparms->timebasedelayscale) / devparms->math_fft_hscale;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      h_step *= (100.0 / devparms->timebasescale) / devparms->math_fft_hscale;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    h_step /= 24.0;
 | 
			
		||||
 | 
			
		||||
    fft_v_sense = v_sense * 35;
 | 
			
		||||
 | 
			
		||||
    fft_v_offset = curve_h * 0.75;
 | 
			
		||||
 | 
			
		||||
    fft_h_offset = (curve_w / 2) - ((devparms->math_fft_hcenter / devparms->math_fft_hscale) * curve_w / devparms->hordivisions);
 | 
			
		||||
 | 
			
		||||
    painter->setPen(QPen(QBrush(QColor(128, 0, 255), Qt::SolidPattern), tracewidth, Qt::SolidLine, Qt::SquareCap, Qt::BevelJoin));
 | 
			
		||||
 | 
			
		||||
    for(i=0; i<devparms->fftbufsz; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if(devparms->fftbufsz < (curve_w / 2))
 | 
			
		||||
      {
 | 
			
		||||
        painter->drawLine(i * h_step, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset, (i + 1) * h_step, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
        painter->drawLine(i * h_step + fft_h_offset, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset, (i + 1) * h_step + fft_h_offset, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
        if(i)
 | 
			
		||||
        {
 | 
			
		||||
          painter->drawLine(i * h_step, (devparms->fftbuf_out[i - 1] * fft_v_sense) + fft_v_offset, i * h_step, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
          painter->drawLine(i * h_step + fft_h_offset, (devparms->fftbuf_out[i - 1] * fft_v_sense) + fft_v_offset, i * h_step + fft_h_offset, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
| 
						 | 
				
			
			@ -763,29 +794,37 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
 | 
			
		|||
        {
 | 
			
		||||
          if(devparms->displaytype)
 | 
			
		||||
          {
 | 
			
		||||
            painter->drawPoint(i * h_step, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
            painter->drawPoint(i * h_step + fft_h_offset, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
            painter->drawLine(i * h_step, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset, (i + 1) * h_step, (devparms->fftbuf_out[i + 1] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
            painter->drawLine(i * h_step + fft_h_offset, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset, (i + 1) * h_step + fft_h_offset, (devparms->fftbuf_out[i + 1] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    sprintf(str, "FFT: CH%i ", devparms->math_fft_src + 1);
 | 
			
		||||
    sprintf(str, "FFT: CH%i  ", devparms->math_fft_src + 1);
 | 
			
		||||
 | 
			
		||||
    convert_to_metric_suffix(str + strlen(str), 10, 2);
 | 
			
		||||
 | 
			
		||||
    strcat(str, "dBV  ");
 | 
			
		||||
 | 
			
		||||
    convert_to_metric_suffix(str + strlen(str), devparms->math_fft_hscale, 2);
 | 
			
		||||
 | 
			
		||||
    strcat(str, "Hz/Div  Center ");
 | 
			
		||||
 | 
			
		||||
    convert_to_metric_suffix(str + strlen(str), devparms->math_fft_hcenter, 1);
 | 
			
		||||
 | 
			
		||||
    strcat(str, "Hz  ");
 | 
			
		||||
 | 
			
		||||
    if(devparms->timebasedelayenable)
 | 
			
		||||
    {
 | 
			
		||||
      convert_to_metric_suffix(str + strlen(str),
 | 
			
		||||
                              (devparms->fftbufsz * 2) / (devparms->timebasedelayscale * devparms->hordivisions),
 | 
			
		||||
                              0);
 | 
			
		||||
      convert_to_metric_suffix(str + strlen(str), 100.0 / devparms->timebasedelayscale, 0);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      convert_to_metric_suffix(str + strlen(str),
 | 
			
		||||
                              (devparms->fftbufsz * 2) / (devparms->timebasescale * devparms->hordivisions),
 | 
			
		||||
                              0);
 | 
			
		||||
      convert_to_metric_suffix(str + strlen(str), 100.0 / devparms->timebasescale, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    strcat(str, "Sa/s");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue