kopia lustrzana https://gitlab.com/Teuniz/DSRemote
				
				
				
			
		
			
				
	
	
		
			378 wiersze
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			378 wiersze
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
| /*
 | |
| ***************************************************************************
 | |
| *
 | |
| * Author: Teunis van Beelen
 | |
| *
 | |
| * Copyright (C) 2015 - 2025 Teunis van Beelen
 | |
| *
 | |
| * Email: teuniz@protonmail.com
 | |
| *
 | |
| ***************************************************************************
 | |
| *
 | |
| * This program 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 3 of the License, or
 | |
| * (at your option) any later version.
 | |
| *
 | |
| * This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
| *
 | |
| ***************************************************************************
 | |
| */
 | |
| 
 | |
| 
 | |
| #ifndef DSR_GLOBAL_H
 | |
| #define DSR_GLOBAL_H
 | |
| 
 | |
| #include <pthread.h>
 | |
| 
 | |
| #include "third_party/kiss_fft/kiss_fftr.h"
 | |
| 
 | |
| /*
 | |
|  * Please do NOT remove/change the following macro's.
 | |
|  * The scope of this software is GNU/Linux only.
 | |
|  * Please do NOT port it to other platforms/tools.
 | |
|  * Also, do NOT send me patches that make it possible
 | |
|  * to run this software on other operating systems.
 | |
|  * I mean it.
 | |
|  */
 | |
| #ifndef __linux__
 | |
| #error "OS must be Linux"
 | |
| #endif
 | |
| 
 | |
| #if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__
 | |
| #error "system byteorder must be little endian"
 | |
| #endif
 | |
| 
 | |
| #if __GNUC__ < 7
 | |
| #error "compiler must be GCC version >= 7"
 | |
| #endif
 | |
| 
 | |
| #if defined(_FORTIFY_SOURCE)
 | |
| #error "configuration error"
 | |
| #endif
 | |
| 
 | |
| 
 | |
| #define PROGRAM_NAME          "DSRemote"
 | |
| #define PROGRAM_VERSION       "0.43_2507041502"
 | |
| 
 | |
| #define MAX_PATHLEN            (1024)
 | |
| 
 | |
| #define MAX_CHNS                  (4)
 | |
| 
 | |
| #define ADJDIAL_TIMER_IVAL_1   (4000)
 | |
| #define ADJDIAL_TIMER_IVAL_2   (2000)
 | |
| 
 | |
| #define SCRN_SHOT_BMP_SZ    (1152054)
 | |
| 
 | |
| #define WAVFRM_MAX_BUFSZ  (1024 * 1024 * 2)
 | |
| 
 | |
| #define FFT_MAX_BUFSZ          (4096)
 | |
| 
 | |
| #define ADJ_DIAL_FUNC_NONE        (0)
 | |
| #define ADJ_DIAL_FUNC_HOLDOFF     (1)
 | |
| #define ADJ_DIAL_FUNC_ACQ_AVG     (2)
 | |
| 
 | |
| #define NAV_DIAL_FUNC_NONE        (0)
 | |
| #define NAV_DIAL_FUNC_HOLDOFF     (1)
 | |
| 
 | |
| #define LABEL_TIMER_IVAL       (1500)
 | |
| 
 | |
| #define LABEL_ACTIVE_NONE         (0)
 | |
| #define LABEL_ACTIVE_CHAN1        (1)
 | |
| #define LABEL_ACTIVE_CHAN2        (2)
 | |
| #define LABEL_ACTIVE_CHAN3        (3)
 | |
| #define LABEL_ACTIVE_CHAN4        (4)
 | |
| #define LABEL_ACTIVE_TRIG         (5)
 | |
| #define LABEL_ACTIVE_FFT          (6)
 | |
| 
 | |
| #define TMC_GDS_DELAY         (10000)
 | |
| 
 | |
| #define TMC_CMD_CUE_SZ         (1024)
 | |
| 
 | |
| #define TMC_THRD_RESULT_NONE      (0)
 | |
| #define TMC_THRD_RESULT_SCRN      (1)
 | |
| #define TMC_THRD_RESULT_CMD       (2)
 | |
| 
 | |
| #define TMC_THRD_JOB_NONE         (0)
 | |
| #define TMC_THRD_JOB_TRIGEDGELEV  (1)
 | |
| #define TMC_THRD_JOB_TIMDELAY     (2)
 | |
| #define TMC_THRD_JOB_FFTHZDIV     (3)
 | |
| 
 | |
| #define TMC_DIAL_TIMER_DELAY    (300)
 | |
| 
 | |
| #define DECODE_MODE_TAB_PAR       (0)
 | |
| #define DECODE_MODE_TAB_UART      (1)
 | |
| #define DECODE_MODE_TAB_SPI       (2)
 | |
| #define DECODE_MODE_TAB_I2C       (3)
 | |
| 
 | |
| #define DECODE_MODE_PAR           (0)
 | |
| #define DECODE_MODE_UART          (1)
 | |
| #define DECODE_MODE_SPI           (2)
 | |
| #define DECODE_MODE_I2C           (3)
 | |
| 
 | |
| #define DECODE_MAX_CHARS        (512)
 | |
| 
 | |
| #define TRIG_SRC_CHAN1            (0)
 | |
| #define TRIG_SRC_CHAN2            (1)
 | |
| #define TRIG_SRC_CHAN3            (2)
 | |
| #define TRIG_SRC_CHAN4            (3)
 | |
| #define TRIG_SRC_EXT              (4)
 | |
| #define TRIG_SRC_EXT5             (5)
 | |
| #define TRIG_SRC_ACL              (6)
 | |
| #define TRIG_SRC_LA_D0            (7)
 | |
| #define TRIG_SRC_LA_D1            (8)
 | |
| #define TRIG_SRC_LA_D2            (9)
 | |
| #define TRIG_SRC_LA_D3           (10)
 | |
| #define TRIG_SRC_LA_D4           (11)
 | |
| #define TRIG_SRC_LA_D5           (12)
 | |
| #define TRIG_SRC_LA_D6           (13)
 | |
| #define TRIG_SRC_LA_D7           (14)
 | |
| #define TRIG_SRC_LA_D8           (15)
 | |
| #define TRIG_SRC_LA_D9           (16)
 | |
| #define TRIG_SRC_LA_D10          (17)
 | |
| #define TRIG_SRC_LA_D11          (18)
 | |
| #define TRIG_SRC_LA_D12          (19)
 | |
| #define TRIG_SRC_LA_D13          (20)
 | |
| #define TRIG_SRC_LA_D14          (21)
 | |
| #define TRIG_SRC_LA_D15          (22)
 | |
| 
 | |
| #define MAX_TRIG_SRCS            (23)
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| struct waveform_preamble
 | |
| {
 | |
|   int format;
 | |
|   int type;
 | |
|   int points;
 | |
|   int count;
 | |
|   double xincrement[MAX_CHNS];
 | |
|   double xorigin[MAX_CHNS];
 | |
|   double xreference[MAX_CHNS];
 | |
|   double yincrement[MAX_CHNS];
 | |
|   double yorigin[MAX_CHNS];
 | |
|   int yreference[MAX_CHNS];
 | |
| };
 | |
| 
 | |
| 
 | |
| struct device_settings
 | |
| {
 | |
|   int connected;
 | |
|   int connectiontype;           // 0=USB, 1=LAN
 | |
|   char modelname[128];
 | |
|   char serialnr[128];
 | |
|   char softwvers[128];
 | |
|   int modelserie;               // 1=DS1000, 2=DS2000, etc.
 | |
|   int hordivisions;             // number of horizontal divisions, 12 or 14
 | |
|   int vertdivisions;            // number of vertical divisions, 8 or 10
 | |
|   int use_extra_vertdivisions;  // If 1: use 10 vertical divisions instead of 8, DS1000Z only
 | |
| 
 | |
|   char hostname[128];
 | |
| 
 | |
|   int screentimerival;
 | |
| 
 | |
|   int channel_cnt;              // Device has 2 or 4 channels
 | |
|   int bandwidth;                // Bandwidth in MHz
 | |
|   int la_channel_cnt;           // Device has 0 or 16 logic analyzer channels
 | |
| 
 | |
|   int chanbwlimit[MAX_CHNS];    // 20, 250 or 0MHz (off)
 | |
|   int chancoupling[MAX_CHNS];   // 0=GND, 1=DC, 2=AC
 | |
|   int chandisplay[MAX_CHNS];    // 0=off, 1=on
 | |
|   int chanimpedance[MAX_CHNS];  // 0=1MOhm, 1=50Ohm
 | |
|   int chaninvert[MAX_CHNS];     // 0=normal, 1=inverted
 | |
|   int chanunit[MAX_CHNS];       // 0=V, 1=W, 2=A, 3=U
 | |
|   char chanunitstr[4][2];
 | |
|   double chanoffset[MAX_CHNS];  // expressed in volts
 | |
|   double chanprobe[MAX_CHNS];   // Probe attenuation ratio e.g. 10:1
 | |
|   double chanscale[MAX_CHNS];
 | |
|   int chanvernier[MAX_CHNS];    // Vernier 1=on, 0=off (fine adjustment of vertical scale)
 | |
|   int activechannel;            // Last pressed channel button (used to know at which channel to apply scale change)
 | |
| 
 | |
|   double timebaseoffset;        // Main timebase offset in Sec
 | |
|                                 // MemDepth/SamplingRate to 1s (when TimeScale < 20ms)
 | |
|                                 // MemDepth/SamplingRate to 10xTimeScale (when TimeScale >=20ms)
 | |
|   double timebasescale;         // Main timebase scale in Sec/div, 500pSec to 50Sec
 | |
| 
 | |
|   int timebasedelayenable;      // 1=on, 0=off
 | |
|   double timebasedelayoffset;   //
 | |
|   double timebasedelayscale;    //  (1 x 50 / sample rate) x 1 / 40  in seconds
 | |
|   int timebasehrefmode;         // 0=center, 1=tpos, 2=user
 | |
|   int timebasehrefpos;
 | |
|   int timebasemode;             // 0=MAIN, 1=XY, 2=ROLL
 | |
|   int timebasevernier;          // Vernier 1=on, 0=off (fine adjustment of timebase)
 | |
|   int timebasexy1display;       // XY mode for channel 1 & 2,  1=on, 0=off
 | |
|   int timebasexy2display;       // XY mode for channel 3 & 4,  1=on, 0=off
 | |
| 
 | |
|   int triggercoupling;          // 0=AC, 1=DC, 2=LFReject, 3=HFReject
 | |
|   double triggeredgelevel[MAX_TRIG_SRCS]; // Trigger level
 | |
|   int triggeredgeslope;         // 0=POS, 1=NEG, 2= RFAL
 | |
|   int triggeredgesource;        // 0=chan1, 1=chan2, 2=chan3, 3=chan4, 4=ext, 5=ext5, 6=acl, 7=D0, 8=D1, ... ,21=D14, 22=D15
 | |
|   double triggerholdoff;        // min. is 16nSec or 100nSec depends on series
 | |
|   int triggermode;              // 0=edge, 1=pulse, 2=slope, 3=video, 4=pattern, 5=rs232, 6=i2c, 7=spi, 8=can, 9=usb,
 | |
|                                 // 10=wind, 11=runt, 12=duration, 13=delay, 14=timeout, 15=nedg, 16=shold
 | |
|   int triggerstatus;            // 0=td, 1=wait, 2=run, 3=auto, 4=fin, 5=stop
 | |
|   int triggersweep;             // 0=auto, 1=normal, 2=single
 | |
| 
 | |
|   int displaygrid;              // 0=none, 1=half, 2=full
 | |
|   int displaytype;              // 0=vectors, 1=dots
 | |
|   int displaygrading;           // 0=minimum, 1=0.1, 2=0.2, 5=0.5, 1=10, 2=20, 5=50, 10000=infinite
 | |
| 
 | |
|   double samplerate;            // Samplefrequency
 | |
|   int acquiretype;              // 0=normal, 1=average, 2=peak, 3=highres
 | |
|   int acquireaverages;          // 2, 4, 8, 16, 32, 64, etc. to 8192
 | |
|   int acquirememdepth;          // Number of waveform points that the oscilloscope can
 | |
|                                 // store in a single trigger sample. 0=AUTO
 | |
| 
 | |
|   int countersrc;               // 0=off, 1=ch1, 2=ch2, 3=ch3, 4=ch4
 | |
|   double counterfreq;           // Value of frequency counter
 | |
| 
 | |
|   int math_decode_display;      // 0=off, 1=on
 | |
|   int math_decode_mode;         // 0=par, 1=uart, 2=spi, 3=iic
 | |
|   int math_decode_format;       // 0=hex, 1=ascii, 2=dec, 3=bin, 4=line
 | |
|   int math_decode_pos;          // vertical position of the decode trace,
 | |
|                                 // the screen is divided into 400 parts vertically which
 | |
|                                 // are marked as 0 to 400 from top to bottom respectively
 | |
|                                 // the range of <pos> is from 50 to 350
 | |
|   double math_decode_threshold[MAX_CHNS];  // 0: threshold of decode channel 1 (SPI:MISO for modelserie 6)
 | |
|                                            // 1: threshold of decode channel 2 (SPI:MOSI for modelserie 6)
 | |
|                                            // 2: threshold of decode channel 3 (SPI:SCLK for modelserie 6)
 | |
|                                            // 3: threshold of decode channel 4 (SPI:SS for modelserie 6)
 | |
|                                            // (-4 x VerticalScale - VerticalOffset) to
 | |
|                                            // (4 x VerticalScale - VerticalOffset)
 | |
|   double math_decode_threshold_uart_tx;    // threshold of RS232:TX for modelserie 6
 | |
|   double math_decode_threshold_uart_rx;    // threshold of RS232:RX for modelserie 6
 | |
| 
 | |
|   int math_decode_threshold_auto;  // 0=off, 1=on
 | |
| 
 | |
|   int math_decode_spi_clk;      // channel - 1
 | |
|   int math_decode_spi_miso;     // channel (0=off)
 | |
|   int math_decode_spi_mosi;     // channel (0=off)
 | |
|   int math_decode_spi_cs;       // channel (0=off)
 | |
|   int math_decode_spi_select;   // select cs level, 0=low, 1=high
 | |
|   int math_decode_spi_mode;     // frame mode, 0=timeout, 1=cs (chip select)
 | |
|   double math_decode_spi_timeout;  // timeout
 | |
|   int math_decode_spi_pol;      // polarity of serial data line, 0=negative, 1=positive
 | |
|   int math_decode_spi_edge;     // edge, 0=falling edge of clock, 1=rising edge of clock
 | |
|   int math_decode_spi_end;      // endian, 0=lsb, 1=msb
 | |
|   int math_decode_spi_width;    // databits, 8-32
 | |
|   int math_decode_spi_mosi_nval;  // number of decoded characters
 | |
|   unsigned int math_decode_spi_mosi_val[DECODE_MAX_CHARS];  // array with decoded characters
 | |
|   int math_decode_spi_mosi_val_pos[DECODE_MAX_CHARS];  // array with position of the decoded characters
 | |
|   int math_decode_spi_mosi_val_pos_end[DECODE_MAX_CHARS];  // array with endposition of the decoded characters
 | |
|   int math_decode_spi_miso_nval;    // number of decoded characters
 | |
|   unsigned int math_decode_spi_miso_val[DECODE_MAX_CHARS];  // array with decoded characters
 | |
|   int math_decode_spi_miso_val_pos[DECODE_MAX_CHARS];  // array with position of the decoded characters
 | |
|   int math_decode_spi_miso_val_pos_end[DECODE_MAX_CHARS];  // array with endposition of the decoded characters
 | |
| 
 | |
|   int math_decode_uart_tx;      // channel (0=off)
 | |
|   int math_decode_uart_rx;      // channel (0=off)
 | |
|   int math_decode_uart_pol;     // polarity, 0=negative, 1=positive
 | |
|   int math_decode_uart_end;     // endian, 0=lsb, 1=msb
 | |
|   int math_decode_uart_baud;    // baudrate
 | |
|   int math_decode_uart_width;   // databits, 5-8
 | |
|   int math_decode_uart_stop;    // stopbits, 0=1, 1=1.5, 2=2
 | |
|   int math_decode_uart_par;     // parity, 0=none, 1=odd, 2=even
 | |
|   int math_decode_uart_tx_nval;    // number of decoded characters
 | |
|   unsigned char math_decode_uart_tx_val[DECODE_MAX_CHARS];  // array with decoded characters
 | |
|   int math_decode_uart_tx_val_pos[DECODE_MAX_CHARS];  // array with position of the decoded characters
 | |
|   int math_decode_uart_tx_err[DECODE_MAX_CHARS];  // array with protocol errors, non zero means an error
 | |
|   int math_decode_uart_rx_nval;    // number of decoded characters
 | |
|   unsigned char math_decode_uart_rx_val[DECODE_MAX_CHARS];  // array with decoded characters
 | |
|   int math_decode_uart_rx_val_pos[DECODE_MAX_CHARS];  // array with position of the decoded characters
 | |
|   int math_decode_uart_rx_err[DECODE_MAX_CHARS];  // array with protocol errors, non zero means an error
 | |
| 
 | |
|   char *screenshot_buf;
 | |
|   short *wavebuf[MAX_CHNS];
 | |
|   int wavebufsz;
 | |
|   double yinc[MAX_CHNS];
 | |
|   int yor[MAX_CHNS];
 | |
| 
 | |
|   double xorigin[MAX_CHNS];
 | |
| 
 | |
|   int screenshot_inv;           // 0=normal, 1=inverted colors
 | |
| 
 | |
|   int screenupdates_on;
 | |
| 
 | |
|   pthread_mutex_t mutexx;
 | |
| 
 | |
|   int thread_error_stat;
 | |
|   int thread_error_line;
 | |
|   int thread_result;
 | |
|   int thread_job;
 | |
|   double thread_value;
 | |
| 
 | |
|   struct waveform_preamble preamble;
 | |
| 
 | |
|   char cmd_cue[TMC_CMD_CUE_SZ][128];
 | |
|   char *cmd_cue_resp[TMC_CMD_CUE_SZ];
 | |
|   int cmd_cue_idx_in;
 | |
|   int cmd_cue_idx_out;
 | |
| 
 | |
|   int math_fft_src;             // 0=ch1, 1=ch2, 2=ch3, 3=ch4
 | |
|   int math_fft;                 // 0=off, 1=on
 | |
|   int math_fft_split;           // 0=off, 1=on
 | |
|   int math_fft_unit;            // 0=VRMS, 1=DB
 | |
|   double *fftbuf_in;
 | |
|   double *fftbuf_out;
 | |
|   int fftbufsz;
 | |
|   kiss_fftr_cfg k_cfg;
 | |
|   kiss_fft_cpx *kiss_fftbuf;
 | |
|   double math_fft_hscale;
 | |
|   double math_fft_hcenter;
 | |
|   double fft_vscale;
 | |
|   double fft_voffset;
 | |
| 
 | |
|   int current_screen_sf;
 | |
| 
 | |
|   int show_fps;
 | |
| 
 | |
|   int font_size;
 | |
| 
 | |
|   // below here is use for the wave inspector
 | |
|   int wave_mem_view_sample_start;
 | |
|   int wave_mem_view_enabled;
 | |
| 
 | |
|   double viewer_center_position;
 | |
| 
 | |
|   int func_wrec_enable;
 | |
|   int func_wrec_fend;
 | |
|   int func_wrec_fmax;
 | |
|   double func_wrec_fintval;
 | |
|   int func_wrec_prompt;
 | |
|   int func_wrec_operate;
 | |
|   int func_wplay_fstart;
 | |
|   int func_wplay_fend;
 | |
|   int func_wplay_fmax;
 | |
|   double func_wplay_fintval;
 | |
|   int func_wplay_mode;
 | |
|   int func_wplay_dir;
 | |
|   int func_wplay_operate;
 | |
|   int func_wplay_fcur;
 | |
|   int func_has_record;
 | |
| };
 | |
| 
 | |
| 
 | |
| 
 | |
| #endif
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |