From 0ec1bcff63ebd6fa82b5f2bb0948cffb97398add Mon Sep 17 00:00:00 2001 From: MarkRivers Date: Tue, 20 Apr 2004 22:46:07 +0000 Subject: [PATCH] Convert from MPF to ASYN --- motorApp/MclennanSrc/Makefile | 3 +- motorApp/MclennanSrc/MclennanRegister.cc | 24 +++++++------- motorApp/MclennanSrc/drvPM304.cc | 40 +++++++++++++----------- motorApp/MclennanSrc/drvPM304.h | 10 +++--- 4 files changed, 42 insertions(+), 35 deletions(-) diff --git a/motorApp/MclennanSrc/Makefile b/motorApp/MclennanSrc/Makefile index 39155748..2ba9342f 100644 --- a/motorApp/MclennanSrc/Makefile +++ b/motorApp/MclennanSrc/Makefile @@ -13,7 +13,8 @@ LIBRARY_IOC = Mclennan SRCS += MclennanRegister.cc SRCS += devPM304.cc drvPM304.cc -Mclennan_LIBS += motor motorCOM_mpf +Mclennan_LIBS += motor +Mclennan_LIBS += asyn Mclennan_LIBS += $(EPICS_BASE_IOC_LIBS) include $(TOP)/configure/RULES diff --git a/motorApp/MclennanSrc/MclennanRegister.cc b/motorApp/MclennanSrc/MclennanRegister.cc index c77f2671..c6d700bf 100644 --- a/motorApp/MclennanSrc/MclennanRegister.cc +++ b/motorApp/MclennanSrc/MclennanRegister.cc @@ -2,9 +2,9 @@ FILENAME... MclennanRegister.cc USAGE... Register Mclennan motor device driver shell commands. -Version: $Revision: 1.1 $ -Modified By: $Author: sluiter $ -Last Modified: $Date: 2003-05-28 14:49:52 $ +Version: $Revision: 1.2 $ +Modified By: $Author: rivers $ +Last Modified: $Date: 2004-04-20 22:46:07 $ */ /***************************************************************** @@ -19,29 +19,29 @@ of this distribution. **********************************************************************/ #include -#include "MclennanRegister.h" +#include "drvPM304.h" #include "epicsExport.h" extern "C" { -// ACS Setup arguments +// PM304Setup arguments static const iocshArg setupArg0 = {"Max. controller count", iocshArgInt}; static const iocshArg setupArg1 = {"N/A", iocshArgInt}; static const iocshArg setupArg2 = {"Polling rate", iocshArgInt}; -// ACS Config arguments + +// PM304Config arguments static const iocshArg configArg0 = {"Card being configured", iocshArgInt}; -static const iocshArg configArg1 = {"MPF server location", iocshArgInt}; -static const iocshArg configArg2 = {"MPF server task name", iocshArgString}; -static const iocshArg configArg3 = {"Number of axes", iocshArgInt}; +static const iocshArg configArg1 = {"asyn port name", iocshArgString}; +static const iocshArg configArg2 = {"Number of axes", iocshArgInt}; static const iocshArg * const PM304SetupArgs[3] = {&setupArg0, &setupArg1, &setupArg2}; -static const iocshArg * const PM304ConfigArgs[4] = {&configArg0, &configArg1, +static const iocshArg * const PM304ConfigArgs[3] = {&configArg0, &configArg1, &configArg2}; static const iocshFuncDef setupPM304 = {"PM304Setup", 3, PM304SetupArgs}; -static const iocshFuncDef configPM304 = {"PM304Config", 4, PM304ConfigArgs}; +static const iocshFuncDef configPM304 = {"PM304Config", 3, PM304ConfigArgs}; static void setupPM304CallFunc(const iocshArgBuf *args) { @@ -49,7 +49,7 @@ static void setupPM304CallFunc(const iocshArgBuf *args) } static void configPM304CallFunc(const iocshArgBuf *args) { - PM304Config(args[0].ival, args[1].ival, args[2].sval, args[3].ival); + PM304Config(args[0].ival, args[1].sval, args[2].ival); } static void MclennanRegister(void) diff --git a/motorApp/MclennanSrc/drvPM304.cc b/motorApp/MclennanSrc/drvPM304.cc index dc70eb37..afea531c 100644 --- a/motorApp/MclennanSrc/drvPM304.cc +++ b/motorApp/MclennanSrc/drvPM304.cc @@ -33,12 +33,12 @@ #include #include "motor.h" #include "drvPM304.h" -#include "serialIO.h" +#include "asynSyncIO.h" #include "epicsExport.h" #define STATIC static -#define SERIAL_TIMEOUT 2000 /* Command timeout in msec */ +#define TIMEOUT 2.0 /* Command timeout in sec */ #define BUFF_SIZE 200 /* Maximum length of string to/from PM304 */ @@ -363,8 +363,8 @@ STATIC RTN_STATUS send_mess(int card, const char *com, char c) strcpy(buff, p); strcat(buff, OUTPUT_TERMINATOR); Debug(2, "send_mess: sending message to card %d, message=%s\n", card, buff); - cntrl->serialInfo->serialIOSendRecv(buff, strlen(buff), response, - BUFF_SIZE, INPUT_TERMINATOR, SERIAL_TIMEOUT); + pasynSyncIO->writeRead(cntrl->pasynUser, buff, strlen(buff), response, + BUFF_SIZE, INPUT_TERMINATOR, 1, TIMEOUT); Debug(2, "send_mess: card %d, response=%s\n", card, response); } @@ -383,10 +383,11 @@ STATIC RTN_STATUS send_mess(int card, const char *com, char c) /*****************************************************/ STATIC int recv_mess(int card, char *com, int flag) { - int timeout; + double timeout; int len=0; char *pos; char temp[BUFF_SIZE]; + int flush; struct PM304controller *cntrl; com[0] = '\0'; @@ -399,11 +400,15 @@ STATIC int recv_mess(int card, char *com, int flag) cntrl = (struct PM304controller *) motor_state[card]->DevicePrivate; - if (flag == FLUSH) + if (flag == FLUSH) { + flush = 1; timeout = 0; - else - timeout = SERIAL_TIMEOUT; - len = cntrl->serialInfo->serialIORecv(com, BUFF_SIZE, INPUT_TERMINATOR, timeout); + } else { + flush = 0; + timeout = TIMEOUT; + } + len = pasynSyncIO->read(cntrl->pasynUser, com, BUFF_SIZE, + INPUT_TERMINATOR, 1, flush, timeout); /* The response from the PM304 is terminated with CR/LF. Remove these */ if (len < 2) com[0] = '\0'; else com[len-2] = '\0'; @@ -471,8 +476,8 @@ STATIC int send_recv_mess(int card, const char *out, char *response) strcpy(buff, p); strcat(buff, OUTPUT_TERMINATOR); Debug(2, "send_recv_mess: sending message to card %d, message=%s\n", card, buff); - len = cntrl->serialInfo->serialIOSendRecv(buff, strlen(buff), - response, BUFF_SIZE, INPUT_TERMINATOR, SERIAL_TIMEOUT); + len = pasynSyncIO->writeRead(cntrl->pasynUser, buff, strlen(buff), + response, BUFF_SIZE, INPUT_TERMINATOR, 1, TIMEOUT); } /* The response from the PM304 is terminated with CR/LF. Remove these */ @@ -541,9 +546,8 @@ PM304Setup(int num_cards, /* maximum number of controllers in system */ /* PM304Config() */ /*****************************************************/ RTN_STATUS -PM304Config(int card, /* card being configured */ - int location, /* card for RS-232 */ - const char *name, /* server_task for RS-232 */ +PM304Config(int card, /* card being configured */ + const char *port, /* asyn port name */ int n_axes) /* Number of axes */ { struct PM304controller *cntrl; @@ -555,10 +559,9 @@ PM304Config(int card, /* card being configured */ motor_state[card] = (struct controller *) malloc(sizeof(struct controller)); motor_state[card]->DevicePrivate = malloc(sizeof(struct PM304controller)); cntrl = (struct PM304controller *) motor_state[card]->DevicePrivate; - cntrl->serial_card = location; cntrl->n_axes = n_axes; cntrl->model = MODEL_PM304; /* Assume PM304 initially */ - strcpy(cntrl->serial_task, name); + strcpy(cntrl->port, port); return(OK); } @@ -602,8 +605,9 @@ STATIC int motor_init() /* Initialize communications channel */ success_rtn = false; - cntrl->serialInfo = new serialIO(cntrl->serial_card, - cntrl->serial_task, &success_rtn); + success_rtn = pasynSyncIO->connect(cntrl->port, 0, &cntrl->pasynUser); + Debug(1, "motor_init, return from pasynSyncIO->connect for port %s = %d, pasynUser=%p\n", + cntrl->port, success_rtn, cntrl->pasynUser); if (success_rtn == true) { diff --git a/motorApp/MclennanSrc/drvPM304.h b/motorApp/MclennanSrc/drvPM304.h index c2c39053..99276063 100644 --- a/motorApp/MclennanSrc/drvPM304.h +++ b/motorApp/MclennanSrc/drvPM304.h @@ -20,7 +20,7 @@ #define INCdrvPM304h 1 #include "motordrvCom.h" -#include "serialIO.h" +#include "asynSyncIO.h" /* PM304 default profile. */ @@ -35,12 +35,14 @@ struct PM304controller { - serialIO *serialInfo; /* For RS-232 */ - int serial_card; /* Card on which Hideos/MPF is running */ - char serial_task[20]; /* Hideos/MPF task/server name for serial port */ + asynUser *pasynUser; /* asyn */ int n_axes; /* Number of axes on this controller */ int model; /* Model = MODEL_PM304 or MODEL_PM600 */ int use_encoder[PM304_MAX_CHANNELS]; /* Does axis have an encoder? */ + char port[80]; /* asyn port name */ }; +RTN_STATUS PM304Setup(int, int, int); +RTN_STATUS PM304Config(int, const char *, int); + #endif /* INCdrvPM304h */