Main Page   Class Hierarchy   Compound List   File List   Compound Members  

CAENcard.h

00001 #ifndef CAENCARD_H
00002 #define CAENCARD_H
00003 
00004 #include <stdio.h>
00005 #include <sys/types.h>
00006 #include <sys/stat.h>
00007 #include <sys/mman.h>
00008 #include <errno.h>
00009 #include <fcntl.h>
00010 #include <unistd.h>
00011 #include <signal.h>
00012 #include <sys/ioctl.h>
00013 
00014 #ifndef VMEHB_IOCTL_H
00015 #include <vmehb_ioctl.h>
00016 #endif
00017 
00018 #ifndef SPECTRODAQ_H
00019 #include <spectrodaq.h>
00020 #endif
00021 
00022 //the number of cards in a VME crate
00023 #define VME_CRATE_SIZE  21
00024 
00025 //define the operating modes of the card object
00026 #define CAEN_MODE_UNINIT 0
00027 #define CAEN_MODE_GEO24  1
00028 #define CAEN_MODE_A32D16 2
00029 #define CAEN_MODE_MCST   4
00030 #define CAEN_MODE_CBLT   8
00031 
00032 //define the drivers used (different Address Modifiers are used in each)
00033 //am = 0x2f
00034 #define CAEN_GEO24       "/dev/vmegeo24"
00035 //am = 0x0d
00036 #define CAEN_A32D16      "/dev/vme32d16"
00037 //the next two are only used in CAENchain.cpp
00038 //am = 0x09
00039 #define CAEN_MCST        "/dev/vmemca32"
00040 //am = 0x0b
00041 #define CAEN_CBLT        "/dev/vmecba32"
00042 
00043 //will be used to create a 64k mmap for the card
00044 #define CAEN_CARD_MMAP_LEN 0x00010000
00045 
00046 //Constants used to determine the type of data being returned from the card
00047 #define CAEN_DATUM_TYPE    0x07000000
00048 #define CAEN_HEADER        0x02000000
00049 #define CAEN_DATA          0x00000000
00050 #define CAEN_FOOTER        0x04000000
00051 #define CAEN_INVALID       0x06000000
00052 
00078 class CAENcard {
00080   friend class CAENchain;
00082   friend bool operator< (const CAENcard&, const CAENcard&);
00083 
00084   protected:
00086 
00091     int slot;
00092 
00094 
00100     struct CAENcrate{
00101       volatile unsigned short int *mbuf;  
00102       unsigned int status;  
00103       int refCount;  
00104       int fd;  
00105     };
00106 
00108 
00115     static CAENcrate crate[VME_CRATE_SIZE + 1];
00116 
00118     int slotInit(int slotNum, int crateNum);
00119 
00121     void destruct();
00122 
00123 /*************************begin public section*********************************/
00124   public:
00125 
00127     CAENcard(int slotNum = 0, int crateNum = 0);
00128 
00130     CAENcard(const CAENcard& card);
00131 
00133     CAENcard& operator=(const CAENcard& card);
00134 
00136     ~CAENcard();
00137 
00139     int cardType();
00140 
00142     void setCrate(int crateNum);
00143 
00145     int getCrate();
00146 
00148     void setThreshold(int ch, int threshold);
00149 
00151     int setThresholdVoltage(int ch, double voltage);
00152 
00154     void keepUnderThresholdData();
00156     void discardUnderThresholdData();
00157 
00159     void keepOverflowData();
00161     void discardOverflowData();
00162 
00164     int keepInvalidData();
00166     int discardInvalidData();
00167 
00169     int commonStart();
00171     int commonStop();
00172 
00174     int setRange(int range);
00176     int setPedestalCurrent(int ped);
00177 
00179     void cardOff();
00181     void cardOn();
00182 
00184     void channelOff(int ch);
00186     void channelOn(int ch);
00187 
00189     void resetEventCounter();
00190 
00192     void clearData();
00193 
00195     void reset();
00196 
00198     int dataPresent();
00199 
00201     int readEvent(void* buf);
00203     int readEvent(DAQWordBuffer& wbuf, int offset);
00205     int readEvent(DAQWordBufferPtr& wp);
00207     int readEvent(DAQDWordBuffer& dwbuf, int offset);
00209     int readEvent(DAQDWordBufferPtr& dwp);
00210 };
00211 
00212 #endif

Generated at Mon Dec 17 12:47:38 2001 by doxygen1.2.9.1 written by Dimitri van Heesch, © 1997-2001