separated slsReceiverInterface from slsDetector

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@313 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
l_maliakal_d
2012-10-26 08:58:26 +00:00
parent b52f9a8569
commit 4dcad48ecb
5 changed files with 118 additions and 251 deletions
+2 -3
View File
@@ -3,13 +3,12 @@ CFLAGS= -DC_ONLY -fPIC
DFLAGS= -DDACS_INT
INCLUDES= -IcommonFiles -IslsDetector -IMySocketTCP -IusersFunctions -ImultiSlsDetector -IslsDetectorUtils -IslsDetectorCommand -IslsDetectorAnalysis
INCLUDES= -IcommonFiles -IslsDetector -IMySocketTCP -IusersFunctions -ImultiSlsDetector -IslsDetectorUtils -IslsDetectorCommand -IslsDetectorAnalysis -IslsReceiverInterface
#EPICSFLAGS=-D EPICS -I/usr/local/epics/base/include/ -I /usr/local/epics/base/include/os/Linux/ -L /usr/local/epics/base/lib/SL5-x86/ -Wl,-R/usr/local/epics/base/lib/SL5-x86 -lca -lCom
CC=g++
SRC_CLNT= slsDetectorAnalysis/fileIO.cpp MySocketTCP/MySocketTCP.cpp usersFunctions/usersFunctions.cpp slsDetector/slsDetectorUtils.cpp slsDetector/slsDetectorCommand.cpp slsDetectorAnalysis/angularConversion.cpp slsDetectorAnalysis/angularConversionStatic.cpp slsDetectorAnalysis/energyConversion.cpp slsDetector/slsDetectorActions.cpp slsDetectorAnalysis/postProcessing.cpp slsDetector/slsDetector.cpp multiSlsDetector/multiSlsDetector.cpp slsDetector/slsDetectorUsers.cpp slsDetectorAnalysis/postProcessingFuncs.cpp
SRC_CLNT= slsDetectorAnalysis/fileIO.cpp MySocketTCP/MySocketTCP.cpp usersFunctions/usersFunctions.cpp slsDetector/slsDetectorUtils.cpp slsDetector/slsDetectorCommand.cpp slsDetectorAnalysis/angularConversion.cpp slsDetectorAnalysis/angularConversionStatic.cpp slsDetectorAnalysis/energyConversion.cpp slsDetector/slsDetectorActions.cpp slsDetectorAnalysis/postProcessing.cpp slsDetector/slsDetector.cpp multiSlsDetector/multiSlsDetector.cpp slsDetector/slsDetectorUsers.cpp slsDetectorAnalysis/postProcessingFuncs.cpp slsReceiverInterface/receiverInterface.cpp
OBJS = $(SRC_CLNT:.cpp=.o)
@@ -354,7 +354,7 @@ int sendModule(int file_des, sls_detector_module *myMod) {
#ifdef VERBOSE
printf("dacs %d of size %d sent\n",myMod->module, ts);
for (idac=0; idac< nDacs; idac++)
printf("dac %d is %d\n",idac,myMod->dacs[idac]);
printf("dac %d is %d\n",idac,(int)myMod->dacs[idac]);
#endif
ts+= sendDataOnly(file_des,myMod->adcs,sizeof(dacs_t)*nAdcs);
#ifdef VERBOSE
@@ -482,7 +482,7 @@ int receiveModule(int file_des, sls_detector_module* myMod) {
#ifdef VERBOSE
printf("dacs received\n");
for (id=0; id<nDacs; id++)
printf("dac %d val %d\n",id, myMod->dacs[id]);
printf("dac %d val %d\n",id, (int)myMod->dacs[id]);
#endif
+104 -243
View File
@@ -123,7 +123,8 @@ slsDetector::slsDetector(int id,multiSlsDetector *p) :slsDetectorUtils(),
dacs(NULL),
adcs(NULL),
chipregs(NULL),
chanregs(NULL)
chanregs(NULL),
thisReceiver(NULL)
{
@@ -172,7 +173,8 @@ slsDetector::slsDetector(detectorType type, int id,multiSlsDetector *p): slsDete
dacs(NULL),
adcs(NULL),
chipregs(NULL),
chanregs(NULL)
chanregs(NULL),
thisReceiver(NULL)
{
while (shmId<0) {
/**Initlializes shared memory \sa initSharedMemory
@@ -224,7 +226,8 @@ slsDetector::slsDetector(char *name, int id, int cport,multiSlsDetector *p) : sl
dacs(NULL),
adcs(NULL),
chipregs(NULL),
chanregs(NULL)
chanregs(NULL),
thisReceiver(NULL)
{
detectorType type=(detectorType)getDetectorType(name, cport);
@@ -672,6 +675,7 @@ int slsDetector::initializeDetectorSize(detectorType type) {
fileName=parentDet->fileName;
fileIndex=parentDet->fileIndex;
thisReceiver = new receiverInterface(dataSocket);
// setAngularConversionPointer(thisDetector->angOff,&thisDetector->nMods, thisDetector->nChans*thisDetector->nChips);
@@ -5284,18 +5288,21 @@ slsDetectorDefs::synchronizationMode slsDetector::setSynchronization(synchroniza
/*receiver*/
int slsDetector::setReceiverOnline(int off) {
if (off!=GET_ONLINE_FLAG) {
if(strcmp(thisDetector->receiverIP,"none")){
thisDetector->receiverOnlineFlag=off;
if (thisDetector->receiverOnlineFlag==ONLINE_FLAG)
setReceiverTCPSocket();
}
//Since flag becomes offline if receiver not online.
//This ensures server to NOT send to receiver in the next command line comment
if((off==ONLINE_FLAG)&&(thisDetector->receiverOnlineFlag!=ONLINE_FLAG))
DetectorStopReceiver();
}
return thisDetector->receiverOnlineFlag;
int prev = thisDetector->receiverOnlineFlag;
if (off!=GET_ONLINE_FLAG) {
if(strcmp(thisDetector->receiverIP,"none")){
thisDetector->receiverOnlineFlag=off;
if (thisDetector->receiverOnlineFlag==ONLINE_FLAG){
setReceiverTCPSocket();
if(thisDetector->receiverOnlineFlag==OFFLINE_FLAG)
std::cout << "cannot connect to receiver" << endl;
}
}
}
//To ensure detector knows, if receiver suddenly went down
if((prev==ONLINE_FLAG)&&(thisDetector->receiverOnlineFlag==OFFLINE_FLAG))
detectorSendToReceiver(false);
return thisDetector->receiverOnlineFlag;
}
@@ -5336,14 +5343,7 @@ string slsDetector::checkReceiverOnline() {
/*
configure the socket communication and check that the receiver exists
enum communicationProtocol{
TCP,
UDP
}{};
*/
int slsDetector::setReceiverTCPSocket(string const name, int const data_port){
@@ -5405,6 +5405,7 @@ int slsDetector::setReceiverTCPSocket(string const name, int const data_port){
std::cout<< "offline!" << std::endl;
#endif
}
thisReceiver->setSocket(dataSocket);
return retval;
};
@@ -5414,11 +5415,10 @@ int slsDetector::setReceiverTCPSocket(string const name, int const data_port){
string slsDetector::setFilePath(string s) {
int fnum=F_SET_FILE_PATH;
int fnum = F_SET_FILE_PATH;
int ret = FAIL;
char mess[100];
char arg[MAX_STR_LENGTH];
char retval[MAX_STR_LENGTH]="";
char retval[MAX_STR_LENGTH] = "";
struct stat st;
if(thisDetector->receiverOnlineFlag==OFFLINE_FLAG){
@@ -5430,30 +5430,17 @@ string slsDetector::setFilePath(string s) {
}
}
else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){
strcpy(arg,s.c_str());
#ifdef VERBOSE
std::cout << "Sending file path to receiver " << arg << std::endl;
#endif
if (dataSocket) {
if (dataSocket->Connect()>=0) {
dataSocket->SendDataOnly(&fnum,sizeof(fnum));
dataSocket->SendDataOnly(arg,MAX_STR_LENGTH);
dataSocket->ReceiveDataOnly(&ret,sizeof(ret));
if (ret==FAIL){
dataSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Receiver returned error: " << mess << std::endl;
}
dataSocket->ReceiveDataOnly(retval,MAX_STR_LENGTH);
fileIO::setFilePath(s);
}
dataSocket->Disconnect();
if (ret==FORCE_UPDATE)
updateReceiver();
}
}else
std::cout << "cannot connect to receiver" << endl;
ret=thisReceiver->sendString(fnum,retval,arg);
if(ret!=FAIL)
fileIO::setFilePath(string(retval));
if(ret==FORCE_UPDATE)
updateReceiver();
}
return fileIO::getFilePath();
}
@@ -5463,7 +5450,6 @@ string slsDetector::setFilePath(string s) {
string slsDetector::setFileName(string s) {
int fnum=F_SET_FILE_NAME;
int ret = FAIL;
char mess[100];
char arg[MAX_STR_LENGTH];
char retval[MAX_STR_LENGTH]="";
@@ -5474,33 +5460,21 @@ string slsDetector::setFileName(string s) {
}
if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){
if(setReceiverOnline(ONLINE_FLAG)!=ONLINE_FLAG){
if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){
strcpy(arg,s.c_str());
#ifdef VERBOSE
std::cout << "Sending file name to receiver " << arg << std::endl;
#endif
if (dataSocket) {
if (dataSocket->Connect()>=0) {
dataSocket->SendDataOnly(&fnum,sizeof(fnum));
dataSocket->SendDataOnly(arg,MAX_STR_LENGTH);
dataSocket->ReceiveDataOnly(&ret,sizeof(ret));
if (ret==FAIL){
dataSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Receiver returned error: " << mess << std::endl;
}
dataSocket->ReceiveDataOnly(retval,MAX_STR_LENGTH);
ret=thisReceiver->sendString(fnum,retval,arg);
if(ret!=FAIL){
#ifdef VERBOSE
std::cout << "Complete file prefix from receiver: " << retval << std::endl;
std::cout << "Complete file prefix from receiver: " << retval << std::endl;
#endif
fileIO::setFileName(parentDet->getNameFromReceiverFilePrefix(string(retval)));
}
dataSocket->Disconnect();
if (ret==FORCE_UPDATE)
updateReceiver();
fileIO::setFileName(parentDet->getNameFromReceiverFilePrefix(string(retval)));
}
}else
std::cout << "cannot connect to receiver" << endl;
if(ret==FORCE_UPDATE)
updateReceiver();
}
}
return fileIO::getFileName();
@@ -5510,46 +5484,27 @@ string slsDetector::setFileName(string s) {
int slsDetector::setFileIndex(int i) {
int fnum=F_SET_FILE_INDEX;
int ret = FAIL;
int retval=-1;
int arg = i;
char mess[100];
if(thisDetector->receiverOnlineFlag==OFFLINE_FLAG){
if(i>=0)
fileIO::setFileIndex(i);
}
else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){
#ifdef VERBOSE
std::cout << "Sending file dir to receiver " << arg << std::endl;
std::cout << "Sending file index to receiver " << arg << std::endl;
#endif
if (dataSocket) {
if (dataSocket->Connect()>=0) {
dataSocket->SendDataOnly(&fnum,sizeof(fnum));
dataSocket->SendDataOnly(&arg,sizeof(arg));
dataSocket->ReceiveDataOnly(&ret,sizeof(ret));
if (ret==FAIL){
dataSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Receiver returned error: " << mess << std::endl;
}
dataSocket->ReceiveDataOnly(&retval,sizeof(retval));
fileIO::setFileIndex(retval);
}
dataSocket->Disconnect();
if (ret==FORCE_UPDATE)
updateReceiver();
}
}else
std::cout << "cannot connect to receiver" << endl;
ret=thisReceiver->sendInt(fnum,retval,arg);
if(ret!=FAIL)
fileIO::setFileIndex(retval);
if(ret==FORCE_UPDATE)
updateReceiver();
}
return fileIO::getFileIndex();
}
@@ -5560,55 +5515,49 @@ int slsDetector::setFileIndex(int i) {
int slsDetector::startReceiver(){
int fnum=F_START_RECEIVER;
int ret = FAIL;
char mess[100];
if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) {
#ifdef VERBOSE
std::cout << "Starting Receiver " << std::endl;
#endif
if (dataSocket) {
if (dataSocket->Connect()>=0) {
dataSocket->SendDataOnly(&fnum,sizeof(fnum));
dataSocket->ReceiveDataOnly(&ret,sizeof(ret));
if (ret==FAIL){
dataSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Receiver returned error: " << mess << std::endl;
}
dataSocket->Disconnect();
if (ret==FORCE_UPDATE)
ret=updateReceiver();
}
}
}else
std::cout << "cannot connect to receiver" << endl;
ret=thisReceiver->executeFunction(fnum);
if(ret==FORCE_UPDATE)
ret=updateReceiver();
}
//configuremac for gotthard
if(ret==OK)
if(thisDetector->myDetectorType==GOTTHARD)
ret=configureMAC();
if(ret==OK){
if (thisDetector->onlineFlag==ONLINE_FLAG) {
if(ret==OK)
ret=detectorSendToReceiver(true);
return ret;
}
int slsDetector::stopReceiver(){
int fnum=F_STOP_RECEIVER;
int ret = FAIL;
detectorSendToReceiver(false);
if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) {
#ifdef VERBOSE
std::cout << "Setting detector to send packets via receiver " << std::endl;
std::cout << "Stopping Receiver " << std::endl;
#endif
if (controlSocket) {
if (controlSocket->Connect()>=0) {
controlSocket->SendDataOnly(&fnum,sizeof(fnum));
controlSocket->ReceiveDataOnly(&ret,sizeof(ret));
if (ret==FAIL){
controlSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Detector returned error: " << mess << std::endl;
}
controlSocket->Disconnect();
if (ret==FORCE_UPDATE)
ret=updateDetector();
}
}
}else
std::cout << "cannot connect to detector" << endl;
ret=thisReceiver->executeFunction(fnum);
if(ret==FORCE_UPDATE)
ret=updateReceiver();
}
//increment file index
if(ret==OK){
fileIO::setFileIndex(fileIO::getFileIndex()+1);
setFileIndex(fileIO::getFileIndex());
}
return ret;
@@ -5616,10 +5565,13 @@ int slsDetector::startReceiver(){
int slsDetector::DetectorStopReceiver(){
int fnum=F_STOP_RECEIVER;
int slsDetector::detectorSendToReceiver(bool set){
int fnum;
if(set) fnum=F_START_RECEIVER;
else fnum=F_STOP_RECEIVER;
int ret = FAIL;
char mess[100];
if (thisDetector->onlineFlag==ONLINE_FLAG) {
#ifdef VERBOSE
std::cout << "Setting detector to send packets via client " << std::endl;
@@ -5645,42 +5597,6 @@ int slsDetector::DetectorStopReceiver(){
int slsDetector::stopReceiver(){
int fnum=F_STOP_RECEIVER;
int ret = FAIL;
char mess[100];
DetectorStopReceiver();
if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) {
#ifdef VERBOSE
std::cout << "Stopping Receiver " << std::endl;
#endif
if (dataSocket) {
if (dataSocket->Connect()>=0) {
dataSocket->SendDataOnly(&fnum,sizeof(fnum));
dataSocket->ReceiveDataOnly(&ret,sizeof(ret));
if (ret==FAIL){
dataSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Receiver returned error: " << mess << std::endl;
}
dataSocket->Disconnect();
if (ret==FORCE_UPDATE)
ret=updateReceiver();
}
}
}else
std::cout << "cannot connect to receiver" << endl;
//increment file index
if(ret==OK){
fileIO::setFileIndex(fileIO::getFileIndex()+1);
setFileIndex(fileIO::getFileIndex());
}
return ret;
}
@@ -5688,31 +5604,21 @@ int slsDetector::stopReceiver(){
slsDetectorDefs::runStatus slsDetector::getReceiverStatus(){
int fnum=F_GET_RECEIVER_STATUS;
int ret = FAIL;
char mess[100];
runStatus retval=ERROR;
int retval=-1;
runStatus s=ERROR;
if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) {
#ifdef VERBOSE
std::cout << "Getting Receiver Status" << std::endl;
#endif
if (dataSocket) {
if (dataSocket->Connect()>=0) {
dataSocket->SendDataOnly(&fnum,sizeof(fnum));
dataSocket->ReceiveDataOnly(&ret,sizeof(ret));
if (ret==FAIL){
dataSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Receiver returned error: " << mess << std::endl;
}else
dataSocket->ReceiveDataOnly(&retval,sizeof(retval));
ret=thisReceiver->getInt(fnum,retval);
if(retval!=-1)
s=(runStatus)retval;
if(ret==FORCE_UPDATE)
ret=updateReceiver();
}
dataSocket->Disconnect();
if (ret==FORCE_UPDATE)
updateReceiver();
}
}
}else
std::cout << "cannot connect to receiver" << endl;
return retval;
return s;
}
@@ -5721,30 +5627,17 @@ slsDetectorDefs::runStatus slsDetector::getReceiverStatus(){
int slsDetector::getFramesCaughtByReciver(){
int fnum=F_GET_FRAMES_CAUGHT;
int ret = FAIL;
char mess[100];
int retval=-1;
if (setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG) {
#ifdef VERBOSE
std::cout << "Getting Frames Caught by Receiver " << std::endl;
#endif
if (dataSocket) {
if (dataSocket->Connect()>=0) {
dataSocket->SendDataOnly(&fnum,sizeof(fnum));
dataSocket->ReceiveDataOnly(&ret,sizeof(ret));
if (ret!=FAIL)
dataSocket->ReceiveDataOnly(&retval,sizeof(retval));
else{
dataSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Receiver returned error: " << mess << std::endl;
}
dataSocket->Disconnect();
if (ret==FORCE_UPDATE)
updateReceiver();
}
}
}else
std::cout << "cannot connect to receiver" << endl;
ret=thisReceiver->getInt(fnum,retval);
if(ret==FORCE_UPDATE)
ret=updateReceiver();
}
return retval;
}
@@ -5755,33 +5648,17 @@ int slsDetector::lockReceiver(int lock){
int fnum=F_LOCK_RECEIVER;
int ret = FAIL;
int retval=-1;
char mess[100];
int arg= lock;
int arg=lock;
if(setReceiverOnline(ONLINE_FLAG)!=ONLINE_FLAG){
#ifdef VERBOSE
std::cout << "Locking or Unlocking Receiver " << std::endl;
#endif
if (dataSocket) {
if (dataSocket->Connect()>=0) {
dataSocket->SendDataOnly(&fnum,sizeof(fnum));
dataSocket->SendDataOnly(&arg,sizeof(arg));
dataSocket->ReceiveDataOnly(&ret,sizeof(ret));
if (ret!=FAIL)
dataSocket->ReceiveDataOnly(&retval,sizeof(retval));
else{
dataSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Receiver returned error: " << mess << std::endl;
}
dataSocket->Disconnect();
if (ret==FORCE_UPDATE)
updateReceiver();
}
}
}else
std::cout << "cannot connect to receiver" << endl;
ret=thisReceiver->sendInt(fnum,retval,arg);
if(ret==FORCE_UPDATE)
updateReceiver();
}
return retval;
}
@@ -5795,30 +5672,15 @@ string slsDetector::getReceiverLastClientIP(){
int fnum=F_GET_LAST_CLIENT_IP;
int ret = FAIL;
char retval[INET_ADDRSTRLEN]="";
char mess[100];
if(setReceiverOnline(ONLINE_FLAG)!=ONLINE_FLAG){
#ifdef VERBOSE
std::cout << "Geting Last Client IP connected to Receiver " << std::endl;
#endif
if (dataSocket) {
if (dataSocket->Connect()>=0) {
dataSocket->SendDataOnly(&fnum,sizeof(fnum));
dataSocket->ReceiveDataOnly(&ret,sizeof(ret));
if (ret!=FAIL)
dataSocket->ReceiveDataOnly(retval,sizeof(retval));
else{
dataSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Receiver returned error: " << mess << std::endl;
}
dataSocket->Disconnect();
if (ret==FORCE_UPDATE)
updateReceiver();
}
}
}else
std::cout << "cannot connect to receiver" << endl;
ret=thisReceiver->getLastClientIP(fnum,retval);
if(ret==FORCE_UPDATE)
updateReceiver();
}
return string(retval);
}
@@ -5837,7 +5699,6 @@ int slsDetector::updateReceiverNoWait() {
#ifdef VERBOSE
cout << "Updating receiver last modified by " << lastClientIP << std::endl;
#endif
n = dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
fileIO::setFileIndex(ind);
n = dataSocket->ReceiveDataOnly(path,MAX_STR_LENGTH);
@@ -13,6 +13,8 @@
#include "angleConversionConstant.h";
#include "receiverInterface.h"
/**
*
@@ -1437,7 +1439,10 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
*/
int stopReceiver();
int DetectorStopReceiver();
/** Sets(false) or Resets(true) the CPU bit in detector
\returns OK or FAIL
*/
int detectorSendToReceiver(bool set);
/** gets the status of the listening mode of receiver
\returns status
@@ -1488,7 +1493,7 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
/**
*
* parent multi detector
* */
multiSlsDetector *parentDet;
@@ -1534,6 +1539,8 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
/** pointer to channal registers */
int *chanregs;
receiverInterface *thisReceiver;
/** Initializes the shared memory
\param type is needed to define the size of the shared memory
\param id is the detector id needed to define the shared memory id
@@ -774,7 +774,7 @@ string slsDetectorCommand::cmdAcquire(int narg, char *args[], int action) {
myDet->setOnline(ONLINE_FLAG);
bool receiver=myDet->setReceiverOnline();
bool receiver=(myDet->setReceiverOnline()==ONLINE_FLAG);
if(receiver)
if(myDet->startReceiver()==OK)