mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-22 22:40:02 +02:00
WIP
This commit is contained in:
parent
215e4a56fd
commit
b3fe0e79bc
@ -759,7 +759,7 @@ int64_t getSubExpTime() {
|
||||
#endif
|
||||
}
|
||||
|
||||
int setDeadTime(int64_t val) {
|
||||
int setSubDeadTime(int64_t val) {
|
||||
LOG(logINFO, ("Setting subdeadtime %lld ns\n", (long long int)val));
|
||||
#ifndef VIRTUAL
|
||||
// get subexptime
|
||||
@ -781,7 +781,7 @@ int setDeadTime(int64_t val) {
|
||||
return OK;
|
||||
}
|
||||
|
||||
int64_t getDeadTime() {
|
||||
int64_t getSubDeadTime() {
|
||||
#ifndef VIRTUAL
|
||||
// get subexptime
|
||||
int64_t subexptime = Feb_Control_GetSubFrameExposureTime();
|
||||
|
@ -206,8 +206,8 @@ int64_t getBurstPeriod();
|
||||
#ifdef EIGERD
|
||||
int setSubExpTime(int64_t val);
|
||||
int64_t getSubExpTime();
|
||||
int setDeadTime(int64_t val);
|
||||
int64_t getDeadTime();
|
||||
int setSubDeadTime(int64_t val);
|
||||
int64_t getSubDeadTime();
|
||||
int64_t getMeasuredPeriod();
|
||||
int64_t getMeasuredSubPeriod();
|
||||
#endif
|
||||
|
@ -2393,7 +2393,7 @@ int get_sub_deadtime(int file_des) {
|
||||
functionNotImplemented();
|
||||
#else
|
||||
// get only
|
||||
retval = getDeadTime();
|
||||
retval = getSubDeadTime();
|
||||
LOG(logDEBUG1, ("retval subdeadtime %lld ns\n", (long long int)retval));
|
||||
#endif
|
||||
return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
|
||||
@ -2424,8 +2424,8 @@ int set_sub_deadtime(int file_des) {
|
||||
((double)subexptime/(double)1E9));
|
||||
LOG(logERROR,(mess));
|
||||
} else {
|
||||
ret = setDeadTime(arg);
|
||||
int64_t retval = getDeadTime();
|
||||
ret = setSubDeadTime(arg);
|
||||
int64_t retval = getSubDeadTime();
|
||||
LOG(logDEBUG1, ("retval subdeadtime %lld ns\n", (long long int)retval));
|
||||
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);
|
||||
@ -6836,6 +6836,8 @@ int get_receiver_parameters(int file_des) {
|
||||
int n = 0;
|
||||
int i32 = 0;
|
||||
int64_t i64 = 0;
|
||||
uint32_t u32 = 0;
|
||||
uint64_t u64 = 0;
|
||||
|
||||
// frames
|
||||
i64 = getNumFrames();
|
||||
@ -6847,8 +6849,30 @@ int get_receiver_parameters(int file_des) {
|
||||
n = sendData(file_des,&i64,sizeof(i64),INT64);
|
||||
if (n < 0) return printSocketReadError();
|
||||
|
||||
// timing mode
|
||||
i32 = (int)getTiming();
|
||||
// bursts
|
||||
#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);
|
||||
if (n < 0) return printSocketReadError();
|
||||
|
||||
@ -6862,5 +6886,168 @@ int get_receiver_parameters(int file_des) {
|
||||
n = sendData(file_des,&i64,sizeof(i64),INT64);
|
||||
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;
|
||||
}
|
@ -1620,22 +1620,43 @@ void Module::test() {
|
||||
int n = 0;
|
||||
rxParameters retval;
|
||||
|
||||
// populate from shared memory
|
||||
retval.detType = shm()->myDetectorType;
|
||||
n += sizeof(retval.detType);
|
||||
|
||||
// populate from detector
|
||||
auto client = DetectorSocket(shm()->hostname, shm()->controlPort);
|
||||
client.sendCommandThenRead(F_GET_RECEIVER_PARAMETERS, nullptr, 0, nullptr, 0);
|
||||
|
||||
// frames
|
||||
n += client.Receive(&retval.nFrames, sizeof(retval.nFrames));
|
||||
// triggers
|
||||
n += client.Receive(&retval.nTriggers, sizeof(retval.nTriggers));
|
||||
// timing mode
|
||||
n += client.Receive(&retval.timMode, sizeof(retval.timMode));
|
||||
// exptime
|
||||
n += client.Receive(&retval.frames, sizeof(retval.frames));
|
||||
n += client.Receive(&retval.triggers, sizeof(retval.triggers));
|
||||
n += client.Receive(&retval.bursts, sizeof(retval.bursts));
|
||||
n += client.Receive(&retval.analogSamples, sizeof(retval.analogSamples));
|
||||
n += client.Receive(&retval.digitalSamples, sizeof(retval.digitalSamples));
|
||||
n += client.Receive(&retval.expTimeNs, sizeof(retval.expTimeNs));
|
||||
// period
|
||||
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);
|
||||
if (n != sizeof(retval)) {
|
||||
@ -1643,11 +1664,37 @@ void Module::test() {
|
||||
}
|
||||
|
||||
LOG(logINFO) << "detType:" << retval.detType;
|
||||
LOG(logINFO) << "nFrames:" << retval.nFrames;
|
||||
LOG(logINFO) << "nTriggers:" << retval.nTriggers;
|
||||
LOG(logINFO) << "timMode:" << retval.timMode;
|
||||
|
||||
LOG(logINFO) << "frames:" << retval.frames;
|
||||
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) << "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 {
|
||||
|
@ -465,12 +465,39 @@ class slsDetectorDefs {
|
||||
* structure to udpate receiver
|
||||
*/
|
||||
struct rxParameters {
|
||||
enum detectorType detType{GENERIC};
|
||||
uint64_t nFrames{0};
|
||||
uint64_t nTriggers{0};
|
||||
enum timingMode timMode{AUTO_TIMING};
|
||||
uint64_t expTimeNs{0};
|
||||
uint64_t periodNs{0};
|
||||
detectorType detType{GENERIC};
|
||||
|
||||
int64_t frames{0};
|
||||
int64_t triggers{0};
|
||||
int64_t bursts{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));
|
||||
#endif
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user