mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-29 09:30:02 +02:00
done
This commit is contained in:
parent
1da4b07e73
commit
1263e80d21
@ -61,6 +61,7 @@ using namespace std;
|
|||||||
#define DETECTOR_NETWORK_PARAMETER 0x0000000000400000ULL
|
#define DETECTOR_NETWORK_PARAMETER 0x0000000000400000ULL
|
||||||
#define RATE_CORRECTION_NOT_32BIT 0x0000000000800000ULL
|
#define RATE_CORRECTION_NOT_32BIT 0x0000000000800000ULL
|
||||||
#define RATE_CORRECTION_NO_TAU_PROVIDED 0x0000000001000000ULL
|
#define RATE_CORRECTION_NO_TAU_PROVIDED 0x0000000001000000ULL
|
||||||
|
#define DATA_STREAMING_IN_RECEIVER 0x0000000002000000ULL
|
||||||
|
|
||||||
// 0x00000000FFFFFFFFULL
|
// 0x00000000FFFFFFFFULL
|
||||||
/** @short class returning all error messages for error mask */
|
/** @short class returning all error messages for error mask */
|
||||||
@ -198,7 +199,8 @@ public:
|
|||||||
if(slsErrorMask&RATE_CORRECTION_NO_TAU_PROVIDED)
|
if(slsErrorMask&RATE_CORRECTION_NO_TAU_PROVIDED)
|
||||||
retval.append("Rate correction Deactivated. No default tau provided in file\n");
|
retval.append("Rate correction Deactivated. No default tau provided in file\n");
|
||||||
|
|
||||||
|
if(slsErrorMask&DATA_STREAMING_IN_RECEIVER)
|
||||||
|
retval.append("Could not set/reset Data Streaming in Receiver\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -3352,6 +3352,7 @@ char* multiSlsDetector::setNetworkParameter(networkParameter p, string s){
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return getNetworkParameter(p);
|
return getNetworkParameter(p);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -5421,7 +5422,7 @@ int multiSlsDetector::calibratePedestal(int frames){
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int multiSlsDetector::setReadReceiverFrequency(int getFromReceiver,int i){
|
int multiSlsDetector::setReadReceiverFrequency(int getFromReceiver, int freq){
|
||||||
int ret=-100, ret1;
|
int ret=-100, ret1;
|
||||||
|
|
||||||
if(!getFromReceiver)
|
if(!getFromReceiver)
|
||||||
@ -5429,7 +5430,7 @@ int multiSlsDetector::setReadReceiverFrequency(int getFromReceiver,int i){
|
|||||||
|
|
||||||
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
|
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
|
||||||
if (detectors[idet]) {
|
if (detectors[idet]) {
|
||||||
ret1=detectors[idet]->setReadReceiverFrequency(getFromReceiver,i);
|
ret1=detectors[idet]->setReadReceiverFrequency(getFromReceiver,freq);
|
||||||
if(detectors[idet]->getErrorMask())
|
if(detectors[idet]->getErrorMask())
|
||||||
setErrorMask(getErrorMask()|(1<<idet));
|
setErrorMask(getErrorMask()|(1<<idet));
|
||||||
if (ret==-100)
|
if (ret==-100)
|
||||||
@ -5446,6 +5447,24 @@ int multiSlsDetector::setReadReceiverFrequency(int getFromReceiver,int i){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int multiSlsDetector::setDataStreamingFromReceiver(int enable){
|
||||||
|
int ret=-100, ret1;
|
||||||
|
|
||||||
|
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
|
||||||
|
if (detectors[idet]) {
|
||||||
|
ret1=detectors[idet]->setDataStreamingFromReceiver(enable);
|
||||||
|
if(detectors[idet]->getErrorMask())
|
||||||
|
setErrorMask(getErrorMask()|(1<<idet));
|
||||||
|
if (ret==-100)
|
||||||
|
ret=ret1;
|
||||||
|
else if (ret!=ret1)
|
||||||
|
ret=-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int multiSlsDetector::enableReceiverCompression(int i){
|
int multiSlsDetector::enableReceiverCompression(int i){
|
||||||
int ret=-100,ret1;
|
int ret=-100,ret1;
|
||||||
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++)
|
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++)
|
||||||
|
@ -1242,14 +1242,20 @@ class multiSlsDetector : public slsDetectorUtils {
|
|||||||
int calibratePedestal(int frames = 0);
|
int calibratePedestal(int frames = 0);
|
||||||
|
|
||||||
/** Sets the read receiver frequency
|
/** Sets the read receiver frequency
|
||||||
if Receiver read upon gui request, readRxrFrequency=0,
|
if data required from receiver randomly readRxrFrequency=0,
|
||||||
else every nth frame to be sent to gui
|
else every nth frame to be sent to gui
|
||||||
@param getFromReceiver is 1 if it should ask the receiver,
|
@param getFromReceiver is 1 if it should ask the receiver,
|
||||||
0 if it can get it from multislsdetecter
|
0 if it can get it from multi structure
|
||||||
@param i is the receiver read frequency
|
@param freq is the receiver read frequency
|
||||||
/returns read receiver frequency
|
/returns read receiver frequency
|
||||||
*/
|
*/
|
||||||
int setReadReceiverFrequency(int getFromReceiver, int i=-1);
|
int setReadReceiverFrequency(int getFromReceiver, int freq=-1);
|
||||||
|
|
||||||
|
/** Enable or disable streaming data from receiver to client
|
||||||
|
* @param enable 0 to disable 1 to enable -1 to only get the value
|
||||||
|
* @returns data streaming
|
||||||
|
*/
|
||||||
|
int setDataStreamingFromReceiver(int enable=-1);
|
||||||
|
|
||||||
/** updates the multidetector offsets */
|
/** updates the multidetector offsets */
|
||||||
void updateOffsets();
|
void updateOffsets();
|
||||||
|
@ -7431,18 +7431,18 @@ int64_t slsDetector::clearAllErrorMask(){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int slsDetector::setReadReceiverFrequency(int getFromReceiver,int i){
|
int slsDetector::setReadReceiverFrequency(int getFromReceiver, int freq){
|
||||||
int fnum=F_READ_RECEIVER_FREQUENCY;
|
int fnum=F_READ_RECEIVER_FREQUENCY;
|
||||||
int ret = FAIL;
|
int ret = FAIL;
|
||||||
int retval=-1;
|
int retval=-1;
|
||||||
int arg = i;
|
int arg = freq;
|
||||||
|
|
||||||
if(!getFromReceiver)
|
if(!getFromReceiver)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){
|
if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
std::cout << "Sending read frequency to receiver " << arg << std::endl;
|
std::cout << "Sending read frequency to receiver " << arg << std::endl;
|
||||||
#endif
|
#endif
|
||||||
if (connectData() == OK)
|
if (connectData() == OK)
|
||||||
ret=thisReceiver->sendInt(fnum,retval,arg);
|
ret=thisReceiver->sendInt(fnum,retval,arg);
|
||||||
@ -7453,14 +7453,44 @@ int slsDetector::setReadReceiverFrequency(int getFromReceiver,int i){
|
|||||||
updateReceiver();
|
updateReceiver();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((i > 0) && (retval != i)){
|
if ((freq > 0) && (retval != freq)){
|
||||||
cout << "could not set receiver read frequency:" << retval << endl;
|
cout << "could not set receiver read frequency to " << freq <<" Returned:" << retval << endl;
|
||||||
setErrorMask((getErrorMask())|(RECEIVER_READ_FREQUENCY));
|
setErrorMask((getErrorMask())|(RECEIVER_READ_FREQUENCY));
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int slsDetector::setDataStreamingFromReceiver(int enable){
|
||||||
|
int fnum=F_STREAM_DATA_FROM_RECEIVER;
|
||||||
|
int ret = FAIL;
|
||||||
|
int retval=-1;
|
||||||
|
int arg = enable;
|
||||||
|
|
||||||
|
|
||||||
|
if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){
|
||||||
|
#ifdef VERBOSE
|
||||||
|
std::cout << "***************Sending Data Streaming in Receiver " << arg << std::endl;
|
||||||
|
#endif
|
||||||
|
if (connectData() == OK)
|
||||||
|
ret=thisReceiver->sendInt(fnum,retval,arg);
|
||||||
|
disconnectData();
|
||||||
|
if(ret==FAIL)
|
||||||
|
retval = -1;
|
||||||
|
if(ret==FORCE_UPDATE)
|
||||||
|
updateReceiver();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((enable > 0) && (retval != enable)){
|
||||||
|
cout << "could not set data streaming in receiver to " << enable <<" Returned:" << retval << endl;
|
||||||
|
setErrorMask((getErrorMask())|(RECEIVER_READ_FREQUENCY));
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int slsDetector::enableReceiverCompression(int i){
|
int slsDetector::enableReceiverCompression(int i){
|
||||||
int fnum=F_ENABLE_RECEIVER_COMPRESSION;
|
int fnum=F_ENABLE_RECEIVER_COMPRESSION;
|
||||||
int ret = FAIL;
|
int ret = FAIL;
|
||||||
|
@ -1671,14 +1671,20 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
|
|||||||
char* setDetectorNetworkParameter(networkParameter index, int delay);
|
char* setDetectorNetworkParameter(networkParameter index, int delay);
|
||||||
|
|
||||||
/** Sets the read receiver frequency
|
/** Sets the read receiver frequency
|
||||||
if Receiver read upon gui request, readRxrFrequency=0,
|
if data required from receiver randomly readRxrFrequency=0,
|
||||||
else every nth frame to be sent to gui
|
else every nth frame to be sent to gui
|
||||||
@param getFromReceiver is 1 if it should ask the receiver,
|
@param getFromReceiver is 1 if it should ask the receiver,
|
||||||
0 if it can get it from multislsdetecter
|
0 if it can get it from multi structure
|
||||||
@param i is the receiver read frequency
|
@param freq is the receiver read frequency
|
||||||
/returns read receiver frequency
|
/returns read receiver frequency
|
||||||
*/
|
*/
|
||||||
int setReadReceiverFrequency(int getFromReceiver, int i=-1);
|
int setReadReceiverFrequency(int getFromReceiver, int freq=-1);
|
||||||
|
|
||||||
|
/** Enable or disable streaming data from receiver to client
|
||||||
|
* @param enable 0 to disable 1 to enable -1 to only get the value
|
||||||
|
* @returns data streaming
|
||||||
|
*/
|
||||||
|
int setDataStreamingFromReceiver(int enable=-1);
|
||||||
|
|
||||||
/** enable/disable or get data compression in receiver
|
/** enable/disable or get data compression in receiver
|
||||||
* @param i is -1 to get, 0 to disable and 1 to enable
|
* @param i is -1 to get, 0 to disable and 1 to enable
|
||||||
|
@ -512,14 +512,14 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
|
|||||||
|
|
||||||
|
|
||||||
/** Sets the read receiver frequency
|
/** Sets the read receiver frequency
|
||||||
if Receiver read upon gui request, readRxrFrequency=0,
|
if data required from receiver randomly readRxrFrequency=0,
|
||||||
else every nth frame to be sent to gui
|
else every nth frame to be sent to gui
|
||||||
@param getFromReceiver is 1 if it should ask the receiver,
|
@param getFromReceiver is 1 if it should ask the receiver,
|
||||||
0 if it can get it from multislsdetecter
|
0 if it can get it from multi structure
|
||||||
@param i is the receiver read frequency
|
@param freq is the receiver read frequency
|
||||||
/returns read receiver frequency
|
/returns read receiver frequency
|
||||||
*/
|
*/
|
||||||
virtual int setReadReceiverFrequency(int getFromReceiver, int i=-1)=0;
|
virtual int setReadReceiverFrequency(int getFromReceiver, int freq=-1)=0;
|
||||||
|
|
||||||
/** Sets the receiver to start any readout remaining in the fifo and
|
/** Sets the receiver to start any readout remaining in the fifo and
|
||||||
* change status to transmitting.
|
* change status to transmitting.
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <sys/ipc.h>
|
#include <sys/ipc.h>
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
|
#include <time.h> //clock()
|
||||||
using namespace std;
|
using namespace std;
|
||||||
slsDetectorUtils::slsDetectorUtils() {
|
slsDetectorUtils::slsDetectorUtils() {
|
||||||
|
|
||||||
@ -42,6 +42,8 @@ slsDetectorUtils::slsDetectorUtils() {
|
|||||||
|
|
||||||
|
|
||||||
int slsDetectorUtils::acquire(int delflag){
|
int slsDetectorUtils::acquire(int delflag){
|
||||||
|
struct timespec begin,end;
|
||||||
|
clock_gettime(CLOCK_REALTIME, &begin);
|
||||||
|
|
||||||
//ensure acquire isnt started multiple times by same client
|
//ensure acquire isnt started multiple times by same client
|
||||||
if(getAcquiringFlag() == false)
|
if(getAcquiringFlag() == false)
|
||||||
@ -58,11 +60,25 @@ int slsDetectorUtils::acquire(int delflag){
|
|||||||
}else{
|
}else{
|
||||||
//put receiver read frequency to random if no gui
|
//put receiver read frequency to random if no gui
|
||||||
int ret = setReadReceiverFrequency(0);
|
int ret = setReadReceiverFrequency(0);
|
||||||
if(ret>0 && (acquisition_finished == NULL)){
|
if(ret>0 && (dataReady == NULL)){
|
||||||
std::cout << "Error: receiver read frequency is set to " << ret << " but should be > 0 only when using gui." << std::endl;
|
|
||||||
ret = setReadReceiverFrequency(1,0);
|
ret = setReadReceiverFrequency(1,0);
|
||||||
std::cout << "Current receiver read frequency: " << ret << std::endl;
|
std::cout << "No Data call back and hence receiver read frequency reset to " << ret <<" (Random)" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//start data streaming threads in receiver if enabled
|
||||||
|
ret = setDataStreamingFromReceiver(-1);
|
||||||
|
if(dataReady == NULL){
|
||||||
|
if(ret){
|
||||||
|
cout << "Disabling Data Streaming from Receiver" << endl;
|
||||||
|
setDataStreamingFromReceiver(0); //no call back but streaming enabled, then dont stream.
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(*threadedProcessing && (!ret)){
|
||||||
|
cout << "Enabling Data Streaming from Receiver" << endl;
|
||||||
|
setDataStreamingFromReceiver(1); //call back exists, threaded but streaming disabled, then stream.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int nc=setTimer(CYCLES_NUMBER,-1);
|
int nc=setTimer(CYCLES_NUMBER,-1);
|
||||||
@ -475,6 +491,7 @@ int slsDetectorUtils::acquire(int delflag){
|
|||||||
#endif
|
#endif
|
||||||
if(dataReady)
|
if(dataReady)
|
||||||
sem_destroy(&dataThreadStartedSemaphore);
|
sem_destroy(&dataThreadStartedSemaphore);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -502,6 +519,10 @@ int slsDetectorUtils::acquire(int delflag){
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
setAcquiringFlag(false);
|
setAcquiringFlag(false);
|
||||||
|
|
||||||
|
clock_gettime(CLOCK_REALTIME, &end);
|
||||||
|
cprintf(BLUE,"Elapsed time:%f seconds\n",( end.tv_sec - begin.tv_sec ) + ( end.tv_nsec - begin.tv_nsec ) / 1000000000.0);
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -645,7 +645,6 @@ virtual int resetFramesCaught()=0;
|
|||||||
*/
|
*/
|
||||||
virtual void readFrameFromReceiver()=0;
|
virtual void readFrameFromReceiver()=0;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Turns off the receiver server!
|
Turns off the receiver server!
|
||||||
*/
|
*/
|
||||||
@ -688,14 +687,20 @@ virtual int setROI(int n=-1,ROI roiLimits[]=NULL)=0;
|
|||||||
virtual ROI* getROI(int &n)=0;
|
virtual ROI* getROI(int &n)=0;
|
||||||
|
|
||||||
/** Sets the read receiver frequency
|
/** Sets the read receiver frequency
|
||||||
if Receiver read upon gui request, readRxrFrequency=0,
|
if data required from receiver randomly readRxrFrequency=0,
|
||||||
else every nth frame to be sent to gui
|
else every nth frame to be sent to gui
|
||||||
@param getFromReceiver is 1 if it should ask the receiver,
|
@param getFromReceiver is 1 if it should ask the receiver,
|
||||||
0 if it can get it from multislsdetecter
|
0 if it can get it from multi structure
|
||||||
@param i is the receiver read frequency
|
@param freq is the receiver read frequency
|
||||||
/returns read receiver frequency
|
/returns read receiver frequency
|
||||||
*/
|
*/
|
||||||
virtual int setReadReceiverFrequency(int getFromReceiver, int i=-1)=0;
|
virtual int setReadReceiverFrequency(int getFromReceiver, int freq=-1)=0;
|
||||||
|
|
||||||
|
/** Enable or disable streaming of data from receiver to client
|
||||||
|
* @param enable 0 to disable 1 to enable -1 to only get the value
|
||||||
|
* @returns data streaming
|
||||||
|
*/
|
||||||
|
virtual int setDataStreamingFromReceiver(int enable=-1)=0;
|
||||||
|
|
||||||
|
|
||||||
/** enable/disable or get data compression in receiver
|
/** enable/disable or get data compression in receiver
|
||||||
|
@ -338,7 +338,6 @@ s
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
// double *fdata;
|
// double *fdata;
|
||||||
|
|
||||||
// int (*dataReady)(detectorData*,int, int,void*);
|
// int (*dataReady)(detectorData*,int, int,void*);
|
||||||
// void *pCallbackArg;
|
// void *pCallbackArg;
|
||||||
|
|
||||||
|
@ -129,6 +129,24 @@ int receiverInterface::sendIntArray(int fnum, int64_t &retval, int64_t arg[2]){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int receiverInterface::sendIntArray(int fnum, int &retval, int arg[2]){
|
||||||
|
int args[2];
|
||||||
|
int ret = slsDetectorDefs::FAIL;
|
||||||
|
char mess[100] = "";
|
||||||
|
dataSocket->SendDataOnly(&fnum,sizeof(fnum));
|
||||||
|
dataSocket->SendDataOnly(arg,sizeof(args));
|
||||||
|
dataSocket->ReceiveDataOnly(&ret,sizeof(ret));
|
||||||
|
if (ret==slsDetectorDefs::FAIL){
|
||||||
|
dataSocket->ReceiveDataOnly(mess,sizeof(mess));
|
||||||
|
std::cout<< "Receiver returned error: " << mess << std::endl;
|
||||||
|
}
|
||||||
|
dataSocket->ReceiveDataOnly(&retval,sizeof(retval));
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int receiverInterface::getInt(int fnum, int64_t &retval){
|
int receiverInterface::getInt(int fnum, int64_t &retval){
|
||||||
int ret = slsDetectorDefs::FAIL;
|
int ret = slsDetectorDefs::FAIL;
|
||||||
|
|
||||||
|
@ -95,6 +95,16 @@ public:
|
|||||||
*/
|
*/
|
||||||
int sendIntArray(int fnum, int64_t &retval, int64_t arg[2]);
|
int sendIntArray(int fnum, int64_t &retval, int64_t arg[2]);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send an integer to receiver
|
||||||
|
* @param fnum function enum to determine what parameter
|
||||||
|
* @param retval return value
|
||||||
|
* @param arg values to send
|
||||||
|
* \returns success of operation
|
||||||
|
*/
|
||||||
|
int sendIntArray(int fnum, int &retval, int arg[2]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get an integer value from receiver
|
* Get an integer value from receiver
|
||||||
* @param fnum function enum to determine what parameter
|
* @param fnum function enum to determine what parameter
|
||||||
|
Loading…
x
Reference in New Issue
Block a user