1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
#include "EventFilter/Utilities/interface/DTCRC.h"
void dt_crc::calcCRC(long word, int& myC) {
int myCRC[16], D[64], C[16];
for (int i = 0; i < 64; ++i) {
D[i] = (word >> i) & 0x1;
}
for (int i = 0; i < 16; ++i) {
C[i] = (myC >> i) & 0x1;
}
myCRC[0] = (D[63] + D[62] + D[61] + D[60] + D[55] + D[54] + D[53] + D[52] + D[51] + D[50] + D[49] + D[48] + D[47] +
D[46] + D[45] + D[43] + D[41] + D[40] + D[39] + D[38] + D[37] + D[36] + D[35] + D[34] + D[33] + D[32] +
D[31] + D[30] + D[27] + D[26] + D[25] + D[24] + D[23] + D[22] + D[21] + D[20] + D[19] + D[18] + D[17] +
D[16] + D[15] + D[13] + D[12] + D[11] + D[10] + D[9] + D[8] + D[7] + D[6] + D[5] + D[4] + D[3] + D[2] +
D[1] + D[0] + C[0] + C[1] + C[2] + C[3] + C[4] + C[5] + C[6] + C[7] + C[12] + C[13] + C[14] + C[15]) %
2;
myCRC[1] = (D[63] + D[62] + D[61] + D[56] + D[55] + D[54] + D[53] + D[52] + D[51] + D[50] + D[49] + D[48] + D[47] +
D[46] + D[44] + D[42] + D[41] + D[40] + D[39] + D[38] + D[37] + D[36] + D[35] + D[34] + D[33] + D[32] +
D[31] + D[28] + D[27] + D[26] + D[25] + D[24] + D[23] + D[22] + D[21] + D[20] + D[19] + D[18] + D[17] +
D[16] + D[14] + D[13] + D[12] + D[11] + D[10] + D[9] + D[8] + D[7] + D[6] + D[5] + D[4] + D[3] + D[2] +
D[1] + C[0] + C[1] + C[2] + C[3] + C[4] + C[5] + C[6] + C[7] + C[8] + C[13] + C[14] + C[15]) %
2;
myCRC[2] = (D[61] + D[60] + D[57] + D[56] + D[46] + D[42] + D[31] + D[30] + D[29] + D[28] + D[16] + D[14] + D[1] +
D[0] + C[8] + C[9] + C[12] + C[13]) %
2;
myCRC[3] = (D[62] + D[61] + D[58] + D[57] + D[47] + D[43] + D[32] + D[31] + D[30] + D[29] + D[17] + D[15] + D[2] +
D[1] + C[9] + C[10] + C[13] + C[14]) %
2;
myCRC[4] = (D[63] + D[62] + D[59] + D[58] + D[48] + D[44] + D[33] + D[32] + D[31] + D[30] + D[18] + D[16] + D[3] +
D[2] + C[0] + C[10] + C[11] + C[14] + C[15]) %
2;
myCRC[5] = (D[63] + D[60] + D[59] + D[49] + D[45] + D[34] + D[33] + D[32] + D[31] + D[19] + D[17] + D[4] + D[3] +
C[1] + C[11] + C[12] + C[15]) %
2;
myCRC[6] = (D[61] + D[60] + D[50] + D[46] + D[35] + D[34] + D[33] + D[32] + D[20] + D[18] + D[5] + D[4] + C[2] +
C[12] + C[13]) %
2;
myCRC[7] = (D[62] + D[61] + D[51] + D[47] + D[36] + D[35] + D[34] + D[33] + D[21] + D[19] + D[6] + D[5] + C[3] +
C[13] + C[14]) %
2;
myCRC[8] = (D[63] + D[62] + D[52] + D[48] + D[37] + D[36] + D[35] + D[34] + D[22] + D[20] + D[7] + D[6] + C[0] +
C[4] + C[14] + C[15]) %
2;
myCRC[9] =
(D[63] + D[53] + D[49] + D[38] + D[37] + D[36] + D[35] + D[23] + D[21] + D[8] + D[7] + C[1] + C[5] + C[15]) % 2;
myCRC[10] = (D[54] + D[50] + D[39] + D[38] + D[37] + D[36] + D[24] + D[22] + D[9] + D[8] + C[2] + C[6]) % 2;
myCRC[11] = (D[55] + D[51] + D[40] + D[39] + D[38] + D[37] + D[25] + D[23] + D[10] + D[9] + C[3] + C[7]) % 2;
myCRC[12] = (D[56] + D[52] + D[41] + D[40] + D[39] + D[38] + D[26] + D[24] + D[11] + D[10] + C[4] + C[8]) % 2;
myCRC[13] = (D[57] + D[53] + D[42] + D[41] + D[40] + D[39] + D[27] + D[25] + D[12] + D[11] + C[5] + C[9]) % 2;
myCRC[14] = (D[58] + D[54] + D[43] + D[42] + D[41] + D[40] + D[28] + D[26] + D[13] + D[12] + C[6] + C[10]) % 2;
myCRC[15] = (D[63] + D[62] + D[61] + D[60] + D[59] + D[54] + D[53] + D[52] + D[51] + D[50] + D[49] + D[48] + D[47] +
D[46] + D[45] + D[44] + D[42] + D[40] + D[39] + D[38] + D[37] + D[36] + D[35] + D[34] + D[33] + D[32] +
D[31] + D[30] + D[29] + D[26] + D[25] + D[24] + D[23] + D[22] + D[21] + D[20] + D[19] + D[18] + D[17] +
D[16] + D[15] + D[14] + D[12] + D[11] + D[10] + D[9] + D[8] + D[7] + D[6] + D[5] + D[4] + D[3] + D[2] +
D[1] + D[0] + C[0] + C[1] + C[2] + C[3] + C[4] + C[5] + C[6] + C[11] + C[12] + C[13] + C[14] + C[15]) %
2;
int tempC = 0x0;
for (int i = 0; i < 16; ++i) {
tempC = tempC + (myCRC[i] << i);
}
myC = tempC;
return;
}
void dt_crc::calcCRC(int myD1, int myD2, int& myC) {
int myCRC[16], D[64], C[16];
for (int i = 0; i < 32; ++i) {
D[i] = (myD2 >> i) & 0x1;
}
for (int i = 0; i < 32; ++i) {
D[i + 32] = (myD1 >> i) & 0x1;
}
for (int i = 0; i < 16; ++i) {
C[i] = (myC >> i) & 0x1;
}
myCRC[0] = (D[63] + D[62] + D[61] + D[60] + D[55] + D[54] + D[53] + D[52] + D[51] + D[50] + D[49] + D[48] + D[47] +
D[46] + D[45] + D[43] + D[41] + D[40] + D[39] + D[38] + D[37] + D[36] + D[35] + D[34] + D[33] + D[32] +
D[31] + D[30] + D[27] + D[26] + D[25] + D[24] + D[23] + D[22] + D[21] + D[20] + D[19] + D[18] + D[17] +
D[16] + D[15] + D[13] + D[12] + D[11] + D[10] + D[9] + D[8] + D[7] + D[6] + D[5] + D[4] + D[3] + D[2] +
D[1] + D[0] + C[0] + C[1] + C[2] + C[3] + C[4] + C[5] + C[6] + C[7] + C[12] + C[13] + C[14] + C[15]) %
2;
myCRC[1] = (D[63] + D[62] + D[61] + D[56] + D[55] + D[54] + D[53] + D[52] + D[51] + D[50] + D[49] + D[48] + D[47] +
D[46] + D[44] + D[42] + D[41] + D[40] + D[39] + D[38] + D[37] + D[36] + D[35] + D[34] + D[33] + D[32] +
D[31] + D[28] + D[27] + D[26] + D[25] + D[24] + D[23] + D[22] + D[21] + D[20] + D[19] + D[18] + D[17] +
D[16] + D[14] + D[13] + D[12] + D[11] + D[10] + D[9] + D[8] + D[7] + D[6] + D[5] + D[4] + D[3] + D[2] +
D[1] + C[0] + C[1] + C[2] + C[3] + C[4] + C[5] + C[6] + C[7] + C[8] + C[13] + C[14] + C[15]) %
2;
myCRC[2] = (D[61] + D[60] + D[57] + D[56] + D[46] + D[42] + D[31] + D[30] + D[29] + D[28] + D[16] + D[14] + D[1] +
D[0] + C[8] + C[9] + C[12] + C[13]) %
2;
myCRC[3] = (D[62] + D[61] + D[58] + D[57] + D[47] + D[43] + D[32] + D[31] + D[30] + D[29] + D[17] + D[15] + D[2] +
D[1] + C[9] + C[10] + C[13] + C[14]) %
2;
myCRC[4] = (D[63] + D[62] + D[59] + D[58] + D[48] + D[44] + D[33] + D[32] + D[31] + D[30] + D[18] + D[16] + D[3] +
D[2] + C[0] + C[10] + C[11] + C[14] + C[15]) %
2;
myCRC[5] = (D[63] + D[60] + D[59] + D[49] + D[45] + D[34] + D[33] + D[32] + D[31] + D[19] + D[17] + D[4] + D[3] +
C[1] + C[11] + C[12] + C[15]) %
2;
myCRC[6] = (D[61] + D[60] + D[50] + D[46] + D[35] + D[34] + D[33] + D[32] + D[20] + D[18] + D[5] + D[4] + C[2] +
C[12] + C[13]) %
2;
myCRC[7] = (D[62] + D[61] + D[51] + D[47] + D[36] + D[35] + D[34] + D[33] + D[21] + D[19] + D[6] + D[5] + C[3] +
C[13] + C[14]) %
2;
myCRC[8] = (D[63] + D[62] + D[52] + D[48] + D[37] + D[36] + D[35] + D[34] + D[22] + D[20] + D[7] + D[6] + C[0] +
C[4] + C[14] + C[15]) %
2;
myCRC[9] =
(D[63] + D[53] + D[49] + D[38] + D[37] + D[36] + D[35] + D[23] + D[21] + D[8] + D[7] + C[1] + C[5] + C[15]) % 2;
myCRC[10] = (D[54] + D[50] + D[39] + D[38] + D[37] + D[36] + D[24] + D[22] + D[9] + D[8] + C[2] + C[6]) % 2;
myCRC[11] = (D[55] + D[51] + D[40] + D[39] + D[38] + D[37] + D[25] + D[23] + D[10] + D[9] + C[3] + C[7]) % 2;
myCRC[12] = (D[56] + D[52] + D[41] + D[40] + D[39] + D[38] + D[26] + D[24] + D[11] + D[10] + C[4] + C[8]) % 2;
myCRC[13] = (D[57] + D[53] + D[42] + D[41] + D[40] + D[39] + D[27] + D[25] + D[12] + D[11] + C[5] + C[9]) % 2;
myCRC[14] = (D[58] + D[54] + D[43] + D[42] + D[41] + D[40] + D[28] + D[26] + D[13] + D[12] + C[6] + C[10]) % 2;
myCRC[15] = (D[63] + D[62] + D[61] + D[60] + D[59] + D[54] + D[53] + D[52] + D[51] + D[50] + D[49] + D[48] + D[47] +
D[46] + D[45] + D[44] + D[42] + D[40] + D[39] + D[38] + D[37] + D[36] + D[35] + D[34] + D[33] + D[32] +
D[31] + D[30] + D[29] + D[26] + D[25] + D[24] + D[23] + D[22] + D[21] + D[20] + D[19] + D[18] + D[17] +
D[16] + D[15] + D[14] + D[12] + D[11] + D[10] + D[9] + D[8] + D[7] + D[6] + D[5] + D[4] + D[3] + D[2] +
D[1] + D[0] + C[0] + C[1] + C[2] + C[3] + C[4] + C[5] + C[6] + C[11] + C[12] + C[13] + C[14] + C[15]) %
2;
int tempC = 0x0;
for (int i = 0; i < 16; ++i) {
tempC = tempC + (myCRC[i] << i);
}
myC = tempC;
return;
}
|