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
00023 #define VME_CRATE_SIZE 21
00024
00025
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
00033
00034 #define CAEN_GEO24 "/dev/vmegeo24"
00035
00036 #define CAEN_A32D16 "/dev/vme32d16"
00037
00038
00039 #define CAEN_MCST "/dev/vmemca32"
00040
00041 #define CAEN_CBLT "/dev/vmecba32"
00042
00043
00044 #define CAEN_CARD_MMAP_LEN 0x00010000
00045
00046
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
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