New asyn EOS processing. No longer add output EOS or strip input EOS

This commit is contained in:
MarkRivers
2004-11-10 05:33:20 +00:00
parent ee8b510864
commit b036169810
7 changed files with 59 additions and 102 deletions
+6 -13
View File
@@ -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);
+11 -16
View File
@@ -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);
-3
View File
@@ -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 */
+11 -18
View File
@@ -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)
{
+14 -21
View File
@@ -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 */
+8 -15
View File
@@ -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)
{
+9 -16
View File
@@ -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)
{