00001 #ifndef FURESOURCE_H 00002 #define FURESOURCE_H 1 00003 00004 00005 #include "EventFilter/ResourceBroker/interface/FUTypes.h" 00006 #include "EventFilter/ShmBuffer/interface/FUShmRawCell.h" 00007 #include "EventFilter/Utilities/interface/Exception.h" 00008 00009 #include "log4cplus/logger.h" 00010 #include "toolbox/mem/Reference.h" 00011 00012 #include <vector> 00013 00014 00015 namespace evf { 00016 00017 class FUResource 00018 { 00019 public: 00020 // 00021 // construction/destruction 00022 // 00023 FUResource(UInt_t fuResourceId,log4cplus::Logger logger); 00024 virtual ~FUResource(); 00025 00026 00027 // 00028 // member functions 00029 // 00030 void allocate(FUShmRawCell* shmCell); 00031 void release(); 00032 00033 void process(MemRef_t* bufRef); 00034 void processDataBlock(MemRef_t* bufRef) throw (evf::Exception); 00035 void checkDataBlockPayload(MemRef_t* bufRef) throw (evf::Exception); 00036 void appendBlockToSuperFrag(MemRef_t* bufRef); 00037 00038 void superFragSize() throw (evf::Exception); 00039 void fillSuperFragPayload() throw (evf::Exception); 00040 void findFEDs() throw (evf::Exception); 00041 00042 void releaseSuperFrag(); 00043 00044 static 00045 void doFedIdCheck(bool doFedIdCheck) { doFedIdCheck_=doFedIdCheck; } 00046 static 00047 void useEvmBoard(bool useEvmBoard) { useEvmBoard_ =useEvmBoard; } 00048 void doCrcCheck(bool doCrcCheck) { doCrcCheck_ =doCrcCheck; } 00049 00050 bool crcBeingChecked() { return doCrcCheck_; } 00051 00052 bool fatalError() const { return fatalError_; } 00053 bool isAllocated() const { return 0!=shmCell_; } 00054 bool isComplete() const; 00055 00056 UInt_t fuResourceId() const { return fuResourceId_; } 00057 UInt_t buResourceId() const { return buResourceId_; } 00058 UInt_t evtNumber() const { return evtNumber_; } 00059 00060 UInt_t nbSent() const { return nbSent_; } 00061 void incNbSent() { nbSent_++; } 00062 00063 UInt_t nbErrors(bool reset=true); 00064 UInt_t nbCrcErrors(bool reset=true); 00065 UInt_t nbBytes(bool reset=true); 00066 00067 evf::FUShmRawCell* shmCell() { return shmCell_; } 00068 00069 00070 00071 private: 00072 // 00073 // member data 00074 // 00075 log4cplus::Logger log_; 00076 00077 static 00078 bool doFedIdCheck_; 00079 static 00080 bool useEvmBoard_; 00081 bool doCrcCheck_; 00082 bool fatalError_; 00083 00084 UInt_t fuResourceId_; 00085 UInt_t buResourceId_; 00086 UInt_t evtNumber_; 00087 00088 MemRef_t* superFragHead_; 00089 MemRef_t* superFragTail_; 00090 00091 UInt_t eventPayloadSize_; 00092 UInt_t nFedMax_; 00093 UInt_t nSuperFragMax_; 00094 00095 UInt_t iBlock_; 00096 UInt_t nBlock_; 00097 UInt_t iSuperFrag_; 00098 UInt_t nSuperFrag_; 00099 00100 UInt_t nbSent_; 00101 00102 UInt_t nbErrors_; 00103 UInt_t nbCrcErrors_; 00104 UInt_t nbBytes_; 00105 00106 UInt_t fedSize_[1024]; 00107 UInt_t superFragSize_; 00108 UInt_t eventSize_; 00109 00110 evf::FUShmRawCell* shmCell_; 00111 00112 00113 static unsigned int gtpDaqId_; 00114 static unsigned int gtpEvmId_; 00115 static unsigned int gtpeId_; 00116 00117 }; 00118 00119 // 00120 // typedefs 00121 // 00122 typedef std::vector<FUResource*> FUResourceVec_t; 00123 00124 00125 } // namespace evf 00126 00127 00128 // 00129 // implementation of inline functions 00130 // 00131 inline 00132 bool evf::FUResource::isComplete() const 00133 { 00134 return (nBlock_&&nSuperFrag_&&(iSuperFrag_==nSuperFrag_)&&(iBlock_==nBlock_)); 00135 } 00136 00137 00138 #endif