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/isinfotmpl.h>
00010
00011 #include "log.h"
00012 #include "configuration.h"
00013
00014 #include "timings.h"
00015
00016 class ConfigurationXMLImpl : public SctConfiguration::Configuration {
00017 ConfigurationXMLImpl(const ConfigurationXMLImpl &);
00018 ConfigurationXMLImpl &operator=(const ConfigurationXMLImpl &);
00019
00020 static ConfigurationXMLImpl *m_config;
00021
00022 xmlDocPtr document;
00023 xmlXPathContextPtr xpathContext;
00024
00025 Log log;
00026
00027 std::string lastFilename;
00028
00029 ISInfoDictionary *is_dict;
00030 bool isLookupDone;
00031
00032 Timings timings;
00033
00034 public:
00039 ConfigurationXMLImpl();
00040
00044 virtual ~ConfigurationXMLImpl();
00045
00046
00047
00052 std::list<unsigned int> listPartitions();
00053
00058 std::list<unsigned int> listCratesInPartition(unsigned int partition);
00059
00060 bool isDummyCrate(unsigned int partition, unsigned int crate);
00061
00066 std::list<unsigned int> listRodsInCrate(unsigned int partition, unsigned int crate);
00067
00074 std::list<unsigned int> listMURSInRod(unsigned int partition, unsigned int crate, unsigned int rod);
00075
00082 std::list<std::string> listModulesInMUR(unsigned int partition, unsigned int MUR);
00083
00090 std::list<std::string> listRModulesInMUR(unsigned int partition, unsigned int MUR);
00091
00097 std::list<std::string> listAllModules();
00098
00102 std::list<std::string> listUnusedModules();
00103
00104
00105
00111 ABCDModule getModuleConfig(const std::string module);
00112
00116 short getModuleGroup(const std::string module);
00117
00121 void setModuleGroup(const std::string module, short group);
00122
00126 unsigned int getModuleErrorMask(unsigned int partition, unsigned int crate, unsigned int rod,
00127 unsigned int channel, unsigned int link);
00128
00132 void setModuleErrorMask(unsigned int partition, unsigned int crate, unsigned int rod,
00133 unsigned int channel, unsigned int link, unsigned int mask);
00134
00138 void setDefaultModuleErrorMask(unsigned int mask);
00139
00145 SctConfiguration::RodConfig getRodConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00146
00152 SctConfiguration::SlaveConfig getDefaultSlaveConfig(char type);
00153
00159 SctConfiguration::BOCChannelConfig getBOCConfig(unsigned int partition, unsigned int crate, unsigned int rod,
00160 unsigned int channel);
00161
00162 SctConfiguration::BOCGlobalConfig getBOCGlobalConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00163
00169 unsigned char *getFibreMappings(unsigned int partition, unsigned int crate, unsigned int rod);
00170
00176 SctConfiguration::TimConfig getTimConfig(unsigned int partition, unsigned int crate);
00177
00183 void setFibreMapping(unsigned int partition, unsigned int crate, unsigned int rod,
00184 unsigned int channel, unsigned int tx, unsigned int rx0, unsigned int rx1);
00185
00189 void printModuleConfig(const ABCDModule &conf);
00190
00191 SctConfiguration::MURType getMURType(unsigned int MUR);
00192
00193 unsigned int getFreeMurId();
00194
00195
00196
00200 void translateToROD(unsigned int MUR, unsigned int module,
00201 unsigned int &partition, unsigned int &crate,
00202 unsigned int &rod, unsigned int &channel);
00203
00210 void translateToRROD(unsigned int MUR, unsigned int module,
00211 unsigned int &partition, unsigned int &crate,
00212 unsigned int &rod, unsigned int &channel);
00213
00217 void translateToSN(unsigned int MUR, unsigned int module,
00218 std::string &sn);
00219
00223 void translateToRMUR(unsigned int MUR, unsigned int module,
00224 unsigned int &RMUR, unsigned int &rmodule);
00225
00229 void translateToBarrel(unsigned int MUR, unsigned int module,
00230 unsigned int &barrel, unsigned int &row, int &number);
00231
00235 void translateToEndcap(unsigned int MUR, unsigned int module,
00236 int &disk, unsigned int &ring, unsigned int &number);
00237
00241 void translateToPowerSupply(unsigned int MUR, unsigned int module,
00242 unsigned int &partition,
00243 unsigned int &crate, unsigned int &channel);
00244
00248 void translateFromROD(unsigned int partition, unsigned int crate,
00249 unsigned int rod, unsigned int channel,
00250 unsigned int &MUR, unsigned int &module);
00251
00258 void translateFromRROD(unsigned int partition, unsigned int crate,
00259 unsigned int rod, unsigned int channel,
00260 unsigned int &MUR, unsigned int &module);
00264 void translateFromSN(const std::string sn,
00265 unsigned int &MUR, unsigned int &module);
00266
00270 void translateFromRMUR(unsigned int RMUR, unsigned int rmodule,
00271 unsigned int &MUR, unsigned int &module);
00272
00276 void translateFromBarrel(unsigned int barrel, unsigned int row, int number,
00277 unsigned int &MUR, unsigned int &module);
00278
00282 void translateFromEndcap(int disk, unsigned int ring, unsigned int number,
00283 unsigned int &MUR, unsigned int &module);
00284
00288 void translateFromPowerSupply(unsigned int partition,
00289 unsigned int crate, unsigned int channel,
00290 unsigned int &MUR, unsigned int &module);
00291
00292
00293
00294
00300 void configureModuleFromStructure(const std::string module, const ABCDModule conf);
00301
00307 void configureModuleFromFile(const std::string filename);
00308
00317 void configureROD(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00318
00327 void configureTIM(unsigned int partition, unsigned int crate, SctConfiguration::TimConfig conf);
00328
00332 void configureBOC(unsigned int partition, unsigned int crate, unsigned int rod, const SctConfiguration::BOCGlobalConfig &conf);
00333
00338 void clearAll();
00339
00353 void namePartition(unsigned int partition, const std::string name);
00354
00355 public:
00359
00360
00364 void configureBOCChannel(unsigned int MUR, unsigned int position, const SctConfiguration::BOCChannelConfig &conf);
00365
00369 void mapModuleMUR(unsigned int MUR, unsigned int order, unsigned int RMUR, unsigned int rorder, std::string number);
00370
00374 void unmapModuleMUR(unsigned int MUR, unsigned int order);
00375
00379 void mapRODMUR(unsigned int partition, unsigned int crate, unsigned int rod, unsigned int order, unsigned int number);
00380
00384 void unmapRODMUR(unsigned int number);
00385
00389 void mapBarrelMUR(unsigned int MUR, unsigned int barrel, unsigned int row, int position);
00390
00394 void unmapBarrelMUR(unsigned int MUR);
00395
00399 void getMapMURROD(unsigned int MUR, unsigned int &partition, unsigned int &crate, unsigned int &rod, unsigned int &order);
00400
00404 void getMapRODMUR(unsigned int partition, unsigned int crate, unsigned int rod, unsigned int order, unsigned int &MUR);
00405
00406
00407
00408
00409 void getMapMURPhysical(unsigned int MUR, SctConfiguration::MURType &type, int &plane, int §ion, int &position);
00410
00414 void mapEndcapMUR(unsigned int MUR, int disk, unsigned int quadrant, unsigned int position);
00415
00419 void unmapEndcapMUR(unsigned int MUR);
00420
00427 void swapMURNames(unsigned int MUR1, unsigned int MUR2);
00428
00432 void mapPowerChannel(unsigned int MUR, unsigned int number, unsigned int partition, unsigned int crate, unsigned int channel);
00433
00437 void unmapPowerChannel(unsigned int MUR, unsigned int number);
00438
00442 void modifyDefaultPowerParam(std::string state, std::string name, std::string type, float value);
00443
00447 void modifyHVCardParam(unsigned int crate, unsigned int card,
00448 std::string name, std::string type, float value);
00449
00453 void modifyLVCardParam(unsigned int crate, unsigned int card,
00454 std::string name, std::string type, float value);
00455
00459 void modifyPowerParam(unsigned int MUR, unsigned int number,
00460 std::string state, std::string name, std::string type, float value);
00461
00465 void modifyPowerParamCC(unsigned int crate, unsigned int channel,
00466 std::string state, std::string name, std::string type, float value);
00467
00471 float getDefaultPowerParam(std::string state, std::string name, std::string type);
00472
00476 float getHVCardParam(unsigned int crate, unsigned int card, std::string name, std::string type);
00477
00481 float getLVCardParam(unsigned int crate, unsigned int card, std::string name, std::string type);
00482
00486 float getPowerParam(unsigned int MUR, unsigned int number, std::string state, std::string name, std::string type);
00487
00491 float getPowerParamCC(unsigned int crate, unsigned int channel, std::string state, std::string name, std::string type);
00492
00496 std::list<std::string> listDefaultPowerParams();
00497
00501 float getCratePowerParam(unsigned int crate, std::string name);
00502
00503 std::list<std::string> listDCSChannelParams();
00504
00505 std::list<std::string> listDCSCardParams();
00506
00507 std::list<std::string> listDCSCrateParams();
00508
00512 void loadConfiguration(const std::string &filename);
00513
00514
00515
00525 void saveConfiguration(const std::string filename = "");
00526
00532 void saveModuleConfiguration(const std::string modsn, const std::string filename);
00533
00537 std::string getModuleConfigurationString(const std::string modsn, const ABCDModule config);
00538
00542 void writePowerSupplyConfiguration(std::string filename);
00543
00544 protected:
00552 void createPartition(unsigned int partition);
00553
00559 void createCrate(unsigned int partition, unsigned int crate);
00560
00566 void createROD(unsigned int partition, unsigned int crate, unsigned int rod);
00567
00568 xmlNodePtr getModuleConfigurationNode(std::string sn, std::string reason);
00569
00570 void notifyModuleConfChange();
00571
00572 void notifyModuleMappingChange();
00573
00574 void notifySystemStructureChange();
00575
00576 private:
00581 ISInfoDictionary *getISDict();
00582
00589 void updateRodConfig(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00590
00596 xmlNodePtr getQueryNode(const std::string query, const std::string task);
00597
00604 std::list<xmlNodePtr> getQueryNodeList(const std::string query, const std::string task);
00605
00611 float getAttrAsFloat(xmlNodePtr node, const char *attr);
00612
00620 int getAttrAsInt(xmlNodePtr node, const char *attr, int base = 0);
00621
00628 std::string getAttrAsString(xmlNodePtr node, const char *attr);
00629
00635 xmlNodePtr getChildNode(xmlNodePtr node, const char *name);
00636
00642 xmlNodePtr getOrNewChildNode(xmlNodePtr node, const char *name);
00643
00649 void setOrCreateChildNodeWithContent(xmlNodePtr node, const char *name, const char *content);
00650
00654 xmlNodePtr getChildNodeWithContent(xmlNodePtr node, const char *name, const char *content);
00655
00661 xmlNodePtr getOrNewChildWithIntAttr(xmlNodePtr, const char *name, const char *attr, int integer);
00662
00668 xmlNodePtr getOrNewChildWithStringAttr(xmlNodePtr parent, const char *name, const char *attr, std::string value);
00669
00673 xmlNodePtr getNodeWithIntAttr(xmlNodePtr node, const char *name, const char *attr, int integer);
00674
00678 xmlNodePtr getNodeWithStringAttr(xmlNodePtr node, const char *name, const char *attr, std::string value);
00679
00683 void setFloatAttr(xmlNodePtr node, const char *attr, float floater);
00684
00688 void setIntAttr(xmlNodePtr node, const char *attr, int integer);
00689
00693 void clearAttr(xmlNodePtr node, const char *attr);
00694
00698 const ABCDModule parseModuleConfig(xmlNodePtr node);
00699
00703 const SctConfiguration::RodConfig parseRodConfig(xmlNodePtr node);
00704
00708 const SctConfiguration::TimConfig parseTimConfig(xmlNodePtr node);
00709
00714 xmlNodePtr replaceModuleConfig(xmlNodePtr node, const ABCDModule conf, const std::string name);
00715
00716 protected:
00717 std::map<std::string, xmlNodePtr> serialToMurNode;
00718 bool serialToMurNodeBuilt;
00719
00720 void buildSerialToMurNode();
00721
00722 std::map<std::string, xmlNodePtr> serialToConfigNode;
00723 bool serialToConfigNodeBuilt;
00724
00725 void buildSerialToConfigNode();
00726 };
00727
00728 #endif