kopia lustrzana https://gitlab.com/Teuniz/DSRemote
				
				
				
			Work in progress.
							rodzic
							
								
									9955b8ebf4
								
							
						
					
					
						commit
						af0d090416
					
				
							
								
								
									
										7
									
								
								global.h
								
								
								
								
							
							
						
						
									
										7
									
								
								global.h
								
								
								
								
							| 
						 | 
				
			
			@ -35,7 +35,7 @@
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
#define PROGRAM_NAME          "DSRemote"
 | 
			
		||||
#define PROGRAM_VERSION       "0.31_1601042038"
 | 
			
		||||
#define PROGRAM_VERSION       "0.31_1601051056"
 | 
			
		||||
 | 
			
		||||
#define MAX_PATHLEN            4096
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -198,7 +198,10 @@ struct device_settings
 | 
			
		|||
  kiss_fft_cpx *kiss_fftbuf;
 | 
			
		||||
  double math_fft_hscale;
 | 
			
		||||
  double math_fft_hcenter;
 | 
			
		||||
  double fft_v_sense;
 | 
			
		||||
  double fft_vscale;
 | 
			
		||||
  double fft_voffset;
 | 
			
		||||
 | 
			
		||||
  int current_screen_sf;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -555,6 +555,8 @@ void UI_Mainwindow::horScaleDialChanged(int new_pos)
 | 
			
		|||
      devparms.timebasedelayscale = round_down_step125(devparms.timebasedelayscale, NULL);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    devparms.current_screen_sf = 100.0 / devparms.timebasedelayscale;
 | 
			
		||||
 | 
			
		||||
    strcpy(str, "Delayed timebase: ");
 | 
			
		||||
 | 
			
		||||
    convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayscale, 2);
 | 
			
		||||
| 
						 | 
				
			
			@ -629,6 +631,8 @@ void UI_Mainwindow::horScaleDialChanged(int new_pos)
 | 
			
		|||
      devparms.timebasescale = round_down_step125(devparms.timebasescale, NULL);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    devparms.current_screen_sf = 100.0 / devparms.timebasescale;
 | 
			
		||||
 | 
			
		||||
    strcpy(str, "Timebase: ");
 | 
			
		||||
 | 
			
		||||
    convert_to_metric_suffix(str + strlen(str), devparms.timebasescale, 2);
 | 
			
		||||
| 
						 | 
				
			
			@ -2280,12 +2284,12 @@ void UI_Mainwindow::math_menu()
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
  submenufft.setTitle("FFT");
 | 
			
		||||
  submenufft.addAction("On",   this, SLOT(toggle_fft()));
 | 
			
		||||
  submenufft.addAction("Off",  this, SLOT(toggle_fft()));
 | 
			
		||||
  submenufft.addAction("Full", this, SLOT(toggle_fft_split()));
 | 
			
		||||
  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("On",     this, SLOT(toggle_fft()));
 | 
			
		||||
  submenufft.addAction("Off",    this, SLOT(toggle_fft()));
 | 
			
		||||
  submenufft.addAction("Full",   this, SLOT(toggle_fft_split()));
 | 
			
		||||
  submenufft.addAction("Half",   this, SLOT(toggle_fft_split()));
 | 
			
		||||
  submenufft.addAction("Vrms",   this, SLOT(toggle_fft_unit()));
 | 
			
		||||
  submenufft.addAction("dB/dBm", this, SLOT(toggle_fft_unit()));
 | 
			
		||||
  submenufft.addMenu(&submenufftsrc);
 | 
			
		||||
  submenufft.addMenu(&submenufftctr);
 | 
			
		||||
  submenufft.addMenu(&submenuffthzdiv);
 | 
			
		||||
| 
						 | 
				
			
			@ -3200,7 +3204,7 @@ void UI_Mainwindow::toggle_fft_unit()
 | 
			
		|||
 | 
			
		||||
    devparms.math_fft_unit = 1;
 | 
			
		||||
 | 
			
		||||
    statusLabel->setText("FFT unit dBV");
 | 
			
		||||
    statusLabel->setText("FFT unit dB");
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -262,6 +262,15 @@ void UI_Mainwindow::open_connection()
 | 
			
		|||
    goto OUT_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if(devparms.timebasedelayenable)
 | 
			
		||||
  {
 | 
			
		||||
    devparms.current_screen_sf = 100.0 / devparms.timebasedelayscale;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    devparms.current_screen_sf = 100.0 / devparms.timebasescale;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if(devparms.modelserie == 1)
 | 
			
		||||
  {
 | 
			
		||||
    trig50pctButton->setEnabled(false);
 | 
			
		||||
| 
						 | 
				
			
			@ -2516,6 +2525,8 @@ void UI_Mainwindow::zoom_in()
 | 
			
		|||
 | 
			
		||||
    devparms.timebasedelayscale = round_down_step125(devparms.timebasedelayscale, NULL);
 | 
			
		||||
 | 
			
		||||
    devparms.current_screen_sf = 100.0 / devparms.timebasedelayscale;
 | 
			
		||||
 | 
			
		||||
    strcpy(str, "Delayed timebase: ");
 | 
			
		||||
 | 
			
		||||
    convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayscale, 2);
 | 
			
		||||
| 
						 | 
				
			
			@ -2563,6 +2574,8 @@ void UI_Mainwindow::zoom_in()
 | 
			
		|||
 | 
			
		||||
    devparms.timebasescale = round_down_step125(devparms.timebasescale, NULL);
 | 
			
		||||
 | 
			
		||||
    devparms.current_screen_sf = 100.0 / devparms.timebasescale;
 | 
			
		||||
 | 
			
		||||
    strcpy(str, "Timebase: ");
 | 
			
		||||
 | 
			
		||||
    convert_to_metric_suffix(str + strlen(str), devparms.timebasescale, 2);
 | 
			
		||||
| 
						 | 
				
			
			@ -2607,6 +2620,8 @@ void UI_Mainwindow::zoom_out()
 | 
			
		|||
 | 
			
		||||
    devparms.timebasedelayscale = round_up_step125(devparms.timebasedelayscale, NULL);
 | 
			
		||||
 | 
			
		||||
    devparms.current_screen_sf = 100.0 / devparms.timebasedelayscale;
 | 
			
		||||
 | 
			
		||||
    strcpy(str, "Delayed timebase: ");
 | 
			
		||||
 | 
			
		||||
    convert_to_metric_suffix(str + strlen(str), devparms.timebasedelayscale, 2);
 | 
			
		||||
| 
						 | 
				
			
			@ -2630,6 +2645,8 @@ void UI_Mainwindow::zoom_out()
 | 
			
		|||
 | 
			
		||||
    devparms.timebasescale = round_up_step125(devparms.timebasescale, NULL);
 | 
			
		||||
 | 
			
		||||
    devparms.current_screen_sf = 100.0 / devparms.timebasescale;
 | 
			
		||||
 | 
			
		||||
    strcpy(str, "Timebase: ");
 | 
			
		||||
 | 
			
		||||
    convert_to_metric_suffix(str + strlen(str), devparms.timebasescale, 2);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,7 +79,7 @@ UI_Mainwindow::UI_Mainwindow()
 | 
			
		|||
 | 
			
		||||
  devparms.k_cfg = NULL;
 | 
			
		||||
 | 
			
		||||
  devparms.fft_v_sense = 1.0;
 | 
			
		||||
  devparms.fft_vscale = 10.0;
 | 
			
		||||
 | 
			
		||||
  devparms.screentimerival = settings.value("gui/refresh", 50).toInt();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -113,6 +113,8 @@ UI_Mainwindow::UI_Mainwindow()
 | 
			
		|||
 | 
			
		||||
  devparms.hordivisions = 14;
 | 
			
		||||
 | 
			
		||||
  devparms.current_screen_sf = 1;
 | 
			
		||||
 | 
			
		||||
  strcpy(devparms.modelname, "-----");
 | 
			
		||||
 | 
			
		||||
  devparms.mutexx = new QMutex();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,8 +29,8 @@
 | 
			
		|||
#include "screen_thread.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SPECT_LOG_MINIMUM (0.000001)
 | 
			
		||||
#define SPECT_LOG_MINIMUM_LOG (-5)
 | 
			
		||||
#define SPECT_LOG_MINIMUM (0.00000001)
 | 
			
		||||
#define SPECT_LOG_MINIMUM_LOG (-8)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void screenThread::set_device(struct tmcdev *tmdev)
 | 
			
		||||
| 
						 | 
				
			
			@ -81,6 +81,10 @@ void screenThread::set_params(struct device_settings *dev_parms)
 | 
			
		|||
  params.chandisplay[1] = deviceparms->chandisplay[1];
 | 
			
		||||
  params.chandisplay[2] = deviceparms->chandisplay[2];
 | 
			
		||||
  params.chandisplay[3] = deviceparms->chandisplay[3];
 | 
			
		||||
  params.chanscale[0] = deviceparms->chanscale[0];
 | 
			
		||||
  params.chanscale[1] = deviceparms->chanscale[1];
 | 
			
		||||
  params.chanscale[2] = deviceparms->chanscale[2];
 | 
			
		||||
  params.chanscale[3] = deviceparms->chanscale[3];
 | 
			
		||||
  params.countersrc = deviceparms->countersrc;
 | 
			
		||||
  params.cmd_cue_idx_in = deviceparms->cmd_cue_idx_in;
 | 
			
		||||
  params.math_fft_src = deviceparms->math_fft_src;
 | 
			
		||||
| 
						 | 
				
			
			@ -91,6 +95,7 @@ void screenThread::set_params(struct device_settings *dev_parms)
 | 
			
		|||
  params.fftbufsz = deviceparms->fftbufsz;
 | 
			
		||||
  params.k_cfg = deviceparms->k_cfg;
 | 
			
		||||
  params.kiss_fftbuf = deviceparms->kiss_fftbuf;
 | 
			
		||||
  params.current_screen_sf = deviceparms->current_screen_sf;
 | 
			
		||||
  params.debug_str[0] = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -293,6 +298,8 @@ void screenThread::run()
 | 
			
		|||
 | 
			
		||||
  char str[128];
 | 
			
		||||
 | 
			
		||||
  double y_incr, binsz;
 | 
			
		||||
 | 
			
		||||
  params.error_stat = 0;
 | 
			
		||||
 | 
			
		||||
  params.result = TMC_THRD_RESULT_NONE;
 | 
			
		||||
| 
						 | 
				
			
			@ -597,9 +604,13 @@ void screenThread::run()
 | 
			
		|||
 | 
			
		||||
      if((n == (params.fftbufsz * 2)) && (params.math_fft == 1) && (i == params.math_fft_src))
 | 
			
		||||
      {
 | 
			
		||||
        y_incr = params.chanscale[i] / 25.0;
 | 
			
		||||
 | 
			
		||||
        binsz = (double)params.current_screen_sf / (params.fftbufsz * 2.0);
 | 
			
		||||
 | 
			
		||||
        for(j=0; j<n; j++)
 | 
			
		||||
        {
 | 
			
		||||
          params.fftbuf_in[j] = params.wavebuf[i][j];
 | 
			
		||||
          params.fftbuf_in[j] = params.wavebuf[i][j] * y_incr;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        kiss_fftr(params.k_cfg, params.fftbuf_in, params.kiss_fftbuf);
 | 
			
		||||
| 
						 | 
				
			
			@ -609,7 +620,16 @@ void screenThread::run()
 | 
			
		|||
          params.fftbuf_out[k] = (((params.kiss_fftbuf[k].r * params.kiss_fftbuf[k].r) +
 | 
			
		||||
                     (params.kiss_fftbuf[k].i * params.kiss_fftbuf[k].i)) / params.fftbufsz);
 | 
			
		||||
 | 
			
		||||
          if(params.math_fft_unit)  // dBV
 | 
			
		||||
          params.fftbuf_out[k] /= params.current_screen_sf;
 | 
			
		||||
 | 
			
		||||
          if(k==0)  // DC!
 | 
			
		||||
          {
 | 
			
		||||
            params.fftbuf_out[k] /= 2.0;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          params.fftbuf_out[k] *= binsz;
 | 
			
		||||
 | 
			
		||||
          if(params.math_fft_unit)  // dBm
 | 
			
		||||
          {
 | 
			
		||||
            if(params.fftbuf_out[k] < SPECT_LOG_MINIMUM)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -623,6 +643,10 @@ void screenThread::run()
 | 
			
		|||
              params.fftbuf_out[k] = SPECT_LOG_MINIMUM_LOG;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          else  // Vrms
 | 
			
		||||
          {
 | 
			
		||||
            params.fftbuf_out[k] = sqrt(params.fftbuf_out[k]);
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -69,6 +69,7 @@ private:
 | 
			
		|||
  struct {
 | 
			
		||||
    int connected;
 | 
			
		||||
    int chandisplay[MAX_CHNS];
 | 
			
		||||
    double chanscale[MAX_CHNS];
 | 
			
		||||
    int triggerstatus;
 | 
			
		||||
    int triggersweep;
 | 
			
		||||
    double samplerate;
 | 
			
		||||
| 
						 | 
				
			
			@ -99,6 +100,8 @@ private:
 | 
			
		|||
    kiss_fftr_cfg k_cfg;
 | 
			
		||||
    kiss_fft_cpx *kiss_fftbuf;
 | 
			
		||||
 | 
			
		||||
    int current_screen_sf;
 | 
			
		||||
 | 
			
		||||
    char debug_str[1024];
 | 
			
		||||
  } params;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										305
									
								
								signalcurve.cpp
								
								
								
								
							
							
						
						
									
										305
									
								
								signalcurve.cpp
								
								
								
								
							| 
						 | 
				
			
			@ -64,8 +64,6 @@ SignalCurve::SignalCurve(QWidget *w_parent) : QWidget(w_parent)
 | 
			
		|||
  bordersize = 60;
 | 
			
		||||
 | 
			
		||||
  v_sense = 1;
 | 
			
		||||
  fft_v_sense = 1;
 | 
			
		||||
  fft_v_offset = 0;
 | 
			
		||||
 | 
			
		||||
  mouse_x = 0;
 | 
			
		||||
  mouse_y = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -152,8 +150,7 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
 | 
			
		|||
 | 
			
		||||
  double h_step=0.0,
 | 
			
		||||
         step,
 | 
			
		||||
         step2,
 | 
			
		||||
         fft_h_offset=0.0;
 | 
			
		||||
         step2;
 | 
			
		||||
 | 
			
		||||
//  clk_start = clock();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -376,91 +373,7 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
 | 
			
		|||
 | 
			
		||||
  if((devparms->math_fft == 1) && (devparms->math_fft_split == 0))
 | 
			
		||||
  {
 | 
			
		||||
    if((devparms->fftbufsz > 32) && devparms->chandisplay[devparms->math_fft_src])
 | 
			
		||||
    {
 | 
			
		||||
      painter->setClipping(true);
 | 
			
		||||
      painter->setClipRegion(QRegion(0, 0, curve_w, curve_h), Qt::ReplaceClip);
 | 
			
		||||
 | 
			
		||||
      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 + 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 + 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
 | 
			
		||||
        {
 | 
			
		||||
          if(i < (devparms->fftbufsz - 1))
 | 
			
		||||
          {
 | 
			
		||||
            if(devparms->displaytype)
 | 
			
		||||
            {
 | 
			
		||||
              painter->drawPoint(i * h_step + fft_h_offset, (devparms->fftbuf_out[i] * fft_v_sense) + fft_v_offset);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
              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);
 | 
			
		||||
 | 
			
		||||
      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), 100.0 / devparms->timebasedelayscale, 0);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        convert_to_metric_suffix(str + strlen(str), 100.0 / devparms->timebasescale, 0);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      strcat(str, "Sa/s");
 | 
			
		||||
 | 
			
		||||
      painter->drawText(15, curve_h - 15, str);
 | 
			
		||||
 | 
			
		||||
      painter->setClipping(false);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      painter->setPen(QPen(QBrush(QColor(128, 0, 255), Qt::SolidPattern), tracewidth, Qt::SolidLine, Qt::SquareCap, Qt::BevelJoin));
 | 
			
		||||
 | 
			
		||||
      sprintf(str, "FFT: CH%i Data Invalid!", devparms->math_fft_src + 1);
 | 
			
		||||
 | 
			
		||||
      painter->drawText(15, curve_h - 15, str);
 | 
			
		||||
    }
 | 
			
		||||
    drawFFT(painter, curve_h_backup, curve_w_backup);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////// draw the curve ///////////////////////////////////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -647,106 +560,147 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
 | 
			
		|||
            paintLabel(painter, 20, curve_h - 50, 100, 20, str, SignalColor[3]);
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
  if((devparms->math_fft == 0) || (devparms->math_fft_split == 0))
 | 
			
		||||
  if((devparms->math_fft == 1) && (devparms->math_fft_split == 1))
 | 
			
		||||
  {
 | 
			
		||||
    return;
 | 
			
		||||
    drawFFT(painter, curve_h_backup, curve_w_backup);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
//   clk_end = clock();
 | 
			
		||||
//
 | 
			
		||||
//   cpu_time_used += ((double) (clk_end - clk_start)) / CLOCKS_PER_SEC;
 | 
			
		||||
//
 | 
			
		||||
//   scr_update_cntr++;
 | 
			
		||||
//
 | 
			
		||||
//   if(!(scr_update_cntr % 50))
 | 
			
		||||
//   {
 | 
			
		||||
//     printf("CPU time used: %f\n", cpu_time_used / 50);
 | 
			
		||||
//
 | 
			
		||||
//     cpu_time_used = 0;
 | 
			
		||||
//   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void SignalCurve::drawFFT(QPainter *painter, int curve_h_b, int curve_w_b)
 | 
			
		||||
{
 | 
			
		||||
  int i, small_rulers, curve_w, curve_h;
 | 
			
		||||
 | 
			
		||||
  char str[1024];
 | 
			
		||||
 | 
			
		||||
  double h_step=0.0,
 | 
			
		||||
         step,
 | 
			
		||||
         step2,
 | 
			
		||||
         fft_h_offset=0.0;
 | 
			
		||||
 | 
			
		||||
  small_rulers = 5 * devparms->hordivisions;
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////// FFT: translate coordinates, draw and fill a rectangle ///////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
  painter->resetTransform();
 | 
			
		||||
  if(devparms->math_fft_split == 0)
 | 
			
		||||
  {
 | 
			
		||||
    curve_w = curve_w_b - (bordersize * 2);
 | 
			
		||||
 | 
			
		||||
  painter->translate(bordersize, bordersize + curve_h + 15);
 | 
			
		||||
    curve_h = curve_h_b - (bordersize * 2);
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    curve_h = curve_h_b - (bordersize * 2);
 | 
			
		||||
 | 
			
		||||
  curve_w = curve_w_backup - (bordersize * 2);
 | 
			
		||||
    curve_h /= 3;
 | 
			
		||||
 | 
			
		||||
  curve_h = curve_h_backup - (bordersize * 2);
 | 
			
		||||
    painter->resetTransform();
 | 
			
		||||
 | 
			
		||||
  curve_h *= 0.64;
 | 
			
		||||
    painter->translate(bordersize, bordersize + curve_h + 15);
 | 
			
		||||
 | 
			
		||||
    curve_w = curve_w_b - (bordersize * 2);
 | 
			
		||||
 | 
			
		||||
    curve_h = curve_h_b - (bordersize * 2);
 | 
			
		||||
 | 
			
		||||
    curve_h *= 0.64;
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////// FFT: draw the rasters ///////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
  painter->setPen(RasterColor);
 | 
			
		||||
    painter->setPen(RasterColor);
 | 
			
		||||
 | 
			
		||||
  painter->drawRect (0, 0, curve_w - 1, curve_h - 1);
 | 
			
		||||
 | 
			
		||||
  if(devparms->displaygrid)
 | 
			
		||||
  {
 | 
			
		||||
    painter->setPen(QPen(QBrush(RasterColor, Qt::SolidPattern), tracewidth, Qt::DotLine, Qt::SquareCap, Qt::BevelJoin));
 | 
			
		||||
 | 
			
		||||
    if(devparms->displaygrid == 2)
 | 
			
		||||
    {
 | 
			
		||||
      step = (double)curve_w / (double)devparms->hordivisions;
 | 
			
		||||
 | 
			
		||||
      for(i=1; i<devparms->hordivisions; i++)
 | 
			
		||||
      {
 | 
			
		||||
        painter->drawLine(step * i, curve_h - 1, step * i, 0);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      step = curve_h / 8.0;
 | 
			
		||||
 | 
			
		||||
      for(i=1; i<8; i++)
 | 
			
		||||
      {
 | 
			
		||||
        painter->drawLine(0, step * i, curve_w - 1, step * i);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      painter->drawLine(curve_w / 2, curve_h - 1, curve_w / 2, 0);
 | 
			
		||||
 | 
			
		||||
      painter->drawLine(0, curve_h / 2, curve_w - 1, curve_h / 2);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  painter->setPen(RasterColor);
 | 
			
		||||
 | 
			
		||||
  step = (double)curve_w / (double)small_rulers;
 | 
			
		||||
 | 
			
		||||
  for(i=1; i<small_rulers; i++)
 | 
			
		||||
  {
 | 
			
		||||
    step2 = step * i;
 | 
			
		||||
    painter->drawRect (0, 0, curve_w - 1, curve_h - 1);
 | 
			
		||||
 | 
			
		||||
    if(devparms->displaygrid)
 | 
			
		||||
    {
 | 
			
		||||
      painter->drawLine(step2, curve_h / 2 + 2, step2, curve_h / 2 - 2);
 | 
			
		||||
      painter->setPen(QPen(QBrush(RasterColor, Qt::SolidPattern), tracewidth, Qt::DotLine, Qt::SquareCap, Qt::BevelJoin));
 | 
			
		||||
 | 
			
		||||
      if(devparms->displaygrid == 2)
 | 
			
		||||
      {
 | 
			
		||||
        step = (double)curve_w / (double)devparms->hordivisions;
 | 
			
		||||
 | 
			
		||||
        for(i=1; i<devparms->hordivisions; i++)
 | 
			
		||||
        {
 | 
			
		||||
          painter->drawLine(step * i, curve_h - 1, step * i, 0);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        step = curve_h / 8.0;
 | 
			
		||||
 | 
			
		||||
        for(i=1; i<8; i++)
 | 
			
		||||
        {
 | 
			
		||||
          painter->drawLine(0, step * i, curve_w - 1, step * i);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        painter->drawLine(curve_w / 2, curve_h - 1, curve_w / 2, 0);
 | 
			
		||||
 | 
			
		||||
        painter->drawLine(0, curve_h / 2, curve_w - 1, curve_h / 2);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(i % 5)
 | 
			
		||||
    painter->setPen(RasterColor);
 | 
			
		||||
 | 
			
		||||
    step = (double)curve_w / (double)small_rulers;
 | 
			
		||||
 | 
			
		||||
    for(i=1; i<small_rulers; i++)
 | 
			
		||||
    {
 | 
			
		||||
      painter->drawLine(step2, curve_h - 1, step2, curve_h - 5);
 | 
			
		||||
      step2 = step * i;
 | 
			
		||||
 | 
			
		||||
      painter->drawLine(step2, 0, step2, 4);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      painter->drawLine(step2, curve_h - 1, step2, curve_h - 9);
 | 
			
		||||
      if(devparms->displaygrid)
 | 
			
		||||
      {
 | 
			
		||||
        painter->drawLine(step2, curve_h / 2 + 2, step2, curve_h / 2 - 2);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      painter->drawLine(step2, 0, step2, 8);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
      if(i % 5)
 | 
			
		||||
      {
 | 
			
		||||
        painter->drawLine(step2, curve_h - 1, step2, curve_h - 5);
 | 
			
		||||
 | 
			
		||||
  step = curve_h / 40.0;
 | 
			
		||||
        painter->drawLine(step2, 0, step2, 4);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        painter->drawLine(step2, curve_h - 1, step2, curve_h - 9);
 | 
			
		||||
 | 
			
		||||
  for(i=1; i<40; i++)
 | 
			
		||||
  {
 | 
			
		||||
    step2 = step * i;
 | 
			
		||||
 | 
			
		||||
    if(devparms->displaygrid)
 | 
			
		||||
    {
 | 
			
		||||
      painter->drawLine(curve_w / 2 + 2, step2, curve_w / 2  - 2, step2);
 | 
			
		||||
        painter->drawLine(step2, 0, step2, 8);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(i % 5)
 | 
			
		||||
    {
 | 
			
		||||
      painter->drawLine(curve_w - 1, step2, curve_w - 5, step2);
 | 
			
		||||
    step = curve_h / 40.0;
 | 
			
		||||
 | 
			
		||||
      painter->drawLine(0, step2, 4, step2);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    for(i=1; i<40; i++)
 | 
			
		||||
    {
 | 
			
		||||
      painter->drawLine(curve_w - 1, step2, curve_w - 9, step2);
 | 
			
		||||
      step2 = step * i;
 | 
			
		||||
 | 
			
		||||
      painter->drawLine(0, step2, 8, step2);
 | 
			
		||||
      if(devparms->displaygrid)
 | 
			
		||||
      {
 | 
			
		||||
        painter->drawLine(curve_w / 2 + 2, step2, curve_w / 2  - 2, step2);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if(i % 5)
 | 
			
		||||
      {
 | 
			
		||||
        painter->drawLine(curve_w - 1, step2, curve_w - 5, step2);
 | 
			
		||||
 | 
			
		||||
        painter->drawLine(0, step2, 4, step2);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        painter->drawLine(curve_w - 1, step2, curve_w - 9, step2);
 | 
			
		||||
 | 
			
		||||
        painter->drawLine(0, step2, 8, step2);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -770,9 +724,11 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
 | 
			
		|||
 | 
			
		||||
    h_step /= 24.0;
 | 
			
		||||
 | 
			
		||||
    fft_v_sense = v_sense * 35;
 | 
			
		||||
    devparms->fft_voffset = 20;
 | 
			
		||||
 | 
			
		||||
    fft_v_offset = curve_h * 0.75;
 | 
			
		||||
    fft_v_sense = curve_h / -8.0;
 | 
			
		||||
 | 
			
		||||
    fft_v_offset = (curve_h / 2.0) - ((curve_h / 80.0) * devparms->fft_voffset);
 | 
			
		||||
 | 
			
		||||
    fft_h_offset = (curve_w / 2) - ((devparms->math_fft_hcenter / devparms->math_fft_hscale) * curve_w / devparms->hordivisions);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -808,16 +764,16 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
 | 
			
		|||
 | 
			
		||||
    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 ");
 | 
			
		||||
    strcat(str, "dBV/Div  Center ");
 | 
			
		||||
 | 
			
		||||
    convert_to_metric_suffix(str + strlen(str), devparms->math_fft_hcenter, 1);
 | 
			
		||||
 | 
			
		||||
    strcat(str, "Hz  ");
 | 
			
		||||
 | 
			
		||||
    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), 100.0 / devparms->timebasedelayscale, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -841,19 +797,6 @@ void SignalCurve::drawWidget(QPainter *painter, int curve_w, int curve_h)
 | 
			
		|||
 | 
			
		||||
    painter->drawText(15, 30, str);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
//   clk_end = clock();
 | 
			
		||||
//
 | 
			
		||||
//   cpu_time_used += ((double) (clk_end - clk_start)) / CLOCKS_PER_SEC;
 | 
			
		||||
//
 | 
			
		||||
//   scr_update_cntr++;
 | 
			
		||||
//
 | 
			
		||||
//   if(!(scr_update_cntr % 50))
 | 
			
		||||
//   {
 | 
			
		||||
//     printf("CPU time used: %f\n", cpu_time_used / 50);
 | 
			
		||||
//
 | 
			
		||||
//     cpu_time_used = 0;
 | 
			
		||||
//   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -149,6 +149,7 @@ private:
 | 
			
		|||
  void drawTopLabels(QPainter *);
 | 
			
		||||
  void paintLabel(QPainter *, int, int, int, int, const char *, QColor);
 | 
			
		||||
  void paintCounterLabel(QPainter *, int, int);
 | 
			
		||||
  void drawFFT(QPainter *, int, int);
 | 
			
		||||
 | 
			
		||||
  struct device_settings *devparms;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue