eiger server: vcal=0, rx_fifodepth to greater than 32 bit, trimval argument range check, activate to both control and stop server, end of eiger server (if detectorip normal) set activate to 1 (for future eiger firmware), added setflippeddatax to users, removing warnings and check of detector size before accessing detector[0], updating subexptime also updated subperiod in master file, remove keeprunning in rxr that keeps it busy to semaphore

This commit is contained in:
2020-03-10 09:25:41 +01:00
parent 9649982932
commit d112956f79
24 changed files with 190 additions and 105 deletions

View File

@ -1,9 +1,9 @@
Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repsitory UUID: e4645a8273c8265bc584579d5f7f8eb6dc4379f7
Revision: 360
Branch: 4.1.0-rc
Last Changed Author: GitHub_GitHub
Last Changed Rev: 4138
Last Changed Date: 2019-10-04 09:28:27.000000001 +0200 ./xparameters.h
Repsitory UUID: 9649982932b2db75b9bf720ce4a13e7cdb059430
Revision: 361
Branch: 4.1.2-rc
Last Changed Author: Gemma_Tinti
Last Changed Rev: 4157
Last Changed Date: 2020-03-09 18:18:12.000000001 +0100 ./xparameters.h

View File

@ -1,6 +1,6 @@
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
#define GITREPUUID "e4645a8273c8265bc584579d5f7f8eb6dc4379f7"
#define GITAUTH "GitHub_GitHub"
#define GITREV 0x4138
#define GITDATE 0x20191004
#define GITBRANCH "4.1.0-rc"
#define GITREPUUID "9649982932b2db75b9bf720ce4a13e7cdb059430"
#define GITAUTH "Gemma_Tinti"
#define GITREV 0x4157
#define GITDATE 0x20200309
#define GITBRANCH "4.1.2-rc"

View File

@ -284,6 +284,9 @@ u_int32_t getDetectorIP(){
FILE* sysFile = popen("ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2", "r");
fgets(output, sizeof(output), sysFile);
pclose(sysFile);
if (strlen(output) <= 1) {
return 0;
}
//converting IPaddress to hex.
char* pcword = strtok (output,".");
@ -329,7 +332,16 @@ void initControlServer(){
setupDetector();
#endif
// activate (if it gets ip) (later FW will deactivate at startup)
if (getDetectorIP() != 0) {
Beb_Activate(1);
Feb_Control_activate(1);
} else {
Beb_Activate(0);
Feb_Control_activate(0);
}
#endif
printf("\n");
}
@ -344,6 +356,16 @@ void initStopServer(){
Feb_Control_FebControl();
Feb_Control_Init(master,top,normal,getDetectorNumber());
printf("FEB Initialization done\n");
// activate (if it gets ip) (later FW will deactivate at startup)
// also needed for stop server for status
if (getDetectorIP() != 0) {
Beb_Activate(1);
Feb_Control_activate(1);
} else {
Beb_Activate(0);
Feb_Control_activate(0);
}
#endif
printf("\n");
}

View File

@ -31,7 +31,7 @@ enum DACINDEX {SVP,VTR,VRF,VRS,SVN,VTGSTV,VCMP_LL,VCMP_LR,CAL,VCMP_RL,RX
2556, /* Vtgstv */ \
1000, /* Vcmp_ll */ \
1000, /* Vcmp_lr */ \
4000, /* cal */ \
0, /* cal */ \
1000, /* Vcmp_rl */ \
1100, /* rxb_rb */ \
1100, /* rxb_lb */ \
@ -90,6 +90,7 @@ enum NETWORKINDEX {TXN_LEFT, TXN_RIGHT, TXN_FRAME,FLOWCTRL_10G};
#define DEFAULT_TEST_MODE (0)
#define DEFAULT_HIGH_VOLTAGE (0)
#define MAX_TRIMBITS_VALUE (63)
#define MAX_SUBFRAME_EXPOSURE_VAL_IN_10NS (0x1FFFFFFF) /** 29 bit register for max subframe exposure value */

View File

@ -2670,7 +2670,7 @@ int* multiSlsDetector::getDataFromDetector() {
int nodatadet = -1;
int nodatadetectortype = false;
detectorType types = getDetectorsType();
if (types == EIGER || types == JUNGFRAU || GOTTHARD || PROPIX) {
if (types == EIGER || types == JUNGFRAU || types == GOTTHARD || types == PROPIX) {
nodatadetectortype = true;
}
@ -3108,17 +3108,18 @@ slsDetectorDefs::externalCommunicationMode multiSlsDetector::setExternalCommunic
externalCommunicationMode pol) {
externalCommunicationMode ret, ret1;
//(Dhanya) FIXME: why first detector or is it the master one?
if (detectors.size())
if (detectors.size()) {
ret = detectors[0]->setExternalCommunicationMode(pol);
if (detectors[0]->getErrorMask())
setErrorMask(getErrorMask() | (1 << 0));
if (detectors[0]->getErrorMask())
setErrorMask(getErrorMask() | (1 << 0));
for (unsigned int idet = 1; idet < detectors.size(); ++idet) {
ret1 = detectors[idet]->setExternalCommunicationMode(pol);
if (detectors[idet]->getErrorMask())
setErrorMask(getErrorMask() | (1 << idet));
if (ret != ret1)
ret = GET_EXTERNAL_COMMUNICATION_MODE;
for (unsigned int idet = 1; idet < detectors.size(); ++idet) {
ret1 = detectors[idet]->setExternalCommunicationMode(pol);
if (detectors[idet]->getErrorMask())
setErrorMask(getErrorMask() | (1 << idet));
if (ret != ret1)
ret = GET_EXTERNAL_COMMUNICATION_MODE;
}
}
setMaster();
setSynchronization();
@ -3129,17 +3130,18 @@ slsDetectorDefs::externalSignalFlag multiSlsDetector::setExternalSignalFlags(
externalSignalFlag pol, int signalindex) {
externalSignalFlag ret, ret1;
//(Dhanya) FIXME: why first detector or is it the master one?
if (detectors.size())
if (detectors.size()) {
ret = detectors[0]->setExternalSignalFlags(pol, signalindex);
if (detectors[0]->getErrorMask())
setErrorMask(getErrorMask() | (1 << 0));
if (detectors[0]->getErrorMask())
setErrorMask(getErrorMask() | (1 << 0));
for (unsigned int idet = 1; idet < detectors.size(); ++idet) {
ret1 = detectors[idet]->setExternalSignalFlags(pol, signalindex);
if (detectors[idet]->getErrorMask())
setErrorMask(getErrorMask() | (1 << idet));
if (ret != ret1)
ret = GET_EXTERNAL_SIGNAL_FLAG;
for (unsigned int idet = 1; idet < detectors.size(); ++idet) {
ret1 = detectors[idet]->setExternalSignalFlags(pol, signalindex);
if (detectors[idet]->getErrorMask())
setErrorMask(getErrorMask() | (1 << idet));
if (ret != ret1)
ret = GET_EXTERNAL_SIGNAL_FLAG;
}
}
setMaster();
setSynchronization();
@ -5592,8 +5594,10 @@ int multiSlsDetector::enableDataStreamingToClient(int enable) {
std::cout << "Could not create data threads in client." << std::endl;
//only for the first det as theres no general one
setErrorMask(getErrorMask() | (1 << 0));
detectors[0]->setErrorMask((detectors[0]->getErrorMask()) |
if (detectors.size()) {
detectors[0]->setErrorMask((detectors[0]->getErrorMask()) |
(DATA_STREAMING));
}
}
}
}

View File

@ -3689,7 +3689,7 @@ int* slsDetector::getDataFromDetector(int *retval) {
int nodatadetectortype = false;
detectorType types = getDetectorsType();
if(types == EIGER || types == JUNGFRAU || GOTTHARD || PROPIX){
if(types == EIGER || types == JUNGFRAU || types == GOTTHARD || types == PROPIX){
nodatadetectortype = true;
}
@ -3906,7 +3906,9 @@ int slsDetector::configureMAC() {
bzero(cword, 50);
string s;
while (getline(ss, s, '.')) {
sprintf(cword,"%s%02x",cword,atoi(s.c_str()));
char cnum[50]="";
sprintf(cnum, "%02x", atoi(s.c_str()));
strcat(cword, cnum);
}
bzero(arg[0], 50);
strcpy(arg[0],cword);
@ -3922,7 +3924,7 @@ int slsDetector::configureMAC() {
bzero(cword, 50);
string s;
while (getline(ss, s, ':')) {
sprintf(cword,"%s%s",cword,s.c_str());
strcat(cword, s.c_str());
}
bzero(arg[1], 50);
strcpy(arg[1],cword);
@ -3941,7 +3943,7 @@ int slsDetector::configureMAC() {
bzero(cword, 50);
string s;
while (getline(ss, s, ':')) {
sprintf(cword,"%s%s",cword,s.c_str());
strcat(cword, s.c_str());
}
bzero(arg[3], 50);
strcpy(arg[3],cword);
@ -3957,7 +3959,9 @@ int slsDetector::configureMAC() {
bzero(cword, 50);
string s;
while (getline(ss, s, '.')) {
sprintf(cword,"%s%02x",cword,atoi(s.c_str()));
char cnum[50]="";
sprintf(cnum, "%02x", atoi(s.c_str()));
strcat(cword, cnum);
}
bzero(arg[4], 50);
strcpy(arg[4],cword);
@ -6122,6 +6126,19 @@ int slsDetector::activate(int const enable) {
if (ret==FORCE_UPDATE)
updateDetector();
}
if (connectStop() == OK){
stopSocket->SendDataOnly(&fnum,sizeof(fnum));
stopSocket->SendDataOnly(&arg,sizeof(arg));
stopSocket->ReceiveDataOnly(&ret,sizeof(ret));
if (ret==FAIL) {
stopSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Detector (Stop server) returned error: " << mess << std::endl;
setErrorMask((getErrorMask())|(DETECTOR_ACTIVATE));
} else {
stopSocket->ReceiveDataOnly(&retval,sizeof(retval));
}
disconnectStop();
}
}
#ifdef VERBOSE
if(retval==1)

View File

@ -471,6 +471,14 @@ int slsDetectorActions::executeAction(int level) {
case headerBefore:
fName=getCurrentFileName();
nowIndex=getFileIndexFromFileName(getCurrentFileName());
// all other parameters should be taken using text client calls in the header scripts!
sprintf(cmd,"%s nrun=%d fn=%s par=%s", \
getActionScript(level).c_str(), \
nowIndex, \
fName.c_str(), \
getActionParameter(level).c_str());
break;
case headerAfter:
// all other parameters should be taken using text client calls in the header scripts!

View File

@ -3066,7 +3066,9 @@ string slsDetectorCommand::cmdTrimEn(int narg, char *args[], int action){
npos = myDet->getTrimEn(opos);
if (npos != -1) {
for (int ip=0; ip<npos;++ip) {
sprintf(answer,"%s %d",answer,opos[ip]);
char cnum[50]="";
sprintf(cnum, " %d", opos[ip]);
strcat(answer, cnum);
}
}
}
@ -3708,7 +3710,9 @@ string slsDetectorCommand::cmdPositions(int narg, char *args[], int action){
double opos[npos];
myDet->getPositions(opos);
for (int ip=0; ip<npos;++ip) {
sprintf(answer,"%s %f",answer,opos[ip]);
char cnum[50]="";
sprintf(cnum, " %f", opos[ip]);
strcat(answer, cnum);
}
return string(answer);
@ -3887,9 +3891,11 @@ string slsDetectorCommand::cmdScans(int narg, char *args[], int action) {
ns=myDet->getScanSteps(is, values);
int p=myDet->getScanPrecision(is);
char format[1000];
sprintf(format, "%%s %%0.%df",p);
sprintf(format, " %%0.%df",p);
for (int i=0; i<ns; ++i) {
sprintf(answer,format,answer,values[i]);
char cnum[50]="";
sprintf(cnum, format, values[i]);
strcat(answer, cnum);
}
delete [] values;
}
@ -3954,10 +3960,11 @@ string slsDetectorCommand::cmdScans(int narg, char *args[], int action) {
ns=myDet->getScanSteps(is, values);
int p=myDet->getScanPrecision(is);
char format[1000];
sprintf(format, "%%s %%0.%df",p);
sprintf(answer,"%d ",ns);
sprintf(format, " %%0.%df",p);
for (int i=0; i<ns; ++i) {
sprintf(answer,format,answer,values[i]);
char cnum[50]="";
sprintf(cnum, format, values[i]);
strcat(answer, cnum);
}
delete [] values;
return string(answer);
@ -5850,7 +5857,7 @@ string slsDetectorCommand::cmdTimeLeft(int narg, char *args[], int action) {
if ((ret!=-1) && (index==ACQUISITION_TIME || index==FRAME_PERIOD || index==DELAY_AFTER_TRIGGER
|| index==ACTUAL_TIME || index==MEASUREMENT_TIME ||
MEASURED_PERIOD || MEASURED_SUBPERIOD)) {
index==MEASURED_PERIOD || index==MEASURED_SUBPERIOD)) {
rval=(double)ret*1E-9;
sprintf(answer,"%0.9f",rval);
} else {

View File

@ -314,6 +314,10 @@ int slsDetectorUsers::enableGapPixels(int enable) {
return myDetector->enableGapPixels(enable);
}
int slsDetectorUsers::setFlippedDataX(int value) {
return myDetector->setFlippedData(slsDetectorDefs::X, value);
}
std::string slsDetectorUsers::setReceiverFramesDiscardPolicy(std::string f) {
return myDetector->getReceiverFrameDiscardPolicy(
myDetector->setReceiverFramesDiscardPolicy(

View File

@ -553,6 +553,12 @@ class slsDetectorUsers
*/
int enableGapPixels(int enable=-1);
/** sets the enable which determines if data will be flipped across x axis
* @param value 0 or 1 to reset/set or -1 to get value
* @return enable flipped data across x axis
*/
int setFlippedDataX(int value=-1);
/**
* Sets the frames discard policy in receiver
* frame discard policy options:

View File

@ -4361,11 +4361,11 @@ int set_all_trimbits(int file_des){
#ifdef VERBOSE
printf("setting all trimbits to %d\n",arg);
#endif
if(arg < -1){
if(arg < -1 || arg > MAX_TRIMBITS_VALUE){
ret = FAIL;
strcpy(mess,"Cant set trimbits to this value\n");
sprintf(mess,"Cant set all trimbits to %d. Range 0 - %d\n", arg, MAX_TRIMBITS_VALUE);
cprintf(RED, "Warning: %s", mess);
}else {
} else {
if(arg >= 0){
ret = setAllTrimbits(arg);
//changes settings to undefined