• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

include/base/Board.h (r4864/r4162)

Go to the documentation of this file.
00001 #ifndef BASE_BOARD_H
00002 #define BASE_BOARD_H
00003 
00004 #include "base/OperList.h"
00005 
00006 #include <string>
00007 
00008 #include <iostream>
00009 #include <map>
00010 #include <list>
00011 
00012 namespace base {
00013 
00014   class BoardFactory;
00015 
00016   enum ClientRole {
00017      roleNone      = 0,            
00018      roleObserver  = 1,           
00019      roleControl   = 2,           
00020      roleDAQ       = 3            
00021    };
00022 
00023   extern const char* roleToString(ClientRole role);
00024   extern ClientRole defineClientRole(const char* name,
00025                                      ClientRole dflt = roleObserver);
00026 
00027   enum EFrontendKinds {
00028      kind_nXYTER = 1,  // normal nXYTER
00029      kind_oldFEET = 2, // old GET4, keep for historical reasons
00030      kind_FEET = 3,    // new GET4 v1.0,
00031      kind_newNX = 4,   // new readout for nXYTER with SysCore3
00032      kind_SPADIC = 5   // future SPADIC v1 firmware
00033   };
00034 
00035   enum EBackendKinds {
00036      kind_Optic    = 1,  // normal Optic readout - CBMNet v1
00037      kind_FX20     = 2,
00038      kind_FX40     = 3,
00039      kind_FX60     = 4,
00040      kind_newOptic = 5   // new optic readout - CBMNet v2
00041   };
00042 
00043 
00044   enum ETransportKinds {
00045      kind_UDP = 0,   // Ethernet for SysCore2
00046      kind_ABB = 1,   // Optic via AVNet
00047      kind_File = 2,  // LMD file
00048      kind_USB = 3    // USB to SysCore3
00049   };
00050 
00051   enum BasicAddresses {
00052      addr_HardwareType    = 0x00,
00053      addr_HardwareVersion = 0x04,
00054      addr_BoardId         = 0x10
00055   };
00056 
00057 
00059    class Board {
00060       friend class BoardFactory;
00061 
00062       protected:
00063 
00064          typedef std::map<std::string,uint32_t> mapn2a_t;
00065          typedef std::map<uint32_t,std::string> mapa2n_t;
00066 
00067          mapn2a_t fMapName2Addr;
00068          mapa2n_t fMapAddr2Name;
00069 
00070          BoardFactory*  fBrdFactory; 
00071          double         fDefaultTimeout;    
00072          int            fVerbosity;         
00073          int            fOperTrace;         
00074          ClientRole     fRole;              
00075          uint32_t       fBrdNumber;         
00076 
00077 
00078 
00079          Board();
00080          virtual ~Board();
00081 
00082          void traceOper(OperList& lst,  int rc);
00083 
00084          void setRole(ClientRole role) { fRole = role; }
00085 
00086          uint32_t initBoard(const char* name, uint32_t minversion);
00087 
00088       public:
00089 
00091 
00095          enum operErr {
00096            kOperSuccess    = 0,             
00097            kOperAddrErr    = 2,             
00098            kOperValueErr   = 3,             
00099            kOperStateErr   = 4,             
00100            kOperNetworkErr = 6,             
00101            kHostError      = 8,             
00102            kOperVerifyErr  = 20,            
00103            kOperBusErr     = 21            
00104          };
00105 
00106          enum addrErr {
00107             kAddrError = 0xffffffff         
00108          };
00109 
00111 
00117          void setDefaultTimeout(double tmout = 2.) { fDefaultTimeout = tmout>0 ? tmout : 1.; }
00118 
00120          double getDefaultTimeout() const { return fDefaultTimeout; }
00121 
00123          void setVerbosity(int lvl = 0) { fVerbosity = lvl; }
00125          int getVerbosity() const { return fVerbosity; }
00126 
00128          ClientRole getRole() const { return fRole; }
00129 
00131          void Debug(int lvl, const char *fmt, ...);
00132 
00133 
00135 
00166          void setOperTrace(int lvl = 1) { fOperTrace = lvl; }
00167 
00169          int getOperTrace() const { return fOperTrace; }
00170 
00171 
00173 
00192          virtual int operGen(OperList& lst, double tmout = 0.) = 0;
00193 
00195          virtual int operGen(bool* isput,
00196                              uint32_t* addr,
00197                              uint32_t* value,
00198                              int num,
00199                              double tmout = 0.);
00200 
00202          virtual unsigned GetBoardId() const { return 0; }
00203 
00204          int put(uint32_t addr, uint32_t value, double tmout = 0.);
00205          int get(uint32_t addr, uint32_t& value, double tmout = 0.);
00206 
00207          int operPP(uint32_t addr0, uint32_t  val0p,
00208                     uint32_t addr1, uint32_t  val1p,
00209                     double tmout = 0.);
00210          int operPG(uint32_t addr0, uint32_t  val0p,
00211                     uint32_t addr1, uint32_t& val1g,
00212                     double tmout = 0.);
00213          int operPPP(uint32_t addr0, uint32_t  val0p,
00214                      uint32_t addr1, uint32_t  val1p,
00215                      uint32_t addr2, uint32_t  val2p,
00216                      double tmout = 0.);
00217          int operGGG(uint32_t addr0, uint32_t&  val0p,
00218                      uint32_t addr1, uint32_t&  val1p,
00219                      uint32_t addr2, uint32_t&  val2p,
00220                      double tmout = 0.);
00221          int operPPPP(uint32_t addr0, uint32_t  val0p,
00222                       uint32_t addr1, uint32_t  val1p,
00223                       uint32_t addr2, uint32_t  val2p,
00224                       uint32_t addr3, uint32_t  val3p,
00225                       double tmout = 0.);
00226 
00228 
00234          static int operErrCode(int rc)
00235             { return rc & 0xff; }
00236 
00238 
00244          static int operErrIndex(int rc)
00245             { return (rc>>8) & 0xffffff; }
00246 
00248 
00258          static int operErrBuild(int code, int index)
00259            { return (code & 0xff) | ((index & 0xffffff)<<8); }
00260 
00262 
00269          static int operErrBuildInc(int rc, int inc)
00270            { return operErrBuild(rc,  operErrIndex(rc) + inc); }
00271 
00272          static std::string operErrToString(int rc);
00273 
00274          static const char* operErrCodeName(int rc);
00275 
00276 
00278          uint32_t findRegAddressByName(const char* name);
00279          const char* findRegNameByAddress(uint32_t addr);
00280          void printRegAddressMap(std::ostream& os, bool byname=false);
00281          void addRegAddrMapping(const char* name, uint32_t addr);
00282          void fillRegAddrNames(std::list<std::string>& lst);
00283 
00284 
00286 
00289          virtual int getTransportKind() const = 0;
00290 
00292 
00296          bool isFile() const { return getTransportKind() == base::kind_File; }
00297 
00299          bool isOptic() const { return getTransportKind() == base::kind_ABB; }
00300 
00302          bool isUSB() const { return getTransportKind() == base::kind_USB; }
00303 
00305          virtual bool restartBoard() { return false; }
00306 
00308          virtual bool is_SPI_I2C() const { return false; }
00309 
00311          virtual int setToDefault() { return 0; }
00312 
00313 
00315          virtual uint32_t getHardwareType();
00316 
00318          virtual uint32_t getHardwareVersion();
00319 
00320 
00322          virtual uint32_t getFrontendKind() { return getHardwareType() >> 16; }
00323 
00325          virtual uint32_t getBackendKind() { return getHardwareType() & 0xffff; }
00326 
00327 
00329          uint32_t boardNumber() const { return fBrdNumber; }
00330 
00332          uint32_t getBoardNumber();
00333 
00335          void setBoardNumber(uint32_t num);
00336 
00338          virtual int invokeDLM(unsigned num, double tmout = 0.) { return 0; }
00339 
00340          // DAQ methods
00341 
00342 
00344 
00355          virtual bool startDaq() = 0;
00356 
00358 
00363          virtual bool suspendDaq() = 0;
00364 
00366 
00370          virtual bool stopDaq() = 0;
00371 
00372 
00373 
00375 
00384          virtual bool getNextBuffer(void* &buf, unsigned& len, double tmout = 1.) = 0;
00385 
00387 
00391          virtual int getMsgFormat() const = 0;
00392 
00394 
00400          virtual void setFlushTimeout(double tmout) {}
00401 
00402 
00403 
00404          static Board* Connect(const char* url, ClientRole role = roleNone);
00405          static bool Close(Board* brd);
00406 
00407          static const char* versionToString(uint32_t ver);
00408 
00409    };
00410 
00411    class BoardFactory {
00412 
00413       protected:
00414 
00415          enum { MaxNumFactories = 10 };
00416          static BoardFactory* gArr[MaxNumFactories];
00417 
00418          BoardFactory();
00419          virtual ~BoardFactory();
00420 
00421       public:
00422 
00425          virtual bool IsFactoryFor(const char* url) { return false; }
00426 
00427          virtual void ShowDebug(int lvl, const char* msg);
00428 
00429          virtual Board* DoConnect(const char* name, base::ClientRole role) = 0;
00430          virtual bool DoClose(Board* brd) = 0;
00431 
00432          static Board* CreateBoard(const char* url, ClientRole role = roleNone);
00433          static bool DestroyBoard(base::Board* brd);
00434    };
00435 
00436 }
00437 
00438 
00439 #endif

Generated on Tue Dec 10 2013 04:52:22 for ROCsoft by  doxygen 1.7.1