mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-15 14:27:13 +02:00
updated client and rxr, not tested
This commit is contained in:
@ -2306,20 +2306,8 @@ Result<uint64_t> Detector::getRxCurrentFrameIndex(Positions pos) const {
|
||||
}
|
||||
|
||||
std::vector<int> Detector::getPortNumbers(int start_port) {
|
||||
int num_sockets_per_detector = 1;
|
||||
switch (getDetectorType().squash()) {
|
||||
case defs::EIGER:
|
||||
num_sockets_per_detector *= 2;
|
||||
break;
|
||||
case defs::JUNGFRAU:
|
||||
case defs::GOTTHARD2:
|
||||
if (pimpl->getNumberofUDPInterfaces({}).squash() == 2) {
|
||||
num_sockets_per_detector *= 2;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
int num_sockets_per_detector = pimpl->getNumberofUDPInterfaces({}).tsquash(
|
||||
"Number of UDP Interfaces is not consistent among modules");
|
||||
std::vector<int> res;
|
||||
res.reserve(size());
|
||||
for (int idet = 0; idet < size(); ++idet) {
|
||||
|
@ -284,6 +284,8 @@ void DetectorImpl::addModule(const std::string &hostname) {
|
||||
.tsquash("Inconsistent detector types.");
|
||||
// for moench and ctb
|
||||
modules[pos]->updateNumberOfChannels();
|
||||
|
||||
modules[pos]->getNumberofUDPInterfaces();
|
||||
}
|
||||
|
||||
void DetectorImpl::updateDetectorSize() {
|
||||
@ -402,31 +404,25 @@ int DetectorImpl::createReceivingDataSockets() {
|
||||
}
|
||||
LOG(logINFO) << "Going to create data sockets";
|
||||
|
||||
size_t numSockets = modules.size();
|
||||
size_t numSocketsPerModule = 1;
|
||||
if (shm()->detType == EIGER) {
|
||||
numSocketsPerModule = 2;
|
||||
size_t numUDPInterfaces =
|
||||
Parallel(&Module::getNumberofUDPInterfacesFromShm, {}).squash(1);
|
||||
// gotthard2 second interface is only for veto debugging (not in gui)
|
||||
if (shm()->detType == GOTTHARD2) {
|
||||
numUDPInterfaces = 1;
|
||||
}
|
||||
// gotthard2 second interface is only for veto debugging
|
||||
else if (shm()->detType != GOTTHARD2) {
|
||||
if (Parallel(&Module::getNumberofUDPInterfacesFromShm, {}).squash() ==
|
||||
2) {
|
||||
numSocketsPerModule = 2;
|
||||
}
|
||||
}
|
||||
numSockets *= numSocketsPerModule;
|
||||
size_t numSockets = modules.size() * numUDPInterfaces;
|
||||
|
||||
for (size_t iSocket = 0; iSocket < numSockets; ++iSocket) {
|
||||
uint32_t portnum =
|
||||
(modules[iSocket / numSocketsPerModule]->getClientStreamingPort());
|
||||
portnum += (iSocket % numSocketsPerModule);
|
||||
(modules[iSocket / numUDPInterfaces]->getClientStreamingPort());
|
||||
portnum += (iSocket % numUDPInterfaces);
|
||||
try {
|
||||
zmqSocket.push_back(sls::make_unique<ZmqSocket>(
|
||||
modules[iSocket / numSocketsPerModule]
|
||||
->getClientStreamingIP()
|
||||
.str()
|
||||
.c_str(),
|
||||
portnum));
|
||||
zmqSocket.push_back(
|
||||
sls::make_unique<ZmqSocket>(modules[iSocket / numUDPInterfaces]
|
||||
->getClientStreamingIP()
|
||||
.str()
|
||||
.c_str(),
|
||||
portnum));
|
||||
// set high water mark
|
||||
int hwm = shm()->zmqHwm;
|
||||
if (hwm >= 0) {
|
||||
@ -460,13 +456,19 @@ void DetectorImpl::readFrameFromReceiver() {
|
||||
int nDetPixelsX = 0;
|
||||
int nDetPixelsY = 0;
|
||||
bool quadEnable = false;
|
||||
// to flip image
|
||||
bool eiger = false;
|
||||
bool numInterfaces = 1;
|
||||
|
||||
// cannot pick up udp interfaces from zmq
|
||||
int numInterfaces =
|
||||
Parallel(&Module::getNumberofUDPInterfacesFromShm, {}).squash(1);
|
||||
int module_ports[2] = {1, 1};
|
||||
// gotthard2 second interface is veto debugging
|
||||
if (shm()->detType != GOTTHARD2) {
|
||||
numInterfaces = Parallel(&Module::getNumberofUDPInterfacesFromShm, {})
|
||||
.squash(); // cannot pick up from zmq
|
||||
}
|
||||
if (shm()->detType == EIGER)
|
||||
module_ports[1] = numInterfaces; // horz
|
||||
else if (shm()->detType == JUNGFRAU)
|
||||
module_ports[0] = numInterfaces; // vert
|
||||
|
||||
std::vector<bool> runningList(zmqSocket.size());
|
||||
std::vector<bool> connectList(zmqSocket.size());
|
||||
numZmqRunning = 0;
|
||||
@ -543,9 +545,10 @@ void DetectorImpl::readFrameFromReceiver() {
|
||||
nPixelsX = zHeader.npixelsx;
|
||||
nPixelsY = zHeader.npixelsy;
|
||||
// module shape
|
||||
nX = zHeader.ndetx;
|
||||
nY = zHeader.ndety;
|
||||
nY *= numInterfaces;
|
||||
nX = zHeader.ndetx *
|
||||
module_ports[1]; // TODO: check if module_ports[1]
|
||||
// needed
|
||||
nY = zHeader.ndety * module_ports[0];
|
||||
nDetPixelsX = nX * nPixelsX;
|
||||
nDetPixelsY = nY * nPixelsY;
|
||||
// det type
|
||||
|
@ -3114,8 +3114,8 @@ void Module::initializeModuleStructure(detectorType type) {
|
||||
sls::strcpy_safe(shm()->rxHostname, "none");
|
||||
shm()->rxTCPPort = DEFAULT_PORTNO + 2;
|
||||
shm()->useReceiverFlag = false;
|
||||
shm()->zmqport = DEFAULT_ZMQ_CL_PORTNO +
|
||||
(moduleIndex * ((shm()->detType == EIGER) ? 2 : 1));
|
||||
shm()->zmqport =
|
||||
DEFAULT_ZMQ_CL_PORTNO + moduleIndex * shm()->numUDPInterfaces;
|
||||
shm()->zmqip = IpAddr{};
|
||||
shm()->numUDPInterfaces = 1;
|
||||
shm()->stoppedFlag = false;
|
||||
|
Reference in New Issue
Block a user