diff --git a/motorApp/ThorLabsSrc/drvMDT695.cc b/motorApp/ThorLabsSrc/drvMDT695.cc index 5e674433..57f607ce 100644 --- a/motorApp/ThorLabsSrc/drvMDT695.cc +++ b/motorApp/ThorLabsSrc/drvMDT695.cc @@ -4,9 +4,9 @@ USAGE... Motor record driver level support for ThorLabs Piezo Control Module (Model: MDT695) Compatable with MDT694, MDT693 -Version: $Revision: 1.1 $ +Version: $Revision: 1.2 $ Modified By: $Author: sullivan $ -Last Modified: $Date: 2006-09-27 20:32:37 $ +Last Modified: $Date: 2007-05-23 14:56:06 $ */ @@ -55,6 +55,8 @@ Last Modified: $Date: 2006-09-27 20:32:37 $ #define CMD_ID "I" #define CMD_DEV "D" +#define RESP_DEV "d" /* Response if ECHO is ON */ +#define CMD_ECHO "E" #define CMD_POS "#R?" #define MDT695_NUM_CARDS 16 @@ -239,9 +241,11 @@ static int set_status(int card, int signal) double datad; /* Convert position and check for error */ + Debug(5, "set_status(): RecvStr = %s\n", &startptr[2]); datad = strtod(&startptr[2], &endptr); if (&startptr[2] != endptr) { + Debug(5, "set_status(): motorData = %.2f\n", datad); motorData = NINT(datad / cntrl->drive_resolution); recvRetry = false; } @@ -252,6 +256,11 @@ static int set_status(int card, int signal) cntrl->status = NORMAL; else { + /* Try turning Echo OFF before next retry */ + recvCnt = recv_mess(card, startptr, 0); /* Flush recv buffer */ + send_mess(card, CMD_ECHO, NULL); + recvCnt = recv_mess(card, startptr, 0); + if (cntrl->status == NORMAL) { epicsThreadSleep(MOTION_DELAY); @@ -564,6 +573,13 @@ static int motor_init() /* Check for valid response -- if not retry */ if ((recvCnt > 0) && strstr(buff, "MDT")) cardFound = true; + else + { + /* Try turning Echo OFF */ + recvCnt = recv_mess(card_index, buff, 0); /* Flush recv buffer */ + send_mess(card_index, CMD_ECHO, NULL); + recvCnt = recv_mess(card_index, buff, 0); + } } while(!cardFound && ++retryCnt < 3); }