$treeview $search $mathjax $extrastylesheet
otsdaq
v2_03_00
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #include "otsdaq-core/Macros/TablePluginMacros.h" 00002 #include "otsdaq-core/TablePluginDataFormats/FESlowControlsTable.h" 00003 00004 #include "otsdaq-core/ConfigurationInterface/ConfigurationManager.h" 00005 00006 #include <iostream> 00007 00008 using namespace ots; 00009 00010 //============================================================================== 00011 FESlowControlsTable::FESlowControlsTable(void) : TableBase("FESlowControlsTable") 00012 { 00013 // <?xml version="1.0" encoding="UTF-8" standalone="no" ?> 00014 // <ROOT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 00015 // xsi:noNamespaceSchemaLocation="TableInfo.xsd"> <TABLE 00016 // Name="FESlowControlsTable"> <VIEW 00017 // Name="SLOW_CONTROLS_OTS_FE_CHANNELS_TABLE" 00018 // Type="File,Database,DatabaseTest"> <COLUMN 00019 // Type="GroupID-SlowControls" Name="FEGroupID" StorageName="FE_GROUP_ID" 00020 // DataType="VARCHAR2"/> <COLUMN Type="UID" Name="ChannelName" 00021 // StorageName="CHANNEL_NAME" DataType="VARCHAR2"/> <COLUMN 00022 // Type="Data" Name="ChannelDataType" StorageName="CHANNEL_DATA_TYPE" 00023 // DataType="VARCHAR2"/> <COLUMN Type="Data" 00024 // Name="UniversalInterfaceAddress" StorageName="UNIVERSAL_INTERFACE_ADDRESS" 00025 // DataType="VARCHAR2"/> <COLUMN Type="YesNo" 00026 // Name="ReadAccess" StorageName="READ_ACCESS" DataType="VARCHAR2"/> 00027 // <COLUMN Type="YesNo" Name="WriteAccess" 00028 // StorageName="WRITE_ACCESS" DataType="VARCHAR2"/> <COLUMN 00029 // Type="YesNo" Name="MonitoringEnabled" StorageName="MONITORING_ENABLED" 00030 // DataType="VARCHAR2"/> <COLUMN Type="TrueFalse" 00031 // Name="TransmitChangesOnly" StorageName="TRANSMIT_CHANGES_ONLY" 00032 // DataType="VARCHAR2"/> <COLUMN Type="Data" 00033 // Name="DelayBetweenSamples" StorageName="DELAY_BETWEEN_SAMPLES" 00034 // DataType="NUMBER"/> <COLUMN Type="YesNo" Name="AlarmsEnabled" 00035 // StorageName="ALARMS_ENABLED" DataType="VARCHAR2"/> <COLUMN 00036 // Type="Data" Name="LowThreshold" StorageName="LOW_THRESHOLD" 00037 // DataType="VARCHAR2"/> <COLUMN Type="Data" 00038 // Name="LowLowThreshold" StorageName="LOW_LOW_THRESHOLD" 00039 // DataType="VARCHAR2"/> <COLUMN Type="Data" 00040 // Name="HighThreshold" StorageName="HIGH_THRESHOLD" DataType="VARCHAR2"/> 00041 // <COLUMN Type="Data" Name="HighHighThreshold" 00042 // StorageName="HIGH_HIGH_THRESHOLD" DataType="VARCHAR2"/> 00043 // <COLUMN Type="Comment" Name="CommentDescription" 00044 // StorageName="COMMENT_DESCRIPTION" DataType="VARCHAR2"/> 00045 // <COLUMN Type="Author" Name="Author" StorageName="AUTHOR" 00046 // DataType="VARCHAR2"/> <COLUMN Type="Timestamp" 00047 // Name="RecordInsertionTime" StorageName="RECORD_INSERTION_TIME" 00048 // DataType="TIMESTAMP WITH TIMEZONE"/> 00049 // </VIEW> 00050 // </TABLE> 00051 // </ROOT> 00052 } 00053 00054 //============================================================================== 00055 FESlowControlsTable::~FESlowControlsTable(void) {} 00056 00057 //============================================================================== 00058 void FESlowControlsTable::init(ConfigurationManager* configManager) 00059 { 00060 // check for valid data types 00061 __COUT__ << "*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*" << std::endl; 00062 __COUT__ << configManager->__SELF_NODE__ << std::endl; 00063 00064 // __COUT__ << configManager->getNode(this->getTableName()).getValueAsString() 00065 // << std::endl; 00066 00067 std::string childType; 00068 auto childrenMap = configManager->__SELF_NODE__.getChildren(); 00069 for(auto& childPair : childrenMap) 00070 { 00071 // check each row in table 00072 __COUT__ << childPair.first << std::endl; 00073 childPair.second.getNode(colNames_.colDataType_).getValue(childType); 00074 __COUT__ << "childType=" << childType << std::endl; 00075 00076 if(childType[childType.size() - 1] == 00077 'b') // if ends in 'b' then take that many bits 00078 { 00079 unsigned int sz; 00080 sscanf(&childType[0], "%u", &sz); 00081 if(sz < 1 || sz > 64) 00082 { 00083 __SS__ << "Data type '" << childType << "' for UID=" << childPair.first 00084 << " is invalid. " 00085 << " The bit size given was " << sz 00086 << " and it must be between 1 and 64." << std::endl; 00087 __COUT_ERR__ << "\n" << ss.str(); 00088 __SS_THROW__; 00089 } 00090 } 00091 else if(childType != "char" && childType != "short" && childType != "int" && 00092 childType != "unsigned int" && childType != "long long " && 00093 childType != "unsigned long long" && childType != "float" && 00094 childType != "double") 00095 { 00096 __SS__ << "Data type '" << childType << "' for UID=" << childPair.first 00097 << " is invalid. " 00098 << "Valid data types (w/size in bytes) are as follows: " 00099 << "#b (# bits)" 00100 << ", char (" << sizeof(char) << "B), unsigned char (" 00101 << sizeof(unsigned char) << "B), short (" << sizeof(short) 00102 << "B), unsigned short (" << sizeof(unsigned short) << "B), int (" 00103 << sizeof(int) << "B), unsigned int (" << sizeof(unsigned int) 00104 << "B), long long (" << sizeof(long long) << "B), unsigned long long (" 00105 << sizeof(unsigned long long) << "B), float (" << sizeof(float) 00106 << "B), double (" << sizeof(double) << "B)." << std::endl; 00107 __COUT_ERR__ << "\n" << ss.str(); 00108 __SS_THROW__; 00109 } 00110 } 00111 } 00112 00113 DEFINE_OTS_TABLE(FESlowControlsTable)