utility.h

00001 #ifndef SCTAPI_UTILITY_H
00002 #define SCTAPI_UTILITY_H
00003 
00004 #include <iostream>
00005 #include <boost/shared_array.hpp>
00006 
00007 #include "SctApiFwd.h"
00008 
00009 #include "processor.h"
00010 #include "registerIndices.h"
00011 #include <list>
00012 
00013 namespace SctApi {
00014   namespace Utility {
00015     inline UINT32 EfbErrorMask(UINT32 efb, UINT32 link){
00016 #ifdef EFB_ERROR_MASK
00017       return EFB_ERROR_MASK(efb, link);
00018 #elif (defined(ERROR_MASK))
00019       return ERROR_MASK(efb, link)
00020 #else
00021 #error "Can't work out how to find an error mask - cant compile"
00022 #endif
00023     }
00024 
00025     inline void getpcrc(UINT32 mid, unsigned int &partition, unsigned int &crate, unsigned int &rod, unsigned &channel) 
00026     {
00027       partition = (mid & 0xff000000) >> 24;
00028       crate = (mid & 0xff0000) >> 16;
00029       rod = (mid & 0xff00) >> 8;
00030       channel = (mid & 0xff) >> 0;
00031     }
00032 
00033     inline UINT32 packpcrc(unsigned int &partition, unsigned int &crate, unsigned int &rod, unsigned &channel)
00034     {
00035       UINT32 mid = 0;
00036       mid |= (partition & 0xff) << 24;
00037       mid |= (crate & 0xff) << 16;
00038       mid |= (rod & 0xff) << 8;
00039       mid |= (channel & 0xff) << 0;
00040       return mid;
00041     }
00042 
00043     inline void printHex(UINT32 num, int width) {
00044       std::cout << "0x";
00045       char saveFill = std::cout.fill('0');
00046       std::cout.width(width);
00047       std::cout.setf(std::ios::right);
00048       std::cout << std::hex << num << std::dec;
00049       std::cout.fill(saveFill);
00050     }
00051 
00052     void printMemoryBlock(std::ostream &os, unsigned long *mem, unsigned long words, int wordsPerLine, int level = 0);
00053 
00054     int translateBank(BankType bank);
00055 
00056     UINT32 translateApiBanksToRodCfgBitSet(std::list<BankType> banks);
00057 
00059     unsigned translateConfigType(ConfigType cfg);
00060 
00062     unsigned translateConfigTypeForSendPrimitive(ConfigType cfg);
00063 
00065     unsigned translateChip(unsigned chip);
00066 
00069     UINT32 translateConfigTypeBitset(UINT32 api_bits, bool verbose=false);
00070 
00076     UINT32 getSetableConfigType(UINT32 cfgType, bool verbose=false);
00077 
00078     class MemoryBlock {
00079       unsigned int words;
00080       boost::shared_array<unsigned long> buffer;
00081 
00082     public:
00083       MemoryBlock() : words(0), buffer(0) {}
00084       MemoryBlock(unsigned int size, unsigned long *pointer) : words(size), buffer(pointer) {}
00085 
00086       operator bool() { return buffer; }
00087 
00088       unsigned int size() { return words; } 
00089 
00090       unsigned long operator[] (unsigned int i) {return buffer[i]; }
00091 
00092       unsigned long *address() {return buffer.get(); }
00093     };
00094   }
00095 }
00096 
00097 #endif

Generated on Mon Feb 6 14:01:37 2006 for SCT DAQ/DCS Software - C++ by  doxygen 1.4.6