File indexing completed on 2025-08-03 08:20:38
0001 #include "oncsSub_iduppetparams.h"
0002 #include <cstring>
0003
0004 #include <arpa/inet.h>
0005
0006 using namespace std;
0007
0008 oncsSub_iduppetparams::oncsSub_iduppetparams(subevtdata_ptr data)
0009 :oncsSubevent_w4 (data)
0010 {
0011
0012 }
0013
0014 oncsSub_iduppetparams::~oncsSub_iduppetparams()
0015 {
0016
0017 }
0018
0019
0020 int *oncsSub_iduppetparams::decode ( int *nwout)
0021 {
0022
0023 unsigned int *SubeventData = (unsigned int *) &SubeventHdr->data;
0024
0025 int *p = new int [42];
0026
0027 for ( int i = 0; i < 41; i++ )
0028 {
0029 p[i] = SubeventData[i];
0030
0031 }
0032
0033 *nwout = 41;
0034 return p;
0035 }
0036
0037
0038 int oncsSub_iduppetparams::iValue(const int ch)
0039 {
0040
0041 if ( decoded_data1 == 0 ) decoded_data1 = decode(&data1_length);
0042
0043 if ( ch < 0 || ch >40 ) return 0;
0044
0045 return decoded_data1[ch];
0046
0047 }
0048
0049
0050
0051 int oncsSub_iduppetparams::iValue(const int ich,const char *what)
0052 {
0053
0054 if ( decoded_data1 == 0 ) decoded_data1 = decode(&data1_length);
0055
0056
0057 if ( strcmp(what,"ASICENABLED") == 0 )
0058 {
0059 if ( ich <0 || ich >=24) return 0;
0060 if ( ( decoded_data1[1] >> ich) &1 ) return 0;
0061 return 1;
0062 }
0063
0064 if ( strcmp(what,"UDPHEADER1") == 0 )
0065 {
0066 return decoded_data1[9];
0067 }
0068
0069 if ( strcmp(what,"UDPHEADER2") == 0 )
0070 {
0071
0072 return decoded_data1[10];
0073 }
0074
0075 if ( strcmp(what,"VTHHIGH") == 0 )
0076 {
0077 if ( ich < 0 || ich >= 6*24) return 0;
0078 return ( decoded_data1[11+ich] & 0xfff);
0079 }
0080
0081 if ( strcmp(what,"VTHLOW") == 0 )
0082 {
0083 if ( ich < 0 || ich >= 6*24) return 0;
0084 return ( (decoded_data1[11+ich]>>16) & 0xfff);
0085 }
0086
0087 if ( strcmp(what,"CLOCKPHASE") == 0 )
0088 {
0089 return decoded_data1[35];
0090 }
0091
0092 if ( strcmp(what,"UDPTIMEOUT") == 0 )
0093 {
0094 return decoded_data1[36];
0095 }
0096
0097 if ( strcmp(what,"CLOCKCORRECTION") == 0 )
0098 {
0099 return (decoded_data1[38] & 0xffffff);
0100 }
0101
0102 if ( strcmp(what,"FIRMWAREVERSION") == 0 )
0103 {
0104 return decoded_data1[40];
0105 }
0106
0107
0108 return 0;
0109
0110 }
0111
0112
0113 void oncsSub_iduppetparams::dump ( OSTREAM& os )
0114 {
0115
0116
0117
0118 os << " Firmware version: 0x" << hex << iValue(0,"FIRMWAREVERSION") << dec << std::endl;
0119 os << " Enabled Chips: 0x" << hex << iValue(1) << dec << std::endl;
0120 os << " UDP Header 1: 0x" << hex << iValue(0,"UDPHEADER1") << dec << " " << setw(6) << iValue(0,"UDPHEADER1") << std::endl;
0121 os << " UDP Header 2: 0x" << hex << iValue(0,"UDPHEADER2") << dec << " " << setw(6) << iValue(0,"UDPHEADER2") << std::endl;
0122 os << " UDP Timeout: " << iValue(0,"UDPTIMEOUT") << std::endl;
0123 os << " Clock Phase: 0x" << hex << iValue(0,"CLOCKPHASE") << dec << std::endl;
0124 os << " Clock Correction: 0x" << hex << iValue(0,"CLOCKCORRECTION") << dec << std::endl;
0125
0126 int i, k;
0127
0128 os << std::endl;
0129
0130 os << " VTH Low (* = ASIC enabled) " << endl;
0131 os << " row | T5 T4 T3 T2 T1 T0" << endl;
0132 os << " ----+------------------------------------------" << endl;
0133
0134 int row = 3;
0135
0136 for ( i = 23; i >= 20 ; i--)
0137 {
0138
0139 os << std::setw(5) << row-- << " | ";
0140 for ( k = i; k >= 0 ; k-=4)
0141 {
0142
0143 os << std::setw(5) << iValue(k,"VTHLOW");
0144 if ( iValue(k,"ASICENABLED") )
0145 {
0146 cout << "* ";
0147 }
0148 else
0149 {
0150 cout << " ";
0151 }
0152
0153 }
0154 os << std::endl;
0155 }
0156
0157 os << std::endl;
0158
0159 os << " VTH High (* = ASIC enabled) " << endl;
0160
0161 row = 3;
0162 for ( i = 23; i >= 20 ; i--)
0163 {
0164
0165 os << std::setw(5) << row-- << " | ";
0166 for ( k = i; k >= 0 ; k-=4)
0167 {
0168
0169 os << std::setw(5) << iValue(k,"VTHHIGH");
0170 if ( iValue(k,"ASICENABLED") )
0171 {
0172 cout << "* ";
0173 }
0174 else
0175 {
0176 cout << " ";
0177 }
0178
0179 }
0180 os << std::endl;
0181 }
0182
0183 os << " ( as seen on the motherboard with towers up )" << std::endl << std::endl;
0184
0185 }
0186