Skip to content
Snippets Groups Projects
Commit d4376576 authored by yamadas's avatar yamadas
Browse files

Check CRC value when reading data.

parent 5338c58b
No related branches found
No related tags found
1 merge request!56links
......@@ -59,13 +59,12 @@ int crc_calc( int * crc, unsigned int * data ){
int crc_calc_event( unsigned int* data, int start_pos ){
int i = 0;
int cur_pos = start_pos;
int first_crc ;
int crc = 0xffff ;
int size = data[ cur_pos % DMASIZE ];
int good_flag = 0;
if( size > 0xffff || size <= 0 ){
printf("Invalid total event size %.8x\n", size);
return -1;
......@@ -76,11 +75,6 @@ int crc_calc_event( unsigned int* data, int start_pos ){
/* data[ ( cur_pos + 1 + size ) % DMASIZE ], */
/* data[ ( cur_pos + 2 + size ) % DMASIZE ] ); */
cur_pos = start_pos + 4;
unsigned int ctime = data[ cur_pos % DMASIZE ];
......@@ -151,6 +145,7 @@ int crc_calc_event( unsigned int* data, int start_pos ){
bad = 1;
}else{
good_flag = 1;
/* printf("%.2d Good ! calcd %.4x data %.4x offset %.4x size %.4x szlnk %.4x trl %.8x\n", */
/* link_num, crc, data[ cur_pos % DMASIZE ] & 0xffff, offset, size, size_link, data[ (cur_pos+1) % DMASIZE ] ); */
......@@ -160,13 +155,16 @@ int crc_calc_event( unsigned int* data, int start_pos ){
}
if( bad ){
for( i = 0 ; i < size ; i++){
printf("%.8x ", data[ ( start_pos + i ) % DMASIZE ] );
if( i % 8 == 7 ) printf("\n");
}
printf("\n");
// if( evenum > 50000 ){
// if( 1 ){
for( i = 0 ; i < size ; i++){
printf("%.8x ", data[ ( start_pos + i ) % DMASIZE ] );
if( i % 8 == 7 ) printf("\n");
}
printf("\n");
good_flag = -2;
}
return good_flag;
}
......@@ -184,7 +182,7 @@ int crc_calc_event( unsigned int* data, int start_pos ){
int cnt = 0;
int cur_pos = *ce + 1;
int ret = 0;
while( !( ( ( magic = data[ cur_pos % DMASIZE ] ) & 0xffff0000 ) != 0x7f7f0000 ) ){
usleep(1000);
cnt++;
......@@ -290,9 +288,12 @@ int crc_calc_event( unsigned int* data, int start_pos ){
int size_link;
int offset;
unsigned int exp_run, evenum, ctime, utime;
unsigned int next_exp_run, cur_exp_run = 0, evenum, ctime, utime, first_eve = 0;
int start_pos = 0;
int cnt = 0;
int eve_cnt = 0, first_event_flag = 0, crc_err_eve_cnt = 0;
int cur_pos = 0;
int ret = 0;
unsigned int cur_eve = 0, next_eve = 0;
......@@ -322,11 +323,14 @@ int crc_calc_event( unsigned int* data, int start_pos ){
// Main loop
//
while( 1 ){
while( ( ( ( magic = data[ ( cur_pos + 1 ) % DMASIZE ] ) & 0xffff0000 ) != 0x7f7f0000 )
|| data[ ( cur_pos + data[ cur_pos % DMASIZE ] - 1 + DMASIZE ) % DMASIZE ] != 0x7fff0006 ){
while( 1 ){
if( !( ( ( ( magic = data[ ( cur_pos + 1 ) % DMASIZE ] ) & 0xffff0000 ) != 0x7f7f0000 )
|| data[ ( cur_pos + data[ cur_pos % DMASIZE ] - 1 + DMASIZE ) % DMASIZE ] != 0x7fff0006 ) ){
break;
}
// printf("MAGIC %.8x\n", magic);
usleep(1000);
// usleep(1000); // to avoid BUSY loop
//
// Refresh DMA memory
......@@ -345,20 +349,21 @@ int crc_calc_event( unsigned int* data, int start_pos ){
#endif
if ( ( ( data[ ( cur_pos + j + 1 ) % DMASIZE ] & 0xffff0000 ) == 0x7f7f0000 ) ){
next_eve = data[ ( cur_pos + j + 3 ) % DMASIZE ];
next_exp_run = data[ ( cur_pos + j + 2 ) % DMASIZE ] ;
// printf( "TRAILER %.8x %.8x %.8x\n",data[ ( cur_pos + j + data[ ( cur_pos + j + DMASIZE ) % DMASIZE ] - 1 + DMASIZE ) % DMASIZE ] );
if( next_eve > cur_eve ){
if( next_eve > cur_eve && next_exp_run >= cur_exp_run ){
/* if( data[ ( ( data[ ( cur_pos + j + DMASIZE ) % DMASIZE ] ) - 1 + DMASIZE ) % DMASIZE ] != 0x7fff0006 ){ */
/* usleep(1000); */
/* break; */
/* } */
cur_pos = ( cur_pos + j + DMASIZE ) % DMASIZE;
size = data[ cur_pos ];
printf( "Detect new Event number prev %.8x new %.8x pos %.8x size %.8x\n" , cur_eve , next_eve, cur_pos, size );
// printf( "Detect new Event number prev %.8x new %.8x pos %.8x size %.8x\n" , cur_eve , next_eve, cur_pos, size );
break;
}else{
printf( "Detect Old Event number prev %.8x new %.8x pos %d\n" , cur_eve , next_eve, ( cur_pos + j + DMASIZE ) % DMASIZE );
// printf( "Detect Old Event number prev %.8x new %.8x pos %d\n" , cur_eve , next_eve, ( cur_pos + j + DMASIZE ) % DMASIZE );
break;
}
}else{
......@@ -369,12 +374,27 @@ int crc_calc_event( unsigned int* data, int start_pos ){
cnt++;
}
size = data[ cur_pos ] ;
next_eve = data[ ( cur_pos + 3 ) % DMASIZE ];
next_exp_run = data[ ( cur_pos + 2 ) % DMASIZE ];
printf( "Event number prev %.8x new %.8x pos %.8x size %.8x\n" , cur_eve , next_eve, cur_pos, size );
crc_calc_event( data, cur_pos );
if( first_event_flag == 0 || cur_exp_run != next_exp_run ){
first_event_flag = 1;
first_eve = next_eve;
crc_err_eve_cnt = 0;
eve_cnt = 0;
}
eve_cnt++;
ret = crc_calc_event( data, cur_pos );
if( ret != 1 ){
crc_err_eve_cnt++;
}
cur_eve = next_eve;
cur_exp_run = next_exp_run;
printf("STATUS : tot eve %d read eve %d err_eve %d run %d\n", next_eve - first_eve, eve_cnt, crc_err_eve_cnt, cur_exp_run );
mod_pos = ( cur_pos + size ) % 8;
if( mod_pos != 0 ){
cur_pos = ( cur_pos + size + DMASIZE + ( 8 - mod_pos) ) % DMASIZE ;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment