This commit is contained in:
zolliker
2007-09-19 06:41:36 +00:00
parent b59af433e4
commit 4f4e539569
17 changed files with 883 additions and 61 deletions

52
ease.c
View File

@ -568,6 +568,50 @@ static int EaseCheckLimits(void *obj, float fVal, char *error, int errLen) {
return 1;
}
/*----------------------------------------------------------------------------*/
static int EaseStdHandler(void *object) {
int iret, l;
EaseBase *eab = EaseBaseCast(object);
char *corr;
assert(eab);
if (eab->state < EASE_idle) goto quit;
if (availableNetRS232(eab->ser) || availableRS232(eab->ser)) {
eab->msg[0] = '\0';
l = sizeof(eab->ans);
iret = readRS232TillTerm(eab->ser, eab->ans, &l);
if (eab->state != EASE_expect && eab->state != EASE_lost) {
if (iret == 1) {
ParPrintf(eab, eError, "unexpected answer: %s", eab->ans);
}
goto quit;
}
if (iret == 1) {
ParPrintf(eab, -2, "ans: %s", eab->ans);
if (eab->state == EASE_lost) {
goto quit;
} else {
eab->tmo = 120;
}
}
if (iret != 1) {
eab->errCode = iret;
eab->state = EASE_idle;
goto error;
}
eab->state = EASE_read;
} else if (eab->state == EASE_expect) {
if (time(NULL) > eab->cmdtime + eab->tmo) {
eab->state = EASE_lost;
}
} else if (eab->state == EASE_lost) {
}
goto quit;
error:
/* EaseWriteError(eab); */
quit:
return EaseHandler(eab);
}
/*----------------------------------------------------------------------------*/
static int EaseInit(SConnection *pCon, EaseBase *eab, int argc, char *argv[],
int maxflag,
FsmHandler handler,
@ -585,7 +629,10 @@ static int EaseInit(SConnection *pCon, EaseBase *eab, int argc, char *argv[],
char *colon, *host;
char buf[64];
assert(eab); assert(handler); assert(start); assert(read || idle);
if (handler == NULL) {
handler = EaseStdHandler;
}
assert(eab); assert(start); assert(read || idle);
eab->handler = handler;
eab->start = start;
eab->read = read;
@ -820,9 +867,10 @@ int EaseSend(void *object, void *userarg, int argc, char *argv[]) {
iret = EaseWaitRead(eab);
if (iret >= 0) {
eab->sendCmd = ParArg2Str(argc, argv, NULL, 0);
/*
ParPrintf(eab, -2, "ans: %s", ans);
ParPrintf(eab, eValue, "%s", ans);
*/
}
if (iret < 0) {
eab->errCode = iret;