- First working version of counter driver for ECB

- Motor driver works for normal, control and encoder motors
This commit is contained in:
cvs
2003-01-29 07:42:18 +00:00
parent e4d4643123
commit b1fd8e77ac
9 changed files with 631 additions and 15 deletions

View File

@ -50,6 +50,7 @@
#include "fupa.h"
#include "status.h"
#include "splitter.h"
#include "ecbcounter.h"
/*-------------------------------------------------------------------------*/
/*
The monitor callback data structure
@ -419,6 +420,10 @@
{
KillSIMCounter(self->pDriv);
}
else if(strcmp(self->pDriv->type,"ecb") == 0)
{
KillECBCounter(self->pDriv);
}
else
{
assert(0);
@ -486,6 +491,7 @@
}
/*-------------------------------------------------------------------------*/
int MakeCounter(SConnection *pCon, SicsInterp *pSics, void *pData,
int argc, char *argv[])
{
@ -497,7 +503,8 @@
FuPaResult pParse;
FuncTemplate MakeTemplate[] = {
{"el737",3,{FUPATEXT,FUPAINT,FUPAINT}},
{"sim",1,{FUPAFLOAT}}
{"sim",1,{FUPAFLOAT}},
{"ecb",1,{FUPATEXT}}
};
assert(pCon);
@ -506,7 +513,7 @@
argtolower(argc,argv);
/* parse function template */
argx = &argv[2]; /* 0 = MakeCounter, 1 = counter name */
iRet = EvaluateFuPa((pFuncTemplate)&MakeTemplate,2,argc-2,argx,&pParse);
iRet = EvaluateFuPa((pFuncTemplate)&MakeTemplate,3,argc-2,argx,&pParse);
if(iRet < 0) /* I/O error */
{
sprintf(pBueffel,"%s",pParse.pError);
@ -524,6 +531,9 @@
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 */
}
@ -743,7 +753,9 @@
{"stop",0,{0,0}},
{"mode",1,{FUPAOPT}},
{"preset",1,{FUPAOPT}},
{"send",0,{0,0}}
{"send",0,{0,0}},
{"setpar",3,{FUPATEXT,FUPAINT,FUPAFLOAT}},
{"getpar",2,{FUPATEXT,FUPAOPT}}
};
char *pMode[] = {
"timer",
@ -759,7 +771,7 @@
/* parse function args */
argtolower(argc,argv);
argx = &argv[1];
iRet = EvaluateFuPa((pFuncTemplate)&ActionTemplate,20,argc-1,argx,&PaRes);
iRet = EvaluateFuPa((pFuncTemplate)&ActionTemplate,22,argc-1,argx,&PaRes);
if(iRet < 0)
{
sprintf(pBueffel,"%s",PaRes.pError);
@ -903,7 +915,7 @@
break;
case 14:
/* get threshold value */
iRet = self->pDriv->Get(self->pDriv,PARTHRESHOLD,
iRet = self->pDriv->Get(self->pDriv,"threshold",
PaRes.Arg[0].iVal,&fVal);
if(iRet <= 0)
{
@ -936,7 +948,7 @@
return 0;
}
/* set threshold value */
iRet = self->pDriv->Set(self->pDriv,PARTHRESHOLD,
iRet = self->pDriv->Set(self->pDriv,"threshold",
PaRes.Arg[0].iVal,PaRes.Arg[1].fVal);
if(iRet <= 0)
{
@ -1048,6 +1060,46 @@
return 0;
}
break;
case 20: /* setpar*/
if(!SCMatchRights(pCon,usMugger))
{
return 0;
}
iRet = self->pDriv->Set(self->pDriv,PaRes.Arg[0].text,
PaRes.Arg[1].iVal, PaRes.Arg[2].fVal);
if(iRet == 1)
{
SCSendOK(pCon);
return 1;
}
else
{
self->pDriv->GetError(self->pDriv,&iRet,pError,79);
SCWrite(pCon,pError,eError);
return 0;
}
break;
case 21: /* getpar*/
if(!SCMatchRights(pCon,usMugger))
{
return 0;
}
iRet = self->pDriv->Get(self->pDriv,PaRes.Arg[0].text,
PaRes.Arg[1].iVal, &fVal);
if(iRet == 1)
{
sprintf(pBueffel,"%s.%s %d = %f",argv[0],PaRes.Arg[0].text,
PaRes.Arg[1].iVal, fVal);
SCWrite(pCon,pBueffel,eValue);
return 1;
}
else
{
self->pDriv->GetError(self->pDriv,&iRet,pError,79);
SCWrite(pCon,pError,eError);
return 0;
}
break;
default:
assert(0); /* internal error */
}