A bit of refactoring and a bug fix

r2253 | dcl | 2007-11-09 09:49:19 +1100 (Fri, 09 Nov 2007) | 2 lines
This commit is contained in:
Douglas Clowes
2007-11-09 09:49:19 +11:00
parent 5eb6f4330b
commit 52a5be7c0d

View File

@@ -197,7 +197,7 @@ int DMC2280MotionControl = 1; /* defaults to enabled */
#define AIR_POLL_TIMER 1000
#define MOTOR_POLL_FAST 200
#define MOTOR_POLL_SLOW 5000
#define ON_SETTLE_TIMER 1000
#define ON_SETTLE_TIMER 200
#define MAX_CREEP_STEPS 100
#define MAX_RESTARTS 0
@@ -1113,8 +1113,10 @@ static int checkMotion(void *pData) {
/* calculate observed and expected steps per count ratios */
if (self->currCounts == self->lastCounts) /* prevent divide by zero */
ratio_obs = (self->currSteps - self->lastSteps);
else
ratio_obs = (self->currSteps - self->lastSteps) / (self->currCounts - self->lastCounts);
else {
ratio_obs = (float) (self->currSteps - self->lastSteps);
ratio_obs /= (float) (self->currCounts - self->lastCounts);
}
ratio_exp = (float) self->stepsPerX / (float) self->cntsPerX;
ratio_cmp = ratio_obs / ratio_exp;
/* wrong signs, less than half, or more than double is trouble */
@@ -1603,15 +1605,14 @@ static void DMCState_Idle(pDMC2280Driv self, pEvtEvent event) {
case eStateEvent:
if (self->state_timer)
NetWatchRemoveTimer(self->state_timer);
if ((self->variables & VAR_RUN) && self->runError) {
if (self->variables & VAR_RUN) {
char cmd[CMDLEN];
snprintf(cmd, CMDLEN, "RUN%c=0", self->axisLabel);
DMC_SendCmd(self, cmd, state_msg_callback);
DMC2280Send(self, cmd);
}
else
NetWatchRegisterTimer(&self->state_timer,
MOTOR_POLL_SLOW,
state_tmr_callback, self);
NetWatchRegisterTimer(&self->state_timer,
MOTOR_POLL_SLOW,
state_tmr_callback, self);
self->subState = 0;
return;
case eTimerEvent:
@@ -1621,12 +1622,6 @@ static void DMCState_Idle(pDMC2280Driv self, pEvtEvent event) {
case eMessageEvent:
do {
pAsyncTxn pCmd = event->event.msg.cmd;
if (self->subState == 0) { /* RUNx reset */
NetWatchRegisterTimer(&self->state_timer,
MOTOR_POLL_SLOW,
state_tmr_callback, self);
return;
}
if (self->subState == 1) { /* Status Response */
int iRet;
float fDelta;
@@ -1683,7 +1678,6 @@ static void DMCState_Idle(pDMC2280Driv self, pEvtEvent event) {
self->driver_status = HWFault;
change_state(self, DMCState_MotorHalt);
return;
break;
}
unhandled_event(self, event);
self->errorCode = STATEERROR;
@@ -1752,7 +1746,7 @@ static void DMCState_MotorStart(pDMC2280Driv self, pEvtEvent event) {
do {
pAsyncTxn pCmd = event->event.msg.cmd;
if (self->subState == 1) {
if (self->has_airpads == 0) { /* SH */
if (self->has_airpads == 0) { /* cmdOn */
change_state(self, DMCState_MotorOn);
return;
}
@@ -2111,15 +2105,6 @@ static void DMCState_Moving(pDMC2280Driv self, pEvtEvent event) {
state_tmr_callback, self);
return;
}
if (self->motOffDelay)
NetWatchRegisterTimer(&self->state_timer,
self->motOffDelay,
state_tmr_callback, self);
else
NetWatchRegisterTimer(&self->state_timer,
MOTOR_POLL_FAST,
state_tmr_callback, self);
self->driver_status = HWIdle;
change_state(self, DMCState_OffTimer);
return;
}
@@ -2196,6 +2181,15 @@ static void DMCState_MotorHalt(pDMC2280Driv self, pEvtEvent event) {
static void DMCState_OffTimer(pDMC2280Driv self, pEvtEvent event) {
switch (event->event_type) {
case eStateEvent:
self->driver_status = HWIdle;
if (self->motOffDelay)
NetWatchRegisterTimer(&self->state_timer,
self->motOffDelay,
state_tmr_callback, self);
else
NetWatchRegisterTimer(&self->state_timer,
MOTOR_POLL_FAST,
state_tmr_callback, self);
return;
case eTimerEvent:
change_state(self, DMCState_MotorStop);