This commit is contained in:
maliakal_d 2021-08-16 14:30:47 +02:00
parent 5790e4961b
commit 5f8dc7a7f0
6 changed files with 82 additions and 59 deletions

View File

@ -2304,30 +2304,25 @@ void *start_timer(void *arg) {
int numFrames = (getNumFrames() * getNumTriggers() *
(getNumAdditionalStorageCells() + 1));
int64_t expUs = getExpTime() / 1000;
const int npixels = 256 * 256 * 8;
const int dataSize = 8192;
const int packetsize = dataSize + sizeof(sls_detector_header);
int maxPacketsPerFrame = 128;
int maxRows = MAX_ROWS_PER_READOUT;
if (numInterfaces == 2) {
maxPacketsPerFrame /= 2;
maxRows /= 2;
}
const int maxPacketsPerFrame = 128;
const int maxRows = MAX_ROWS_PER_READOUT;
int partialReadout = getPartialReadout();
if (partialReadout == -1) {
LOG(logERROR,
("partial readout is -1. Assuming no partial readout.\n"));
partialReadout = MAX_ROWS_PER_READOUT;
}
const int packetsPerFrame = (maxPacketsPerFrame * partialReadout) / maxRows;
//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) - ()
const int packetsPerFrame =
((maxPacketsPerFrame / 2) * partialReadout) / (maxRows / 2);
// Generate data
char imageData[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;
for (int i = 0; i < npixels; ++i) {
// 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))) =
virtual_image_test_mode ? 0x0FFE : (uint16_t)pixelVal;
}
}
// Send data
{
@ -2359,9 +2355,27 @@ void *start_timer(void *arg) {
int srcOffset = 0;
int srcOffset2 = DATA_BYTES / 2;
// loop packet
for (int i = 0; i != packetsPerFrame; ++i) {
// set header
// loop packet (128 packets)
for (int i = 0; i != maxPacketsPerFrame; ++i) {
// 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];
memset(packetData, 0, packetsize);
sls_detector_header *header =
@ -2369,37 +2383,43 @@ void *start_timer(void *arg) {
header->detType = (uint16_t)myDetectorType;
header->version = SLS_DETECTOR_HEADER_VERSION - 1;
header->frameNumber = frameNr + iframes;
header->packetNumber = i;
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->packetNumber = pnum;
header->modId = 0;
header->row = detPos[0];
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
memcpy(packetData2 + sizeof(sls_detector_header),
imageData + srcOffset2, dataSize);
srcOffset2 += dataSize;
sendUDPPacket(1, packetData2, packetsize);
srcOffset2 += dataSize;
LOG(logDEBUG1, ("Sent packet: %d [interface 1]\n", pnum));
}
}
LOG(logINFO, ("Sent frame: %d\n", iframes));

View File

@ -1694,8 +1694,8 @@ int acquire(int blocking, int file_des) {
// chipv1.1 has to be configured before acquisition
if (getChipVersion() == 11 && !isChipConfigured()) {
ret = FAIL;
strcpy(mess,
"Could not start acquisition. Chip is not configured.\n");
strcpy(mess, "Could not start acquisition. Chip is not configured. "
"Power it on to configure it.\n");
LOG(logERROR, (mess));
} else
#endif
@ -4755,11 +4755,13 @@ int set_partial_readout(int file_des) {
maxnl);
LOG(logERROR, (mess));
} else
#elif JUNGFRAU
#elif JUNGFRAUD
if (arg % PARTIAL_READOUT_MULTIPLE != 0) {
ret = FAIL;
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));
} else
#endif
@ -7137,7 +7139,7 @@ int get_receiver_parameters(int file_des) {
return printSocketReadError();
// partialReadout
#ifdef EIGERD
#if defined(EIGERD) || defined(JUNGFRAUD)
i32 = getPartialReadout();
#else
i32 = 0;

View File

@ -847,13 +847,14 @@ void Detector::setNumberofUDPInterfaces_(int n, Positions pos) {
bool previouslyClientStreaming = pimpl->getDataStreamingToClient();
bool useReceiver = getUseReceiverFlag().squash(false);
bool previouslyReceiverStreaming = false;
int startingPort = 0;
if (useReceiver) {
previouslyReceiverStreaming = getRxZmqDataStream(pos).squash(true);
startingPort = getRxZmqPort({0}).squash(0);
}
pimpl->Parallel(&Module::setNumberofUDPInterfaces, pos, n);
// ensure receiver zmq socket ports are multiplied by 2 (2 interfaces)
if (getUseReceiverFlag().squash(false) && size()) {
int startingPort = getRxZmqPort({0}).squash(0);
setRxZmqPort(startingPort, -1);
}
// redo the zmq sockets if enabled

View File

@ -129,7 +129,7 @@ void DataStreamer::ThreadExecution() {
}
void DataStreamer::StopProcessing(char *buf) {
LOG(logDEBUG1) << "DataStreamer " << index << ": Dummy";
LOG(logINFOBLUE) << "DataStreamer " << index << ": Dummy";
sls_receiver_header *header = (sls_receiver_header *)(buf);
// send dummy header and data
@ -149,7 +149,7 @@ void DataStreamer::ProcessAnImage(char *buf) {
sls_receiver_header *header =
(sls_receiver_header *)(buf + FIFO_HEADER_NUMBYTES);
uint64_t fnum = header->detHeader.frameNumber;
LOG(logDEBUG1) << "DataStreamer " << index << ": fnum:" << fnum;
LOG(logINFOBLUE) << "DataStreamer " << index << ": fnum:" << fnum;
if (!startedFlag) {
RecordFirstIndex(fnum, buf);

View File

@ -491,7 +491,7 @@ uint32_t Listener::ListenToAnImage(char *buf) {
lastCaughtFrameIndex = fnum;
LOG(logDEBUG5) << "Listening " << index
LOG(logDEBUG1) << "Listening " << index
<< ": currentfindex:" << currentFrameIndex
<< ", fnum:" << fnum << ", pnum:" << pnum
<< ", numpackets:" << numpackets;

View File

@ -26,7 +26,7 @@ ZmqSocket::ZmqSocket(const char *const hostname_or_ip,
if (sockfd.contextDescriptor == nullptr)
throw sls::ZmqSocketError("Could not create contextDescriptor");
// create publisher
// create subscriber
sockfd.socketDescriptor = zmq_socket(sockfd.contextDescriptor, ZMQ_SUB);
if (sockfd.socketDescriptor == nullptr) {
PrintError();