Merge branch 'developer' into gui

This commit is contained in:
2019-06-03 11:13:03 +02:00
201 changed files with 25684 additions and 2843 deletions

View File

@ -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

View File

@ -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};

View File

@ -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;
}
};

View File

@ -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

View File

@ -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

View File

@ -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