PSI sics-cvs-psi-complete-tree-post-site-support

This commit is contained in:
2004-03-09 15:18:11 +00:00
committed by Douglas Clowes
parent 6373f6b0fb
commit ae77364de2
196 changed files with 8344 additions and 3485 deletions

View File

@@ -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} },