bug fix
This commit is contained in:
12
eve.c
12
eve.c
@ -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;
|
||||||
}
|
}
|
||||||
|
14
ipsdriv.c
14
ipsdriv.c
@ -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
|
||||||
|
Reference in New Issue
Block a user