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);