diff --git a/motorApp/AcsSrc/drvMCB4B.cc b/motorApp/AcsSrc/drvMCB4B.cc index 9e52c2cc..b6442cfb 100644 --- a/motorApp/AcsSrc/drvMCB4B.cc +++ b/motorApp/AcsSrc/drvMCB4B.cc @@ -266,9 +266,7 @@ STATIC int set_status(int card, int signal) if ((status.Bits.RA_DONE || ls_active == true) && nodeptr != 0 && nodeptr->postmsgptr != 0) { - strcpy(buff, nodeptr->postmsgptr); - strcat(buff, "\r"); - send_mess(card, buff, (char) NULL); + send_mess(card, nodeptr->postmsgptr, (char) NULL); /* The MCB4B always sends back a response, read it and discard */ recv_mess(card, buff, WAIT); nodeptr->postmsgptr = NULL; @@ -285,7 +283,6 @@ STATIC int set_status(int card, int signal) /*****************************************************/ STATIC RTN_STATUS send_mess(int card, const char *com, char *name) { - char buff[BUFF_SIZE]; struct MCB4Bcontroller *cntrl; int nwrite; @@ -300,13 +297,10 @@ STATIC RTN_STATUS send_mess(int card, const char *com, char *name) if (strlen(com) == 0) return(OK); cntrl = (struct MCB4Bcontroller *) motor_state[card]->DevicePrivate; - strcpy(buff, com); - strcat(buff, OUTPUT_TERMINATOR); - Debug(2, "send_mess: sending message to card %d, message=%s\n",\ - card, buff); + card, com); - pasynOctetSyncIO->write(cntrl->pasynUser, buff, strlen(buff), TIMEOUT, &nwrite); + pasynOctetSyncIO->write(cntrl->pasynUser, com, strlen(com), TIMEOUT, &nwrite); return (OK); } @@ -343,12 +337,11 @@ STATIC int recv_mess(int card, char *com, int flag) flush = 0; timeout = TIMEOUT; } + if (flush) status = pasynOctetSyncIO->flush(cntrl->pasynUser); status = pasynOctetSyncIO->read(cntrl->pasynUser, com, MAX_MSG_SIZE, - "\r", 1, flush, timeout, &nread, &eomReason); + timeout, &nread, &eomReason); - /* The response from the MCB4B is terminated with CR. Remove */ if (nread < 1) com[0] = '\0'; - else com[nread-1] = '\0'; if (nread > 0) { Debug(2, "recv_mess: card %d, message = \"%s\"\n",\ @@ -465,7 +458,7 @@ STATIC int motor_init() /* Initialize communications channel */ - success_rtn = pasynOctetSyncIO->connect(cntrl->port, 0, &cntrl->pasynUser); + success_rtn = pasynOctetSyncIO->connect(cntrl->port, 0, &cntrl->pasynUser, NULL); Debug(1, "motor_init, return from pasynOctetSyncIO->connect for port %s = %d, pasynUser=%p\n",\ cntrl->port, success_rtn, cntrl->pasynUser); diff --git a/motorApp/MclennanSrc/drvPM304.cc b/motorApp/MclennanSrc/drvPM304.cc index 78f92aa8..3f12da59 100644 --- a/motorApp/MclennanSrc/drvPM304.cc +++ b/motorApp/MclennanSrc/drvPM304.cc @@ -345,7 +345,6 @@ STATIC int set_status(int card, int signal) STATIC RTN_STATUS send_mess(int card, const char *com, char *name) { char *p, *tok_save; - char buff[BUFF_SIZE]; char response[BUFF_SIZE]; struct PM304controller *cntrl; int nwrite, nread, eomReason; @@ -365,11 +364,9 @@ STATIC RTN_STATUS send_mess(int card, const char *com, char *name) for (p = strtok_r((char *) com, ";", &tok_save); ((p != NULL) && (strlen(p) != 0)); p = strtok_r(NULL, ";", &tok_save)) { - strcpy(buff, p); - strcat(buff, OUTPUT_TERMINATOR); - Debug(2, "send_mess: sending message to card %d, message=%s\n", card, buff); - pasynOctetSyncIO->writeRead(cntrl->pasynUser, buff, strlen(buff), response, - BUFF_SIZE, INPUT_TERMINATOR, 1, TIMEOUT, &nwrite, &nread, &eomReason); + Debug(2, "send_mess: sending message to card %d, message=%s\n", card, p); + pasynOctetSyncIO->writeRead(cntrl->pasynUser, p, strlen(p), response, + BUFF_SIZE, TIMEOUT, &nwrite, &nread, &eomReason); Debug(2, "send_mess: card %d, response=%s\n", card, response); } @@ -413,11 +410,12 @@ STATIC int recv_mess(int card, char *com, int flag) flush = 0; timeout = TIMEOUT; } + if (flush) status = pasynOctetSyncIO->flush(cntrl->pasynUser); status = pasynOctetSyncIO->read(cntrl->pasynUser, com, BUFF_SIZE, - INPUT_TERMINATOR, 1, flush, timeout, &nread, &eomReason); + timeout, &nread, &eomReason); /* The response from the PM304 is terminated with CR/LF. Remove these */ - if (nread < 2) com[0] = '\0'; else com[nread-2] = '\0'; + if (nread == 0) com[0] = '\0'; if (nread > 0) { Debug(2, "recv_mess: card %d, flag=%d, message = \"%s\"\n", card, flag, com); } @@ -456,7 +454,6 @@ STATIC int recv_mess(int card, char *com, int flag) STATIC int send_recv_mess(int card, const char *out, char *response) { char *p, *tok_save; - char buff[BUFF_SIZE]; struct PM304controller *cntrl; char *pos; asynStatus status; @@ -480,16 +477,14 @@ STATIC int send_recv_mess(int card, const char *out, char *response) for (p = strtok_r((char *) out, ";", &tok_save); ((p != NULL) && (strlen(p) != 0)); p = strtok_r(NULL, ";", &tok_save)) { - strcpy(buff, p); - strcat(buff, OUTPUT_TERMINATOR); - Debug(2, "send_recv_mess: sending message to card %d, message=%s\n", card, buff); - status = pasynOctetSyncIO->writeRead(cntrl->pasynUser, buff, strlen(buff), - response, BUFF_SIZE, INPUT_TERMINATOR, 1, TIMEOUT, + Debug(2, "send_recv_mess: sending message to card %d, message=%s\n", card, p); + status = pasynOctetSyncIO->writeRead(cntrl->pasynUser, p, strlen(p), + response, BUFF_SIZE, TIMEOUT, &nwrite, &nread, &eomReason); } /* The response from the PM304 is terminated with CR/LF. Remove these */ - if (nread < 2) response[0] = '\0'; else response[nread-2] = '\0'; + if (nread == 0) response[0] = '\0';; if (nread > 0) { Debug(2, "send_recv_mess: card %d, response = \"%s\"\n", card, response); } @@ -613,7 +608,7 @@ STATIC int motor_init() /* Initialize communications channel */ success_rtn = false; - status = pasynOctetSyncIO->connect(cntrl->port, 0, &cntrl->pasynUser); + status = pasynOctetSyncIO->connect(cntrl->port, 0, &cntrl->pasynUser, NULL); success_rtn = (status == asynSuccess); Debug(1, "motor_init, return from pasynOctetSyncIO->connect for port %s = %d, pasynUser=%p\n", cntrl->port, success_rtn, cntrl->pasynUser); diff --git a/motorApp/MclennanSrc/drvPM304.h b/motorApp/MclennanSrc/drvPM304.h index 6682bd80..2d939190 100644 --- a/motorApp/MclennanSrc/drvPM304.h +++ b/motorApp/MclennanSrc/drvPM304.h @@ -30,9 +30,6 @@ #define MODEL_PM304 0 #define MODEL_PM600 1 -#define OUTPUT_TERMINATOR "\r" -#define INPUT_TERMINATOR "\n" - struct PM304controller { asynUser *pasynUser; /* asyn */ diff --git a/motorApp/NewportSrc/drvESP300.cc b/motorApp/NewportSrc/drvESP300.cc index 12c00dc6..6bfb6d30 100644 --- a/motorApp/NewportSrc/drvESP300.cc +++ b/motorApp/NewportSrc/drvESP300.cc @@ -2,9 +2,9 @@ FILENAME... drvESP300.cc USAGE... Motor record driver level support for Newport ESP300. -Version: $Revision: 1.15 $ +Version: $Revision: 1.16 $ Modified By: $Author: rivers $ -Last Modified: $Date: 2004-09-28 23:52:58 $ +Last Modified: $Date: 2004-11-10 05:27:28 $ */ /* @@ -350,7 +350,6 @@ exit: static RTN_STATUS send_mess(int card, char const *com, char *name) { struct MMcontroller *cntrl; - char local_buff[BUFF_SIZE]; int size; int nwrite; @@ -376,14 +375,11 @@ static RTN_STATUS send_mess(int card, char const *com, char *name) return(ERROR); } - /* Make a local copy of the string and add the command line terminator. */ - strcpy(local_buff, com); - strcat(local_buff, "\r"); - Debug(2, "send_mess(): message = %s\n", local_buff); + Debug(2, "send_mess(): message = %s\n", com); cntrl = (struct MMcontroller *) motor_state[card]->DevicePrivate; - pasynOctetSyncIO->write(cntrl->pasynUser, local_buff, strlen(local_buff), + pasynOctetSyncIO->write(cntrl->pasynUser, com, strlen(com), SERIAL_TIMEOUT, &nwrite); return(OK); @@ -452,16 +448,19 @@ static int recv_mess(int card, char *com, int flag) flush = 0; timeout = SERIAL_TIMEOUT; } + if (flush) status = pasynOctetSyncIO->flush(cntrl->pasynUser); status = pasynOctetSyncIO->read(cntrl->pasynUser, com, BUFF_SIZE, - "\n", 1, flush, timeout, &nread, &eomReason); + timeout, &nread, &eomReason); if (nread > 3 && com[0] == 'E') { long error; error = strtol(&com[1], NULL, 0); - if (error >= 35 && error <= 42) + if (error >= 35 && error <= 42) { + if (flush) status = pasynOctetSyncIO->flush(cntrl->pasynUser); status = pasynOctetSyncIO->read(cntrl->pasynUser, com, BUFF_SIZE, - "\n", 1, flush, timeout, &nread, &eomReason); + timeout, &nread, &eomReason); + } } if ((status != asynSuccess) || (nread <= 0)) @@ -469,12 +468,6 @@ static int recv_mess(int card, char *com, int flag) com[0] = '\0'; nread = 0; } - else - /* ESP300 responses are always terminated with CR/LF combination (see - * ESP300 User' Manual Sec. 3.4 NOTE). Strip both CR&LF from buffer - * before returning to caller. - */ - com[nread-2] = '\0'; Debug(2, "recv_mess(): message = \"%s\"\n", com); return(nread); @@ -577,7 +570,7 @@ static int motor_init() /* Initialize communications channel */ success_rtn = pasynOctetSyncIO->connect(cntrl->asyn_port, - cntrl->asyn_address, &cntrl->pasynUser); + cntrl->asyn_address, &cntrl->pasynUser, NULL); if (success_rtn == asynSuccess) { diff --git a/motorApp/NewportSrc/drvMM3000.cc b/motorApp/NewportSrc/drvMM3000.cc index 29149e69..cab2fd1e 100644 --- a/motorApp/NewportSrc/drvMM3000.cc +++ b/motorApp/NewportSrc/drvMM3000.cc @@ -2,9 +2,9 @@ FILENAME... drvMM3000.cc USAGE... Motor record driver level support for Newport MM3000. -Version: $Revision: 1.14 $ +Version: $Revision: 1.15 $ Modified By: $Author: rivers $ -Last Modified: $Date: 2004-09-28 23:52:58 $ +Last Modified: $Date: 2004-11-10 05:27:29 $ */ /* @@ -386,7 +386,6 @@ exit: STATIC RTN_STATUS send_mess(int card, char const *com, char *name) { struct MMcontroller *cntrl; - char local_buff[BUFF_SIZE]; int size; int nwrite; @@ -412,15 +411,12 @@ STATIC RTN_STATUS send_mess(int card, char const *com, char *name) return(ERROR); } - /* Make a local copy of the string and add the command line terminator. */ - strcpy(local_buff, com); - strcat(local_buff, "\r"); - Debug(2, "send_mess(): message = %s\n", local_buff); + Debug(2, "send_mess(): message = %s\n", com); cntrl = (struct MMcontroller *) motor_state[card]->DevicePrivate; - pasynOctetSyncIO->write(cntrl->pasynUser, local_buff, strlen(local_buff), - SERIAL_TIMEOUT, &nwrite); + pasynOctetSyncIO->write(cntrl->pasynUser, com, strlen(com), + SERIAL_TIMEOUT, &nwrite); return(OK); } @@ -488,17 +484,19 @@ STATIC int recv_mess(int card, char *com, int flag) flush = 0; timeout = SERIAL_TIMEOUT; } - status = pasynOctetSyncIO->read(cntrl->pasynUser, com, BUFF_SIZE, (char *) - "\n", 1, flush, timeout, &nread, &eomReason); + if (flush) status = pasynOctetSyncIO->flush(cntrl->pasynUser); + status = pasynOctetSyncIO->read(cntrl->pasynUser, com, BUFF_SIZE, + timeout, &nread, &eomReason); if (nread > 3 && com[0] == 'E') { long error; error = strtol(&com[1], NULL, 0); - if (error >= 35 && error <= 42) + if (error >= 35 && error <= 42) { + if (flush) status = pasynOctetSyncIO->flush(cntrl->pasynUser); status = pasynOctetSyncIO->read(cntrl->pasynUser, com, BUFF_SIZE, - (char *) "\n", 1, flush, timeout, - &nread, &eomReason); + timeout, &nread, &eomReason); + } } if ((status != asynSuccess) || (nread <= 0)) @@ -508,11 +506,6 @@ STATIC int recv_mess(int card, char *com, int flag) } else { - /* MM3000 responses are always terminated with CR/LF combination (see - * MM3000 User' Manual Sec. 3.4 NOTE). Strip both CR&LF from buffer - * before returning to caller. - */ - com[nread-2] = '\0'; /* Test for "system error" response. */ if (com[0] == 'E') { @@ -603,7 +596,7 @@ STATIC int motor_init() char buff[BUFF_SIZE]; char *tok_save, *bufptr; int total_axis = 0; - int status; + int status=0; asynStatus success_rtn; initialized = true; /* Indicate that driver is initialized. */ @@ -626,7 +619,7 @@ STATIC int motor_init() /* Initialize communications channel */ success_rtn = pasynOctetSyncIO->connect(cntrl->asyn_port, - cntrl->asyn_address, &cntrl->pasynUser); + cntrl->asyn_address, &cntrl->pasynUser, NULL); if (success_rtn == asynSuccess) { /* Send a message to the board, see if it exists */ diff --git a/motorApp/NewportSrc/drvMM4000.cc b/motorApp/NewportSrc/drvMM4000.cc index 2e4e5bd4..6e529378 100644 --- a/motorApp/NewportSrc/drvMM4000.cc +++ b/motorApp/NewportSrc/drvMM4000.cc @@ -2,9 +2,9 @@ FILENAME... drvMM4000.cc USAGE... Motor record driver level support for Newport MM4000. -Version: $Revision: 1.14 $ +Version: $Revision: 1.15 $ Modified By: $Author: rivers $ -Last Modified: $Date: 2004-09-28 23:52:59 $ +Last Modified: $Date: 2004-11-10 05:27:29 $ */ /* @@ -460,7 +460,6 @@ exit: static RTN_STATUS send_mess(int card, char const *com, char *name) { struct MMcontroller *cntrl; - char local_buff[BUFF_SIZE]; int size; int nwrite; @@ -486,15 +485,12 @@ static RTN_STATUS send_mess(int card, char const *com, char *name) return(ERROR); } - /* Make a local copy of the string and add the command line terminator. */ - strcpy(local_buff, com); - strcat(local_buff, "\r"); - Debug(2, "send_mess(): message = %s\n", local_buff); + Debug(2, "send_mess(): message = %s\n", com); cntrl = (struct MMcontroller *) motor_state[card]->DevicePrivate; - pasynOctetSyncIO->write(cntrl->pasynUser, local_buff, strlen(local_buff), - TIMEOUT, &nwrite); + pasynOctetSyncIO->write(cntrl->pasynUser, com, strlen(com), + TIMEOUT, &nwrite); return(OK); } @@ -520,7 +516,6 @@ static int recv_mess(int card, char *com, int flag) { struct MMcontroller *cntrl; double timeout = 0.; - int flush = 0; int nread = 0; asynStatus status; int eomReason; @@ -532,16 +527,14 @@ static int recv_mess(int card, char *com, int flag) cntrl = (struct MMcontroller *) motor_state[card]->DevicePrivate; timeout = TIMEOUT; - status = pasynOctetSyncIO->read(cntrl->pasynUser, com, BUFF_SIZE, (char *) "\r", - 1, flush, timeout, &nread, &eomReason); + status = pasynOctetSyncIO->read(cntrl->pasynUser, com, BUFF_SIZE, + timeout, &nread, &eomReason); if ((status != asynSuccess) || (nread <= 0)) { com[0] = '\0'; nread = 0; } - else - com[nread-1] = '\0'; Debug(2, "recv_mess(): message = \"%s\"\n", com); return(nread); @@ -646,7 +639,7 @@ static int motor_init() /* Initialize communications channel */ success_rtn = pasynOctetSyncIO->connect(cntrl->asyn_port, - cntrl->asyn_address, &cntrl->pasynUser); + cntrl->asyn_address, &cntrl->pasynUser, NULL); if (success_rtn == asynSuccess) { diff --git a/motorApp/NewportSrc/drvPM500.cc b/motorApp/NewportSrc/drvPM500.cc index 09f49dca..176eeade 100644 --- a/motorApp/NewportSrc/drvPM500.cc +++ b/motorApp/NewportSrc/drvPM500.cc @@ -2,9 +2,9 @@ FILENAME... drvPM500.cc USAGE... Motor record driver level support for Newport PM500. -Version: $Revision: 1.13 $ +Version: $Revision: 1.14 $ Modified By: $Author: rivers $ -Last Modified: $Date: 2004-09-28 23:52:59 $ +Last Modified: $Date: 2004-11-10 05:27:30 $ */ /* Device Driver Support routines for PM500 motor controller */ @@ -62,8 +62,6 @@ Last Modified: $Date: 2004-09-28 23:52:59 $ #define MOTOR_ON "" #define GET_IDENT "SVN?" -#define OUTPUT_TERMINATOR "\r" - /* Status byte bits */ #define M_AXIS_MOVING 0x01 #define M_MOTOR_POWER 0x02 @@ -344,7 +342,6 @@ exit: static RTN_STATUS send_mess(int card, char const *com, char *name) { struct MMcontroller *cntrl; - char local_buff[BUFF_SIZE]; int size; int nwrite; @@ -364,16 +361,12 @@ static RTN_STATUS send_mess(int card, char const *com, char *name) return(ERROR); } - /* Make a local copy of the string and add the command line terminator. */ - strcpy(local_buff, com); - strcat(local_buff, OUTPUT_TERMINATOR); - - Debug(2, "send_mess(): message = %s\n", local_buff); + Debug(2, "send_mess(): message = %s\n", com); cntrl = (struct MMcontroller *) motor_state[card]->DevicePrivate; - pasynOctetSyncIO->write(cntrl->pasynUser, local_buff, strlen(local_buff), - SERIAL_TIMEOUT, &nwrite); + pasynOctetSyncIO->write(cntrl->pasynUser, com, strlen(com), + SERIAL_TIMEOUT, &nwrite); return(OK); } @@ -414,8 +407,9 @@ static int recv_mess(int card, char *com, int flag) flush=0; timeout = SERIAL_TIMEOUT; } - status = pasynOctetSyncIO->read(cntrl->pasynUser, com, BUFF_SIZE, "\r", - 1, flush, timeout, &nread, &eomReason); + if (flush) status = pasynOctetSyncIO->flush(cntrl->pasynUser); + status = pasynOctetSyncIO->read(cntrl->pasynUser, com, BUFF_SIZE, + timeout, &nread, &eomReason); if ((status != asynSuccess) || (nread <= 0)) { @@ -424,7 +418,6 @@ static int recv_mess(int card, char *com, int flag) } else { - com[nread-1] = '\0'; /* Test for "system error" response. */ if (strncmp(com, "SE", 2) == 0) errlogMessage("recv_mess(): PM500 system error.\n"); @@ -531,7 +524,7 @@ static int motor_init() /* Initialize communications channel */ success_rtn = pasynOctetSyncIO->connect(cntrl->asyn_port, - cntrl->asyn_address, &cntrl->pasynUser); + cntrl->asyn_address, &cntrl->pasynUser, NULL); if (success_rtn == asynSuccess) {