diff --git a/src/drv/drvAb.c b/src/drv/drvAb.c new file mode 100644 index 000000000..ce4c57351 --- /dev/null +++ b/src/drv/drvAb.c @@ -0,0 +1,157 @@ + +/* drvAb.c */ +/* share/src/drv $Id$ */ + +/* drvAb.c - Driver Support Routines for Alleb Bradley */ +#include +#include + +#include +#include +#include +#include + /* AllenBradley serial link and ai,ao,bi and bo cards */ + +extern struct ab_region *p6008s[]; /* AllenBradley serial io link */ + +extern short ab_link_to[AB_MAX_LINKS]; +extern short ab_comm_to[AB_MAX_LINKS]; +extern short ab_bad_response[AB_MAX_LINKS]; +extern short ab_or_scaling_error[AB_MAX_LINKS][AB_MAX_ADAPTERS][AB_MAX_CARDS]; +extern short ab_scaling_error[AB_MAX_LINKS][AB_MAX_ADAPTERS][AB_MAX_CARDS]; +extern short ab_data_to[AB_MAX_LINKS][AB_MAX_ADAPTERS][AB_MAX_CARDS]; +extern short ab_cmd_to[AB_MAX_LINKS][AB_MAX_ADAPTERS][AB_MAX_CARDS]; +/* Allen-Bradley cards which have been addressed */ +extern unsigned short ab_config[AB_MAX_LINKS][AB_MAX_ADAPTERS][AB_MAX_CARDS]; + +/* If any of the following does not exist replace it with #define <> NULL */ +int report(); +int init(); + +struct { + long number; + DRVSUPFUN report; + DRVSUPFUN init +} drvAb={ + 2, + report, + init}; + + + +static long report(fp) + FILE *fp; +{ + register short i,card,adapter; + + /* report all of the Allen-Bradley Serial Links present */ + for (i = 0; i < AB_MAX_LINKS; i++){ + if (p6008s[i]) + printf("AB-6008SV: Card %d\tcto: %d lto: %d badres: %d\n" + ,i,ab_comm_to[i],ab_link_to[i],ab_bad_response[i]); + else continue; + + /* report all cards to which the database has interfaced */ + /* as there is no way to poll the Allen-Bradley IO to */ + /* determine which card is there we assume that any interface */ + /* which is successful implies the card type is correct */ + /* since all binaries succeed and some analog inputs will */ + /* succeed for either type this is a shakey basis */ + for (adapter = 0; adapter < AB_MAX_ADAPTERS; adapter++){ + for (card = 0; card < AB_MAX_CARDS; card++){ + switch (ab_config[i][adapter][card] & AB_INTERFACE_TYPE){ + case (AB_BI_INTERFACE): + printf("\tAdapter %d Card %d:\tBI",adapter,card); + break; + case (AB_BO_INTERFACE): + printf("\tAdapter %d Card %d:\tBO",adapter,card); + break; + case (AB_AI_INTERFACE): + if ((ab_config[i][adapter][card]&AB_CARD_TYPE)==AB1771IXE) + printf("\tAdapter %d Card %d:\tAB1771IXE\tcto: %d dto: %d sclerr: %d %d", + adapter,card,ab_cmd_to[i][adapter][card], + ab_data_to[i][adapter][card], + ab_scaling_error[i][adapter][card], + ab_or_scaling_error[i][adapter][card]); + else if ((ab_config[i][adapter][card] & AB_CARD_TYPE) == AB1771IL) + printf("\tAdapter %d Card %d:\tAB1771IL\tcto: %d dto: %d sclerr: %d %d", + adapter,card,ab_cmd_to[i][adapter][card], + ab_data_to[i][adapter][card], + ab_scaling_error[i][adapter][card], + ab_or_scaling_error[i][adapter][card]); + else if ((ab_config[i][adapter][card] & AB_CARD_TYPE) == AB1771IFE_SE) + printf("\tAdapter %d Card %d:\tAB1771IFE_SE\tcto: %d dto: %d sclerr: %d %d", + adapter,card,ab_cmd_to[i][adapter][card], + ab_data_to[i][adapter][card], + ab_scaling_error[i][adapter][card], + ab_or_scaling_error[i][adapter][card]); + else if ((ab_config[i][adapter][card] & AB_CARD_TYPE) == AB1771IFE_4to20MA) + printf("\tAdapter %d Card %d:\tAB1771IFE_4to20MA\tcto: %d dto: %d sclerr: %d %d", + adapter,card,ab_cmd_to[i][adapter][card], + ab_data_to[i][adapter][card], + ab_scaling_error[i][adapter][card], + ab_or_scaling_error[i][adapter][card]); + else if ((ab_config[i][adapter][card] & AB_CARD_TYPE) == AB1771IFE) + printf("\tAdapter %d Card %d:\tAB1771IFE\tcto: %d dto: %d sclerr: %d %d", + adapter,card,ab_cmd_to[i][adapter][card], + ab_data_to[i][adapter][card], + ab_scaling_error[i][adapter][card], + ab_or_scaling_error[i][adapter][card]); + break; + case (AB_AO_INTERFACE): + printf("\tAdapter %d Card %d:\tAB1771OFE\tcto: %d dto: %d", + adapter,card,ab_cmd_to[i][adapter][card], + ab_data_to[i][adapter][card]); + break; + default: + continue; + } + if ((ab_config[i][adapter][card] & AB_INIT_BIT) == 0) + printf(" NOT INITIALIZED\n"); + else printf("\n"); + } + } + } + +} + +/* forward reference for ioc_reboot */ +int ioc_reboot(); + +static long init() +{ + int status; + + rebootHookAdd(ioc_reboot); + ab_driver_init(); + return(0); +} + +/* ioc_reboot - routine to call when IOC is rebooted with a control-x */ + +extern int abScanId; +short ab_disable=0; + +int ioc_reboot(boot_type) +int boot_type; +{ + short i; + static char wait_msg[] = {"I Hate to WAIT"}; + register char *pmsg = &wait_msg[0]; + + /* Stop communication to the Allen-Bradley Scanner Cards */ + if (abScanId != 0){ + /* flag the analog output and binary IO routines to stop */ + ab_disable = 1; + + /* delete the scan task stops analog input communication */ + taskDelete(abScanId); + + /* this seems to be necessary for the AB card to stop talking */ + printf("\nReboot: delay "); + for(i = 0; i <= 14; i++){ + printf("%c",*(pmsg+i)); + taskDelay(20); + } + } +} diff --git a/src/drv/drvAt5Vxi.c b/src/drv/drvAt5Vxi.c new file mode 100644 index 000000000..1f04cb857 --- /dev/null +++ b/src/drv/drvAt5Vxi.c @@ -0,0 +1,42 @@ + +/* drvAt5Vxi.c */ +/* share/src/drv $Id$ */ + +/* drvAt5Vxi.c - Driver Support Routines for At5Vxi */ +#include +#include + +#include +#include +#include + + +/* If any of the following does not exist replace it with #define <> NULL */ +int report(); +int init(); + +struct { + long number; + DRVSUPFUN report; + DRVSUPFUN init +} drvAt5Vxi={ + 2, + report, + init}; + + +static long report(fp) + FILE *fp; +{ + register int i; + + vxi_io_report(); +} + +static long init() +{ + int status; + + at5vxi_init(); + return(0); +} diff --git a/src/drv/drvCompuSm.c b/src/drv/drvCompuSm.c new file mode 100644 index 000000000..92d0f37a7 --- /dev/null +++ b/src/drv/drvCompuSm.c @@ -0,0 +1,43 @@ + +/* drvCompuSm.c */ +/* share/src/drv $Id$ */ + +/* drvCompuSm.c - Driver Support Routines for CompuSm */ +#include +#include + +#include +#include +#include +#include + +extern struct compumotor *pcompu_motors[]; /* stepper motor - CM1830 */ + +/* If any of the following does not exist replace it with #define <> NULL */ +int report(); +int init(); + +struct { + long number; + DRVSUPFUN report; + DRVSUPFUN init +} drvCompuSm={ + 2, + report, + init}; + +static long report(fp) + FILE *fp; +{ + register int i; + + for (i = 0; i < MAX_COMPU_MOTORS; i++) + if (pcompu_motors[i]) fprintf(fp,"SM: CM1830: card %d\n",i); +} + +static long init() +{ + int status; + + return(0); +} diff --git a/src/drv/drvDvx.c b/src/drv/drvDvx.c new file mode 100644 index 000000000..6fb6e1929 --- /dev/null +++ b/src/drv/drvDvx.c @@ -0,0 +1,41 @@ + +/* drvDvx.c */ +/* share/src/drv $Id$ */ + +/* drvDvx.c - Driver Support Routines for Dvx */ +#include +#include + +#include +#include +#include +#include + + +/* If any of the following does not exist replace it with #define <> NULL */ +int report(); +int init(); + +struct { + long number; + DRVSUPFUN report; + DRVSUPFUN init +} drvDvx={ + 2, + report, + init}; + +static long report(fp) + FILE *fp; +{ + register int i; + + fprintf(fp,"dvx report not implemented\n"); +} + +static long init() +{ + int status; + + return(0); +} diff --git a/src/drv/drvJgvtr1.c b/src/drv/drvJgvtr1.c new file mode 100644 index 000000000..a47bd137a --- /dev/null +++ b/src/drv/drvJgvtr1.c @@ -0,0 +1,41 @@ + +/* drvJgvtr1.c */ +/* share/src/drv $Id$ */ + +/* drvJgvtr1.c - Driver Support Routines for Jgvtr1 */ +#include +#include + +#include +#include +#include + + +/* If any of the following does not exist replace it with #define <> NULL */ +int report(); +int init(); + +struct { + long number; + DRVSUPFUN report; + DRVSUPFUN init +} drvJgvtr1={ + 2, + report, + init}; + +static long report(fp) + FILE *fp; +{ + register int i; + + jgvtr1_io_report(); + return(0); +} + +static long init() +{ + int status; + + return(0); +} diff --git a/src/drv/drvMz8310.c b/src/drv/drvMz8310.c new file mode 100644 index 000000000..de7de7778 --- /dev/null +++ b/src/drv/drvMz8310.c @@ -0,0 +1,41 @@ + +/* drvMz8310.c */ +/* share/src/drv $Id$ */ + +/* drvMz8310.c - Driver Support Routines for Mz8310 */ +#include +#include + +#include +#include +#include + + +/* If any of the following does not exist replace it with #define <> NULL */ +int report(); +int init(); + +struct { + long number; + DRVSUPFUN report; + DRVSUPFUN init +} drvMz8310={ + 2, + report, + init}; + +static long report(fp) + FILE *fp; +{ + int card; + + for(card=0; card +#include + +#include +#include +#include +#include + +extern struct vmex_motor *oms_motor_present[]; /* stepper motor - OMS */ + +/* If any of the following does not exist replace it with #define <> NULL */ +int report(); +int init(); + +struct { + long number; + DRVSUPFUN report; + DRVSUPFUN init +} drvOms={ + 2, + report, + init}; + +static long report(fp) + FILE *fp; +{ + register int i; + + for (i = 0; i < MAX_OMS_CARDS; i++) + if (oms_motor_present[i]) printf("SM: OMS: card %d\n",i); +} + +static long init() +{ + int status; + + ai_init(); + return(0); +} diff --git a/src/drv/drvStc.c b/src/drv/drvStc.c new file mode 100644 index 000000000..3495a8a0c --- /dev/null +++ b/src/drv/drvStc.c @@ -0,0 +1,39 @@ + +/* drvStc.c */ +/* share/src/drv $Id$ */ + +/* drvStc.c - Driver Support Routines for Stc */ +#include +#include + +#include +#include +#include + + +/* If any of the following does not exist replace it with #define <> NULL */ +int report(); +int init(); + +struct { + long number; + DRVSUPFUN report; + DRVSUPFUN init +} drvStc={ + 2, + report, + init}; + +static long report(fp) + FILE *fp; +{ + + return(0); +} + +static long init() +{ + int status; + + return(0); +} diff --git a/src/drv/drvTime.c b/src/drv/drvTime.c new file mode 100644 index 000000000..5fd7eb012 --- /dev/null +++ b/src/drv/drvTime.c @@ -0,0 +1,42 @@ + +/* drvTime.c */ +/* share/src/drv $Id$ */ + +/* drvTime.c - Driver Support Routines for Time */ +#include +#include + +#include +#include +#include + + +/* If any of the following does not exist replace it with #define <> NULL */ +int report(); +int init(); + +struct { + long number; + DRVSUPFUN report; + DRVSUPFUN init +} drvTime={ + 2, + report, + init}; + +static long report(fp) + FILE *fp; +{ + register int i; + + time_io_report(); + return(0); +} + +static long init() +{ + int status; + + time_driver_init(); + return(0); +} diff --git a/src/drv/drvXy566.c b/src/drv/drvXy566.c new file mode 100644 index 000000000..c72f36d18 --- /dev/null +++ b/src/drv/drvXy566.c @@ -0,0 +1,37 @@ + +/* drvXy566.c */ +/* share/src/drv $Id$ */ + +/* drvXy566.c - Driver Support Routines for xy566 */ +#include +#include + +#include +#include +#include + + +/* If any of the following does not exist replace it with #define <> NULL */ +int report(); +int init(); +struct { + long number; + DRVSUPFUN report; + DRVSUPFUN init +} drvXy566={ + 2, + report, + init}; + +static long report(fp) + FILE *fp; +{ + xy566_io_report(); + return(0); +} + +static int init() +{ + + return(0); +} diff --git a/src/drv/steppermotor.h b/src/drv/steppermotor.h new file mode 100644 index 000000000..d033c7e9f --- /dev/null +++ b/src/drv/steppermotor.h @@ -0,0 +1,67 @@ + +/* steppermotor.h */ +/* share/src/drv $Id$ */ + +/* + * steppermotor.h + * + * header file to support database library interface to motor drivers + * + * Author: Bob Dalesio + * Date: 12-11-89 + * @(#)ai_driver.h 1.1 9/22/88 + * + * Control System Software for the GTA Project + * + * Copyright 1988, 1989, the Regents of the University of California. + * + * This software was produced under a U.S. Government contract + * (W-7405-ENG-36) at the Los Alamos National Laboratory, which is + * operated by the University of California for the U.S. Department + * of Energy. + * + * Developed by the Controls and Automation Group (AT-8) + * Accelerator Technology Division + * Los Alamos National Laboratory + * + * Direct inqueries to: + * Bob Dalesio, AT-8, Mail Stop H820 + * Los Alamos National Laboratory + * Los Alamos, New Mexico 87545 + * Phone: (505) 667-3414 + * E-mail: dalesio@luke.lanl.gov + * + * Modification Log: + * ----------------- + */ + +/* readback data passed to the database library routine from the motor driver */ +struct motor_data{ +short cw_limit; +short ccw_limit; +short moving; +short direction; +short constant_velocity; +long velocity; +long encoder_position; +long motor_position; +long accel; +}; + +/* + * Sets values for the database library based on the value flag: + * 0 - set the mode of the motor (position/velocity) + * 1 - set the velocity of the motor + * 2 - set the poistion of the motor + * 3 - start motor rotating + * 4 - set the callback routine for a motor + */ +#define SM_MODE 0 +#define SM_VELOCITY 1 +#define SM_MOVE 2 +#define SM_MOTION 3 +#define SM_CALLBACK 4 +#define SM_SET_HOME 5 +#define SM_ENCODER_RATIO 6 +#define SM_MOTOR_RESOLUTION 7 +#define SM_READ 8