getFileIndex

This commit is contained in:
Erik Frojdh
2019-04-10 14:16:04 +02:00
parent 92b674354d
commit 4b7c5c5950
6 changed files with 46 additions and 34 deletions

View File

@ -505,7 +505,7 @@ class Detector {
} }
int getFileIndex() { int getFileIndex() {
return det.setFileIndex(-1); return det.getFileIndex();
} }
//time in ns //time in ns

View File

@ -1654,6 +1654,8 @@ class multiSlsDetector : public virtual slsDetectorDefs {
*/ */
int setFileIndex(int i, int detPos = -1); int setFileIndex(int i, int detPos = -1);
int getFileIndex(int detPos = -1) const;
/** /**
* increments file index * increments file index
* @param detPos -1 for all detectors in list or specific detector position * @param detPos -1 for all detectors in list or specific detector position

View File

@ -216,7 +216,7 @@ struct sharedSlsDetector {
slsDetectorDefs::frameDiscardPolicy receiver_frameDiscardMode; slsDetectorDefs::frameDiscardPolicy receiver_frameDiscardMode;
/** receiver partial frames padding enable */ /** receiver partial frames padding enable */
bool receiver_framePadding; bool rxFramePadding;
/** activated receiver */ /** activated receiver */
bool activated; bool activated;
@ -234,7 +234,7 @@ struct sharedSlsDetector {
char receiver_fileName[MAX_STR_LENGTH]; char receiver_fileName[MAX_STR_LENGTH];
/** file index */ /** file index */
int receiver_fileIndex; int rxFileIndex;
/** file format */ /** file format */
slsDetectorDefs::fileFormat rxFileFormat; slsDetectorDefs::fileFormat rxFileFormat;
@ -1508,6 +1508,12 @@ class slsDetector : public virtual slsDetectorDefs{
*/ */
int setFileIndex(int i); int setFileIndex(int i);
/**
* Gets the file index
* @returns file index
*/
int getFileIndex() const;
/** /**
* increments file index * increments file index
* @returns the file index * @returns the file index

View File

@ -2978,6 +2978,13 @@ int multiSlsDetector::setFileIndex(int i, int detPos) {
return sls::minusOneIfDifferent(r); return sls::minusOneIfDifferent(r);
} }
int multiSlsDetector::getFileIndex(int detPos) const {
if (detPos >= 0)
return detectors[detPos]->getFileIndex();
auto r = parallelCall(&slsDetector::getFileIndex);
return sls::minusOneIfDifferent(r);
}
int multiSlsDetector::startReceiver(int detPos) { int multiSlsDetector::startReceiver(int detPos) {
// single // single
if (detPos >= 0) { if (detPos >= 0) {

View File

@ -343,13 +343,13 @@ void slsDetector::initializeDetectorStructure(detectorType type) {
detector_shm()->detectorStopAPIVersion = 0; detector_shm()->detectorStopAPIVersion = 0;
detector_shm()->receiverAPIVersion = 0; detector_shm()->receiverAPIVersion = 0;
detector_shm()->receiver_frameDiscardMode = NO_DISCARD; detector_shm()->receiver_frameDiscardMode = NO_DISCARD;
detector_shm()->receiver_framePadding = true; detector_shm()->rxFramePadding = true;
detector_shm()->activated = true; detector_shm()->activated = true;
detector_shm()->receiver_deactivatedPaddingEnable = true; detector_shm()->receiver_deactivatedPaddingEnable = true;
detector_shm()->receiver_silentMode = false; detector_shm()->receiver_silentMode = false;
sls::strcpy_safe(detector_shm()->receiver_filePath, "/"); sls::strcpy_safe(detector_shm()->receiver_filePath, "/");
sls::strcpy_safe(detector_shm()->receiver_fileName, "run"); sls::strcpy_safe(detector_shm()->receiver_fileName, "run");
detector_shm()->receiver_fileIndex = 0; detector_shm()->rxFileIndex = 0;
detector_shm()->rxFileFormat = BINARY; detector_shm()->rxFileFormat = BINARY;
switch (detector_shm()->myDetectorType) { switch (detector_shm()->myDetectorType) {
case GOTTHARD: case GOTTHARD:
@ -2127,11 +2127,11 @@ std::string slsDetector::setReceiverHostname(const std::string &receiverIP) {
<< "\ndetector id:" << detId << "\ndetector hostname:" << detector_shm()->hostname << "\ndetector id:" << detId << "\ndetector hostname:" << detector_shm()->hostname
<< "\nfile path:" << detector_shm()->receiver_filePath << "\nfile path:" << detector_shm()->receiver_filePath
<< "\nfile name:" << detector_shm()->receiver_fileName << "\nfile name:" << detector_shm()->receiver_fileName
<< "\nfile index:" << detector_shm()->receiver_fileIndex << "\nfile index:" << detector_shm()->rxFileIndex
<< "\nfile format:" << detector_shm()->rxFileFormat << "\nfile format:" << detector_shm()->rxFileFormat
<< "\nr_framesperfile:" << detector_shm()->rxFramesPerFile << "\nr_framesperfile:" << detector_shm()->rxFramesPerFile
<< "\nr_discardpolicy:" << detector_shm()->receiver_frameDiscardMode << "\nr_discardpolicy:" << detector_shm()->receiver_frameDiscardMode
<< "\nr_padding:" << detector_shm()->receiver_framePadding << "\nr_padding:" << detector_shm()->rxFramePadding
<< "\nwrite enable:" << detector_shm()->rxFileWrite << "\nwrite enable:" << detector_shm()->rxFileWrite
<< "\noverwrite enable:" << detector_shm()->rxFileOverWrite << "\noverwrite enable:" << detector_shm()->rxFileOverWrite
<< "\nframe index needed:" << "\nframe index needed:"
@ -2163,11 +2163,11 @@ std::string slsDetector::setReceiverHostname(const std::string &receiverIP) {
setReceiverUDPSocketBufferSize(0); setReceiverUDPSocketBufferSize(0);
setFilePath(detector_shm()->receiver_filePath); setFilePath(detector_shm()->receiver_filePath);
setFileName(detector_shm()->receiver_fileName); setFileName(detector_shm()->receiver_fileName);
setFileIndex(detector_shm()->receiver_fileIndex); setFileIndex(detector_shm()->rxFileIndex);
setFileFormat(detector_shm()->rxFileFormat); setFileFormat(detector_shm()->rxFileFormat);
setFramesPerFile(detector_shm()->rxFramesPerFile); setFramesPerFile(detector_shm()->rxFramesPerFile);
setReceiverFramesDiscardPolicy(detector_shm()->receiver_frameDiscardMode); setReceiverFramesDiscardPolicy(detector_shm()->receiver_frameDiscardMode);
setReceiverPartialFramesPadding(detector_shm()->receiver_framePadding); setReceiverPartialFramesPadding(detector_shm()->rxFramePadding);
setFileWrite(detector_shm()->rxFileWrite); setFileWrite(detector_shm()->rxFileWrite);
setFileOverWrite(detector_shm()->rxFileOverWrite); setFileOverWrite(detector_shm()->rxFileOverWrite);
setTimer(FRAME_PERIOD, detector_shm()->timerValue[FRAME_PERIOD]); setTimer(FRAME_PERIOD, detector_shm()->timerValue[FRAME_PERIOD]);
@ -3686,7 +3686,7 @@ int slsDetector::updateCachedReceiverVariables() const {
// index // index
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
detector_shm()->receiver_fileIndex = i32; detector_shm()->rxFileIndex = i32;
// file format // file format
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
@ -3702,15 +3702,15 @@ int slsDetector::updateCachedReceiverVariables() const {
// frame padding // frame padding
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
detector_shm()->receiver_framePadding = i32; detector_shm()->rxFramePadding = static_cast<bool>(i32);
// file write enable // file write enable
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
detector_shm()->rxFileWrite = i32; detector_shm()->rxFileWrite = static_cast<bool>(i32);
// file overwrite enable // file overwrite enable
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
detector_shm()->rxFileOverWrite = i32; detector_shm()->rxFileOverWrite = static_cast<bool>(i32);
// gap pixels // gap pixels
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
@ -3734,21 +3734,21 @@ int slsDetector::updateCachedReceiverVariables() const {
// receiver streaming enable // receiver streaming enable
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
detector_shm()->receiver_upstream = i32; detector_shm()->receiver_upstream = static_cast<bool>(i32);
// activate // activate
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
detector_shm()->activated = i32; detector_shm()->activated = static_cast<bool>(i32);
// deactivated padding enable // deactivated padding enable
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
detector_shm()->receiver_deactivatedPaddingEnable = i32; detector_shm()->receiver_deactivatedPaddingEnable = static_cast<bool>(i32);
// silent mode // silent mode
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
detector_shm()->receiver_silentMode = i32; detector_shm()->receiver_silentMode = static_cast<bool>(i32);
if (!n) { if (n == 0) {
throw RuntimeError( throw RuntimeError(
"Could not update receiver: " + std::string(detector_shm()->receiver_hostname) + "Could not update receiver: " + std::string(detector_shm()->receiver_hostname) +
", received 0 bytes\n"); ", received 0 bytes\n");
@ -3775,7 +3775,7 @@ void slsDetector::sendMultiDetectorSize() {
FILE_LOG(logDEBUG1) << "Receiver multi size returned: " << retval; FILE_LOG(logDEBUG1) << "Receiver multi size returned: " << retval;
} }
if (ret == FORCE_UPDATE) { if (ret == FORCE_UPDATE) {
ret = updateCachedReceiverVariables(); updateCachedReceiverVariables();
} }
} }
@ -3793,7 +3793,7 @@ void slsDetector::setDetectorId() {
FILE_LOG(logDEBUG1) << "Receiver Position Id returned: " << retval; FILE_LOG(logDEBUG1) << "Receiver Position Id returned: " << retval;
} }
if (ret == FORCE_UPDATE) { if (ret == FORCE_UPDATE) {
ret = updateCachedReceiverVariables(); updateCachedReceiverVariables();
} }
} }
@ -3923,12 +3923,12 @@ int slsDetector::setReceiverPartialFramesPadding(int f) {
ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort);
ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval));
FILE_LOG(logDEBUG1) << "Receiver partial frames enable: " << retval; FILE_LOG(logDEBUG1) << "Receiver partial frames enable: " << retval;
detector_shm()->receiver_framePadding = static_cast<bool>(retval); detector_shm()->rxFramePadding = static_cast<bool>(retval);
} }
if (ret == FORCE_UPDATE) { if (ret == FORCE_UPDATE) {
updateCachedReceiverVariables(); updateCachedReceiverVariables();
} }
return detector_shm()->receiver_framePadding; return detector_shm()->rxFramePadding;
} }
slsDetectorDefs::fileFormat slsDetector::setFileFormat(fileFormat f) { slsDetectorDefs::fileFormat slsDetector::setFileFormat(fileFormat f) {
@ -3957,7 +3957,7 @@ slsDetectorDefs::fileFormat slsDetector::getFileFormat() const {
return detector_shm()->rxFileFormat; return detector_shm()->rxFileFormat;
} }
int slsDetector::getFileIndex() { return detector_shm()->receiver_fileIndex; } int slsDetector::getFileIndex() { return detector_shm()->rxFileIndex; }
int slsDetector::setFileIndex(int i) { int slsDetector::setFileIndex(int i) {
if (i >= 0) { if (i >= 0) {
@ -3971,20 +3971,22 @@ int slsDetector::setFileIndex(int i) {
ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort);
ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval));
FILE_LOG(logDEBUG1) << "Receiver file index: " << retval; FILE_LOG(logDEBUG1) << "Receiver file index: " << retval;
detector_shm()->receiver_fileIndex = retval; detector_shm()->rxFileIndex = retval;
} }
if (ret == FORCE_UPDATE) { if (ret == FORCE_UPDATE) {
updateCachedReceiverVariables(); updateCachedReceiverVariables();
} }
} }
return detector_shm()->receiver_fileIndex; return getFileIndex();
} }
int slsDetector::getFileIndex() const { return detector_shm()->rxFileIndex; }
int slsDetector::incrementFileIndex() { int slsDetector::incrementFileIndex() {
if (detector_shm()->rxFileWrite) { if (detector_shm()->rxFileWrite) {
return setFileIndex(detector_shm()->receiver_fileIndex + 1); return setFileIndex(detector_shm()->rxFileIndex + 1);
} }
return detector_shm()->receiver_fileIndex; return detector_shm()->rxFileIndex;
} }
int slsDetector::startReceiver() { int slsDetector::startReceiver() {

View File

@ -2647,19 +2647,14 @@ std::string slsDetectorCommand::helpOverwrite(int action) {
} }
std::string slsDetectorCommand::cmdFileIndex(int narg, char *args[], int action, int detPos) { std::string slsDetectorCommand::cmdFileIndex(int narg, char *args[], int action, int detPos) {
char ans[100];
int i;
myDet->setReceiverOnline(ONLINE_FLAG, detPos); myDet->setReceiverOnline(ONLINE_FLAG, detPos);
if (action == HELP_ACTION) { if (action == HELP_ACTION) {
return helpFileName(action); return helpFileName(action);
} else if (action == PUT_ACTION) { } else if (action == PUT_ACTION) {
if (!sscanf(args[1], "%d", &i)) int i = std::stoi(args[1]);
return std::string("cannot parse file index");
myDet->setFileIndex(i, detPos); myDet->setFileIndex(i, detPos);
} }
return std::to_string(myDet->getFileIndex(detPos));
sprintf(ans, "%d", myDet->getFileIndex(detPos));
return std::string(ans);
} }
std::string slsDetectorCommand::helpFileIndex(int action) { std::string slsDetectorCommand::helpFileIndex(int action) {