Add some logging, comments, report unhandled events in the state machine.

Limit the state and trace commands to motors with finite state machines.

r1988 | dcl | 2007-05-25 16:19:37 +1000 (Fri, 25 May 2007) | 3 lines
This commit is contained in:
Douglas Clowes
2007-05-25 16:19:37 +10:00
parent 6ed6e5e6cb
commit 9438dc0973

View File

@ -1220,6 +1220,16 @@ static void change_state(pDMC2280Driv self, StateFunc func) {
self->subState = 0;
}
static void unhandled_event(pDMC2280Driv self, pEvtEvent event) {
char line[CMDLEN];
char text[CMDLEN];
snprintf(line, CMDLEN, "Motor=%s, State=%s, unhandled event=%s",
self->name,
state_name(self->myState),
event_name(event, text, CMDLEN));
SICSLogWrite(line, eStatus);
}
static int state_msg_callback(pAsyncTxn pCmd)
{
pDMC2280Driv self = (pDMC2280Driv) pCmd->cntx;
@ -1326,6 +1336,7 @@ static void DMCState_Unknown(pDMC2280Driv self, pEvtEvent event) {
/* TODO: handle timeout */
break;
}
unhandled_event(self, event);
self->errorCode = STATEERROR;
}
@ -1404,6 +1415,7 @@ static void DMCState_Idle(pDMC2280Driv self, pEvtEvent event) {
/* TODO handle message timeout */
break;
}
unhandled_event(self, event);
self->errorCode = STATEERROR;
}
@ -1439,10 +1451,12 @@ static void DMCState_AirOn(pDMC2280Driv self, pEvtEvent event) {
}
} while (0);
break;
/* TODO: handle halt command */
case eTimeoutEvent:
/* TODO handle message timeout */
break;
}
unhandled_event(self, event);
self->errorCode = STATEERROR;
}
@ -1518,10 +1532,12 @@ static void DMCState_MotorOn(pDMC2280Driv self, pEvtEvent event) {
}
} while (0);
break;
/* TODO: handle halt command */
case eTimeoutEvent:
/* TODO handle message timeout */
break;
}
unhandled_event(self, event);
self->errorCode = STATEERROR;
}
@ -1720,6 +1736,7 @@ static void DMCState_Moving(pDMC2280Driv self, pEvtEvent event) {
state_cmd_execute(self, CMD_HALT);
return;
}
unhandled_event(self, event);
self->errorCode = STATEERROR;
}
@ -1774,6 +1791,7 @@ static void DMCState_MotorHalt(pDMC2280Driv self, pEvtEvent event)
/* TODO handle message timeout */
break;
}
unhandled_event(self, event);
self->errorCode = STATEERROR;
}
@ -1813,6 +1831,7 @@ static void DMCState_OffTimer(pDMC2280Driv self, pEvtEvent event) {
}
return;
}
unhandled_event(self, event);
self->errorCode = STATEERROR;
}
@ -1856,6 +1875,7 @@ static void DMCState_AirOff(pDMC2280Driv self, pEvtEvent event) {
/* TODO handle message timeout */
break;
}
unhandled_event(self, event);
self->errorCode = STATEERROR;
}
@ -1882,6 +1902,7 @@ static void DMCState_MotorOff(pDMC2280Driv self, pEvtEvent event) {
/* TODO handle message timeout */
break;
}
unhandled_event(self, event);
self->errorCode = STATEERROR;
}
@ -3261,7 +3282,7 @@ int DMC2280Action(SConnection *pCon, SicsInterp *pSics, void *pData,
/* Handle further in generic motor driver */
return MotorAction(pCon, pSics, pData, argc, argv);
}
else if(strcasecmp("state", argv[1]) == 0) {
else if(self->has_fsm && strcasecmp("state", argv[1]) == 0) {
char line[132];
snprintf(line, 132, "%s.state = %s (timer=%s)",
self->name, state_name(self->myState),
@ -3269,7 +3290,7 @@ int DMC2280Action(SConnection *pCon, SicsInterp *pSics, void *pData,
SCWrite(pCon, line, eValue);
return 1;
}
else if(strcasecmp("trace", argv[1]) == 0) {
else if(self->has_fsm && strcasecmp("trace", argv[1]) == 0) {
if (argc > 2 && strcasecmp("on", argv[2]) == 0) {
self->trace = pCon;
SCWrite(pCon, "TRACE ON", eValue);