- Adapted indenation to new agreed upon system

- Added support for second generation scriptcontext based counter
This commit is contained in:
koennecke
2009-02-13 09:00:03 +00:00
parent a3dcad2bfa
commit 91d4af0541
405 changed files with 88101 additions and 88173 deletions

507
simchop.c
View File

@ -23,305 +23,276 @@
#define FAILRATE 0.00005
#define WARNRATE 0.00001
/*-----------------------------------------------------------------------*/
typedef struct {
time_t tTarget;
float fRot;
float fPhase;
float fRatio;
int iError;
int iStop;
}ChopPriv, *pChopPriv;
typedef struct {
time_t tTarget;
float fRot;
float fPhase;
float fRatio;
int iError;
int iStop;
} ChopPriv, *pChopPriv;
/*------------------------------------------------------------------------*/
static float SimRandom(void)
{
float fVal;
fVal = ( (float) rand() / (float)RAND_MAX) * 100.0;
return fVal;
}
static float SimRandom(void)
{
float fVal;
fVal = ((float) rand() / (float) RAND_MAX) * 100.0;
return fVal;
}
/*--------------- Driver functions ---------------------------------------*/
static int SDInit(pCodri self)
{
return 1;
}
static int SDInit(pCodri self)
{
return 1;
}
/*--------------------------------------------------------------------- */
static int SDClose(pCodri self)
{
return 1;
}
static int SDClose(pCodri self)
{
return 1;
}
/*-----------------------------------------------------------------------*/
static int SDDelete(pCodri self)
{
if(self->pParList)
free(self->pParList);
if(self->pPrivate)
free(self->pPrivate);
return 1;
}
static int SDDelete(pCodri self)
{
if (self->pParList)
free(self->pParList);
if (self->pPrivate)
free(self->pPrivate);
return 1;
}
/*----------------------------------------------------------------------*/
static int SDHalt(pCodri self)
{
pChopPriv pPriv = NULL;
static int SDHalt(pCodri self)
{
pChopPriv pPriv = NULL;
assert(self);
pPriv = (pChopPriv)self->pPrivate;
assert(pPriv);
assert(self);
pPriv = (pChopPriv) self->pPrivate;
assert(pPriv);
pPriv->iStop = 1;
return 1;
}
pPriv->iStop = 1;
return 1;
}
/*-----------------------------------------------------------------------*/
static int SDSetPar(pCodri self, char *parname, float fValue)
{
pChopPriv pPriv = NULL;
static int SDSetPar(pCodri self, char *parname, float fValue)
{
pChopPriv pPriv = NULL;
assert(self);
pPriv = (pChopPriv)self->pPrivate;
assert(pPriv);
assert(self);
pPriv = (pChopPriv) self->pPrivate;
assert(pPriv);
/* clear stop flag */
pPriv->iStop = 0;
/* clear stop flag */
pPriv->iStop = 0;
if (strcmp(parname, "speed") == 0) {
pPriv->fRot = fValue;
pPriv->tTarget = time(NULL) + 20;
return 1;
} else if (strcmp(parname, "phase") == 0) {
pPriv->fPhase = fValue;
pPriv->tTarget = time(NULL) + 20;
return 1;
} else if (strcmp(parname, "ratio") == 0) {
pPriv->fRatio = fValue;
pPriv->tTarget = time(NULL) + 20;
return 1;
} else {
pPriv->iError = UNKNOWNPAR;
return 0;
}
}
if(strcmp(parname,"speed") == 0)
{
pPriv->fRot = fValue;
pPriv->tTarget = time(NULL) + 20;
return 1;
}
else if(strcmp(parname,"phase") == 0)
{
pPriv->fPhase = fValue;
pPriv->tTarget = time(NULL) + 20;
return 1;
}
else if(strcmp(parname,"ratio") == 0)
{
pPriv->fRatio = fValue;
pPriv->tTarget = time(NULL) + 20;
return 1;
}
else
{
pPriv->iError = UNKNOWNPAR;
return 0;
}
}
/*------------------------------------------------------------------------*/
static int SDSetPar2(pCodri self, char *parname, char *pValue)
{
pChopPriv pPriv = NULL;
static int SDSetPar2(pCodri self, char *parname, char *pValue)
{
pChopPriv pPriv = NULL;
assert(self);
pPriv = (pChopPriv)self->pPrivate;
assert(pPriv);
assert(self);
pPriv = (pChopPriv) self->pPrivate;
assert(pPriv);
pPriv->iError = UNKNOWNPAR;
return 0;
}
/*-------------------------------------------------------------------------*/
static int SDGetPar(pCodri self, char *parname, char *pBuffer, int iBufLen)
{
pChopPriv pPriv = NULL;
float fFail;
char pBueffel[50];
assert(self);
pPriv = (pChopPriv) self->pPrivate;
assert(pPriv);
/* failure calculation first, we do so randomly in order to
check error processing code
*/
fFail = SimRandom();
if (fFail < WARNRATE) {
pPriv->iError = RANDOMWARNING;
return 0;
}
if (fFail < FAILRATE) {
pPriv->iError = RANDOMERROR;
return 0;
}
/* are we busy driving something? */
if (time(NULL) < pPriv->tTarget) {
if (strcmp(parname, "speed") == 0) {
sprintf(pBueffel, "%f", pPriv->fRot - 1.);
} else if (strcmp(parname, "phase") == 0) {
sprintf(pBueffel, "%f", pPriv->fPhase - 1.);
} else if (strcmp(parname, "ratio") == 0) {
sprintf(pBueffel, "%f", pPriv->fRatio - 1.);
} else {
pPriv->iError = UNKNOWNPAR;
return 0;
}
/*-------------------------------------------------------------------------*/
static int SDGetPar(pCodri self, char *parname, char *pBuffer, int iBufLen)
{
pChopPriv pPriv = NULL;
float fFail;
char pBueffel[50];
return 0;
}
strncpy(pBuffer, pBueffel, iBufLen);
return 1;
}
assert(self);
pPriv = (pChopPriv)self->pPrivate;
assert(pPriv);
/* all normal */
if (strcmp(parname, "speed") == 0) {
sprintf(pBueffel, "%f", pPriv->fRot);
} else if (strcmp(parname, "phase") == 0) {
sprintf(pBueffel, "%f", pPriv->fPhase);
} else if (strcmp(parname, "ratio") == 0) {
sprintf(pBueffel, "%f", pPriv->fRatio);
} else {
pPriv->iError = UNKNOWNPAR;
return 0;
}
strncpy(pBuffer, pBueffel, iBufLen);
return 1;
}
/* failure calculation first, we do so randomly in order to
check error processing code
*/
fFail = SimRandom();
if(fFail < WARNRATE)
{
pPriv->iError = RANDOMWARNING;
return 0;
}
if(fFail < FAILRATE)
{
pPriv->iError = RANDOMERROR;
return 0;
}
/* are we busy driving something? */
if(time(NULL) < pPriv->tTarget)
{
if(strcmp(parname,"speed") == 0)
{
sprintf(pBueffel,"%f",pPriv->fRot - 1.);
}
else if(strcmp(parname,"phase") == 0)
{
sprintf(pBueffel,"%f",pPriv->fPhase - 1.);
}
else if(strcmp(parname,"ratio") == 0)
{
sprintf(pBueffel,"%f",pPriv->fRatio - 1.);
}
else
{
pPriv->iError = UNKNOWNPAR;
return 0;
}
strncpy(pBuffer,pBueffel,iBufLen);
return 1;
}
/* all normal */
if(strcmp(parname,"speed") == 0)
{
sprintf(pBueffel,"%f",pPriv->fRot);
}
else if(strcmp(parname,"phase") == 0)
{
sprintf(pBueffel,"%f",pPriv->fPhase);
}
else if(strcmp(parname,"ratio") == 0)
{
sprintf(pBueffel,"%f",pPriv->fRatio);
}
else
{
pPriv->iError = UNKNOWNPAR;
return 0;
}
strncpy(pBuffer,pBueffel,iBufLen);
return 1;
}
/*------------------------------------------------------------------------*/
static int SDCheckPar(pCodri self, char *parname)
{
pChopPriv pPriv = NULL;
float fFail;
static int SDCheckPar(pCodri self, char *parname)
{
pChopPriv pPriv = NULL;
float fFail;
assert(self);
pPriv = (pChopPriv)self->pPrivate;
assert(pPriv);
assert(self);
pPriv = (pChopPriv) self->pPrivate;
assert(pPriv);
/*
throw a HWFalut when stopped */
if(pPriv->iStop)
{
pPriv->iError = STOPPED;
return HWFault;
}
/*
throw a HWFalut when stopped */
if (pPriv->iStop) {
pPriv->iError = STOPPED;
return HWFault;
}
/* failure calculation first, we do so randomly in order to
check error processing code
*/
fFail = SimRandom();
if (fFail < WARNRATE) {
pPriv->iError = RANDOMWARNING;
return HWFault;
}
if (fFail < FAILRATE) {
pPriv->iError = RANDOMERROR;
return HWFault;
}
/* are we busy driving something? */
if (time(NULL) < pPriv->tTarget) {
return HWBusy;
}
return HWIdle;
}
/* failure calculation first, we do so randomly in order to
check error processing code
*/
fFail = SimRandom();
if(fFail < WARNRATE)
{
pPriv->iError = RANDOMWARNING;
return HWFault;
}
if(fFail < FAILRATE)
{
pPriv->iError = RANDOMERROR;
return HWFault;
}
/* are we busy driving something? */
if(time(NULL) < pPriv->tTarget)
{
return HWBusy;
}
return HWIdle;
}
/*-----------------------------------------------------------------------*/
static int SDGetError(pCodri self, int *iCode, char *pError, int iErrLen)
{
pChopPriv pPriv = NULL;
static int SDGetError(pCodri self, int *iCode, char *pError, int iErrLen)
{
pChopPriv pPriv = NULL;
assert(self);
pPriv = (pChopPriv)self->pPrivate;
assert(pPriv);
assert(self);
pPriv = (pChopPriv) self->pPrivate;
assert(pPriv);
*iCode = pPriv->iError;
*iCode = pPriv->iError;
switch (pPriv->iError) {
case UNKNOWNPAR:
strncpy(pError, "Parameter Unknown", iErrLen);
break;
case RANDOMWARNING:
strncpy(pError, "Random non deadly error", iErrLen);
break;
case RANDOMERROR:
strncpy(pError, "Random DEADLY Error", iErrLen);
break;
case STOPPED:
strncpy(pError, "User initiated STOP", iErrLen);
break;
default:
strncpy(pError, "Unknown error code", iErrLen);
break;
}
return 1;
}
switch(pPriv->iError)
{
case UNKNOWNPAR:
strncpy(pError,"Parameter Unknown",iErrLen);
break;
case RANDOMWARNING:
strncpy(pError,"Random non deadly error",iErrLen);
break;
case RANDOMERROR:
strncpy(pError,"Random DEADLY Error",iErrLen);
break;
case STOPPED:
strncpy(pError,"User initiated STOP",iErrLen);
break;
default:
strncpy(pError,"Unknown error code",iErrLen);
break;
}
return 1;
}
/*-------------------------------------------------------------------------*/
static int SDTryFixIt(pCodri self, int iCode)
{
pChopPriv pPriv = NULL;
static int SDTryFixIt(pCodri self, int iCode)
{
pChopPriv pPriv = NULL;
assert(self);
pPriv = (pChopPriv)self->pPrivate;
assert(pPriv);
assert(self);
pPriv = (pChopPriv) self->pPrivate;
assert(pPriv);
switch (iCode) {
case UNKNOWNPAR:
case RANDOMERROR:
case STOPPED:
return CHFAIL;
case RANDOMWARNING:
return CHREDO;
default:
break;
}
return CHFAIL;
}
switch(iCode)
{
case UNKNOWNPAR:
case RANDOMERROR:
case STOPPED:
return CHFAIL;
case RANDOMWARNING:
return CHREDO;
default:
break;
}
return CHFAIL;
}
/*------------------------------------------------------------------------*/
pCodri MakeSimChopper(void)
{
pCodri pNew = NULL;
pChopPriv pPriv = NULL;
/* allocate space */
pNew = (pCodri)malloc(sizeof(Codri));
pPriv = (pChopPriv)malloc(sizeof(ChopPriv));
memset(pPriv,0,sizeof(ChopPriv));
pPriv->tTarget = time(NULL);
if( (pPriv == NULL) || (pNew == NULL) )
{
return NULL;
}
/* initialize this thing */
pNew->Init = SDInit;
pNew->Close = SDClose;
pNew->Delete = SDDelete;
pNew->SetPar = SDSetPar;
pNew->SetPar2 = SDSetPar2;
pNew->GetPar = SDGetPar;
pNew->CheckPar = SDCheckPar;
pNew->GetError = SDGetError;
pNew->TryFixIt = SDTryFixIt;
pNew->Halt = SDHalt;
pNew->pParList = strdup("speed,phase,ratio");
pNew->pPrivate = pPriv;
return pNew;
}
pCodri MakeSimChopper(void)
{
pCodri pNew = NULL;
pChopPriv pPriv = NULL;
/* allocate space */
pNew = (pCodri) malloc(sizeof(Codri));
pPriv = (pChopPriv) malloc(sizeof(ChopPriv));
memset(pPriv, 0, sizeof(ChopPriv));
pPriv->tTarget = time(NULL);
if ((pPriv == NULL) || (pNew == NULL)) {
return NULL;
}
/* initialize this thing */
pNew->Init = SDInit;
pNew->Close = SDClose;
pNew->Delete = SDDelete;
pNew->SetPar = SDSetPar;
pNew->SetPar2 = SDSetPar2;
pNew->GetPar = SDGetPar;
pNew->CheckPar = SDCheckPar;
pNew->GetError = SDGetError;
pNew->TryFixIt = SDTryFixIt;
pNew->Halt = SDHalt;
pNew->pParList = strdup("speed,phase,ratio");
pNew->pPrivate = pPriv;
return pNew;
}