Convert from MPF to ASYN

This commit is contained in:
MarkRivers
2004-04-20 22:46:07 +00:00
parent b766e3b9bc
commit 0ec1bcff63
4 changed files with 42 additions and 35 deletions
+2 -1
View File
@@ -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
+12 -12
View File
@@ -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)
+22 -18
View File
@@ -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)
{
+6 -4
View File
@@ -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 */