From 1673da0854a7821bd6f8ddb22ec801e0bd59f628 Mon Sep 17 00:00:00 2001 From: bergamaschi Date: Wed, 13 Nov 2013 11:59:35 +0000 Subject: [PATCH] fixed mismatch between slsDetectorCommand and slsDetectorUsers when setting the timing mode git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@684 951219d9-93cf-4727-9268-0efd64621fa3 --- .../slsDetector/slsDetector.cpp | 21 +-- .../slsDetector/slsDetectorBase.h | 4 +- .../slsDetector/slsDetectorCommand.cpp | 134 +++++++++++++++--- .../slsDetector/slsDetectorUsers.cpp | 2 + 4 files changed, 127 insertions(+), 34 deletions(-) diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index da491597c..fd030e73c 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -1912,19 +1912,22 @@ int slsDetector::readRegister(int addr){ std::cout<< "Reading register "<< hex<onlineFlag==ONLINE_FLAG) { - if (connectControl() == OK){ - controlSocket->SendDataOnly(&fnum,sizeof(fnum)); - controlSocket->SendDataOnly(&arg,sizeof(arg)); - controlSocket->ReceiveDataOnly(&ret,sizeof(ret)); + // if (connectControl() == OK){ + if (stopSocket) { + if (stopSocket->Connect()>=0) { + stopSocket->SendDataOnly(&fnum,sizeof(fnum)); + stopSocket->SendDataOnly(&arg,sizeof(arg)); + stopSocket->ReceiveDataOnly(&ret,sizeof(ret)); if (ret!=FAIL) - controlSocket->ReceiveDataOnly(&retval,sizeof(retval)); + stopSocket->ReceiveDataOnly(&retval,sizeof(retval)); else { - controlSocket->ReceiveDataOnly(mess,sizeof(mess)); + stopSocket->ReceiveDataOnly(mess,sizeof(mess)); std::cout<< "Detector returned error: " << mess << std::endl; } - controlSocket->Disconnect(); - if (ret==FORCE_UPDATE) - updateDetector(); + stopSocket->Disconnect(); + // if (ret==FORCE_UPDATE) + // updateDetector(); + } } } #ifdef VERBOSE diff --git a/slsDetectorSoftware/slsDetector/slsDetectorBase.h b/slsDetectorSoftware/slsDetector/slsDetectorBase.h index 241bf0552..bd5060f52 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorBase.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorBase.h @@ -48,6 +48,7 @@ #include "sls_detector_defs.h" +#include "slsDetectorUsers.h" #include "error_defs.h" #include @@ -392,8 +393,7 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef \returns current external communication mode */ virtual externalCommunicationMode setExternalCommunicationMode(externalCommunicationMode pol=GET_EXTERNAL_COMMUNICATION_MODE)=0; - int setTimingMode(int i=-1){return (int)setExternalCommunicationMode((externalCommunicationMode)i);}; - + int setTimingMode(int i=-1){return slsDetectorUsers::getTimingMode( externalCommunicationType( setExternalCommunicationMode(externalCommunicationType( slsDetectorUsers::getTimingMode(i) ) ) ) );}; virtual int setThresholdEnergy(int e_eV, int imod, detectorSettings isettings=GET_SETTINGS)=0; int setThresholdEnergy(int e_eV){return setThresholdEnergy(e_eV,-1);}; diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index a6b7ca1dd..c552bf5c9 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -455,6 +455,27 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) { descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdRegister; i++; + descrToFuncMap[i].m_pFuncName="setbit"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdRegister; + i++; + + descrToFuncMap[i].m_pFuncName="clearbit"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdRegister; + i++; + + descrToFuncMap[i].m_pFuncName="getbit"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdRegister; + i++; + + + + + + + + + + /* settings, threshold */ descrToFuncMap[i].m_pFuncName="settings"; // @@ -3029,38 +3050,105 @@ string slsDetectorCommand::cmdRegister(int narg, char *args[], int action) { if (action==HELP_ACTION) return helpRegister(narg, args, action); - int addr, val; + int addr, val,n; char answer[1000]; myDet->setOnline(ONLINE_FLAG); + + // "reg" // + + // "setbit" // + + // "clearbit" // + + // "getbit" // + + + if (action==PUT_ACTION) { - if(narg<3) - return string("wrong usage: should specify both address and value (hexadecimal fomat) "); + if (cmd=="getbit") + return string("Cannot put"); + + if(narg<3) { + if (cmd=="reg") + return string("wrong usage: should specify both address and value (hexadecimal fomat) "); + else + return string("wrong usage: should specify both address (hexadecimal fomat) and bit number"); + + } + if (sscanf(args[1],"%x",&addr)) ; else return string("Could not scan address (hexadecimal fomat) ")+string(args[1]); + - if (sscanf(args[2],"%x",&val)) - ; - else - return string("Could not scan value (hexadecimal fomat) ")+string(args[2]); - - - sprintf(answer,"%x",myDet->writeRegister(addr,val)); - - } else { - if (narg<2) - return string("wrong usage: should specify address (hexadecimal fomat) "); - if (sscanf(args[1],"%x",&addr)) - ; - else - return string("Could not scan address (hexadecimal fomat) ")+string(args[1]); - - - sprintf(answer,"%x",myDet->readRegister(addr)); + if (cmd=="reg") { + if (sscanf(args[2],"%x",&val)) + ; + else + return string("Could not scan value (hexadecimal fomat) ")+string(args[2]); + sprintf(answer,"%x",myDet->writeRegister(addr,val)); + } else { + if (sscanf(args[2],"%d",&n)) + ; + else + return string("Could not scan bit number ")+string(args[2]); + + if (n<0 || n>31) + return string("Bit number out of range")+string(args[2]); + + if (cmd=="setbit") + sprintf(answer,"%x",myDet->writeRegister(addr,myDet->readRegister(addr)| 1<writeRegister(addr,myDet->readRegister(addr) & ~(1<readRegister(addr)); + + } + + if (cmd=="getbit") { + + if(narg<3) + return string("wrong usage: should specify both address (hexadecimal fomat) and bit number"); + + + if (sscanf(args[1],"%x",&addr)) + ; + else + return string("Could not scan address (hexadecimal fomat) ")+string(args[1]); + + if (sscanf(args[2],"%d",&n)) + ; + else + return string("Could not scan bit number ")+string(args[2]); + + if (n<0 || n>31) + return string("Bit number out of range")+string(args[2]); + + + sprintf(answer,"%d",(myDet->readRegister(addr) >> n) & 1); + } } return string(answer); @@ -3404,9 +3492,9 @@ string slsDetectorCommand::helpTiming(int narg, char *args[], int action){ ostringstream os; if (action==GET_ACTION || action==HELP_ACTION) - os << string("sync \t gets the synchronization mode of the structure\n"); + os << string("timing \t gets the timing mode of the detector (auto, trigger, ro_trigger, gating, triggered_gating)\n"); if (action==PUT_ACTION || action==HELP_ACTION) - os << string("sync mode \t sets synchronization mode of the structure. Cane be none, gating, trigger, complementary \n"); + os << string("timing mode \t sets synchronization mode of the detector. Can be auto, trigger, ro_trigger, gating, triggered_gating \n"); return os.str(); } diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUsers.cpp b/slsDetectorSoftware/slsDetector/slsDetectorUsers.cpp index 4642ce798..47c18b5bb 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUsers.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorUsers.cpp @@ -178,6 +178,8 @@ double slsDetectorUsers::setDelayAfterTrigger(double t, bool inseconds){ return ((1E-9) * (double)myDetector->setDelayAfterTrigger(tms)); } + + int64_t slsDetectorUsers::setNumberOfGates(int64_t t){ return myDetector->setNumberOfGates(t); }