171 lines
5.7 KiB
C++
171 lines
5.7 KiB
C++
/*
|
|
* Osci.h
|
|
* DRS oscilloscope header file
|
|
* $Id: Osci.h 21496 2014-09-26 14:55:49Z ritt $
|
|
*/
|
|
|
|
typedef struct {
|
|
unsigned short Year;
|
|
unsigned short Month;
|
|
unsigned short Day;
|
|
unsigned short Hour;
|
|
unsigned short Minute;
|
|
unsigned short Second;
|
|
unsigned short Milliseconds;
|
|
} TIMESTAMP;
|
|
|
|
#define TM_AUTO 0
|
|
#define TM_NORMAL 1
|
|
|
|
/*------------------------------------------------------------------*/
|
|
|
|
class Osci;
|
|
|
|
class OsciThread : public wxThread
|
|
{
|
|
public:
|
|
OsciThread(Osci *o);
|
|
bool IsIdle();
|
|
void *Entry();
|
|
void ResetSW();
|
|
void Enable(bool flag);
|
|
void StopThread();
|
|
bool IsFinished() { return m_finished; }
|
|
|
|
private:
|
|
Osci *m_osci;
|
|
wxStopWatch m_sw1, m_sw2;
|
|
bool m_enabled;
|
|
bool m_active;
|
|
bool m_finished;
|
|
bool m_stopThread;
|
|
};
|
|
|
|
/*------------------------------------------------------------------*/
|
|
|
|
class Osci
|
|
{
|
|
public:
|
|
Osci(double samplingSpeed = 5, bool mthread = true);
|
|
~Osci();
|
|
void StopThread(void);
|
|
int ScanBoards();
|
|
int GetNumberOfBoards() { return m_drs->GetNumberOfBoards(); }
|
|
DRSBoard *GetBoard(int i) { return m_drs->GetBoard(i); }
|
|
DRSBoard *GetCurrentBoard() { return m_drs->GetBoard(m_board); }
|
|
int GetCurrentBoardIndex() { return m_board; }
|
|
DRS *GetDRS() { return m_drs; }
|
|
bool GetError(char *str, int size) { return m_drs->GetError(str, size); }
|
|
void CheckTimingCalibration();
|
|
void SelectBoard(int board);
|
|
void SelectChannel(int firstChannel, int chnSection);
|
|
void SetMultiBoard(bool multi);
|
|
bool IsMultiBoard() { return m_multiBoard; }
|
|
void SetRunning(bool flag);
|
|
void Enable(bool flag);
|
|
bool IsRunning() { return m_running; }
|
|
void SetSingle(bool flag);
|
|
bool IsSingle() { return m_single; }
|
|
void SetArmed(bool flag) { m_armed = flag; }
|
|
bool IsArmed() { return m_armed; }
|
|
bool IsIdle();
|
|
int GetWaveformDepth(int channel);
|
|
double GetWaveformLength() { return m_waveDepth / GetSamplingSpeed(); }
|
|
float *GetWaveform(int b, int i) { return (float *)m_waveform[b][i]; }
|
|
float *GetTime(int board, int channel);
|
|
int GetChip() { return m_chip; }
|
|
void SetSamplingSpeed(double freq);
|
|
double GetSamplingSpeed();
|
|
double GetTrueSamplingSpeed();
|
|
double GetMinSamplingSpeed();
|
|
double GetMaxSamplingSpeed();
|
|
bool IsTCalibrated();
|
|
bool IsVCalibrated();
|
|
bool GetTimeCalibration(int chip, int channel, int mode, float *time, bool force=false);
|
|
void Start();
|
|
void Stop();
|
|
void DrainEvents();
|
|
void SingleTrigger();
|
|
void ReadWaveforms();
|
|
int SaveWaveforms(MXML_WRITER *, int);
|
|
bool HasTriggered();
|
|
bool HasNewEvent();
|
|
void SetTriggerLevel(double level);
|
|
void SetTriggerPolarity(bool negative);
|
|
void SetIndividualTriggerLevel(int i, double level);
|
|
void SetTriggerDelay(int delay);
|
|
int GetTriggerDelay();
|
|
double GetTriggerDelayNs();
|
|
void SetTriggerMode(int mode) { m_trgMode[m_board] = mode; }
|
|
int GetTriggerMode() { return m_trgMode[m_board]; }
|
|
int GetTriggerConfig() { return m_trgConfig[m_board]; }
|
|
void SetTriggerConfig(int tc);
|
|
void SetRefclk(int board, bool flag);
|
|
void SetChnOn(int board, int chn, bool flag);
|
|
void SetClkOn(bool flag);
|
|
void SetEventSerial(int serial) { m_evSerial = serial; }
|
|
void SetCalibVoltage(bool flag, double voltage);
|
|
void SetInputRange(double center);
|
|
double GetInputRange() { return m_inputRange; }
|
|
double GetCalibratedInputRange();
|
|
unsigned int GetScaler(int channel);
|
|
void SetCalibrated(bool flag) { m_calibrated = flag; }
|
|
void SetCalibrated2(bool flag) { m_calibrated2 = flag; }
|
|
void SetTCalOn(bool flag) { m_tcalon = flag; }
|
|
bool IsTCalOn() { return m_tcalon; }
|
|
void SetRotated(bool flag) { m_rotated = flag; }
|
|
void SetSpikeRemoval(bool flag) { m_spikeRemoval = flag; }
|
|
void CorrectTriggerPoint(double t);
|
|
void RemoveSpikes(int board, bool cascading);
|
|
int CheckWaveforms();
|
|
bool SkipDisplay(void) { return m_skipDisplay; }
|
|
int GetChnSection(void) { return m_chnSection; }
|
|
char *GetDebugMsg(void) { return m_debugMsg; }
|
|
|
|
private:
|
|
DRS *m_drs;
|
|
OsciThread *m_thread;
|
|
bool m_running;
|
|
bool m_single;
|
|
bool m_armed;
|
|
double m_samplingSpeed;
|
|
int m_nBoards;
|
|
float m_waveform[MAX_N_BOARDS][4][2048];
|
|
float m_refwaveform[2048];
|
|
unsigned char m_wavebuffer[MAX_N_BOARDS][9*1024*2];
|
|
float m_time[MAX_N_BOARDS][4][2048];
|
|
float m_timeClk[MAX_N_BOARDS][1024];
|
|
int m_triggerCell[MAX_N_BOARDS];
|
|
int m_writeSR[MAX_N_BOARDS];
|
|
int m_boardSerial[MAX_N_BOARDS];
|
|
int m_waveDepth;
|
|
int m_trgMode[MAX_N_BOARDS];
|
|
int m_trgConfig[MAX_N_BOARDS];
|
|
bool m_trgNegative[MAX_N_BOARDS];
|
|
int m_trgDelay;
|
|
double m_trgLevel[4];
|
|
bool m_chnOn[MAX_N_BOARDS][4];
|
|
bool m_clkOn;
|
|
bool m_refClk[MAX_N_BOARDS];
|
|
bool m_calibOn;
|
|
int m_evSerial;
|
|
TIMESTAMP m_evTimestamp;
|
|
bool m_calibrated;
|
|
bool m_calibrated2;
|
|
bool m_tcalon;
|
|
bool m_rotated;
|
|
int m_nDRS;
|
|
int m_board;
|
|
int m_chip;
|
|
int m_chnOffset;
|
|
int m_chnSection;
|
|
bool m_spikeRemoval;
|
|
double m_inputRange;
|
|
bool m_skipDisplay;
|
|
bool m_multiBoard;
|
|
char m_debugMsg[256];
|
|
};
|
|
|
|
/*------------------------------------------------------------------*/
|
|
|