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
* @param ithread listening thread number
* @param wbuffer writer buffer
* @param npackets number of packets from the fifo
* @param data pointer to the next packet start
* @param xmax max pixels in x direction
* @param ymax max pixels in y direction
* @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
* @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
@ -469,21 +468,21 @@ private:
* Called by startWriting()
* @param ithread writing thread number
* @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
* @param ithread writing thread number
* @param wbuffer writer buffer
* @param npackets number of packets from the fifo
* @param data pointer to the next packet start
* @param xmax max pixels in x direction
* @param ymax max pixels in y direction
* @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 SHORT_MAX_FRAMES_PER_FILE 100000
#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

View File

@ -1647,7 +1647,7 @@ int UDPBaseImplementation::startWriting(){ FILE_LOG(logDEBUG) << __AT__ << " sta
}
//data compression
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";
@ -2009,6 +2009,7 @@ void UDPBaseImplementation::handleDataCompression(int ithread, char* wbuffer[],
eventType thisEvent = PEDESTAL;
int ndata;
char* buff = 0;
int npackets = (uint16_t)(*((uint16_t*)wbuffer[0]));
data = wbuffer[0]+ HEADER_SIZE_NUM_TOT_PACKETS;
int remainingsize = npackets * onePacketSize;
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(){
tcpipInterface->getReceiverVersion();
return tcpipInterface->getReceiverVersion();
}

View File

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

View File

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