oksImpl.h

00001 #ifndef SCTAPI_OKS_IMPL_CONFIGURATION
00002 #define SCTAPI_OKS_IMPL_CONFIGURATION
00003 
00004 #include <list>
00005 #include <string>
00006 #include <stdexcept>
00007 
00008 #include <oks/class.h>
00009 #include <oks/object.h>
00010 #include <oks/kernel.h>
00011 
00012 #include "RodDaq/Sct/AbcdModule.h"
00013 
00014 #include "sctConf/configuration.h"
00015 
00019 /*  struct SlaveConfig { */
00020 /*    std::string emifFile; */
00021 /*    std::string ipramFile; */
00022 /*    std::string idramFile; */
00023 /*    std::string extFile; */
00024 /*  }; */
00025 
00029 /*  struct RodConfig { */
00030 /*    /// Is there a BOC? (Shouldn't be necessary) */
00031 /*    bool bocPresent; */
00032 /*    /// VME base address */
00033 /*    unsigned long baseAddress; */
00034 /*    /// VME map size */
00035 /*    unsigned long mapSize; */
00036 /*    /// Number of slaves */
00037 /*    long numSlaves; */
00038 /*    /// Slave file configuration */
00039 /*    SlaveConfig slaves[4]; */
00040 /*  }; */
00041 
00045 /*  struct TimConfig { */
00046 /*    /// VME base address */
00047 /*    unsigned long baseAddress; */
00048 /*    /// VME map size */
00049 /*    unsigned long mapSize; */
00050 /*  }; */
00051 
00059 /*  struct BOCChannelConfig { */
00060 /*    /// Laser current */
00061 /*    int current; */
00062 /*    /// BPM delay  */
00063 /*    int delay; */
00064 /*    /// BPM markspace */
00065 /*    int markSpace; */
00066 /*    /// Input threshold (stream 0) */
00067 /*    int threshold0; */
00068 /*    /// Strobe delay (stream 0) */
00069 /*    int delay0; */
00070 /*    /// Input threshold (stream 1) */
00071 /*    int threshold1; */
00072 /*    /// Strobe delay (stream 1) */
00073 /*    int delay1; */
00074 
00075 /*    /// Fibre used for tranimission */
00076 /*    int txFibre; */
00077 /*    /// Fibre used for reception of link 0 */
00078 /*    int rxFibre0; */
00079 /*    /// Fibre used for reception of link 1 */
00080 /*    int rxFibre1; */
00081 /*  }; */
00082 
00086 /*  class ConfigurationException : std::exception { */
00087 /*    std::string desc; */
00088 /*   public: */
00089 /*    /// Provide a description on construction */
00090 /*    ConfigurationException(const std::string &str) : desc(str) {} */
00091 /*    /// Override std::exception method */
00092 /*    virtual const char* what () const { return desc.c_str(); } */
00093 /*  }; */
00094 
00122 class OksImpl : public SctConfiguration::Configuration {
00123   OksImpl(const OksImpl &);
00124   OksImpl &operator=(const OksImpl &);
00125 public:
00129   OksImpl(bool readOnly = true);
00133   ~OksImpl();
00134 
00135   /************* Get physical configuration ****************/
00136 
00141   std::list<unsigned int> listPartitions();
00142 
00147   std::list<unsigned int> listCratesInPartition(unsigned int partition);
00148 
00153   std::list<unsigned int> listRodsInCrate(unsigned int partition, unsigned int crate);
00154 
00161   std::list<unsigned int> listMURSInRod(unsigned int partition, unsigned int crate, unsigned int rod);
00162 
00169   std::list<std::string> listModulesInMUR(unsigned int partition, unsigned int MUR);
00170 
00177   std::list<std::string> listRModulesInMUR(unsigned int partition, unsigned int MUR);
00178 
00184   std::list<std::string> listAllModules();
00185 
00189   std::list<std::string> listUnusedModules();
00190 
00191   /************** Get configurations *****************/
00192 
00198   ABCDModule getModuleConfig(const std::string module);
00199 
00205   SctConfiguration::RodConfig getRodConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00206 
00212   SctConfiguration::BOCChannelConfig getBOCConfig(unsigned int partition, unsigned int crate, unsigned int rod, 
00213                                                   unsigned int channel);
00214 
00220   char *getFibreMappings(unsigned int partition, unsigned int crate, unsigned int rod);
00221 
00227   SctConfiguration::TimConfig getTimConfig(unsigned int partition, unsigned int crate);
00228 
00234   void setFibreMapping(unsigned int partition, unsigned int crate, unsigned int rod, 
00235                        unsigned int channel, unsigned int tx, unsigned int rx0, unsigned int rx1);
00236 
00240   void printModuleConfig(const ABCDModule &conf);
00241 
00242   SctConfiguration::MURType getMURType(unsigned int MUR);
00243 
00244   /************** Change indexing schemes ****************/
00245 
00249   void translateToROD(unsigned int MUR, unsigned int module,
00250               unsigned int &partition, unsigned int &crate, 
00251               unsigned int &rod, unsigned int &channel);
00252  
00256   void translateToRROD(unsigned int MUR, unsigned int module,
00257                unsigned int &partition, unsigned int &crate, 
00258                unsigned int &rod, unsigned int &channel);
00259  
00260 
00264   void translateToSN(unsigned int MUR, unsigned int module,
00265                      std::string &sn);
00266 
00270   void translateToBarrel(unsigned int MUR, unsigned int module,
00271                          unsigned int &barrel, unsigned int &row, int &number);
00272 
00276   void translateToEndcap(unsigned int MUR, unsigned int module,
00277                          unsigned int &disk, unsigned int &ring, unsigned int &number);
00278 
00282   void translateToPowerSupply(unsigned int MUR, unsigned int module,
00283                               unsigned int &partition, 
00284                               unsigned int &crate, unsigned int &channel);
00285 
00289   void translateFromROD(unsigned int partition, unsigned int crate, 
00290                         unsigned int rod, unsigned int channel,
00291                         unsigned int &MUR, unsigned int &module);
00292 
00299   void translateFromRROD(unsigned int partition, unsigned int crate,
00300                          unsigned int rod, unsigned int channel,
00301                          unsigned int &MUR, unsigned int &module);
00302 
00306   void translateFromSN(const std::string sn,
00307                        unsigned int &MUR, unsigned int &module);
00308 
00312   void translateFromBarrel(unsigned int barrel, unsigned int row, int number,
00313                          unsigned int &MUR, unsigned int &module);
00314 
00318   void translateFromEndcap(unsigned int disk, unsigned int ring, unsigned int number,
00319                            unsigned int &MUR, unsigned int &module);
00320 
00324   void translateFromPowerSupply(unsigned int partition, 
00325                                 unsigned int crate, unsigned int channel, 
00326                                 unsigned int &MUR, unsigned int &module);
00327 
00328 
00329   /************** Change configuration ******************/
00330 
00336   void configureModuleFromStructure(const std::string module, const ABCDModule conf);
00337 
00343   void configureModuleFromFile(const std::string filename);
00344 
00353   void configureROD(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00354 
00363   void configureTIM(unsigned int partition, unsigned int crate, SctConfiguration::TimConfig conf);
00364 
00369   void clearAll();
00370 
00384   void namePartition(int partition, const std::string name);
00385 
00389   void createPartition(int partition);
00390 
00394   void createCrate(int partition, int crate);
00395 
00399   void createROD(int partition, int crate, int rod, SctConfiguration::RodConfig conf);
00400 
00404   void createMUR(int partition, int crate, int rod, int order, int number);
00405 
00409   void createModule(int MUR, int order, int RMUR, int rorder, string number, const ABCDModule &mConf);
00410 
00414   void configureBOCChannel(int MUR, int position, const SctConfiguration::BOCChannelConfig &bConf);
00415 
00419   void mapModuleMUR(int MUR, int order, int RMUR, int rorder, std::string number);
00420 
00424   void mapRODMUR(int partition, int crate, int rod, int order, int number);
00425 
00429   void mapBarrelMUR(int MUR, int barrel, int row, int position);
00430 
00437   void swapMURNames(int MUR1, int MUR2);
00438 
00442   void mapEndcapMUR(int MUR, int disk, int quadrant, int position);
00443 
00447   void mapPowerChannel(int MUR, int number, unsigned int partition, unsigned int crate, unsigned int channel);
00448 
00452   void modifyPowerParam(int MUR, int number, std::string name, float value);
00453 
00457   void modifyDefaultPowerParam(std::string name, float value);
00458 
00462   float getPowerParam(int MUR, int number, std::string name);
00463 
00467   void loadConfiguration(const std::string &filename);
00468 
00469   /************** Save configuration *********************/
00470 
00480   void saveConfiguration(std::string filename = "");
00481 
00487   void saveModuleConfiguration(const std::string modsn, const std::string filename);
00488 
00492   std::string getModuleConfigurationString(const std::string modsn, const ABCDModule config);
00493 
00497   void writePowerSupplyConfiguration(std::string filename);
00498 
00499  private:
00500 /*   /\** */
00501 /*      Parse the xml tree provided and return the module configuration */
00502 /*   *\/ */
00503 /*   const ABCDModule parseModuleConfig(xmlNodePtr node); */
00504 
00505 /*   /\** */
00506 /*      Replace the configuration in the given node with the data */
00507 /*      stored in the given configuration */
00508 /*   *\/ */
00509 /*   void replaceModuleConfig(xmlNodePtr node, ABCDModule conf, std::string name); */
00510 
00511  private:
00512   OksObject *getPartition(unsigned int p);
00513   OksObject *getCrate(unsigned int p, unsigned int c);
00514   OksObject *getRod(unsigned int p, unsigned int c, unsigned int r);
00515   OksObject *getMUR(unsigned int m);
00516   OksObject *getModule(unsigned short mur, unsigned char position);
00517 
00518   OksObject *getObjectFromRelationship(const OksObject *obj, const std::string rel);
00519   unsigned long getULongData(const OksObject *obj, const std::string attr);
00520   unsigned short getUShortData(const OksObject *obj, const std::string attr);
00521   unsigned char getUCharData(const OksObject *obj, const std::string attr);
00522   std::string getStringData(const OksObject *obj, const std::string attr);
00523 
00524   OksClass *partClass;
00525   OksClass *crateClass;
00526   OksClass *rodClass;
00527   OksClass *murClass;
00528   OksClass *moduleClass;
00529 
00530 /*    ConfdbConfiguration configuration; */
00531 
00532   OksKernel kernel;
00533 };
00534 #endif

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