mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-22 22:40:02 +02:00
fixes
This commit is contained in:
parent
5790e4961b
commit
5f8dc7a7f0
@ -2304,30 +2304,25 @@ void *start_timer(void *arg) {
|
|||||||
int numFrames = (getNumFrames() * getNumTriggers() *
|
int numFrames = (getNumFrames() * getNumTriggers() *
|
||||||
(getNumAdditionalStorageCells() + 1));
|
(getNumAdditionalStorageCells() + 1));
|
||||||
int64_t expUs = getExpTime() / 1000;
|
int64_t expUs = getExpTime() / 1000;
|
||||||
const int npixels = 256 * 256 * 8;
|
|
||||||
const int dataSize = 8192;
|
const int dataSize = 8192;
|
||||||
const int packetsize = dataSize + sizeof(sls_detector_header);
|
const int packetsize = dataSize + sizeof(sls_detector_header);
|
||||||
int maxPacketsPerFrame = 128;
|
const int maxPacketsPerFrame = 128;
|
||||||
int maxRows = MAX_ROWS_PER_READOUT;
|
const int maxRows = MAX_ROWS_PER_READOUT;
|
||||||
if (numInterfaces == 2) {
|
|
||||||
maxPacketsPerFrame /= 2;
|
|
||||||
maxRows /= 2;
|
|
||||||
}
|
|
||||||
int partialReadout = getPartialReadout();
|
int partialReadout = getPartialReadout();
|
||||||
if (partialReadout == -1) {
|
if (partialReadout == -1) {
|
||||||
|
LOG(logERROR,
|
||||||
|
("partial readout is -1. Assuming no partial readout.\n"));
|
||||||
partialReadout = MAX_ROWS_PER_READOUT;
|
partialReadout = MAX_ROWS_PER_READOUT;
|
||||||
}
|
}
|
||||||
const int packetsPerFrame = (maxPacketsPerFrame * partialReadout) / maxRows;
|
const int packetsPerFrame =
|
||||||
|
((maxPacketsPerFrame / 2) * partialReadout) / (maxRows / 2);
|
||||||
//LOG(logINFOBLUE, ("packetsperframe:%d numFrames:%d partial:%d maxpacketsperframe:%d maxrows:%d \n", packetsPerFrame, numFrames, partialReadout, maxPacketsPerFrame, maxRows));
|
|
||||||
|
|
||||||
// starting packet number
|
|
||||||
//const int startPnum = (128 / 2) - ()
|
|
||||||
|
|
||||||
// Generate data
|
// Generate data
|
||||||
char imageData[DATA_BYTES];
|
char imageData[DATA_BYTES];
|
||||||
memset(imageData, 0, DATA_BYTES);
|
memset(imageData, 0, DATA_BYTES);
|
||||||
const int pixelsPerPacket = dataSize / 2;
|
{
|
||||||
|
const int npixels = (NCHAN * NCHIP);
|
||||||
|
const int pixelsPerPacket = dataSize / NUM_BYTES_PER_PIXEL;
|
||||||
int pixelVal = 0;
|
int pixelVal = 0;
|
||||||
for (int i = 0; i < npixels; ++i) {
|
for (int i = 0; i < npixels; ++i) {
|
||||||
// avoiding gain also being divided when gappixels enabled in call
|
// avoiding gain also being divided when gappixels enabled in call
|
||||||
@ -2338,6 +2333,7 @@ void *start_timer(void *arg) {
|
|||||||
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
|
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
|
||||||
virtual_image_test_mode ? 0x0FFE : (uint16_t)pixelVal;
|
virtual_image_test_mode ? 0x0FFE : (uint16_t)pixelVal;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Send data
|
// Send data
|
||||||
{
|
{
|
||||||
@ -2359,9 +2355,27 @@ void *start_timer(void *arg) {
|
|||||||
|
|
||||||
int srcOffset = 0;
|
int srcOffset = 0;
|
||||||
int srcOffset2 = DATA_BYTES / 2;
|
int srcOffset2 = DATA_BYTES / 2;
|
||||||
// loop packet
|
// loop packet (128 packets)
|
||||||
for (int i = 0; i != packetsPerFrame; ++i) {
|
for (int i = 0; i != maxPacketsPerFrame; ++i) {
|
||||||
// set header
|
|
||||||
|
// send out only the partial packets
|
||||||
|
if (partialReadout != MAX_ROWS_PER_READOUT) {
|
||||||
|
// get the mid point
|
||||||
|
const int startval =
|
||||||
|
(maxPacketsPerFrame / 2) - (packetsPerFrame / 2);
|
||||||
|
const int endval = startval + packetsPerFrame - 1;
|
||||||
|
LOG(logINFOBLUE,
|
||||||
|
("packetsperframe:%d startval:%d endval:%d'\n",
|
||||||
|
packetsPerFrame, startval, endval));
|
||||||
|
// skip sending out this packet
|
||||||
|
if (i < startval || i > endval) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int pnum = i;
|
||||||
|
|
||||||
|
// first interface
|
||||||
|
if (numInterfaces == 1 || i < (maxPacketsPerFrame / 2)) {
|
||||||
char packetData[packetsize];
|
char packetData[packetsize];
|
||||||
memset(packetData, 0, packetsize);
|
memset(packetData, 0, packetsize);
|
||||||
sls_detector_header *header =
|
sls_detector_header *header =
|
||||||
@ -2369,37 +2383,43 @@ void *start_timer(void *arg) {
|
|||||||
header->detType = (uint16_t)myDetectorType;
|
header->detType = (uint16_t)myDetectorType;
|
||||||
header->version = SLS_DETECTOR_HEADER_VERSION - 1;
|
header->version = SLS_DETECTOR_HEADER_VERSION - 1;
|
||||||
header->frameNumber = frameNr + iframes;
|
header->frameNumber = frameNr + iframes;
|
||||||
header->packetNumber = i;
|
header->packetNumber = pnum;
|
||||||
header->modId = 0;
|
|
||||||
header->row = detPos[2];
|
|
||||||
header->column = detPos[3];
|
|
||||||
|
|
||||||
// fill data
|
|
||||||
memcpy(packetData + sizeof(sls_detector_header),
|
|
||||||
imageData + srcOffset, dataSize);
|
|
||||||
srcOffset += dataSize;
|
|
||||||
|
|
||||||
sendUDPPacket(0, packetData, packetsize);
|
|
||||||
|
|
||||||
// second interface
|
|
||||||
char packetData2[packetsize];
|
|
||||||
memset(packetData2, 0, packetsize);
|
|
||||||
if (numInterfaces == 2) {
|
|
||||||
header = (sls_detector_header *)(packetData2);
|
|
||||||
header->detType = (uint16_t)myDetectorType;
|
|
||||||
header->version = SLS_DETECTOR_HEADER_VERSION - 1;
|
|
||||||
header->frameNumber = frameNr + iframes;
|
|
||||||
header->packetNumber = i;
|
|
||||||
header->modId = 0;
|
header->modId = 0;
|
||||||
header->row = detPos[0];
|
header->row = detPos[0];
|
||||||
header->column = detPos[1];
|
header->column = detPos[1];
|
||||||
|
|
||||||
|
// fill data
|
||||||
|
memcpy(packetData + sizeof(sls_detector_header),
|
||||||
|
imageData + srcOffset, dataSize);
|
||||||
|
|
||||||
|
sendUDPPacket(0, packetData, packetsize);
|
||||||
|
srcOffset += dataSize;
|
||||||
|
LOG(logDEBUG1, ("Sent packet: %d [interface 0]\n", i));
|
||||||
|
}
|
||||||
|
|
||||||
|
// second interface
|
||||||
|
else if (numInterfaces == 2 && i >= (maxPacketsPerFrame / 2)) {
|
||||||
|
pnum = i % (maxPacketsPerFrame / 2);
|
||||||
|
|
||||||
|
char packetData2[packetsize];
|
||||||
|
memset(packetData2, 0, packetsize);
|
||||||
|
sls_detector_header *header =
|
||||||
|
(sls_detector_header *)(packetData2);
|
||||||
|
header->detType = (uint16_t)myDetectorType;
|
||||||
|
header->version = SLS_DETECTOR_HEADER_VERSION - 1;
|
||||||
|
header->frameNumber = frameNr + iframes;
|
||||||
|
header->packetNumber = pnum;
|
||||||
|
header->modId = 0;
|
||||||
|
header->row = detPos[2];
|
||||||
|
header->column = detPos[3];
|
||||||
|
|
||||||
// fill data
|
// fill data
|
||||||
memcpy(packetData2 + sizeof(sls_detector_header),
|
memcpy(packetData2 + sizeof(sls_detector_header),
|
||||||
imageData + srcOffset2, dataSize);
|
imageData + srcOffset2, dataSize);
|
||||||
srcOffset2 += dataSize;
|
|
||||||
|
|
||||||
sendUDPPacket(1, packetData2, packetsize);
|
sendUDPPacket(1, packetData2, packetsize);
|
||||||
|
srcOffset2 += dataSize;
|
||||||
|
LOG(logDEBUG1, ("Sent packet: %d [interface 1]\n", pnum));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOG(logINFO, ("Sent frame: %d\n", iframes));
|
LOG(logINFO, ("Sent frame: %d\n", iframes));
|
||||||
|
@ -1694,8 +1694,8 @@ int acquire(int blocking, int file_des) {
|
|||||||
// chipv1.1 has to be configured before acquisition
|
// chipv1.1 has to be configured before acquisition
|
||||||
if (getChipVersion() == 11 && !isChipConfigured()) {
|
if (getChipVersion() == 11 && !isChipConfigured()) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
strcpy(mess,
|
strcpy(mess, "Could not start acquisition. Chip is not configured. "
|
||||||
"Could not start acquisition. Chip is not configured.\n");
|
"Power it on to configure it.\n");
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
@ -4755,11 +4755,13 @@ int set_partial_readout(int file_des) {
|
|||||||
maxnl);
|
maxnl);
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else
|
} else
|
||||||
#elif JUNGFRAU
|
#elif JUNGFRAUD
|
||||||
if (arg % PARTIAL_READOUT_MULTIPLE != 0) {
|
if (arg % PARTIAL_READOUT_MULTIPLE != 0) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess,
|
sprintf(mess,
|
||||||
"Could not set %d partial readout. %d must be a multiple of %d\n", arg, PARTIAL_READOUT_MULTIPLE);
|
"Could not set partial readout. %d must be a multiple "
|
||||||
|
"of %d\n",
|
||||||
|
arg, PARTIAL_READOUT_MULTIPLE);
|
||||||
LOG(logERROR, (mess));
|
LOG(logERROR, (mess));
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
@ -7137,7 +7139,7 @@ int get_receiver_parameters(int file_des) {
|
|||||||
return printSocketReadError();
|
return printSocketReadError();
|
||||||
|
|
||||||
// partialReadout
|
// partialReadout
|
||||||
#ifdef EIGERD
|
#if defined(EIGERD) || defined(JUNGFRAUD)
|
||||||
i32 = getPartialReadout();
|
i32 = getPartialReadout();
|
||||||
#else
|
#else
|
||||||
i32 = 0;
|
i32 = 0;
|
||||||
|
@ -847,13 +847,14 @@ void Detector::setNumberofUDPInterfaces_(int n, Positions pos) {
|
|||||||
bool previouslyClientStreaming = pimpl->getDataStreamingToClient();
|
bool previouslyClientStreaming = pimpl->getDataStreamingToClient();
|
||||||
bool useReceiver = getUseReceiverFlag().squash(false);
|
bool useReceiver = getUseReceiverFlag().squash(false);
|
||||||
bool previouslyReceiverStreaming = false;
|
bool previouslyReceiverStreaming = false;
|
||||||
|
int startingPort = 0;
|
||||||
if (useReceiver) {
|
if (useReceiver) {
|
||||||
previouslyReceiverStreaming = getRxZmqDataStream(pos).squash(true);
|
previouslyReceiverStreaming = getRxZmqDataStream(pos).squash(true);
|
||||||
|
startingPort = getRxZmqPort({0}).squash(0);
|
||||||
}
|
}
|
||||||
pimpl->Parallel(&Module::setNumberofUDPInterfaces, pos, n);
|
pimpl->Parallel(&Module::setNumberofUDPInterfaces, pos, n);
|
||||||
// ensure receiver zmq socket ports are multiplied by 2 (2 interfaces)
|
// ensure receiver zmq socket ports are multiplied by 2 (2 interfaces)
|
||||||
if (getUseReceiverFlag().squash(false) && size()) {
|
if (getUseReceiverFlag().squash(false) && size()) {
|
||||||
int startingPort = getRxZmqPort({0}).squash(0);
|
|
||||||
setRxZmqPort(startingPort, -1);
|
setRxZmqPort(startingPort, -1);
|
||||||
}
|
}
|
||||||
// redo the zmq sockets if enabled
|
// redo the zmq sockets if enabled
|
||||||
|
@ -129,7 +129,7 @@ void DataStreamer::ThreadExecution() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DataStreamer::StopProcessing(char *buf) {
|
void DataStreamer::StopProcessing(char *buf) {
|
||||||
LOG(logDEBUG1) << "DataStreamer " << index << ": Dummy";
|
LOG(logINFOBLUE) << "DataStreamer " << index << ": Dummy";
|
||||||
|
|
||||||
sls_receiver_header *header = (sls_receiver_header *)(buf);
|
sls_receiver_header *header = (sls_receiver_header *)(buf);
|
||||||
// send dummy header and data
|
// send dummy header and data
|
||||||
@ -149,7 +149,7 @@ void DataStreamer::ProcessAnImage(char *buf) {
|
|||||||
sls_receiver_header *header =
|
sls_receiver_header *header =
|
||||||
(sls_receiver_header *)(buf + FIFO_HEADER_NUMBYTES);
|
(sls_receiver_header *)(buf + FIFO_HEADER_NUMBYTES);
|
||||||
uint64_t fnum = header->detHeader.frameNumber;
|
uint64_t fnum = header->detHeader.frameNumber;
|
||||||
LOG(logDEBUG1) << "DataStreamer " << index << ": fnum:" << fnum;
|
LOG(logINFOBLUE) << "DataStreamer " << index << ": fnum:" << fnum;
|
||||||
|
|
||||||
if (!startedFlag) {
|
if (!startedFlag) {
|
||||||
RecordFirstIndex(fnum, buf);
|
RecordFirstIndex(fnum, buf);
|
||||||
|
@ -491,7 +491,7 @@ uint32_t Listener::ListenToAnImage(char *buf) {
|
|||||||
|
|
||||||
lastCaughtFrameIndex = fnum;
|
lastCaughtFrameIndex = fnum;
|
||||||
|
|
||||||
LOG(logDEBUG5) << "Listening " << index
|
LOG(logDEBUG1) << "Listening " << index
|
||||||
<< ": currentfindex:" << currentFrameIndex
|
<< ": currentfindex:" << currentFrameIndex
|
||||||
<< ", fnum:" << fnum << ", pnum:" << pnum
|
<< ", fnum:" << fnum << ", pnum:" << pnum
|
||||||
<< ", numpackets:" << numpackets;
|
<< ", numpackets:" << numpackets;
|
||||||
|
@ -26,7 +26,7 @@ ZmqSocket::ZmqSocket(const char *const hostname_or_ip,
|
|||||||
if (sockfd.contextDescriptor == nullptr)
|
if (sockfd.contextDescriptor == nullptr)
|
||||||
throw sls::ZmqSocketError("Could not create contextDescriptor");
|
throw sls::ZmqSocketError("Could not create contextDescriptor");
|
||||||
|
|
||||||
// create publisher
|
// create subscriber
|
||||||
sockfd.socketDescriptor = zmq_socket(sockfd.contextDescriptor, ZMQ_SUB);
|
sockfd.socketDescriptor = zmq_socket(sockfd.contextDescriptor, ZMQ_SUB);
|
||||||
if (sockfd.socketDescriptor == nullptr) {
|
if (sockfd.socketDescriptor == nullptr) {
|
||||||
PrintError();
|
PrintError();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user