diff --git a/src/dev/softDev/Makefile b/src/dev/softDev/Makefile index d3a475011..6c4f11cb0 100644 --- a/src/dev/softDev/Makefile +++ b/src/dev/softDev/Makefile @@ -12,6 +12,8 @@ include $(TOP)/configure/CONFIG DBD += devSoft.dbd +LIBSRCS += devAaiSoft.c +LIBSRCS += devAaoSoft.c LIBSRCS += devAiSoft.c LIBSRCS += devAiSoftRaw.c LIBSRCS += devAoSoft.c diff --git a/src/dev/softDev/devAaiSoft.c b/src/dev/softDev/devAaiSoft.c new file mode 100644 index 000000000..06f62b5d9 --- /dev/null +++ b/src/dev/softDev/devAaiSoft.c @@ -0,0 +1,87 @@ +/*************************************************************************\ +* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne +* National Laboratory. +* Copyright (c) 2002 The Regents of the University of California, as +* Operator of Los Alamos National Laboratory. +* EPICS BASE is distributed subject to a Software License Agreement found +* in file LICENSE that is included with this distribution. +\*************************************************************************/ + +/* $Id$ + * devAaiSoft.c - Device Support Routines for soft Waveform Records + * + * Original Author: Bob Dalesio + * Current Author: Dirk Zimoch + * Date: 27-MAY-2010 + */ + +#include +#include +#include + +#include "alarm.h" +#include "dbDefs.h" +#include "dbAccess.h" +#include "recGbl.h" +#include "devSup.h" +#include "cantProceed.h" +#include "menuYesNo.h" +#include "aaiRecord.h" +#include "epicsExport.h" + +/* Create the dset for devAaiSoft */ +static long init_record(); +static long read_aai(); + +struct { + long number; + DEVSUPFUN report; + DEVSUPFUN init; + DEVSUPFUN init_record; + DEVSUPFUN get_ioint_info; + DEVSUPFUN read_aai; +} devAaiSoft = { + 5, + NULL, + NULL, + init_record, + NULL, + read_aai +}; +epicsExportAddress(dset,devAaiSoft); + +static long init_record(aaiRecord *prec) +{ + /* INP must be a CONSTANT or a PV_LINK or a DB_LINK or a CA_LINK*/ + switch (prec->inp.type) { + case CONSTANT: + prec->nord = 0; + break; + case PV_LINK: + case DB_LINK: + case CA_LINK: + break; + default : + recGblRecordError(S_db_badField, (void *)prec, + "devAaiSoft (init_record) Illegal INP field"); + return(S_db_badField); + } + return 0; +} + +static long read_aai(aaiRecord *prec) +{ + long nRequest = prec->nelm; + + dbGetLink(prec->simm == menuYesNoYES ? &prec->siol : &prec->inp, + prec->ftvl, prec->bptr, 0, &nRequest); + if (nRequest > 0) { + prec->nord = nRequest; + prec->udf=FALSE; + if (prec->tsel.type == CONSTANT && + prec->tse == epicsTimeEventDeviceTime) + dbGetTimeStamp(&prec->inp, &prec->time); + } + + return 0; +} diff --git a/src/dev/softDev/devAaoSoft.c b/src/dev/softDev/devAaoSoft.c new file mode 100644 index 000000000..54263b4ca --- /dev/null +++ b/src/dev/softDev/devAaoSoft.c @@ -0,0 +1,82 @@ +/*************************************************************************\ +* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne +* National Laboratory. +* Copyright (c) 2002 The Regents of the University of California, as +* Operator of Los Alamos National Laboratory. +* EPICS BASE is distributed subject to a Software License Agreement found +* in file LICENSE that is included with this distribution. +\*************************************************************************/ + +/* $Id$ + * devAaoSoft.c - Device Support Routines for soft Waveform Records + * + * Original Author: Bob Dalesio + * Current Author: Dirk Zimoch + * Date: 27-MAY-2010 + */ + +#include +#include +#include + +#include "alarm.h" +#include "dbDefs.h" +#include "dbAccess.h" +#include "recGbl.h" +#include "devSup.h" +#include "cantProceed.h" +#include "menuYesNo.h" +#include "aaoRecord.h" +#include "epicsExport.h" + +/* Create the dset for devAaoSoft */ +static long init_record(); +static long write_aao(); + +struct { + long number; + DEVSUPFUN report; + DEVSUPFUN init; + DEVSUPFUN init_record; + DEVSUPFUN get_ioint_info; + DEVSUPFUN read_aao; +} devAaoSoft = { + 5, + NULL, + NULL, + init_record, + NULL, + write_aao +}; +epicsExportAddress(dset,devAaoSoft); + +static long init_record(aaoRecord *prec) +{ + /* OUT must be a CONSTANT or a PV_LINK or a DB_LINK or a CA_LINK*/ + switch (prec->out.type) { + case CONSTANT: + prec->nord = 0; + break; + case PV_LINK: + case DB_LINK: + case CA_LINK: + break; + default : + recGblRecordError(S_db_badField, prec, + "devAaoSoft (init_record) Illegal OUT field"); + return(S_db_badField); + } + return 0; +} + +static long write_aao(aaoRecord *prec) +{ + long nRequest = prec->nelm; + dbPutLink(prec->simm == menuYesNoYES ? &prec->siol : &prec->out, + prec->ftvl, prec->bptr, nRequest); + if (nRequest>0) { + prec->nord = nRequest; + } + + return 0; +} diff --git a/src/dev/softDev/devSoft.dbd b/src/dev/softDev/devSoft.dbd index 28d235730..763ac47d5 100644 --- a/src/dev/softDev/devSoft.dbd +++ b/src/dev/softDev/devSoft.dbd @@ -1,3 +1,5 @@ +device(aai,CONSTANT,devAaiSoft,"Soft Channel") +device(aao,CONSTANT,devAaoSoft,"Soft Channel") device(ai,CONSTANT,devAiSoft,"Soft Channel") device(ao,CONSTANT,devAoSoft,"Soft Channel") device(bi,CONSTANT,devBiSoft,"Soft Channel") diff --git a/src/misc/base.dbd b/src/misc/base.dbd index 03408dbed..b7ea298e6 100644 --- a/src/misc/base.dbd +++ b/src/misc/base.dbd @@ -8,6 +8,8 @@ include "menuGlobal.dbd" include "menuConvert.dbd" # Record types +include "aaiRecord.dbd" +include "aaoRecord.dbd" include "aiRecord.dbd" include "aoRecord.dbd" include "aSubRecord.dbd"