some changes

This commit is contained in:
Dhanya Maliakal 2015-07-10 16:04:29 +02:00
parent fbfafb98fd
commit 476d1b452f
8 changed files with 444 additions and 425 deletions

View File

@ -471,13 +471,12 @@ protected:
* data compression for each fifo output * data compression for each fifo output
* @param ithread listening thread number * @param ithread listening thread number
* @param wbuffer writer buffer * @param wbuffer writer buffer
* @param npackets number of packets from the fifo
* @param data pointer to the next packet start * @param data pointer to the next packet start
* @param xmax max pixels in x direction * @param xmax max pixels in x direction
* @param ymax max pixels in y direction * @param ymax max pixels in y direction
* @param nf nf * @param nf nf
*/ */
void handleDataCompression(int ithread, char* wbuffer[], int &npackets, char* data, int xmax, int ymax, int &nf); void handleDataCompression(int ithread, char* wbuffer[], char* data, int xmax, int ymax, int &nf);

View File

@ -459,9 +459,8 @@ private:
/** /**
* When acquisition is over, this is called * When acquisition is over, this is called
* @param ithread listening thread number * @param ithread listening thread number
* @param wbuffer writer buffer
*/ */
void stopWriting(int ithread, char* wbuffer[]); void stopWriting(int ithread);
/** /**
* updates parameters and writes to file when not a dummy frame * updates parameters and writes to file when not a dummy frame
@ -469,21 +468,21 @@ private:
* Called by startWriting() * Called by startWriting()
* @param ithread writing thread number * @param ithread writing thread number
* @param wbuffer writer buffer * @param wbuffer writer buffer
* @param npackets number of packets from the fifo * @param partialframe is 1 if both ports of eiger dont have same frame
* @param smaller is which port is the smaller frame number if only partial frame received
*/ */
int handleWithoutDataCompression(int ithread, char* wbuffer[], int &npackets); void handleWithoutDataCompression(int ithread, char* wbuffer[], int partialframe = 0, int smaller = 0);
/** /**
* data compression for each fifo output * data compression for each fifo output
* @param ithread writing thread number * @param ithread writing thread number
* @param wbuffer writer buffer * @param wbuffer writer buffer
* @param npackets number of packets from the fifo
* @param data pointer to the next packet start * @param data pointer to the next packet start
* @param xmax max pixels in x direction * @param xmax max pixels in x direction
* @param ymax max pixels in y direction * @param ymax max pixels in y direction
* @param nf nf * @param nf nf
*/ */
void handleDataCompression(int ithread, char* wbuffer[], int &npackets, char* data, int xmax, int ymax, int &nf); void handleDataCompression(int ithread, char* wbuffer[], char* data, int xmax, int ymax, int &nf);

View File

@ -19,7 +19,7 @@ typedef int int32_t;
#define MAX_FRAMES_PER_FILE 20000 #define MAX_FRAMES_PER_FILE 20000
#define SHORT_MAX_FRAMES_PER_FILE 100000 #define SHORT_MAX_FRAMES_PER_FILE 100000
#define MOENCH_MAX_FRAMES_PER_FILE 1000 #define MOENCH_MAX_FRAMES_PER_FILE 1000
#define EIGER_MAX_FRAMES_PER_FILE 20000 #define EIGER_MAX_FRAMES_PER_FILE 20
#define JFCTB_MAX_FRAMES_PER_FILE 100000 #define JFCTB_MAX_FRAMES_PER_FILE 100000

View File

@ -1647,7 +1647,7 @@ int UDPBaseImplementation::startWriting(){ FILE_LOG(logDEBUG) << __AT__ << " sta
} }
//data compression //data compression
else else
handleDataCompression(ithread,wbuf,numpackets,d, xmax, ymax, nf); handleDataCompression(ithread,wbuf,d, xmax, ymax, nf);
@ -1998,7 +1998,7 @@ void UDPBaseImplementation::writeToFile_withoutCompression(char* buf,int numpack
void UDPBaseImplementation::handleDataCompression(int ithread, char* wbuffer[], int &npackets, char* data, int xmax, int ymax, int &nf){ void UDPBaseImplementation::handleDataCompression(int ithread, char* wbuffer[], char* data, int xmax, int ymax, int &nf){
FILE_LOG(logDEBUG) << __FILE__ << "::" << __func__ << " starting"; FILE_LOG(logDEBUG) << __FILE__ << "::" << __func__ << " starting";
@ -2009,6 +2009,7 @@ void UDPBaseImplementation::handleDataCompression(int ithread, char* wbuffer[],
eventType thisEvent = PEDESTAL; eventType thisEvent = PEDESTAL;
int ndata; int ndata;
char* buff = 0; char* buff = 0;
int npackets = (uint16_t)(*((uint16_t*)wbuffer[0]));
data = wbuffer[0]+ HEADER_SIZE_NUM_TOT_PACKETS; data = wbuffer[0]+ HEADER_SIZE_NUM_TOT_PACKETS;
int remainingsize = npackets * onePacketSize; int remainingsize = npackets * onePacketSize;
int np; int np;

File diff suppressed because it is too large Load Diff

View File

@ -162,7 +162,7 @@ void slsReceiver::closeFile(int p) {
int64_t slsReceiver::getReceiverVersion(){ int64_t slsReceiver::getReceiverVersion(){
tcpipInterface->getReceiverVersion(); return tcpipInterface->getReceiverVersion();
} }

View File

@ -32,25 +32,25 @@ slsReceiverTCPIPInterface::~slsReceiverTCPIPInterface() {
} }
slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int &success, UDPInterface* rbase, int pn, bool bot): slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int &success, UDPInterface* rbase, int pn, bool bot):
myDetectorType(GOTTHARD), myDetectorType(GOTTHARD),
receiverBase(rbase), receiverBase(rbase),
ret(OK), ret(OK),
lockStatus(0), lockStatus(0),
shortFrame(-1), shortFrame(-1),
packetsPerFrame(GOTTHARD_PACKETS_PER_FRAME), packetsPerFrame(GOTTHARD_PACKETS_PER_FRAME),
dynamicrange(16), dynamicrange(16),
socket(NULL), socket(NULL),
killTCPServerThread(0), killTCPServerThread(0),
tenGigaEnable(0), portNumber(DEFAULT_PORTNO+2), tenGigaEnable(0), portNumber(DEFAULT_PORTNO+2),
bottom(bot){ bottom(bot){
int port_no=portNumber; int port_no=portNumber;
if(receiverBase == NULL) receiverBase = 0; if(receiverBase == NULL) receiverBase = 0;
if (pn>0) if (pn>0)
port_no = pn; port_no = pn;
success=OK; success=OK;
//create socket //create socket
if(success == OK){ if(success == OK){
@ -65,58 +65,60 @@ slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int &success, UDPInterface*
strcpy(socket->lastClientIP,"none"); strcpy(socket->lastClientIP,"none");
strcpy(socket->thisClientIP,"none1"); strcpy(socket->thisClientIP,"none1");
strcpy(mess,"dummy message"); strcpy(mess,"dummy message");
function_table(); function_table();
#ifdef VERBOSE #ifdef VERBOSE
cout << "Function table assigned." << endl; cout << "Function table assigned." << endl;
#endif #endif
//Catch signal SIGINT to close files properly //Catch signal SIGINT to close files properly
signal(SIGINT,staticCloseFile); signal(SIGINT,staticCloseFile);
} }
} }
} }
int slsReceiverTCPIPInterface::setPortNumber(int pn){ int slsReceiverTCPIPInterface::setPortNumber(int pn){
int p_number; int p_number;
MySocketTCP *oldsocket=NULL;;
int sd=0;
if (pn>0) { MySocketTCP *oldsocket=NULL;;
p_number = pn; int sd=0;
if (p_number<1024) { if (pn>0) {
sprintf(mess,"Too low port number %d\n", p_number); p_number = pn;
cout << mess << endl;
} else { if (p_number<1024) {
sprintf(mess,"Too low port number %d\n", p_number);
oldsocket=socket; cout << mess << endl;
socket = new MySocketTCP(p_number); } else {
if(socket){
sd = socket->getErrorStatus(); oldsocket=socket;
if (!sd){ socket = new MySocketTCP(p_number);
portNumber=p_number; if(socket){
delete oldsocket; sd = socket->getErrorStatus();
} else { if (!sd){
cout << "Could not bind port " << p_number << endl; portNumber=p_number;
if (sd==-10) { strcpy(socket->lastClientIP,oldsocket->lastClientIP);
delete oldsocket;
cout << "Port "<< p_number << " already set" << endl; } else {
} else { cout << "Could not bind port " << p_number << endl;
delete socket; if (sd==-10) {
socket=oldsocket;
} cout << "Port "<< p_number << " already set" << endl;
} else {
delete socket;
socket=oldsocket;
}
}
} else {
socket=oldsocket;
}
}
} }
} else {
socket=oldsocket;
}
}
}
return portNumber; return portNumber;
} }
@ -142,7 +144,7 @@ void slsReceiverTCPIPInterface::stop(){
receiverBase->shutDownUDPSockets(); receiverBase->shutDownUDPSockets();
cout << "Closing Files... " << endl; cout << "Closing Files... " << endl;
receiverBase->closeFile(); receiverBase->closeFile();
cout<<"Shutting down TCP Socket and TCP thread"<<endl; cout<<"Shutting down TCP Socket and TCP thread"<<endl;
@ -153,7 +155,7 @@ void slsReceiverTCPIPInterface::stop(){
pthread_join(TCPServer_thread, &status); pthread_join(TCPServer_thread, &status);
killTCPServerThread = 0; killTCPServerThread = 0;
cout<<"Threads joined"<<endl; cout<<"Threads joined"<<endl;
} }
@ -373,12 +375,12 @@ int slsReceiverTCPIPInterface::set_detector_type(){
retval = myDetectorType; retval = myDetectorType;
} }
} }
//#ifdef VERBOSE //#ifdef VERBOSE
if(ret!=FAIL) if(ret!=FAIL)
cout << "detector type" << dr << endl; cout << "detector type" << dr << endl;
else else
cout << mess << endl; cout << mess << endl;
//#endif //#endif
#endif #endif
if(ret==OK && socket->differentClients){ if(ret==OK && socket->differentClients){
@ -426,7 +428,7 @@ int slsReceiverTCPIPInterface::set_file_name() {
strcpy(mess,"Receiver not set up\n"); strcpy(mess,"Receiver not set up\n");
ret=FAIL; ret=FAIL;
} }
else else
strcpy(retval,receiverBase->setFileName(fName)); strcpy(retval,receiverBase->setFileName(fName));
} }
#ifdef VERBOSE #ifdef VERBOSE
@ -671,44 +673,44 @@ int slsReceiverTCPIPInterface::setup_udp(){
} }
else{ else{
//set up udp port //set up udp port
sscanf(args[1],"%d",&udpport); sscanf(args[1],"%d",&udpport);
sscanf(args[2],"%d",&udpport2); sscanf(args[2],"%d",&udpport2);
receiverBase->setUDPPortNo(udpport); receiverBase->setUDPPortNo(udpport);
receiverBase->setUDPPortNo2(udpport2); receiverBase->setUDPPortNo2(udpport2);
//setup udpip //setup udpip
//get ethernet interface or IP to listen to //get ethernet interface or IP to listen to
cout << "Ethernet interface is " << args[0] << endl; cout << "Ethernet interface is " << args[0] << endl;
temp = genericSocket::ipToName(args[0]); temp = genericSocket::ipToName(args[0]);
cout << temp << endl; cout << temp << endl;
if(temp=="none"){ if(temp=="none"){
ret = FAIL; ret = FAIL;
strcpy(mess, "failed to get ethernet interface or IP to listen to\n"); strcpy(mess, "failed to get ethernet interface or IP to listen to\n");
} }
else{ else{
strcpy(eth,temp.c_str()); strcpy(eth,temp.c_str());
if (strchr(eth,'.')!=NULL) { if (strchr(eth,'.')!=NULL) {
strcpy(eth,""); strcpy(eth,"");
ret = FAIL; ret = FAIL;
} }
FILE_LOG(logDEBUG) << __FILE__ << "::" << __func__ << " " << eth; FILE_LOG(logDEBUG) << __FILE__ << "::" << __func__ << " " << eth;
receiverBase->setEthernetInterface(eth); receiverBase->setEthernetInterface(eth);
cout << eth << endl; cout << eth << endl;
//get mac address from ethernet interface //get mac address from ethernet interface
if (ret != FAIL) if (ret != FAIL)
temp = genericSocket::nameToMac(eth); temp = genericSocket::nameToMac(eth);
if ((temp=="00:00:00:00:00:00") || (ret == FAIL)){
ret = FAIL; if ((temp=="00:00:00:00:00:00") || (ret == FAIL)){
strcpy(mess,"failed to get mac adddress to listen to\n"); ret = FAIL;
cout << "mess:" << mess << endl; strcpy(mess,"failed to get mac adddress to listen to\n");
} cout << "mess:" << mess << endl;
else{ }
strcpy(retval,temp.c_str()); else{
cout<<"mac:"<<retval<<endl; strcpy(retval,temp.c_str());
} cout<<"mac:"<<retval<<endl;
} }
}
} }
} }
#endif #endif
@ -751,7 +753,7 @@ int slsReceiverTCPIPInterface::start_receiver(){
strcpy(mess,"receiver not set up. set receiver ip again.\n"); strcpy(mess,"receiver not set up. set receiver ip again.\n");
ret = FAIL; ret = FAIL;
} }
*/ */
else if (receiverBase == NULL){ else if (receiverBase == NULL){
strcpy(mess,"Receiver not set up\n"); strcpy(mess,"Receiver not set up\n");
ret=FAIL; ret=FAIL;
@ -1287,8 +1289,8 @@ int slsReceiverTCPIPInterface::gotthard_read_frame(){
pindex2 =(bindex2 & GOTTHARD_PACKET_INDEX_MASK); pindex2 =(bindex2 & GOTTHARD_PACKET_INDEX_MASK);
index2 =((bindex2 & GOTTHARD_FRAME_INDEX_MASK) >> GOTTHARD_FRAME_INDEX_OFFSET); index2 =((bindex2 & GOTTHARD_FRAME_INDEX_MASK) >> GOTTHARD_FRAME_INDEX_OFFSET);
#ifdef VERBOSE #ifdef VERBOSE
cout << "index1:" << hex << index << endl; cout << "index1:" << hex << index << endl;
cout << "index2:" << hex << index << endl; cout << "index2:" << hex << index << endl;
#endif #endif
} }
@ -1310,21 +1312,21 @@ int slsReceiverTCPIPInterface::gotthard_read_frame(){
/*//ignore if half frame is missing /*//ignore if half frame is missing
if ((bindex != 0xFFFFFFFF) && (bindex2 != 0xFFFFFFFF)){*/ if ((bindex != 0xFFFFFFFF) && (bindex2 != 0xFFFFFFFF)){*/
//should be same frame //should be same frame
if (index == index2){ if (index == index2){
//ideal situation (should be odd, even(index+1)) //ideal situation (should be odd, even(index+1))
if(!pindex){ if(!pindex){
memcpy(retval,((char*) origVal)+4, onedatasize); memcpy(retval,((char*) origVal)+4, onedatasize);
memcpy((((char*)retval)+onedatasize), ((char*) origVal)+10+onedatasize, onedatasize); memcpy((((char*)retval)+onedatasize), ((char*) origVal)+10+onedatasize, onedatasize);
} }
//swap to even,odd //swap to even,odd
else{ else{
memcpy((((char*)retval)+onedatasize),((char*) origVal)+4, onedatasize); memcpy((((char*)retval)+onedatasize),((char*) origVal)+4, onedatasize);
memcpy(retval, ((char*) origVal)+10+onedatasize, onedatasize); memcpy(retval, ((char*) origVal)+10+onedatasize, onedatasize);
index=index2; index=index2;
} }
}else }else
cout << "different frames caught. frame1:"<< hex << index << ":"<<pindex<<" frame2:" << hex << index2 << ":"<<pindex2<<endl; cout << "different frames caught. frame1:"<< hex << index << ":"<<pindex<<" frame2:" << hex << index2 << ":"<<pindex2<<endl;
/*} /*}
else{ else{
index = startIndex - 1; index = startIndex - 1;
@ -1508,7 +1510,7 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){
} }
} }
} }
//bottom half module //bottom half module
@ -1561,7 +1563,7 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){
acquisitionIndex = index-startAcquisitionIndex; acquisitionIndex = index-startAcquisitionIndex;
if(acquisitionIndex == -1) if(acquisitionIndex == -1)
startFrameIndex = -1; startFrameIndex = -1;
else else
frameIndex = index-startFrameIndex; frameIndex = index-startFrameIndex;
#ifdef VERY_VERY_DEBUG #ifdef VERY_VERY_DEBUG
@ -1942,10 +1944,10 @@ int slsReceiverTCPIPInterface::set_detector_hostname() {
strcpy(mess,"Receiver not set up\n"); strcpy(mess,"Receiver not set up\n");
ret=FAIL; ret=FAIL;
} }
else{ else{
receiverBase->initialize(hostname); receiverBase->initialize(hostname);
strcpy(retval,receiverBase->getDetectorHostname()); strcpy(retval,receiverBase->getDetectorHostname());
} }
} }
#ifdef VERBOSE #ifdef VERBOSE
if(ret!=FAIL) if(ret!=FAIL)
@ -1998,15 +2000,15 @@ int slsReceiverTCPIPInterface::set_dynamic_range() {
} }
else if ((dr>0) && (myDetectorType == EIGER)){ else if ((dr>0) && (myDetectorType == EIGER)){
switch(dr){ switch(dr){
case 4: case 4:
case 8: case 8:
case 16: case 16:
case 32:break; case 32:break;
default: default:
sprintf(mess,"This dynamic range does not exist for eiger: %d\n",dr); sprintf(mess,"This dynamic range does not exist for eiger: %d\n",dr);
cprintf(RED,"%s", mess); cprintf(RED,"%s", mess);
ret=FAIL; ret=FAIL;
break; break;
} }
} }
if(ret!=FAIL){ if(ret!=FAIL){
@ -2247,6 +2249,7 @@ int slsReceiverTCPIPInterface::lock_receiver() {
int slsReceiverTCPIPInterface::set_port() { int slsReceiverTCPIPInterface::set_port() {
ret=OK; ret=OK;
MySocketTCP* mySocket=NULL; MySocketTCP* mySocket=NULL;
char oldLastClientIP[INET_ADDRSTRLEN];
int sd=-1; int sd=-1;
enum runStatus p_type; /* just to get the input */ enum runStatus p_type; /* just to get the input */
int p_number; int p_number;
@ -2277,12 +2280,14 @@ int slsReceiverTCPIPInterface::set_port() {
ret=FAIL; ret=FAIL;
} }
cout << "set port " << p_type << " to " << p_number <<endl; cout << "set port " << p_type << " to " << p_number <<endl;
strcpy(oldLastClientIP, socket->lastClientIP);
mySocket = new MySocketTCP(p_number); mySocket = new MySocketTCP(p_number);
} }
if(mySocket){ if(mySocket){
sd = mySocket->getErrorStatus(); sd = mySocket->getErrorStatus();
if (!sd){ if (!sd){
ret=OK; ret=OK;
strcpy(socket->lastClientIP,oldLastClientIP);
if (mySocket->differentClients) if (mySocket->differentClients)
ret=FORCE_UPDATE; ret=FORCE_UPDATE;
} else { } else {

View File

@ -25,7 +25,7 @@ void slsReceiverUsers::closeFile(int p) {
} }
int64_t slsReceiverUsers::getReceiverVersion(){ int64_t slsReceiverUsers::getReceiverVersion(){
slsReceiverUsers::receiver->getReceiverVersion(); return slsReceiverUsers::receiver->getReceiverVersion();
} }