00001 #ifndef SCTAPI_CRATE
00002 #define SCTAPI_CRATE
00003
00004
00005 #include "config.h"
00006
00007 #include <boost/shared_ptr.hpp>
00008
00009
00010 class MRSStream;
00011
00012 namespace SctPixelRod {
00013 class RodOutList;
00014 class RodModule;
00015 class TimModule;
00016 class VmeInterface;
00017 }
00018
00019 namespace SctConfiguration {
00020 class Configuration;
00021 class BOCChannelConfig;
00022 class BOCGlobalConfig;
00023 }
00024
00025 #include "SctApiFwd.h"
00026
00027 namespace SctApi {
00028 class PrimListWrapper;
00029
00033 class CrateException : public std::exception {
00034 std::string desc;
00035 public:
00037 CrateException(const std::string &str) throw() : desc(str) {}
00038
00039 ~CrateException() throw() {}
00040
00042 virtual const char* what () const throw() { return desc.c_str(); }
00043 };
00044
00055 class Crate {
00056
00057 Crate(const Crate&);
00058 Crate &operator=(const Crate&);
00059 public:
00061 Crate() {};
00062
00064
00067 virtual ~Crate() {};
00068
00069
00070
00072
00075 virtual int initialiseCrate() = 0;
00076
00078
00081 virtual int initialiseTim() = 0;
00082
00084
00088 virtual int initialiseRod(unsigned int rod) = 0;
00089
00091
00094 virtual int initialiseBOC(unsigned int rod) = 0;
00095
00097
00100 virtual int configureBOC(unsigned int rod) = 0;
00101
00102
00103
00105
00108 virtual int sendPrimList(unsigned int rod, boost::shared_ptr<PrimListWrapper> prim) = 0;
00109
00111
00114 virtual int sendPrimListAll(boost::shared_ptr<PrimListWrapper> prim) = 0;
00115
00117
00123 virtual int awaitResponse(unsigned int rod, int timeout) = 0;
00124
00126
00131 virtual int awaitResponseAll(int timeout) = 0;
00132
00134
00137 virtual boost::shared_ptr<SctPixelRod::RodOutList> getResponse(unsigned int rod) = 0;
00138
00139 virtual void setMrsStream(MRSStream *stream) = 0;
00140
00141
00142
00144
00151 virtual bool getRodMessage(unsigned int rod, char *buffer, unsigned long &length) = 0;
00152
00153
00154
00156
00159 virtual int mdspBlockRead(unsigned int rod, long dspStart, unsigned long *buffer, unsigned long numWords) = 0;
00160
00162
00165 virtual int slvBlockRead(unsigned int rod, long dspStart, unsigned long *buffer, unsigned long numWords, long slaveNumber) = 0;
00166
00168
00171 virtual int slvBlockWrite(unsigned int rod, long dspStart, unsigned long* buffer, unsigned long numWords, long dspNumber) = 0;
00172
00174
00177 virtual int mdspBlockWrite(unsigned int rod, long dspStart, unsigned long *buffer, unsigned long numWords) = 0;
00178
00180
00183 virtual unsigned long readRodStatusReg(unsigned int rod, long regNumber) = 0;
00184
00185
00187
00190 virtual unsigned long readRodCommandReg(unsigned int rod, long regNumber) = 0;
00191
00193
00196 virtual unsigned long dspSingleRead(unsigned int rod, const unsigned long dspAddr, long dspNumber) = 0;
00197
00199
00202 virtual int dspSingleWrite(unsigned int rod, unsigned long dspAddr, unsigned long buffer, long dspNumber) = 0;
00203
00205 virtual void status() = 0;
00206
00207
00208 virtual std::list<unsigned> getListOfRods() const = 0;
00209
00211
00217 enum PLControl {
00218 C_PL_STOP,
00219 C_PL_PAUSE,
00220 C_PL_RESUME,
00221 C_PL_CANCEL };
00222
00224 virtual void primListControl(unsigned int rod, PLControl function) = 0;
00225
00227 virtual void printBOCSetup(unsigned int rod) = 0;
00228
00230 virtual std::vector<SctConfiguration::BOCChannelConfig> currentBOCSetup(unsigned int rod) = 0;
00231
00233 virtual void printBOCRegisters(unsigned int rod) = 0;
00234
00236 virtual SctConfiguration::BOCGlobalConfig currentBOCRegisters(unsigned int rod) = 0;
00237
00239 virtual void saveBOCSetup(unsigned int rod, BankType bank) = 0;
00241 virtual void saveBOCRegisters(unsigned int rod, BankType bank) = 0;
00242
00244 virtual void restoreBOCSetup(unsigned int rod, BankType bank) = 0;
00246 virtual void restoreBOCRegisters(unsigned int rod, BankType bank) = 0;
00247
00249 virtual bool checkBOCLasersOn(unsigned int rod) = 0;
00250
00252 virtual void enterBOCClockBy2Mode(unsigned int rod) = 0;
00253
00255 virtual void leaveBOCClockBy2Mode(unsigned int rod) = 0;
00256
00258 virtual std::vector<double> getBOCMonitorArray(unsigned int rod) = 0;
00259
00261
00264 virtual void modifyBOCParam(unsigned int type, unsigned int val, bool raw) = 0;
00265
00267
00270 virtual void modifyBOCParam(unsigned int rod, unsigned int channel, unsigned int type, unsigned int val, bool raw) = 0;
00271
00273 virtual void lasersOff() = 0;
00274
00275
00276
00278
00282 virtual void timSetFrequency(double trigFreq, double rstFreq) = 0;
00283
00285 virtual void freeTriggers() = 0;
00286
00288 virtual void stopTriggers() = 0;
00289
00291 virtual void timL1A() = 0;
00292
00294 virtual void timCalL1A(int delay) = 0;
00295
00296 virtual void timECR() = 0;
00297
00298 virtual void timBCR() = 0;
00299
00300 virtual void timFER() = 0;
00301
00303 virtual void sendTimBurst(int count) = 0;
00304
00306 virtual void timVerbose() = 0;
00307
00309 virtual void timRegLoad(int reg, UINT16 val) = 0;
00310
00312 virtual UINT16 timRegRead(int reg) = 0;
00313
00315 virtual bool slavePresent(int rod, int index) const = 0;
00316
00318 virtual void slaveStarted(int rod, int slave) = 0;
00319
00321 virtual bool RODPresent(int rod) const = 0;
00322
00323 virtual long getRodSlot(int rod) const = 0;
00324
00326 virtual int getRodRevision(int rod) const = 0;
00327
00329 virtual void stopPolling() = 0;
00330
00332 virtual void resumePolling() = 0;
00333 };
00334
00335 }
00336 #endif