configXMLImpl.h

00001 #ifndef SCTAPI_CONFIGURATIONXMLIMPL
00002 #define SCTAPI_CONFIGURATIONXMLIMPL
00003 
00004 #include <utility>
00005 #include <vector>
00006 #include <libxml/tree.h>
00007 #include <libxml/xpath.h>
00008 
00009 #include <is/infodictionary.h>
00010 #include <boost/thread.hpp>
00011 
00012 #include "log.h"
00013 #include "configuration.h"
00014 
00015 #include "timings.h"
00016 
00019 class ConfigurationXMLImpl : public SctConfiguration::Configuration {
00020   ConfigurationXMLImpl(const ConfigurationXMLImpl &);
00021   ConfigurationXMLImpl &operator=(const ConfigurationXMLImpl &);
00022 
00023   static ConfigurationXMLImpl *m_config;
00024 
00025   xmlDocPtr document;
00026   xmlXPathContextPtr xpathContext;
00027 
00028   Log log;
00029 
00030   std::string lastFilename;
00031 
00032   ISInfoDictionary *is_dict;
00033   bool useIS;
00034   bool useMRS;
00035 
00036   Timings timings;
00037 
00038 public:
00043   ConfigurationXMLImpl();
00044 
00048   virtual ~ConfigurationXMLImpl();
00049 
00050   /************* Get physical configuration ****************/
00051 
00056   std::list<unsigned int> listPartitions();
00057 
00062   std::list<unsigned int> listCratesInPartition(unsigned int partition);
00063 
00064   bool isDummyCrate(unsigned int partition, unsigned int crate);
00065 
00070   std::list<unsigned int> listRodsInCrate(unsigned int partition, unsigned int crate);
00071 
00078   std::list<unsigned int> listMURSInRod(unsigned int partition, unsigned int crate, unsigned int rod);
00079 
00086   std::list<std::string> listModulesInMUR(unsigned int partition, unsigned int MUR);
00087 
00094   std::list<std::string> listRModulesInMUR(unsigned int partition, unsigned int MUR);
00095 
00101   std::list<std::string> listAllModules();
00102 
00106   std::list<std::string> listUnusedModules();
00107 
00108   /************** Get configurations *****************/
00109 
00115   ABCDModule getModuleConfig(const std::string module);
00116 
00120   short getModuleGroup(const std::string module);
00121 
00125   void setModuleGroup(const std::string module, short group);
00126 
00130   unsigned int getModuleErrorMask(unsigned int partition, unsigned int crate, unsigned int rod,
00131                                   unsigned int channel, unsigned int link);
00132 
00136   void setModuleErrorMask(unsigned int partition, unsigned int crate, unsigned int rod,
00137                           unsigned int channel, unsigned int link, unsigned int mask);
00138 
00142   void setDefaultModuleErrorMask(unsigned int mask);
00143 
00149   SctConfiguration::RodConfig getRodConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00150 
00156   SctConfiguration::SlaveConfig getDefaultSlaveConfig(char type);
00157 
00163   SctConfiguration::BOCChannelConfig getBOCConfig(unsigned int partition, unsigned int crate, unsigned int rod, 
00164                                 unsigned int channel);
00165 
00166   SctConfiguration::BOCGlobalConfig getBOCGlobalConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00167 
00173   unsigned char *getFibreMappings(unsigned int partition, unsigned int crate, unsigned int rod);
00174 
00180   SctConfiguration::TimConfig getTimConfig(unsigned int partition, unsigned int crate);
00181 
00187   void setFibreMapping(unsigned int partition, unsigned int crate, unsigned int rod, 
00188                        unsigned int channel, unsigned int tx, unsigned int rx0, unsigned int rx1);
00189 
00193   std::string printModuleConfig(const ABCDModule &conf);
00194 
00195   SctConfiguration::MURType getMURType(unsigned int MUR);
00196 
00197   unsigned int getFreeMurId();
00198 
00199   /************** Change indexing schemes ****************/
00200 
00204   void translateToROD(unsigned int MUR, unsigned int module,
00205               unsigned int &partition, unsigned int &crate, 
00206               unsigned int &rod, unsigned int &channel);
00207  
00214   void translateToRROD(unsigned int MUR, unsigned int module,
00215                unsigned int &partition, unsigned int &crate, 
00216                unsigned int &rod, unsigned int &channel);
00217  
00221   void translateToSN(unsigned int MUR, unsigned int module,
00222                      std::string &sn);
00223 
00227   void translateToRMUR(unsigned int MUR, unsigned int module,
00228                        unsigned int &RMUR, unsigned int &rmodule);
00229 
00233   void translateToBarrel(unsigned int MUR, unsigned int module,
00234                          unsigned int &barrel, unsigned int &row, int &number);
00235 
00239   void translateToEndcap(unsigned int MUR, unsigned int module,
00240                          int &disk, unsigned int &ring, unsigned int &number);
00241 
00245   void translateToPowerSupply(unsigned int MUR, unsigned int module,
00246                               unsigned int &partition, 
00247                               unsigned int &crate, unsigned int &channel);
00248 
00252   void translateFromROD(unsigned int partition, unsigned int crate, 
00253                         unsigned int rod, unsigned int channel,
00254                         unsigned int &MUR, unsigned int &module);
00255 
00262   void translateFromRROD(unsigned int partition, unsigned int crate,
00263                          unsigned int rod, unsigned int channel,
00264                          unsigned int &MUR, unsigned int &module);
00268   void translateFromSN(const std::string sn,
00269                        unsigned int &MUR, unsigned int &module);
00270 
00274   void translateFromRMUR(unsigned int RMUR, unsigned int rmodule,
00275                          unsigned int &MUR, unsigned int &module);
00276 
00280   void translateFromBarrel(unsigned int barrel, unsigned int row, int number,
00281                            unsigned int &MUR, unsigned int &module);
00282 
00286   void translateFromEndcap(int disk, unsigned int ring, unsigned int number,
00287                            unsigned int &MUR, unsigned int &module);
00288 
00292   void translateFromPowerSupply(unsigned int partition, 
00293                                 unsigned int crate, unsigned int channel, 
00294                                 unsigned int &MUR, unsigned int &module);
00295 
00296 
00297   /************** Change configuration ******************/
00298 
00304   void configureModuleFromStructure(const std::string module, const ABCDModule conf);
00305 
00311   void configureModuleFromFile(const std::string filename);
00312 
00321   void configureROD(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00322 
00331   void configureTIM(unsigned int partition, unsigned int crate, SctConfiguration::TimConfig conf);
00332 
00336   void configureBOC(unsigned int partition, unsigned int crate, unsigned int rod, const SctConfiguration::BOCGlobalConfig &conf);
00337 
00342   void clearAll();
00343 
00357   void namePartition(unsigned int partition, const std::string name);
00358 
00359  public:
00363 /*   void setBOCConfig(int partition, int crate, int rod, int channel, const BOCChannelConfig &conf); */
00364   
00368   void configureBOCChannel(unsigned int MUR, unsigned int position, const SctConfiguration::BOCChannelConfig &conf);
00369 
00373   void mapModuleMUR(unsigned int MUR, unsigned int order, unsigned int RMUR, unsigned int rorder, std::string number);
00374 
00378   void unmapModuleMUR(unsigned int MUR, unsigned int order);
00379 
00383   void mapRODMUR(unsigned int partition, unsigned int crate, unsigned int rod, unsigned int order, unsigned int number);
00384 
00388   void unmapRODMUR(unsigned int number);
00389 
00393   void mapBarrelMUR(unsigned int MUR, unsigned int barrel, unsigned int row, int position);
00394 
00398   void unmapBarrelMUR(unsigned int MUR);
00399 
00403   void getMapMURROD(unsigned int MUR, unsigned int &partition, unsigned int &crate, unsigned int &rod, unsigned int &order);
00404 
00408   void getMapRODMUR(unsigned int partition, unsigned int crate, unsigned int rod, unsigned int order, unsigned int &MUR);
00409 
00410   /*
00411     Get mapping of MUR to physical structure
00412   */
00413   void getMapMURPhysical(unsigned int MUR, SctConfiguration::MURType &type, int &plane, int &section, int &position);
00414 
00418   void mapEndcapMUR(unsigned int MUR, int disk, unsigned int quadrant, unsigned int position);
00419  
00423   void unmapEndcapMUR(unsigned int MUR);
00424 
00431   void swapMURNames(unsigned int MUR1, unsigned int MUR2);
00432 
00436   void mapPowerChannel(unsigned int MUR, unsigned int number, unsigned int partition, unsigned int crate, unsigned int channel);
00437 
00441   void unmapPowerChannel(unsigned int MUR, unsigned int number);
00442 
00446   void modifyDefaultPowerParam(std::string state, std::string name, std::string type, float value);
00447 
00451   void modifyHVCardParam(unsigned int crate, unsigned int card,
00452                          std::string name, std::string type, float value);
00453 
00457   void modifyLVCardParam(unsigned int crate, unsigned int card,
00458                          std::string name, std::string type, float value);
00459 
00463   void modifyPowerParam(unsigned int MUR, unsigned int number,
00464                          std::string state, std::string name, std::string type, float value);
00465 
00469   void modifyPowerParamCC(unsigned int crate, unsigned int channel,
00470           std::string state, std::string name, std::string type, float value);
00471 
00475   float getDefaultPowerParam(std::string state, std::string name, std::string type);
00476 
00480   float getHVCardParam(unsigned int crate, unsigned int card, std::string name, std::string type);
00481 
00485   float getLVCardParam(unsigned int crate, unsigned int card, std::string name, std::string type);
00486 
00490   float getPowerParam(unsigned int MUR, unsigned int number, std::string state, std::string name, std::string type);
00491 
00495   float getPowerParamCC(unsigned int crate, unsigned int channel, std::string state, std::string name, std::string type);
00496 
00500   std::list<std::string> listDefaultPowerParams();
00501 
00505   float getCratePowerParam(unsigned int crate, std::string name);
00506 
00507   std::list<std::string> listDCSChannelParams();
00508 
00509   std::list<std::string> listDCSCardParams();
00510 
00511   std::list<std::string> listDCSCrateParams();
00512 
00516   void useISForChanges(bool valid = true);
00517 
00521   void useMRSForMessages(bool valid = true);
00522 
00526   void loadConfiguration(const std::string &filename);
00527 
00531   std::string getConfigurationFileName();
00532 
00533   /************** Save configuration *********************/
00534 
00544   void saveConfiguration(const std::string filename = "");
00545 
00551   void saveModuleConfiguration(const std::string modsn, const std::string filename);
00552 
00556   std::string getModuleConfigurationString(const std::string modsn, const ABCDModule config);
00557 
00561   void writePowerSupplyConfiguration(std::string filename);
00562 
00563  protected:
00571   void createPartition(unsigned int partition);
00572 
00578   void createCrate(unsigned int partition, unsigned int crate);
00579 
00585   void createROD(unsigned int partition, unsigned int crate, unsigned int rod);
00586 
00587   xmlNodePtr getModuleConfigurationNode(std::string sn, std::string reason);
00588 
00589   void notifyModuleConfChange();
00590 
00591   void notifyModuleMappingChange();
00592 
00593   void notifySystemStructureChange();
00594 
00595  private:
00600   ISInfoDictionary *getIsDict();
00601 
00608   void updateRodConfig(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00609 
00615   xmlNodePtr getQueryNode(const std::string query, const std::string task);
00616 
00623   std::list<xmlNodePtr> getQueryNodeList(const std::string query, const std::string task);
00624 
00630   float getAttrAsFloat(xmlNodePtr node, const char *attr);
00631 
00639   int getAttrAsInt(xmlNodePtr node, const char *attr, int base = 0);
00640 
00647   std::string getAttrAsString(xmlNodePtr node, const char *attr);
00648 
00654   xmlNodePtr getChildNode(xmlNodePtr node, const char *name);
00655 
00661   xmlNodePtr getOrNewChildNode(xmlNodePtr node, const char *name);
00662 
00668   void setOrCreateChildNodeWithContent(xmlNodePtr node, const char *name, const char *content);
00669 
00673   xmlNodePtr getChildNodeWithContent(xmlNodePtr node, const char *name, const char *content);
00674 
00680   xmlNodePtr getOrNewChildWithIntAttr(xmlNodePtr, const char *name, const char *attr, int integer);
00681 
00687   xmlNodePtr getOrNewChildWithStringAttr(xmlNodePtr parent, const char *name, const char *attr, std::string value);
00688 
00692   xmlNodePtr getNodeWithIntAttr(xmlNodePtr node, const char *name, const char *attr, int integer);
00693 
00697   xmlNodePtr getNodeWithStringAttr(xmlNodePtr node, const char *name, const char *attr, std::string value);
00698 
00702   void setFloatAttr(xmlNodePtr node, const char *attr, float floater);
00703 
00707   void setIntAttr(xmlNodePtr node, const char *attr, int integer);
00708 
00712   void clearAttr(xmlNodePtr node, const char *attr);
00713 
00717   const ABCDModule parseModuleConfig(xmlNodePtr node);
00718 
00722   const SctConfiguration::RodConfig parseRodConfig(xmlNodePtr node);
00723 
00727   const SctConfiguration::TimConfig parseTimConfig(xmlNodePtr node);
00728 
00733   xmlNodePtr replaceModuleConfig(xmlNodePtr node, const ABCDModule conf, const std::string name);
00734 
00735  protected:
00736   void checkInitialised();
00737   boost::mutex initialise_mutex;
00738 
00739   std::map<std::string, xmlNodePtr> serialToMurNode;
00740   bool serialToMurNodeBuilt;
00741 
00742   void buildSerialToMurNode();
00743 
00744   std::map<std::string, xmlNodePtr> serialToConfigNode;
00745   bool serialToConfigNodeBuilt;
00746 
00747   void buildSerialToConfigNode();
00748 };
00749 
00750 #endif

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