8.0.2.rc: moench empty data callback (#935)

* moench: empty data call back so that zmq sockets are still made and listened to in acquire that it waits for the dummy packet to be done

* moench zmq postprocessor: remove NEWZMQ ifdefs and remove connect for publisher socket

* changed enum from READOUT_ACTION_ZMQ to READOUT_ZMQ_ACTION for consistency
This commit is contained in:
maliakal_d 2024-08-13 11:26:33 +02:00 committed by GitHub
parent 8d185988c1
commit 550ad4486a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 28 additions and 53 deletions

View File

@ -183,8 +183,8 @@ int main(int argc, char *argv[]) {
gainfname = args["gainfile"]; gainfname = args["gainfile"];
etafname = args["etafilefile"]; etafname = args["etafilefile"];
if (atoi(args["nuninterfaces"].c_str())>1){ if (atoi(args["numinterfaces"].c_str())>1){
cprintf(RED, "Sorry, at the moment only a single interface is supported instead of %d\n",atoi(args["nuninterfaces"].c_str())); cprintf(RED, "Sorry, at the moment only a single interface is supported instead of %d\n",atoi(args["numinterfaces"].c_str()));
return EXIT_FAILURE; return EXIT_FAILURE;
} }
@ -272,54 +272,35 @@ int main(int argc, char *argv[]) {
sls::ZmqSocket *zmqsocket = NULL; sls::ZmqSocket *zmqsocket = NULL;
#ifdef NEWZMQ
// receive socket // receive socket
try { try {
#endif
zmqsocket = new sls::ZmqSocket(socketip.c_str(), portnum); zmqsocket = new sls::ZmqSocket(socketip.c_str(), portnum);
#ifdef NEWZMQ
} catch (...) { } catch (...) {
cprintf(RED, cprintf(RED,
"Error: Could not create Zmq socket on port %d with ip %s\n", "Error: Could not create Zmq receiving socket on port %d with ip %s\n",
portnum, socketip.c_str()); portnum, socketip.c_str());
delete zmqsocket; delete zmqsocket;
return EXIT_FAILURE; return EXIT_FAILURE;
} }
#endif
#ifndef NEWZMQ
if (zmqsocket->IsError()) {
cprintf(RED,
"Error: Could not create Zmq socket on port %d with ip %s\n",
portnum, socketip.c_str());
delete zmqsocket;
return EXIT_FAILURE;
}
#endif
if (zmqsocket->Connect()) { if (zmqsocket->Connect()) {
cprintf(RED, "Error: Could not connect to socket %s\n", cprintf(RED, "Error: Could not connect to zmq receiving socket %s\n",
(zmqsocket->GetZmqServerAddress()).c_str()); (zmqsocket->GetZmqServerAddress()).c_str());
delete zmqsocket; delete zmqsocket;
return EXIT_FAILURE; return EXIT_FAILURE;
} else } else
printf("Zmq Client at %s\n", zmqsocket->GetZmqServerAddress().c_str());
printf("Zmq receiving at %s\n", zmqsocket->GetZmqServerAddress().c_str());
// send socket // send socket
sls::ZmqSocket *zmqsocket2 = 0; sls::ZmqSocket *zmqsocket2 = 0;
// cout << "zmq2 " << endl; // cout << "zmq2 " << endl;
if (send) { if (send) {
#ifdef NEWZMQ
// receive socket // receive socket
try { try {
#endif zmqsocket2 = new sls::ZmqSocket(portnum2, socketip2.c_str());
zmqsocket2 = new sls::ZmqSocket(portnum2, socketip2.c_str());
#ifdef NEWZMQ
} catch (...) { } catch (...) {
cprintf(RED, cprintf(RED,
"Error: Could not create Zmq socket server on port %d and " "Error: Could not create Zmq sending socket on port %d and "
"ip %s\n", "ip %s\n",
portnum2, socketip2.c_str()); portnum2, socketip2.c_str());
// delete zmqsocket2; // delete zmqsocket2;
@ -328,28 +309,7 @@ int main(int argc, char *argv[]) {
// return EXIT_FAILURE; // return EXIT_FAILURE;
send = false; send = false;
} }
#endif printf("Zmq sending socket at %s\n",
#ifndef NEWZMQ
if (zmqsocket2->IsError()) {
cprintf(RED,
"AAA Error: Could not create Zmq socket server on port %d "
"and ip %s\n",
portnum2, socketip2.c_str());
// delete zmqsocket2;
// delete zmqsocket;
// return EXIT_FAILURE;
send = false;
}
#endif
if (zmqsocket2->Connect()) {
cprintf(RED, "BBB Error: Could not connect to socket %s\n",
zmqsocket2->GetZmqServerAddress().c_str());
// delete zmqsocket2;
send = false;
// return EXIT_FAILURE;
} else
printf("Zmq Client at %s\n",
zmqsocket2->GetZmqServerAddress().c_str()); zmqsocket2->GetZmqServerAddress().c_str());
} }

View File

@ -79,9 +79,10 @@ if(SLS_USE_TEXTCLIENT)
# Loop over list to generate command line binaries # Loop over list to generate command line binaries
set(bin_names "sls_detector_put" set(bin_names "sls_detector_put"
"sls_detector_get" "sls_detector_get"
"sls_detector_acquire" "sls_detector_acquire"
"sls_detector_acquire_zmq"
"sls_detector_help") "sls_detector_help")
set(cmd_name "PUT" "GET" "READOUT" "HELP") set(cmd_name "PUT" "GET" "READOUT" "READOUTZMQ" "HELP")
list(LENGTH bin_names len1) list(LENGTH bin_names len1)
math(EXPR len2 "${len1} - 1") math(EXPR len2 "${len1} - 1")

View File

@ -30,6 +30,10 @@ int main(int argc, char *argv[]) {
int action = slsDetectorDefs::READOUT_ACTION; int action = slsDetectorDefs::READOUT_ACTION;
#endif #endif
#ifdef READOUTZMQ
int action = slsDetectorDefs::READOUT_ZMQ_ACTION;
#endif
#ifdef HELP #ifdef HELP
int action = slsDetectorDefs::HELP_ACTION; int action = slsDetectorDefs::HELP_ACTION;
#endif #endif
@ -46,7 +50,7 @@ int main(int argc, char *argv[]) {
parser.Parse(argc, argv); parser.Parse(argc, argv);
// If we called sls_detector_acquire, add the acquire command // If we called sls_detector_acquire, add the acquire command
if (action == slsDetectorDefs::READOUT_ACTION) if (action == slsDetectorDefs::READOUT_ACTION || action == slsDetectorDefs::READOUT_ZMQ_ACTION)
parser.setCommand("acquire"); parser.setCommand("acquire");
if (parser.isHelp()) if (parser.isHelp())

View File

@ -205,6 +205,12 @@ std::string CmdProxy::VirtualServer(int action) {
return os.str(); return os.str();
} }
void CmdProxy::EmptyDataCallBack(detectorData *data, uint64_t frameIndex,
uint32_t subFrameIndex, void *this_pointer) {
LOG(logDEBUG) << "EmptyDataCallBack to start up zmq sockets";
}
std::string CmdProxy::Acquire(int action) { std::string CmdProxy::Acquire(int action) {
std::ostringstream os; std::ostringstream os;
if (action == defs::HELP_ACTION) { if (action == defs::HELP_ACTION) {
@ -226,6 +232,9 @@ std::string CmdProxy::Acquire(int action) {
throw RuntimeError("Individual detectors not allowed for readout."); throw RuntimeError("Individual detectors not allowed for readout.");
} }
if (action == defs::READOUT_ZMQ_ACTION) {
det->registerDataCallback(&(EmptyDataCallBack), this);
}
det->acquire(); det->acquire();
if (det->getUseReceiverFlag().squash(false)) { if (det->getUseReceiverFlag().squash(false)) {

View File

@ -1350,6 +1350,7 @@ class CmdProxy {
std::string GapPixels(int action); std::string GapPixels(int action);
std::string BadChannels(int action); std::string BadChannels(int action);
/* acquisition parameters */ /* acquisition parameters */
static void EmptyDataCallBack(detectorData *data, uint64_t frameIndex, uint32_t subFrameIndex, void *this_pointer);
std::string Acquire(int action); std::string Acquire(int action);
std::string Exptime(int action); std::string Exptime(int action);
std::string ReadoutSpeed(int action); std::string ReadoutSpeed(int action);

View File

@ -215,7 +215,7 @@ typedef struct {
/** /**
type of action performed (for text client) type of action performed (for text client)
*/ */
enum { GET_ACTION, PUT_ACTION, READOUT_ACTION, HELP_ACTION }; enum { GET_ACTION, PUT_ACTION, READOUT_ACTION, HELP_ACTION, READOUT_ZMQ_ACTION };
/** /**
dimension indexes dimension indexes