crate.h

00001 #ifndef SCTAPI_CRATE
00002 #define SCTAPI_CRATE
00003 
00004 // Make sure all compilations have same SctApi structure!
00005 #include "config.h"
00006 #include "Sct/Addressing.h"
00007 
00008 #include <boost/shared_ptr.hpp>
00009 
00010 #include <vector>
00011 
00012 //other fwddecs 
00013 class MRSStream; // needed by Crate
00014 
00015 namespace SctPixelRod {
00016   class RodOutList;
00017   class RodModule;
00018   class TimModule;
00019   class VmeInterface;
00020 }
00021 
00022 namespace SctConfiguration {
00023   class Configuration;
00024   class BOCChannelConfig;
00025   class BOCGlobalConfig;
00026 }
00027 
00028 #include "SctApiFwd.h"
00029 
00030 namespace SctApi {
00031   class PrimListWrapper;
00032 
00036   class CrateException : public std::exception {
00037     std::string desc;
00038   public:
00040     CrateException(const std::string &str) throw() : desc(str) {}
00041 
00042     ~CrateException() throw() {}
00043 
00045     virtual const char* what () const throw() { return desc.c_str(); }
00046   };
00047 
00058 class Crate {
00059   // Don't use copy constructor or assignment operator
00060   Crate(const Crate&);
00061   Crate &operator=(const Crate&);
00062   const Sct::UCID m_ucid;
00063  public:
00065   Crate(const Sct::UCID & ucid) : m_ucid(ucid) {};
00066 
00068 
00071   virtual ~Crate() {};
00072   const Sct::UCID & ucid() const {
00073     return m_ucid;
00074   };
00075 
00076   /************** Interaction with Configuration **************/
00077 
00079 
00082   virtual int initialiseCrate() = 0;
00083 
00085 
00088   virtual int initialiseTim() = 0;
00089 
00091 
00095   virtual int initialiseRod(unsigned int rod) = 0;
00096 
00098 
00101   virtual int initialiseBOC(unsigned int rod) = 0;
00102 
00104 
00107   virtual int configureBOC(unsigned int rod) = 0;
00108 
00109   /*************** Primlists *********************/
00110 
00112 
00115   virtual int sendPrimList(unsigned int rod, boost::shared_ptr<PrimListWrapper> prim) = 0;
00116 
00118 
00121   virtual int sendPrimListAll(boost::shared_ptr<PrimListWrapper> prim) = 0;
00122 
00124 
00130   virtual int awaitResponse(unsigned int rod, int timeout) = 0;
00131 
00133 
00138   virtual int awaitResponseAll(int timeout) = 0;
00139 
00141 
00144   virtual boost::shared_ptr<SctPixelRod::RodOutList> getResponse(unsigned int rod) = 0;
00145 
00146   virtual void setMrsStream(MRSStream *stream) = 0;
00147 
00148   /***************** Messages ******************/
00149 
00151 
00158   virtual bool getRodMessage(unsigned int rod, char *buffer, unsigned long &length) = 0;
00159 
00160   /************** Misc read/writes *****************/
00161 
00163 
00166   virtual int mdspBlockRead(unsigned int rod, long dspStart, unsigned long *buffer, unsigned long numWords) = 0;
00167 
00169 
00172   virtual int slvBlockRead(unsigned int rod, long dspStart, unsigned long *buffer, unsigned long numWords, long slaveNumber) = 0;
00173 
00175 
00178   virtual int slvBlockWrite(unsigned int rod, long dspStart, unsigned long* buffer, unsigned long numWords, long dspNumber) = 0;
00179 
00181 
00184   virtual int mdspBlockWrite(unsigned int rod, long dspStart, unsigned long *buffer, unsigned long numWords) = 0;
00185 
00187 
00190   virtual unsigned long readRodStatusReg(unsigned int rod, long regNumber) = 0;
00191 
00192 
00194 
00197   virtual unsigned long readRodCommandReg(unsigned int rod, long regNumber) = 0;
00198 
00200 
00203   virtual unsigned long dspSingleRead(unsigned int rod, const unsigned long dspAddr, long dspNumber) = 0;
00204 
00206 
00209   virtual int dspSingleWrite(unsigned int rod, unsigned long dspAddr, unsigned long buffer, long dspNumber) = 0;
00210 
00212   virtual std::string status() = 0;
00213 
00214 
00215   virtual std::list<unsigned> getListOfRods() const = 0;
00216 
00218 
00224   enum PLControl {
00225     C_PL_STOP,
00226     C_PL_PAUSE,
00227     C_PL_RESUME,
00228     C_PL_CANCEL };
00229 
00231   virtual void primListControl(unsigned int rod, PLControl function) = 0;
00232 
00234   virtual void printBOCSetup(unsigned int rod) = 0;
00235 
00237   virtual std::vector<SctConfiguration::BOCChannelConfig> currentBOCSetup(unsigned int rod) = 0;
00238 
00240   virtual void printBOCRegisters(unsigned int rod) = 0;
00241 
00243   virtual SctConfiguration::BOCGlobalConfig currentBOCRegisters(unsigned int rod) = 0;
00244 
00246   virtual void saveBOCSetup(unsigned int rod, BankType bank) = 0;
00248   virtual void saveBOCRegisters(unsigned int rod, BankType bank) = 0;
00249 
00251   virtual void restoreBOCSetup(unsigned int rod, BankType bank) = 0;
00253   virtual void restoreBOCRegisters(unsigned int rod, BankType bank) = 0;
00254 
00256   virtual bool checkBOCLasersOn(unsigned int rod) = 0;
00257 
00259   virtual void enterBOCClockBy2Mode(unsigned int rod) = 0;
00260 
00262   virtual void leaveBOCClockBy2Mode(unsigned int rod) = 0;
00263 
00265   virtual std::vector<double> getBOCMonitorArray(unsigned int rod) = 0;
00266 
00268   virtual void modifyTIMParam(unsigned int type, unsigned int val) = 0;
00269 
00271 
00274   virtual void modifyBOCParam(unsigned int type, unsigned int val, bool raw) = 0;
00275 
00277 
00280   virtual void modifyBOCParam(unsigned int rod, unsigned int channel, unsigned int type, unsigned int val, bool raw) = 0;
00281 
00283   virtual void lasersOff() = 0;
00284 
00285   /* ******************* TIM Functions ***************************/
00286 
00288 
00292   virtual void timSetFrequency(double trigFreq, double rstFreq) = 0;
00293 
00295   virtual double timGetTriggerFrequency() = 0;
00296 
00298   virtual double timGetResetFrequency() = 0;
00299 
00301   virtual void freeTriggers() = 0;
00302 
00304   virtual void stopTriggers() = 0;
00305 
00307   virtual void timLoadSequence(const std::vector<unsigned>& seq) = 0;
00317   virtual unsigned long timRunSequence(long unsigned ntrigs, int random, bool external) = 0;
00318   
00320   virtual void timL1A() = 0;
00321 
00323   virtual void timCalL1A(int delay) = 0;
00324 
00325   virtual void timECR() = 0;
00326 
00327   virtual void timBCR() = 0;
00328 
00329   virtual void timFER() = 0;
00330 
00332   virtual unsigned long sendTimBurst(unsigned long count, int random, bool external) = 0;
00333 
00335   virtual void timVerbose() = 0;
00336 
00338   virtual void timRegLoad(int reg, UINT16 val) = 0;
00339 
00341   virtual UINT16 timRegRead(int reg) = 0;
00342 
00344   virtual bool slavePresent(int rod, int index) const = 0;
00345 
00347   virtual void slaveStarted(int rod, int slave) = 0;
00348 
00350   virtual bool RODPresent(int rod) const = 0;
00351 
00352   virtual long getRodSlot(int rod) const = 0;
00353 
00355   virtual int getRodRevision(int rod) const = 0;
00356 
00358   virtual void stopPolling() = 0;
00359 
00361   virtual void resumePolling() = 0;
00362   
00363   // get the RodModule object for a particular rod
00364   SctPixelRod::RodModule *getRod(unsigned int rod) const;
00365 };
00366 
00367 }  // End of namespace SctApi
00368 #endif

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