QNI628XDiffDigitizer.hh

00001 
00002 /*
00003  * APOLLO: A complete DAQ and Online Data Analysis Framework for Cuore 
00004  * M.P. created 16/4/4
00005  * 
00006  * $Id: QNI628XDiffDigitizer.hh 408 2006-11-12 14:58:37Z didomiz $
00007  * 
00008  * Class QNI628XDiffDigitizer: National Instruments NI628X base implementation
00009  * (do not use this class for unipolar readout)
00010  * use QNI6281DiffDigitizer for 8 differential channels 
00011  * use QNI6284DiffDigitizer for 16 differential channels 
00012  *
00013  */
00014 
00015 #ifndef __QNI628XDIFFDIGITIZER_HH_
00016 #define __QNI628XDIFFDIGITIZER_HH_
00017 
00018 #include "QCuore.hh"
00019 #include "QDigitizer.hh"
00020 
00021 // debug
00022 #include <fstream>
00023 #ifdef __NI_HARDWARE__
00024 #include <NIDAQmx.h> // NI Libraries
00025 #endif
00026 
00027 class QNI628XDiffDigitizer : public QDigitizer {
00028 public:
00029 
00030    // empty ctor
00031    QNI628XDiffDigitizer() : QDigitizer(0,0,0,0,"NI628X-DIFF") {}
00032    
00033    // ctor
00034    QNI628XDiffDigitizer(QCrate*       c, 
00035                         int           slot,
00036                         unsigned long base,
00037                         int           nch, 
00038                         std::string   n);
00039    
00040    // dtor
00041    virtual ~QNI628XDiffDigitizer();
00042    
00043    // register analog channel
00044    virtual void RegisterChannel(int lg, int n, bool SaveFile);
00045 
00046    // register digital channel
00047    virtual void RegisterDigitalChannel(int lg, bool SaveFile);
00048 
00049    // set board status to "Ready to Acquire"
00050    virtual void SetStatusReady();
00051 
00052    // set board status to "Running"
00053    virtual void SetStatusRunning(bool);
00054 
00055    // read data and copy into given buffer for active all channels
00056    virtual int GetData();
00057    
00058    // dump read data;
00059    virtual void Dump() const;
00060 
00061    // select clock source
00062    virtual bool SetClockSource(QDigitizer::QClockSource_t source);
00063    
00064    // wait for external trigger signal to start acquisition
00065    virtual bool WaitForStartSignal(const char* const signalName);
00066 
00067    // get string containing start signal name
00068    virtual void GetStartSignal(char* signalName);
00069 
00070    virtual bool SetMuLineStatus(bool status);
00071 
00072 protected:
00073    
00074    // set lp filter status -- active if status==1
00075    inline void SetFilterStatus(bool status) {fFilterStatus = status;}
00076    
00077    // set sampling rate
00078    inline void SetSamplingRate(unsigned long rate) {fSamplingRate = rate;}
00079 
00080    inline void SetADCRange(int range) { fAdcRange = range; }
00081 
00082    // load settings from db
00083    void LoadSettings();
00084    
00085    // clear task -- called by destructor
00086    void ClearTask();
00087    
00088    // NI errors handler 
00089    void HandleNIError(int errCode, int line) const;
00090 
00091 
00092 #ifdef __NI_HARDWARE__
00093    TaskHandle fTaskHandle;
00094    TaskHandle fDigTaskHandle;
00095 #endif
00096   
00097   bool fIsReady;
00098   bool fIsRunning;
00099   bool fFilterStatus;
00100   unsigned long fSamplingRate;
00101   int fAdcRange;
00102   unsigned int fLastCounterVal;
00103 
00104   QDigitizer::QClockSource_t fClockSource;
00105   bool fWaitForStartSignal;
00106 
00107    int fBoardSlot;
00108    int fCrateId;
00109 
00110   std::string fStartSignalName;
00111    std::string fDeviceName;
00112    
00113   long *fData;               // pointer to buffer containing analog read data
00114   unsigned int fBufSize;     // size of buffer containing analog read data
00115   unsigned long *fDigData;   // pointer to buffer containing digital read data
00116   unsigned int fDigBufSize;  // size of buffer containing digital read data
00117   
00118    std::map<int,int> fChannelPosition;    
00120    std::map<int,std::string> fNIChannelName; 
00122 };
00123 
00124 #endif

Generated on Tue Nov 16 10:49:55 2010 for CUORE Software by  doxygen 1.5.6