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:
@ -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);
|
||||
|
Reference in New Issue
Block a user