Dev/rx callbacks (#966)

* changed rxr callback signatures to all include structs
* removed datamodify call back as size can be changed in the original data call back now
* bringing some parameters (set functions) to dataProcessor class for its callback (namely udpport, quad, fliprows, totalframes, jsonheader), resulting in also removing totalframes from 2 other function signatures

* updated MultiReceiverApp to reflect the new callback signatures
This commit is contained in:
2024-09-30 16:30:13 +02:00
committed by GitHub
parent 007330caa7
commit a44ba4dc35
10 changed files with 319 additions and 257 deletions

View File

@ -196,6 +196,7 @@ void Implementation::SetupListener(int i) {
void Implementation::SetupDataProcessor(int i) {
dataProcessor[i]->SetFifo(fifo[i].get());
dataProcessor[i]->SetGeneralData(generalData);
dataProcessor[i]->SetUdpPortNumber(udpPortNum[i]);
dataProcessor[i]->SetActivate(activated);
dataProcessor[i]->SetReceiverROI(portRois[i]);
dataProcessor[i]->SetDataStreamEnable(dataStreamEnable);
@ -205,6 +206,10 @@ void Implementation::SetupDataProcessor(int i) {
dataProcessor[i]->SetFramePadding(framePadding);
dataProcessor[i]->SetCtbDbitList(ctbDbitList);
dataProcessor[i]->SetCtbDbitOffset(ctbDbitOffset);
dataProcessor[i]->SetQuadEnable(quadEnable);
dataProcessor[i]->SetFlipRows(flipRows);
dataProcessor[i]->SetNumberofTotalFrames(numberOfTotalFrames);
dataProcessor[i]->SetAdditionalJsonHeader(additionalJsonHeader);
}
void Implementation::SetupDataStreamer(int i) {
@ -216,7 +221,6 @@ void Implementation::SetupDataStreamer(int i) {
dataStreamer[i]->SetQuadEnable(quadEnable);
dataStreamer[i]->SetFlipRows(flipRows);
dataStreamer[i]->SetNumberofPorts(numPorts);
dataStreamer[i]->SetQuadEnable(quadEnable);
dataStreamer[i]->SetNumberofTotalFrames(numberOfTotalFrames);
dataStreamer[i]->SetReceiverROI(
portRois[i].completeRoi() ? GetMaxROIPerPort() : portRois[i]);
@ -685,18 +689,26 @@ void Implementation::startReceiver() {
// callbacks
if (startAcquisitionCallBack) {
try {
std::size_t imageSize =
static_cast<uint32_t>(generalData->imageSize);
startAcquisitionCallBack(filePath, fileName, fileIndex, imageSize,
pStartAcquisition);
std::vector<uint32_t> udpPort;
for (size_t i = 0; i != listener.size(); ++i) {
udpPort.push_back(udpPortNum[i]);
}
startCallbackHeader callbackHeader = {
udpPort,
generalData->dynamicRange,
numPorts,
static_cast<size_t>(generalData->imageSize),
filePath,
fileName,
fileIndex,
quadEnable,
additionalJsonHeader};
startAcquisitionCallBack(callbackHeader, pStartAcquisition);
} catch (const std::exception &e) {
std::ostringstream oss;
oss << "Start Acquisition Callback Error: " << e.what();
throw RuntimeError(oss.str());
}
if (rawDataReadyCallBack != nullptr) {
LOG(logINFO) << "Data Write has been defined externally";
}
}
// processor->writer
@ -799,9 +811,19 @@ void Implementation::stopReceiver() {
// callback
if (acquisitionFinishedCallBack) {
try {
acquisitionFinishedCallBack(
(tot / generalData->numUDPInterfaces),
pAcquisitionFinished);
std::vector<uint32_t> udpPort;
std::vector<uint64_t> completeFramesCaught;
std::vector<uint64_t> lastFrameIndexCaught;
for (size_t i = 0; i != listener.size(); ++i) {
udpPort.push_back(udpPortNum[i]);
completeFramesCaught.push_back(
listener[i]->GetNumCompleteFramesCaught());
lastFrameIndexCaught.push_back(
listener[i]->GetLastFrameIndexCaught());
}
endCallbackHeader callHeader = {udpPort, completeFramesCaught,
lastFrameIndexCaught};
acquisitionFinishedCallBack(callHeader, pAcquisitionFinished);
} catch (const std::exception &e) {
// change status
status = IDLE;
@ -905,9 +927,9 @@ void Implementation::SetupWriter() {
os << filePath << "/" << fileName << "_d"
<< (modulePos * generalData->numUDPInterfaces + i);
std::string fileNamePrefix = os.str();
dataProcessor[i]->CreateFirstFiles(
fileNamePrefix, fileIndex, overwriteEnable, silentMode,
udpPortNum[i], numberOfTotalFrames, detectorDataStream[i]);
dataProcessor[i]->CreateFirstFiles(fileNamePrefix, fileIndex,
overwriteEnable, silentMode,
detectorDataStream[i]);
}
} catch (const RuntimeError &e) {
shutDownUDPSockets();
@ -1003,8 +1025,7 @@ void Implementation::StartMasterWriter() {
(numPorts.x * numPorts.y) > 1) {
virtualFileName = dataProcessor[0]->CreateVirtualFile(
filePath, fileName, fileIndex, overwriteEnable, silentMode,
modulePos, numberOfTotalFrames, numPorts.x, numPorts.y,
&hdf5LibMutex);
modulePos, numPorts.x, numPorts.y, &hdf5LibMutex);
}
// link file in master
if (masterFileWriteEnable) {
@ -1112,11 +1133,6 @@ void Implementation::setNumberofUDPInterfaces(const int n) {
it->registerCallBackRawDataReady(rawDataReadyCallBack,
pRawDataReady);
}
if (rawDataModifyReadyCallBack) {
for (const auto &it : dataProcessor)
it->registerCallBackRawDataModifyReady(
rawDataModifyReadyCallBack, pRawDataReady);
}
// test socket buffer size with current set up
setUDPSocketBufferSize(0);
@ -1148,6 +1164,7 @@ uint16_t Implementation::getUDPPortNumber() const { return udpPortNum[0]; }
void Implementation::setUDPPortNumber(const uint16_t i) {
udpPortNum[0] = i;
listener[0]->SetUdpPortNumber(i);
dataProcessor[0]->SetUdpPortNumber(i);
LOG(logINFO) << "UDP Port Number[0]: " << udpPortNum[0];
}
@ -1157,6 +1174,7 @@ void Implementation::setUDPPortNumber2(const uint16_t i) {
udpPortNum[1] = i;
if (listener.size() > 1) {
listener[1]->SetUdpPortNumber(i);
dataProcessor[1]->SetUdpPortNumber(i);
}
LOG(logINFO) << "UDP Port Number[1]: " << udpPortNum[1];
}
@ -1278,6 +1296,9 @@ void Implementation::setAdditionalJsonHeader(
const std::map<std::string, std::string> &c) {
additionalJsonHeader = c;
for (const auto &it : dataProcessor) {
it->SetAdditionalJsonHeader(c);
}
for (const auto &it : dataStreamer) {
it->SetAdditionalJsonHeader(c);
}
@ -1320,6 +1341,9 @@ void Implementation::setAdditionalJsonParameter(const std::string &key,
LOG(logINFO) << "Adding additional json parameter (" << key << ") to "
<< value;
}
for (const auto &it : dataProcessor) {
it->SetAdditionalJsonHeader(additionalJsonHeader);
}
for (const auto &it : dataStreamer) {
it->SetAdditionalJsonHeader(additionalJsonHeader);
}
@ -1359,6 +1383,8 @@ void Implementation::updateTotalNumberOfFrames() {
}
numberOfTotalFrames =
numFrames * repeats * (int64_t)(numberOfAdditionalStorageCells + 1);
for (const auto &it : dataProcessor)
it->SetNumberofTotalFrames(numberOfTotalFrames);
for (const auto &it : dataStreamer)
it->SetNumberofTotalFrames(numberOfTotalFrames);
if (numberOfTotalFrames == 0) {
@ -1617,6 +1643,8 @@ bool Implementation::getFlipRows() const { return flipRows; }
void Implementation::setFlipRows(bool enable) {
flipRows = enable;
for (const auto &it : dataProcessor)
it->SetFlipRows(flipRows);
for (const auto &it : dataStreamer)
it->SetFlipRows(flipRows);
LOG(logINFO) << "Flip Rows: " << flipRows;
@ -1628,6 +1656,10 @@ void Implementation::setQuad(const bool b) {
if (quadEnable != b) {
quadEnable = b;
setDetectorSize(numModules);
for (const auto &it : dataProcessor) {
it->SetQuadEnable(quadEnable);
it->SetFlipRows(flipRows);
}
for (const auto &it : dataStreamer) {
it->SetQuadEnable(quadEnable);
it->SetFlipRows(flipRows);
@ -1769,35 +1801,25 @@ void Implementation::setTransceiverEnableMask(uint32_t mask) {
* *
* ************************************************/
void Implementation::registerCallBackStartAcquisition(
int (*func)(const std::string &, const std::string &, uint64_t, size_t,
void *),
void *arg) {
int (*func)(const startCallbackHeader, void *), void *arg) {
startAcquisitionCallBack = func;
pStartAcquisition = arg;
}
void Implementation::registerCallBackAcquisitionFinished(void (*func)(uint64_t,
void *),
void *arg) {
void Implementation::registerCallBackAcquisitionFinished(
void (*func)(const endCallbackHeader, void *), void *arg) {
acquisitionFinishedCallBack = func;
pAcquisitionFinished = arg;
}
void Implementation::registerCallBackRawDataReady(
void (*func)(sls_receiver_header &, char *, size_t, void *), void *arg) {
void (*func)(sls_receiver_header &, dataCallbackHeader, char *, size_t &,
void *),
void *arg) {
rawDataReadyCallBack = func;
pRawDataReady = arg;
for (const auto &it : dataProcessor)
it->registerCallBackRawDataReady(rawDataReadyCallBack, pRawDataReady);
}
void Implementation::registerCallBackRawDataModifyReady(
void (*func)(sls_receiver_header &, char *, size_t &, void *), void *arg) {
rawDataModifyReadyCallBack = func;
pRawDataReady = arg;
for (const auto &it : dataProcessor)
it->registerCallBackRawDataModifyReady(rawDataModifyReadyCallBack,
pRawDataReady);
}
} // namespace sls