00001 #ifndef SCTAPI_CRATE
00002 #define SCTAPI_CRATE
00003
00004
00005 #include "config.h"
00006 #include "Sct/Addressing.h"
00007
00008 #include <boost/shared_ptr.hpp>
00009
00010 #include <vector>
00011
00012
00013 class MRSStream;
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
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
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
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
00149
00151
00158 virtual bool getRodMessage(unsigned int rod, char *buffer, unsigned long &length) = 0;
00159
00160
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
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
00364 SctPixelRod::RodModule *getRod(unsigned int rod) const;
00365 };
00366
00367 }
00368 #endif