This commit is contained in:
maliakal_d 2020-04-08 16:43:28 +02:00
parent 215e4a56fd
commit b3fe0e79bc
5 changed files with 288 additions and 27 deletions

View File

@ -759,7 +759,7 @@ int64_t getSubExpTime() {
#endif #endif
} }
int setDeadTime(int64_t val) { int setSubDeadTime(int64_t val) {
LOG(logINFO, ("Setting subdeadtime %lld ns\n", (long long int)val)); LOG(logINFO, ("Setting subdeadtime %lld ns\n", (long long int)val));
#ifndef VIRTUAL #ifndef VIRTUAL
// get subexptime // get subexptime
@ -781,7 +781,7 @@ int setDeadTime(int64_t val) {
return OK; return OK;
} }
int64_t getDeadTime() { int64_t getSubDeadTime() {
#ifndef VIRTUAL #ifndef VIRTUAL
// get subexptime // get subexptime
int64_t subexptime = Feb_Control_GetSubFrameExposureTime(); int64_t subexptime = Feb_Control_GetSubFrameExposureTime();

View File

@ -206,8 +206,8 @@ int64_t getBurstPeriod();
#ifdef EIGERD #ifdef EIGERD
int setSubExpTime(int64_t val); int setSubExpTime(int64_t val);
int64_t getSubExpTime(); int64_t getSubExpTime();
int setDeadTime(int64_t val); int setSubDeadTime(int64_t val);
int64_t getDeadTime(); int64_t getSubDeadTime();
int64_t getMeasuredPeriod(); int64_t getMeasuredPeriod();
int64_t getMeasuredSubPeriod(); int64_t getMeasuredSubPeriod();
#endif #endif

View File

@ -2393,7 +2393,7 @@ int get_sub_deadtime(int file_des) {
functionNotImplemented(); functionNotImplemented();
#else #else
// get only // get only
retval = getDeadTime(); retval = getSubDeadTime();
LOG(logDEBUG1, ("retval subdeadtime %lld ns\n", (long long int)retval)); LOG(logDEBUG1, ("retval subdeadtime %lld ns\n", (long long int)retval));
#endif #endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval)); return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
@ -2424,8 +2424,8 @@ int set_sub_deadtime(int file_des) {
((double)subexptime/(double)1E9)); ((double)subexptime/(double)1E9));
LOG(logERROR,(mess)); LOG(logERROR,(mess));
} else { } else {
ret = setDeadTime(arg); ret = setSubDeadTime(arg);
int64_t retval = getDeadTime(); int64_t retval = getSubDeadTime();
LOG(logDEBUG1, ("retval subdeadtime %lld ns\n", (long long int)retval)); LOG(logDEBUG1, ("retval subdeadtime %lld ns\n", (long long int)retval));
if (ret == FAIL) { if (ret == FAIL) {
sprintf(mess, "Could not set subframe dead time. Set %lld ns, read %lld ns.\n", (long long int)arg, (long long int)retval); sprintf(mess, "Could not set subframe dead time. Set %lld ns, read %lld ns.\n", (long long int)arg, (long long int)retval);
@ -6836,6 +6836,8 @@ int get_receiver_parameters(int file_des) {
int n = 0; int n = 0;
int i32 = 0; int i32 = 0;
int64_t i64 = 0; int64_t i64 = 0;
uint32_t u32 = 0;
uint64_t u64 = 0;
// frames // frames
i64 = getNumFrames(); i64 = getNumFrames();
@ -6847,8 +6849,30 @@ int get_receiver_parameters(int file_des) {
n = sendData(file_des,&i64,sizeof(i64),INT64); n = sendData(file_des,&i64,sizeof(i64),INT64);
if (n < 0) return printSocketReadError(); if (n < 0) return printSocketReadError();
// timing mode // bursts
i32 = (int)getTiming(); #ifdef GOTTHARD2D
i64 = getNumBursts();
#else
i64 = 0;
#endif
n = sendData(file_des,&i64,sizeof(i64),INT64);
if (n < 0) return printSocketReadError();
// analog samples
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
i32 = getNumAnalogSamples();
#else
i32 = 0;
#endif
n = sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// digital samples
#ifdef CHIPTESTBOARDD
i32 = getNumDigitalSamples();
#else
i32 = 0;
#endif
n = sendData(file_des,&i32,sizeof(i32),INT32); n = sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError(); if (n < 0) return printSocketReadError();
@ -6862,5 +6886,168 @@ int get_receiver_parameters(int file_des) {
n = sendData(file_des,&i64,sizeof(i64),INT64); n = sendData(file_des,&i64,sizeof(i64),INT64);
if (n < 0) return printSocketReadError(); if (n < 0) return printSocketReadError();
// sub exptime
#ifdef EIGERD
i64 = getSubExpTime();
#else
i64 = 0;
#endif
n = sendData(file_des,&i64,sizeof(i64),INT64);
if (n < 0) return printSocketReadError();
// sub deadtime
#ifdef EIGERD
i64 = getSubDeadTime();
#else
i64 = 0;
#endif
n = sendData(file_des,&i64,sizeof(i64),INT64);
if (n < 0) return printSocketReadError();
// dynamic range
i32 = setDynamicRange(-1);
n = sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// timing mode
i32 = (int)getTiming();
n = sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// activate
#ifdef EIGERD
i32 = activate(-1);
#else
i32 = 0;
#endif
n = sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// 10 gbe
#if defined(EIGERD) || defined(CHIPTESTBOARDD) || defined(MOENCHD)
i32 = enableTenGigabitEthernet(-1);
#else
i32 = 0;
#endif
n = sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// quad
#ifdef EIGERD
i32 = getQuad();
#else
i32 = 0;
#endif
n = sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// readout mode
#ifdef CHIPTESTBOARD
i32 = getReadoutMode();
#else
i32 = 0;
#endif
n = sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// adc mask
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
u32 = getADCEnableMask();
#else
u32 = 0;
#endif
n = sendData(file_des,&u32,sizeof(u32),INT32);
if (n < 0) return printSocketReadError();
// 10g adc mask
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
u32 = getADCEnableMask_10G();
#else
u32 = 0;
#endif
n = sendData(file_des,&u32,sizeof(u32),INT32);
if (n < 0) return printSocketReadError();
// roi
{
ROI roi;
#ifdef GOTTHARDD
roi = getROI();
#else
roi.xmin = -1;
roi.xmax = -1;
#endif
n = sendData(file_des,&roi.xmin,sizeof(int),INT32);
if (n < 0) return printSocketReadError();
n = sendData(file_des,&roi.xmax,sizeof(int),INT32);
if (n < 0) return printSocketReadError();
}
// counter mask
#ifdef MYTHEN3D
u32 = getCounterMask();
#else
u32 = 0;
#endif
n = sendData(file_des,&u32,sizeof(u32),INT32);
if (n < 0) return printSocketReadError();
// burst mode
#ifdef GOTTHARD2D
i32 = (int)getBurstMode();
#else
i32 = 0;
#endif
n = sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// udp interfaces
#ifdef JUNGFRAUD
i32 = getNumberofUDPInterfaces();
#else
i32 = 1;
#endif
n = sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// udp dst port
i32 = udpDetails.dstport;
n = sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// udp dst ip
u32 = udpDetails.dstip;
u32 = __builtin_bswap32(u32);
n = sendData(file_des,&u32,sizeof(u32),INT32);
if (n < 0) return printSocketReadError();
// udp dst mac
u64 = udpDetails.dstmac;
n = sendData(file_des,&u64,sizeof(u64),INT64);
if (n < 0) return printSocketReadError();
// udp dst port2
i32 = udpDetails.dstport2;
n = sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// udp dst ip2
u32 = udpDetails.dstip2;
u32 = __builtin_bswap32(u32);
n = sendData(file_des,&u32,sizeof(u32),INT32);
if (n < 0) return printSocketReadError();
// udp dst mac2
u64 = udpDetails.dstmac2;
n = sendData(file_des,&u64,sizeof(u64),INT64);
if (n < 0) return printSocketReadError();
return OK; return OK;
} }

View File

@ -1620,22 +1620,43 @@ void Module::test() {
int n = 0; int n = 0;
rxParameters retval; rxParameters retval;
// populate from shared memory
retval.detType = shm()->myDetectorType; retval.detType = shm()->myDetectorType;
n += sizeof(retval.detType); n += sizeof(retval.detType);
// populate from detector
auto client = DetectorSocket(shm()->hostname, shm()->controlPort); auto client = DetectorSocket(shm()->hostname, shm()->controlPort);
client.sendCommandThenRead(F_GET_RECEIVER_PARAMETERS, nullptr, 0, nullptr, 0); client.sendCommandThenRead(F_GET_RECEIVER_PARAMETERS, nullptr, 0, nullptr, 0);
n += client.Receive(&retval.frames, sizeof(retval.frames));
// frames n += client.Receive(&retval.triggers, sizeof(retval.triggers));
n += client.Receive(&retval.nFrames, sizeof(retval.nFrames)); n += client.Receive(&retval.bursts, sizeof(retval.bursts));
// triggers n += client.Receive(&retval.analogSamples, sizeof(retval.analogSamples));
n += client.Receive(&retval.nTriggers, sizeof(retval.nTriggers)); n += client.Receive(&retval.digitalSamples, sizeof(retval.digitalSamples));
// timing mode
n += client.Receive(&retval.timMode, sizeof(retval.timMode));
// exptime
n += client.Receive(&retval.expTimeNs, sizeof(retval.expTimeNs)); n += client.Receive(&retval.expTimeNs, sizeof(retval.expTimeNs));
// period
n += client.Receive(&retval.periodNs, sizeof(retval.periodNs)); n += client.Receive(&retval.periodNs, sizeof(retval.periodNs));
n += client.Receive(&retval.subExpTimeNs, sizeof(retval.subExpTimeNs));
n += client.Receive(&retval.subDeadTimeNs, sizeof(retval.subDeadTimeNs));
n += client.Receive(&retval.dynamicRange, sizeof(retval.dynamicRange));
n += client.Receive(&retval.timMode, sizeof(retval.timMode));
n += client.Receive(&retval.activate, sizeof(retval.activate));
n += client.Receive(&retval.tenGiga, sizeof(retval.tenGiga));
n += client.Receive(&retval.quad, sizeof(retval.quad));
n += client.Receive(&retval.roMode, sizeof(retval.roMode));
n += client.Receive(&retval.adcMask, sizeof(retval.adcMask));
n += client.Receive(&retval.adc10gMask, sizeof(retval.adc10gMask));
n += client.Receive(&retval.roi.xmin, sizeof(retval.roi.xmin));
n += client.Receive(&retval.roi.xmax, sizeof(retval.roi.xmax));
n += client.Receive(&retval.countermask, sizeof(retval.countermask));
n += client.Receive(&retval.burstType, sizeof(retval.burstType));
n += client.Receive(&retval.udpInterfaces, sizeof(retval.udpInterfaces));
n += client.Receive(&retval.udp_dstport, sizeof(retval.udp_dstport));
n += client.Receive(&retval.udp_dstip, sizeof(retval.udp_dstip));
n += client.Receive(&retval.udp_dstmac, sizeof(retval.udp_dstmac));
n += client.Receive(&retval.udp_dstport2, sizeof(retval.udp_dstport2));
n += client.Receive(&retval.udp_dstip2, sizeof(retval.udp_dstip2));
n += client.Receive(&retval.udp_dstmac2, sizeof(retval.udp_dstmac2));
LOG(logINFO) << "n:" << n << " retvalsize:" << sizeof(retval); LOG(logINFO) << "n:" << n << " retvalsize:" << sizeof(retval);
if (n != sizeof(retval)) { if (n != sizeof(retval)) {
@ -1643,11 +1664,37 @@ void Module::test() {
} }
LOG(logINFO) << "detType:" << retval.detType; LOG(logINFO) << "detType:" << retval.detType;
LOG(logINFO) << "nFrames:" << retval.nFrames;
LOG(logINFO) << "nTriggers:" << retval.nTriggers; LOG(logINFO) << "frames:" << retval.frames;
LOG(logINFO) << "timMode:" << retval.timMode; LOG(logINFO) << "triggers:" << retval.triggers;
LOG(logINFO) << "bursts:" << retval.bursts;
LOG(logINFO) << "analogSamples:" << retval.analogSamples;
LOG(logINFO) << "digitalSamples:" << retval.digitalSamples;
LOG(logINFO) << "expTimeNs:" << retval.expTimeNs; LOG(logINFO) << "expTimeNs:" << retval.expTimeNs;
LOG(logINFO) << "periodNs:" << retval.periodNs; LOG(logINFO) << "periodNs:" << retval.periodNs;
LOG(logINFO) << "subExpTimeNs:" << retval.subExpTimeNs;
LOG(logINFO) << "subDeadTimeNs:" << retval.subDeadTimeNs;
LOG(logINFO) << "dynamicRange:" << retval.dynamicRange;
LOG(logINFO) << "timMode:" << retval.timMode;
LOG(logINFO) << "activate:" << retval.activate;
LOG(logINFO) << "tenGiga:" << retval.tenGiga;
LOG(logINFO) << "quad:" << retval.quad;
LOG(logINFO) << "roMode:" << retval.roMode;
LOG(logINFO) << "adcMask:" << retval.adcMask;
LOG(logINFO) << "adc10gMask:" << retval.adc10gMask;
LOG(logINFO) << "roi.xmin:" << retval.roi.xmin;
LOG(logINFO) << "roi.xmax:" << retval.roi.xmax;
LOG(logINFO) << "countermask:" << retval.countermask;
LOG(logINFO) << "burstType:" << retval.burstType;
LOG(logINFO) << "udpInterfaces:" << retval.udpInterfaces;
LOG(logINFO) << "udp_dstport:" << retval.udp_dstport;
LOG(logINFO) << "udp_dstip:" << sls::IpAddr(retval.udp_dstip);
LOG(logINFO) << "udp_dstmac:" << sls::MacAddr(retval.udp_dstmac);
LOG(logINFO) << "udp_dstport2:" << retval.udp_dstport2;
LOG(logINFO) << "udp_dstip2:" << sls::IpAddr(retval.udp_dstip2);
LOG(logINFO) << "udp_dstmac2:" << sls::MacAddr(retval.udp_dstmac2);
} }
std::string Module::getReceiverHostname() const { std::string Module::getReceiverHostname() const {

View File

@ -465,12 +465,39 @@ class slsDetectorDefs {
* structure to udpate receiver * structure to udpate receiver
*/ */
struct rxParameters { struct rxParameters {
enum detectorType detType{GENERIC}; detectorType detType{GENERIC};
uint64_t nFrames{0};
uint64_t nTriggers{0}; int64_t frames{0};
enum timingMode timMode{AUTO_TIMING}; int64_t triggers{0};
uint64_t expTimeNs{0}; int64_t bursts{0};
uint64_t periodNs{0}; int analogSamples{0};
int digitalSamples{0};
int64_t expTimeNs{0};
int64_t periodNs{0};
int64_t subExpTimeNs{0};
int64_t subDeadTimeNs{0};
int dynamicRange{16};
timingMode timMode{AUTO_TIMING};
int activate{0};
int tenGiga{0};
int quad{0};
readoutMode roMode{ANALOG_ONLY};
uint32_t adcMask{0};
uint32_t adc10gMask{0};
ROI roi;
uint32_t countermask{0};
burstMode burstType{BURST_OFF};
int udpInterfaces{1};
int udp_dstport{0};
uint32_t udp_dstip{0U};
uint64_t udp_dstmac{0LU};
int udp_dstport2{0};
uint32_t udp_dstip2{0U};
uint64_t udp_dstmac2{0LU};
}__attribute__((packed)); }__attribute__((packed));
#endif #endif