From 9438dc0973b5884cec33c5f17caa69ca79a054c5 Mon Sep 17 00:00:00 2001 From: Douglas Clowes Date: Fri, 25 May 2007 16:19:37 +1000 Subject: [PATCH] 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 --- site_ansto/motor_dmc2280.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/site_ansto/motor_dmc2280.c b/site_ansto/motor_dmc2280.c index c7a84adf..c5fdd9d4 100644 --- a/site_ansto/motor_dmc2280.c +++ b/site_ansto/motor_dmc2280.c @@ -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);