mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-23 15:00:02 +02:00
410 lines
12 KiB
C++
410 lines
12 KiB
C++
#include "slsDetectorUsers.h"
|
|
#include "detectorData.h"
|
|
#include "multiSlsDetector.h"
|
|
#include "multiSlsDetectorCommand.h"
|
|
|
|
|
|
using namespace std;
|
|
|
|
slsDetectorUsers::slsDetectorUsers(int& ret, int id) : myDetector(0), myCmd(0){
|
|
try {
|
|
myDetector=new multiSlsDetector(id);
|
|
} catch(...) {
|
|
ret = 1;
|
|
return;
|
|
}
|
|
myCmd=new multiSlsDetectorCommand(myDetector);
|
|
ret = 0;
|
|
|
|
}
|
|
|
|
slsDetectorUsers::~slsDetectorUsers() {
|
|
if (myDetector)
|
|
delete myDetector;
|
|
if (myCmd)
|
|
delete myCmd;
|
|
}
|
|
|
|
int slsDetectorUsers::getNumberOfDetectors() {
|
|
return myDetector->getNumberOfDetectors();
|
|
}
|
|
|
|
int slsDetectorUsers::getMaximumDetectorSize(int &nx, int &ny){
|
|
nx=myDetector->getMaxNumberOfChannelsPerDetector(slsDetectorDefs::X);
|
|
ny=myDetector->getMaxNumberOfChannelsPerDetector(slsDetectorDefs::Y);
|
|
return nx*ny;
|
|
}
|
|
|
|
int slsDetectorUsers::getDetectorSize(int &x, int &y, int &nx, int &ny, int detPos){
|
|
if (detPos < 0) {
|
|
x = 0;
|
|
y = 0;
|
|
} else {
|
|
x = myDetector->getDetectorOffset(slsDetectorDefs::X, detPos);
|
|
y = myDetector->getDetectorOffset(slsDetectorDefs::Y, detPos);
|
|
}
|
|
nx=myDetector->getTotalNumberOfChannels(slsDetectorDefs::X, detPos);
|
|
ny=myDetector->getTotalNumberOfChannels(slsDetectorDefs::Y, detPos);
|
|
return nx*ny;
|
|
}
|
|
|
|
string slsDetectorUsers::getDetectorType(int detPos){
|
|
return myDetector->sgetDetectorsType(detPos);
|
|
}
|
|
int slsDetectorUsers::setOnline(int const online, int detPos){
|
|
return myDetector->setOnline(online, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setReceiverOnline(int const online, int detPos){
|
|
return myDetector->setReceiverOnline(online, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::readConfigurationFile(string const fname){
|
|
return myDetector->readConfigurationFile(fname);
|
|
}
|
|
|
|
int slsDetectorUsers::writeConfigurationFile(string const fname){
|
|
return myDetector->writeConfigurationFile(fname);
|
|
}
|
|
|
|
int slsDetectorUsers::retrieveDetectorSetup(string const fname){
|
|
return myDetector->retrieveDetectorSetup(fname);
|
|
}
|
|
|
|
int slsDetectorUsers::dumpDetectorSetup(string const fname){
|
|
return myDetector->dumpDetectorSetup(fname);
|
|
}
|
|
|
|
int64_t slsDetectorUsers::getDetectorFirmwareVersion(int detPos){
|
|
return myDetector->getId(slsDetectorDefs::DETECTOR_FIRMWARE_VERSION);
|
|
}
|
|
|
|
int64_t slsDetectorUsers::getDetectorSerialNumber(int detPos){
|
|
return myDetector->getId(slsDetectorDefs::DETECTOR_SERIAL_NUMBER, detPos);
|
|
}
|
|
|
|
int64_t slsDetectorUsers::getDetectorSoftwareVersion(int detPos){
|
|
return myDetector->getId(slsDetectorDefs::DETECTOR_SOFTWARE_VERSION, detPos);
|
|
}
|
|
|
|
int64_t slsDetectorUsers::getClientSoftwareVersion(int detPos){
|
|
return myDetector->getId(slsDetectorDefs::THIS_SOFTWARE_VERSION, detPos);
|
|
}
|
|
|
|
int64_t slsDetectorUsers::getReceiverSoftwareVersion(int detPos){
|
|
return myDetector->getId(slsDetectorDefs::RECEIVER_VERSION, detPos);
|
|
}
|
|
|
|
bool slsDetectorUsers::isDetectorVersionCompatible(int detPos) {
|
|
return (myDetector->checkVersionCompatibility(slsDetectorDefs::CONTROL_PORT, detPos) == slsDetectorDefs::OK);
|
|
}
|
|
|
|
bool slsDetectorUsers::isReceiverVersionCompatible(int detPos) {
|
|
return (myDetector->checkVersionCompatibility(slsDetectorDefs::DATA_PORT, detPos) == slsDetectorDefs::OK);
|
|
}
|
|
|
|
int slsDetectorUsers::startMeasurement(){
|
|
return myDetector->acquire();
|
|
}
|
|
|
|
int slsDetectorUsers::stopMeasurement(int detPos){
|
|
return myDetector->stopAcquisition(detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::getDetectorStatus(int detPos){
|
|
return (int)myDetector->getRunStatus(detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::startAcquisition(int detPos) {
|
|
return myDetector->startAcquisition(detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::stopAcquisition(int detPos) {
|
|
return myDetector->stopAcquisition(detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::sendSoftwareTrigger(int detPos) {
|
|
return myDetector->sendSoftwareTrigger(detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::enableCountRateCorrection(int i, int detPos){
|
|
if (i == 0)
|
|
myDetector->setRateCorrection(0, detPos);
|
|
else
|
|
myDetector->setRateCorrection(-1, detPos);
|
|
|
|
return myDetector->getRateCorrection(detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setBitDepth(int i, int detPos){
|
|
return myDetector->setDynamicRange(i, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setSettings(int isettings, int detPos){
|
|
return myDetector->setSettings((slsDetectorDefs::detectorSettings)isettings, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::getThresholdEnergy(int detPos){
|
|
return myDetector->getThresholdEnergy(detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setThresholdEnergy(int e_ev, int tb, int isettings, int detPos) {
|
|
return myDetector->setThresholdEnergy(e_ev,
|
|
(isettings == -1) ? slsDetectorDefs::GET_SETTINGS : (slsDetectorDefs::detectorSettings)isettings,
|
|
tb, detPos);
|
|
}
|
|
|
|
double slsDetectorUsers::setExposureTime(double t, bool inseconds, int detPos){
|
|
return myDetector->setExposureTime(t, inseconds, detPos);
|
|
}
|
|
|
|
double slsDetectorUsers::setExposurePeriod(double t, bool inseconds, int detPos){
|
|
return myDetector->setExposurePeriod(t, inseconds, detPos);
|
|
}
|
|
|
|
double slsDetectorUsers::setDelayAfterTrigger(double t, bool inseconds, int detPos){
|
|
return myDetector->setDelayAfterTrigger(t, inseconds, detPos);
|
|
}
|
|
|
|
double slsDetectorUsers::setSubFrameExposureTime(double t, bool inseconds, int detPos){
|
|
return myDetector->setSubFrameExposureTime(t, inseconds, detPos);
|
|
}
|
|
|
|
double slsDetectorUsers::setSubFrameExposureDeadTime(double t, bool inseconds, int detPos){
|
|
return myDetector->setSubFrameExposureDeadTime(t, inseconds, detPos);
|
|
}
|
|
|
|
int64_t slsDetectorUsers::setNumberOfFrames(int64_t t, int detPos){
|
|
return myDetector->setNumberOfFrames(t, detPos);
|
|
}
|
|
|
|
int64_t slsDetectorUsers::setNumberOfCycles(int64_t t, int detPos){
|
|
return myDetector->setNumberOfCycles(t, detPos);
|
|
}
|
|
|
|
int64_t slsDetectorUsers::setNumberOfGates(int64_t t, int detPos){
|
|
return myDetector->setNumberOfGates(t, detPos);
|
|
}
|
|
|
|
int64_t slsDetectorUsers::setNumberOfStorageCells(int64_t t, int detPos) {
|
|
return myDetector->setNumberOfStorageCells(t, detPos);
|
|
}
|
|
|
|
double slsDetectorUsers::getMeasuredPeriod(bool inseconds, int detPos) {
|
|
return myDetector->getMeasuredPeriod(inseconds, detPos);
|
|
}
|
|
|
|
double slsDetectorUsers::getMeasuredSubFramePeriod(bool inseconds, int detPos) {
|
|
return myDetector->getMeasuredSubFramePeriod(inseconds, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setTimingMode(int pol, int detPos){
|
|
return myDetector->setExternalCommunicationMode(slsDetectorDefs::externalCommunicationMode(pol), detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setClockDivider(int value, int detPos) {
|
|
return myDetector->setSpeed(slsDetectorDefs::CLOCK_DIVIDER, value, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setParallelMode(int value, int detPos) {
|
|
if(value >= 0)
|
|
myDetector->setReadOutFlags(slsDetectorDefs::readOutFlags(value), detPos);
|
|
return myDetector->setReadOutFlags(slsDetectorDefs::GET_READOUT_FLAGS, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setOverflowMode(int value, int detPos) {
|
|
if(value >= 0) {
|
|
if (value == 1)
|
|
myDetector->setReadOutFlags(slsDetectorDefs::SHOW_OVERFLOW, detPos);
|
|
else
|
|
myDetector->setReadOutFlags(slsDetectorDefs::NOOVERFLOW, detPos);
|
|
}
|
|
int ret = myDetector->setReadOutFlags(slsDetectorDefs::GET_READOUT_FLAGS, detPos);
|
|
if (ret == -1)
|
|
return -1;
|
|
return ((ret & slsDetectorDefs::SHOW_OVERFLOW) ? 1 : 0);
|
|
}
|
|
|
|
int slsDetectorUsers::setAllTrimbits(int val, int detPos) {
|
|
return myDetector->setAllTrimbits(val, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setDAC(int val, int index , int detPos) {
|
|
return myDetector->setDAC(val, slsDetectorDefs::dacIndex(index), 0, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::getADC(int index, int detPos) {
|
|
return myDetector->getADC(slsDetectorDefs::dacIndex(index),detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setTenGigabitEthernet(int i, int detPos) {
|
|
return myDetector->enableTenGigabitEthernet(i, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setStoragecellStart(int pos, int detPos) {
|
|
return myDetector->setStoragecellStart(pos, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setHighVoltage(int i, int detPos) {
|
|
return myDetector->setDAC(i, slsDetectorDefs::HV_NEW, 0, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setFlowControl10G(int i, int detPos) {
|
|
return myDetector->setFlowControl10G(i, detPos);
|
|
}
|
|
|
|
|
|
/************************************************************************
|
|
|
|
RECEIVER FUNCTIONS
|
|
|
|
*********************************************************************/
|
|
|
|
|
|
int slsDetectorUsers::startReceiver(int detPos) {
|
|
return myDetector->startReceiver(detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::stopReceiver(int detPos) {
|
|
return myDetector->stopReceiver(detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setReceiverSilentMode(int i, int detPos) {
|
|
return myDetector->setReceiverSilentMode(i, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::resetFramesCaughtInReceiver(int detPos) {
|
|
return myDetector->resetFramesCaught(detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setReceiverFifoDepth(int i, int detPos) {
|
|
return myDetector->setReceiverFifoDepth(i, detPos);
|
|
}
|
|
|
|
string slsDetectorUsers::getFilePath(int detPos){
|
|
return myDetector->getFilePath(detPos);
|
|
}
|
|
|
|
string slsDetectorUsers::setFilePath(string s, int detPos){
|
|
return myDetector->setFilePath(s, detPos);
|
|
}
|
|
|
|
string slsDetectorUsers::getFileName(int detPos){
|
|
return myDetector->getFileName(detPos);
|
|
}
|
|
|
|
string slsDetectorUsers::setFileName(string s, int detPos){
|
|
return myDetector->setFileName(s, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::getFileIndex(int detPos){
|
|
return (int)myDetector->getFileIndex(detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setFileIndex(int i, int detPos){
|
|
return (int)myDetector->setFileIndex(i, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::enableWriteToFile(int enable, int detPos){
|
|
return myDetector->enableWriteToFile(enable, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::enableOverwriteFile(int enable, int detPos){
|
|
return myDetector->overwriteFile(enable, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setReceiverStreamingFrequency(int freq, int detPos){
|
|
return myDetector->setReceiverStreamingFrequency(freq, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setReceiverStreamingTimer(int time_in_ms, int detPos){
|
|
return myDetector->setReceiverStreamingTimer(time_in_ms, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::enableDataStreamingToClient(int i){
|
|
return myDetector->enableDataStreamingToClient(i);
|
|
}
|
|
|
|
int slsDetectorUsers::enableDataStreamingFromReceiver(int i, int detPos){
|
|
return myDetector->enableDataStreamingFromReceiver(i, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setReceiverDataStreamingOutPort(int i, int detPos){
|
|
return myDetector->setReceiverDataStreamingOutPort(i, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setClientDataStreamingInPort(int i, int detPos){
|
|
return myDetector->setClientDataStreamingInPort(i, detPos);
|
|
}
|
|
|
|
string slsDetectorUsers::setReceiverDataStreamingOutIP(string ip, int detPos){
|
|
return myDetector->setReceiverDataStreamingOutIP(ip, detPos);
|
|
}
|
|
|
|
string slsDetectorUsers::setClientDataStreamingInIP(string ip, int detPos){
|
|
return myDetector->setClientDataStreamingInIP(ip, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::enableGapPixels(int enable, int detPos) {
|
|
return myDetector->enableGapPixels(enable, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setReceiverFramesDiscardPolicy(int f, int detPos) {
|
|
return myDetector->setReceiverFramesDiscardPolicy(slsDetectorDefs::frameDiscardPolicy(f), detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setReceiverPartialFramesPadding(int f, int detPos) {
|
|
return myDetector->setReceiverPartialFramesPadding(f, detPos);
|
|
}
|
|
|
|
int slsDetectorUsers::setReceiverFramesPerFile(int f, int detPos) {
|
|
return myDetector->setReceiverFramesPerFile(f, detPos);
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
CALLBACKS & COMMAND LINE PARSING
|
|
|
|
*********************************************************************/
|
|
|
|
void slsDetectorUsers::registerDataCallback(int( *userCallback)(detectorData*, int, int, void*), void *pArg) {
|
|
myDetector->registerDataCallback(userCallback,pArg);
|
|
}
|
|
|
|
void slsDetectorUsers::registerAcquisitionFinishedCallback(int( *func)(double,int, void*), void *pArg) {
|
|
myDetector->registerAcquisitionFinishedCallback(func,pArg);
|
|
}
|
|
|
|
void slsDetectorUsers::registerMeasurementFinishedCallback(int( *func)(int,int, void*), void *pArg) {
|
|
myDetector->registerMeasurementFinishedCallback(func,pArg);
|
|
}
|
|
|
|
void slsDetectorUsers::registerProgressCallback(int( *func)(double,void*), void *pArg) {
|
|
myDetector->registerProgressCallback(func,pArg);
|
|
}
|
|
|
|
string slsDetectorUsers::putCommand(int narg, char *args[], int pos){
|
|
if(narg < 2)
|
|
return string("Error: Insufficient Parameters");
|
|
return myCmd->putCommand(narg, args, pos);
|
|
}
|
|
|
|
string slsDetectorUsers::getCommand(int narg, char *args[], int pos){
|
|
if(narg < 1)
|
|
return string("Error: Insufficient Parameters");
|
|
return myCmd->getCommand(narg, args, pos);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|