Merge branch 'developer' of git.psi.ch:sls_detectors_software/sls_detector_software into developer

This commit is contained in:
2017-06-26 13:03:08 +02:00
22 changed files with 380 additions and 237 deletions

View File

@ -1,11 +1,11 @@
//#define SVNPATH ""
#define SVNURLLIB "git@git.psi.ch:sls_detectors_software/sls_detector_software.git"
//#define SVNREPPATH ""
#define SVNREPUUIDLIB "49f4f7295411e3dbcf00fd93ca821eb95e13771c"
//#define SVNREV 0x1411
#define SVNREPUUIDLIB "a5b59b47430913bb461b50da05b553874b33f39a"
//#define SVNREV 0x1418
//#define SVNKIND ""
//#define SVNSCHED ""
#define SVNAUTHLIB "Dhanya_Maliakal"
#define SVNREVLIB 0x1411
#define SVNDATELIB 0x20170614
#define SVNREVLIB 0x1418
#define SVNDATELIB 0x20170622
//

View File

@ -144,7 +144,9 @@ int slsDetector::freeSharedMemory() {
perror("shmdt failed\n");
return FAIL;
}
#ifdef VERBOSE
printf("Shared memory %d detached\n", shmId);
#endif
// remove shared memory
if (shmctl(shmId, IPC_RMID, 0) == -1) {
perror("shmctl(IPC_RMID) failed\n");
@ -247,7 +249,9 @@ slsDetector::slsDetector(int pos, detectorType type, int id, multiSlsDetector *p
/**Initializes the detector stucture \sa initializeDetectorSize
*/
#ifdef VERBOSE
cout << "init det size"<< endl;
#endif
initializeDetectorSize(type);
@ -261,9 +265,11 @@ slsDetector::~slsDetector(){
if (shmdt(thisDetector) == -1) {
perror("shmdt failed\n");
printf("Could not detach shared memory %d\n", shmId);
} else
}
#ifdef VERBOSE
else
printf("Shared memory %d detached\n", shmId);
#endif
delete thisReceiver;
};
@ -539,14 +545,19 @@ int slsDetector::initializeDetectorSize(detectorType type) {
/** set receiver udp port for Eiger */
thisDetector->receiverUDPPort2=DEFAULT_UDP_PORTNO+1;
/** set receiver ip address/hostname */
memset(thisDetector->receiver_hostname,0,MAX_STR_LENGTH);
strcpy(thisDetector->receiver_hostname,"none");
/** set receiver udp ip address */
memset(thisDetector->receiverUDPIP,0,MAX_STR_LENGTH);
strcpy(thisDetector->receiverUDPIP,"none");
/** set receiver udp mac address */
memset(thisDetector->receiverUDPMAC,0,MAX_STR_LENGTH);
strcpy(thisDetector->receiverUDPMAC,"none");
/** set detector mac address */
memset(thisDetector->detectorMAC,0,MAX_STR_LENGTH);
strcpy(thisDetector->detectorMAC,DEFAULT_DET_MAC);
/** set detector ip address */
memset(thisDetector->detectorIP,0,MAX_STR_LENGTH);
strcpy(thisDetector->detectorIP,DEFAULT_DET_IP);
/** sets onlineFlag to OFFLINE_FLAG */
@ -5814,7 +5825,7 @@ int slsDetector::exitServer(){
};
char* slsDetector::setNetworkParameter(networkParameter index, string value) {
string slsDetector::setNetworkParameter(networkParameter index, string value) {
int i;
switch (index) {
@ -5855,7 +5866,7 @@ char* slsDetector::setNetworkParameter(networkParameter index, string value) {
char* slsDetector::getNetworkParameter(networkParameter index) {
string slsDetector::getNetworkParameter(networkParameter index) {
switch (index) {
case DETECTOR_MAC:
@ -5890,13 +5901,17 @@ char* slsDetector::getNetworkParameter(networkParameter index) {
}
char* slsDetector::setDetectorMAC(string detectorMAC){
string slsDetector::setDetectorMAC(string detectorMAC){
if(detectorMAC.length()==17){
if((detectorMAC[2]==':')&&(detectorMAC[5]==':')&&(detectorMAC[8]==':')&&
(detectorMAC[11]==':')&&(detectorMAC[14]==':')){
strcpy(thisDetector->detectorMAC,detectorMAC.c_str());
if(!strcmp(thisDetector->receiver_hostname,"none"))
#ifdef VERBOSE
std::cout << "Warning: Receiver hostname not set yet." << endl;
#else
;
#endif
else if(setUDPConnection()==FAIL)
std::cout<< "Warning: UDP connection set up failed" << std::endl;
}else{
@ -5909,12 +5924,12 @@ char* slsDetector::setDetectorMAC(string detectorMAC){
std::cout << "Warning: server MAC Address should be in xx:xx:xx:xx:xx:xx format" << std::endl;
}
return thisDetector->detectorMAC;
return string(thisDetector->detectorMAC);
};
char* slsDetector::setDetectorIP(string detectorIP){
string slsDetector::setDetectorIP(string detectorIP){
struct sockaddr_in sa;
//taking function arguments into consideration
if(detectorIP.length()){
@ -5923,7 +5938,11 @@ char* slsDetector::setDetectorIP(string detectorIP){
if(result!=0){
strcpy(thisDetector->detectorIP,detectorIP.c_str());
if(!strcmp(thisDetector->receiver_hostname,"none"))
#ifdef VERBOSE
std::cout << "Warning: Receiver hostname not set yet." << endl;
#else
;
#endif
else if(setUDPConnection()==FAIL)
std::cout<< "Warning: UDP connection set up failed" << std::endl;
}else{
@ -5932,12 +5951,12 @@ char* slsDetector::setDetectorIP(string detectorIP){
}
}
}
return thisDetector->detectorIP;
return string(thisDetector->detectorIP);
}
char* slsDetector::setReceiver(string receiverIP){
string slsDetector::setReceiver(string receiverIP){
if(getRunStatus()==RUNNING){
cprintf(RED,"Acquisition already running, Stopping it.\n");
stopAcquisition();
@ -6003,16 +6022,18 @@ char* slsDetector::setReceiver(string receiverIP){
setUDPConnection();
if(thisDetector->myDetectorType == EIGER)
enableTenGigabitEthernet(thisDetector->tenGigaEnable);
//datastreamenable
//fifodepth
}
}
return thisDetector->receiver_hostname;
return string(thisDetector->receiver_hostname);
}
char* slsDetector::setReceiverUDPIP(string udpip){
string slsDetector::setReceiverUDPIP(string udpip){
struct sockaddr_in sa;
//taking function arguments into consideration
if(udpip.length()){
@ -6023,21 +6044,26 @@ char* slsDetector::setReceiverUDPIP(string udpip){
std::cout << "Warning: Receiver UDP IP Address should be VALID and in xxx.xxx.xxx.xxx format" << std::endl;
}else{
strcpy(thisDetector->receiverUDPIP,udpip.c_str());
if(!strcmp(thisDetector->receiver_hostname,"none"))
if(!strcmp(thisDetector->receiver_hostname,"none")) {
#ifdef VERBOSE
std::cout << "Warning: Receiver hostname not set yet." << endl;
#else
;
#endif
}
else if(setUDPConnection()==FAIL){
std::cout<< "Warning: UDP connection set up failed" << std::endl;
}
}
}
}
return thisDetector->receiverUDPIP;
return string(thisDetector->receiverUDPIP);
}
char* slsDetector::setReceiverUDPMAC(string udpmac){
string slsDetector::setReceiverUDPMAC(string udpmac){
if(udpmac.length()!=17){
setErrorMask((getErrorMask())|(COULDNOT_SET_NETWORK_PARAMETER));
std::cout << "Warning: receiver udp mac address should be in xx:xx:xx:xx:xx:xx format" << std::endl;
@ -6047,7 +6073,11 @@ char* slsDetector::setReceiverUDPMAC(string udpmac){
(udpmac[11]==':')&&(udpmac[14]==':')){
strcpy(thisDetector->receiverUDPMAC,udpmac.c_str());
if(!strcmp(thisDetector->receiver_hostname,"none"))
#ifdef VERBOSE
std::cout << "Warning: Receiver hostname not set yet." << endl;
#else
;
#endif
else if(setUDPConnection()==FAIL){
std::cout<< "Warning: UDP connection set up failed" << std::endl;
}
@ -6058,7 +6088,7 @@ char* slsDetector::setReceiverUDPMAC(string udpmac){
}
return thisDetector->receiverUDPMAC;
return string(thisDetector->receiverUDPMAC);
}
@ -6066,7 +6096,11 @@ char* slsDetector::setReceiverUDPMAC(string udpmac){
int slsDetector::setReceiverUDPPort(int udpport){
thisDetector->receiverUDPPort = udpport;
if(!strcmp(thisDetector->receiver_hostname,"none"))
std::cout << "Warning: Receiver hostname not set yet." << endl;
#ifdef VERBOSE
std::cout << "Warning: Receiver hostname not set yet." << endl;
#else
;
#endif
else if(setUDPConnection()==FAIL){
std::cout<< "Warning: UDP connection set up failed" << std::endl;
}
@ -6076,7 +6110,11 @@ int slsDetector::setReceiverUDPPort(int udpport){
int slsDetector::setReceiverUDPPort2(int udpport){
thisDetector->receiverUDPPort2 = udpport;
if(!strcmp(thisDetector->receiver_hostname,"none"))
std::cout << "Warning: Receiver hostname not set yet." << endl;
#ifdef VERBOSE
std::cout << "Warning: Receiver hostname not set yet." << endl;
#else
;
#endif
else if(setUDPConnection()==FAIL){
std::cout<< "Warning: UDP connection set up failed" << std::endl;
}
@ -6084,9 +6122,8 @@ int slsDetector::setReceiverUDPPort2(int udpport){
}
char* slsDetector::setDetectorNetworkParameter(networkParameter index, int delay){
string slsDetector::setDetectorNetworkParameter(networkParameter index, int delay){
int fnum = F_SET_NETWORK_PARAMETER;
char* cretval = new char[MAX_STR_LENGTH];
int ret = FAIL;
int retval = -1;
char mess[MAX_STR_LENGTH]="";
@ -6115,9 +6152,10 @@ char* slsDetector::setDetectorNetworkParameter(networkParameter index, int delay
std::cout<< "Speed set to "<< retval << std::endl;
#endif
sprintf(cretval,"%d",retval);
return cretval;
ostringstream ss;
ss << retval;
string s = ss.str();
return s;
}
@ -6130,7 +6168,9 @@ int slsDetector::setUDPConnection(){
//called before set up
if(!strcmp(thisDetector->receiver_hostname,"none")){
std::cout << "Warning: Receiver hostname not set yet." << endl;
#ifdef VERBOSE
std::cout << "Warning: Receiver hostname not set yet." << endl;
#endif
return FAIL;
}
@ -6188,9 +6228,9 @@ int slsDetector::setUDPConnection(){
}
}else
ret=FAIL;
#ifdef VERBOSE
printReceiverConfiguration();
#endif
return ret;
}
@ -6610,12 +6650,10 @@ int slsDetector::printReceiverConfiguration(){
std::cout << "Receiver Hostname:\t" << getNetworkParameter(RECEIVER_HOSTNAME) << std::endl;
std::cout << "Receiver UDP IP:\t" << getNetworkParameter(RECEIVER_UDP_IP) << std::endl;
std::cout << "Receiver UDP MAC:\t" << getNetworkParameter(RECEIVER_UDP_MAC) << std::endl;
std::cout << "Receiver UDP Port:\t" << getNetworkParameter(RECEIVER_UDP_PORT) << std::endl;
if(thisDetector->myDetectorType == EIGER)
std::cout << "Receiver UDP Port2:\t" << getNetworkParameter(RECEIVER_UDP_PORT2) << std::endl;
if(thisDetector->myDetectorType == EIGER)
std::cout << "Receiver UDP Port2:\t" << getNetworkParameter(RECEIVER_UDP_PORT2) << std::endl;
std::cout << std::endl;
return OK;

View File

@ -444,7 +444,7 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
\returns parameter
*/
char* setNetworkParameter(networkParameter index, string value);
string setNetworkParameter(networkParameter index, string value);
/**
gets the network parameters
@ -452,7 +452,7 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
\returns parameter
*/
char* getNetworkParameter(networkParameter index);
string getNetworkParameter(networkParameter index);
/* I/O */
@ -1704,36 +1704,36 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
/** returns the detector MAC address\sa sharedSlsDetector */
char* getDetectorMAC() {return thisDetector->detectorMAC;};
string getDetectorMAC() {return string(thisDetector->detectorMAC);};
/** returns the detector IP address\sa sharedSlsDetector */
char* getDetectorIP() {return thisDetector->detectorIP;};
string getDetectorIP() {return string(thisDetector->detectorIP);};
/** returns the receiver IP address \sa sharedSlsDetector */
char* getReceiver() {return thisDetector->receiver_hostname;};
string getReceiver() {return string(thisDetector->receiver_hostname);};
/** returns the receiver UDP IP address \sa sharedSlsDetector */
char* getReceiverUDPIP() {return thisDetector->receiverUDPIP;};
string getReceiverUDPIP() {return string(thisDetector->receiverUDPIP);};
/** returns the receiver UDP MAC address \sa sharedSlsDetector */
char* getReceiverUDPMAC() {return thisDetector->receiverUDPMAC;};
string getReceiverUDPMAC() {return string(thisDetector->receiverUDPMAC);};
/** returns the receiver UDP IP address \sa sharedSlsDetector */
char* getReceiverUDPPort() {char *c= new char[MAX_STR_LENGTH];sprintf(c,"%d",thisDetector->receiverUDPPort); return c;};
string getReceiverUDPPort() {ostringstream ss; ss << thisDetector->receiverUDPPort; string s = ss.str(); return s;};
/** returns the receiver UDP2 for Eiger IP address \sa sharedSlsDetector */
char* getReceiverUDPPort2() {char *c= new char[MAX_STR_LENGTH];sprintf(c,"%d",thisDetector->receiverUDPPort2); return c;};
string getReceiverUDPPort2() {ostringstream ss; ss << thisDetector->receiverUDPPort2; string s = ss.str(); return s;};
/** validates the format of detector MAC address and sets it \sa sharedSlsDetector */
char* setDetectorMAC(string detectorMAC);
string setDetectorMAC(string detectorMAC);
/** validates the format of detector IP address and sets it \sa sharedSlsDetector */
char* setDetectorIP(string detectorIP);
string setDetectorIP(string detectorIP);
/** validates and sets the receiver IP address/hostname \sa sharedSlsDetector */
char* setReceiver(string receiver);
string setReceiver(string receiver);
/** validates the format of receiver udp ip and sets it \sa sharedSlsDetector */
char* setReceiverUDPIP(string udpip);
string setReceiverUDPIP(string udpip);
/** validates the format of receiver udp mac and sets it \sa sharedSlsDetector */
char* setReceiverUDPMAC(string udpmac);
string setReceiverUDPMAC(string udpmac);
/** sets the receiver udp port \sa sharedSlsDetector */
int setReceiverUDPPort(int udpport);
/** sets the receiver udp port2 for Eiger \sa sharedSlsDetector */
int setReceiverUDPPort2(int udpport);
/** sets the transmission delay for left or right port or for an entire frame*/
char* setDetectorNetworkParameter(networkParameter index, int delay);
string setDetectorNetworkParameter(networkParameter index, int delay);
/** Sets the read receiver frequency
if data required from receiver randomly readRxrFrequency=0,

View File

@ -1319,7 +1319,15 @@ string slsDetectorCommand::cmdAcquire(int narg, char *args[], int action) {
myDet->setOnline(ONLINE_FLAG);
myDet->setReceiverOnline(ONLINE_FLAG);
if (myDet->setReceiverOnline(ONLINE_FLAG) == ONLINE_FLAG) {
//if it was not off
if (myDet->enableDataStreamingFromReceiver(-1) != 0){
//switch it off, if error
if (myDet->enableDataStreamingFromReceiver(0) != 0) {
return string("could not disable data streaming in receiver\n");
}
}
}
if(myDet->acquire() == FAIL)
return string("acquire unsuccessful");
@ -2930,7 +2938,6 @@ string slsDetectorCommand::cmdNetworkParameter(int narg, char *args[], int actio
myDet->setNetworkParameter(t, args[1]);
return myDet->getNetworkParameter(t);
}
string slsDetectorCommand::helpNetworkParameter(int narg, char *args[], int action) {
@ -4831,12 +4838,23 @@ string slsDetectorCommand::cmdReceiver(int narg, char *args[], int action) {
myDet->setOnline(ONLINE_FLAG);
myDet->setReceiverOnline(ONLINE_FLAG);
int receivers = myDet->setReceiverOnline(ONLINE_FLAG);
if(cmd=="receiver"){
if (action==PUT_ACTION) {
if(!strcasecmp(args[1],"start"))
if(!strcasecmp(args[1],"start")) {
//to ensure data streaming enable is the same across client and receiver
if (receivers == ONLINE_FLAG) {
//if it was not off
if (myDet->enableDataStreamingFromReceiver(-1) != 0){
//switch it off, if error
if (myDet->enableDataStreamingFromReceiver(0) != 0) {
return string("could not disable data streaming in receiver\n");
}
}
}
myDet->startReceiver();
}
else if(!strcasecmp(args[1],"stop")){
//myDet->stopReceiver();
// myDet->startReceiverReadout();

View File

@ -62,18 +62,6 @@ int slsDetectorUtils::acquire(int delflag){
bool receiver = (setReceiverOnline()==ONLINE_FLAG);
if(!receiver){
setDetectorIndex(-1);
}else{
//put receiver read frequency to random if no gui
int ret = setReadReceiverFrequency(0);
if(ret>0 && (dataReady == NULL)){
ret = setReadReceiverFrequency(1,0);
std::cout << "No Data call back and hence receiver read frequency reset to " << ret <<" (Random)" << std::endl;
}
//start/stop data streaming threads if threads in client enabled/disabled
ret = enableDataStreamingFromReceiver(-1);
// cout<<"getting datastream:"<<ret<<endl;
// cout<<"result of enabledatastream:"<<enableDataStreamingFromReceiver(ret)<<endl;
}
int nc=setTimer(CYCLES_NUMBER,-1);
@ -154,11 +142,6 @@ int slsDetectorUtils::acquire(int delflag){
pthread_mutex_lock(&mg); //cout << "lock"<< endl;
if(getReceiverStatus()!=IDLE)
stopReceiver();
//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;
}
if(setReceiverOnline()==OFFLINE_FLAG)
*stoppedFlag=1;
pthread_mutex_unlock(&mg);//cout << "unlock"<< endl;

View File

@ -171,7 +171,7 @@ class slsDetectorUtils : public slsDetectorActions, public postProcessing {
\returns parameter
*/
virtual char *getNetworkParameter(networkParameter i)=0;
virtual string getNetworkParameter(networkParameter i)=0;
/**
sets the network parameters (implemented for gotthard)
@ -180,7 +180,7 @@ class slsDetectorUtils : public slsDetectorActions, public postProcessing {
\returns parameter
*/
virtual char *setNetworkParameter(networkParameter i, string s)=0;
virtual string setNetworkParameter(networkParameter i, string s)=0;
/**
changes/gets the port number