- Adapted indenation to new agreed upon system
- Added support for second generation scriptcontext based counter
This commit is contained in:
431
regresscter.c
431
regresscter.c
@ -26,237 +26,260 @@
|
||||
#define STATEPAU 2
|
||||
/*--------------------------------------------------------------------------*/
|
||||
typedef struct {
|
||||
int errType;
|
||||
int recover;
|
||||
int state;
|
||||
time_t endTime;
|
||||
int errType;
|
||||
int recover;
|
||||
int state;
|
||||
time_t endTime;
|
||||
} RegressSt;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static int RegressGetStatus(struct __COUNTER *self, float *fControl){
|
||||
RegressSt *pSim = NULL;
|
||||
time_t tD, tDe;
|
||||
int iRun;
|
||||
static int RegressGetStatus(struct __COUNTER *self, float *fControl)
|
||||
{
|
||||
RegressSt *pSim = NULL;
|
||||
time_t tD, tDe;
|
||||
int iRun;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
if(pSim->errType == STATUSFAIL){
|
||||
return HWFault;
|
||||
}
|
||||
if(time(NULL) > pSim->endTime){
|
||||
pSim->state = STATEIDLE;
|
||||
}
|
||||
switch(pSim->state){
|
||||
case STATEIDLE:
|
||||
return HWIdle;
|
||||
break;
|
||||
case STATERUN:
|
||||
return HWBusy;
|
||||
break;
|
||||
case STATEPAU:
|
||||
return HWPause;
|
||||
break;
|
||||
}
|
||||
assert(0);
|
||||
if (pSim->errType == STATUSFAIL) {
|
||||
return HWFault;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static int RegressStart(struct __COUNTER *self){
|
||||
RegressSt *pSim = NULL;
|
||||
time_t tD;
|
||||
int iRun;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
if(pSim->errType == STARTFAIL){
|
||||
return HWFault;
|
||||
}
|
||||
pSim->state = STATERUN;
|
||||
if(self->eMode == eTimer){
|
||||
pSim->endTime = time(NULL) + (int)self->fPreset;
|
||||
} else {
|
||||
pSim->endTime = time(NULL) + 7;
|
||||
}
|
||||
|
||||
return OKOK;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static int RegressPause(struct __COUNTER *self){
|
||||
RegressSt *pSim = NULL;
|
||||
time_t tD;
|
||||
int iRun;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
if(pSim->errType == PAUSEFAIL){
|
||||
return HWFault;
|
||||
}
|
||||
|
||||
pSim->state = STATEPAU;
|
||||
|
||||
return OKOK;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static int RegressContinue(struct __COUNTER *self){
|
||||
RegressSt *pSim = NULL;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
if(pSim->errType == CONTFAIL){
|
||||
return HWFault;
|
||||
}
|
||||
|
||||
pSim->state = STATERUN;
|
||||
|
||||
return OKOK;
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
static int RegressHalt(struct __COUNTER *self){
|
||||
RegressSt *pSim = NULL;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
}
|
||||
if (time(NULL) > pSim->endTime) {
|
||||
pSim->state = STATEIDLE;
|
||||
}
|
||||
switch (pSim->state) {
|
||||
case STATEIDLE:
|
||||
return HWIdle;
|
||||
break;
|
||||
case STATERUN:
|
||||
return HWBusy;
|
||||
break;
|
||||
case STATEPAU:
|
||||
return HWPause;
|
||||
break;
|
||||
}
|
||||
assert(0);
|
||||
return HWFault;
|
||||
}
|
||||
|
||||
return OKOK;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static int RegressStart(struct __COUNTER *self)
|
||||
{
|
||||
RegressSt *pSim = NULL;
|
||||
time_t tD;
|
||||
int iRun;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
if (pSim->errType == STARTFAIL) {
|
||||
return HWFault;
|
||||
}
|
||||
pSim->state = STATERUN;
|
||||
if (self->eMode == eTimer) {
|
||||
pSim->endTime = time(NULL) + (int) self->fPreset;
|
||||
} else {
|
||||
pSim->endTime = time(NULL) + 7;
|
||||
}
|
||||
|
||||
return OKOK;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static int RegressPause(struct __COUNTER *self)
|
||||
{
|
||||
RegressSt *pSim = NULL;
|
||||
time_t tD;
|
||||
int iRun;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
if (pSim->errType == PAUSEFAIL) {
|
||||
return HWFault;
|
||||
}
|
||||
|
||||
pSim->state = STATEPAU;
|
||||
|
||||
return OKOK;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static int RegressContinue(struct __COUNTER *self)
|
||||
{
|
||||
RegressSt *pSim = NULL;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
if (pSim->errType == CONTFAIL) {
|
||||
return HWFault;
|
||||
}
|
||||
|
||||
pSim->state = STATERUN;
|
||||
|
||||
return OKOK;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
static int RegressHalt(struct __COUNTER *self)
|
||||
{
|
||||
RegressSt *pSim = NULL;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
pSim->state = STATEIDLE;
|
||||
|
||||
return OKOK;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
static int RegressReadValues(struct __COUNTER *self){
|
||||
RegressSt *pSim = NULL;
|
||||
int i;
|
||||
static int RegressReadValues(struct __COUNTER *self)
|
||||
{
|
||||
RegressSt *pSim = NULL;
|
||||
int i;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
if(pSim->errType == READFAIL){
|
||||
return HWFault;
|
||||
}
|
||||
|
||||
for (i = 0; i < MAXCOUNT; i++) {
|
||||
self->lCounts[i] = i*10+5;
|
||||
}
|
||||
self->lCounts[1] = self->fPreset;
|
||||
self->fTime = self->fPreset;
|
||||
return OKOK;
|
||||
if (pSim->errType == READFAIL) {
|
||||
return HWFault;
|
||||
}
|
||||
|
||||
for (i = 0; i < MAXCOUNT; i++) {
|
||||
self->lCounts[i] = i * 10 + 5;
|
||||
}
|
||||
self->lCounts[1] = self->fPreset;
|
||||
self->fTime = self->fPreset;
|
||||
return OKOK;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
static int RegressGetError(struct __COUNTER *self, int *iCode, char *error,
|
||||
int iErrLen){
|
||||
strncpy(error, "Regression counter error", iErrLen);
|
||||
*iCode = 1;
|
||||
int iErrLen)
|
||||
{
|
||||
strncpy(error, "Regression counter error", iErrLen);
|
||||
*iCode = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
static int RegressTryAndFixIt(struct __COUNTER *self, int iCode)
|
||||
{
|
||||
RegressSt *pSim = NULL;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
if (pSim->recover == 1) {
|
||||
pSim->errType = NONE;
|
||||
return COREDO;
|
||||
} else {
|
||||
return COTERM;
|
||||
}
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
static int RegressSet(struct __COUNTER *self, char *name, int iCter,
|
||||
float FVal)
|
||||
{
|
||||
RegressSt *pSim = NULL;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
if (strcmp(name, "errortype") == 0) {
|
||||
pSim->errType = (int) FVal;
|
||||
return 1;
|
||||
}
|
||||
if (strcmp(name, "recover") == 0) {
|
||||
pSim->recover = (int) FVal;
|
||||
return 1;
|
||||
}
|
||||
if (strcmp(name, "finish") == 0) {
|
||||
pSim->state = STATEIDLE;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
static int RegressTryAndFixIt(struct __COUNTER *self, int iCode){
|
||||
RegressSt *pSim = NULL;
|
||||
static int RegressGet(struct __COUNTER *self, char *name,
|
||||
int iCter, float *fVal)
|
||||
{
|
||||
RegressSt *pSim = NULL;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
if(pSim->recover == 1){
|
||||
pSim->errType = NONE;
|
||||
return COREDO;
|
||||
} else {
|
||||
return COTERM;
|
||||
}
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
if (strcmp(name, "errortype") == 0) {
|
||||
*fVal = pSim->errType;
|
||||
return 1;
|
||||
}
|
||||
if (strcmp(name, "recover") == 0) {
|
||||
*fVal = pSim->recover;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
static int RegressSet(struct __COUNTER *self, char *name, int iCter, float FVal){
|
||||
RegressSt *pSim = NULL;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
if(strcmp(name,"errortype") == 0){
|
||||
pSim->errType = (int)FVal;
|
||||
return 1;
|
||||
}
|
||||
if(strcmp(name,"recover") == 0){
|
||||
pSim->recover = (int)FVal;
|
||||
return 1;
|
||||
}
|
||||
if(strcmp(name,"finish") == 0){
|
||||
pSim->state = STATEIDLE;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
static int RegressGet(struct __COUNTER *self, char *name,
|
||||
int iCter, float *fVal){
|
||||
RegressSt *pSim = NULL;
|
||||
|
||||
assert(self);
|
||||
pSim = (RegressSt *) self->pData;
|
||||
assert(pSim);
|
||||
|
||||
if(strcmp(name,"errortype") == 0){
|
||||
*fVal = pSim->errType;
|
||||
return 1;
|
||||
}
|
||||
if(strcmp(name,"recover") == 0){
|
||||
*fVal = pSim->recover;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static int RegressSend(struct __COUNTER *self, char *pText,
|
||||
char *pReply, int iReplyLen){
|
||||
strncpy(pReply, "Simulated response", iReplyLen);
|
||||
return 1;
|
||||
char *pReply, int iReplyLen)
|
||||
{
|
||||
strncpy(pReply, "Simulated response", iReplyLen);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
pCounterDriver NewRegressCounter(char *name){
|
||||
pCounterDriver pRes = NULL;
|
||||
RegressSt *pData = NULL;
|
||||
int iRet;
|
||||
int iC1, iC2, iC3;
|
||||
char *pErr;
|
||||
char pBueffel[132];
|
||||
pCounterDriver NewRegressCounter(char *name)
|
||||
{
|
||||
pCounterDriver pRes = NULL;
|
||||
RegressSt *pData = NULL;
|
||||
int iRet;
|
||||
int iC1, iC2, iC3;
|
||||
char *pErr;
|
||||
char pBueffel[132];
|
||||
|
||||
pRes = CreateCounterDriver(name, "Regress");
|
||||
if (!pRes) {
|
||||
return NULL;
|
||||
}
|
||||
pRes = CreateCounterDriver(name, "Regress");
|
||||
if (!pRes) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pData = (RegressSt *) malloc(sizeof(RegressSt));
|
||||
if (!pData) {
|
||||
DeleteCounterDriver(pRes);
|
||||
return NULL;
|
||||
}
|
||||
memset(pData,0,sizeof(RegressSt));
|
||||
pRes->pData = pData;
|
||||
pData = (RegressSt *) malloc(sizeof(RegressSt));
|
||||
if (!pData) {
|
||||
DeleteCounterDriver(pRes);
|
||||
return NULL;
|
||||
}
|
||||
memset(pData, 0, sizeof(RegressSt));
|
||||
pRes->pData = pData;
|
||||
|
||||
/*
|
||||
* assign functions
|
||||
*/
|
||||
pRes->GetStatus = RegressGetStatus;
|
||||
pRes->Start = RegressStart;
|
||||
pRes->Halt = RegressHalt;
|
||||
pRes->ReadValues = RegressReadValues;
|
||||
pRes->GetError = RegressGetError;
|
||||
pRes->TryAndFixIt = RegressTryAndFixIt;
|
||||
pRes->Pause = RegressPause;
|
||||
pRes->Continue = RegressContinue;
|
||||
pRes->Set = RegressSet;
|
||||
pRes->Get = RegressGet;
|
||||
pRes->Send = RegressSend;
|
||||
pRes->KillPrivate = NULL;
|
||||
pRes->iNoOfMonitors = 8;
|
||||
/*
|
||||
* assign functions
|
||||
*/
|
||||
pRes->GetStatus = RegressGetStatus;
|
||||
pRes->Start = RegressStart;
|
||||
pRes->Halt = RegressHalt;
|
||||
pRes->ReadValues = RegressReadValues;
|
||||
pRes->GetError = RegressGetError;
|
||||
pRes->TryAndFixIt = RegressTryAndFixIt;
|
||||
pRes->Pause = RegressPause;
|
||||
pRes->Continue = RegressContinue;
|
||||
pRes->Set = RegressSet;
|
||||
pRes->Get = RegressGet;
|
||||
pRes->Send = RegressSend;
|
||||
pRes->KillPrivate = NULL;
|
||||
pRes->iNoOfMonitors = 8;
|
||||
|
||||
return pRes;
|
||||
return pRes;
|
||||
}
|
||||
|
Reference in New Issue
Block a user