PSI sics-cvs-psi-complete-tree-post-site-support
This commit is contained in:
94
counter.c
94
counter.c
@@ -5,13 +5,13 @@
|
||||
The SICS Interface to a single detector and his associated
|
||||
monitors.
|
||||
|
||||
|
||||
|
||||
Mark Koennecke, January 1997
|
||||
|
||||
Copyright:
|
||||
|
||||
Labor fuer Neutronenstreuung
|
||||
Paul Scherrer Institut
|
||||
Paul Scherrer Institut
|
||||
CH-5423 Villigen-PSI
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
#include "fupa.h"
|
||||
#include "status.h"
|
||||
#include "splitter.h"
|
||||
#include "ecbcounter.h"
|
||||
#include "site.h"
|
||||
/*-------------------------------------------------------------------------*/
|
||||
/*
|
||||
The monitor callback data structure
|
||||
@@ -104,6 +104,7 @@
|
||||
{
|
||||
self->isUpToDate = 0;
|
||||
self->tStart = time(&tX);
|
||||
InvokeCallBack(self->pCall,COUNTSTART,pCon);
|
||||
return iRet;
|
||||
}
|
||||
else
|
||||
@@ -154,7 +155,8 @@
|
||||
iRet = self->pDriv->TryAndFixIt(self->pDriv,iErr);
|
||||
if(iRet == COTERM)
|
||||
{
|
||||
SCWrite(pCon,"ERROR: Cannot fix counter problem, aborting",eError);
|
||||
SCWrite(pCon,"ERROR: Cannot fix counter problem, aborting",
|
||||
eError);
|
||||
SCSetInterrupt(pCon,eAbortBatch);
|
||||
return HWFault;
|
||||
}
|
||||
@@ -230,6 +232,7 @@
|
||||
{
|
||||
SCWrite(pCon,"ERROR: Cannot fix counter problem, aborting",eError);
|
||||
SCSetInterrupt(pCon,eAbortBatch);
|
||||
InvokeCallBack(self->pCall,COUNTEND,NULL);
|
||||
return eCt;
|
||||
}
|
||||
else
|
||||
@@ -237,6 +240,10 @@
|
||||
return HWBusy;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
handle count parameters and notify listeners on progress
|
||||
*/
|
||||
sMon.fCurrent = fControl;
|
||||
sMon.fPreset = self->pDriv->fPreset;
|
||||
sMon.pName = self->name;
|
||||
@@ -250,6 +257,14 @@
|
||||
self->iCallbackCounter++;
|
||||
}
|
||||
self->pDriv->fLastCurrent = fControl;
|
||||
|
||||
/*
|
||||
notification on finish
|
||||
*/
|
||||
if(eCt == HWIdle)
|
||||
{
|
||||
InvokeCallBack(self->pCall,COUNTEND,NULL);
|
||||
}
|
||||
return eCt;
|
||||
}
|
||||
/*------------------------------------------------------------------------*/
|
||||
@@ -411,22 +426,7 @@
|
||||
}
|
||||
if(self->pDriv)
|
||||
{
|
||||
if(strcmp(self->pDriv->type,"EL737") == 0)
|
||||
{
|
||||
KillEL737Counter(self->pDriv);
|
||||
}
|
||||
else if (strcmp(self->pDriv->type,"SIM") == 0)
|
||||
{
|
||||
KillSIMCounter(self->pDriv);
|
||||
}
|
||||
else if(strcmp(self->pDriv->type,"ecb") == 0)
|
||||
{
|
||||
KillECBCounter(self->pDriv);
|
||||
}
|
||||
else
|
||||
{
|
||||
assert(0);
|
||||
}
|
||||
DeleteCounterDriver(self->pDriv);
|
||||
}
|
||||
free(self);
|
||||
}
|
||||
@@ -488,6 +488,7 @@
|
||||
SetStatus(eOld);
|
||||
return iRet;
|
||||
}
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
@@ -496,46 +497,35 @@
|
||||
{
|
||||
pCounter pNew = NULL;
|
||||
pCounterDriver pDriv = NULL;
|
||||
float fFail = -1;
|
||||
int iRet;
|
||||
char pBueffel[256];
|
||||
char **argx;
|
||||
FuPaResult pParse;
|
||||
FuncTemplate MakeTemplate[] = {
|
||||
{"el737",3,{FUPATEXT,FUPAINT,FUPAINT}},
|
||||
{"sim",1,{FUPAFLOAT}},
|
||||
{"ecb",1,{FUPATEXT}}
|
||||
};
|
||||
pSite site = NULL;
|
||||
|
||||
assert(pCon);
|
||||
assert(pSics);
|
||||
|
||||
argtolower(argc,argv);
|
||||
/* parse function template */
|
||||
argx = &argv[2]; /* 0 = MakeCounter, 1 = counter name */
|
||||
iRet = EvaluateFuPa((pFuncTemplate)&MakeTemplate,3,argc-2,argx,&pParse);
|
||||
if(iRet < 0) /* I/O error */
|
||||
{
|
||||
sprintf(pBueffel,"%s",pParse.pError);
|
||||
SCWrite(pCon,pBueffel,eError);
|
||||
argtolower(argc,argv);
|
||||
if(argc < 3){
|
||||
SCWrite(pCon,"ERROR: insuficient number of arguments to MakeCounter",
|
||||
eError);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* create driver depending on parse result */
|
||||
switch(iRet)
|
||||
{
|
||||
case 0: /* EL737 driver */
|
||||
pDriv = NewEL737Counter(argv[1],pParse.Arg[0].text,
|
||||
pParse.Arg[1].iVal,pParse.Arg[2].iVal);
|
||||
break;
|
||||
case 1: /* SIM */
|
||||
pDriv = NewSIMCounter(argv[1],pParse.Arg[0].fVal);
|
||||
break;
|
||||
case 2: /* ecb */
|
||||
pDriv = MakeECBCounter(pParse.Arg[0].text);
|
||||
break;
|
||||
default:
|
||||
assert(0); /* internal error */
|
||||
site = getSite();
|
||||
if(site != NULL){
|
||||
pDriv = site->CreateCounterDriver(pCon,argc,argv);
|
||||
}
|
||||
|
||||
/*
|
||||
test for simulation driver, which is for everybody
|
||||
*/
|
||||
if(strcmp(argv[2],"sim") == 0){
|
||||
if(argc > 3){
|
||||
fFail = atof(argv[3]);
|
||||
pDriv = NewSIMCounter(argv[1],fFail);
|
||||
}
|
||||
}
|
||||
|
||||
if(!pDriv)
|
||||
{
|
||||
sprintf(pBueffel,"ERROR: cannot create requested driver %s",
|
||||
@@ -743,7 +733,7 @@
|
||||
{"setexponent",1,{FUPAINT,0}},
|
||||
{"getexponent",0,{0,0}},
|
||||
{"interest",0,{0,0}},
|
||||
{"uninterest",0,{0,0}},
|
||||
{"uninterest",0,{0,0}},
|
||||
{"status",0,{0,0}},
|
||||
{"gettime",0,{0,0}},
|
||||
{"countnb",1,{FUPAFLOAT} },
|
||||
|
||||
Reference in New Issue
Block a user