mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-01-19 19:58:33 +01:00
Get trimbits (#462)
* added the possibility to save settings file for m3 and eiger * added save trimbits to gui * update release notes * python wip * moved location of trimbits save option in gui * python works * updating getModule with all its parameters in the server side * updating binaries
This commit is contained in:
@@ -406,66 +406,139 @@ int receiveDataOnly(int file_des, void *buf, int length) {
|
||||
return total_received;
|
||||
}
|
||||
|
||||
int sendModule(int file_des, sls_detector_module *myMod) {
|
||||
enum TLogLevel level = logDEBUG1;
|
||||
LOG(level, ("Sending Module\n"));
|
||||
int ts = 0, n = 0;
|
||||
|
||||
n = sendData(file_des, &(myMod->serialnumber),
|
||||
sizeof(myMod->serialnumber), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("serialno sent %d bytes. serialno: %d\n", n,
|
||||
myMod->serialnumber));
|
||||
n = sendData(file_des, &(myMod->nchan), sizeof(myMod->nchan), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("nchan sent %d bytes. nchan: %d\n", n, myMod->nchan));
|
||||
n = sendData(file_des, &(myMod->nchip), sizeof(myMod->nchip), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("nchip sent %d bytes. nchip: %d\n", n, myMod->nchip));
|
||||
n = sendData(file_des, &(myMod->ndac), sizeof(myMod->ndac), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("ndac sent %d bytes. ndac: %d\n", n, myMod->ndac));
|
||||
n = sendData(file_des, &(myMod->reg), sizeof(myMod->reg), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("reg sent %d bytes. reg: %d\n", n, myMod->reg));
|
||||
n = sendData(file_des, &(myMod->iodelay), sizeof(myMod->iodelay), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level,
|
||||
("iodelay sent %d bytes. iodelay: %d\n", n, myMod->iodelay));
|
||||
n = sendData(file_des, &(myMod->tau), sizeof(myMod->tau), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("tau sent %d bytes. tau: %d\n", n, myMod->tau));
|
||||
n = sendData(file_des, myMod->eV, sizeof(myMod->eV), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("eV sent %d bytes. eV: %d\n", n, myMod->eV[0]));
|
||||
// dacs
|
||||
n = sendData(file_des, myMod->dacs, sizeof(int) * (myMod->ndac), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("dacs sent %d bytes.\n", n));
|
||||
// channels
|
||||
n = sendData(file_des, myMod->chanregs, sizeof(int) * (myMod->nchan),
|
||||
INT32);
|
||||
LOG(level, ("chanregs sent %d bytes.\n", n));
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("received module of size %d register %x\n", ts, myMod->reg));
|
||||
return ts;
|
||||
}
|
||||
|
||||
int receiveModule(int file_des, sls_detector_module *myMod) {
|
||||
enum TLogLevel level = logDEBUG1;
|
||||
LOG(level, ("Receiving Module\n"));
|
||||
int ts = 0, n = 0;
|
||||
int nDacs = myMod->ndac;
|
||||
#if defined(EIGERD) || defined(MYTHEN3D)
|
||||
int nChans = myMod->nchan; // can be zero for no trimbits
|
||||
LOG(level, ("nChans: %d\n", nChans));
|
||||
#endif
|
||||
n = receiveData(file_des, &(myMod->serialnumber),
|
||||
sizeof(myMod->serialnumber), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("serialno received. %d bytes. serialno: %d\n", n,
|
||||
LOG(level, ("serialno received %d bytes. serialno: %d\n", n,
|
||||
myMod->serialnumber));
|
||||
n = receiveData(file_des, &(myMod->nchan), sizeof(myMod->nchan), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("nchan received. %d bytes. nchan: %d\n", n, myMod->nchan));
|
||||
LOG(level, ("nchan received %d bytes. nchan: %d\n", n, myMod->nchan));
|
||||
n = receiveData(file_des, &(myMod->nchip), sizeof(myMod->nchip), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("nchip received. %d bytes. nchip: %d\n", n, myMod->nchip));
|
||||
LOG(level, ("nchip received %d bytes. nchip: %d\n", n, myMod->nchip));
|
||||
n = receiveData(file_des, &(myMod->ndac), sizeof(myMod->ndac), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("ndac received. %d bytes. ndac: %d\n", n, myMod->ndac));
|
||||
LOG(level, ("ndac received %d bytes. ndac: %d\n", n, myMod->ndac));
|
||||
n = receiveData(file_des, &(myMod->reg), sizeof(myMod->reg), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("reg received. %d bytes. reg: %d\n", n, myMod->reg));
|
||||
LOG(level, ("reg received %d bytes. reg: %d\n", n, myMod->reg));
|
||||
n = receiveData(file_des, &(myMod->iodelay), sizeof(myMod->iodelay), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level,
|
||||
("iodelay received. %d bytes. iodelay: %d\n", n, myMod->iodelay));
|
||||
("iodelay received %d bytes. iodelay: %d\n", n, myMod->iodelay));
|
||||
n = receiveData(file_des, &(myMod->tau), sizeof(myMod->tau), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("tau received. %d bytes. tau: %d\n", n, myMod->tau));
|
||||
LOG(level, ("tau received %d bytes. tau: %d\n", n, myMod->tau));
|
||||
n = receiveData(file_des, myMod->eV, sizeof(myMod->eV), INT32);
|
||||
if (!n) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("eV received. %d bytes. eV: %d\n", n, myMod->eV[0]));
|
||||
LOG(level, ("eV received %d bytes. eV: %d\n", n, myMod->eV[0]));
|
||||
// dacs
|
||||
if (nDacs != (myMod->ndac)) {
|
||||
LOG(logERROR, ("received wrong number of dacs. "
|
||||
@@ -478,24 +551,22 @@ int receiveModule(int file_des, sls_detector_module *myMod) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
LOG(level, ("dacs received. %d bytes.\n", n));
|
||||
LOG(level, ("dacs received %d bytes.\n", n));
|
||||
// channels
|
||||
#if defined(EIGERD) || defined(MYTHEN3D)
|
||||
if (((myMod->nchan) != 0) && // no trimbits
|
||||
(nChans != (myMod->nchan))) { // with trimbits
|
||||
LOG(logERROR, ("received wrong number of channels. "
|
||||
"Expected %d, got %d\n",
|
||||
nChans, (myMod->nchan)));
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
n = receiveData(file_des, myMod->chanregs, sizeof(int) * (myMod->nchan),
|
||||
INT32);
|
||||
LOG(level, ("chanregs received. %d bytes.\n", n));
|
||||
LOG(level, ("chanregs received %d bytes.\n", n));
|
||||
if (!n && myMod->nchan != 0) {
|
||||
return -1;
|
||||
}
|
||||
ts += n;
|
||||
#endif
|
||||
LOG(level, ("received module of size %d register %x\n", ts, myMod->reg));
|
||||
return ts;
|
||||
}
|
||||
|
||||
@@ -468,6 +468,7 @@ void function_table() {
|
||||
flist[F_SET_ANALOG_PULSING] = &set_analog_pulsing;
|
||||
flist[F_GET_DIGITAL_PULSING] = &get_digital_pulsing;
|
||||
flist[F_SET_DIGITAL_PULSING] = &set_digital_pulsing;
|
||||
flist[F_GET_MODULE] = &get_module;
|
||||
|
||||
// check
|
||||
if (NUM_DET_FUNCTIONS >= RECEIVER_ENUM_START) {
|
||||
@@ -1555,6 +1556,71 @@ int read_register(int file_des) {
|
||||
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
|
||||
}
|
||||
|
||||
int get_module(int file_des) {
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
|
||||
sls_detector_module module;
|
||||
int *myDac = NULL;
|
||||
int *myChan = NULL;
|
||||
module.dacs = NULL;
|
||||
module.chanregs = NULL;
|
||||
|
||||
#if !defined(MYTHEN3D) && !defined(EIGERD)
|
||||
functionNotImplemented();
|
||||
#else
|
||||
|
||||
// allocate to receive module structure
|
||||
// allocate dacs
|
||||
myDac = malloc(getNumberOfDACs() * sizeof(int));
|
||||
// error
|
||||
if (getNumberOfDACs() > 0 && myDac == NULL) {
|
||||
ret = FAIL;
|
||||
sprintf(mess, "Could not allocate dacs\n");
|
||||
LOG(logERROR, (mess));
|
||||
} else
|
||||
module.dacs = myDac;
|
||||
|
||||
// allocate chans
|
||||
if (ret == OK) {
|
||||
myChan = malloc(getTotalNumberOfChannels() * sizeof(int));
|
||||
if (getTotalNumberOfChannels() > 0 && myChan == NULL) {
|
||||
ret = FAIL;
|
||||
sprintf(mess, "Could not allocate chans\n");
|
||||
LOG(logERROR, (mess));
|
||||
} else
|
||||
module.chanregs = myChan;
|
||||
}
|
||||
|
||||
// receive module structure
|
||||
if (ret == OK) {
|
||||
module.nchip = getNumberOfChips();
|
||||
module.nchan = getTotalNumberOfChannels();
|
||||
module.ndac = getNumberOfDACs();
|
||||
|
||||
// ensure nchan is not 0, else trimbits not copied
|
||||
if (module.nchan == 0) {
|
||||
strcpy(mess, "Could not get module as the number of channels to copy is 0\n");
|
||||
LOG(logERROR, (mess));
|
||||
return FAIL;
|
||||
}
|
||||
getModule(&module);
|
||||
}
|
||||
#endif
|
||||
Server_SendResult(file_des, INT32, NULL, 0);
|
||||
if (ret != FAIL) {
|
||||
if (sendModule(file_des, &module) < 0) {
|
||||
ret = FAIL;
|
||||
}
|
||||
}
|
||||
if (myChan != NULL)
|
||||
free(myChan);
|
||||
if (myDac != NULL)
|
||||
free(myDac);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int set_module(int file_des) {
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
@@ -1631,8 +1697,10 @@ int set_module(int file_des) {
|
||||
#endif
|
||||
LOG(logDEBUG1, ("Settings: %d\n", retval));
|
||||
}
|
||||
free(myChan);
|
||||
free(myDac);
|
||||
if (myChan != NULL)
|
||||
free(myChan);
|
||||
if (myDac != NULL)
|
||||
free(myDac);
|
||||
#endif
|
||||
|
||||
return Server_SendResult(file_des, INT32, NULL, 0);
|
||||
|
||||
Reference in New Issue
Block a user