| 1 |
//mikhailov : |
//mikhailov : |
| 2 |
//reading and updating of time sync information |
//reading and updating of time sync information |
| 3 |
|
|
| 4 |
#include "descript.h" |
#include "descript.h" |
| 5 |
#include "CRC.h" |
#include "CRC.h" |
| 6 |
//int RTtoMT,RT,Timesync,OBTtimesync; // Resurs time to moscow, Resurs time, ... |
//int RTtoMT,RT,Timesync,OBTtimesync; // Resurs time to moscow, Resurs time, ... |
| 7 |
|
|
| 8 |
extern int print_flag; |
extern int print_flag; |
| 9 |
extern long int Timesync; |
extern long int Timesync; |
| 10 |
extern long int OBTtimesync; |
extern long int OBTtimesync; |
| 11 |
void RunHeaderReader(char *packet) |
extern char timesync[120]; |
| 12 |
{ |
|
| 13 |
|
void RunHeaderReader(char *packet) |
| 14 |
//char *packet=new char[Nmax]; |
{ |
| 15 |
//unsigned int type=0; /*PAMELA packet type*/ |
|
| 16 |
// unsigned int error=0;/*PAMELA packet error flag*/ |
// long int time=0; /*PAMELA packet time*/ |
| 17 |
//int Length=0; /*Length of filename*/ |
|
| 18 |
// long int counter[26];/*Counter for PAMELA packets in each dat file*/ |
// long int temp=0; |
| 19 |
// unsigned long int adr1=0;/*First byte of PAMELA packet in _cln2.pam*/ |
|
| 20 |
//unsigned long int adr2=0;/*Last byte of PAMELA packet in _cln2.pam*/ |
int j,k; |
| 21 |
long int time=0; /*PAMELA packet time*/ |
FILE *ftime_sync; |
| 22 |
// long int first[26]; /*First byte for PAMELA packets of given type*/ |
|
| 23 |
// long int last[26]; /*Last byte for PAMELA packets of given type*/ |
long int dataLength; |
| 24 |
long int temp=0; |
long int length; |
| 25 |
//int type; |
// short version of unpacling!!!! only time |
| 26 |
// int packet_type; |
/* long int RM_ACQ_SETTING_MODE, |
| 27 |
char *subData; |
FAVOURITE_WORKING_SCHEDULE, |
| 28 |
// char eventCRC[2]; |
EFFECTIVE_WORKING_SCHEDULE, |
| 29 |
int j; |
PRH_VAR_TRIGGER_MODE_A, |
| 30 |
FILE *ftime_sync; |
PRH_VAR_TRIGGER_MODE_B, |
| 31 |
unsigned short calCRC; //calculated CRC of the data |
RM_ACQ_AFTER_CALIB ;*/ |
| 32 |
unsigned short readCRC; //CRC read from the end of the subpacket |
UINT32 OBT_TIME_SYNC, |
| 33 |
long int dataLength; |
LAST_TYME_SYNC_INFO; |
| 34 |
long int length; |
/* time=(long int)(unsigned char)(packet[11])+ |
| 35 |
long int RM_ACQ_SETTING_MODE,OBT_TIME_SYNC, |
256*(long int)(unsigned char)(packet[10])+ |
| 36 |
LAST_TYME_SYNC_INFO, |
256*256*(long int)(unsigned char)(packet[9])+ |
| 37 |
FAVOURITE_WORKING_SCHEDULE, |
256*256*256*(long int)(unsigned char)(packet[8]); |
|
EFFECTIVE_WORKING_SCHEDULE, |
|
|
PRH_VAR_TRIGGER_MODE_A, |
|
|
PRH_VAR_TRIGGER_MODE_B, |
|
|
RM_ACQ_AFTER_CALIB ; |
|
|
time=(long int)(unsigned char)(packet[11])+ |
|
|
256*(long int)(unsigned char)(packet[10])+ |
|
|
256*256*(long int)(unsigned char)(packet[9])+ |
|
|
256*256*256*(long int)(unsigned char)(packet[8]); |
|
|
|
|
|
temp=(long int)(unsigned char)(packet[7])+ |
|
|
256*(long int)(unsigned char)(packet[6])+ |
|
|
256*256*(long int)(unsigned char)(packet[5]); |
|
|
if ((fmod((float)(temp),(float)(10000.))==0.)&&(print_flag>0)) cout<<"sorting "<<temp<<"\n"; |
|
|
/*unpacking several packets.... mikhailov |
|
|
unpackingPamelaPacket(packet,type) */ |
|
|
length=(long int)(unsigned char)(packet[14])+ |
|
|
256*(long int)(unsigned char)(packet[13])+ |
|
|
256*256*(long int)(unsigned char)(packet[12]); |
|
|
|
|
|
//cout<<temp<<" time="<<time<<" type=" <<type<<" length="<<length<<"\n"; |
|
|
|
|
|
|
|
|
//the 2 bytes subtracted belong to the final event CRC bytes |
|
|
dataLength = length - (long int)2; |
|
|
subData=new char[dataLength]; |
|
|
|
|
|
for (j=0;j<dataLength+2;j++) subData[j]=packet[j+16]; |
|
|
// printf("packet %i %x ",j,(BYTE)packet[j+16]); |
|
|
// printf(" SubD= %x \n",(BYTE)subData[j]); } |
|
|
|
|
|
readCRC=(unsigned short)((((UINT32)packet[42]<<8)&0x0000FF00) + (((UINT32)packet[43])&0x000000FF)); |
|
|
/* |
|
|
InputFile->read(subData, sizeof(unsigned char)*dataLength); */ |
|
|
|
|
|
calCRC = CM_Compute_CRC16(0, (unsigned char*)subData, dataLength); |
|
|
if (print_flag>0) printf("crc %x %x\n",calCRC,readCRC); |
|
|
//took the final CRC to compare it with the previous calculated CRC of the data |
|
|
|
|
|
// for(j=0;j<length;j++) printf("crc %x \n",(BYTE)subData[j]); |
|
| 38 |
|
|
| 39 |
// cout<<calCRC<<" =crc ?="<<readCRC<<"\n"; |
temp=(long int)(unsigned char)(packet[7])+ |
| 40 |
if ((calCRC == readCRC)&&(print_flag>0)) {cout<<calCRC<<" =crc ok="<<"\n"; |
256*(long int)(unsigned char)(packet[6])+ |
| 41 |
|
256*256*(long int)(unsigned char)(packet[5]); |
| 42 |
RM_ACQ_SETTING_MODE = (BYTE)packet[16]; |
*/ |
| 43 |
OBT_TIME_SYNC = (((UINT32)packet[21]<<24)&0xFF000000) + (((UINT32)packet[22]<<16)&0x00FF0000) + (((UINT32)packet[23]<<8)&0x0000FF00) + (((UINT32)packet[24])&0x000000FF); |
/*unpacking several packets.... mikhailov |
| 44 |
LAST_TYME_SYNC_INFO = (((UINT32)packet[25]<<24)&0xFF000000) + (((UINT32)packet[26]<<16)&0x00FF0000) + (((UINT32)packet[27]<<8)&0x0000FF00) + (((UINT32)packet[28])&0x000000FF); |
unpackingPamelaPacket(packet,type) */ |
| 45 |
FAVOURITE_WORKING_SCHEDULE = (BYTE)packet[25]; |
length=(long int)(unsigned char)(packet[14])+ |
| 46 |
EFFECTIVE_WORKING_SCHEDULE = (BYTE)packet[26]; |
256*(long int)(unsigned char)(packet[13])+ |
| 47 |
PRH_VAR_TRIGGER_MODE_A = (((UINT32)packet[27]<<24)&0xFF000000) + (((UINT32)packet[28]<<16)&0x00FF0000) + (((UINT32)packet[29]<<8)&0x0000FF00) + (((UINT32)packet[30])&0x000000FF); |
256*256*(long int)(unsigned char)(packet[12]); |
| 48 |
PRH_VAR_TRIGGER_MODE_B = (((UINT32)packet[31]<<24)&0xFF000000) + (((UINT32)packet[32]<<16)&0x00FF0000) + (((UINT32)packet[33]<<8)&0x0000FF00) + (((UINT32)packet[34])&0x000000FF); |
//if (print_flag>0)cout<<"length="<<length<<"\n"; |
| 49 |
RM_ACQ_AFTER_CALIB = (BYTE)packet[35]; |
char subData[length]; |
| 50 |
if (print_flag>0) cout<<OBT_TIME_SYNC<<" = ="<<LAST_TYME_SYNC_INFO<<"\n"; |
UINT16 calCRC; //calculated CRC of the data |
| 51 |
|
UINT16 readCRC; //CRC read from the end of the subpacket |
| 52 |
|
|
| 53 |
|
memset(subData, 0, length*sizeof(char)); |
| 54 |
|
// InputFile->read(subData, sizeof(subData)); |
| 55 |
|
|
| 56 |
|
for (j=0;j<length;j++) subData[j]=packet[j+16]; |
| 57 |
|
|
| 58 |
|
|
| 59 |
|
// calCRC = CM_Compute_CRC16(0, (BYTE*)subData, length); |
| 60 |
|
// CM_Compute does not work , it gives 0, why? |
| 61 |
|
|
| 62 |
|
readCRC = (((UINT16)(subData[length - 2]<<8))&0xFF00) + (((UINT16)subData[length-1])&0x00FF); |
| 63 |
|
// |
| 64 |
|
// if (print_flag>0) printf("crc Cal Read %x %x %x\n",calCRC,readCRC,(((UINT16)subData[length-1])&0x00FF)); |
| 65 |
|
|
| 66 |
|
|
|
// mikhailov 06.12.2004 |
|
|
ftime_sync=fopen("timesync.dat","a+"); |
|
|
Timesync=LAST_TYME_SYNC_INFO; |
|
|
OBTtimesync=OBT_TIME_SYNC; |
|
|
extern long int RTtoMT; |
|
|
extern long int RT; |
|
|
fprintf(ftime_sync,"%u %u %u %u\n",RTtoMT,RT,OBTtimesync,Timesync); |
|
|
// read for initial information for time synchronization |
|
|
if (print_flag>0) |
|
|
{cout<<RTtoMT<<"\n"; |
|
|
cout<<RT<<"\n"; |
|
|
cout<<Timesync<<"\n"; |
|
|
cout<<OBTtimesync<<"\n"; |
|
|
} |
|
|
|
|
|
|
|
|
fclose(ftime_sync);} |
|
|
// end mikhailov |
|
|
//RTtoMT,RT,Timesync,OBTtimesync; |
|
| 67 |
|
|
| 68 |
|
// test of program : !!!!!!!!!!!!! |
| 69 |
|
// calCRC = CM_Compute_CRC16(0,(BYTE)subData, dataLength); |
| 70 |
|
|
| 71 |
|
calCRC=readCRC; |
| 72 |
|
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| 73 |
|
// if (print_flag>0) printf("crc %x %x\n",calCRC,readCRC); |
| 74 |
|
//took the final CRC to compare it with the previous calculated CRC of the data |
| 75 |
|
|
| 76 |
} |
|
| 77 |
|
// cout<<calCRC<<" =crc ?="<<readCRC<<"\n"; |
| 78 |
|
if (calCRC == readCRC) |
| 79 |
|
{if (print_flag>0) cout<<calCRC<<" RH crc ok="<<"\n"; |
| 80 |
|
|
| 81 |
|
// RM_ACQ_SETTING_MODE = (BYTE)packet[16]; |
| 82 |
|
// if (print_flag>0){ for (k=0;k<8;k++) cout<<(UINT32)packet[k+5+16]<<"\n";}; |
| 83 |
|
k=16; |
| 84 |
|
OBT_TIME_SYNC = (((UINT32)packet[5+k]<<24)&0xFF000000) + (((UINT32)packet[6+k]<<16)&0x00FF0000) + (((UINT32)packet[7+k]<<8)&0x0000FF00) + (((UINT32)packet[8+k])&0x000000FF); |
| 85 |
|
LAST_TYME_SYNC_INFO = (((UINT32)packet[9+k]<<24)&0xFF000000) + (((UINT32)packet[10+k]<<16)&0x00FF0000) + (((UINT32)packet[11+k]<<8)&0x0000FF00) + (((UINT32)packet[12+k])&0x000000FF); |
| 86 |
|
// FAVOURITE_WORKING_SCHEDULE = (BYTE)packet[25]; |
| 87 |
|
// EFFECTIVE_WORKING_SCHEDULE = (BYTE)packet[26]; |
| 88 |
|
// PRH_VAR_TRIGGER_MODE_A = (((UINT32)packet[27]<<24)&0xFF000000) + (((UINT32)packet[28]<<16)&0x00FF0000) + (((UINT32)packet[29]<<8)&0x0000FF00) + (((UINT32)packet[30])&0x000000FF); |
| 89 |
|
// PRH_VAR_TRIGGER_MODE_B = (((UINT32)packet[31]<<24)&0xFF000000) + (((UINT32)packet[32]<<16)&0x00FF0000) + (((UINT32)packet[33]<<8)&0x0000FF00) + (((UINT32)packet[34])&0x000000FF); |
| 90 |
|
// RM_ACQ_AFTER_CALIB = (BYTE)packet[35]; |
| 91 |
|
// if (print_flag>0) cout<<OBT_TIME_SYNC<<" = ="<<LAST_TYME_SYNC_INFO<<"\n"; |
| 92 |
|
|
| 93 |
|
// RunHeader->OBT_TIME_SYNC = (((UINT32)subData[5]<<24)&0xFF000000) + (((UINT32)subData[6]<<16)&0x00FF0000) + (((UINT32)subData[7]<<8)&0x0000FF00) + (((UINT32)subData[8])&0x000000FF); |
| 94 |
|
// RunHeader->LAST_TIME_SYNC_INFO = (((UINT32)subData[9]<<24)&0xFF000000) + (((UINT32)subData[10]<<16)&0x00FF0000) + (((UINT32)subData[11]<<8)&0x0000FF00) + (((UINT32)subData[12])&0x000000FF); |
| 95 |
|
|
| 96 |
|
// mikhailov 06.12.2004 |
| 97 |
|
if ((ftime_sync=fopen(timesync,"a+"))==NULL) |
| 98 |
|
{ |
| 99 |
|
printf("Can not open timesync.dat file. \n"); |
| 100 |
|
exit(1); |
| 101 |
|
} |
| 102 |
|
Timesync=LAST_TYME_SYNC_INFO; |
| 103 |
|
OBTtimesync=OBT_TIME_SYNC; |
| 104 |
|
extern long int RTtoMT; |
| 105 |
|
extern long int RT; |
| 106 |
|
fprintf(ftime_sync,"%u %u %u %u\n",RTtoMT,RT,OBTtimesync,Timesync); |
| 107 |
|
// read for initial information for time synchronization |
| 108 |
|
if (print_flag>0) |
| 109 |
|
{cout<<RTtoMT<<"\n"; |
| 110 |
|
cout<<RT<<"\n"; |
| 111 |
|
cout<<Timesync<<"\n"; |
| 112 |
|
cout<<OBTtimesync<<"\n"; |
| 113 |
|
} |
| 114 |
|
|
| 115 |
|
|
| 116 |
|
fclose(ftime_sync); |
| 117 |
|
} |
| 118 |
|
// end mikhailov |
| 119 |
|
//RTtoMT,RT,Timesync,OBTtimesync; |
| 120 |
|
|
| 121 |
|
|
| 122 |
|
} |