This commit is contained in:
zolliker
2005-08-24 10:54:10 +00:00
parent 5170be9346
commit 041d071f17
2 changed files with 21 additions and 5 deletions

10
eve.c
View File

@ -770,14 +770,18 @@ int EveIdle(long pc, Eve *eve) {
FSM_BEGIN FSM_BEGIN
idle: idle:
if (!eve->todo) goto rd; if (!eve->todo) {
if (eve->hwstate == HWBusy) {
eve->hwstate = HWIdle;
}
goto rd;
}
doit: doit:
todo = eve->todo; todo = eve->todo;
eve->todo = NULL; eve->todo = NULL;
FSM_CALL(todo); FSM_CALL(todo);
rd: rd:
if (eve->hwstate == HWBusy) eve->hwstate = HWIdle;
FSM_CALL(eve->read); FSM_CALL(eve->read);
EveLog(eve); /* just for the case EveLog was not included in the read function */ EveLog(eve); /* just for the case EveLog was not included in the read function */
if (eve->logtime == 0) eve->logtime = 1; if (eve->logtime == 0) eve->logtime = 1;
@ -816,10 +820,10 @@ int EveRun(pEVDriver driver, float fVal) {
EvePrintf(eve, -1, "can not run %s", eve->evc->pName); EvePrintf(eve, -1, "can not run %s", eve->evc->pName);
return 0; return 0;
} }
eve->todo = eve->run;
if (FsmStop(eve->task, eve->run)) { if (FsmStop(eve->task, eve->run)) {
EvePrintf(eve, -1, "running %s cancelled", eve->evc->pName); EvePrintf(eve, -1, "running %s cancelled", eve->evc->pName);
} }
eve->todo = eve->run;
eve->hwstate = HWBusy; eve->hwstate = HWBusy;
return 1; return 1;
} }

View File

@ -138,9 +138,13 @@ void IpsStatus(IpsDriv *me) {
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
static void IpsSetField(IpsDriv *me, float val) { static void IpsSetField(IpsDriv *me, float val) {
char buf[128]; char buf[128];
SConnection *pCon;
if (me->eve.value != val && me->eve.evc != NULL) { if (me->eve.value != val && me->eve.evc != NULL) {
snprintf(buf, sizeof(buf), "%s = %g", me->eve.evc->pName, val); snprintf(buf, sizeof(buf), "%s = %g", me->eve.evc->pName, val);
InvokeCallBack(me->eve.evc->pCall, VALUECHANGE, buf); InvokeCallBack(me->eve.evc->pCall, VALUECHANGE, buf);
pCon = SCLoad(&me->eve.evc->conn);
if (pCon) SCparChange(pCon);
} }
if (me->perswitch) { if (me->perswitch) {
me->current = val; me->current = val;
@ -258,7 +262,7 @@ static int IpsChangeField(long pc, IpsDriv *me) {
EveWrite(eve, "X"); EveWrite(eve, "X");
FSM_NEXT FSM_NEXT
IpsStatus(me); IpsStatus(me);
if (time(NULL) < me->tim + 3) goto stab2; /* stabilize */ if (time(NULL) < me->tim + 10) goto stab2; /* stabilize */
switch_on: switch_on:
if (me->perswitch) goto wait_open; if (me->perswitch) goto wait_open;
@ -332,6 +336,10 @@ static int IpsChangeField(long pc, IpsDriv *me) {
me->tim = time(NULL); me->tim = time(NULL);
stab3: stab3:
FSM_WAIT(1) FSM_WAIT(1)
EveWrite(eve, "R18"); /* read persistant field in Tesla */
FSM_NEXT
IpsSetField(me, OiGetFlt(eve, 3, NULL));
me->lastfield = me->persfield;
EveWrite(eve, "X"); EveWrite(eve, "X");
FSM_NEXT FSM_NEXT
IpsStatus(me); /* just check for errors */ IpsStatus(me); /* just check for errors */
@ -349,6 +357,10 @@ static int IpsChangeField(long pc, IpsDriv *me) {
EvePrintf(eve, -1, "IPS: wait 30 sec to close switch"); EvePrintf(eve, -1, "IPS: wait 30 sec to close switch");
wait_closed: wait_closed:
EveWrite(eve, "R18"); /* read persistant field in Tesla */
FSM_NEXT
IpsSetField(me, OiGetFlt(eve, 3, NULL));
me->lastfield = me->persfield;
FSM_WAIT(1) FSM_WAIT(1)
EveWrite(eve, "X"); EveWrite(eve, "X");
FSM_NEXT FSM_NEXT