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:
Douglas Clowes
2008-02-21 14:59:25 +11:00
parent f3d798689b
commit c97b23fbcb

View File

@@ -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;
}