mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-12 04:47:14 +02:00
Merge branch 'developer' into gui
This commit is contained in:
@ -25,7 +25,29 @@ class detectorData {
|
||||
npoints(np), npy(ny), cvalues(cval), databytes(dbytes),
|
||||
dynamicRange(dr), dgainvalues(NULL), fileIndex(file_ind) {
|
||||
strcpy(fileName,fname);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
int64_t getChannel(int i) {
|
||||
int off=dynamicRange/8;
|
||||
if (off==1) {
|
||||
char val=*(cvalues+i);
|
||||
return val;
|
||||
}
|
||||
if (off==2) {
|
||||
int16_t val=*((int16_t*)(cvalues+i*off));
|
||||
return val;
|
||||
}
|
||||
if (off==4) {
|
||||
int32_t val=*((int32_t*)(cvalues+i*off));
|
||||
return val;
|
||||
}
|
||||
if (off==8) {
|
||||
int64_t val=*((int64_t*)(cvalues+i*off));
|
||||
return val;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
@short The destructor
|
||||
|
@ -1,7 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "SharedMemory.h"
|
||||
#include "error_defs.h"
|
||||
#include "logger.h"
|
||||
#include "sls_detector_defs.h"
|
||||
|
||||
@ -630,6 +629,20 @@ class multiSlsDetector : public virtual slsDetectorDefs {
|
||||
* @returns OK or FAIL
|
||||
*/
|
||||
int configureMAC(int detPos = -1);
|
||||
|
||||
/**
|
||||
* Set starting frame number for the next acquisition
|
||||
* @param val starting frame number
|
||||
* @param detPos -1 for all detectors in list or specific detector position
|
||||
*/
|
||||
void setStartingFrameNumber(const uint64_t value, int detPos = -1);
|
||||
|
||||
/**
|
||||
* Get starting frame number for the next acquisition
|
||||
* @param detPos -1 for all detectors in list or specific detector position
|
||||
* @returns starting frame number
|
||||
*/
|
||||
uint64_t getStartingFrameNumber(int detPos = -1);
|
||||
|
||||
/**
|
||||
* Set/get timer value (not all implemented for all detectors)
|
||||
@ -1799,9 +1812,9 @@ class multiSlsDetector : public virtual slsDetectorDefs {
|
||||
/**
|
||||
* Gets the current frame index of receiver
|
||||
* @param detPos -1 for all detectors in list or specific detector position
|
||||
* @returns current frame index of receiver
|
||||
* @returns average of all current frame index of receiver
|
||||
*/
|
||||
int getReceiverCurrentFrameIndex(int detPos = -1);
|
||||
uint64_t getReceiverCurrentFrameIndex(int detPos = -1);
|
||||
|
||||
/**
|
||||
* Resets framescaught in receiver
|
||||
@ -2160,14 +2173,14 @@ class multiSlsDetector : public virtual slsDetectorDefs {
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* add gap pixels to the image (only for Eiger in 4 bit mode)
|
||||
* @param image pointer to image without gap pixels
|
||||
* @param gpImage poiner to image with gap pixels, if NULL, allocated
|
||||
* inside function
|
||||
* @returns number of data bytes of image with gap pixels
|
||||
*/
|
||||
int processImageWithGapPixels(char *image, char *&gpImage);
|
||||
/**
|
||||
* add gap pixels to the image (only for Eiger in 4 bit mode)
|
||||
* @param image pointer to image without gap pixels
|
||||
* @param gpImage poiner to image with gap pixels, if NULL, allocated
|
||||
* inside function
|
||||
* @returns number of data bytes of image with gap pixels
|
||||
*/
|
||||
int processImageWithGapPixels(char *image, char *&gpImage);
|
||||
|
||||
/**
|
||||
* Set total progress (total number of frames/images in an acquisition)
|
||||
@ -2223,6 +2236,14 @@ class multiSlsDetector : public virtual slsDetectorDefs {
|
||||
*/
|
||||
std::vector<char> readPofFile(const std::string &fname);
|
||||
|
||||
/**
|
||||
* Convert a double holding time in seconds to an int64_t with nano seconds
|
||||
* Used for conversion when sending time to detector
|
||||
* @param t time in seconds
|
||||
* @returns time in nano seconds
|
||||
*/
|
||||
int64_t secondsToNanoSeconds(double t);
|
||||
|
||||
|
||||
/** Multi detector Id */
|
||||
const int multiId{0};
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <string>
|
||||
|
||||
#include "CmdLineParser.h"
|
||||
#include "CmdProxy.h"
|
||||
#include "container_utils.h"
|
||||
#include "string_utils.h"
|
||||
#include "multiSlsDetector.h"
|
||||
@ -21,85 +22,114 @@ inline int dummyCallback(detectorData *d, int p, void *) {
|
||||
|
||||
class multiSlsDetectorClient {
|
||||
public:
|
||||
multiSlsDetectorClient(int argc, char *argv[], int action, multiSlsDetector *myDetector = nullptr):
|
||||
action_(action),
|
||||
detPtr(myDetector){
|
||||
multiSlsDetectorClient(int argc, char *argv[], int action,
|
||||
multiSlsDetector *myDetector = nullptr,
|
||||
std::ostream &output = std::cout)
|
||||
: action_(action), detPtr(myDetector), os(output) {
|
||||
parser.Parse(argc, argv);
|
||||
runCommand();
|
||||
|
||||
}
|
||||
multiSlsDetectorClient(const std::string& args, int action, multiSlsDetector *myDetector = nullptr):
|
||||
action_(action),
|
||||
detPtr(myDetector){
|
||||
multiSlsDetectorClient(const std::string &args, int action,
|
||||
multiSlsDetector *myDetector = nullptr,
|
||||
std::ostream &output = std::cout)
|
||||
: action_(action), detPtr(myDetector), os(output) {
|
||||
parser.Parse(args);
|
||||
runCommand();
|
||||
}
|
||||
private:
|
||||
int action_;
|
||||
CmdLineParser parser;
|
||||
multiSlsDetector* detPtr = nullptr;
|
||||
|
||||
void runCommand(){
|
||||
private:
|
||||
int action_;
|
||||
CmdLineParser parser;
|
||||
multiSlsDetector *detPtr = nullptr;
|
||||
std::ostream &os;
|
||||
|
||||
void runCommand() {
|
||||
bool verify = true;
|
||||
bool update = true;
|
||||
if (action_ == slsDetectorDefs::PUT_ACTION && parser.n_arguments() == 0) {
|
||||
std::cout << "Wrong usage - should be: " << parser.executable() << "[id-][pos:]channel arg" << std::endl;
|
||||
std::cout << std::endl;
|
||||
if (action_ == slsDetectorDefs::PUT_ACTION &&
|
||||
parser.n_arguments() == 0) {
|
||||
os << "Wrong usage - should be: " << parser.executable()
|
||||
<< "[id-][pos:]channel arg" << std::endl;
|
||||
os << std::endl;
|
||||
return;
|
||||
};
|
||||
if (action_ == slsDetectorDefs::GET_ACTION && parser.command().empty()) {
|
||||
std::cout << "Wrong usage - should be: " << parser.executable() << "[id-][pos:]channel arg" << std::endl;
|
||||
std::cout << std::endl;
|
||||
if (action_ == slsDetectorDefs::GET_ACTION &&
|
||||
parser.command().empty()) {
|
||||
os << "Wrong usage - should be: " << parser.executable()
|
||||
<< "[id-][pos:]channel arg" << std::endl;
|
||||
os << std::endl;
|
||||
return;
|
||||
};
|
||||
|
||||
if (action_ == slsDetectorDefs::READOUT_ACTION && parser.detector_id() != -1) {
|
||||
std::cout << "detector_id: " << parser.detector_id() << " ,readout of individual detectors is not allowed!" << std::endl;
|
||||
if (action_ == slsDetectorDefs::READOUT_ACTION &&
|
||||
parser.detector_id() != -1) {
|
||||
os << "detector_id: " << parser.detector_id()
|
||||
<< " ,readout of individual detectors is not allowed!"
|
||||
<< std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
// special commands
|
||||
if (parser.command() == "free") {
|
||||
multiSlsDetector::freeSharedMemory(parser.multi_id(), parser.detector_id());
|
||||
multiSlsDetector::freeSharedMemory(parser.multi_id(),
|
||||
parser.detector_id());
|
||||
return;
|
||||
} // get user details without verify sharedMultiSlsDetector version
|
||||
else if ((parser.command() == "user") && (action_ == slsDetectorDefs::GET_ACTION)) {
|
||||
else if ((parser.command() == "user") &&
|
||||
(action_ == slsDetectorDefs::GET_ACTION)) {
|
||||
verify = false;
|
||||
update = false;
|
||||
}
|
||||
|
||||
//std::cout<<"id:"<<id<<" pos:"<<pos<<std::endl;
|
||||
// create multiSlsDetector class if required
|
||||
std::unique_ptr<multiSlsDetector> localDet;
|
||||
if (detPtr == nullptr) {
|
||||
try {
|
||||
localDet = sls::make_unique<multiSlsDetector>(parser.multi_id(), verify, update);
|
||||
localDet = sls::make_unique<multiSlsDetector>(parser.multi_id(),
|
||||
verify, update);
|
||||
detPtr = localDet.get();
|
||||
} catch (const RuntimeError &e) {
|
||||
/*std::cout << e.GetMessage() << std::endl;*/
|
||||
/*os << e.GetMessage() << std::endl;*/
|
||||
return;
|
||||
} catch (...) {
|
||||
std::cout << " caught exception\n";
|
||||
os << " caught exception\n";
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (parser.detector_id() >= detPtr->getNumberOfDetectors()) {
|
||||
std::cout << "position is out of bounds.\n";
|
||||
os << "position is out of bounds.\n";
|
||||
return;
|
||||
}
|
||||
|
||||
// call multi detector command line
|
||||
slsDetectorCommand myCmd(detPtr);
|
||||
std::string answer = myCmd.executeLine(parser.n_arguments()+1, parser.argv().data(), action_, parser.detector_id());
|
||||
// Call CmdProxy which execute the command if it exists, on success
|
||||
// returns an empty string If the command is not in CmdProxy but
|
||||
// deprecated the new command is returned
|
||||
if (action_ != slsDetectorDefs::READOUT_ACTION) {
|
||||
sls::CmdProxy<multiSlsDetector> proxy(detPtr);
|
||||
auto cmd = proxy.Call(parser.command(), parser.arguments(),
|
||||
parser.detector_id());
|
||||
if (cmd.empty()) {
|
||||
return;
|
||||
} else {
|
||||
parser.setCommand(cmd);
|
||||
}
|
||||
}
|
||||
|
||||
if (parser.multi_id()!=0)
|
||||
std::cout << parser.multi_id() << '-';
|
||||
// call multi detector command line
|
||||
slsDetectorCommand myCmd(detPtr);
|
||||
std::string answer =
|
||||
myCmd.executeLine(parser.n_arguments() + 1, parser.argv().data(),
|
||||
action_, parser.detector_id());
|
||||
|
||||
if (parser.multi_id() != 0)
|
||||
os << parser.multi_id() << '-';
|
||||
if (parser.detector_id() != -1)
|
||||
std::cout << parser.detector_id() << ':';
|
||||
os << parser.detector_id() << ':';
|
||||
|
||||
if (action_ != slsDetectorDefs::READOUT_ACTION) {
|
||||
std::cout << parser.command() << " ";
|
||||
os << parser.command() << " ";
|
||||
}
|
||||
std::cout << answer << std::endl;
|
||||
os << answer << std::endl;
|
||||
}
|
||||
};
|
||||
|
@ -2,12 +2,11 @@
|
||||
|
||||
#include "ClientSocket.h"
|
||||
#include "SharedMemory.h"
|
||||
#include "error_defs.h"
|
||||
#include "logger.h"
|
||||
#include "sls_detector_defs.h"
|
||||
#include "network_utils.h"
|
||||
#include "FixedCapacityContainer.h"
|
||||
class ClientInterface;
|
||||
|
||||
|
||||
#include <cmath>
|
||||
#include <vector>
|
||||
@ -16,10 +15,9 @@ class ClientInterface;
|
||||
|
||||
class multiSlsDetector;
|
||||
class ServerInterface;
|
||||
class MySocketTCP;
|
||||
|
||||
#define SLS_SHMVERSION 0x190503
|
||||
#define MAX_RX_DBIT 64
|
||||
#define SLS_SHMVERSION 0x190515
|
||||
|
||||
|
||||
|
||||
/**
|
||||
@ -243,11 +241,7 @@ struct sharedSlsDetector {
|
||||
/** overwrite enable */
|
||||
bool rxFileOverWrite;
|
||||
|
||||
/** receiver dbit size */
|
||||
int rxDbitListSize;
|
||||
|
||||
/** receiver dbit list */
|
||||
int rxDbitList[MAX_RX_DBIT];
|
||||
sls::FixedCapacityContainer<int, MAX_RX_DBIT> rxDbitList;
|
||||
|
||||
/** reciever dbit offset */
|
||||
int rxDbitOffset;
|
||||
@ -736,6 +730,18 @@ class slsDetector : public virtual slsDetectorDefs{
|
||||
*/
|
||||
int configureMAC();
|
||||
|
||||
/**
|
||||
* Set starting frame number for the next acquisition
|
||||
* @param val starting frame number
|
||||
*/
|
||||
void setStartingFrameNumber(const uint64_t value);
|
||||
|
||||
/**
|
||||
* Get starting frame number for the next acquisition
|
||||
* @returns starting frame number
|
||||
*/
|
||||
uint64_t getStartingFrameNumber();
|
||||
|
||||
/**
|
||||
* Set/get timer value (not all implemented for all detectors)
|
||||
* @param index timer index
|
||||
@ -1701,7 +1707,7 @@ class slsDetector : public virtual slsDetectorDefs{
|
||||
* Gets the current frame index of receiver
|
||||
* @returns current frame index of receiver
|
||||
*/
|
||||
int getReceiverCurrentFrameIndex();
|
||||
uint64_t getReceiverCurrentFrameIndex();
|
||||
|
||||
/**
|
||||
* Resets framescaught in receiver
|
||||
|
@ -29,14 +29,14 @@ class slsDetectorCommand : public virtual slsDetectorDefs {
|
||||
* @param action can be PUT_ACTION or GET_ACTION(from text client even READOUT_ACTION for acquisition)
|
||||
* @param detPos -1 for all detectors in multi detector list or position of a specific detector in list
|
||||
*/
|
||||
std::string executeLine(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string executeLine(int narg, const char * const args[], int action, int detPos = -1);
|
||||
|
||||
/* /\** */
|
||||
/* returns the help for the executeLine command */
|
||||
/* \param os output stream to return the help to */
|
||||
/* \param action can be PUT_ACTION or GET_ACTION (from text client even READOUT_ACTION for acquisition) */
|
||||
/* *\/ */
|
||||
std::string helpLine(int narg, char *args[], int action=HELP_ACTION, int detPos = -1);
|
||||
std::string helpLine(int narg, const char * const args[], int action=HELP_ACTION, int detPos = -1);
|
||||
static std::string helpAcquire(int action);
|
||||
static std::string helpData(int action);
|
||||
static std::string helpStatus(int action);
|
||||
@ -96,56 +96,56 @@ class slsDetectorCommand : public virtual slsDetectorDefs {
|
||||
|
||||
multiSlsDetector *myDet;
|
||||
|
||||
std::string cmdUnderDevelopment(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdUnknown(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdAcquire(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdData(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdStatus(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdDataStream(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdFree(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdHostname(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdUser(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdHelp(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdExitServer(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdSettingsDir(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdTrimEn(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdOutDir(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdFileName(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdFileIndex(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdRateCorr(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdNetworkParameter(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdPort(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdLock(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdLastClient(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdOnline(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdConfigureMac(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdDetectorSize(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdSettings(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdSN(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdDigiTest(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdRegister(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdDAC(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdTiming(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdTimer(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdTimeLeft(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdSpeed(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdAdvanced(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdConfiguration(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdImage(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdCounter(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdADC(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdTempControl(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdEnablefwrite(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdOverwrite(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdReceiver(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdPattern(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdPulse(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdProcessor(int narg, char *args[], int action, int detPos = -1);
|
||||
std::string cmdUnderDevelopment(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdUnknown(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdAcquire(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdData(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdStatus(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdDataStream(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdFree(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdHostname(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdUser(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdHelp(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdExitServer(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdSettingsDir(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdTrimEn(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdOutDir(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdFileName(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdFileIndex(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdRateCorr(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdNetworkParameter(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdPort(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdLock(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdLastClient(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdOnline(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdConfigureMac(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdDetectorSize(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdSettings(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdSN(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdDigiTest(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdRegister(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdDAC(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdTiming(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdTimer(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdTimeLeft(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdSpeed(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdAdvanced(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdConfiguration(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdImage(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdCounter(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdADC(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdTempControl(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdEnablefwrite(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdOverwrite(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdReceiver(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdPattern(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdPulse(int narg, const char * const args[], int action, int detPos = -1);
|
||||
std::string cmdProcessor(int narg, const char * const args[], int action, int detPos = -1);
|
||||
|
||||
int numberOfCommands;
|
||||
std::string cmd;
|
||||
|
||||
typedef std::string (slsDetectorCommand::*MemFuncGetter)(int narg, char *args[], int action, int detPos);
|
||||
typedef std::string (slsDetectorCommand::*MemFuncGetter)(int narg, const char * const args[], int action, int detPos);
|
||||
|
||||
|
||||
struct FuncTable
|
||||
|
@ -521,7 +521,7 @@ public:
|
||||
int setHighVoltage(int i = -1, int detPos = -1);
|
||||
|
||||
/**
|
||||
* Set 10GbE Flow Control (Eiger)
|
||||
* Set 10GbE Flow Control (Eiger and Jungfrau)
|
||||
* @param enable 1 to set, 0 to unset, -1 gets
|
||||
* @param detPos -1 for all detectors in list or specific detector position
|
||||
* @returns 10GbE flow Control
|
||||
|
Reference in New Issue
Block a user