mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-23 18:17:59 +02:00
WIP: first connect to rxr
This commit is contained in:
@ -1,8 +1,98 @@
|
|||||||
#include "Receiver.h"
|
#include "Receiver.h"
|
||||||
|
#include "ClientSocket.h"
|
||||||
#include "string_utils.h"
|
#include "string_utils.h"
|
||||||
|
#include "versionAPI.h"
|
||||||
|
|
||||||
namespace sls {
|
namespace sls {
|
||||||
|
|
||||||
|
void Receiver::sendToReceiver(int fnum, const void *args, size_t args_size,
|
||||||
|
void *retval, size_t retval_size) {
|
||||||
|
static_cast<const Receiver &>(*this).sendToReceiver(
|
||||||
|
fnum, args, args_size, retval, retval_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Receiver::sendToReceiver(int fnum, const void *args, size_t args_size,
|
||||||
|
void *retval, size_t retval_size) const {
|
||||||
|
auto receiver = ReceiverSocket(shm()->hostname, shm()->tcpPort);
|
||||||
|
receiver.sendCommandThenRead(fnum, args, args_size, retval, retval_size);
|
||||||
|
receiver.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Arg, typename Ret>
|
||||||
|
void Receiver::sendToReceiver(int fnum, const Arg &args, Ret &retval) {
|
||||||
|
sendToReceiver(fnum, &args, sizeof(args), &retval, sizeof(retval));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Arg, typename Ret>
|
||||||
|
void Receiver::sendToReceiver(int fnum, const Arg &args, Ret &retval) const {
|
||||||
|
sendToReceiver(fnum, &args, sizeof(args), &retval, sizeof(retval));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Arg>
|
||||||
|
void Receiver::sendToReceiver(int fnum, const Arg &args, std::nullptr_t) {
|
||||||
|
sendToReceiver(fnum, &args, sizeof(args), nullptr, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Arg>
|
||||||
|
void Receiver::sendToReceiver(int fnum, const Arg &args,
|
||||||
|
std::nullptr_t) const {
|
||||||
|
sendToReceiver(fnum, &args, sizeof(args), nullptr, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Ret>
|
||||||
|
void Receiver::sendToReceiver(int fnum, std::nullptr_t, Ret &retval) {
|
||||||
|
sendToReceiver(fnum, nullptr, 0, &retval, sizeof(retval));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Ret>
|
||||||
|
void Receiver::sendToReceiver(int fnum, std::nullptr_t, Ret &retval) const {
|
||||||
|
sendToReceiver(fnum, nullptr, 0, &retval, sizeof(retval));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Ret>
|
||||||
|
Ret Receiver::sendToReceiver(int fnum){
|
||||||
|
LOG(logDEBUG1) << "Sending: ["
|
||||||
|
<< getFunctionNameFromEnum(static_cast<slsDetectorDefs::detFuncs>(fnum))
|
||||||
|
<< ", nullptr, 0, " << typeid(Ret).name() << ", " << sizeof(Ret) << "]";
|
||||||
|
Ret retval{};
|
||||||
|
sendToReceiver(fnum, nullptr, 0, &retval, sizeof(retval));
|
||||||
|
LOG(logDEBUG1) << "Got back: " << retval;
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Ret>
|
||||||
|
Ret Receiver::sendToReceiver(int fnum) const{
|
||||||
|
LOG(logDEBUG1) << "Sending: ["
|
||||||
|
<< getFunctionNameFromEnum(static_cast<slsDetectorDefs::detFuncs>(fnum))
|
||||||
|
<< ", nullptr, 0, " << typeid(Ret).name() << ", " << sizeof(Ret) << "]";
|
||||||
|
Ret retval{};
|
||||||
|
sendToReceiver(fnum, nullptr, 0, &retval, sizeof(retval));
|
||||||
|
LOG(logDEBUG1) << "Got back: " << retval;
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Ret, typename Arg>
|
||||||
|
Ret Receiver::sendToReceiver(int fnum, const Arg &args){
|
||||||
|
LOG(logDEBUG1) << "Sending: ["
|
||||||
|
<< getFunctionNameFromEnum(static_cast<slsDetectorDefs::detFuncs>(fnum))
|
||||||
|
<< ", " << args << ", " << sizeof(args) << ", " << typeid(Ret).name() << ", " << sizeof(Ret) << "]";
|
||||||
|
Ret retval{};
|
||||||
|
sendToReceiver(fnum, &args, sizeof(args), &retval, sizeof(retval));
|
||||||
|
LOG(logDEBUG1) << "Got back: " << retval;
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Ret, typename Arg>
|
||||||
|
Ret Receiver::sendToReceiver(int fnum, const Arg &args) const{
|
||||||
|
LOG(logDEBUG1) << "Sending: ["
|
||||||
|
<< getFunctionNameFromEnum(static_cast<slsDetectorDefs::detFuncs>(fnum))
|
||||||
|
<< ", " << args << ", " << sizeof(args) << ", " << typeid(Ret).name() << ", " << sizeof(Ret) << "]";
|
||||||
|
Ret retval{};
|
||||||
|
sendToReceiver(fnum, &args, sizeof(args), &retval, sizeof(retval));
|
||||||
|
LOG(logDEBUG1) << "Got back: " << retval;
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// create shm
|
// create shm
|
||||||
Receiver::Receiver(int detector_id, int module_id, int receiver_id,
|
Receiver::Receiver(int detector_id, int module_id, int receiver_id,
|
||||||
@ -78,13 +168,6 @@ void Receiver::setHostname(const std::string &hostname) {
|
|||||||
configure();
|
configure();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Receiver::configure() {
|
|
||||||
shm()->valid = false;
|
|
||||||
LOG(logINFOBLUE) << receiverId << " configured!";
|
|
||||||
//checkReceiverVersionCompatibility();
|
|
||||||
shm()->valid = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Receiver::getTCPPort() const {
|
int Receiver::getTCPPort() const {
|
||||||
return shm()->tcpPort;
|
return shm()->tcpPort;
|
||||||
}
|
}
|
||||||
@ -100,4 +183,19 @@ void Receiver::setTCPPort(const int port) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Receiver::configure() {
|
||||||
|
shm()->valid = false;
|
||||||
|
LOG(logINFOBLUE) << receiverId << " configured!";
|
||||||
|
checkVersionCompatibility();
|
||||||
|
shm()->valid = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Receiver::checkVersionCompatibility() {
|
||||||
|
int64_t arg = APIRECEIVER;
|
||||||
|
LOG(logDEBUG1)
|
||||||
|
<< "Checking version compatibility with receiver with value "
|
||||||
|
<< std::hex << arg << std::dec;
|
||||||
|
sendToReceiver(F_RECEIVER_CHECK_VERSION, arg, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace sls
|
} // namespace sls
|
@ -47,11 +47,57 @@ namespace sls {
|
|||||||
void freeSharedMemory();
|
void freeSharedMemory();
|
||||||
std::string getHostname() const;
|
std::string getHostname() const;
|
||||||
void setHostname(const std::string &hostname);
|
void setHostname(const std::string &hostname);
|
||||||
void configure();
|
|
||||||
int getTCPPort() const;
|
int getTCPPort() const;
|
||||||
void setTCPPort(const int port);
|
void setTCPPort(const int port);
|
||||||
|
void configure();
|
||||||
|
void checkVersionCompatibility();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
/**
|
||||||
|
* Send function parameters to receiver
|
||||||
|
* @param fnum function enum
|
||||||
|
* @param args argument pointer
|
||||||
|
* @param args_size size of argument
|
||||||
|
* @param retval return pointers
|
||||||
|
* @param retval_size size of return value
|
||||||
|
*/
|
||||||
|
void sendToReceiver(int fnum, const void *args, size_t args_size,
|
||||||
|
void *retval, size_t retval_size);
|
||||||
|
|
||||||
|
void sendToReceiver(int fnum, const void *args, size_t args_size,
|
||||||
|
void *retval, size_t retval_size) const;
|
||||||
|
|
||||||
|
template <typename Arg, typename Ret>
|
||||||
|
void sendToReceiver(int fnum, const Arg &args, Ret &retval);
|
||||||
|
|
||||||
|
template <typename Arg, typename Ret>
|
||||||
|
void sendToReceiver(int fnum, const Arg &args, Ret &retval) const;
|
||||||
|
|
||||||
|
template <typename Arg>
|
||||||
|
void sendToReceiver(int fnum, const Arg &args, std::nullptr_t);
|
||||||
|
|
||||||
|
template <typename Arg>
|
||||||
|
void sendToReceiver(int fnum, const Arg &args, std::nullptr_t) const;
|
||||||
|
|
||||||
|
template <typename Ret>
|
||||||
|
void sendToReceiver(int fnum, std::nullptr_t, Ret &retval);
|
||||||
|
|
||||||
|
template <typename Ret>
|
||||||
|
void sendToReceiver(int fnum, std::nullptr_t, Ret &retval) const;
|
||||||
|
|
||||||
|
template <typename Ret>
|
||||||
|
Ret sendToReceiver(int fnum);
|
||||||
|
|
||||||
|
template <typename Ret>
|
||||||
|
Ret sendToReceiver(int fnum) const;
|
||||||
|
|
||||||
|
template <typename Ret, typename Arg>
|
||||||
|
Ret sendToReceiver(int fnum, const Arg &args);
|
||||||
|
|
||||||
|
template <typename Ret, typename Arg>
|
||||||
|
Ret sendToReceiver(int fnum, const Arg &args) const;
|
||||||
|
|
||||||
|
|
||||||
const int receiverId{0};
|
const int receiverId{0};
|
||||||
const int moduleId{0};
|
const int moduleId{0};
|
||||||
mutable sls::SharedMemory<sharedReceiver> shm{0, 0, 0, true};
|
mutable sls::SharedMemory<sharedReceiver> shm{0, 0, 0, true};
|
||||||
|
Reference in New Issue
Block a user