#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include "pcie40_b2dma.h" #include "pcie40_ecs.h" #include <iostream> void printData( unsigned int * data ) { printf( "Header : %8X%8X%8X%8X%8X%8X%8X%8X\n" , data[7], data[6] ,data[5] ,data[4], data[3], data[2], data[1], data[0] ) ; int eventSize = ( ( data[ 0 ] & 0xFF ) ) - 1 ; // minus header for ( int i = 1 ; i < eventSize ; ++i ) { printf( "data %3d: %8X%8X%8X%8X%8X%8X%8X%8X\n" , i-1 , data[ 8*i+7 ] , data[ 8*i+6 ] , data[ 8*i+5 ] , data[ 8*i+4 ], data[ 8*i+3 ], data[ 8*i+2 ], data[ 8*i+1 ], data[ 8*i ] ) ; } printf( "Trailer : %8X%8X%8X%8X%8X%8X%8X%8X\n" , data[8*eventSize+7], data[8*eventSize+6] ,data[8*eventSize+5] ,data[8*eventSize+4], data[8*eventSize+3], data[8*eventSize+2], data[8*eventSize+1], data[8*eventSize] ) ; } int main (int argc ,char** argv) { printf( "Program to printout the first event read by DMA\n" ) ; int res = ecs_open( 0 , 0 ) ; if ( -1 == res ) printf("ERROR: Could not open device (BAR 0)\n") ; else printf("SUCCESS: Device opened for ECS 0\n"); res = ecs_open( 0 , 2 ) ; if ( -1 == res ) printf("ERROR: Could not open device (BAR 2)\n") ; else printf("SUCCESS: Device opened for ECS 2\n"); // DMA part res = dma_open( 0 ) ; if ( -1 == res ) printf("ERROR: Could not open device (DMA)\n") ; else printf("SUCCESS: Device opened for DMA\n"); // unsigned int initial_value = pcie40_getNbWordInEvent( 0 ) ; if ( initial_value == 0 ) pcie40_setNbWordInEvent( 0 , 0xFF ) ; pcie40_dmaReset( 0 ) ; pcie40_dmaStop( 0 ) ; //pcie40_enableGenerator( 0 ) ; //pcie40_useDataFromGenerator( 0 ) ; pcie40_disableGenerator( 0 ) ; pcie40_useDataFromFibers( 0 ) ; // pcie40_setGeneratorTriggerFrequency( 0 , 30 ) ; //pcie40_setNbEvents( 0 , 1 ) ; // start DAQ pcie40_resetSPages( 0 ) ; pcie40_dmaSetReadout( 0 ) ; pcie40_setSizeFromHeader( 0 ) ; //pcie40_setNbWordInEvent( 0 , 5 ) ; pcie40_setBusyLevel( 0 , 0x502 ) ; dma_initialize( 0 ) ; std::cin.ignore() ; // start DMA and wait for data int rv = 0 ; while ( rv == 0 ) { rv = pcie40_dmaStart( 0 ) ; } printf( "Number of super page received: %d\n" , rv ) ; unsigned int * data = pcie40_getSuperPagePointer( 0 , 0 , 0 ) ; printData( data ) ; data = pcie40_getSuperPagePointer( 0 , 0 , 1 ) ; printData( data ) ; //data = pcie40_getSuperPagePointer( 0 , 1 , 0 ) ; //printData( data ) ; //data = pcie40_getSuperPagePointer( 0 , 1 , 1 ) ; //printData( data ) ; // // rv = pcie40_dmaStart( 0 ) ; // printf( "Number of super page received: %d\n" , rv ) ; // data = pcie40_getSuperPagePointer( 0 , 1 , 1 ) ; // printData( data ) ; // ecs_close( 0 , 0 ) ; ecs_close( 0 , 2 ) ; dma_close( 0 ) ; return 0 ; }