sendToDetector

This commit is contained in:
Erik Frojdh 2019-04-24 15:24:56 +02:00
parent ec9f360c75
commit 8cc8b58b05
4 changed files with 28 additions and 26 deletions

View File

@ -105,6 +105,9 @@ endif()
if(SLS_USE_SANITIZER) if(SLS_USE_SANITIZER)
target_compile_options(slsProjectOptions INTERFACE -fsanitize=address,undefined) target_compile_options(slsProjectOptions INTERFACE -fsanitize=address,undefined)
target_link_libraries(slsProjectOptions INTERFACE -fsanitize=address,undefined) target_link_libraries(slsProjectOptions INTERFACE -fsanitize=address,undefined)
# target_compile_options(slsProjectOptions INTERFACE -fsanitize=thread)
# target_link_libraries(slsProjectOptions INTERFACE -fsanitize=thread)
endif() endif()

View File

@ -11,6 +11,8 @@ class MultiDetectorFixture {
public: public:
MultiDetectorFixture() : d(0, true, true) { MultiDetectorFixture() : d(0, true, true) {
d.setHostname(hostname.c_str()); d.setHostname(hostname.c_str());
if (my_ip != "undefined")
d.setReceiverHostname(my_ip);
} }
~MultiDetectorFixture() { d.freeSharedMemory(); } ~MultiDetectorFixture() { d.freeSharedMemory(); }
}; };
@ -108,7 +110,7 @@ TEST_CASE_METHOD(MultiDetectorFixture, "Read/write register",
} }
TEST_CASE_METHOD(MultiDetectorFixture, "Set dynamic range", TEST_CASE_METHOD(MultiDetectorFixture, "Set dynamic range",
"[.eigerintegration][cli]") { "[.eigerintegration][cli][dr]") {
std::vector<int> dynamic_range{4, 8, 16, 32}; std::vector<int> dynamic_range{4, 8, 16, 32};
for (auto dr : dynamic_range) { for (auto dr : dynamic_range) {
d.setDynamicRange(dr); d.setDynamicRange(dr);
@ -117,7 +119,7 @@ TEST_CASE_METHOD(MultiDetectorFixture, "Set dynamic range",
} }
TEST_CASE_METHOD(MultiDetectorFixture, "Set clock divider", TEST_CASE_METHOD(MultiDetectorFixture, "Set clock divider",
"[.eigerintegration][cli]") { "[.eigerintegration][cli][this]") {
for (int i = 0; i != 3; ++i) { for (int i = 0; i != 3; ++i) {
d.setSpeed(sv::CLOCK_DIVIDER, i); d.setSpeed(sv::CLOCK_DIVIDER, i);
CHECK(d.setSpeed(sv::CLOCK_DIVIDER) == i); CHECK(d.setSpeed(sv::CLOCK_DIVIDER) == i);
@ -164,12 +166,17 @@ TEST_CASE_METHOD(MultiDetectorFixture, "Set readout flags",
CHECK((d.setReadOutFlags() & defs::NONPARALLEL)); CHECK((d.setReadOutFlags() & defs::NONPARALLEL));
} }
TEST_CASE_METHOD(MultiDetectorFixture, "Flow control 10gbe", TEST_CASE_METHOD(MultiDetectorFixture, "Flow control and tengiga",
"[.eigerintegration][cli]") { "[.eigerintegration][cli]") {
d.setFlowControl10G(1); d.setFlowControl10G(1);
CHECK(d.setFlowControl10G() == 1); CHECK(d.setFlowControl10G() == 1);
d.setFlowControl10G(0); d.setFlowControl10G(0);
CHECK(d.setFlowControl10G() == 0); CHECK(d.setFlowControl10G() == 0);
d.enableTenGigabitEthernet(1);
CHECK(d.enableTenGigabitEthernet() == 1);
d.enableTenGigabitEthernet(0);
CHECK(d.enableTenGigabitEthernet() == 0);
} }
TEST_CASE_METHOD(MultiDetectorFixture, "activate", "[.eigerintegration][cli]") { TEST_CASE_METHOD(MultiDetectorFixture, "activate", "[.eigerintegration][cli]") {
@ -179,9 +186,14 @@ TEST_CASE_METHOD(MultiDetectorFixture, "activate", "[.eigerintegration][cli]") {
CHECK(d.activate() == 1); CHECK(d.activate() == 1);
} }
TEST_CASE_METHOD(MultiDetectorFixture, "all trimbits",
TEST_CASE_METHOD(MultiDetectorFixture, "all trimbits", "[.eigerintegration][cli]") { "[.eigerintegration][cli]") {
d.setAllTrimbits(32); d.setAllTrimbits(32);
CHECK(d.setAllTrimbits(-1) == 32); CHECK(d.setAllTrimbits(-1) == 32);
} }
TEST_CASE_METHOD(MultiDetectorFixture, "rate correction",
"[.eigerintegration][cli]") {
d.setRateCorrection(200);
CHECK(d.getRateCorrection() == 200);
}

View File

@ -1697,7 +1697,7 @@ int slsDetector::setDynamicRange(int n) {
int olddr = detector_shm()->dynamicRange; int olddr = detector_shm()->dynamicRange;
if (detector_shm()->onlineFlag == ONLINE_FLAG) { if (detector_shm()->onlineFlag == ONLINE_FLAG) {
sendToDetector(fnum, &n, sizeof(n), &retval, sizeof(retval)); ret = sendToDetector(fnum, &n, sizeof(n), &retval, sizeof(retval));
FILE_LOG(logDEBUG1) << "Dynamic Range: " << retval; FILE_LOG(logDEBUG1) << "Dynamic Range: " << retval;
detector_shm()->dynamicRange = retval; detector_shm()->dynamicRange = retval;
} }
@ -1719,8 +1719,9 @@ int slsDetector::setDynamicRange(int n) {
<< detector_shm()->dataBytesInclGapPixels; << detector_shm()->dataBytesInclGapPixels;
} }
// send to receiver // send to receiver
if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG && ret == OK) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG && ret != FAIL) {
fnum = F_SET_RECEIVER_DYNAMIC_RANGE; fnum = F_SET_RECEIVER_DYNAMIC_RANGE;
n = detector_shm()->dynamicRange; n = detector_shm()->dynamicRange;
retval = -1; retval = -1;
@ -3404,37 +3405,23 @@ sls_detector_module slsDetector::getModule() {
int slsDetector::setRateCorrection(int64_t t) { int slsDetector::setRateCorrection(int64_t t) {
int fnum = F_SET_RATE_CORRECT; int fnum = F_SET_RATE_CORRECT;
int ret = FAIL; int ret = FAIL;
int64_t arg = t; FILE_LOG(logDEBUG1) << "Setting Rate Correction to " << t;
FILE_LOG(logDEBUG1) << "Setting Rate Correction to " << arg;
if (detector_shm()->onlineFlag == ONLINE_FLAG) { if (detector_shm()->onlineFlag == ONLINE_FLAG) {
auto client = DetectorSocket(detector_shm()->hostname, ret = sendToDetector(fnum, &t, sizeof(t), nullptr, 0);
detector_shm()->controlPort);
ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), nullptr, 0);
detector_shm()->deadTime = t; detector_shm()->deadTime = t;
} }
if (ret == FORCE_UPDATE) {
ret = updateDetector();
}
return ret; return ret;
} }
int64_t slsDetector::getRateCorrection() { int64_t slsDetector::getRateCorrection() {
int fnum = F_GET_RATE_CORRECT; int fnum = F_GET_RATE_CORRECT;
int ret = FAIL;
int64_t retval = -1; int64_t retval = -1;
FILE_LOG(logDEBUG1) << "Getting rate correction"; FILE_LOG(logDEBUG1) << "Getting rate correction";
if (detector_shm()->onlineFlag == ONLINE_FLAG) { if (detector_shm()->onlineFlag == ONLINE_FLAG) {
auto client = DetectorSocket(detector_shm()->hostname, sendToDetector(fnum, nullptr, 0, &retval, sizeof(retval));
detector_shm()->controlPort);
ret = client.sendCommandThenRead(fnum, nullptr, 0, &retval,
sizeof(retval));
detector_shm()->deadTime = retval; detector_shm()->deadTime = retval;
FILE_LOG(logDEBUG1) << "Rate correction: " << retval; FILE_LOG(logDEBUG1) << "Rate correction: " << retval;
} }
if (ret == FORCE_UPDATE) {
updateDetector();
}
return retval; return retval;
} }

View File

@ -1108,7 +1108,7 @@ void slsReceiverImplementation::setDetectorPositionId(const int id) {
&detID, &numThreads, &numberOfFrames, &dynamicRange, &udpPortNum[i], &detID, &numThreads, &numberOfFrames, &dynamicRange, &udpPortNum[i],
generalData); generalData);
} }
assert(numDet[1] != 0);
for (unsigned int i = 0; i < listener.size(); ++i) { for (unsigned int i = 0; i < listener.size(); ++i) {
uint16_t row = 0, col = 0; uint16_t row = 0, col = 0;
row = (detID % numDet[1]) * ((numUDPInterfaces == 2) ? 2 : 1); // row row = (detID % numDet[1]) * ((numUDPInterfaces == 2) ? 2 : 1); // row