- various improvements in SE drivers

This commit is contained in:
zolliker
2006-08-17 15:39:37 +00:00
parent 928738dbd8
commit ce25823567
19 changed files with 301 additions and 100 deletions

16
ease.c
View File

@ -44,6 +44,7 @@ EaseDriv *EaseDrivCast(void *object) {
/*----------------------------------------------------------------------------*/
void EaseStop(EaseBase *eab) {
FsmStop(eab->task, eab->idle);
closeRS232(eab->ser);
eab->state = EASE_notconnected;
}
/*----------------------------------------------------------------------------*/
@ -105,6 +106,7 @@ void EaseWrite(EaseBase *eab, char *cmd) {
snprintf(eab->msg, sizeof eab->msg,
"connection to %s:%d lost", eab->ser->pHost, eab->ser->iPort);
ParPrintf(eab, eError, "ERROR: %s", eab->msg);
closeRS232(eab->ser);
eab->state = EASE_notconnected;
eab->errCode = iRet;
return;
@ -205,9 +207,11 @@ int EaseHandler(EaseBase *eab) {
snprintf(eab->msg, sizeof eab->msg,
"connection for %s failed", eab->p.name);
ParPrintf(eab, eError, "%s", eab->msg);
closeRS232(eab->ser);
eab->state = EASE_notconnected;
return 0;
} else {
eab->tmo = 20;
snprintf(eab->msg, sizeof eab->msg,
"get a first answer from %s", eab->p.name);
eab->state = EASE_idle;
@ -345,7 +349,7 @@ int EaseUpdate(int flag) {
assert(flag >= 0);
assert(flag <= eab->maxflag);
eab->updateFlags[flag / EASE_FLAGBITS] |= 1 << (flag % EASE_FLAGBITS);
FsmSpeed(eab->task);
if (eab->task) FsmSpeed(eab->task);
return 1;
}
return 0;
@ -614,6 +618,7 @@ static int EaseInit(SConnection *pCon, EaseBase *eab, int argc, char *argv[],
eab->version[0] = '\0';
eab->maxflag = maxflag;
eab->sendCmd = NULL;
eab->tmo = 20;
eab->updateFlags = calloc(maxflag / EASE_FLAGBITS + 1, sizeof (*eab->updateFlags));
if (eab->updateFlags == NULL) {
SCWrite(pCon, "out of memory", eError);
@ -723,7 +728,14 @@ void *EaseMakeDriv(SConnection *con, void *class, int argc, char *argv[],
ead->drivInt->SetValue = EaseRun;
ead->drivInt->CheckStatus = EaseCheckStatus;
ead->drivInt->GetValue = EaseGetValue;
ead->maxwait = -1;
ead->lowerLimit = 0;
ead->upperLimit = 1000;
ead->settle = 0;
ead->tolerance = 1;
ead->targetValue = 0;
/* EMon interface to be implemented */
return ead;
}