www.pudn.com > qtdso-0.3.1.rar > simulator.h
//====================================================================== // File: simulator.h // Author: Matthias Toussaint // Created: Sat Jul 6 21:02:10 CEST 2002 //---------------------------------------------------------------------- // Permission to use, copy, modify, and distribute this software and its // documentation for any purpose and without fee is hereby granted, // provided that below copyright notice appear in all copies and that // both that copyright notice and this permission notice appear in // supporting documentation. // // This file is provided AS IS with no warranties of any kind. The // author shall have no liability with respect to the infringement of // copyrights, trade secrets or any patents by this file or any part // thereof. In no event will the author be liable for any lost revenue // or profits or other special, indirect and consequential damages. //---------------------------------------------------------------------- // (c) 2000-2002 Matthias Toussaint //====================================================================== #ifndef SIMULATOR_HH #define SIMULATOR_HH #include#include #include class Simulator : public QObject, public Dso { Q_OBJECT public: enum Waveform { Sine = 0, Square, Sawtooth }; Simulator(); virtual ~Simulator(); void run(); void setFrequency( int, float ); void setVpp( int, float ); virtual bool connectToHardware() { return true; } /// Timebase in us virtual void setTimeBase( Dso::TimeBase ); /// volts/div in mv virtual void setVoltsDiv( int, Dso::VoltsDiv ); virtual int triggerBits() const { return 0xff; } virtual int numChannel() const { return 2; } virtual bool hasDcOffset() const { return false; } virtual bool hasTimeBase( Dso::TimeBase ) const; virtual bool hasVoltsDiv( Dso::VoltsDiv ) const; virtual bool hasExternalTrigger() const { return false; } virtual bool hasCouplingSwitch() const { return false; } virtual bool hasFastAcq() const { return false; } virtual bool needsSinXInterpol() const { return false; } virtual bool hasEquivalentSampling() const { return false; } virtual bool hasTriggerStabilization() const { return false; } virtual int step( Dso::TimeBase ) const { return -5; } public slots: void waveformChangedSLOT( unsigned, Simulator::Waveform ); void frequencyChangedSLOT( unsigned, float ); void vppChangedSLOT( unsigned, float ); void noiseToggledSLOT( unsigned, bool ); void jitterToggledSLOT( unsigned, bool ); void phaseJitterToggledSLOT( unsigned, bool ); void symetryChangedSLOT( unsigned, int ); protected: float m_freq[2]; Waveform m_waveform[2]; bool m_addNoise[2]; bool m_addJitter[2]; bool m_addPhaseJitter[2]; float m_vPp[2]; float m_vScale[2]; float m_threshold[2]; int m_cnt; unsigned *m_ringBuffer[2]; int m_ringBufferPointer; float m_halfValue; float m_sineTable[16384]; float m_rectTable[16384]; float m_sawtoothTable[16384]; unsigned m_counter[2]; unsigned m_counterStep[2][2]; float m_dutyCycle[2]; void setupSimulator(); unsigned sample( int ); bool raisingTrigger() const; bool fallingTrigger() const; float noise( int ) const; unsigned clamp( float ) const; }; inline float Simulator::noise( int channel ) const { return (m_addNoise[channel] ? ((float)random()/(float)RAND_MAX*10.-5.) : 0.); // ((float)random()/(float)RAND_MAX-0.5) : 0.); } inline unsigned Simulator::clamp( float value ) const { return (unsigned)qRound( QMIN( (float)m_maxValue, QMAX( value, 0. ) ) ); } #endif // SIMULATOR_HH