otsdaq  v1_01_02
 All Classes Namespaces Functions
FESlowControlsConfiguration_configuration.cc
1 #include "otsdaq-core/ConfigurationPluginDataFormats/FESlowControlsConfiguration.h"
2 #include "otsdaq-core/Macros/ConfigurationPluginMacros.h"
3 
4 #include "otsdaq-core/ConfigurationInterface/ConfigurationManager.h"
5 
6 #include <iostream>
7 
8 using namespace ots;
9 
10 //==============================================================================
11 FESlowControlsConfiguration::FESlowControlsConfiguration(void)
12 : ConfigurationBase("FESlowControlsConfiguration")
13 {
14 // <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
15 // <ROOT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ConfigurationInfo.xsd">
16 // <CONFIGURATION Name="FESlowControlsConfiguration">
17 // <VIEW Name="SLOW_CONTROLS_OTS_FE_CHANNELS_CONFIGURATION" Type="File,Database,DatabaseTest">
18 // <COLUMN Type="GroupID-SlowControls" Name="FEGroupID" StorageName="FE_GROUP_ID" DataType="VARCHAR2"/>
19 // <COLUMN Type="UID" Name="ChannelName" StorageName="CHANNEL_NAME" DataType="VARCHAR2"/>
20 // <COLUMN Type="Data" Name="ChannelDataType" StorageName="CHANNEL_DATA_TYPE" DataType="VARCHAR2"/>
21 // <COLUMN Type="Data" Name="UniversalInterfaceAddress" StorageName="UNIVERSAL_INTERFACE_ADDRESS" DataType="VARCHAR2"/>
22 // <COLUMN Type="YesNo" Name="ReadAccess" StorageName="READ_ACCESS" DataType="VARCHAR2"/>
23 // <COLUMN Type="YesNo" Name="WriteAccess" StorageName="WRITE_ACCESS" DataType="VARCHAR2"/>
24 // <COLUMN Type="YesNo" Name="MonitoringEnabled" StorageName="MONITORING_ENABLED" DataType="VARCHAR2"/>
25 // <COLUMN Type="TrueFalse" Name="TransmitChangesOnly" StorageName="TRANSMIT_CHANGES_ONLY" DataType="VARCHAR2"/>
26 // <COLUMN Type="Data" Name="DelayBetweenSamples" StorageName="DELAY_BETWEEN_SAMPLES" DataType="NUMBER"/>
27 // <COLUMN Type="YesNo" Name="AlarmsEnabled" StorageName="ALARMS_ENABLED" DataType="VARCHAR2"/>
28 // <COLUMN Type="Data" Name="LowThreshold" StorageName="LOW_THRESHOLD" DataType="VARCHAR2"/>
29 // <COLUMN Type="Data" Name="LowLowThreshold" StorageName="LOW_LOW_THRESHOLD" DataType="VARCHAR2"/>
30 // <COLUMN Type="Data" Name="HighThreshold" StorageName="HIGH_THRESHOLD" DataType="VARCHAR2"/>
31 // <COLUMN Type="Data" Name="HighHighThreshold" StorageName="HIGH_HIGH_THRESHOLD" DataType="VARCHAR2"/>
32 // <COLUMN Type="Comment" Name="CommentDescription" StorageName="COMMENT_DESCRIPTION" DataType="VARCHAR2"/>
33 // <COLUMN Type="Author" Name="Author" StorageName="AUTHOR" DataType="VARCHAR2"/>
34 // <COLUMN Type="Timestamp" Name="RecordInsertionTime" StorageName="RECORD_INSERTION_TIME" DataType="TIMESTAMP WITH TIMEZONE"/>
35 // </VIEW>
36 // </CONFIGURATION>
37 // </ROOT>
38 
39 }
40 
41 //==============================================================================
42 FESlowControlsConfiguration::~FESlowControlsConfiguration(void)
43 {
44 }
45 
46 //==============================================================================
47 void FESlowControlsConfiguration::init(ConfigurationManager *configManager)
48 {
49  //check for valid data types
50  __MOUT__ << "*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*" << std::endl;
51  __MOUT__ << configManager->__SELF_NODE__ << std::endl;
52 
53  // __MOUT__ << configManager->getNode(this->getConfigurationName()).getValueAsString()
54  // << std::endl;
55 
56  std::string childType;
57  auto childrenMap = configManager->__SELF_NODE__.getChildren();
58  for(auto &childPair: childrenMap)
59  {
60  //check each row in table
61  __MOUT__ << childPair.first << std::endl;
62  childPair.second.getNode(colNames_.colDataType_).getValue(childType);
63  __MOUT__ << "childType=" << childType << std::endl;
64 
65  if(childType[childType.size()-1] == 'b') //if ends in 'b' then take that many bits
66  {
67  unsigned int sz;
68  sscanf(&childType[0],"%u",&sz);
69  if(sz < 1 || sz > 64)
70  {
71  __SS__ << "Data type '" << childType << "' for UID=" <<
72  childPair.first << " is invalid. " <<
73  " The bit size given was " << sz <<
74  " and it must be between 1 and 64." << std::endl;
75  __MOUT_ERR__ << "\n" << ss.str();
76  throw std::runtime_error(ss.str());
77  }
78  }
79  else if(childType != "char" &&
80  childType != "short" &&
81  childType != "int" &&
82  childType != "unsigned int" &&
83  childType != "long long " &&
84  childType != "unsigned long long" &&
85  childType != "float" &&
86  childType != "double")
87  {
88  __SS__ << "Data type '" << childType << "' for UID=" <<
89  childPair.first << " is invalid. " <<
90  "Valid data types (w/size in bytes) are as follows: " <<
91  "#b (# bits)" <<
92  ", char (" << sizeof(char) <<
93  "B), unsigned char (" << sizeof(unsigned char) <<
94  "B), short (" << sizeof(short) <<
95  "B), unsigned short (" << sizeof(unsigned short) <<
96  "B), int (" << sizeof(int) <<
97  "B), unsigned int (" << sizeof(unsigned int) <<
98  "B), long long (" << sizeof(long long) <<
99  "B), unsigned long long (" << sizeof(unsigned long long) <<
100  "B), float (" << sizeof(float) <<
101  "B), double (" << sizeof(double) <<
102  "B)." << std::endl;
103  __MOUT_ERR__ << "\n" << ss.str();
104  throw std::runtime_error(ss.str());
105  }
106  }
107 }
108 
109 DEFINE_OTS_CONFIGURATION(FESlowControlsConfiguration)