1 |
cafagna |
1.1 |
///////////////PAMELA PACKETS READER/////////////////////////////////
|
2 |
|
|
#include "descript.h"
|
3 |
cafagna |
1.2 |
#include "flag.h"
|
4 |
cafagna |
1.1 |
|
5 |
|
|
#include "CRC.h"
|
6 |
|
|
|
7 |
|
|
short int CRC_H(char [], char []);
|
8 |
|
|
|
9 |
|
|
void verify(char fni[], char inf[], char log[], char pam[],
|
10 |
|
|
char fno[], char path[], char name_ini[], char name_in[], int packet_type[],
|
11 |
cafagna |
1.2 |
float IndexQ, int r_counter, int real_route[])
|
12 |
cafagna |
1.1 |
{
|
13 |
|
|
FILE *fo_log, *fo_inf, *fo_work, *fo_miss, *fo_row;
|
14 |
|
|
|
15 |
|
|
time_t seconds;
|
16 |
cafagna |
1.2 |
|
17 |
cafagna |
1.1 |
struct tm *timeinfo;
|
18 |
|
|
char time_year[5], time_month[5], time_day[5];
|
19 |
|
|
char data_time[80];
|
20 |
|
|
char cirquit_no[10], route_no[80], name_path[80], name_cln2[80];
|
21 |
|
|
bool file_ready, file_deleted, file_archived, file_proces;
|
22 |
cafagna |
1.2 |
int flag_to_transmit=0;
|
23 |
cafagna |
1.1 |
int flag_sec_trans=0; /*Second transmission flag*/
|
24 |
|
|
int num_rows=0;
|
25 |
|
|
int current_route=0;
|
26 |
|
|
|
27 |
|
|
char str_route[10];
|
28 |
|
|
char str_file[80];
|
29 |
|
|
|
30 |
|
|
char ch;
|
31 |
|
|
char miss_file[80];
|
32 |
|
|
char Name_Buf[9]; /*Name buffer*/
|
33 |
|
|
char Name_Buf_add[9]; /*Header buffer*/
|
34 |
|
|
char buff[16];
|
35 |
|
|
char Name_Buf_old[9]; /*Old name buffer*/
|
36 |
|
|
char Name_Buf_add_old[9]; /*Old header buffer*/
|
37 |
|
|
|
38 |
|
|
short int CalcCheckSum=0;
|
39 |
|
|
int num_type=0; /*Packet type number*/
|
40 |
|
|
int num_type1=0;
|
41 |
|
|
int num_type2=0;
|
42 |
|
|
int stop=0;
|
43 |
|
|
int Hex[3];
|
44 |
|
|
int Byte_adr1[4]; /*Bytes for Packet begin packing*/
|
45 |
|
|
int Byte_adr2[4]; /*Bytes for Packet end packing*/
|
46 |
|
|
int packet_counter[NumberPack+1]; /*Counter for each packet type*/
|
47 |
|
|
int count_name_cor=0; /*Counter for packet with corrected name*/
|
48 |
|
|
int er_pack_count=0; /*Error packet counter*/
|
49 |
|
|
int count_miss=0; /*Missed packet counter*/
|
50 |
|
|
int P_er=0; /*Number of packet with counter error*/
|
51 |
|
|
int flag_CRC_H[3]; /*Flag for CRC header error*/
|
52 |
|
|
int flag_pack[3]; /*Flag for error in packet counter*/
|
53 |
|
|
int flag_len[3]; /*Flag for PAMELA packet length error*/
|
54 |
|
|
int flag_len_weak[3]; /*Suspicion flag for PAMELA packet length error*/
|
55 |
|
|
int flag_name[3]; /*Flag for name error*/
|
56 |
|
|
int flag_type[3]; /*Flag for packet type error*/
|
57 |
|
|
int flag_time[3]; /*Flag for time error*/
|
58 |
|
|
int flag_CRC_cor[3]; /*Flag for CRC error correction*/
|
59 |
|
|
int CRC_bad_pack[3]; /*Current header CRC bad packet number*/
|
60 |
|
|
int CRC_Header[3]; /*CRC in header for previous packets*/
|
61 |
|
|
int Mis_group=0; /*Number of missed packet group*/
|
62 |
|
|
short int flags=0; /*Number for all errors*/
|
63 |
|
|
long int tmpP=0; /*Temporary PAMELA packet number*/
|
64 |
|
|
long long int icount=0; /*Number of bytes in identified packets*/
|
65 |
|
|
long long int icount_total=0; /*Total number of bytes*/
|
66 |
|
|
long int icount_int=0; /*Entire part of total file size in Kbytes*/
|
67 |
|
|
long int icount_frac=0; /*Fractional part of total file size*/
|
68 |
|
|
long int N1=0; /*Number of identified PAMELA packets*/
|
69 |
|
|
long int numP[3]; /*Packet numbers for previous packets*/
|
70 |
|
|
long int LenP[3]; /*Packet length for previous packets*/
|
71 |
|
|
unsigned long int time_p[3]; /*Packet time*/
|
72 |
|
|
long int pack_length=0; /*PAMELA packet length*/
|
73 |
|
|
long long int adr_first[3]; /*Start displacement from file begin*/
|
74 |
|
|
long long int adr_last[3]; /*Finish displacement from file begin*/
|
75 |
|
|
long int temp[2];
|
76 |
|
|
char *buffer=new char[Nmax]; /*Buffer for PAMELA current packet*/
|
77 |
|
|
int FLAG_BIG=0; /*Flag for large packet*/
|
78 |
|
|
unsigned long int k=0, j=0;
|
79 |
|
|
int i;
|
80 |
|
|
//initialization , all =0
|
81 |
cafagna |
1.2 |
float process, transmit;
|
82 |
|
|
int output;
|
83 |
|
|
char str[80];
|
84 |
|
|
|
85 |
|
|
FILE *fpar;
|
86 |
|
|
fpar=fopen("/home/pamelaprod/rawreader/bin/parameters.dat","r");
|
87 |
|
|
fscanf(fpar,"%f %s %s %s",&process,str,str,str);
|
88 |
|
|
fscanf(fpar,"%f %s %s %s",&transmit,str,str,str);
|
89 |
|
|
fscanf(fpar,"%i",&output);
|
90 |
|
|
fclose(fpar);
|
91 |
cafagna |
1.1 |
|
92 |
|
|
stringstream oss, oss1;
|
93 |
|
|
|
94 |
|
|
TSQLServer *sqlServer = TSQLServer::Connect("mysql://pamela_1.ntsomz.ru:3306/rawreader", "pamelaprod", "rawprod");
|
95 |
|
|
|
96 |
|
|
oss.str("");
|
97 |
|
|
oss<<"select * from FILES1";
|
98 |
|
|
TSQLResult *res1=sqlServer->Query(oss.str().c_str());
|
99 |
|
|
num_rows=res1->GetRowCount();
|
100 |
|
|
if (num_rows>0)
|
101 |
|
|
{
|
102 |
|
|
oss.str("");
|
103 |
|
|
oss<<"select max(my_route) from FILES1";
|
104 |
|
|
TSQLResult *res2=sqlServer->Query(oss.str().c_str());
|
105 |
|
|
TSQLRow *row=res2->Next();
|
106 |
|
|
strcpy(str_route,row->GetField(0));
|
107 |
|
|
|
108 |
|
|
strcpy(str_file,inf);
|
109 |
|
|
str_file[strlen(inf)-9]='\0';
|
110 |
|
|
strcat(str_file,"_tmp.dat");
|
111 |
|
|
fo_row=fopen(str_file,"w+");
|
112 |
|
|
fprintf(fo_row,"%s",str_route);
|
113 |
|
|
fseek(fo_row,0,0);
|
114 |
|
|
fscanf(fo_row,"%i",¤t_route);
|
115 |
|
|
current_route+=1;
|
116 |
|
|
fclose(fo_row);
|
117 |
|
|
remove(str_file);
|
118 |
|
|
}
|
119 |
|
|
else
|
120 |
|
|
{
|
121 |
|
|
current_route=1;
|
122 |
|
|
}
|
123 |
|
|
|
124 |
|
|
for (i=0; i<NumberPack+1; i++) packet_counter[i]=0;
|
125 |
|
|
for (i=0; i<3; i++)
|
126 |
|
|
{numP[i]=0; time_p[i]=0; CRC_Header[i]=0; CRC_bad_pack[i]=0;
|
127 |
|
|
flag_CRC_H[i]=0; flag_len[i]=0; flag_len_weak[i]=0; flag_pack[i]=0; flag_CRC_cor[i]=0;
|
128 |
|
|
flag_name[i]=0; flag_type[i]=0; flag_time[i]=0;
|
129 |
|
|
LenP[i]=0;
|
130 |
|
|
adr_first[i]=0; adr_last[i]=0;
|
131 |
|
|
Hex[i]=0;}
|
132 |
|
|
for (i=0; i<4; i++) {Byte_adr1[i]=0; Byte_adr2[i]=0;}
|
133 |
|
|
for (i=0; i<2; i++) temp[i]=0;
|
134 |
|
|
|
135 |
|
|
ifstream fin;
|
136 |
|
|
ofstream fo_pam;
|
137 |
|
|
/**********************OPEN NECESSARY FILES************************/
|
138 |
|
|
/******************************************************************/
|
139 |
cafagna |
1.2 |
fin.open(fni, ios::binary); // open input file "xxx_mmm_nnnnn__cln1.pam"
|
140 |
|
|
if(fin.good()==0) {cerr<<"can not open input file "<<fni<<"\n"; exit(1);}
|
141 |
cafagna |
1.1 |
|
142 |
|
|
fo_work=fopen(fno, "wb"); //open output help file "work.dat"
|
143 |
|
|
if(fo_work==NULL) {cerr<<"can not open outputfile"; exit(1);}
|
144 |
|
|
|
145 |
cafagna |
1.2 |
fo_log=fopen(log, "wb"); //open output file "xxx_mmm_nnnnn_cln2.log"
|
146 |
cafagna |
1.1 |
if(fo_log==NULL) {cerr<<"can not open log file"; exit(1);}
|
147 |
|
|
|
148 |
cafagna |
1.2 |
fo_pam.open(pam, ios::binary); //open output file "xxx_mmm_nnnnn_cln2.pam"
|
149 |
cafagna |
1.1 |
if(fo_pam.good()==0) {cerr<<"can not open pam file"; exit(1);}
|
150 |
|
|
|
151 |
cafagna |
1.2 |
fo_inf=fopen(inf, "wb"); //open output file "xxx_mmm_nnnnn_cln2.inf"
|
152 |
cafagna |
1.1 |
if(fo_inf==NULL) {cerr<<"can not open inf file"; exit(1);}
|
153 |
|
|
|
154 |
|
|
strcpy(miss_file,path);
|
155 |
|
|
strncat(miss_file,name_in,strlen(name_in)-8);
|
156 |
|
|
fo_miss=fopen(strcat(miss_file,"mis_cln2.dat"), "wb");
|
157 |
cafagna |
1.2 |
//open output file "xxx_mmm_nnnnn_mis_cln2.dat"
|
158 |
cafagna |
1.1 |
if(fo_miss==NULL) {cerr<<"can not open miss file"; exit(1);}
|
159 |
|
|
/******************************************************************/
|
160 |
|
|
/******************************************************************/
|
161 |
|
|
|
162 |
|
|
//Write proccessed filename in help file
|
163 |
cafagna |
1.2 |
// fprintf(fo_work,"file name=%s\n",name_in);
|
164 |
|
|
|
165 |
cafagna |
1.1 |
/******************************************************************/
|
166 |
|
|
/******************MAIN READING CYCLE BEGIN************************/
|
167 |
|
|
/******************************************************************/
|
168 |
|
|
|
169 |
|
|
while(fin.eof()==0)
|
170 |
|
|
{
|
171 |
|
|
num_type=0; num_type1=0; num_type2=0;
|
172 |
|
|
|
173 |
|
|
/**********************data reading********************************/
|
174 |
|
|
if ((N1==0)&&(icount_total==0)) {fin.read(Name_Buf,8); icount_total+=8;}
|
175 |
|
|
|
176 |
|
|
/*******************temporary packet number************************/
|
177 |
|
|
tmpP=(long int)(unsigned char)(Name_Buf[7])+
|
178 |
cafagna |
1.2 |
256*(long int)(unsigned char)(Name_Buf[6])+
|
179 |
cafagna |
1.1 |
256*256*(long int)(unsigned char)(Name_Buf[5]);
|
180 |
|
|
|
181 |
|
|
if (N1==0) numP[2]=tmpP-1; //initial packet identification
|
182 |
|
|
|
183 |
|
|
/******************packet type identification**********************/
|
184 |
|
|
for (i=0;i<NumberPack;i++)
|
185 |
|
|
{if (packet_type[i]==(int)(unsigned char)(Name_Buf[3]))
|
186 |
|
|
num_type1=i+1;
|
187 |
|
|
if (packet_type[i]==(int)(unsigned char)(Name_Buf[4]))
|
188 |
|
|
num_type2=i+1;}
|
189 |
|
|
if ((num_type1==num_type2)&&(num_type1!=0)) num_type=num_type1;
|
190 |
|
|
if ((num_type1==0)&&(num_type2!=0)) num_type=num_type2;
|
191 |
|
|
if ((num_type1!=0)&&(num_type2==0)) num_type=num_type1;
|
192 |
|
|
|
193 |
|
|
///////////////////////////////////////////////////////////////////
|
194 |
|
|
////////////////// PAMELA PACKET IDENTIFICATION////////////////////
|
195 |
|
|
///////////////////////////////////////////////////////////////////
|
196 |
|
|
if (((int)(unsigned char)Name_Buf[0]==CODE_BYTE1&&
|
197 |
|
|
(tmpP==numP[2]+1)&&num_type!=0)||
|
198 |
|
|
((int)(unsigned char)Name_Buf[1]==CODE_BYTE2&&
|
199 |
|
|
(tmpP==numP[2]+1)&&num_type!=0)||
|
200 |
|
|
((int)(unsigned char)Name_Buf[2]==CODE_BYTE3&&
|
201 |
|
|
(tmpP==numP[2]+1)&&num_type!=0)||
|
202 |
|
|
((int)(unsigned char)Name_Buf[0]==CODE_BYTE1&&
|
203 |
|
|
(int)(unsigned char)Name_Buf[1]==CODE_BYTE2&&
|
204 |
cafagna |
1.2 |
(int)(unsigned char)Name_Buf[2]==CODE_BYTE3&&num_type1!=0&&num_type1==num_type2)||
|
205 |
cafagna |
1.1 |
((int)(unsigned char)Name_Buf[0]==CODE_BYTE1&&
|
206 |
|
|
(int)(unsigned char)Name_Buf[1]==CODE_BYTE2&&
|
207 |
|
|
(int)(unsigned char)Name_Buf[2]==CODE_BYTE3&&
|
208 |
|
|
(tmpP==numP[2]+1)))
|
209 |
|
|
{if (N1==0) {for (i=0;i<8;i++) buffer[i]=Name_Buf[i]; }
|
210 |
|
|
N1+=1; FLAG_BIG=0;
|
211 |
|
|
if (N1==1) {icount+=8;}
|
212 |
|
|
packet_counter[num_type]+=1; //count packet number for each type
|
213 |
cafagna |
1.2 |
// if ((fmod((float)(tmpP),(float)(1000.))==0.)&&(tmpP!=0)) cout<<"verifying "<<tmpP<<"\n";
|
214 |
cafagna |
1.1 |
|
215 |
|
|
if (N1!=1)
|
216 |
|
|
{
|
217 |
|
|
/**************PAMELA PREVIOUS PACKET END DISPLACEMENT*************/
|
218 |
|
|
if ((icount-8-adr_first[2]+1-LenP[2]-16)<=Limit) {adr_last[2]=icount-8;} //end byte for previous packet
|
219 |
|
|
else if ((icount-8-adr_first[2]+1-LenP[2]-16)>Limit) {adr_last[2]=adr_first[2]+Limit;} //end byte for previous packet
|
220 |
|
|
/**************PAMELA PACKET LENGTH ERROR ANALYSIS*****************/
|
221 |
|
|
if ( (flag_CRC_H[2]==1)&&(GLOBAL_LEN_ER>0)&&
|
222 |
|
|
( ((adr_last[2]-adr_first[2]+1)<(LenP[2]+16))
|
223 |
|
|
||((adr_last[2]-adr_first[2]+1-LenP[2]-16)>64) ) )
|
224 |
|
|
{flag_len[2]=1;
|
225 |
cafagna |
1.2 |
// cout<<"pack num "<<numP[2]<<" len="<<LenP[2]<<" true len="<<adr_last[2]-adr_first[2]-16<<" Type="<<num_type<<"\n";
|
226 |
|
|
}
|
227 |
cafagna |
1.1 |
if ( (flag_CRC_H[2]==0)&&(GLOBAL_LEN_ER>0)&&
|
228 |
|
|
( ((adr_last[2]-adr_first[2]+1)<(LenP[2]+16))||((adr_last[2]-adr_first[2]+1-LenP[2]-16)>64) ) )
|
229 |
|
|
{flag_len_weak[2]=1;
|
230 |
cafagna |
1.2 |
// cout<<"weak length error; pack num "<<numP[2]<<" len="<<LenP[2]<<" true len="<<adr_last[2]-adr_first[2]-16<<" Type="<<num_type<<"\n";
|
231 |
|
|
}
|
232 |
cafagna |
1.1 |
|
233 |
|
|
if ((GLOBAL_LEN_ER>0)&&(flag_len[2]==1))
|
234 |
|
|
{
|
235 |
cafagna |
1.2 |
//Write data in file "xxx_mmm_nnnnn_cln2.pam"
|
236 |
cafagna |
1.1 |
for (i=0;i<adr_last[2]-adr_first[2]+1;i++)
|
237 |
|
|
{fo_pam<< buffer[i];}
|
238 |
|
|
}
|
239 |
cafagna |
1.2 |
else if ((GLOBAL_LEN_ER>0)&&(flag_len[2]!=1)&&(flag_len_weak[2]!=1))
|
240 |
cafagna |
1.1 |
{
|
241 |
cafagna |
1.2 |
//Write data in file "xxx_mmm_nnnnn_cln2.pam"
|
242 |
cafagna |
1.1 |
for (i=0;i<LenP[2]+16;i++)
|
243 |
|
|
{fo_pam<< buffer[i];}
|
244 |
|
|
adr_last[2]=adr_first[2]+LenP[2]+15;
|
245 |
|
|
icount=adr_first[2]+15+LenP[2]+8;
|
246 |
|
|
}
|
247 |
cafagna |
1.2 |
else if ((GLOBAL_LEN_ER>0)&&(flag_len[2]!=1)&&(flag_len_weak[2]==1))
|
248 |
|
|
{
|
249 |
|
|
//Write data in file "xxx_mmm_nnnnn_cln2.pam"
|
250 |
|
|
for (i=0;i<adr_last[2]-adr_first[2]+1;i++)
|
251 |
|
|
{fo_pam<< buffer[i];}
|
252 |
|
|
}
|
253 |
cafagna |
1.1 |
else if ((GLOBAL_LEN_ER==0)&&(adr_last[2]-adr_first[2]+1-LenP[2]-16>=0))
|
254 |
|
|
{
|
255 |
|
|
for (i=0;i<LenP[2]+16;i++)
|
256 |
|
|
{fo_pam<< buffer[i];}
|
257 |
|
|
adr_last[2]=adr_first[2]+LenP[2]+15;
|
258 |
|
|
icount=adr_first[2]+15+LenP[2]+8;
|
259 |
|
|
}
|
260 |
|
|
delete [] buffer;
|
261 |
|
|
buffer=new char[Nmax];
|
262 |
|
|
for (i=0;i<8;i++) buffer[i]=Name_Buf[i];
|
263 |
|
|
|
264 |
|
|
temp[1]=adr_last[2];
|
265 |
|
|
for (i=0;i<4;i++) Byte_adr2[i]=0;
|
266 |
|
|
for (i=0;i<4;i++)
|
267 |
|
|
{if (temp[1]/(long int)(pow(256.,3-i))>=1)
|
268 |
|
|
{Byte_adr2[3-i]=(int)(temp[1]/(long int)(pow(256.,3-i)));
|
269 |
|
|
temp[1]=temp[1]-(long int)pow(256.,3-i)*
|
270 |
|
|
(int)(temp[1]/(long int)(pow(256.,3-i)));}}
|
271 |
cafagna |
1.2 |
//Write previous packet end displacement in xxx_mmm_nnnnn_cln2.log file
|
272 |
cafagna |
1.1 |
for (i=0;i<4;i++) fprintf(fo_log,"%1c",char(Byte_adr2[i]));
|
273 |
|
|
}
|
274 |
|
|
/*********************reading remaining header********************/
|
275 |
|
|
fin.read(Name_Buf_add, 8);
|
276 |
|
|
if (fin.eof()) break;
|
277 |
|
|
icount+=8; icount_total+=8;
|
278 |
|
|
for (i=0;i<8;i++) buffer[i+8]=Name_Buf_add[i];
|
279 |
|
|
|
280 |
|
|
//packet length
|
281 |
|
|
pack_length=(long int)(unsigned char)(Name_Buf_add[6])+
|
282 |
|
|
256*(long int)(unsigned char)(Name_Buf_add[5])+
|
283 |
|
|
256*256*(long int)(unsigned char)(Name_Buf_add[4]);
|
284 |
|
|
/***********PACKET HEADER DATA ANALYSIS****************************/
|
285 |
|
|
switch (N1)
|
286 |
|
|
{
|
287 |
|
|
case 1:{
|
288 |
|
|
LenP[2]=pack_length;
|
289 |
|
|
numP[2]=(long int)(unsigned char)(Name_Buf[7])+
|
290 |
|
|
256*(long int)(unsigned char)(Name_Buf[6])+
|
291 |
|
|
256*256*(long int)(unsigned char)(Name_Buf[5]);
|
292 |
|
|
time_p[2]=(long int)(unsigned char)(Name_Buf_add[3])+
|
293 |
|
|
256*(long int)(unsigned char)(Name_Buf_add[2])+
|
294 |
|
|
256*256*(long int)(unsigned char)(Name_Buf_add[1])+
|
295 |
|
|
256*256*256*(long int)(unsigned char)(Name_Buf_add[0]);
|
296 |
|
|
|
297 |
|
|
CRC_Header[2]=(int)(unsigned char)(Name_Buf_add[7]);
|
298 |
|
|
adr_first[2]=icount-15;
|
299 |
|
|
CRC_bad_pack[2]=0;
|
300 |
|
|
flag_CRC_H[2]=0;
|
301 |
|
|
flag_pack[2]=0;
|
302 |
|
|
flag_name[2]=0;
|
303 |
|
|
flag_type[2]=0;
|
304 |
|
|
flag_time[2]=0;
|
305 |
|
|
flag_CRC_cor[2]=0;
|
306 |
|
|
for (i=0; i<2; i++)
|
307 |
|
|
{numP[i]=numP[2]; time_p[i]=time_p[2];
|
308 |
|
|
CRC_Header[i]=CRC_Header[2];
|
309 |
|
|
LenP[i]=LenP[2];
|
310 |
|
|
adr_first[i]=adr_first[2];
|
311 |
|
|
CRC_bad_pack[i]=CRC_bad_pack[2];
|
312 |
|
|
flag_CRC_H[i]=flag_CRC_H[2];
|
313 |
|
|
flag_pack[i]=flag_pack[2];
|
314 |
|
|
flag_name[i]=flag_name[2];
|
315 |
|
|
flag_type[i]=flag_type[2];
|
316 |
|
|
flag_time[i]=flag_time[2];
|
317 |
|
|
flag_CRC_cor[i]=flag_CRC_cor[2];}
|
318 |
|
|
break;
|
319 |
|
|
}
|
320 |
|
|
default:{
|
321 |
|
|
for (i=0; i<2; i++)
|
322 |
|
|
{numP[i]=numP[i+1];
|
323 |
|
|
time_p[i]=time_p[i+1];
|
324 |
|
|
CRC_Header[i]=CRC_Header[i+1];
|
325 |
|
|
CRC_bad_pack[i]=CRC_bad_pack[i+1];
|
326 |
|
|
LenP[i]=LenP[i+1];
|
327 |
|
|
adr_first[i]=adr_first[i+1];
|
328 |
|
|
adr_last[i]=adr_last[i+1];
|
329 |
|
|
flag_CRC_H[i]=flag_CRC_H[i+1];
|
330 |
|
|
flag_len[i]=flag_len[i+1];
|
331 |
|
|
flag_len_weak[i]=flag_len_weak[i+1];
|
332 |
|
|
flag_pack[i]=flag_pack[i+1];
|
333 |
|
|
flag_name[i]=flag_name[i+1];
|
334 |
|
|
flag_type[i]=flag_type[i+1];
|
335 |
|
|
flag_time[i]=flag_time[i+1];
|
336 |
|
|
flag_CRC_cor[i]=flag_CRC_cor[i+1];}
|
337 |
|
|
numP[2]=(long int)(unsigned char)(Name_Buf[7])+
|
338 |
|
|
256*(long int)(unsigned char)(Name_Buf[6])+
|
339 |
|
|
256*256*(long int)(unsigned char)(Name_Buf[5]);
|
340 |
|
|
time_p[2]=(long int)(unsigned char)(Name_Buf_add[3])+
|
341 |
|
|
256*(long int)(unsigned char)(Name_Buf_add[2])+
|
342 |
|
|
256*256*(long int)(unsigned char)(Name_Buf_add[1])+
|
343 |
|
|
256*256*256*(long int)(unsigned char)(Name_Buf_add[0]);
|
344 |
|
|
|
345 |
|
|
CRC_Header[2]=(int)(unsigned char)(Name_Buf_add[7]);
|
346 |
|
|
CRC_bad_pack[2]=0;
|
347 |
|
|
adr_first[2]=icount-15;
|
348 |
|
|
flag_CRC_H[2]=0;
|
349 |
|
|
flag_len[2]=0;
|
350 |
|
|
flag_len_weak[2]=0;
|
351 |
|
|
flag_pack[2]=0;
|
352 |
|
|
flag_name[2]=0;
|
353 |
|
|
flag_type[2]=0;
|
354 |
|
|
flag_time[2]=0;
|
355 |
|
|
flag_CRC_cor[2]=0;
|
356 |
|
|
LenP[2]=pack_length;
|
357 |
|
|
}
|
358 |
|
|
}
|
359 |
|
|
/********packet header CRC error analysis**************************/
|
360 |
|
|
// CalcCheckSum=CRC_H(Name_Buf, Name_Buf_add);
|
361 |
|
|
|
362 |
|
|
for (i=0; i<8; i++)
|
363 |
|
|
{buff[i]=Name_Buf[i];
|
364 |
|
|
buff[i+8]=Name_Buf_add[i];}
|
365 |
|
|
|
366 |
|
|
CalcCheckSum=(short int)(unsigned char)CM_Compute_CRC16(0, (unsigned char*)&buff, 15);
|
367 |
|
|
if (CalcCheckSum!=(short int)(unsigned char)(Name_Buf_add[7]))
|
368 |
cafagna |
1.2 |
{cerr<<"checksum error "<<N1<<" Pack="<<numP[2]<<" "<<num_type<<" "<<bitset<8>(CalcCheckSum)<<
|
369 |
|
|
" CRC="<<bitset<8>((int)(unsigned char)(Name_Buf_add[7]))<<"\n";
|
370 |
cafagna |
1.1 |
CRC_bad_pack[2]=numP[2];
|
371 |
|
|
flag_CRC_H[2]=1;}
|
372 |
|
|
/*********packet counter error analysis****************************/
|
373 |
|
|
if ((numP[2]!=(numP[1]+1))&&(N1!=1)&&
|
374 |
|
|
(flag_len[1]==0)&&(CRC_bad_pack[2]==numP[2])) flag_pack[2]=1;
|
375 |
|
|
|
376 |
|
|
if ((numP[1]!=(numP[0]+1))&&(numP[1]!=(numP[2]-1))&&(N1!=1)&&
|
377 |
|
|
(CRC_bad_pack[1]==numP[1]))
|
378 |
|
|
{P_er=N1-1; flag_pack[1]=1;
|
379 |
|
|
//Correct error packet number//
|
380 |
|
|
tmpP=numP[0]+1;
|
381 |
|
|
for (i=0;i<3;i++) Hex[i]=0;
|
382 |
|
|
for (i=0;i<3;i++)
|
383 |
|
|
{if (tmpP/(long int) (pow(256.,2-i))>=1)
|
384 |
|
|
{Hex[2-i]=(int)(tmpP/(long int)(pow(256.,2-i)));
|
385 |
|
|
tmpP=tmpP-(long int)(pow(256.,2-i)*
|
386 |
|
|
(int)(tmpP/(long int)(pow(256.,2-i)) ));}}
|
387 |
|
|
for (i=5;i<8;i++) (Name_Buf_old[i]=(char)(Hex[7-i]));
|
388 |
|
|
if (CRC_Header[1]==(int)(CRC_H(Name_Buf_old, Name_Buf_add_old)))
|
389 |
|
|
{flag_CRC_cor[1]=1;}
|
390 |
|
|
|
391 |
|
|
tmpP=numP[2]-1;
|
392 |
|
|
for (i=0;i<3;i++) Hex[i]=0;
|
393 |
|
|
for (i=0;i<3;i++)
|
394 |
|
|
{if (tmpP/(long int)(pow(256.,2-i))>=1)
|
395 |
|
|
{Hex[2-i]=(int)(tmpP/(long int)(pow(256.,2-i)));
|
396 |
|
|
tmpP=tmpP-(long int)pow(256.,2-i)*
|
397 |
|
|
(int)(tmpP/(long int)(pow(256.,2-i)));}}
|
398 |
|
|
for (i=5;i<8;i++) (Name_Buf_old[i]=(char)(Hex[7-i]));
|
399 |
|
|
if (CRC_Header[1]==(int)(CRC_H(Name_Buf_old, Name_Buf_add_old)))
|
400 |
|
|
{flag_CRC_cor[1]=1;}
|
401 |
|
|
}
|
402 |
|
|
/*********************Missing packet analysis**********************/
|
403 |
|
|
/**packet numbers: 10 11 (12 15 19) 20 ****************************/
|
404 |
cafagna |
1.2 |
/***********missed packets: 16 17 18 ********************************/
|
405 |
cafagna |
1.1 |
if ((numP[1]>numP[0]+1)&&(numP[1]<numP[2]-1)&&
|
406 |
|
|
(flag_pack[0]==0)&&(flag_pack[1]==0)&&(flag_pack[2]==0))
|
407 |
|
|
{Mis_group+=1;
|
408 |
|
|
fprintf(fo_miss,"%9i%9i\n",numP[1]+1,numP[2]-1);
|
409 |
|
|
count_miss+=numP[2]-numP[1]-1;}
|
410 |
|
|
/**packet numbers: 10 (11 12 15) 19 20 ****************************/
|
411 |
cafagna |
1.2 |
/***********missed packets: 13 14 ***********************************/
|
412 |
cafagna |
1.1 |
else if ((numP[1]>=numP[0]+1)&&(numP[1]<numP[2]-1)&&
|
413 |
|
|
(flag_pack[2]==0)&&(flag_pack[1]==0)&&(flag_pack[0]==0))
|
414 |
|
|
{Mis_group+=1;
|
415 |
|
|
fprintf(fo_miss,"%9i%9i\n",numP[0]+2,numP[2]-1);
|
416 |
|
|
count_miss+=numP[2]-numP[1]-1;}
|
417 |
|
|
/**packet numbers: 10 (11 20 15) 16 17 ****************************/
|
418 |
cafagna |
1.2 |
/********missed packets number =2 ***********************************/
|
419 |
cafagna |
1.1 |
else if ((numP[0]<numP[2]-2)&&
|
420 |
cafagna |
1.2 |
(flag_pack[2]==0)&&(flag_pack[1]==1)&&(flag_pack[0]==0))
|
421 |
cafagna |
1.1 |
{Mis_group+=1;
|
422 |
|
|
fprintf(fo_miss,"%9i%9i%9i\n",numP[0]+1,numP[1],numP[2]-1);
|
423 |
|
|
count_miss+=numP[2]-numP[0]-2;}
|
424 |
|
|
|
425 |
|
|
/**************Time error******************************************/
|
426 |
|
|
if ((numP[2]>=numP[0]+2)&&(flag_pack[2]==0)&&(flag_pack[0]==0)&&
|
427 |
|
|
(flag_time[0]==0)&&(time_p[2]>time_p[0])&&
|
428 |
|
|
((time_p[1]<time_p[0])||(time_p[1]>time_p[2])))
|
429 |
|
|
{flag_time[1]=1;}
|
430 |
|
|
|
431 |
|
|
/**************Error number calculation****************************/
|
432 |
|
|
if (N1!=1)
|
433 |
|
|
{flags=(short int)((float)(flag_len_weak[1])+
|
434 |
|
|
pow((float)(2*flag_CRC_H[1]),1)+
|
435 |
|
|
pow((float)(2*flag_len[1]),2)+
|
436 |
|
|
pow((float)(2*flag_pack[1]),3)+
|
437 |
|
|
pow((float)(2*flag_name[1]),4)+
|
438 |
|
|
pow((float)(2*flag_type[1]),5)+
|
439 |
|
|
pow((float)(2*flag_time[1]),6)+
|
440 |
|
|
pow((float)(2*flag_CRC_cor[1]),7));
|
441 |
|
|
if (flags!=0) er_pack_count+=1;
|
442 |
|
|
//Write error number in log and work.dat files
|
443 |
|
|
fprintf(fo_log,"%1c",char(flags));
|
444 |
|
|
// fprintf(fo_work," error num.=%i CRC=%i Calc=%i\n",
|
445 |
|
|
// flags,bitset<8>(CRC_Header[1]),
|
446 |
|
|
// (int)(CRC_H(Name_Buf_old, Name_Buf_add_old)));
|
447 |
|
|
}
|
448 |
|
|
/***********************NAME ERROR*********************************/
|
449 |
|
|
if (((int)(unsigned char)Name_Buf[0]!=CODE_BYTE1)||
|
450 |
|
|
((int)(unsigned char)Name_Buf[1]!=CODE_BYTE2)||
|
451 |
|
|
((int)(unsigned char)Name_Buf[2]!=CODE_BYTE3))
|
452 |
|
|
{
|
453 |
|
|
Name_Buf[0]=(char)(CODE_BYTE1);
|
454 |
|
|
Name_Buf[1]=(char)(CODE_BYTE2);
|
455 |
|
|
Name_Buf[2]=(char)(CODE_BYTE3);
|
456 |
|
|
flag_name[2]=1;
|
457 |
|
|
count_name_cor+=1;
|
458 |
|
|
buffer[0]=(char)(CODE_BYTE1);
|
459 |
|
|
buffer[1]=(char)(CODE_BYTE2);
|
460 |
|
|
buffer[2]=(char)(CODE_BYTE3);
|
461 |
|
|
if (CRC_Header[2]==(int)(CRC_H(Name_Buf, Name_Buf_add)))
|
462 |
|
|
flag_CRC_cor[2]=1;
|
463 |
|
|
}
|
464 |
|
|
|
465 |
|
|
/***********************PACKET TYPE ERROR**************************/
|
466 |
|
|
if ((num_type==0)||(num_type1==0)||(num_type2==0)) flag_type[2]=1;
|
467 |
|
|
|
468 |
|
|
/******************PAMELA BEGIN PACKET DISPLACEMENT****************/
|
469 |
|
|
temp[0]=adr_first[2];
|
470 |
|
|
for (i=0;i<4;i++) Byte_adr1[i]=0;
|
471 |
|
|
for (i=0;i<4;i++)
|
472 |
|
|
{if (temp[0]/(long int)(pow(256.,3-i))>=1)
|
473 |
|
|
{Byte_adr1[3-i]=(int)(temp[0]/(long int)(pow(256.,3-i)));
|
474 |
|
|
temp[0]=temp[0]-(long int)pow(256.,3-i)*
|
475 |
|
|
(int)(temp[0]/(long int)(pow(256.,3-i)));}
|
476 |
|
|
}
|
477 |
|
|
|
478 |
|
|
//Write packet type and begin displacement in log and work.dat files
|
479 |
|
|
// fprintf(fo_work,"Type %i: num. %i: first=%i:",
|
480 |
|
|
// num_type, numP[2], adr_first[2]);
|
481 |
|
|
fprintf(fo_log,"%1c",char(num_type));
|
482 |
|
|
for (i=0;i<4;i++) fprintf(fo_log,"%1c",char(Byte_adr1[i]));
|
483 |
|
|
|
484 |
|
|
/**************PAMELA PACKET OLD BUFFER***************************/
|
485 |
|
|
for (i=0;i<8;i++)
|
486 |
|
|
{Name_Buf_old[i]=Name_Buf[i];Name_Buf_add_old[i]=Name_Buf_add[i];}
|
487 |
|
|
|
488 |
|
|
/**********************data reading********************************/
|
489 |
|
|
fin.seekg(-1,ios::cur); icount-=1; icount_total-=1;
|
490 |
|
|
fin.read(Name_Buf,8);
|
491 |
|
|
if (fin.eof()) break;
|
492 |
|
|
icount+=8; icount_total+=8;
|
493 |
|
|
for (i=0;i<7;i++) buffer[i+16]=Name_Buf[i+1];
|
494 |
|
|
}
|
495 |
|
|
///////////////////////////////////////////////////////////////////
|
496 |
|
|
///////////////////////////////////////////////////////////////////
|
497 |
|
|
///////////////////////////////////////////////////////////////////
|
498 |
|
|
/**********************data reading********************************/
|
499 |
|
|
fin.get(ch);
|
500 |
|
|
if (fin.eof()) {break;}
|
501 |
|
|
icount_total+=1;
|
502 |
cafagna |
1.2 |
// if (fmod( double(icount_total), double(100000000.))==double(0.)) {cout<<"Mbytes="<<icount_total/1000000.<<"\n";}
|
503 |
cafagna |
1.1 |
if ((N1>0)&&(FLAG_BIG==0)) icount+=1;
|
504 |
|
|
for (i=0;i<7;i++) Name_Buf[i]=Name_Buf[i+1];
|
505 |
|
|
Name_Buf[7]=ch; /*for(i=0;i<8;i++) printf("%x",(int)(unsigned char)Name_Buf[i]); printf("\n");*/
|
506 |
|
|
if ((icount-adr_first[2]-1)<Nmax)
|
507 |
|
|
{buffer[icount-adr_first[2]]=ch;}
|
508 |
|
|
else
|
509 |
|
|
{flag_len[2]=1;
|
510 |
cafagna |
1.2 |
// if (FLAG_BIG==0) {cout<<"too long packet "<<numP[2]<<"\n";}
|
511 |
cafagna |
1.1 |
FLAG_BIG=1;
|
512 |
|
|
}
|
513 |
|
|
}
|
514 |
|
|
/******************************************************************/
|
515 |
|
|
/********************MAIN READING CYCLE END************************/
|
516 |
|
|
/******************************************************************/
|
517 |
|
|
|
518 |
|
|
/*************PAMELA LAST PACKET END DISPLACEMENT******************/
|
519 |
|
|
if (FLAG_BIG==0) {adr_last[2]=icount;}
|
520 |
|
|
else {adr_last[2]=adr_first[2]+Limit;}
|
521 |
|
|
if ((adr_last[2]-adr_first[2]+1-LenP[2]-16>64)||(adr_last[2]-adr_first[2]+1-LenP[2]-16<0)) flag_len[2]=1;
|
522 |
|
|
if ( (flag_len[2]!=1)&&(flag_CRC_H[2]!=1) )
|
523 |
|
|
{adr_last[2]=adr_first[2]+LenP[2]+15;}
|
524 |
|
|
temp[1]=adr_last[2];
|
525 |
|
|
for (i=0;i<4;i++) Byte_adr2[i]=0;
|
526 |
|
|
for (i=0;i<4;i++)
|
527 |
|
|
{if (temp[1]/(long int)(pow(256.,3-i))>=1)
|
528 |
|
|
{Byte_adr2[3-i]=(int)(temp[1]/(long int)(pow(256.,3-i)));
|
529 |
|
|
temp[1]=temp[1]-(long int)pow(256.,3-i)*
|
530 |
|
|
(int)(temp[1]/(long int)(pow(256.,3-i)));}}
|
531 |
|
|
|
532 |
|
|
/*********PAMELA LAST PACKET LENGTH ERROR ANALYSIS*****************/
|
533 |
|
|
// if ((adr_last[2]-adr_first[2]+1)!=(LenP[2]+(64-LenP[2]%64)))
|
534 |
|
|
// {flag_len[2]=1;}
|
535 |
|
|
|
536 |
|
|
//Write last packet end displacement in log and work.dat files
|
537 |
|
|
for (i=0;i<4;i++) fprintf(fo_log,"%1c",char(Byte_adr2[i]));
|
538 |
|
|
// fprintf(fo_work," last=%i",adr_last[2]);
|
539 |
|
|
|
540 |
|
|
//Write error number in log and work.dat files
|
541 |
|
|
flags=(short int)(pow((float)(2*flag_CRC_H[2]),1)+
|
542 |
|
|
pow((float)(2*flag_len[2]),2)+
|
543 |
|
|
pow((float)(2*flag_pack[2]),3)+
|
544 |
|
|
pow((float)(2*flag_name[2]),4)+
|
545 |
|
|
pow((float)(2*flag_type[2]),5)+
|
546 |
|
|
pow((float)(2*flag_time[2]),6)+
|
547 |
|
|
pow((float)(2*flag_CRC_cor[2]),7));
|
548 |
|
|
if ((flags!=0)&&(N1>0)) er_pack_count+=1;
|
549 |
|
|
fprintf(fo_log,"%1c",char(flags));
|
550 |
|
|
// fprintf(fo_work," error num.=%i CRC=%i Calc=%i\n",
|
551 |
|
|
// flags,bitset<8>(CRC_Header[2]),
|
552 |
|
|
// (int)(CRC_H(Name_Buf, Name_Buf_add)));
|
553 |
|
|
|
554 |
|
|
//Write inf file
|
555 |
|
|
fprintf(fo_inf,"file name=%s\n",name_in);
|
556 |
|
|
fprintf(fo_inf,"%lli bytes\n",icount_total);
|
557 |
|
|
icount_int = (int)(icount_total/1024);
|
558 |
|
|
icount_frac= icount_total%1024;
|
559 |
|
|
fprintf(fo_inf,"file size= %i,%i kByte \n", icount_int,
|
560 |
|
|
icount_frac);
|
561 |
|
|
|
562 |
|
|
fprintf(fo_inf,"number of identified packets= %i\n", N1);
|
563 |
|
|
fprintf(fo_inf,"number of PAMELA missed packets= %i\n",
|
564 |
|
|
count_miss);
|
565 |
|
|
fprintf(fo_inf,"number of PAMELA packets with error= %i\n",
|
566 |
|
|
er_pack_count);
|
567 |
|
|
fprintf(fo_inf,"number of PAMELA packets with corrected name= %i\n",
|
568 |
|
|
count_name_cor);
|
569 |
|
|
fprintf(fo_inf,"number of PAMELA packets with non identified type");
|
570 |
|
|
fprintf(fo_inf," =%i\n",packet_counter[0]);
|
571 |
|
|
|
572 |
|
|
for (i=1;i<NumberPack;i++)
|
573 |
|
|
{
|
574 |
|
|
fprintf(fo_inf,"Type %x number of PAMELA packets= %i\n",
|
575 |
|
|
packet_type[i-1], packet_counter[i]);
|
576 |
|
|
}
|
577 |
|
|
//Write data in file "mmm_counter_nnnnn_cln2.pam"
|
578 |
|
|
for (i=0;i<adr_last[2]-adr_first[2]+1;i++)
|
579 |
|
|
{fo_pam<<buffer[i];}
|
580 |
|
|
|
581 |
|
|
time(&seconds);
|
582 |
|
|
timeinfo=localtime(&seconds);
|
583 |
|
|
strftime(time_year,5,"%Y",timeinfo);
|
584 |
|
|
strftime(time_month,5,"%m",timeinfo);
|
585 |
|
|
strftime(time_day,5,"%d",timeinfo);
|
586 |
|
|
strcat( strcat(strcat(strcat(strcpy(data_time,time_year),"-"),time_month),"-"),time_day);
|
587 |
|
|
|
588 |
|
|
for (i=strlen(pam)-22;i<=strlen(pam);i++)
|
589 |
|
|
{name_cln2[i-(strlen(pam)-22)]=pam[i];}
|
590 |
|
|
for (i=0;i<strlen(pam)-22;i++)
|
591 |
|
|
{name_path[i]=pam[i];}
|
592 |
|
|
name_path[strlen(pam)-22]='\0';
|
593 |
cafagna |
1.2 |
for (i=0;i<5;i++)
|
594 |
|
|
{cirquit_no[i]=name_cln2[i];}
|
595 |
cafagna |
1.1 |
cirquit_no[5]='\0';
|
596 |
cafagna |
1.2 |
for (i=10;i<13;i++)
|
597 |
|
|
{route_no[i-10]=name_cln2[i];}
|
598 |
cafagna |
1.1 |
route_no[3]='\0';
|
599 |
|
|
file_ready=1;
|
600 |
|
|
file_deleted=0;
|
601 |
|
|
file_archived=0;
|
602 |
|
|
file_proces=0;
|
603 |
cafagna |
1.2 |
if (IndexQ>process) file_proces=1;
|
604 |
cafagna |
1.1 |
|
605 |
|
|
|
606 |
cafagna |
1.2 |
if (IndexQ>transmit) {flag_to_transmit=1;}
|
607 |
cafagna |
1.1 |
else {flag_to_transmit=0;}
|
608 |
|
|
oss.str("");
|
609 |
|
|
oss << "INSERT INTO FILES (cirquit_n, route_n, counter, qual_index, ready, deleted, date,"
|
610 |
|
|
<< " archived, path, cln2_name, proces_flag, transit_flag)"
|
611 |
|
|
<< " VALUES ('"<< cirquit_no << "','"<< route_no << "','"<<r_counter<<"','"<< IndexQ << "','"
|
612 |
|
|
<< file_ready << "','"<< file_deleted << "','"<< data_time << "','"<< file_archived << "','"
|
613 |
|
|
<< name_path << "', '" << name_cln2 << "', '" << file_proces << "','"
|
614 |
|
|
<< flag_to_transmit << "')";
|
615 |
cafagna |
1.2 |
// cout<<oss.str().c_str()<<" table FILES\n";
|
616 |
cafagna |
1.1 |
TSQLResult *res=sqlServer->Query(oss.str().c_str());
|
617 |
|
|
|
618 |
|
|
flag_sec_trans=0;
|
619 |
|
|
|
620 |
|
|
oss1.str("");
|
621 |
|
|
oss1 <<"INSERT INTO FILES1 (my_route, raw_filename, pam_size, cirquit_n, route_n, route_real,"
|
622 |
|
|
<<" counter, board_time, Num_all, Num_macro, flag_twice)"
|
623 |
|
|
<<" VALUES ('"<<current_route<<"','"<<name_ini<<"','"<<icount<<"','"<<cirquit_no<<"','"
|
624 |
|
|
<<route_no<<"','"<<real_route[r_counter]<<"','"<<r_counter
|
625 |
|
|
<<"','"<<time_p[2]<<"','"<<N1<<"','"<<packet_counter[28]<<"','"<<flag_sec_trans<<"')";
|
626 |
cafagna |
1.2 |
// cout<<oss1.str().c_str()<<" table FILES1\n";
|
627 |
cafagna |
1.1 |
TSQLResult *res3=sqlServer->Query(oss1.str().c_str());
|
628 |
|
|
|
629 |
|
|
// if (conn->Query(oss.str().c_str()) == 0)
|
630 |
|
|
// {
|
631 |
|
|
// printf("ERROR!!!");
|
632 |
|
|
// }
|
633 |
|
|
|
634 |
|
|
delete [] buffer;
|
635 |
|
|
|
636 |
|
|
/***************************************************************/
|
637 |
|
|
fin.close();
|
638 |
|
|
fclose(fo_work);
|
639 |
|
|
fclose(fo_log);
|
640 |
|
|
fclose(fo_inf);
|
641 |
|
|
fo_pam.close();
|
642 |
|
|
fclose(fo_miss);
|
643 |
|
|
}
|
644 |
|
|
|