mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-11 04:17:15 +02:00
some changes to receiver defs
This commit is contained in:
@ -1,9 +1,9 @@
|
||||
Path: slsDetectorsPackage/slsReceiverSoftware
|
||||
URL: origin git@gitorious.psi.ch:sls_det_software/sls_receiver_software.git
|
||||
Repository Root: origin git@gitorious.psi.ch:sls_det_software/sls_receiver_software.git
|
||||
Repsitory UUID: 879c5e2ee129acfd70aba4ae6fab829cc5409350
|
||||
Revision: 67
|
||||
Branch: gemma
|
||||
Last Changed Author: Maliakal_Dhanya
|
||||
Last Changed Rev: 67
|
||||
Last Changed Date: 2014-12-08 09:17:56 +0100
|
||||
URL: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_receiver_software.git
|
||||
Repository Root: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_receiver_software.git
|
||||
Repsitory UUID: 750a0a06945a748a18d0b8b19b7cf94ecf2fec23
|
||||
Revision: 112
|
||||
Branch: master
|
||||
Last Changed Author: Dhanya_Maliakal
|
||||
Last Changed Rev: 112
|
||||
Last Changed Date: 2015-06-26 15:57:28 +0200
|
||||
|
@ -60,7 +60,6 @@ class sockaddr_in;
|
||||
#include <ifaddrs.h>
|
||||
|
||||
#endif
|
||||
|
||||
#include <stdlib.h> /******exit */
|
||||
|
||||
#include <unistd.h>
|
||||
@ -71,6 +70,8 @@ class sockaddr_in;
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
#define DEFAULT_PACKET_SIZE 1286
|
||||
@ -279,7 +280,11 @@ typedef struct
|
||||
if (socketDescriptor >= 0){ \
|
||||
close(socketDescriptor); \
|
||||
} \
|
||||
file_des=-1; \
|
||||
if(is_a_server and getProtocol() == TCP){\
|
||||
if(file_des>0)\
|
||||
close(file_des);\
|
||||
}
|
||||
file_des=-1; \
|
||||
serverAddress.sin_port=-1; \
|
||||
};
|
||||
|
||||
@ -383,6 +388,7 @@ typedef struct
|
||||
#ifdef VERY_VERBOSE
|
||||
cout << "client connected "<< file_des << endl;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -399,7 +405,6 @@ typedef struct
|
||||
cerr << "Can not create socket "<<endl;
|
||||
file_des = socketDescriptor;
|
||||
} else {
|
||||
|
||||
if(connect(socketDescriptor,(struct sockaddr *) &serverAddress,sizeof(serverAddress))<0){
|
||||
cerr << "Can not connect to socket "<<endl;
|
||||
file_des = -1;
|
||||
@ -420,6 +425,16 @@ typedef struct
|
||||
|
||||
int getsocketDescriptor(){return socketDescriptor;};
|
||||
|
||||
|
||||
void exitServer(){
|
||||
if(is_a_server){
|
||||
if (socketDescriptor>=0){
|
||||
close(socketDescriptor);
|
||||
socketDescriptor = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** @short free connection */
|
||||
void Disconnect(){
|
||||
if (protocol==UDP){
|
||||
@ -442,7 +457,8 @@ typedef struct
|
||||
|
||||
|
||||
void ShutDownSocket(){
|
||||
while(!shutdown(socketDescriptor, SHUT_RDWR));
|
||||
while(!shutdown(socketDescriptor, SHUT_RDWR));
|
||||
Disconnect();
|
||||
};
|
||||
|
||||
|
||||
@ -518,6 +534,9 @@ typedef struct
|
||||
}
|
||||
mac[sizeof(mac)-1]='\0';
|
||||
|
||||
if(sock!=1){
|
||||
close(sock);
|
||||
}
|
||||
return string(mac);
|
||||
|
||||
};
|
||||
@ -539,6 +558,9 @@ typedef struct
|
||||
strncpy(addr,p,sizeof(addr)-1);
|
||||
addr[sizeof(addr)-1]='\0';
|
||||
|
||||
if(sock!=1){
|
||||
close(sock);
|
||||
}
|
||||
return string(addr);
|
||||
|
||||
};
|
||||
|
@ -1,11 +1,11 @@
|
||||
//#define SVNPATH ""
|
||||
#define SVNURL "git@gitorious.psi.ch:sls_det_software/sls_receiver_software.git"
|
||||
#define SVNURL "maliakal_d@gitorious.psi.ch:sls_det_software/sls_receiver_software.git"
|
||||
//#define SVNREPPATH ""
|
||||
#define SVNREPUUID "e019a6ce7d96d4ac9cb5762b7137245aedb4d5b8"
|
||||
//#define SVNREV 0x22
|
||||
#define SVNREPUUID "750a0a06945a748a18d0b8b19b7cf94ecf2fec23"
|
||||
//#define SVNREV 0x112
|
||||
//#define SVNKIND ""
|
||||
//#define SVNSCHED ""
|
||||
#define SVNAUTH "Anna_Bergamaschi"
|
||||
#define SVNREV 0x22
|
||||
#define SVNDATE 0x20141015
|
||||
#define SVNAUTH "Dhanya_Maliakal"
|
||||
#define SVNREV 0x112
|
||||
#define SVNDATE 0x20150626
|
||||
//
|
||||
|
@ -51,6 +51,26 @@
|
||||
|
||||
|
||||
|
||||
|
||||
#define PROPIX_PIXELS_IN_ROW 22
|
||||
#define PROPIX_PIXELS_IN_COL 22
|
||||
#define PROPIX_DATABYTES_PER_PIXEL 2
|
||||
|
||||
#define PROPIX_FIFO_SIZE 25000 //cannot be less than max jobs per thread = 1000
|
||||
#define PROPIX_PACKETS_PER_FRAME 2
|
||||
#define PROPIX_ONE_PACKET_SIZE 1286
|
||||
#define PROPIX_BUFFER_SIZE (PROPIX_ONE_PACKET_SIZE*PROPIX_PACKETS_PER_FRAME) //1286*2
|
||||
//#define PROPIX_DATA_BYTES (1280*PROPIX_PACKETS_PER_FRAME) //1280*2
|
||||
#define PROPIX_DATA_BYTES (PROPIX_PIXELS_IN_ROW * PROPIX_PIXELS_IN_COL * PROPIX_DATABYTES_PER_PIXEL) //22 * 22 * 2
|
||||
|
||||
#define PROPIX_FRAME_INDEX_MASK 0xFFFFFFFE
|
||||
#define PROPIX_FRAME_INDEX_OFFSET 1
|
||||
#define PROPIX_PACKET_INDEX_MASK 0x1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#define MOENCH_FIFO_SIZE 2500 //cannot be less than max jobs per thread = 1000
|
||||
/*#define MOENCH_ALIGNED_FRAME_SIZE 65536*/
|
||||
#define MOENCH_PACKETS_PER_FRAME 40
|
||||
@ -68,8 +88,9 @@
|
||||
|
||||
|
||||
|
||||
#define JCTB_FIFO_SIZE 2500 //cannot be less than max jobs per thread = 1000
|
||||
#define JCTB_FIFO_SIZE 2500 //cannot be less than max jobs per thread = 1000
|
||||
/*#define MOENCH_ALIGNED_FRAME_SIZE 65536*/
|
||||
<<<<<<< HEAD
|
||||
#define JCTB_PACKETS_PER_FRAME 1
|
||||
#define JCTB_ONE_PACKET_SIZE 8224
|
||||
#define JCTB_BUFFER_SIZE (JCTB_ONE_PACKET_SIZE*40)
|
||||
@ -78,9 +99,19 @@
|
||||
#define JCTB_FRAME_INDEX_MASK 0xFFFFFFFF
|
||||
#define JCTB_FRAME_INDEX_OFFSET 6+8
|
||||
#define JCTB_PACKET_INDEX_MASK 0xFFFFFFFF
|
||||
=======
|
||||
#define JCTB_PACKETS_PER_FRAME 50
|
||||
#define JCTB_ONE_PACKET_SIZE 8214
|
||||
#define JCTB_BUFFER_SIZE (MOENCH_ONE_PACKET_SIZE*MOENCH_PACKETS_PER_FRAME)
|
||||
#define JCTB_DATA_BYTES (JCTB_BUFFER_PER_FRAME)
|
||||
|
||||
#define JCTB_BYTES_PER_ADC (2)
|
||||
#define JCTB_PIXELS_IN_ONE_ROW 32
|
||||
#define JCTB_FRAME_INDEX_MASK 0xFFFFFF00
|
||||
#define JCTB_FRAME_INDEX_OFFSET 8
|
||||
#define JCTB_PACKET_INDEX_MASK 0xFF
|
||||
>>>>>>> 8bad1d33fcf4601752bb6722a9eca00aa2cd4ed2
|
||||
|
||||
#define JCTB_BYTES_PER_ADC (2)
|
||||
#define JCTB_PIXELS_IN_ONE_ROW 32
|
||||
#define JCTB_BYTES_IN_ONE_ROW (JCTB_PIXELS_IN_ONE_ROW*2)
|
||||
|
||||
|
||||
|
@ -170,6 +170,9 @@ private:
|
||||
/** gotthard specific read frame */
|
||||
int gotthard_read_frame();
|
||||
|
||||
/** propix specific read frame */
|
||||
int propix_read_frame();
|
||||
|
||||
/** moench specific read frame */
|
||||
int moench_read_frame();
|
||||
|
||||
|
@ -58,7 +58,8 @@ public:
|
||||
AGIPD, /**< agipd */
|
||||
MOENCH, /**< moench */
|
||||
JUNGFRAU, /**< jungfrau */
|
||||
JUNGFRAUCTB /**< jungfrauCTBversion */
|
||||
JUNGFRAUCTB, /**< jungfrauCTBversion */
|
||||
PROPIX /**< propix */
|
||||
};
|
||||
|
||||
|
||||
|
@ -745,15 +745,17 @@ int UDPBaseImplementation::createUDPSockets(){ FILE_LOG(logDEBUG) << __AT__ << "
|
||||
if(!strlen(eth)){
|
||||
cout<<"warning:eth is empty.listening to all"<<endl;
|
||||
|
||||
for(int i=0;i<numListeningThreads;i++)
|
||||
for(int i=0;i<numListeningThreads;i++){
|
||||
udpSocket[i] = new genericSocket(server_port[i],genericSocket::UDP,bufferSize);
|
||||
}
|
||||
}
|
||||
//normal socket
|
||||
else{
|
||||
cout<<"eth:"<<eth<<endl;
|
||||
|
||||
for(int i=0;i<numListeningThreads;i++)
|
||||
for(int i=0;i<numListeningThreads;i++){
|
||||
udpSocket[i] = new genericSocket(server_port[i],genericSocket::UDP,bufferSize,eth);
|
||||
}
|
||||
}
|
||||
|
||||
//error
|
||||
|
@ -27,6 +27,7 @@
|
||||
using namespace std;
|
||||
|
||||
|
||||
#define WRITE_HEADERS
|
||||
|
||||
|
||||
UDPStandardImplementation::UDPStandardImplementation()
|
||||
@ -79,6 +80,7 @@ UDPStandardImplementation::UDPStandardImplementation()
|
||||
cout << "\nWARNING: Could not change socket receiver buffer size in file /proc/sys/net/core/rmem_max" << endl;
|
||||
else if(system("echo 250000 > /proc/sys/net/core/netdev_max_backlog"))
|
||||
cout << "\nWARNING: Could not change max length of input queue in file /proc/sys/net/core/netdev_max_backlog" << endl;
|
||||
|
||||
/** permanent setting heiner
|
||||
net.core.rmem_max = 104857600 # 100MiB
|
||||
net.core.netdev_max_backlog = 250000
|
||||
@ -261,6 +263,9 @@ int UDPStandardImplementation::setDetectorType(detectorType det){ FILE_LOG(logD
|
||||
case GOTTHARD:
|
||||
cout << endl << "***** This is a GOTTHARD Receiver *****" << endl << endl;
|
||||
break;
|
||||
case PROPIX:
|
||||
cout << endl << "***** This is a PROPIX Receiver *****" << endl << endl;
|
||||
break;
|
||||
case MOENCH:
|
||||
cout << endl << "***** This is a MOENCH Receiver *****" << endl << endl;
|
||||
break;
|
||||
@ -279,7 +284,7 @@ int UDPStandardImplementation::setDetectorType(detectorType det){ FILE_LOG(logD
|
||||
break;
|
||||
}
|
||||
|
||||
//moench variables
|
||||
//detector specific variables
|
||||
if(myDetectorType == GOTTHARD){
|
||||
fifosize = GOTTHARD_FIFO_SIZE;
|
||||
packetsPerFrame = GOTTHARD_PACKETS_PER_FRAME;
|
||||
@ -290,6 +295,16 @@ int UDPStandardImplementation::setDetectorType(detectorType det){ FILE_LOG(logD
|
||||
frameIndexMask = GOTTHARD_FRAME_INDEX_MASK;
|
||||
frameIndexOffset = GOTTHARD_FRAME_INDEX_OFFSET;
|
||||
packetIndexMask = GOTTHARD_PACKET_INDEX_MASK;
|
||||
}else if(myDetectorType == PROPIX){
|
||||
fifosize = PROPIX_FIFO_SIZE;
|
||||
packetsPerFrame = PROPIX_PACKETS_PER_FRAME;
|
||||
onePacketSize = PROPIX_ONE_PACKET_SIZE;
|
||||
frameSize = PROPIX_BUFFER_SIZE;
|
||||
bufferSize = PROPIX_BUFFER_SIZE;
|
||||
maxPacketsPerFile = MAX_FRAMES_PER_FILE * PROPIX_PACKETS_PER_FRAME;
|
||||
frameIndexMask = PROPIX_FRAME_INDEX_MASK;
|
||||
frameIndexOffset = PROPIX_FRAME_INDEX_OFFSET;
|
||||
packetIndexMask = PROPIX_PACKET_INDEX_MASK;
|
||||
}else if(myDetectorType == MOENCH){
|
||||
fifosize = MOENCH_FIFO_SIZE;
|
||||
packetsPerFrame = MOENCH_PACKETS_PER_FRAME;
|
||||
@ -562,19 +577,25 @@ int UDPStandardImplementation::getDynamicRange() const{
|
||||
|
||||
int32_t UDPStandardImplementation::setDynamicRange(int32_t dr){ FILE_LOG(logDEBUG) << __AT__ << " called";
|
||||
|
||||
cout << "Setting Dynamic Range" << endl;
|
||||
|
||||
int olddr = dynamicRange;
|
||||
|
||||
if(dr >= 0){
|
||||
cout << "Setting Dynamic Range to " << dr << endl;
|
||||
|
||||
dynamicRange = dr;
|
||||
|
||||
if(myDetectorType == EIGER){
|
||||
|
||||
|
||||
if(!tengigaEnable)
|
||||
if(!tengigaEnable){
|
||||
packetsPerFrame = EIGER_ONE_GIGA_CONSTANT * dynamicRange * EIGER_MAX_PORTS;
|
||||
else
|
||||
onePacketSize = EIGER_ONE_GIGA_ONE_PACKET_SIZE;
|
||||
|
||||
}else{
|
||||
packetsPerFrame = EIGER_TEN_GIGA_CONSTANT * dynamicRange * EIGER_MAX_PORTS;
|
||||
onePacketSize = EIGER_TEN_GIGA_ONE_PACKET_SIZE;
|
||||
}
|
||||
|
||||
frameSize = onePacketSize * packetsPerFrame;
|
||||
bufferSize = (frameSize/EIGER_MAX_PORTS) + EIGER_HEADER_LENGTH;//everything one port gets (img header plus packets)
|
||||
maxPacketsPerFile = EIGER_MAX_FRAMES_PER_FILE * packetsPerFrame;
|
||||
@ -614,7 +635,8 @@ int32_t UDPStandardImplementation::setDynamicRange(int32_t dr){ FILE_LOG(logDEB
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}else cout << "Getting Dynamic Range " << endl;
|
||||
|
||||
|
||||
return getDynamicRange();
|
||||
}
|
||||
@ -824,6 +846,8 @@ void UDPStandardImplementation::setupFifoStructure(){
|
||||
fifosize = GOTTHARD_FIFO_SIZE;
|
||||
if(myDetectorType == MOENCH)
|
||||
fifosize = MOENCH_FIFO_SIZE;
|
||||
if(myDetectorType == PROPIX)
|
||||
fifosize = PROPIX_FIFO_SIZE;
|
||||
else if(myDetectorType == EIGER)
|
||||
fifosize = EIGER_FIFO_SIZE;
|
||||
|
||||
@ -890,7 +914,7 @@ void UDPStandardImplementation::readFrame(char* c,char** raw, uint32_t &fnum, ui
|
||||
if (guiData == NULL){
|
||||
guiData = latestData;
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout << "gui data not null anymore" << endl;
|
||||
cprintf(CYAN,"gui data not null anymore\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -904,14 +928,14 @@ void UDPStandardImplementation::readFrame(char* c,char** raw, uint32_t &fnum, ui
|
||||
//could not get gui data
|
||||
if(!guiDataReady){
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout << "gui data not ready" << endl;
|
||||
cprintf(CYAN,"gui data not ready\n");
|
||||
#endif
|
||||
*raw = NULL;
|
||||
}
|
||||
//data ready, set guidata to receive new data
|
||||
else{
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout << "gui data ready" << endl;
|
||||
cprintf(CYAN,"gui data ready\n");
|
||||
#endif
|
||||
*raw = guiData;
|
||||
guiData = NULL;
|
||||
@ -921,14 +945,14 @@ void UDPStandardImplementation::readFrame(char* c,char** raw, uint32_t &fnum, ui
|
||||
pthread_mutex_unlock(&dataReadyMutex);*/
|
||||
if((nFrameToGui) && (writerthreads_mask)){
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout << "gonna post" << endl;
|
||||
cprintf(CYAN,"gonna post\n");
|
||||
#endif
|
||||
/*if(nFrameToGui){*/
|
||||
//release after getting data
|
||||
sem_post(&smp);
|
||||
}
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout << "done post" << endl;
|
||||
cprintf(CYAN,"done post\n");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -947,7 +971,7 @@ cout << "copyframe" << endl;
|
||||
//else guidata always null as guidataready is always 1 after 1st frame, and seccond data never gets copied
|
||||
if((!nFrameToGui) && (!guiData)){
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout << "doing nothing" << endl;
|
||||
cprintf(GREEN,"doing nothing\n");
|
||||
#endif
|
||||
pthread_mutex_lock(&dataReadyMutex);
|
||||
guiDataReady=0;
|
||||
@ -957,12 +981,12 @@ cout << "copyframe" << endl;
|
||||
//random read or nth frame read, gui needs data now or it is the first frame
|
||||
else{
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout << "gui needs data now or 1st frame" << endl;
|
||||
cprintf(GREEN,"gui needs data now or 1st frame\n");
|
||||
#endif
|
||||
pthread_mutex_lock(&dataReadyMutex);
|
||||
guiDataReady=0;
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout << "guidataready is 0, copying data" << endl;
|
||||
cprintf(GREEN,"guidataready is 0, copying data\n");
|
||||
#endif
|
||||
//eiger
|
||||
if(startbuf != NULL){
|
||||
@ -989,16 +1013,16 @@ cout << "copyframe" << endl;
|
||||
guiDataReady=1;
|
||||
pthread_mutex_unlock(&dataReadyMutex);
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout << "guidataready = 1" << endl;
|
||||
cprintf(GREEN,"guidataready = 1\n");
|
||||
#endif
|
||||
//nth frame read, block current process if the guireader hasnt read it yet
|
||||
if(nFrameToGui){
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout<<"waiting after copying"<<endl;
|
||||
cprintf(GREEN,"waiting after copying\n");
|
||||
#endif
|
||||
sem_wait(&smp);
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout<<"done waiting"<<endl;
|
||||
cprintf(GREEN,"done waiting\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -1033,31 +1057,39 @@ int UDPStandardImplementation::createUDPSockets(){
|
||||
if(!strlen(eth)){
|
||||
cout<<"warning:eth is empty.listening to all"<<endl;
|
||||
|
||||
for(int i=0;i<numListeningThreads;i++)
|
||||
for(int i=0;i<numListeningThreads;i++){
|
||||
// cprintf(YELLOW, "gonna try listening to all\n");
|
||||
udpSocket[i] = new genericSocket(port[i],genericSocket::UDP,bufferSize);
|
||||
}
|
||||
}
|
||||
//normal socket
|
||||
else{
|
||||
cout<<"eth:"<<eth<<endl;
|
||||
|
||||
for(int i=0;i<numListeningThreads;i++)
|
||||
for(int i=0;i<numListeningThreads;i++){
|
||||
// cprintf(YELLOW, "gonna try focussed\n");
|
||||
udpSocket[i] = new genericSocket(port[i],genericSocket::UDP,bufferSize,eth);
|
||||
}
|
||||
}
|
||||
|
||||
//error
|
||||
int iret;
|
||||
for(int i=0;i<numListeningThreads;i++){
|
||||
iret = udpSocket[i]->getErrorStatus();
|
||||
if(!iret)
|
||||
if(!iret){
|
||||
cout << "UDP port opened at port " << port[i] << endl;
|
||||
else{
|
||||
//cprintf(YELLOW, "socket of port %d descriptor:%d\n",i,udpSocket[i]->getsocketDescriptor());
|
||||
}else{
|
||||
#ifdef VERBOSE
|
||||
cprintf(BG_RED,"Could not create UDP socket on port %d error: %d\n", port[i], iret);
|
||||
#endif
|
||||
shutDownUDPSockets();
|
||||
return FAIL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
@ -1252,7 +1284,7 @@ int UDPStandardImplementation::setupWriter(){
|
||||
packetsInFile=0;
|
||||
packetsCaught=0;
|
||||
frameIndex=0;
|
||||
if(sfilefd) sfilefd=NULL;
|
||||
if(sfilefd) {cprintf(RED,"**FILE not closed!\n");fclose(sfilefd);sfilefd=NULL;}
|
||||
guiData = NULL;
|
||||
guiDataReady=0;
|
||||
strcpy(guiFileName,"");
|
||||
@ -1378,9 +1410,13 @@ int UDPStandardImplementation::createNewFile(){
|
||||
if(enableFileWrite && cbAction > DO_NOTHING){
|
||||
//close
|
||||
if(sfilefd){
|
||||
fclose(sfilefd);
|
||||
if(fclose(sfilefd)){
|
||||
cprintf(RED, "file close problem %d\n",fileno(sfilefd));
|
||||
fclose(sfilefd);
|
||||
}
|
||||
sfilefd = NULL;
|
||||
}
|
||||
|
||||
//open file
|
||||
if(!overwrite){
|
||||
if (NULL == (sfilefd = fopen((const char *) (savefilename), "wx"))){
|
||||
@ -1394,6 +1430,8 @@ int UDPStandardImplementation::createNewFile(){
|
||||
//setting buffer
|
||||
setvbuf(sfilefd,NULL,_IOFBF,BUF_SIZE);
|
||||
|
||||
//cprintf(YELLOW, "file value:%d\n",fileno(sfilefd));
|
||||
|
||||
//printing packet losses and file names
|
||||
if(!packetsCaught)
|
||||
cout << savefilename << endl;
|
||||
@ -1436,9 +1474,11 @@ void UDPStandardImplementation::closeFile(int ithr){
|
||||
if(!dataCompression){
|
||||
if(sfilefd){
|
||||
#ifdef VERBOSE
|
||||
cout << "sfield:" << (int)sfilefd << endl;
|
||||
cprintf(YELLOW, "gonna close file:%d\n",fileno(sfilefd));
|
||||
#endif
|
||||
fclose(sfilefd);
|
||||
if(fclose(sfilefd))
|
||||
perror("file close ERROR");
|
||||
//cprintf(YELLOW, "check close file:%d\n",fileno(sfilefd));
|
||||
sfilefd = NULL;
|
||||
}
|
||||
}
|
||||
@ -1449,7 +1489,8 @@ void UDPStandardImplementation::closeFile(int ithr){
|
||||
#ifdef VERBOSE
|
||||
cout << "sfield:" << (int)sfilefd << endl;
|
||||
#endif
|
||||
fclose(sfilefd);
|
||||
if(fclose(sfilefd))
|
||||
perror("close ERRROR");
|
||||
sfilefd = NULL;
|
||||
}
|
||||
#endif
|
||||
@ -1571,11 +1612,12 @@ int UDPStandardImplementation::stopReceiver(){
|
||||
|
||||
startReadout();
|
||||
|
||||
while(status == TRANSMITTING)
|
||||
while(status == TRANSMITTING){
|
||||
sem_post(&smp);
|
||||
usleep(5000);
|
||||
}
|
||||
|
||||
//semaphore destroy
|
||||
sem_post(&smp);
|
||||
sem_destroy(&smp);
|
||||
|
||||
//change status
|
||||
@ -1586,6 +1628,9 @@ int UDPStandardImplementation::stopReceiver(){
|
||||
cout << "Receiver Stopped.\nStatus:" << status << endl << endl;
|
||||
}else cout <<" Not idle to stop receiver" << endl;
|
||||
|
||||
|
||||
//sem_post(&smp);
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
@ -1789,6 +1834,7 @@ int UDPStandardImplementation::startListening(){
|
||||
break;
|
||||
|
||||
case GOTTHARD:
|
||||
case PROPIX:
|
||||
if(shortFrame == -1){
|
||||
lastpacketoffset = (((numJobsPerThread * packetsPerFrame - 1) * onePacketSize) + HEADER_SIZE_NUM_TOT_PACKETS);
|
||||
#ifdef VERYDEBUG
|
||||
@ -1833,7 +1879,7 @@ int UDPStandardImplementation::startListening(){
|
||||
while(!fifo[ithread]->push(buffer[ithread]));
|
||||
#ifdef FIFO_DEBUG
|
||||
//if(!ithread)
|
||||
cprintf(RED, "%d listener pushed into fifo %x\n",ithread, (void*)(buffer[ithread]));
|
||||
cprintf(MAGENTA, "%d listener pushed into fifo %x\n",ithread, (void*)(buffer[ithread]));
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -1934,7 +1980,7 @@ int UDPStandardImplementation::startWriting(){
|
||||
continue;
|
||||
}
|
||||
#ifdef VERYDEBUG
|
||||
else cout <<"**NOT a dummy packet"<<endl;
|
||||
else cout <<"**NOT a dummy packet"<< dec << numpackets<< endl;
|
||||
#endif
|
||||
|
||||
|
||||
@ -1951,7 +1997,7 @@ int UDPStandardImplementation::startWriting(){
|
||||
tempframenum += (startFrameIndex-1); //eiger frame numbers start at 1, so need to -1
|
||||
//tempframenum = ((tempframenum / EIGER_32BIT_INITIAL_CONSTANT) + startFrameIndex)-1;//eiger 32 bit mode is a multiple of 17c. +startframeindex for scans
|
||||
|
||||
}else if ((myDetectorType == GOTTHARD) && (shortFrame == -1))
|
||||
}else if ((myDetectorType == PROPIX) || ((myDetectorType == GOTTHARD) && (shortFrame == -1)))
|
||||
tempframenum = (((((uint32_t)(*((uint32_t*)(wbuf[ithread] + HEADER_SIZE_NUM_TOT_PACKETS))))+1)& (frameIndexMask)) >> frameIndexOffset);
|
||||
else
|
||||
tempframenum = ((((uint32_t)(*((uint32_t*)(wbuf[ithread] + HEADER_SIZE_NUM_TOT_PACKETS))))& (frameIndexMask)) >> frameIndexOffset);
|
||||
@ -1976,46 +2022,52 @@ int UDPStandardImplementation::startWriting(){
|
||||
for(i=0;i<numListeningThreads;++i)
|
||||
/* for eiger 32 bit mode, currframenum like gotthard, does not start from 0 or 1 */
|
||||
rawDataReadyCallBack(currframenum, wbuf[i], numpackets * onePacketSize, sfilefd, guiData,pRawDataReady);
|
||||
}else if (numpackets > 0){
|
||||
}
|
||||
|
||||
else if (numpackets > 0){
|
||||
for(j=0;j<numListeningThreads;++j){
|
||||
#ifdef WRITE_HEADERS
|
||||
if (myDetectorType == EIGER){
|
||||
//overwriting frame number in header
|
||||
for (i = 0; i < packetsPerFrame; i++)
|
||||
(*(uint32_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num1)) = currframenum;
|
||||
|
||||
for (i = 0; i < packetsPerFrame/2; i++){
|
||||
//overwriting frame number in header
|
||||
(*(uint32_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + onePacketSize*i)))->num1)) = currframenum;
|
||||
//overwriting port number and dynamic range
|
||||
if (!j) (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + onePacketSize*i)))->num3)) = (dynamicRange<<2);
|
||||
else (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + onePacketSize*i)))->num3)) = ((dynamicRange<<2)|(0x1));
|
||||
|
||||
#ifdef VERYDEBUG
|
||||
cprintf(RED, "%d - 0x%x - %d\n", i,
|
||||
(*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num3)),
|
||||
(*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num4)));
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
//for 32 bit,port number needs to be changed and packet number reconstructed
|
||||
if(dynamicRange == 32){
|
||||
for (i = 0; i < packetsPerFrame/4; i++){
|
||||
//new packet number that has space for 16 bit
|
||||
(*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num2))
|
||||
= ((*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num4)));
|
||||
|
||||
//new port number as its the same everywhere for 32 bit!!
|
||||
if((!j)&& (!bottom)) (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num3)) = 0x00;
|
||||
|
||||
(*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + onePacketSize*i)))->num2))
|
||||
= ((*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + onePacketSize*i)))->num4)));
|
||||
|
||||
#ifdef VERYDEBUG
|
||||
cprintf(RED, "%d - 0x%x - %d - %d\n", i,
|
||||
(*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num3)),
|
||||
(*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num4)),
|
||||
(*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num2)));
|
||||
(*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num3)),
|
||||
(*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num4)),
|
||||
(*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num2)));
|
||||
#endif
|
||||
}
|
||||
for (i = packetsPerFrame/4; i < packetsPerFrame/2; i++){
|
||||
//new packet number that has space for 16 bit
|
||||
(*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num2))
|
||||
= ((*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num4))+(packetsPerFrame/4));
|
||||
|
||||
//new port number as its the same everywhere for 32 bit!!
|
||||
if(!j) (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num3)) = 0x00;
|
||||
|
||||
(*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + onePacketSize*i)))->num2))
|
||||
= ((*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + onePacketSize*i)))->num4))+(packetsPerFrame/4));
|
||||
|
||||
#ifdef VERYDEBUG
|
||||
cprintf(RED, "%d -0x%x - %d - %d\n", i,
|
||||
(*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num3)),
|
||||
(*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num4)),
|
||||
(*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num2)));
|
||||
(*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num3)),
|
||||
(*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num4)),
|
||||
(*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num2)));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -2025,18 +2077,18 @@ int UDPStandardImplementation::startWriting(){
|
||||
writeToFile_withoutCompression(wbuf[j], numpackets,currframenum);
|
||||
}
|
||||
#ifdef VERYDEBUG
|
||||
cout << "written everyting" << endl;
|
||||
cprintf(BLUE,"written everyting\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
if(myDetectorType == EIGER) {
|
||||
#ifdef VERYDEBUG
|
||||
cout << "gonna copy frame" << endl;
|
||||
cprintf(BLUE,"gonna copy frame\n");
|
||||
#endif
|
||||
copyFrameToGui(wbuf,currframenum);
|
||||
#ifdef VERYDEBUG
|
||||
cout << "copied frame" << endl;
|
||||
cprintf(BLUE,"copied frame\n");
|
||||
#endif
|
||||
for(i=0;i<numListeningThreads;++i){
|
||||
while(!fifoFree[i]->push(wbuf[i]));
|
||||
@ -2135,14 +2187,11 @@ void UDPStandardImplementation::startFrameIndices(int ithread){
|
||||
FILE_LOG(logDEBUG) << __AT__ << " called";
|
||||
|
||||
if (myDetectorType == EIGER){
|
||||
//add currframenum later in this method for scans
|
||||
/*if(dynamicRange == 32)
|
||||
startFrameIndex = htonl(*(unsigned int*)((eiger_image_header32 *)((char*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS)))->fnum);
|
||||
else*/
|
||||
startFrameIndex = htonl(*(unsigned int*)((eiger_image_header *)((char*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS)))->fnum);
|
||||
startFrameIndex = 1;
|
||||
/*startFrameIndex = htonl(*(unsigned int*)((eiger_image_header *)((char*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS)))->fnum);*/
|
||||
}
|
||||
//gotthard has +1 for frame number and not a short frame
|
||||
else if ((myDetectorType == GOTTHARD) && (shortFrame == -1))
|
||||
else if ((myDetectorType == PROPIX) || ((myDetectorType == GOTTHARD) && (shortFrame == -1)))
|
||||
startFrameIndex = (((((uint32_t)(*((uint32_t*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS))))+1)
|
||||
& (frameIndexMask)) >> frameIndexOffset);
|
||||
else
|
||||
@ -2157,6 +2206,7 @@ void UDPStandardImplementation::startFrameIndices(int ithread){
|
||||
acqStarted = true;
|
||||
cout << "startAcquisitionIndex:" << hex << startAcquisitionIndex<<endl;
|
||||
}
|
||||
/*
|
||||
//for scans, cuz currfraenum resets
|
||||
else if (myDetectorType == EIGER){
|
||||
if(dynamicRange == 32)
|
||||
@ -2165,7 +2215,7 @@ void UDPStandardImplementation::startFrameIndices(int ithread){
|
||||
startFrameIndex += currframenum;
|
||||
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
cout << "startFrameIndex:" << startFrameIndex<<endl;
|
||||
prevframenum=startFrameIndex;
|
||||
@ -2196,7 +2246,7 @@ int i;
|
||||
//free buffer
|
||||
if(rc <= 0){
|
||||
cout << ithread << "Discarding empty frame/ End of acquisition" << endl;
|
||||
fifoFree[ithread]->push(buffer[ithread]);
|
||||
fifoFree[ithread]->push(buffer[ithread]);/** why not while(!)*/
|
||||
#ifdef FIFO_DEBUG
|
||||
cprintf(BLUE,"%d listener empty buffer pushed into fifofree %x\n", ithread, (void*)(buffer[ithread]));
|
||||
#endif
|
||||
@ -2208,7 +2258,7 @@ int i;
|
||||
if(rc == 266240)
|
||||
cprintf(GREEN, "%d Start of detector: Received test frame of 266240 bytes.\n",ithread);
|
||||
cout << ithread << "Discarding incomplete frame" << endl;
|
||||
fifoFree[ithread]->push(buffer[ithread]);
|
||||
fifoFree[ithread]->push(buffer[ithread]);/** why not while(!)*/
|
||||
#ifdef FIFO_DEBUG
|
||||
cprintf(BLUE,"%d listener last buffer free pushed into fifofree %x\n", ithread,(void*)(buffer[ithread]));
|
||||
#endif
|
||||
@ -2375,44 +2425,46 @@ void UDPStandardImplementation::writeToFile_withoutCompression(char* buf,int num
|
||||
offset += EIGER_HEADER_LENGTH;
|
||||
#ifdef WRITE_HEADERS
|
||||
#ifdef VERY_DEBUG
|
||||
int k = 0;
|
||||
if(dynamicRange != 32){
|
||||
cprintf(RED, "\np1 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num1)));
|
||||
cprintf(RED, "p1:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num3)));
|
||||
cprintf(RED, "p0 num:%d - %d\n", k, (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num4)));
|
||||
k = 1;
|
||||
cprintf(RED, "p2 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num1)));
|
||||
cprintf(RED, "p2:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3)));
|
||||
cprintf(RED, "p1 num:%d - %d\n", k,(*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num4)));
|
||||
k = 2;
|
||||
cprintf(RED, "p3 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1)));
|
||||
cprintf(RED, "p3:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3)));
|
||||
cprintf(RED, "p2 num:%d - %d\n", k,(*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num4)));
|
||||
}else{
|
||||
k = 0;
|
||||
cprintf(RED, "\np1 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num1)));
|
||||
cprintf(RED, "p1:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num3)));
|
||||
cprintf(RED, "p0 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num2)));
|
||||
k = 1;
|
||||
cprintf(RED, "p2 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num1)));
|
||||
cprintf(RED, "p2:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3)));
|
||||
cprintf(RED, "p1 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2)));
|
||||
k = 2;
|
||||
cprintf(RED, "p3 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1)));
|
||||
cprintf(RED, "p3:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3)));
|
||||
cprintf(RED, "p2 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2)));
|
||||
k = 256;
|
||||
cprintf(RED, "p257 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1)));
|
||||
cprintf(RED, "p257:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3)));
|
||||
cprintf(RED, "p256 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2)));
|
||||
k = 512;
|
||||
cprintf(RED, "p513 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1)));
|
||||
cprintf(RED, "p513:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3)));
|
||||
cprintf(RED, "p512 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2)));
|
||||
k = 768;
|
||||
cprintf(RED, "p769 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1)));
|
||||
cprintf(RED, "p769:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3)));
|
||||
cprintf(RED, "p768 num:%d - %d\n", k,(*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2)));
|
||||
if(myDetectorType == EIGER){
|
||||
int k = 0;
|
||||
if(dynamicRange != 32){
|
||||
cprintf(RED, "\np1 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num1)));
|
||||
cprintf(RED, "p1:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num3)));
|
||||
cprintf(RED, "p0 num:%d - %d\n", k, (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num4)));
|
||||
k = 1;
|
||||
cprintf(RED, "p2 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num1)));
|
||||
cprintf(RED, "p2:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3)));
|
||||
cprintf(RED, "p1 num:%d - %d\n", k,(*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num4)));
|
||||
k = 2;
|
||||
cprintf(RED, "p3 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1)));
|
||||
cprintf(RED, "p3:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3)));
|
||||
cprintf(RED, "p2 num:%d - %d\n", k,(*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num4)));
|
||||
}else{
|
||||
k = 0;
|
||||
cprintf(RED, "\np1 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num1)));
|
||||
cprintf(RED, "p1:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num3)));
|
||||
cprintf(RED, "p0 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num2)));
|
||||
k = 1;
|
||||
cprintf(RED, "p2 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num1)));
|
||||
cprintf(RED, "p2:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3)));
|
||||
cprintf(RED, "p1 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2)));
|
||||
k = 2;
|
||||
cprintf(RED, "p3 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1)));
|
||||
cprintf(RED, "p3:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3)));
|
||||
cprintf(RED, "p2 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2)));
|
||||
k = 256;
|
||||
cprintf(RED, "p257 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1)));
|
||||
cprintf(RED, "p257:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3)));
|
||||
cprintf(RED, "p256 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2)));
|
||||
k = 512;
|
||||
cprintf(RED, "p513 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1)));
|
||||
cprintf(RED, "p513:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3)));
|
||||
cprintf(RED, "p512 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2)));
|
||||
k = 768;
|
||||
cprintf(RED, "p769 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1)));
|
||||
cprintf(RED, "p769:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3)));
|
||||
cprintf(RED, "p768 num:%d - %d\n", k,(*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2)));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@ -2421,7 +2473,7 @@ void UDPStandardImplementation::writeToFile_withoutCompression(char* buf,int num
|
||||
|
||||
//for progress and packet loss calculation(new files)
|
||||
if(myDetectorType == EIGER);
|
||||
else if ((myDetectorType == GOTTHARD) && (shortFrame == -1))
|
||||
else if ((myDetectorType == PROPIX)||((myDetectorType == GOTTHARD) && (shortFrame == -1)))
|
||||
tempframenum = (((((uint32_t)(*((uint32_t*)(buf + HEADER_SIZE_NUM_TOT_PACKETS))))+1)& (frameIndexMask)) >> frameIndexOffset);
|
||||
else
|
||||
tempframenum = ((((uint32_t)(*((uint32_t*)(buf + HEADER_SIZE_NUM_TOT_PACKETS))))& (frameIndexMask)) >> frameIndexOffset);
|
||||
@ -2458,7 +2510,7 @@ void UDPStandardImplementation::writeToFile_withoutCompression(char* buf,int num
|
||||
//for packet loss
|
||||
lastpacket = (((packetsToSave - 1) * onePacketSize) + offset);
|
||||
if(myDetectorType == EIGER);
|
||||
else if ((myDetectorType == GOTTHARD) && (shortFrame == -1))
|
||||
else if ((myDetectorType == PROPIX)||((myDetectorType == GOTTHARD) && (shortFrame == -1)))
|
||||
tempframenum = (((((uint32_t)(*((uint32_t*)(buf + lastpacket))))+1)& (frameIndexMask)) >> frameIndexOffset);
|
||||
else
|
||||
tempframenum = ((((uint32_t)(*((uint32_t*)(buf + lastpacket))))& (frameIndexMask)) >> frameIndexOffset);
|
||||
@ -2624,20 +2676,18 @@ int UDPStandardImplementation::enableTenGiga(int enable){
|
||||
if(!tengigaEnable){
|
||||
packetsPerFrame = EIGER_ONE_GIGA_CONSTANT * dynamicRange * EIGER_MAX_PORTS;
|
||||
onePacketSize = EIGER_ONE_GIGA_ONE_PACKET_SIZE;
|
||||
maxPacketsPerFile = EIGER_MAX_FRAMES_PER_FILE * packetsPerFrame;
|
||||
}else{
|
||||
packetsPerFrame = EIGER_TEN_GIGA_CONSTANT * dynamicRange * EIGER_MAX_PORTS;
|
||||
onePacketSize = EIGER_TEN_GIGA_ONE_PACKET_SIZE;
|
||||
maxPacketsPerFile = EIGER_MAX_FRAMES_PER_FILE * packetsPerFrame*4;
|
||||
}
|
||||
frameSize = onePacketSize * packetsPerFrame;
|
||||
bufferSize = (frameSize/EIGER_MAX_PORTS) + EIGER_HEADER_LENGTH;//everything one port gets (img header plus packets)
|
||||
//maxPacketsPerFile = EIGER_MAX_FRAMES_PER_FILE * packetsPerFrame;
|
||||
maxPacketsPerFile = EIGER_MAX_FRAMES_PER_FILE * packetsPerFrame;
|
||||
|
||||
|
||||
cout<<"packetsPerFrame:"<<dec<<packetsPerFrame<<endl;
|
||||
cout<<"onePacketSize:"<<onePacketSize<<endl;
|
||||
cout<<"framsize:"<<frameSize<<endl;
|
||||
cout<<"framesize:"<<frameSize<<endl;
|
||||
cout<<"bufferSize:"<<bufferSize<<endl;
|
||||
cout<<"maxPacketsPerFile:"<<maxPacketsPerFile<<endl;
|
||||
|
||||
|
@ -65,7 +65,6 @@ slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int &success, UDPInterface*
|
||||
strcpy(socket->lastClientIP,"none");
|
||||
strcpy(socket->thisClientIP,"none1");
|
||||
strcpy(mess,"dummy message");
|
||||
|
||||
function_table();
|
||||
#ifdef VERBOSE
|
||||
cout << "Function table assigned." << endl;
|
||||
@ -146,8 +145,18 @@ void slsReceiverTCPIPInterface::stop(){
|
||||
|
||||
|
||||
cout<<"Shutting down TCP Socket and TCP thread"<<endl;
|
||||
cout << "Shutting down UDP Socket" << endl;
|
||||
if(receiverBase){
|
||||
receiverBase->shutDownUDPSockets();
|
||||
|
||||
cout << "Closing Files... " << endl;
|
||||
receiverBase->closeFile();
|
||||
}
|
||||
|
||||
|
||||
killTCPServerThread = 1;
|
||||
socket->ShutDownSocket();
|
||||
socket->exitServer();
|
||||
cout<<"Socket closed"<<endl;
|
||||
void* status;
|
||||
pthread_join(TCPServer_thread, &status);
|
||||
@ -205,6 +214,7 @@ void slsReceiverTCPIPInterface::startTCPServer(){
|
||||
receiverBase->closeFile();
|
||||
}
|
||||
|
||||
socket->exitServer();
|
||||
pthread_exit(NULL);
|
||||
}
|
||||
|
||||
@ -1027,6 +1037,8 @@ int slsReceiverTCPIPInterface::read_frame(){
|
||||
return moench_read_frame();
|
||||
case EIGER:
|
||||
return eiger_read_frame();
|
||||
case PROPIX:
|
||||
return propix_read_frame();
|
||||
default:
|
||||
return gotthard_read_frame();
|
||||
}
|
||||
@ -1393,6 +1405,162 @@ int slsReceiverTCPIPInterface::gotthard_read_frame(){
|
||||
|
||||
|
||||
|
||||
int slsReceiverTCPIPInterface::propix_read_frame(){
|
||||
ret=OK;
|
||||
char fName[MAX_STR_LENGTH]="";
|
||||
int acquisitionIndex = -1;
|
||||
int frameIndex= -1;
|
||||
int i;
|
||||
|
||||
|
||||
//retval is a full frame
|
||||
int bufferSize = PROPIX_BUFFER_SIZE;
|
||||
int onebuffersize = bufferSize/PROPIX_PACKETS_PER_FRAME;
|
||||
int onedatasize = PROPIX_DATA_BYTES;
|
||||
|
||||
char* raw = new char[bufferSize];
|
||||
int rnel = bufferSize/(sizeof(int));
|
||||
int* retval = new int[rnel];
|
||||
int* origVal = new int[rnel];
|
||||
//all initialized to 0
|
||||
for(i=0;i<rnel;i++) retval[i]=0;
|
||||
for(i=0;i<rnel;i++) origVal[i]=0;
|
||||
|
||||
|
||||
uint32_t index=0,index2=0;
|
||||
uint32_t pindex=0,pindex2=0;
|
||||
uint32_t bindex=0,bindex2=0;
|
||||
uint32_t startAcquisitionIndex=0;
|
||||
uint32_t startFrameIndex=0;
|
||||
|
||||
strcpy(mess,"Could not read frame\n");
|
||||
|
||||
|
||||
// execute action if the arguments correctly arrived
|
||||
#ifdef SLS_RECEIVER_UDP_FUNCTIONS
|
||||
|
||||
if (receiverBase == NULL){
|
||||
strcpy(mess,"Receiver not set up\n");
|
||||
ret=FAIL;
|
||||
}
|
||||
|
||||
/**send garbage with -1 index to try again*/
|
||||
else if(!receiverBase->getFramesCaught()){
|
||||
startAcquisitionIndex=-1;
|
||||
cout<<"haven't caught any frame yet"<<endl;
|
||||
}else{
|
||||
ret = OK;
|
||||
/*startIndex=receiverBase->getStartFrameIndex();*/
|
||||
receiverBase->readFrame(fName,&raw,index,startAcquisitionIndex,startFrameIndex);
|
||||
|
||||
/**send garbage with -1 index to try again*/
|
||||
if (raw == NULL){
|
||||
startAcquisitionIndex = -1;
|
||||
#ifdef VERBOSE
|
||||
cout<<"data not ready for gui yet"<<endl;
|
||||
#endif
|
||||
}else{
|
||||
bindex = ((uint32_t)(*((uint32_t*)raw)))+1;
|
||||
pindex = (bindex & PROPIX_PACKET_INDEX_MASK);
|
||||
index = ((bindex & PROPIX_FRAME_INDEX_MASK) >> PROPIX_FRAME_INDEX_OFFSET);
|
||||
bindex2 = ((uint32_t)(*((uint32_t*)((char*)(raw+onebuffersize)))))+1;
|
||||
pindex2 =(bindex2 & PROPIX_PACKET_INDEX_MASK);
|
||||
index2 =((bindex2 & PROPIX_FRAME_INDEX_MASK) >> PROPIX_FRAME_INDEX_OFFSET);
|
||||
#ifdef VERBOSE
|
||||
cout << "index1:" << hex << index << endl;
|
||||
cout << "index2:" << hex << index << endl;
|
||||
#endif
|
||||
|
||||
memcpy(origVal,raw,bufferSize);
|
||||
raw=NULL;
|
||||
|
||||
/*//ignore if half frame is missing
|
||||
if ((bindex != 0xFFFFFFFF) && (bindex2 != 0xFFFFFFFF)){*/
|
||||
|
||||
//should be same frame
|
||||
if (index == index2){
|
||||
//ideal situation (should be odd, even(index+1))
|
||||
if(!pindex){
|
||||
memcpy(retval,((char*) origVal)+4, onedatasize);
|
||||
memcpy((((char*)retval)+onedatasize), ((char*) origVal)+10+onedatasize, onedatasize);
|
||||
}
|
||||
//swap to even,odd
|
||||
else{
|
||||
memcpy((((char*)retval)+onedatasize),((char*) origVal)+4, onedatasize);
|
||||
memcpy(retval, ((char*) origVal)+10+onedatasize, onedatasize);
|
||||
index=index2;
|
||||
}
|
||||
}else
|
||||
cout << "different frames caught. frame1:"<< hex << index << ":"<<pindex<<" frame2:" << hex << index2 << ":"<<pindex2<<endl;
|
||||
/*}
|
||||
else{
|
||||
index = startIndex - 1;
|
||||
cout << "Missing Packet,Not sending to gui" << endl;
|
||||
}*/
|
||||
|
||||
|
||||
acquisitionIndex = index-startAcquisitionIndex;
|
||||
if(acquisitionIndex == -1)
|
||||
startFrameIndex = -1;
|
||||
else
|
||||
frameIndex = index-startFrameIndex;
|
||||
|
||||
#ifdef VERY_VERY_DEBUG
|
||||
cout << "acquisitionIndex calculated is:" << acquisitionIndex << endl;
|
||||
cout << "frameIndex calculated is:" << frameIndex << endl;
|
||||
cout << "index:" << index << endl;
|
||||
cout << "startAcquisitionIndex:" << startAcquisitionIndex << endl;
|
||||
cout << "startFrameIndex:" << startFrameIndex << endl;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef VERBOSE
|
||||
if(frameIndex!=-1){
|
||||
cout << "fName:" << fName << endl;
|
||||
cout << "acquisitionIndex:" << acquisitionIndex << endl;
|
||||
cout << "frameIndex:" << frameIndex << endl;
|
||||
cout << "startAcquisitionIndex:" << startAcquisitionIndex << endl;
|
||||
cout << "startFrameIndex:" << startFrameIndex << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
if(ret==OK && socket->differentClients){
|
||||
cout << "Force update" << endl;
|
||||
ret=FORCE_UPDATE;
|
||||
}
|
||||
|
||||
// send answer
|
||||
socket->SendDataOnly(&ret,sizeof(ret));
|
||||
if(ret==FAIL){
|
||||
cout << "mess:" << mess << endl;
|
||||
socket->SendDataOnly(mess,sizeof(mess));
|
||||
}
|
||||
else{
|
||||
socket->SendDataOnly(fName,MAX_STR_LENGTH);
|
||||
socket->SendDataOnly(&acquisitionIndex,sizeof(acquisitionIndex));
|
||||
socket->SendDataOnly(&frameIndex,sizeof(frameIndex));
|
||||
socket->SendDataOnly(retval,PROPIX_DATA_BYTES);
|
||||
}
|
||||
|
||||
delete [] retval;
|
||||
delete [] origVal;
|
||||
delete [] raw;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int slsReceiverTCPIPInterface::eiger_read_frame(){
|
||||
@ -1458,13 +1626,13 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){
|
||||
int c2=(frameSize/2) + 8; //second port
|
||||
int retindex=0;
|
||||
int irow,ibytesperpacket;
|
||||
int linesperpacket = (16/dynamicrange)* 1;// 16:1 line, 8:2 lines, 4:4 lines, 32: 0.5
|
||||
int linesperpacket = (16*1/dynamicrange);// 16:1 line, 8:2 lines, 4:4 lines, 32: 0.5
|
||||
int numbytesperlineperport=(EIGER_PIXELS_IN_ONE_ROW/EIGER_MAX_PORTS)*dynamicrange/8;//16:1024,8:512,4:256,32:2048
|
||||
int datapacketlength = EIGER_ONE_GIGA_ONE_DATA_SIZE;
|
||||
int total_num_bytes = 1040*(16*dynamicrange)*2;
|
||||
|
||||
if(tenGigaEnable){
|
||||
linesperpacket = (16/dynamicrange)* 4;// 16:4 line, 8:8 lines, 4:16 lines, 32: 2
|
||||
linesperpacket = (16*4/dynamicrange);// 16:4 line, 8:8 lines, 4:16 lines, 32: 2
|
||||
datapacketlength = EIGER_TEN_GIGA_ONE_DATA_SIZE;
|
||||
}
|
||||
//if 1GbE, one line is split into two packets for 32 bit mode, so its special
|
||||
@ -1482,7 +1650,7 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){
|
||||
memcpy(retval+retindex ,origVal+c1 ,numbytesperlineperport);
|
||||
retindex += numbytesperlineperport;
|
||||
c1 += numbytesperlineperport;
|
||||
if(dynamicrange == 32){
|
||||
if(dynamicrange == 32 && !tenGigaEnable){
|
||||
c1 += 16;
|
||||
memcpy(retval+retindex ,origVal+c1 ,numbytesperlineperport);
|
||||
retindex += numbytesperlineperport;
|
||||
@ -1493,7 +1661,7 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){
|
||||
memcpy(retval+retindex ,origVal+c2 ,numbytesperlineperport);
|
||||
retindex += numbytesperlineperport;
|
||||
c2 += numbytesperlineperport;
|
||||
if(dynamicrange == 32){
|
||||
if(dynamicrange == 32 && !tenGigaEnable){
|
||||
c2 += 16;
|
||||
memcpy(retval+retindex ,origVal+c2 ,numbytesperlineperport);
|
||||
retindex += numbytesperlineperport;
|
||||
@ -1502,7 +1670,7 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){
|
||||
}
|
||||
ibytesperpacket += numbytesperlineperport;
|
||||
}
|
||||
if(dynamicrange != 32) {
|
||||
if(dynamicrange != 32 || tenGigaEnable) {
|
||||
c1 += 16;
|
||||
c2 += 16;
|
||||
}
|
||||
@ -1519,7 +1687,7 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){
|
||||
for(irow=0;irow<EIGER_PIXELS_IN_ONE_COL/linesperpacket;++irow){
|
||||
ibytesperpacket=0;
|
||||
while(ibytesperpacket<datapacketlength){
|
||||
if(dynamicrange == 32){
|
||||
if(dynamicrange == 32 && !tenGigaEnable){
|
||||
//first port first chip
|
||||
c1 -= (numbytesperlineperport + 16);
|
||||
memcpy(retval+retindex ,origVal+c1 ,numbytesperlineperport);
|
||||
@ -1550,52 +1718,13 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){
|
||||
}
|
||||
ibytesperpacket += numbytesperlineperport;
|
||||
}
|
||||
if(dynamicrange != 32) {
|
||||
if(dynamicrange != 32 || tenGigaEnable) {
|
||||
c1 -= 16;
|
||||
c2 -= 16;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
int inum = 0;
|
||||
//dr = 16, hence uint16_t
|
||||
for(inum = 0; inum < 2; inum++)
|
||||
cprintf(YELLOW,"before htonl %d,0 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+(inum*(dynamicrange/8))))))));
|
||||
for(inum = 254; inum < 258; inum++)
|
||||
cprintf(YELLOW,"before htonl %d,0 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+(inum*(dynamicrange/8))))))));
|
||||
for(inum = 0; inum < 2; inum++)
|
||||
cprintf(YELLOW,"before htonl %d,2 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+((2048+inum)*(dynamicrange/8))))))));
|
||||
for(inum = 254; inum < 258; inum++)
|
||||
cprintf(YELLOW,"before htonl %d,2 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+((2048+inum)*(dynamicrange/8))))))));
|
||||
*/
|
||||
|
||||
|
||||
//64 bit htonl cuz of endianness
|
||||
for(i=0;i<(1024*(16*dynamicrange)*2)/8;i++){
|
||||
(*(((uint64_t*)retval)+i)) = be64toh(((uint64_t)(*(((uint64_t*)retval)+i))));
|
||||
/*
|
||||
int64_t temp;
|
||||
temp = ((uint64_t)(*(((uint64_t*)retval)+i)));
|
||||
temp = ((temp << 8) & 0xFF00FF00FF00FF00ULL ) | ((temp >> 8) & 0x00FF00FF00FF00FFULL );
|
||||
temp = ((temp << 16) & 0xFFFF0000FFFF0000ULL ) | ((temp >> 16) & 0x0000FFFF0000FFFFULL );
|
||||
temp = (temp << 32) | ((temp >> 32) & 0xFFFFFFFFULL);
|
||||
(*(((uint64_t*)retval)+i)) = temp;
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
//dr = 16, hence uint16_t
|
||||
for(inum = 0; inum < 2; inum++)
|
||||
cprintf(MAGENTA,"after htonl %d,0 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+(inum*(dynamicrange/8))))))));
|
||||
for(inum = 254; inum < 258; inum++)
|
||||
cprintf(MAGENTA,"after htonl %d,0 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+(inum*(dynamicrange/8))))))));
|
||||
for(inum = 0; inum < 2; inum++)
|
||||
cprintf(MAGENTA,"after htonl %d,2 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+((2048+inum)*(dynamicrange/8))))))));
|
||||
for(inum = 254; inum < 258; inum++)
|
||||
cprintf(MAGENTA,"after htonl %d,2 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+((2048+inum)*(dynamicrange/8))))))));
|
||||
*/
|
||||
|
||||
|
||||
|
||||
acquisitionIndex = index-startAcquisitionIndex;
|
||||
@ -2035,7 +2164,7 @@ int slsReceiverTCPIPInterface::set_dynamic_range() {
|
||||
sprintf(mess,"Receiver locked by %s\n", socket->lastClientIP);
|
||||
ret=FAIL;
|
||||
}
|
||||
else if(myDetectorType == EIGER){
|
||||
else if ((dr>0) && (myDetectorType == EIGER)){
|
||||
switch(dr){
|
||||
case 4:
|
||||
case 8:
|
||||
@ -2043,6 +2172,7 @@ int slsReceiverTCPIPInterface::set_dynamic_range() {
|
||||
case 32:break;
|
||||
default:
|
||||
sprintf(mess,"This dynamic range does not exist for eiger: %d\n",dr);
|
||||
cprintf(RED,"%s", mess);
|
||||
ret=FAIL;
|
||||
break;
|
||||
}
|
||||
@ -2052,8 +2182,9 @@ int slsReceiverTCPIPInterface::set_dynamic_range() {
|
||||
strcpy(mess,"Receiver not set up\n");
|
||||
ret=FAIL;
|
||||
}else{
|
||||
retval=receiverBase->setDynamicRange(dr);
|
||||
dynamicrange = dr;
|
||||
if(dr > 0) receiverBase->setDynamicRange(dr);
|
||||
retval = receiverBase->getDynamicRange();
|
||||
dynamicrange = retval;
|
||||
if(myDetectorType == EIGER){
|
||||
if(!tenGigaEnable)
|
||||
packetsPerFrame = EIGER_ONE_GIGA_CONSTANT * dynamicrange * EIGER_MAX_PORTS;
|
||||
|
Reference in New Issue
Block a user