almost there

This commit is contained in:
Dhanya Maliakal
2016-10-18 08:43:16 +02:00
parent f751e060b9
commit 1bade91254
3 changed files with 110 additions and 65 deletions

View File

@ -5070,10 +5070,14 @@ void multiSlsDetector::startReceivingDataThread(){
void *zmqsocket;
context = zmq_ctx_new();
zmqsocket = zmq_socket(context, ZMQ_PULL);
//int hwmval = 10;
//zmq_setsockopt(zmqsocket,ZMQ_RCVHWM,&hwmval,sizeof(hwmval)); //set receive HIGH WATER MARK (8-9ms slower)
zmq_connect(zmqsocket, hostname);
cout << "ZMQ Client of " << ithread << " at " << hostname << endl;
cprintf(BLUE,"%d Created socket\n",ithread);
/*
zmq_pollitem_t pollitem = {zmqsocket, 0 , ZMQ_POLLIN , 0};
*/
//initializations
int numReadoutPerDetector = 1;
bool jungfrau = false;
@ -5086,6 +5090,7 @@ void multiSlsDetector::startReceivingDataThread(){
int* image = new int[nel];
int len,idet = 0;
singleframe[ithread]=NULL;
int datavalue = 2;
threadStarted = true; //let calling function know thread started and obtained current
@ -5102,7 +5107,40 @@ void multiSlsDetector::startReceivingDataThread(){
//scan header-------------------------------------------------------------------
zmq_msg_init (&message);
len = zmq_msg_recv(&message, zmqsocket, 0);
while(1){
len = zmq_msg_recv(&message, zmqsocket, ZMQ_DONTWAIT);
if(len>0)
break;//also comment out the next recv
/*
zmq_poll(&pollitem, 1, 0);
//received something, get out
if(pollitem.revents & ZMQ_POLLIN){
pollitem.revents = 0;
break;
}
*/
//received nothing
else if (receiverStoppedFlag){
//one more chance if receiver stopped
datavalue--;
if(!datavalue){
//#ifdef VERYVERBOSE
cprintf(RED,"End of socket for %d\n", ithread);
//#endif
singleframe[ithread] = NULL;
break;
}
//wait to check again only if receiver stopped
//usleep(4000);
}
usleep(4000);
}
if(datavalue){
//len = zmq_msg_recv(&message, zmqsocket, 0);
if (len == -1) {
zmq_msg_close(&message);
cprintf(RED, "%d message null\n",ithread);
@ -5155,13 +5193,8 @@ void multiSlsDetector::startReceivingDataThread(){
//cprintf(BLUE,"%d data %d\n",ithread,len);
//end of socket ("end")
if (len < 1024*256 ) {
if(!len) cprintf(RED,"Received no data in socket for %d\n", ithread);
//#ifdef VERYVERBOSE
cprintf(RED,"End of socket for %d\n", ithread);
//#endif
zmq_msg_close(&message);
singleframe[ithread] = NULL;
//break;
cprintf(RED,"Received weird packet size %d in socket for %d\n", len, ithread);
memset((char*)(singleframe[ithread]),0xFF,singleDatabytes/numReadoutPerDetector);
}
else{
//actual data
@ -5176,8 +5209,10 @@ void multiSlsDetector::startReceivingDataThread(){
}
}
}
}
sem_post(&sem_singledone[ithread]);//let multi know is ready
zmq_msg_close(&message); // close the message
datavalue = 2;
}
cprintf(RED,"%d Closing socket\n",ithread);

View File

@ -58,6 +58,7 @@ int slsDetectorUtils::acquire(int delflag){
if(!receiver){
setDetectorIndex(-1);
}else{
receiverStoppedFlag = 0;
//put receiver read frequency to random if no gui
int ret = setReadReceiverFrequency(0);
if(ret>0 && (dataReady == NULL)){
@ -148,17 +149,21 @@ int slsDetectorUtils::acquire(int delflag){
if(receiver){
if(getReceiverStatus()!=IDLE)
stopReceiver();
if(setReceiverOnline()==OFFLINE_FLAG)
if(setReceiverOnline()==OFFLINE_FLAG){
*stoppedFlag=1;
receiverStoppedFlag = 1;
}
//multi detectors shouldnt have different receiver read frequencies enabled/disabled
if(setReadReceiverFrequency(0) < 0){
std::cout << "Error: The receiver read frequency is invalid:" << setReadReceiverFrequency(0) << std::endl;
*stoppedFlag=1;
receiverStoppedFlag = 1;
}
if(setReceiverOnline()==OFFLINE_FLAG)
if(setReceiverOnline()==OFFLINE_FLAG){
*stoppedFlag=1;
receiverStoppedFlag = 1;
}
}
@ -291,6 +296,7 @@ int slsDetectorUtils::acquire(int delflag){
if(setReceiverOnline()==OFFLINE_FLAG){
stopReceiver();
*stoppedFlag=1;
receiverStoppedFlag = 1;
pthread_mutex_unlock(&mg);
break;
}
@ -298,6 +304,7 @@ int slsDetectorUtils::acquire(int delflag){
if(startReceiver() == FAIL) {
stopReceiver();
*stoppedFlag=1;
receiverStoppedFlag = 1;
pthread_mutex_unlock(&mg);
break;
}
@ -344,6 +351,7 @@ int slsDetectorUtils::acquire(int delflag){
pthread_mutex_lock(&mg);
//offline
if(setReceiverOnline()==OFFLINE_FLAG){
receiverStoppedFlag = 1;
if ((getDetectorsType()==GOTTHARD) || (getDetectorsType()==MOENCH) || (getDetectorsType()==JUNGFRAU) ){
if((*correctionMask)&(1<<WRITE_FILE))
closeDataFile();
@ -352,6 +360,7 @@ int slsDetectorUtils::acquire(int delflag){
//online
else{
stopReceiver();
receiverStoppedFlag = 1;
// cout<<"***********receiver stopped"<<endl;
}
pthread_mutex_unlock(&mg);

View File

@ -837,6 +837,7 @@ virtual int setReceiverFifoDepth(int i = -1)=0;
//protected:
int *stoppedFlag;
int receiverStoppedFlag;
int64_t *timerValue;
detectorSettings *currentSettings;