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
00128 SctConfiguration::RodConfig getRodConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00129
00135 SctConfiguration::SlaveConfig getDefaultSlaveConfig(char type);
00136
00142 SctConfiguration::BOCChannelConfig getBOCConfig(unsigned int partition, unsigned int crate, unsigned int rod,
00143 unsigned int channel);
00144
00145 SctConfiguration::BOCGlobalConfig getBOCGlobalConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00146
00152 char *getFibreMappings(unsigned int partition, unsigned int crate, unsigned int rod);
00153
00159 SctConfiguration::TimConfig getTimConfig(unsigned int partition, unsigned int crate);
00160
00166 void setFibreMapping(unsigned int partition, unsigned int crate, unsigned int rod,
00167 unsigned int channel, unsigned int tx, unsigned int rx0, unsigned int rx1);
00168
00172 void printModuleConfig(const ABCDModule &conf);
00173
00174 SctConfiguration::MURType getMURType(unsigned int MUR);
00175
00176 unsigned int getFreeMurId();
00177
00178
00179
00183 void translateToROD(unsigned int MUR, unsigned int module,
00184 unsigned int &partition, unsigned int &crate,
00185 unsigned int &rod, unsigned int &channel);
00186
00193 void translateToRROD(unsigned int MUR, unsigned int module,
00194 unsigned int &partition, unsigned int &crate,
00195 unsigned int &rod, unsigned int &channel);
00196
00200 void translateToSN(unsigned int MUR, unsigned int module,
00201 std::string &sn);
00202
00206 void translateToRMUR(unsigned int MUR, unsigned int module,
00207 unsigned int &RMUR, unsigned int &rmodule);
00208
00212 void translateToBarrel(unsigned int MUR, unsigned int module,
00213 unsigned int &barrel, unsigned int &row, int &number);
00214
00218 void translateToEndcap(unsigned int MUR, unsigned int module,
00219 int &disk, unsigned int &ring, unsigned int &number);
00220
00224 void translateToPowerSupply(unsigned int MUR, unsigned int module,
00225 unsigned int &partition,
00226 unsigned int &crate, unsigned int &channel);
00227
00231 void translateFromROD(unsigned int partition, unsigned int crate,
00232 unsigned int rod, unsigned int channel,
00233 unsigned int &MUR, unsigned int &module);
00234
00241 void translateFromRROD(unsigned int partition, unsigned int crate,
00242 unsigned int rod, unsigned int channel,
00243 unsigned int &MUR, unsigned int &module);
00247 void translateFromSN(const std::string sn,
00248 unsigned int &MUR, unsigned int &module);
00249
00253 void translateFromRMUR(unsigned int RMUR, unsigned int rmodule,
00254 unsigned int &MUR, unsigned int &module);
00255
00259 void translateFromBarrel(unsigned int barrel, unsigned int row, int number,
00260 unsigned int &MUR, unsigned int &module);
00261
00265 void translateFromEndcap(int disk, unsigned int ring, unsigned int number,
00266 unsigned int &MUR, unsigned int &module);
00267
00271 void translateFromPowerSupply(unsigned int partition,
00272 unsigned int crate, unsigned int channel,
00273 unsigned int &MUR, unsigned int &module);
00274
00275
00276
00277
00283 void configureModuleFromStructure(const std::string module, const ABCDModule conf);
00284
00290 void configureModuleFromFile(const std::string filename);
00291
00300 void configureROD(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00301
00310 void configureTIM(unsigned int partition, unsigned int crate, SctConfiguration::TimConfig conf);
00311
00315 void configureBOC(unsigned int partition, unsigned int crate, unsigned int rod, const SctConfiguration::BOCGlobalConfig &conf);
00316
00321 void clearAll();
00322
00336 void namePartition(unsigned int partition, const std::string name);
00337
00338 public:
00342
00343
00347 void configureBOCChannel(unsigned int MUR, unsigned int position, const SctConfiguration::BOCChannelConfig &conf);
00348
00352 void mapModuleMUR(unsigned int MUR, unsigned int order, unsigned int RMUR, unsigned int rorder, std::string number);
00353
00357 void unmapModuleMUR(unsigned int MUR, unsigned int order);
00358
00362 void mapRODMUR(unsigned int partition, unsigned int crate, unsigned int rod, unsigned int order, unsigned int number);
00363
00367 void unmapRODMUR(unsigned int number);
00368
00372 void mapBarrelMUR(unsigned int MUR, unsigned int barrel, unsigned int row, int position);
00373
00377 void unmapBarrelMUR(unsigned int MUR);
00378
00382 void getMapMURROD(unsigned int MUR, unsigned int &partition, unsigned int &crate, unsigned int &rod, unsigned int &order);
00383
00387 void getMapRODMUR(unsigned int partition, unsigned int crate, unsigned int rod, unsigned int order, unsigned int &MUR);
00388
00389
00390
00391
00392 void getMapMURPhysical(unsigned int MUR, SctConfiguration::MURType &type, int &plane, int §ion, int &position);
00393
00397 void mapEndcapMUR(unsigned int MUR, int disk, unsigned int quadrant, unsigned int position);
00398
00402 void unmapEndcapMUR(unsigned int MUR);
00403
00410 void swapMURNames(unsigned int MUR1, unsigned int MUR2);
00411
00415 void mapPowerChannel(unsigned int MUR, unsigned int number, unsigned int partition, unsigned int crate, unsigned int channel);
00416
00420 void unmapPowerChannel(unsigned int MUR, unsigned int number);
00421
00425 void modifyDefaultPowerParam(std::string state, std::string name, std::string type, float value);
00426
00430 void modifyHVCardParam(unsigned int crate, unsigned int card,
00431 std::string name, std::string type, float value);
00432
00436 void modifyLVCardParam(unsigned int crate, unsigned int card,
00437 std::string name, std::string type, float value);
00438
00442 void modifyPowerParam(unsigned int MUR, unsigned int number,
00443 std::string state, std::string name, std::string type, float value);
00444
00448 void modifyPowerParamCC(unsigned int crate, unsigned int channel,
00449 std::string state, std::string name, std::string type, float value);
00450
00454 float getDefaultPowerParam(std::string state, std::string name, std::string type);
00455
00459 float getHVCardParam(unsigned int crate, unsigned int card, std::string name, std::string type);
00460
00464 float getLVCardParam(unsigned int crate, unsigned int card, std::string name, std::string type);
00465
00469 float getPowerParam(unsigned int MUR, unsigned int number, std::string state, std::string name, std::string type);
00470
00474 float getPowerParamCC(unsigned int crate, unsigned int channel, std::string state, std::string name, std::string type);
00475
00479 std::list<std::string> listDefaultPowerParams();
00480
00484 float getCratePowerParam(unsigned int crate, std::string name);
00485
00486 std::list<std::string> listDCSChannelParams();
00487
00488 std::list<std::string> listDCSCardParams();
00489
00490 std::list<std::string> listDCSCrateParams();
00491
00495 void loadConfiguration(const std::string &filename);
00496
00497
00498
00508 void saveConfiguration(const std::string filename = "");
00509
00515 void saveModuleConfiguration(const std::string modsn, const std::string filename);
00516
00520 std::string getModuleConfigurationString(const std::string modsn, const ABCDModule config);
00521
00525 void writePowerSupplyConfiguration(std::string filename);
00526
00527 protected:
00535 void createPartition(unsigned int partition);
00536
00542 void createCrate(unsigned int partition, unsigned int crate);
00543
00549 void createROD(unsigned int partition, unsigned int crate, unsigned int rod);
00550
00551 xmlNodePtr getModuleConfigurationNode(std::string sn, std::string reason);
00552
00553 void notifyModuleConfChange();
00554
00555 void notifyModuleMappingChange();
00556
00557 void notifySystemStructureChange();
00558
00559 private:
00564 ISInfoDictionary *getISDict();
00565
00572 void updateRodConfig(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00573
00579 xmlNodePtr getQueryNode(const std::string query, const std::string task);
00580
00587 std::list<xmlNodePtr> getQueryNodeList(const std::string query, const std::string task);
00588
00594 float getAttrAsFloat(xmlNodePtr node, const char *attr);
00595
00603 int getAttrAsInt(xmlNodePtr node, const char *attr, int base = 0);
00604
00611 std::string getAttrAsString(xmlNodePtr node, const char *attr);
00612
00618 xmlNodePtr getChildNode(xmlNodePtr node, const char *name);
00619
00625 xmlNodePtr getOrNewChildNode(xmlNodePtr node, const char *name);
00626
00632 void setOrCreateChildNodeWithContent(xmlNodePtr node, const char *name, const char *content);
00633
00637 xmlNodePtr getChildNodeWithContent(xmlNodePtr node, const char *name, const char *content);
00638
00644 xmlNodePtr getOrNewChildWithIntAttr(xmlNodePtr, const char *name, const char *attr, int integer);
00645
00651 xmlNodePtr getOrNewChildWithStringAttr(xmlNodePtr parent, const char *name, const char *attr, std::string value);
00652
00656 xmlNodePtr getNodeWithIntAttr(xmlNodePtr node, const char *name, const char *attr, int integer);
00657
00661 xmlNodePtr getNodeWithStringAttr(xmlNodePtr node, const char *name, const char *attr, std::string value);
00662
00666 void setFloatAttr(xmlNodePtr node, const char *attr, float floater);
00667
00671 void setIntAttr(xmlNodePtr node, const char *attr, int integer);
00672
00676 void clearAttr(xmlNodePtr node, const char *attr);
00677
00681 const ABCDModule parseModuleConfig(xmlNodePtr node);
00682
00686 const SctConfiguration::RodConfig parseRodConfig(xmlNodePtr node);
00687
00691 const SctConfiguration::TimConfig parseTimConfig(xmlNodePtr node);
00692
00697 xmlNodePtr replaceModuleConfig(xmlNodePtr node, const ABCDModule conf, const std::string name);
00698
00699 protected:
00700 std::map<std::string, xmlNodePtr> serialToMurNode;
00701 bool serialToMurNodeBuilt;
00702
00703 void buildSerialToMurNode();
00704
00705 std::map<std::string, xmlNodePtr> serialToConfigNode;
00706 bool serialToConfigNodeBuilt;
00707
00708 void buildSerialToConfigNode();
00709 };
00710
00711 #endif