- First working version of counter driver for ECB
- Motor driver works for normal, control and encoder motors
This commit is contained in:
64
counter.c
64
counter.c
@ -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 */
|
||||
}
|
||||
|
Reference in New Issue
Block a user