mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-24 15:20:02 +02:00
ctb readout works with receiver for digital readout, allocate ram in server only if 1g udp, free addr info only when setting new udp detals upon configuring ,brough readout flags to receiver
This commit is contained in:
parent
96584ce397
commit
debf3a1b01
@ -559,6 +559,11 @@ int allocateRAM() {
|
|||||||
int oldDataBytes = dataBytes;
|
int oldDataBytes = dataBytes;
|
||||||
updateDataBytes();
|
updateDataBytes();
|
||||||
|
|
||||||
|
// only allcoate RAM for 1 giga udp (if 10G, return)
|
||||||
|
if (enableTenGigabitEthernet(-1))
|
||||||
|
return OK;
|
||||||
|
|
||||||
|
|
||||||
// update only if change in databytes
|
// update only if change in databytes
|
||||||
if (dataBytes == oldDataBytes) {
|
if (dataBytes == oldDataBytes) {
|
||||||
FILE_LOG(logDEBUG1, ("RAM of size %d already allocated. Nothing to be done.\n", dataBytes));
|
FILE_LOG(logDEBUG1, ("RAM of size %d already allocated. Nothing to be done.\n", dataBytes));
|
||||||
@ -1510,6 +1515,9 @@ int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t
|
|||||||
FILE_LOG(logINFOBLUE, ("Configuring MAC\n"));
|
FILE_LOG(logINFOBLUE, ("Configuring MAC\n"));
|
||||||
// 1 giga udp
|
// 1 giga udp
|
||||||
if (!enableTenGigabitEthernet(-1)) {
|
if (!enableTenGigabitEthernet(-1)) {
|
||||||
|
// if it was in 10G mode, it was not allocating RAM
|
||||||
|
if (allocateRAM() == FAIL)
|
||||||
|
return -1;
|
||||||
char cDestIp[MAX_STR_LENGTH];
|
char cDestIp[MAX_STR_LENGTH];
|
||||||
memset(cDestIp, 0, MAX_STR_LENGTH);
|
memset(cDestIp, 0, MAX_STR_LENGTH);
|
||||||
sprintf(cDestIp, "%d.%d.%d.%d", (destip>>24)&0xff,(destip>>16)&0xff,(destip>>8)&0xff,(destip)&0xff);
|
sprintf(cDestIp, "%d.%d.%d.%d", (destip>>24)&0xff,(destip>>16)&0xff,(destip>>8)&0xff,(destip)&0xff);
|
||||||
|
@ -22,7 +22,6 @@ extern int nframes;
|
|||||||
extern char* ramValues;
|
extern char* ramValues;
|
||||||
|
|
||||||
#define UDP_PACKET_HEADER_VERSION (0x1)
|
#define UDP_PACKET_HEADER_VERSION (0x1)
|
||||||
#define UDP_PACKET_DATA_BYTES (1344)
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t udpPacketNumber = 0;
|
uint32_t udpPacketNumber = 0;
|
||||||
|
@ -62,6 +62,7 @@ int setUDPDestinationDetails(const char* ip, unsigned short int port) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int createUDPSocket() {
|
int createUDPSocket() {
|
||||||
|
FILE_LOG(logDEBUG2, ("Creating UDP Socket\n"));
|
||||||
if (!strlen(udpDestinationIp)) {
|
if (!strlen(udpDestinationIp)) {
|
||||||
FILE_LOG(logERROR, ("No destination UDP ip specified.\n"));
|
FILE_LOG(logERROR, ("No destination UDP ip specified.\n"));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
@ -107,10 +108,9 @@ int sendUDPPacket(const char* buf, int length) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void closeUDPSocket() {
|
void closeUDPSocket() {
|
||||||
|
if (udpSockfd != -1) {
|
||||||
|
FILE_LOG(logINFO, ("Udp client socket closed\n"));
|
||||||
close(udpSockfd);
|
close(udpSockfd);
|
||||||
udpSockfd = -1;
|
udpSockfd = -1;
|
||||||
if (udpServerAddrInfo) {
|
|
||||||
freeaddrinfo(udpServerAddrInfo);
|
|
||||||
udpServerAddrInfo = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2272,10 +2272,21 @@ int configure_mac(int file_des) {
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
ret = configureMAC(dstIp, dstMac, srcMac, srcIp, dstPort, dstPort2);
|
ret = configureMAC(dstIp, dstMac, srcMac, srcIp, dstPort, dstPort2);
|
||||||
|
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||||
|
if (ret != OK) {
|
||||||
|
if (ret == FAIL)
|
||||||
|
sprintf(mess,"Could not configure mac because of incorrect udp 1G destination IP and port\n");
|
||||||
|
else if (ret == -1)
|
||||||
|
sprintf(mess, "Could not allocate RAM\n");
|
||||||
|
FILE_LOG(logERROR,(mess));
|
||||||
|
}
|
||||||
|
#else
|
||||||
if (ret == FAIL) {
|
if (ret == FAIL) {
|
||||||
sprintf(mess,"Configure Mac failed\n");
|
sprintf(mess,"Configure Mac failed\n");
|
||||||
FILE_LOG(logERROR,(mess));
|
FILE_LOG(logERROR,(mess));
|
||||||
} else {
|
}
|
||||||
|
#endif
|
||||||
|
else {
|
||||||
FILE_LOG(logINFO, ("\tConfigure MAC successful\n"));
|
FILE_LOG(logINFO, ("\tConfigure MAC successful\n"));
|
||||||
}
|
}
|
||||||
#if defined(EIGERD) || defined (JUNGFRAUD)
|
#if defined(EIGERD) || defined (JUNGFRAUD)
|
||||||
|
@ -2245,6 +2245,31 @@ int slsDetector::setReadOutFlags(readOutFlags flag) {
|
|||||||
if (ret == FORCE_UPDATE) {
|
if (ret == FORCE_UPDATE) {
|
||||||
ret = updateDetector();
|
ret = updateDetector();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sending to receiver
|
||||||
|
if (ret != FAIL) {
|
||||||
|
fnum = F_RECEIVER_SET_READOUT_FLAGS;
|
||||||
|
ret = FAIL;
|
||||||
|
arg = thisDetector->roFlags;
|
||||||
|
retval = (readOutFlags) -1;
|
||||||
|
FILE_LOG(logDEBUG1) << "Setting receiver readout flags to " << arg;
|
||||||
|
|
||||||
|
if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) {
|
||||||
|
auto receiver = sls::ClientSocket(true, thisDetector->receiver_hostname, thisDetector->receiverTCPPort);
|
||||||
|
ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval));
|
||||||
|
|
||||||
|
// handle ret
|
||||||
|
if (ret == FAIL) {
|
||||||
|
setErrorMask((getErrorMask()) | (COULD_NOT_SET_READOUT_FLAGS));
|
||||||
|
} else {
|
||||||
|
FILE_LOG(logDEBUG1) << "Receiver readout flag: " << retval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ret == FORCE_UPDATE) {
|
||||||
|
ret = updateReceiver();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return thisDetector->roFlags;
|
return thisDetector->roFlags;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2425,15 +2450,17 @@ std::string slsDetector::setReceiver(const std::string &receiverIP) {
|
|||||||
setDynamicRange(thisDetector->dynamicRange);
|
setDynamicRange(thisDetector->dynamicRange);
|
||||||
if (thisDetector->myDetectorType == CHIPTESTBOARD || thisDetector->myDetectorType == MOENCH) {
|
if (thisDetector->myDetectorType == CHIPTESTBOARD || thisDetector->myDetectorType == MOENCH) {
|
||||||
setTimer(SAMPLES, thisDetector->timerValue[SAMPLES]);
|
setTimer(SAMPLES, thisDetector->timerValue[SAMPLES]);
|
||||||
enableTenGigabitEthernet(thisDetector->tenGigaEnable);
|
|
||||||
}
|
}
|
||||||
if (thisDetector->myDetectorType == EIGER) {
|
if (thisDetector->myDetectorType == EIGER) {
|
||||||
setFlippedData(X, -1);
|
setFlippedData(X, -1);
|
||||||
activate(-1);
|
activate(-1);
|
||||||
setDeactivatedRxrPaddingMode(thisDetector->receiver_deactivatedPaddingEnable);
|
setDeactivatedRxrPaddingMode(thisDetector->receiver_deactivatedPaddingEnable);
|
||||||
enableTenGigabitEthernet(thisDetector->tenGigaEnable);
|
|
||||||
enableGapPixels(thisDetector->gappixels);
|
enableGapPixels(thisDetector->gappixels);
|
||||||
}
|
}
|
||||||
|
if (thisDetector->myDetectorType == EIGER || thisDetector->myDetectorType == CHIPTESTBOARD || thisDetector->myDetectorType == MOENCH) {
|
||||||
|
enableTenGigabitEthernet(thisDetector->tenGigaEnable);
|
||||||
|
setReadOutFlags(thisDetector->roFlags);
|
||||||
|
}
|
||||||
setReceiverSilentMode(thisDetector->receiver_silentMode);
|
setReceiverSilentMode(thisDetector->receiver_silentMode);
|
||||||
// data streaming
|
// data streaming
|
||||||
setReceiverStreamingFrequency(thisDetector->receiver_read_freq);
|
setReceiverStreamingFrequency(thisDetector->receiver_read_freq);
|
||||||
|
@ -182,9 +182,8 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Setting packets per frame changes member variables
|
* Setting packets per frame changes member variables
|
||||||
* @param ns number of samples
|
* @param ns number of samples
|
||||||
* @param nroich number of channels in roi
|
|
||||||
*/
|
*/
|
||||||
virtual void setNumberofSamples(const uint64_t ns, uint32_t nroich) {
|
virtual void setNumberofSamples(const uint64_t ns) {
|
||||||
FILE_LOG(logERROR) << "This is a generic function that should be overloaded by a derived class";
|
FILE_LOG(logERROR) << "This is a generic function that should be overloaded by a derived class";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -207,6 +206,17 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set databytes (ctb, moench)
|
||||||
|
* @param f readout flags
|
||||||
|
* @param r roi
|
||||||
|
* @param s number of samples
|
||||||
|
* @param t tengiga enable
|
||||||
|
*/
|
||||||
|
virtual void setImageSize(slsDetectorDefs::readOutFlags f, std::vector<slsDetectorDefs::ROI> i, int s, bool t) {
|
||||||
|
cprintf(RED,"This is a generic function that should be overloaded by a derived class\n");
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print all variables
|
* Print all variables
|
||||||
*/
|
*/
|
||||||
@ -242,9 +252,9 @@ public:
|
|||||||
class GotthardData : public GeneralData {
|
class GotthardData : public GeneralData {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const static int nChip = 10;
|
const int nChip = 10;
|
||||||
const static int nChan = 128;
|
const int nChan = 128;
|
||||||
const static int nChipsPerAdc = 2;
|
const int nChipsPerAdc = 2;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
@ -511,20 +521,26 @@ class JungfrauData : public GeneralData {
|
|||||||
|
|
||||||
|
|
||||||
class ChipTestBoardData : public GeneralData {
|
class ChipTestBoardData : public GeneralData {
|
||||||
|
private:
|
||||||
public:
|
/** Number of analog channels */
|
||||||
|
const int NCHAN_ANALOG = 32;
|
||||||
|
/** Number of digital channels */
|
||||||
|
const int NCHAN_DIGITAL = 4;
|
||||||
|
/** Number of bytes per pixel */
|
||||||
|
const int NUM_BYTES_PER_PIXEL = 2;
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
ChipTestBoardData(){
|
ChipTestBoardData(){
|
||||||
myDetectorType = slsDetectorDefs::CHIPTESTBOARD;
|
myDetectorType = slsDetectorDefs::CHIPTESTBOARD;
|
||||||
nPixelsX = 36;
|
nPixelsX = 36; // total number of channels
|
||||||
nPixelsY = 1;
|
nPixelsY = 1; // numberofsamples
|
||||||
headerSizeinPacket = sizeof(slsDetectorDefs::sls_detector_header);
|
headerSizeinPacket = sizeof(slsDetectorDefs::sls_detector_header);
|
||||||
dataSize = 0; // to be calculatedd
|
dataSize = UDP_PACKET_DATA_BYTES;
|
||||||
packetSize = headerSizeinPacket + dataSize;
|
packetSize = headerSizeinPacket + dataSize;
|
||||||
packetsPerFrame = 0; // to be calculated
|
packetsPerFrame = 0; // to be calculated
|
||||||
imageSize = nPixelsX * nPixelsY * 2;
|
imageSize = 0; // to be calculated
|
||||||
maxFramesPerFile = CTB_MAX_FRAMES_PER_FILE;
|
maxFramesPerFile = CTB_MAX_FRAMES_PER_FILE;
|
||||||
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsDetectorDefs::sls_receiver_header);
|
fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsDetectorDefs::sls_receiver_header);
|
||||||
defaultFifoDepth = 2500;
|
defaultFifoDepth = 2500;
|
||||||
@ -532,27 +548,43 @@ class ChipTestBoardData : public GeneralData {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setting packets per frame changes member variables
|
* Set databytes (ctb, moench)
|
||||||
* @param ns number of samples
|
* @param f readout flags
|
||||||
* @param nroich number of channels in roi
|
* @param r roi
|
||||||
|
* @param s number of samples
|
||||||
|
* @param t tengiga enable
|
||||||
*/
|
*/
|
||||||
void setNumberofSamples(const uint64_t ns, uint32_t nroich) {
|
void setImageSize(slsDetectorDefs::readOutFlags f, std::vector<slsDetectorDefs::ROI> i, int s, bool t) {
|
||||||
packetsPerFrame = ceil(double(2 * (nroich ? nroich : 32) * ns) / dataSize);
|
int nchans = 0;
|
||||||
nPixelsY = (ns * 2) / 25;/* depends on nroich also?? */
|
if (f & slsDetectorDefs::NORMAL_READOUT || f & slsDetectorDefs::ANALOG_AND_DIGITAL) {
|
||||||
imageSize = nPixelsX * nPixelsY * 2;
|
nchans += NCHAN_ANALOG;
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
// if roi
|
||||||
* Setting ten giga enable changes member variables
|
if (i.size()) {
|
||||||
* @param tgEnable true if 10GbE is enabled, else false
|
nchans = abs(i[0].xmax - i[0].xmin);
|
||||||
* @param dr dynamic range
|
}
|
||||||
*/
|
}
|
||||||
void SetTenGigaEnable(bool tgEnable, int dr) {
|
if (f & slsDetectorDefs::DIGITAL_ONLY || f & slsDetectorDefs::ANALOG_AND_DIGITAL)
|
||||||
dataSize = (tgEnable ? 4096 : 1024);
|
nchans += NCHAN_DIGITAL;
|
||||||
|
|
||||||
|
nPixelsX = nchans;
|
||||||
|
nPixelsY = s;
|
||||||
|
// 10G
|
||||||
|
if (t) {
|
||||||
|
// fixed values
|
||||||
|
dataSize = 0; // FIXME: fix when firmware written
|
||||||
packetSize = headerSizeinPacket + dataSize;
|
packetSize = headerSizeinPacket + dataSize;
|
||||||
packetsPerFrame = (tgEnable ? 4 : 16) * dr;
|
packetsPerFrame = 0; // FIXME: fix when firmware written
|
||||||
imageSize = dataSize*packetsPerFrame;
|
imageSize = dataSize*packetsPerFrame; // FIXME: OR fix when firmware written
|
||||||
};
|
}
|
||||||
|
// 1g udp (via fifo readout)
|
||||||
|
else {
|
||||||
|
dataSize = UDP_PACKET_DATA_BYTES;
|
||||||
|
packetSize = headerSizeinPacket + dataSize;
|
||||||
|
imageSize = nchans * NUM_BYTES_PER_PIXEL * s;
|
||||||
|
packetsPerFrame = ceil((double)imageSize / (double)UDP_PACKET_DATA_BYTES);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -572,10 +604,8 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Bytes Per Adc */
|
/** Bytes Per Adc */
|
||||||
const static uint32_t bytesPerAdc = 2;
|
const uint32_t bytesPerAdc = 2;
|
||||||
|
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
MoenchData(){
|
MoenchData(){
|
||||||
@ -615,10 +645,9 @@ private:
|
|||||||
/**
|
/**
|
||||||
* Setting packets per frame changes member variables
|
* Setting packets per frame changes member variables
|
||||||
* @param ns number of samples
|
* @param ns number of samples
|
||||||
* @param nroich number of channels in roi
|
|
||||||
*/
|
*/
|
||||||
void setNumberofSamples(const uint64_t ns, uint32_t nroich) {
|
void setNumberofSamples(const uint64_t ns) {
|
||||||
packetsPerFrame = ceil(double(2 * (nroich ? nroich : 32) * ns) / dataSize);
|
packetsPerFrame = ceil(double(2 * 32 * ns) / dataSize);
|
||||||
nPixelsY = (ns * 2) / 25;/* depends on nroich also?? */
|
nPixelsY = (ns * 2) / 25;/* depends on nroich also?? */
|
||||||
imageSize = nPixelsX * nPixelsY * 2;
|
imageSize = nPixelsX * nPixelsY * 2;
|
||||||
};
|
};
|
||||||
|
@ -112,7 +112,7 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject {
|
|||||||
* Set GeneralData pointer to the one given
|
* Set GeneralData pointer to the one given
|
||||||
* @param g address of GeneralData (Detector Data) pointer
|
* @param g address of GeneralData (Detector Data) pointer
|
||||||
*/
|
*/
|
||||||
void SetGeneralData(GeneralData*& g);
|
void SetGeneralData(GeneralData* g);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set thread priority
|
* Set thread priority
|
||||||
|
@ -73,6 +73,12 @@ class slsReceiverImplementation: private virtual slsDetectorDefs {
|
|||||||
*/
|
*/
|
||||||
bool getGapPixelsEnable() const;
|
bool getGapPixelsEnable() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get readout flags (Eiger, chiptestboard, moench)
|
||||||
|
* @return readout flags
|
||||||
|
*/
|
||||||
|
readOutFlags getReadOutFlags() const;
|
||||||
|
|
||||||
|
|
||||||
//***file parameters***
|
//***file parameters***
|
||||||
/**
|
/**
|
||||||
@ -342,6 +348,13 @@ class slsReceiverImplementation: private virtual slsDetectorDefs {
|
|||||||
*/
|
*/
|
||||||
int setGapPixelsEnable(const bool b);
|
int setGapPixelsEnable(const bool b);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set readout flags (eiger, chiptestboard, moench)
|
||||||
|
* @param f readout flag
|
||||||
|
* @return OK or FAIL
|
||||||
|
*/
|
||||||
|
int setReadOutFlags(const readOutFlags f);
|
||||||
|
|
||||||
|
|
||||||
//***file parameters***
|
//***file parameters***
|
||||||
/**
|
/**
|
||||||
@ -765,12 +778,12 @@ private:
|
|||||||
int flippedData[2];
|
int flippedData[2];
|
||||||
/** gap pixels enable */
|
/** gap pixels enable */
|
||||||
bool gapPixelsEnable;
|
bool gapPixelsEnable;
|
||||||
|
/** readout flags*/
|
||||||
|
readOutFlags readoutFlags;
|
||||||
|
|
||||||
//*** receiver parameters ***
|
//*** receiver parameters ***
|
||||||
/** Number of Threads */
|
/** Number of Threads */
|
||||||
int numThreads;
|
int numThreads;
|
||||||
/** Number of channels in roi for jungfrauctb */
|
|
||||||
uint32_t nroichannels;
|
|
||||||
/** Maximum Number of Listening Threads/ UDP Ports */
|
/** Maximum Number of Listening Threads/ UDP Ports */
|
||||||
const static int MAX_NUMBER_OF_LISTENING_THREADS = 2;
|
const static int MAX_NUMBER_OF_LISTENING_THREADS = 2;
|
||||||
/** Receiver Status */
|
/** Receiver Status */
|
||||||
|
@ -19,6 +19,8 @@ class slsReceiverImplementation;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
|
class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
|
||||||
|
private:
|
||||||
|
enum numberMode {DEC, HEX};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -120,7 +122,7 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
|
|||||||
|
|
||||||
/** validate and set error */
|
/** validate and set error */
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void validate(T arg, T retval, std::string modename, bool hex);
|
void validate(T arg, T retval, std::string modename, numberMode hex);
|
||||||
|
|
||||||
/** Unrecognized Function */
|
/** Unrecognized Function */
|
||||||
int M_nofunc();
|
int M_nofunc();
|
||||||
@ -277,6 +279,9 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
|
|||||||
/** set deactivated receiver padding enable */
|
/** set deactivated receiver padding enable */
|
||||||
int set_deactivated_receiver_padding_enable();
|
int set_deactivated_receiver_padding_enable();
|
||||||
|
|
||||||
|
/** set readout flags */
|
||||||
|
int set_readout_flags();
|
||||||
|
|
||||||
|
|
||||||
/** detector type */
|
/** detector type */
|
||||||
detectorType myDetectorType;
|
detectorType myDetectorType;
|
||||||
|
@ -172,7 +172,7 @@ void Listener::RecordFirstIndices(uint64_t fnum) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Listener::SetGeneralData(GeneralData*& g) {
|
void Listener::SetGeneralData(GeneralData* g) {
|
||||||
generalData = g;
|
generalData = g;
|
||||||
generalData->Print();
|
generalData->Print();
|
||||||
}
|
}
|
||||||
@ -467,6 +467,7 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
memcpy(buf + fifohsize + dsize - 2, carryOverPacket + hsize, dsize+2);
|
memcpy(buf + fifohsize + dsize - 2, carryOverPacket + hsize, dsize+2);
|
||||||
break;
|
break;
|
||||||
case CHIPTESTBOARD:
|
case CHIPTESTBOARD:
|
||||||
|
case MOENCH:
|
||||||
if (pnum == (pperFrame-1))
|
if (pnum == (pperFrame-1))
|
||||||
memcpy(buf + fifohsize + (pnum * dsize), carryOverPacket + hsize, corrected_dsize);
|
memcpy(buf + fifohsize + (pnum * dsize), carryOverPacket + hsize, corrected_dsize);
|
||||||
else
|
else
|
||||||
@ -479,7 +480,7 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
|
|
||||||
carryOverFlag = false;
|
carryOverFlag = false;
|
||||||
++numpackets; //number of packets in this image (each time its copied to buf)
|
++numpackets; //number of packets in this image (each time its copied to buf)
|
||||||
new_header->packetsMask[pnum] = 1;
|
new_header->packetsMask[((pnum < MAX_NUM_PACKETS) ? pnum : MAX_NUM_PACKETS)] = 1;
|
||||||
|
|
||||||
//writer header
|
//writer header
|
||||||
if(isHeaderEmpty) {
|
if(isHeaderEmpty) {
|
||||||
@ -612,6 +613,7 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
memcpy(buf + fifohsize + (pnum * dsize) - 2, listeningPacket + hsize, dsize+2);
|
memcpy(buf + fifohsize + (pnum * dsize) - 2, listeningPacket + hsize, dsize+2);
|
||||||
break;
|
break;
|
||||||
case CHIPTESTBOARD:
|
case CHIPTESTBOARD:
|
||||||
|
case MOENCH:
|
||||||
if (pnum == (pperFrame-1))
|
if (pnum == (pperFrame-1))
|
||||||
memcpy(buf + fifohsize + (pnum * dsize), listeningPacket + hsize, corrected_dsize);
|
memcpy(buf + fifohsize + (pnum * dsize), listeningPacket + hsize, corrected_dsize);
|
||||||
else
|
else
|
||||||
@ -622,7 +624,7 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
++numpackets; //number of packets in this image (each time its copied to buf)
|
++numpackets; //number of packets in this image (each time its copied to buf)
|
||||||
new_header->packetsMask[pnum] = 1;
|
new_header->packetsMask[((pnum < MAX_NUM_PACKETS) ? pnum : MAX_NUM_PACKETS)] = 1;
|
||||||
|
|
||||||
if(isHeaderEmpty) {
|
if(isHeaderEmpty) {
|
||||||
// -------------------------- new header ----------------------------------------------------------------------
|
// -------------------------- new header ----------------------------------------------------------------------
|
||||||
|
@ -69,10 +69,10 @@ void slsReceiverImplementation::InitializeMembers() {
|
|||||||
flippedData[0] = 0;
|
flippedData[0] = 0;
|
||||||
flippedData[1] = 0;
|
flippedData[1] = 0;
|
||||||
gapPixelsEnable = false;
|
gapPixelsEnable = false;
|
||||||
|
readoutFlags = NORMAL_READOUT;
|
||||||
|
|
||||||
//*** receiver parameters ***
|
//*** receiver parameters ***
|
||||||
numThreads = 1;
|
numThreads = 1;
|
||||||
nroichannels = 0;
|
|
||||||
status = IDLE;
|
status = IDLE;
|
||||||
activated = true;
|
activated = true;
|
||||||
deactivatedPaddingEnable = true;
|
deactivatedPaddingEnable = true;
|
||||||
@ -151,6 +151,12 @@ bool slsReceiverImplementation::getGapPixelsEnable() const {
|
|||||||
return gapPixelsEnable;
|
return gapPixelsEnable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
slsDetectorDefs::readOutFlags slsReceiverImplementation::getReadOutFlags() const {
|
||||||
|
FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called";
|
||||||
|
return readoutFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***file parameters***/
|
/***file parameters***/
|
||||||
slsDetectorDefs::fileFormat slsReceiverImplementation::getFileFormat() const{
|
slsDetectorDefs::fileFormat slsReceiverImplementation::getFileFormat() const{
|
||||||
FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called";
|
FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called";
|
||||||
@ -436,6 +442,46 @@ int slsReceiverImplementation::setGapPixelsEnable(const bool b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int slsReceiverImplementation::setReadOutFlags(const readOutFlags f) {
|
||||||
|
if (readoutFlags != f) {
|
||||||
|
readoutFlags = f;
|
||||||
|
|
||||||
|
// side effects
|
||||||
|
generalData->setImageSize(readoutFlags, roi, numberOfSamples, tengigaEnable);
|
||||||
|
for (const auto& it : dataProcessor)
|
||||||
|
it->SetPixelDimension();
|
||||||
|
if (SetupFifoStructure() == FAIL)
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
std::string flag;
|
||||||
|
if (f == NORMAL_READOUT)
|
||||||
|
flag = "none";
|
||||||
|
else if (f & STORE_IN_RAM)
|
||||||
|
flag.append("storeinram ");
|
||||||
|
if (f & TOT_MODE)
|
||||||
|
flag.append("tot ");
|
||||||
|
if (f & CONTINOUS_RO)
|
||||||
|
flag.append("continous ");
|
||||||
|
if (f & PARALLEL)
|
||||||
|
flag.append("parallel ");
|
||||||
|
if (f & NONPARALLEL)
|
||||||
|
flag.append("nonparallel ");
|
||||||
|
if (f & SAFE)
|
||||||
|
flag.append("safe ");
|
||||||
|
if (f & DIGITAL_ONLY)
|
||||||
|
flag.append("digital ");
|
||||||
|
if (f & ANALOG_AND_DIGITAL)
|
||||||
|
flag.append("analog_digital ");
|
||||||
|
if (f & SHOW_OVERFLOW)
|
||||||
|
flag.append("overflow ");
|
||||||
|
if (f & NOOVERFLOW)
|
||||||
|
flag.append("nooverflow ");
|
||||||
|
|
||||||
|
FILE_LOG(logINFO) << "ReadoutFlags: " << flag;
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void slsReceiverImplementation::setFileFormat(const fileFormat f) {
|
void slsReceiverImplementation::setFileFormat(const fileFormat f) {
|
||||||
switch(f) {
|
switch(f) {
|
||||||
#ifdef HDF5C
|
#ifdef HDF5C
|
||||||
@ -568,12 +614,6 @@ int slsReceiverImplementation::setUDPSocketBufferSize(const uint32_t s) {
|
|||||||
|
|
||||||
/***acquisition parameters***/
|
/***acquisition parameters***/
|
||||||
int slsReceiverImplementation::setROI(const std::vector<slsDetectorDefs::ROI> i) {
|
int slsReceiverImplementation::setROI(const std::vector<slsDetectorDefs::ROI> i) {
|
||||||
if (myDetectorType != GOTTHARD) {
|
|
||||||
FILE_LOG(logERROR) << "Can not set ROI for this detector";
|
|
||||||
return FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool change = false;
|
bool change = false;
|
||||||
if (roi.size() != i.size())
|
if (roi.size() != i.size())
|
||||||
change = true;
|
change = true;
|
||||||
@ -594,17 +634,24 @@ int slsReceiverImplementation::setROI(const std::vector<slsDetectorDefs::ROI> i)
|
|||||||
|
|
||||||
roi = i;
|
roi = i;
|
||||||
|
|
||||||
|
switch(myDetectorType) {
|
||||||
|
case GOTTHARD:
|
||||||
generalData->SetROI(i);
|
generalData->SetROI(i);
|
||||||
framesPerFile = generalData->maxFramesPerFile;
|
framesPerFile = generalData->maxFramesPerFile;
|
||||||
|
break;
|
||||||
|
case MOENCH:
|
||||||
|
generalData->SetROI(i);
|
||||||
|
break;
|
||||||
|
case CHIPTESTBOARD:
|
||||||
|
generalData->setImageSize(readoutFlags, roi, numberOfSamples, tengigaEnable);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (const auto& it : dataProcessor)
|
||||||
|
it->SetPixelDimension();
|
||||||
if (SetupFifoStructure() == FAIL)
|
if (SetupFifoStructure() == FAIL)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
|
||||||
for (const auto& it : listener)
|
|
||||||
it->SetGeneralData(generalData);
|
|
||||||
for (const auto& it : dataProcessor)
|
|
||||||
it->SetGeneralData(generalData);
|
|
||||||
for (const auto& it : dataStreamer)
|
|
||||||
it->SetGeneralData(generalData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -700,7 +747,6 @@ int slsReceiverImplementation::setAcquisitionPeriod(const uint64_t i) {
|
|||||||
acquisitionPeriod = i;
|
acquisitionPeriod = i;
|
||||||
FILE_LOG(logINFO) << "Acquisition Period: " << (double)acquisitionPeriod/(1E9) << "s";
|
FILE_LOG(logINFO) << "Acquisition Period: " << (double)acquisitionPeriod/(1E9) << "s";
|
||||||
|
|
||||||
//overrridden child classes might return FAIL
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -710,7 +756,6 @@ int slsReceiverImplementation::setAcquisitionTime(const uint64_t i) {
|
|||||||
acquisitionTime = i;
|
acquisitionTime = i;
|
||||||
FILE_LOG(logINFO) << "Acquisition Time: " << (double)acquisitionTime/(1E9) << "s";
|
FILE_LOG(logINFO) << "Acquisition Time: " << (double)acquisitionTime/(1E9) << "s";
|
||||||
|
|
||||||
//overrridden child classes might return FAIL
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -734,7 +779,6 @@ int slsReceiverImplementation::setNumberOfFrames(const uint64_t i) {
|
|||||||
numberOfFrames = i;
|
numberOfFrames = i;
|
||||||
FILE_LOG(logINFO) << "Number of Frames: " << numberOfFrames;
|
FILE_LOG(logINFO) << "Number of Frames: " << numberOfFrames;
|
||||||
|
|
||||||
//overrridden child classes might return FAIL
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -743,7 +787,18 @@ int slsReceiverImplementation::setNumberofSamples(const uint64_t i) {
|
|||||||
if (numberOfSamples != i) {
|
if (numberOfSamples != i) {
|
||||||
numberOfSamples = i;
|
numberOfSamples = i;
|
||||||
|
|
||||||
generalData->setNumberofSamples(i, nroichannels);
|
switch(myDetectorType) {
|
||||||
|
case MOENCH:
|
||||||
|
generalData->setNumberofSamples(i);
|
||||||
|
break;
|
||||||
|
case CHIPTESTBOARD:
|
||||||
|
generalData->setImageSize(readoutFlags, roi, numberOfSamples, tengigaEnable);
|
||||||
|
for (const auto& it : dataProcessor)
|
||||||
|
it->SetPixelDimension();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (SetupFifoStructure() == FAIL)
|
if (SetupFifoStructure() == FAIL)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
@ -832,8 +887,9 @@ int slsReceiverImplementation::setDetectorType(const detectorType d) {
|
|||||||
switch(myDetectorType) {
|
switch(myDetectorType) {
|
||||||
case GOTTHARD:
|
case GOTTHARD:
|
||||||
case EIGER:
|
case EIGER:
|
||||||
case CHIPTESTBOARD:
|
|
||||||
case JUNGFRAU:
|
case JUNGFRAU:
|
||||||
|
case CHIPTESTBOARD:
|
||||||
|
case MOENCH:
|
||||||
FILE_LOG(logINFO) << " ***** " << detectorTypeToString(d) << " Receiver *****";
|
FILE_LOG(logINFO) << " ***** " << detectorTypeToString(d) << " Receiver *****";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -228,6 +228,7 @@ int slsReceiverTCPIPInterface::function_table(){
|
|||||||
flist[F_RECEIVER_DISCARD_POLICY] = &slsReceiverTCPIPInterface::set_discard_policy;
|
flist[F_RECEIVER_DISCARD_POLICY] = &slsReceiverTCPIPInterface::set_discard_policy;
|
||||||
flist[F_RECEIVER_PADDING_ENABLE] = &slsReceiverTCPIPInterface::set_padding_enable;
|
flist[F_RECEIVER_PADDING_ENABLE] = &slsReceiverTCPIPInterface::set_padding_enable;
|
||||||
flist[F_RECEIVER_DEACTIVATED_PADDING_ENABLE] = &slsReceiverTCPIPInterface::set_deactivated_receiver_padding_enable;
|
flist[F_RECEIVER_DEACTIVATED_PADDING_ENABLE] = &slsReceiverTCPIPInterface::set_deactivated_receiver_padding_enable;
|
||||||
|
flist[F_RECEIVER_SET_READOUT_FLAGS] = &slsReceiverTCPIPInterface::set_readout_flags;
|
||||||
|
|
||||||
for (int i = NUM_DET_FUNCTIONS + 1; i < NUM_REC_FUNCTIONS ; i++) {
|
for (int i = NUM_DET_FUNCTIONS + 1; i < NUM_REC_FUNCTIONS ; i++) {
|
||||||
FILE_LOG(logDEBUG1) << "function fnum: " << i << " (" <<
|
FILE_LOG(logDEBUG1) << "function fnum: " << i << " (" <<
|
||||||
@ -286,7 +287,7 @@ void slsReceiverTCPIPInterface::modeNotImplemented(std::string modename, int mod
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void slsReceiverTCPIPInterface::validate(T arg, T retval, std::string modename, bool hex) {
|
void slsReceiverTCPIPInterface::validate(T arg, T retval, std::string modename, numberMode hex) {
|
||||||
if (ret == OK && arg != -1 && retval != arg) {
|
if (ret == OK && arg != -1 && retval != arg) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
if (hex)
|
if (hex)
|
||||||
@ -584,6 +585,7 @@ int slsReceiverTCPIPInterface::set_detector_type(){
|
|||||||
case GOTTHARD:
|
case GOTTHARD:
|
||||||
case EIGER:
|
case EIGER:
|
||||||
case CHIPTESTBOARD:
|
case CHIPTESTBOARD:
|
||||||
|
case MOENCH:
|
||||||
case JUNGFRAU:
|
case JUNGFRAU:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -617,7 +619,7 @@ int slsReceiverTCPIPInterface::set_detector_type(){
|
|||||||
}
|
}
|
||||||
//get
|
//get
|
||||||
retval = myDetectorType;
|
retval = myDetectorType;
|
||||||
validate((int)arg, (int)retval, std::string("set detector type"), 0);
|
validate((int)arg, (int)retval, std::string("set detector type"), DEC);
|
||||||
return interface->Server_SendResult(false, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(false, ret, &retval, sizeof(retval), mess);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -684,8 +686,7 @@ int slsReceiverTCPIPInterface::set_roi() {
|
|||||||
arg[iloop].ymax << ")";
|
arg[iloop].ymax << ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
// only for gotthard
|
if (myDetectorType == EIGER || myDetectorType == JUNGFRAU)
|
||||||
if (myDetectorType != GOTTHARD)
|
|
||||||
functionNotImplemented();
|
functionNotImplemented();
|
||||||
|
|
||||||
// base object not null
|
// base object not null
|
||||||
@ -805,7 +806,7 @@ int slsReceiverTCPIPInterface::set_timer() {
|
|||||||
receiver->setSubPeriod(index[1] + receiver->getSubExpTime());
|
receiver->setSubPeriod(index[1] + receiver->getSubExpTime());
|
||||||
break;
|
break;
|
||||||
case SAMPLES:
|
case SAMPLES:
|
||||||
if (myDetectorType != CHIPTESTBOARD) {
|
if (myDetectorType != CHIPTESTBOARD && myDetectorType != MOENCH) {
|
||||||
modeNotImplemented("(Samples) Timer index", (int)index[0]);
|
modeNotImplemented("(Samples) Timer index", (int)index[0]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -837,7 +838,7 @@ int slsReceiverTCPIPInterface::set_timer() {
|
|||||||
retval=(receiver->getSubPeriod() - receiver->getSubExpTime());
|
retval=(receiver->getSubPeriod() - receiver->getSubExpTime());
|
||||||
break;
|
break;
|
||||||
case SAMPLES:
|
case SAMPLES:
|
||||||
if (myDetectorType != CHIPTESTBOARD) {
|
if (myDetectorType != CHIPTESTBOARD && myDetectorType != MOENCH) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess,"This timer mode (%lld) does not exist for this receiver type\n", (long long int)index[0]);
|
sprintf(mess,"This timer mode (%lld) does not exist for this receiver type\n", (long long int)index[0]);
|
||||||
FILE_LOG(logERROR) << "Warning: " << mess;
|
FILE_LOG(logERROR) << "Warning: " << mess;
|
||||||
@ -849,7 +850,7 @@ int slsReceiverTCPIPInterface::set_timer() {
|
|||||||
modeNotImplemented("Timer index", (int)index[0]);
|
modeNotImplemented("Timer index", (int)index[0]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
validate((int)index[1], (int)retval, std::string("set timer"), 0);
|
validate((int)index[1], (int)retval, std::string("set timer"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << slsDetectorDefs::getTimerType((timerIndex)(index[0])) << ":" << retval;
|
FILE_LOG(logDEBUG1) << slsDetectorDefs::getTimerType((timerIndex)(index[0])) << ":" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -904,7 +905,7 @@ int slsReceiverTCPIPInterface::set_dynamic_range() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = receiver->getDynamicRange();
|
retval = receiver->getDynamicRange();
|
||||||
validate(dr, retval, std::string("set dynamic range"), 0);
|
validate(dr, retval, std::string("set dynamic range"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "dynamic range: " << retval;
|
FILE_LOG(logDEBUG1) << "dynamic range: " << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -938,7 +939,7 @@ int slsReceiverTCPIPInterface::set_streaming_frequency() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = receiver->getStreamingFrequency();
|
retval = receiver->getStreamingFrequency();
|
||||||
validate(index, retval, std::string("set streaming frequency"), 0);
|
validate(index, retval, std::string("set streaming frequency"), DEC);
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
}
|
}
|
||||||
@ -1112,7 +1113,7 @@ int slsReceiverTCPIPInterface::set_file_index() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval=receiver->getFileIndex();
|
retval=receiver->getFileIndex();
|
||||||
validate(index, retval, std::string("set file index"), 0);
|
validate(index, retval, std::string("set file index"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "file index:" << retval;
|
FILE_LOG(logDEBUG1) << "file index:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval,sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval,sizeof(retval), mess);
|
||||||
@ -1199,7 +1200,7 @@ int slsReceiverTCPIPInterface::enable_file_write(){
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = receiver->getFileWriteEnable();
|
retval = receiver->getFileWriteEnable();
|
||||||
validate(enable, retval, std::string("set file write enable"), 0);
|
validate(enable, retval, std::string("set file write enable"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "file write enable:" << retval;
|
FILE_LOG(logDEBUG1) << "file write enable:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1229,7 +1230,7 @@ int slsReceiverTCPIPInterface::enable_overwrite() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = receiver->getOverwriteEnable();
|
retval = receiver->getOverwriteEnable();
|
||||||
validate(index, retval, std::string("set file overwrite enable"), 0);
|
validate(index, retval, std::string("set file overwrite enable"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "file overwrite enable:" << retval;
|
FILE_LOG(logDEBUG1) << "file overwrite enable:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1262,7 +1263,7 @@ int slsReceiverTCPIPInterface::enable_tengiga() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = receiver->getTenGigaEnable();
|
retval = receiver->getTenGigaEnable();
|
||||||
validate(val, retval, std::string("set 10GbE"), 0);
|
validate(val, retval, std::string("set 10GbE"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "10Gbe:" << retval;
|
FILE_LOG(logDEBUG1) << "10Gbe:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1296,7 +1297,7 @@ int slsReceiverTCPIPInterface::set_fifo_depth() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = receiver->getFifoDepth();
|
retval = receiver->getFifoDepth();
|
||||||
validate(value, retval, std::string("set fifo depth"), 0);
|
validate(value, retval, std::string("set fifo depth"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "fifo depth:" << retval;
|
FILE_LOG(logDEBUG1) << "fifo depth:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1329,7 +1330,7 @@ int slsReceiverTCPIPInterface::set_activate() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = (int)receiver->getActivate();
|
retval = (int)receiver->getActivate();
|
||||||
validate(enable, retval, std::string("set activate"), 0);
|
validate(enable, retval, std::string("set activate"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "Activate: " << retval;
|
FILE_LOG(logDEBUG1) << "Activate: " << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1359,7 +1360,7 @@ int slsReceiverTCPIPInterface::set_data_stream_enable(){
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = receiver->getDataStreamEnable();
|
retval = receiver->getDataStreamEnable();
|
||||||
validate(index, retval, std::string("set data stream enable"), 0);
|
validate(index, retval, std::string("set data stream enable"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "data streaming enable:" << retval;
|
FILE_LOG(logDEBUG1) << "data streaming enable:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1389,7 +1390,7 @@ int slsReceiverTCPIPInterface::set_streaming_timer(){
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval=receiver->getStreamingTimer();
|
retval=receiver->getStreamingTimer();
|
||||||
validate(index, retval, std::string("set data stream timer"), 0);
|
validate(index, retval, std::string("set data stream timer"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "Streaming timer:" << retval;
|
FILE_LOG(logDEBUG1) << "Streaming timer:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1422,7 +1423,7 @@ int slsReceiverTCPIPInterface::set_flipped_data(){
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval=receiver->getFlippedData(args[0]);
|
retval=receiver->getFlippedData(args[0]);
|
||||||
validate(args[1], retval, std::string("set flipped data"), 0);
|
validate(args[1], retval, std::string("set flipped data"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "Flipped Data:" << retval;
|
FILE_LOG(logDEBUG1) << "Flipped Data:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1452,7 +1453,7 @@ int slsReceiverTCPIPInterface::set_file_format() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = receiver->getFileFormat();
|
retval = receiver->getFileFormat();
|
||||||
validate(f, retval, std::string("set file format"), 0);
|
validate(f, retval, std::string("set file format"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "File Format: " << retval;
|
FILE_LOG(logDEBUG1) << "File Format: " << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1482,7 +1483,7 @@ int slsReceiverTCPIPInterface::set_detector_posid() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = receiver->getDetectorPositionId();
|
retval = receiver->getDetectorPositionId();
|
||||||
validate(arg, retval, std::string("set detector position id"), 0);
|
validate(arg, retval, std::string("set detector position id"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "Position Id:" << retval;
|
FILE_LOG(logDEBUG1) << "Position Id:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1547,7 +1548,7 @@ int slsReceiverTCPIPInterface::set_streaming_port() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = receiver->getStreamingPort();
|
retval = receiver->getStreamingPort();
|
||||||
validate(port, retval, std::string("set streaming port"), 0);
|
validate(port, retval, std::string("set streaming port"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "streaming port:" << retval;
|
FILE_LOG(logDEBUG1) << "streaming port:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1604,7 +1605,7 @@ int slsReceiverTCPIPInterface::set_silent_mode() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = (int)receiver->getSilentMode();
|
retval = (int)receiver->getSilentMode();
|
||||||
validate(value, retval, std::string("set silent mode"), 0);
|
validate(value, retval, std::string("set silent mode"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "silent mode:" << retval;
|
FILE_LOG(logDEBUG1) << "silent mode:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1637,7 +1638,7 @@ int slsReceiverTCPIPInterface::enable_gap_pixels() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = receiver->getGapPixelsEnable();
|
retval = receiver->getGapPixelsEnable();
|
||||||
validate(enable, retval, std::string("set gap pixels enable"), 0);
|
validate(enable, retval, std::string("set gap pixels enable"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "Gap Pixels Enable: " << retval;
|
FILE_LOG(logDEBUG1) << "Gap Pixels Enable: " << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1748,7 +1749,7 @@ int slsReceiverTCPIPInterface::set_udp_socket_buffer_size() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = receiver->getUDPSocketBufferSize();
|
retval = receiver->getUDPSocketBufferSize();
|
||||||
validate(index, retval, std::string("set udp socket buffer size (No CAP_NET_ADMIN privileges?)"), 0);
|
validate(index, retval, std::string("set udp socket buffer size (No CAP_NET_ADMIN privileges?)"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "UDP Socket Buffer Size:" << retval;
|
FILE_LOG(logDEBUG1) << "UDP Socket Buffer Size:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1795,7 +1796,7 @@ int slsReceiverTCPIPInterface::set_frames_per_file() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = receiver->getFramesPerFile();
|
retval = receiver->getFramesPerFile();
|
||||||
validate(index, retval, std::string("set frames per file"), 0);
|
validate(index, retval, std::string("set frames per file"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "frames per file:" << retval;
|
FILE_LOG(logDEBUG1) << "frames per file:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1865,7 +1866,7 @@ int slsReceiverTCPIPInterface::set_discard_policy() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = receiver->getFrameDiscardPolicy();
|
retval = receiver->getFrameDiscardPolicy();
|
||||||
validate(index, retval, std::string("set discard policy"), 0);
|
validate(index, retval, std::string("set discard policy"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "frame discard policy:" << retval;
|
FILE_LOG(logDEBUG1) << "frame discard policy:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1896,7 +1897,7 @@ int slsReceiverTCPIPInterface::set_padding_enable() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = (int)receiver->getFramePaddingEnable();
|
retval = (int)receiver->getFramePaddingEnable();
|
||||||
validate(index, retval, std::string("set frame padding enable"), 0);
|
validate(index, retval, std::string("set frame padding enable"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "Frame Padding Enable:" << retval;
|
FILE_LOG(logDEBUG1) << "Frame Padding Enable:" << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
@ -1929,8 +1930,40 @@ int slsReceiverTCPIPInterface::set_deactivated_receiver_padding_enable() {
|
|||||||
}
|
}
|
||||||
// get
|
// get
|
||||||
retval = (int)receiver->getDeactivatedPadding();
|
retval = (int)receiver->getDeactivatedPadding();
|
||||||
validate(enable, retval, std::string("set deactivated padding enable"), 0);
|
validate(enable, retval, std::string("set deactivated padding enable"), DEC);
|
||||||
FILE_LOG(logDEBUG1) << "Deactivated Padding Enable: " << retval;
|
FILE_LOG(logDEBUG1) << "Deactivated Padding Enable: " << retval;
|
||||||
}
|
}
|
||||||
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int slsReceiverTCPIPInterface::set_readout_flags() {
|
||||||
|
ret = OK;
|
||||||
|
memset(mess, 0, sizeof(mess));
|
||||||
|
readOutFlags arg = GET_READOUT_FLAGS;
|
||||||
|
readOutFlags retval = GET_READOUT_FLAGS;
|
||||||
|
|
||||||
|
// get args, return if socket crashed, ret is fail if receiver is not null
|
||||||
|
if (interface->Server_ReceiveArg(ret, mess, &arg, sizeof(arg), true, receiver) == FAIL)
|
||||||
|
return FAIL;
|
||||||
|
|
||||||
|
if (myDetectorType == JUNGFRAU || myDetectorType == GOTTHARD)
|
||||||
|
functionNotImplemented();
|
||||||
|
|
||||||
|
// base object not null
|
||||||
|
else if (ret == OK) {
|
||||||
|
// set
|
||||||
|
if (arg >= 0) {
|
||||||
|
// verify if receiver is unlocked and idle
|
||||||
|
if (interface->Server_VerifyLockAndIdle(ret, mess, lockStatus, receiver->getStatus(), fnum) == OK) {
|
||||||
|
FILE_LOG(logDEBUG1) << "Setting readout flag: " << arg;
|
||||||
|
ret = receiver->setReadOutFlags(arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// get
|
||||||
|
retval = receiver->getReadOutFlags();
|
||||||
|
validate((int)arg, (int)(retval & arg), std::string("set readout flags"), HEX);
|
||||||
|
FILE_LOG(logDEBUG1) << "Readout flags: " << retval;
|
||||||
|
}
|
||||||
|
return interface->Server_SendResult(true, ret, &retval, sizeof(retval), mess);
|
||||||
|
}
|
||||||
|
@ -36,6 +36,9 @@ typedef int int32_t;
|
|||||||
#define SLS_DETECTOR_HEADER_VERSION 0x2
|
#define SLS_DETECTOR_HEADER_VERSION 0x2
|
||||||
#define SLS_DETECTOR_JSON_HEADER_VERSION 0x3
|
#define SLS_DETECTOR_JSON_HEADER_VERSION 0x3
|
||||||
|
|
||||||
|
// ctb/ moench 1g udp (read from fifo)
|
||||||
|
#define UDP_PACKET_DATA_BYTES (1344)
|
||||||
|
|
||||||
/** maximum rois */
|
/** maximum rois */
|
||||||
#define MAX_ROIS 100
|
#define MAX_ROIS 100
|
||||||
|
|
||||||
|
@ -119,6 +119,7 @@ enum detFuncs{
|
|||||||
F_RECEIVER_DISCARD_POLICY, /** < frames discard policy */
|
F_RECEIVER_DISCARD_POLICY, /** < frames discard policy */
|
||||||
F_RECEIVER_PADDING_ENABLE, /** < partial frames padding enable */
|
F_RECEIVER_PADDING_ENABLE, /** < partial frames padding enable */
|
||||||
F_RECEIVER_DEACTIVATED_PADDING_ENABLE, /** < deactivated receiver padding enable */
|
F_RECEIVER_DEACTIVATED_PADDING_ENABLE, /** < deactivated receiver padding enable */
|
||||||
|
F_RECEIVER_SET_READOUT_FLAGS, /**< set/get receiver readout flags */
|
||||||
NUM_REC_FUNCTIONS
|
NUM_REC_FUNCTIONS
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -235,6 +236,7 @@ static const char* getFunctionNameFromEnum(enum detFuncs func) {
|
|||||||
case F_RECEIVER_DISCARD_POLICY: return "F_RECEIVER_DISCARD_POLICY";
|
case F_RECEIVER_DISCARD_POLICY: return "F_RECEIVER_DISCARD_POLICY";
|
||||||
case F_RECEIVER_PADDING_ENABLE: return "F_RECEIVER_PADDING_ENABLE";
|
case F_RECEIVER_PADDING_ENABLE: return "F_RECEIVER_PADDING_ENABLE";
|
||||||
case F_RECEIVER_DEACTIVATED_PADDING_ENABLE: return "F_RECEIVER_DEACTIVATED_PADDING_ENABLE";
|
case F_RECEIVER_DEACTIVATED_PADDING_ENABLE: return "F_RECEIVER_DEACTIVATED_PADDING_ENABLE";
|
||||||
|
case F_RECEIVER_SET_READOUT_FLAGS: return "F_RECEIVER_SET_READOUT_FLAGS";
|
||||||
case NUM_REC_FUNCTIONS: return "NUM_REC_FUNCTIONS";
|
case NUM_REC_FUNCTIONS: return "NUM_REC_FUNCTIONS";
|
||||||
default: return "Unknown Function";
|
default: return "Unknown Function";
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user