mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-21 11:20:04 +02:00
updated bug-crashing when file write disabled and included file pointer in call back function
git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@474 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
parent
28d2d64f51
commit
1ef4ace390
@ -2,10 +2,10 @@
|
|||||||
#define SVNURL "file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware/gotthardDetectorServer"
|
#define SVNURL "file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware/gotthardDetectorServer"
|
||||||
//#define SVNREPPATH ""
|
//#define SVNREPPATH ""
|
||||||
#define SVNREPUUID "951219d9-93cf-4727-9268-0efd64621fa3"
|
#define SVNREPUUID "951219d9-93cf-4727-9268-0efd64621fa3"
|
||||||
//#define SVNREV 0x471
|
//#define SVNREV 0x472
|
||||||
//#define SVNKIND ""
|
//#define SVNKIND ""
|
||||||
//#define SVNSCHED ""
|
//#define SVNSCHED ""
|
||||||
#define SVNAUTH "l_maliakal_d"
|
#define SVNAUTH "l_maliakal_d"
|
||||||
#define SVNREV 0x471
|
#define SVNREV 0x472
|
||||||
#define SVNDATE 0x20130226
|
#define SVNDATE 0x20130226
|
||||||
//
|
//
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
#define SVNURL "file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware/mythenDetectorServer"
|
#define SVNURL "file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware/mythenDetectorServer"
|
||||||
//#define SVNREPPATH ""
|
//#define SVNREPPATH ""
|
||||||
#define SVNREPUUID "951219d9-93cf-4727-9268-0efd64621fa3"
|
#define SVNREPUUID "951219d9-93cf-4727-9268-0efd64621fa3"
|
||||||
//#define SVNREV 0x471
|
//#define SVNREV 0x472
|
||||||
//#define SVNKIND ""
|
//#define SVNKIND ""
|
||||||
//#define SVNSCHED ""
|
//#define SVNSCHED ""
|
||||||
#define SVNAUTH "l_maliakal_d"
|
#define SVNAUTH "l_maliakal_d"
|
||||||
#define SVNREV 0x471
|
#define SVNREV 0x472
|
||||||
#define SVNDATE 0x20130226
|
#define SVNDATE 0x20130226
|
||||||
//
|
//
|
||||||
|
@ -230,7 +230,6 @@ void slsDetectorUsers::registerRawDataCallback(int( *userCallback)(double*, int,
|
|||||||
myDetector->registerRawDataCallback(userCallback,pArg);
|
myDetector->registerRawDataCallback(userCallback,pArg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void slsDetectorUsers::registerAcquisitionFinishedCallback(int( *func)(double,int, void*), void *pArg){
|
void slsDetectorUsers::registerAcquisitionFinishedCallback(int( *func)(double,int, void*), void *pArg){
|
||||||
myDetector->registerAcquisitionFinishedCallback(func,pArg);
|
myDetector->registerAcquisitionFinishedCallback(func,pArg);
|
||||||
}
|
}
|
||||||
|
@ -399,13 +399,6 @@ class slsDetectorUsers
|
|||||||
|
|
||||||
void registerRawDataCallback(int( *userCallback)(double* p, int n, void*), void *pArg);
|
void registerRawDataCallback(int( *userCallback)(double* p, int n, void*), void *pArg);
|
||||||
|
|
||||||
/**
|
|
||||||
@short register callback for writing receiver data - if the rawDataCallback is registered, no receiver data writing will be carried on automatically by the software - the receiver data are deleted by the software
|
|
||||||
\param userCallback function for writing the receiver data - p is the pointer to the data, n is the number of bytes to write
|
|
||||||
*/
|
|
||||||
|
|
||||||
void registerWriteReceiverDataCallback(int( *userCallback)(char* p, int n, void*), void *pArg);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@short function to initalize a set of measurements (reset binning if angular conversion, reset summing otherwise) - can be overcome by the user's functions thanks to the virtual property
|
@short function to initalize a set of measurements (reset binning if angular conversion, reset summing otherwise) - can be overcome by the user's functions thanks to the virtual property
|
||||||
\param refresh if 1, all parameters like ffcoefficients, badchannels, ratecorrections etc. are reset (should be called at least onece with this option), if 0 simply reset merging/ summation
|
\param refresh if 1, all parameters like ffcoefficients, badchannels, ratecorrections etc. are reset (should be called at least onece with this option), if 0 simply reset merging/ summation
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
#define SVNURLLIB "file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware"
|
#define SVNURLLIB "file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware"
|
||||||
//#define SVNREPPATH ""
|
//#define SVNREPPATH ""
|
||||||
#define SVNREPUUIDLIB "951219d9-93cf-4727-9268-0efd64621fa3"
|
#define SVNREPUUIDLIB "951219d9-93cf-4727-9268-0efd64621fa3"
|
||||||
//#define SVNREV 0x471
|
//#define SVNREV 0x473
|
||||||
//#define SVNKIND ""
|
//#define SVNKIND ""
|
||||||
//#define SVNSCHED ""
|
//#define SVNSCHED ""
|
||||||
#define SVNAUTHLIB "l_maliakal_d"
|
#define SVNAUTHLIB "l_maliakal_d"
|
||||||
#define SVNREVLIB 0x471
|
#define SVNREVLIB 0x473
|
||||||
#define SVNDATELIB 0x20130226
|
#define SVNDATELIB 0x20130226
|
||||||
//
|
//
|
||||||
|
@ -166,7 +166,7 @@ int slsReceiverFunctionList::startReceiver(){
|
|||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
cout << "Starting Receiver" << endl;
|
cout << "Starting Receiver" << endl;
|
||||||
#endif
|
#endif
|
||||||
|
cout << endl;
|
||||||
|
|
||||||
int err = 0;
|
int err = 0;
|
||||||
if(!listening_thread_running){
|
if(!listening_thread_running){
|
||||||
@ -263,7 +263,7 @@ void* slsReceiverFunctionList::startListeningThread(void* this_pointer){
|
|||||||
|
|
||||||
int slsReceiverFunctionList::startListening(){
|
int slsReceiverFunctionList::startListening(){
|
||||||
#ifdef VERYVERBOSE
|
#ifdef VERYVERBOSE
|
||||||
i cout << "In startListening()\n");
|
cout << "In startListening()\n");
|
||||||
#endif
|
#endif
|
||||||
// Variable and structure definitions
|
// Variable and structure definitions
|
||||||
int rc;
|
int rc;
|
||||||
@ -388,15 +388,14 @@ int slsReceiverFunctionList::startWriting(){
|
|||||||
strcpy(savefilename,"");
|
strcpy(savefilename,"");
|
||||||
strcpy(actualfilename,"");
|
strcpy(actualfilename,"");
|
||||||
|
|
||||||
if (!writeReceiverData)
|
|
||||||
cout << "Max Frames Per File:" << maxFramesPerFile << endl;
|
cout << "Max Frames Per File:" << maxFramesPerFile << endl;
|
||||||
else
|
if (writeReceiverData)
|
||||||
cout << "Note: Writing Data has been defined exernally" << endl;
|
cout << "Note: Data Write has been defined exernally" << endl;
|
||||||
|
|
||||||
cout << "Ready!" << endl;
|
cout << "Ready!" << endl;
|
||||||
|
|
||||||
|
if(!enableFileWrite)
|
||||||
|
cout << endl << "Note: Data will not be saved" << endl;
|
||||||
|
|
||||||
if(enableFileWrite){
|
|
||||||
//create file name
|
//create file name
|
||||||
if(frameIndexNeeded==-1) sprintf(savefilename, "%s/%s_%d.raw", filePath,fileName,fileIndex);
|
if(frameIndexNeeded==-1) sprintf(savefilename, "%s/%s_%d.raw", filePath,fileName,fileIndex);
|
||||||
else sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,framesCaught,fileIndex);
|
else sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,framesCaught,fileIndex);
|
||||||
@ -406,10 +405,9 @@ int slsReceiverFunctionList::startWriting(){
|
|||||||
else sprintf(actualfilename, "%s/%s_%d_%09d.raw", filePath,fileName,fileIndex, 0);
|
else sprintf(actualfilename, "%s/%s_%d_%09d.raw", filePath,fileName,fileIndex, 0);
|
||||||
|
|
||||||
//start writing
|
//start writing
|
||||||
if (!writeReceiverData){
|
if(enableFileWrite){
|
||||||
sfilefd = fopen((const char *) (actualfilename), "w");
|
sfilefd = fopen((const char *) (actualfilename), "w");
|
||||||
cout << "Saving to " << actualfilename << endl;
|
cout << actualfilename << endl;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -417,10 +415,8 @@ int slsReceiverFunctionList::startWriting(){
|
|||||||
while(listening_thread_running){
|
while(listening_thread_running){
|
||||||
|
|
||||||
//when it reaches maxFramesPerFile,start writing new file
|
//when it reaches maxFramesPerFile,start writing new file
|
||||||
if ((!writeReceiverData)&& (framesInFile == maxFramesPerFile)) {
|
if (framesInFile == maxFramesPerFile) {
|
||||||
|
|
||||||
if(enableFileWrite){
|
|
||||||
fclose(sfilefd);
|
|
||||||
//create file name
|
//create file name
|
||||||
if(frameIndexNeeded==-1) sprintf(savefilename, "%s/%s_%d.raw", filePath,fileName,fileIndex);
|
if(frameIndexNeeded==-1) sprintf(savefilename, "%s/%s_%d.raw", filePath,fileName,fileIndex);
|
||||||
else sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,framesCaught,fileIndex);
|
else sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,framesCaught,fileIndex);
|
||||||
@ -428,13 +424,15 @@ int slsReceiverFunctionList::startWriting(){
|
|||||||
if(!shortFileName) strcpy(actualfilename,savefilename);
|
if(!shortFileName) strcpy(actualfilename,savefilename);
|
||||||
else sprintf(actualfilename, "%s/%s_%d_%09d.raw", filePath,fileName,fileIndex, shortFileNameIndex);
|
else sprintf(actualfilename, "%s/%s_%d_%09d.raw", filePath,fileName,fileIndex, shortFileNameIndex);
|
||||||
shortFileNameIndex++;
|
shortFileNameIndex++;
|
||||||
|
|
||||||
//start writing in new file
|
//start writing in new file
|
||||||
|
if(enableFileWrite){
|
||||||
|
fclose(sfilefd);
|
||||||
sfilefd = fopen((const char *) (actualfilename), "w");
|
sfilefd = fopen((const char *) (actualfilename), "w");
|
||||||
cout << "saving to " << actualfilename << "\t";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//currframenum=(int)(*((int*)latestData));
|
//currframenum=(int)(*((int*)latestData));
|
||||||
cout << "packet loss " << fixed << setprecision(4) << ((currframenum-prevframenum-(packetsPerFrame*framesInFile))/(double)(packetsPerFrame*framesInFile))*100.000 << "%\t\t"
|
cout << actualfilename << "\tpacket loss " << fixed << setprecision(4) << ((currframenum-prevframenum-(packetsPerFrame*framesInFile))/(double)(packetsPerFrame*framesInFile))*100.000 << "%\t\t"
|
||||||
"framenum " << currframenum << "\t\t"
|
"framenum " << currframenum << "\t\t"
|
||||||
"p " << prevframenum << endl;
|
"p " << prevframenum << endl;
|
||||||
|
|
||||||
@ -452,17 +450,18 @@ int slsReceiverFunctionList::startWriting(){
|
|||||||
framesCaught++;
|
framesCaught++;
|
||||||
totalFramesCaught++;
|
totalFramesCaught++;
|
||||||
currframenum = (int)(*((int*)dataWriteFrame->buffer));
|
currframenum = (int)(*((int*)dataWriteFrame->buffer));
|
||||||
|
|
||||||
|
if(enableFileWrite){
|
||||||
|
if (writeReceiverData)
|
||||||
|
writeReceiverData(dataWriteFrame->buffer,dataWriteFrame->rc, sfilefd, pwriteReceiverDataArg);
|
||||||
|
else
|
||||||
|
fwrite(dataWriteFrame->buffer, 1, dataWriteFrame->rc, sfilefd);
|
||||||
|
}
|
||||||
if(guiRequiresData){
|
if(guiRequiresData){
|
||||||
memcpy(latestData,dataWriteFrame->buffer,bufferSize);
|
memcpy(latestData,dataWriteFrame->buffer,bufferSize);
|
||||||
guiRequiresData=0;
|
guiRequiresData=0;
|
||||||
}
|
}
|
||||||
//cout<<"write index:"<<(int)(*(int*)latestData)<<endl;
|
//cout<<"write index:"<<(int)(*(int*)latestData)<<endl;
|
||||||
if(enableFileWrite){
|
|
||||||
if (writeReceiverData)
|
|
||||||
writeReceiverData(dataWriteFrame->buffer,dataWriteFrame->rc, pwriteReceiverDataArg);
|
|
||||||
else
|
|
||||||
fwrite(dataWriteFrame->buffer, 1, dataWriteFrame->rc, sfilefd);
|
|
||||||
}
|
|
||||||
framesInFile++;
|
framesInFile++;
|
||||||
///ANNA?!?!??!
|
///ANNA?!?!??!
|
||||||
// delete [] dataWriteFrame->buffer;
|
// delete [] dataWriteFrame->buffer;
|
||||||
|
@ -184,7 +184,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Register call back function to write receiver data
|
* Register call back function to write receiver data
|
||||||
*/
|
*/
|
||||||
void registerWriteReceiverDataCallback(int( *userCallback)(char*, int, void*), void *pArg) {writeReceiverData = userCallback; pwriteReceiverDataArg = pArg;};
|
void registerWriteReceiverDataCallback(int( *userCallback)(char*, int, FILE*, void*), void *pArg) {writeReceiverData = userCallback; pwriteReceiverDataArg = pArg;};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -299,7 +299,7 @@ private:
|
|||||||
int currframenum;
|
int currframenum;
|
||||||
|
|
||||||
/** register for call back to get data */
|
/** register for call back to get data */
|
||||||
int (*writeReceiverData)(char*,int,void*);
|
int (*writeReceiverData)(char*,int,FILE*,void*);
|
||||||
void *pwriteReceiverDataArg;
|
void *pwriteReceiverDataArg;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
#define SVNURL "file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware/slsReceiver"
|
#define SVNURL "file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware/slsReceiver"
|
||||||
//#define SVNREPPATH ""
|
//#define SVNREPPATH ""
|
||||||
#define SVNREPUUID "951219d9-93cf-4727-9268-0efd64621fa3"
|
#define SVNREPUUID "951219d9-93cf-4727-9268-0efd64621fa3"
|
||||||
//#define SVNREV 0x471
|
//#define SVNREV 0x473
|
||||||
//#define SVNKIND ""
|
//#define SVNKIND ""
|
||||||
//#define SVNSCHED ""
|
//#define SVNSCHED ""
|
||||||
#define SVNAUTH "l_maliakal_d"
|
#define SVNAUTH "l_maliakal_d"
|
||||||
#define SVNREV 0x471
|
#define SVNREV 0x473
|
||||||
#define SVNDATE 0x20130226
|
#define SVNDATE 0x20130226
|
||||||
//
|
//
|
||||||
|
@ -336,7 +336,7 @@ int defaultRawDataReadyFunc(double* d, int np, void* p) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int defaultWriteReceiverDataFunc(char* d, int np, void* p){
|
int defaultWriteReceiverDataFunc(char* d, int np, FILE* f, void* p){
|
||||||
//#ifdef VERBOSE
|
//#ifdef VERBOSE
|
||||||
printf("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU Receiver Data received \n");
|
printf("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU Receiver Data received \n");
|
||||||
if (d==NULL)
|
if (d==NULL)
|
||||||
|
@ -7,7 +7,9 @@ Functions depending on the experimental setup should be defined here
|
|||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
|
||||||
//#define PI 3.14159265358979323846
|
//#define PI 3.14159265358979323846
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#include <iostream>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef EPICS
|
#ifdef EPICS
|
||||||
#include <cadef.h>
|
#include <cadef.h>
|
||||||
@ -40,8 +42,9 @@ extern "C" {
|
|||||||
int defaultDataReadyFunc(detectorData* d, int i, void* p);
|
int defaultDataReadyFunc(detectorData* d, int i, void* p);
|
||||||
int defaultRawDataReadyFunc(double* d, int np, void* p);
|
int defaultRawDataReadyFunc(double* d, int np, void* p);
|
||||||
|
|
||||||
int defaultWriteReceiverDataFunc(char* d, int np, void* p);
|
#ifdef __cplusplus
|
||||||
|
int defaultWriteReceiverDataFunc(char* d, int np, FILE* f, void* p);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user