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