mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-21 00:58:01 +02:00
fixed short gotthard
This commit is contained in:
@ -37,12 +37,13 @@ const char* DataStreamer::jsonHeaderFormat =
|
||||
"\"fname\":\"%s\"}";
|
||||
|
||||
|
||||
DataStreamer::DataStreamer(Fifo*& f, uint32_t* dr, uint32_t* freq, uint32_t* timer) :
|
||||
DataStreamer::DataStreamer(Fifo*& f, uint32_t* dr, uint32_t* freq, uint32_t* timer, int* sEnable) :
|
||||
ThreadObject(NumberofDataStreamers),
|
||||
generalData(0),
|
||||
fifo(f),
|
||||
zmqSocket(0),
|
||||
dynamicRange(dr),
|
||||
shortFrameEnable(sEnable),
|
||||
streamingFrequency(freq),
|
||||
streamingTimerInMs(timer),
|
||||
currentFreqCount(0),
|
||||
@ -50,7 +51,8 @@ DataStreamer::DataStreamer(Fifo*& f, uint32_t* dr, uint32_t* freq, uint32_t* tim
|
||||
acquisitionStartedFlag(false),
|
||||
measurementStartedFlag(false),
|
||||
firstAcquisitionIndex(0),
|
||||
firstMeasurementIndex(0)
|
||||
firstMeasurementIndex(0),
|
||||
completeBuffer(0)
|
||||
{
|
||||
if(ThreadObject::CreateThread()){
|
||||
pthread_mutex_lock(&Mutex);
|
||||
@ -69,7 +71,8 @@ DataStreamer::DataStreamer(Fifo*& f, uint32_t* dr, uint32_t* freq, uint32_t* tim
|
||||
|
||||
DataStreamer::~DataStreamer() {
|
||||
CloseZmqSocket();
|
||||
delete currentHeader;
|
||||
if (currentHeader) delete currentHeader;
|
||||
if (completeBuffer) delete completeBuffer;
|
||||
ThreadObject::DestroyThread();
|
||||
NumberofDataStreamers--;
|
||||
}
|
||||
@ -126,10 +129,17 @@ void DataStreamer::ResetParametersforNewMeasurement(char* fname){
|
||||
firstMeasurementIndex = 0;
|
||||
measurementStartedFlag = false;
|
||||
strcpy(fileNametoStream, fname);
|
||||
if (completeBuffer) {
|
||||
delete completeBuffer;
|
||||
completeBuffer = 0;
|
||||
}
|
||||
if (*shortFrameEnable >= 0) {
|
||||
completeBuffer = new char[generalData->imageSize_Streamer];
|
||||
memset(completeBuffer, 0, generalData->imageSize_Streamer);
|
||||
}
|
||||
CreateHeaderPart1();
|
||||
}
|
||||
|
||||
|
||||
void DataStreamer::CreateHeaderPart1() {
|
||||
char type[10] = "";
|
||||
switch (*dynamicRange) {
|
||||
@ -144,7 +154,7 @@ void DataStreamer::CreateHeaderPart1() {
|
||||
}
|
||||
|
||||
sprintf(currentHeader, jsonHeaderFormat_part1,
|
||||
STREAMER_VERSION, type, generalData->nPixelsX, generalData->nPixelsY);
|
||||
STREAMER_VERSION, type, generalData->nPixelsX_Streamer, generalData->nPixelsY_Streamer);
|
||||
#ifdef VERBOSE
|
||||
cprintf(BLUE, "%d currentheader: %s\n", index, currentHeader);
|
||||
#endif
|
||||
@ -276,9 +286,19 @@ void DataStreamer::ProcessAnImage(char* buf) {
|
||||
cprintf(RED,"Error: Could not send zmq header for fnum %lld and streamer %d\n",
|
||||
(long long int) fnum, index);
|
||||
|
||||
if (!zmqSocket->SendData(buf + FILE_FRAME_HEADER_SIZE, generalData->imageSize))
|
||||
cprintf(RED,"Error: Could not send zmq data for fnum %lld and streamer %d\n",
|
||||
(long long int) fnum, index);
|
||||
//shortframe gotthard - data sending
|
||||
if (completeBuffer) {
|
||||
memcpy(completeBuffer + ((generalData->imageSize)**shortFrameEnable), buf + FILE_FRAME_HEADER_SIZE, generalData->imageSize);
|
||||
if (!zmqSocket->SendData(completeBuffer, generalData->imageSize_Streamer))
|
||||
cprintf(RED,"Error: Could not send zmq data for fnum %lld and streamer %d\n",
|
||||
(long long int) fnum, index);
|
||||
}
|
||||
//normal - data sending
|
||||
else {
|
||||
if (!zmqSocket->SendData(buf + FILE_FRAME_HEADER_SIZE, generalData->imageSize))
|
||||
cprintf(RED,"Error: Could not send zmq data for fnum %lld and streamer %d\n",
|
||||
(long long int) fnum, index);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -330,10 +330,11 @@ uint32_t Listener::ListenToAnImage(char* buf) {
|
||||
}
|
||||
|
||||
|
||||
//until last packet
|
||||
while (pnum < (generalData->packetsPerFrame-1)) {
|
||||
//until last packet isHeaderEmpty to account for gotthard short frame, else never entering this loop)
|
||||
while ( isHeaderEmpty || (pnum < (generalData->packetsPerFrame-1))) {
|
||||
|
||||
//listen to new packet
|
||||
|
||||
int curr_rc = udpSocket->ReceiveDataOnly(listeningPacket);
|
||||
if(curr_rc <= 0) {
|
||||
if (rc <= 0) return 0; //empty image
|
||||
|
@ -215,7 +215,7 @@ int UDPStandardImplementation::setDataStreamEnable(const bool enable) {
|
||||
if (enable) {
|
||||
bool error = false;
|
||||
for ( int i = 0; i < numThreads; ++i ) {
|
||||
dataStreamer.push_back(new DataStreamer(fifo[i], &dynamicRange, &frameToGuiFrequency, &frameToGuiTimerinMS));
|
||||
dataStreamer.push_back(new DataStreamer(fifo[i], &dynamicRange, &frameToGuiFrequency, &frameToGuiTimerinMS, &shortFrameEnable));
|
||||
dataStreamer[i]->SetGeneralData(generalData);
|
||||
if (dataStreamer[i]->CreateZmqSockets(&detID, &numThreads) == FAIL) {
|
||||
error = true;
|
||||
|
Reference in New Issue
Block a user