Fix some typos and add deferred state/event trace reporting
r2365 | dcl | 2008-02-21 14:59:25 +1100 (Thu, 21 Feb 2008) | 2 lines
This commit is contained in:
@@ -34,6 +34,8 @@
|
||||
#define UNITSLEN 256
|
||||
#define TEXTPARLEN 1024
|
||||
#define CMDLEN 1024
|
||||
#define STATE_TRACE (100)
|
||||
|
||||
/** \brief Used to ensure that the getDMCSetting function is called
|
||||
* with valid values.
|
||||
* \see getDMCSetting
|
||||
@@ -195,6 +197,11 @@ struct __MoDriv {
|
||||
#endif
|
||||
double* positions;
|
||||
int variables;
|
||||
#if defined(STATE_TRACE) && (STATE_TRACE > 0)
|
||||
int state_trace_idx;
|
||||
char state_trace_text[STATE_TRACE][CMDLEN];
|
||||
struct timeval state_trace_time[STATE_TRACE];
|
||||
#endif
|
||||
};
|
||||
|
||||
int DMC2280MotionControl = 1; /* defaults to enabled */
|
||||
@@ -1359,6 +1366,26 @@ static int rspPoll(pDMC2280Driv self, const char* text) {
|
||||
return iReply;
|
||||
}
|
||||
|
||||
static void state_trace_prn(pDMC2280Driv self) {
|
||||
#if defined(STATE_TRACE) && (STATE_TRACE > 0)
|
||||
int idx = self->state_trace_idx;
|
||||
SICSLogWrite("state_trace_prn trace listing start", eStatus);
|
||||
do {
|
||||
char* line;
|
||||
struct timeval *tp;
|
||||
tp = &self->state_trace_time[self->state_trace_idx];
|
||||
line = &self->state_trace_text[self->state_trace_idx++][0];
|
||||
if (self->state_trace_idx >= STATE_TRACE)
|
||||
self->state_trace_idx = 0;
|
||||
if (*line)
|
||||
SICSLogWriteTime(line, eStatus, tp);
|
||||
} while (idx != self->state_trace_idx);
|
||||
SICSLogWrite("state_trace_prn trace listing end", eStatus);
|
||||
#else
|
||||
SICSLogWrite("state_trace_prn not implemented", eStatus);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* State Functions */
|
||||
|
||||
static void DMCState_Unknown(pDMC2280Driv self, pEvtEvent event);
|
||||
@@ -1439,8 +1466,17 @@ static char* event_name(pEvtEvent event, char* text, int length) {
|
||||
}
|
||||
|
||||
static void report_event(pDMC2280Driv self, pEvtEvent event) {
|
||||
#if defined(STATE_TRACE) && (STATE_TRACE > 0)
|
||||
if (true) {
|
||||
char* line;
|
||||
gettimeofday(&self->state_trace_time[self->state_trace_idx], NULL);
|
||||
line = &self->state_trace_text[self->state_trace_idx++][0];
|
||||
if (self->state_trace_idx >= STATE_TRACE)
|
||||
self->state_trace_idx = 0;
|
||||
#else
|
||||
if (self->debug || self->trace) {
|
||||
char line[CMDLEN];
|
||||
#endif
|
||||
char text[CMDLEN];
|
||||
snprintf(line, CMDLEN, "Motor=%s, State=%s(%d), event=%s",
|
||||
self->name,
|
||||
@@ -1455,8 +1491,17 @@ static void report_event(pDMC2280Driv self, pEvtEvent event) {
|
||||
}
|
||||
|
||||
static void change_state(pDMC2280Driv self, StateFunc func) {
|
||||
#if defined(STATE_TRACE) && (STATE_TRACE > 0)
|
||||
if (true) {
|
||||
char* line;
|
||||
gettimeofday(&self->state_trace_time[self->state_trace_idx], NULL);
|
||||
line = &self->state_trace_text[self->state_trace_idx++][0];
|
||||
if (self->state_trace_idx >= STATE_TRACE)
|
||||
self->state_trace_idx = 0;
|
||||
#else
|
||||
if (self->debug || self->trace) {
|
||||
char line[CMDLEN];
|
||||
#endif
|
||||
snprintf(line, CMDLEN, "Motor=%s, OldState=%s(%d), NewState=%s",
|
||||
self->name,
|
||||
state_name(self->myState),
|
||||
@@ -1476,7 +1521,15 @@ static void change_state(pDMC2280Driv self, StateFunc func) {
|
||||
}
|
||||
|
||||
static void unhandled_event(pDMC2280Driv self, pEvtEvent event) {
|
||||
#if defined(STATE_TRACE) && (STATE_TRACE > 0)
|
||||
char* line;
|
||||
gettimeofday(&self->state_trace_time[self->state_trace_idx], NULL);
|
||||
line = &self->state_trace_text[self->state_trace_idx++][0];
|
||||
if (self->state_trace_idx >= STATE_TRACE)
|
||||
self->state_trace_idx = 0;
|
||||
#else
|
||||
char line[CMDLEN];
|
||||
#endif
|
||||
char text[CMDLEN];
|
||||
snprintf(line, CMDLEN, "Motor=%s, State=%s(%d), unhandled event=%s",
|
||||
self->name,
|
||||
@@ -1488,7 +1541,10 @@ static void unhandled_event(pDMC2280Driv self, pEvtEvent event) {
|
||||
|
||||
static void handle_event(pDMC2280Driv self, pEvtEvent event) {
|
||||
StateFunc oldState;
|
||||
#if defined(STATE_TRACE) && (STATE_TRACE > 0)
|
||||
#else
|
||||
if (self->debug || self->trace)
|
||||
#endif
|
||||
report_event(self, event);
|
||||
oldState = self->myState;
|
||||
self->myState(self, event);
|
||||
@@ -1776,7 +1832,7 @@ static void DMCState_MotorStart(pDMC2280Driv self, pEvtEvent event) {
|
||||
change_state(self, DMCState_MotorStart);
|
||||
return;
|
||||
}
|
||||
else if (self->run_flag > 0) {
|
||||
else if (self->run_flag < 0) {
|
||||
self->run_flag = 0;
|
||||
change_state(self, DMCState_MotorHalt);
|
||||
return;
|
||||
@@ -1874,7 +1930,7 @@ static void DMCState_MotorOn(pDMC2280Driv self, pEvtEvent event) {
|
||||
change_state(self, DMCState_MotorStart);
|
||||
return;
|
||||
}
|
||||
else if (self->run_flag > 0) {
|
||||
else if (self->run_flag < 0) {
|
||||
self->run_flag = 0;
|
||||
change_state(self, DMCState_MotorHalt);
|
||||
return;
|
||||
@@ -2228,7 +2284,9 @@ static void DMCState_Moving(pDMC2280Driv self, pEvtEvent event) {
|
||||
case CMD_HALT:
|
||||
/* handle halt command, send message */
|
||||
self->run_flag = -1;
|
||||
change_state(self, DMCState_MotorHalt);
|
||||
if (self->waitResponse == false) {
|
||||
change_state(self, DMCState_MotorHalt);
|
||||
}
|
||||
return;
|
||||
}
|
||||
break;
|
||||
@@ -2445,6 +2503,7 @@ static void DMCState_MotorStop(pDMC2280Driv self, pEvtEvent event) {
|
||||
static void DMCState_Error(pDMC2280Driv self, pEvtEvent event) {
|
||||
switch (event->event_type) {
|
||||
case eStateEvent:
|
||||
state_trace_prn(self);
|
||||
return;
|
||||
case eTimerEvent:
|
||||
case eMessageEvent:
|
||||
@@ -2739,6 +2798,7 @@ static int DMC2280Halt(void *pData){
|
||||
self = (pDMC2280Driv)pData;
|
||||
assert(self != NULL);
|
||||
|
||||
state_trace_prn(self);
|
||||
state_cmd_execute(self, CMD_HALT);
|
||||
return 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user