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

Modiry the output of pcie40_ul.

    Good! eve 00000481 pos 792 size 184
    Good! eve 00000000 pos 976 size 36
    Missing events cur 0 pre 481
    Invalid magic number 7fff0004 pos 1016 : 7fff0000 7fff0004 7fff0005 7fff0006 7fff0007 7fff0008 7fff0009 7fff00
    New ! eve 00000001 pos 1024 size 132 : 00000084 7f7f0001 44440001 00000001 11110001 33330001 1a160060 04d017ac
    Good! eve 00000002 pos 1160 size 156
parent 955be281
No related branches found
No related tags found
2 merge requests!6Master,!86links slc tool
......@@ -64,40 +64,50 @@ int decode_data_wUL( unsigned int * data , unsigned int * ce , int * crc , int *
int offset;
unsigned int exp_run, evenum, ctime, utime;
if( *ce < 0 || DMASIZE < *ce ){
printf("Current positoin is out of DMASIZE %d. Exiting...\n", *ce );
exit(1);
}
*crc = 0 ;
size = data[ ( *ce ) % DMASIZE ] ;
magic = data[ ( *ce + 1 ) % DMASIZE ] ;
evenum = data[ ( *ce + 3 ) % DMASIZE ];
// Check a new event is available in the memory
if( ( magic & 0xffff0000 ) != 0x7f7f0000 ){
// printf("Invalid magic number %.8x\n", magic );
if ( ( *evn > 1 ) && ( ( ( data[ (*ce - 2 ) % DMASIZE ] & 0xffff0000 ) != 0xbbbc0000 ) &&
( ( data[ (*ce -2) % DMASIZE ] & 0xFFFF0000 ) != 0x7FFF0000 )) ) {
// printf( "Problem %d retry %d\n" , *evn , *retry ) ;
++(*retry) ;
//ecs_write( 0 , 2 , 0x000501A0 , 0x1 ) ;
if ( *retry < 3 ) {
return 0 ;
}
*retry = 0 ;
// search for next good event
int j = 0 ;
for ( j = 0 ; j < DMASIZE ; ++j ) {
if ( ( ( data[ j ] & 0xffff0000 ) == 0x7f7f0000 ) &&
( ( data[ ( j + 2 ) % DMASIZE ] > *evn ) ) ) {
printf("Invalid magic number %.8x pos %d : ", magic, *ce );
printf("%.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x\n",
data[ ( *ce ) % DMASIZE ], data[ ( *ce + 1 ) % DMASIZE ], data[ ( *ce + 2 ) % DMASIZE ],
data[ ( *ce + 3 ) % DMASIZE ], data[ ( *ce + 4 ) % DMASIZE ], data[ ( *ce + 5 ) % DMASIZE ],
data[ ( *ce + 6 ) % DMASIZE ], data[ ( *ce + 7 ) % DMASIZE ] );
// search for next good event
int j = 0 ;
for ( j = *ce ; j < *ce + DMASIZE ; ++j ) {
if ( ( ( data[ j ] & 0xffff0000 ) == 0x7f7f0000 ) &&
( ( data[ ( j + 2 ) % DMASIZE ] > *evn ) ) ) {
size = data[ ( j - 1 ) % DMASIZE ] ;
*ce = ( ( j - 1 ) % DMASIZE ) ;
//printf( "New event number %d %d\n" , *evn , data[ ( j + 2 ) % DMASIZE ] ) ;
evenum = data[ ( j + 2 ) % DMASIZE ];
*ce = ( j - 1 ) % DMASIZE;
printf("New ! eve %.8d pos %d size %d : ", evenum, *ce, size);
printf("%.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x\n",
data[ ( *ce ) % DMASIZE ], data[ ( *ce + 1 ) % DMASIZE ], data[ ( *ce + 2 ) % DMASIZE ],
data[ ( *ce + 3 ) % DMASIZE ], data[ ( *ce + 4 ) % DMASIZE ], data[ ( *ce + 5 ) % DMASIZE ],
data[ ( *ce + 6 ) % DMASIZE ], data[ ( *ce + 7 ) % DMASIZE ] );
break ;
}
}
} else {
return 0;
}
}
if( j == *ce + DMASIZE - 1 ) return 0;
}
}else{
printf("Good! eve %.8d pos %d size %d\n", evenum, *ce, size);
}
if( evenum - *evn != 1 ){
printf("Missing events cur %d pre %d\n", evenum, *evn );
}
*evn = evenum;
return size;
if ( 0 == size ) return 0 ;
......@@ -201,9 +211,9 @@ int decode_data_wUL( unsigned int * data , unsigned int * ce , int * crc , int *
return size ;
}
int main (int argc ,char** argv) {
int main(int argc ,char** argv) {
// Stop trigger
system( "ssh robbep@vme \"resetft -53\"" ) ;
system( "ssh yamadas@ttd7 \"resetft -23\"" ) ;
sleep( 2 ) ;
int res = ecs_open( 0 , 0 ) ;
if ( -1 == res ) printf("ERROR: Could not open device (BAR 0)\n") ;
......@@ -217,27 +227,28 @@ int main (int argc ,char** argv) {
FILE* fp;
char * ptr ;
char * tmp ;
fp = popen( "ssh robbep@vme \"trigft -53 pulse 1000 -1\"" , "r" ) ;
fp = popen( "ssh yamadas@ttd7 \"trigft -23 pulse 10 -1\"" , "r" ) ;
char buf[1000] ;
char exp[] = "exp" ;
// sleep( 2 ) ;
while( fgets( buf , sizeof(buf) , fp ) != NULL ) {
// printf( "A= %d\n" , strncmp( exp , buf , 3 ) ) ;
// printf( strncmp( &buf[0] , 'exp' , 1 ) ) ;
tmp = strdup( buf ) ;
if ( strncmp( exp , buf , 3 ) == 0 ) {
//printf( '%s\n' , buf ) ;
// printf( "ICI\n" ) ;
ptr = strtok( tmp , " " ) ;
ptr = strtok( NULL , " " ) ;
ptr = strtok( NULL , " " ) ;
ptr = strtok( NULL , " " ) ;
// while ( ptr != NULL ) {
run = atoi( ptr ) ;
// ptr = strtok( NULL , " " ) ;
}
//}
}
sleep( 2 ) ;
/* while( fgets( buf , sizeof(buf) , fp ) != NULL ) { */
/* // printf( "buf %s\n" , buf ); */
/* // printf( "A= %d\n" , strncmp( exp , buf , 3 ) ) ; */
/* // printf( strncmp( &buf[0] , 'exp' , 1 ) ) ; */
/* tmp = strdup( buf ) ; */
/* if ( strncmp( exp , buf , 3 ) == 0 ) { */
/* //printf( '%s\n' , buf ) ; */
/* // printf( "ICI\n" ) ; */
/* ptr = strtok( tmp , " " ) ; */
/* ptr = strtok( NULL , " " ) ; */
/* ptr = strtok( NULL , " " ) ; */
/* ptr = strtok( NULL , " " ) ; */
/* // while ( ptr != NULL ) { */
/* run = atoi( ptr ) ; */
/* // ptr = strtok( NULL , " " ) ; */
/* } */
/* //} */
/* } */
pclose( fp ) ;
//sleep( 2 ) ;
......@@ -255,7 +266,7 @@ int main (int argc ,char** argv) {
pctime = 0 ;
putime = 0 ;
int i ;
int i, j ;
int size, size_256, currentEventIndex, crc, nErr, nEvt, nRetry, nMissed ;
currentEventIndex = 0 ;
nErr = 0 ;
......@@ -265,7 +276,9 @@ int main (int argc ,char** argv) {
int read_dma = 1 ;
clock_t begin = clock() ;
for ( i = 0 ; i < 10000000 ; ++i ) {
// for ( i = 0 ; i < 10000000 ; ++i ) {
for ( i = 0 ; i < 10 ; ++i ) {
if ( ( nEvt % 1000 == 1 ) && ( size != 0 ) ) printf( "Event number %d\n", nEvt ) ;
if ( read_dma == 1 ) {
// set busy
......@@ -279,21 +292,32 @@ int main (int argc ,char** argv) {
read_dma = 1 ;
}
printf("Try %.8x -----------------------------------\n",i );
for ( j = 0 ; j < DMASIZE ; ++j ) {
printf( "%.8x " , data[ j ] ) ;
if( j % 8 == 7 ) printf("\n");
}
bad = 0 ;
size = decode_data_wUL( data , &currentEventIndex , &crc , &run , &bad , &evn , &retry ,
&pctime , &putime , &nMissed ) ;
if ( 0 == size ) {
read_dma = 1 ;
continue ;
}
if ( retry != 0 ) nRetry++ ;
if ( size == -1 ) {
printf("index %d data %.8x\n", currentEventIndex, data[ ( currentEventIndex + 1 ) % DMASIZE ] );
while( currentEventIndex < DMASIZE && 0 <= currentEventIndex ){
currentEventIndex = currentEventIndex % DMASIZE ;
size = decode_data_wUL( data , &currentEventIndex , &crc , &run , &bad , &evn , &retry ,
&pctime , &putime , &nMissed ) ;
if ( 0 == size ) {
read_dma = 1 ;
continue ;
}
if ( retry != 0 ) nRetry++ ;
if ( size == -1 ) {
nErr++ ;
read_dma = 1 ;
continue ;
}
if ( bad == 1 ) nErr++ ;
evn++ ;
// evn++ ;
if( size % 8 != 0 ){
size_256 = ( size/8 + 1 )*8;
......@@ -301,8 +325,11 @@ int main (int argc ,char** argv) {
size_256 = size ;
}
currentEventIndex = ( currentEventIndex + size_256 ) % DMASIZE ;
// printf("cur %d sz %d\n", currentEventIndex, size_256 );
currentEventIndex = currentEventIndex + size_256;
nEvt++ ;
}
currentEventIndex = currentEventIndex % DMASIZE ;
read_dma = 1 ;
retry = 0 ;
}
......
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