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