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() * 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));

View File

@ -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;

View File

@ -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

View File

@ -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);

View File

@ -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;

View File

@ -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();