forked from epics_driver_modules/motorBase
Convert from MPF to ASYN
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 <iocsh.h>
|
||||
#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)
|
||||
|
||||
@@ -33,12 +33,12 @@
|
||||
#include <drvSup.h>
|
||||
#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)
|
||||
{
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user