diff --git a/configure/CONFIG_DATABASE_VERSION b/configure/CONFIG_DATABASE_VERSION index 21ac836b0..93a87a0a3 100644 --- a/configure/CONFIG_DATABASE_VERSION +++ b/configure/CONFIG_DATABASE_VERSION @@ -1,8 +1,8 @@ # Version number for the database APIs and shared library EPICS_DATABASE_MAJOR_VERSION = 3 -EPICS_DATABASE_MINOR_VERSION = 17 -EPICS_DATABASE_MAINTENANCE_VERSION = 6 +EPICS_DATABASE_MINOR_VERSION = 18 +EPICS_DATABASE_MAINTENANCE_VERSION = 0 # Development flag, set to zero for release versions diff --git a/documentation/RELEASE_NOTES.md b/documentation/RELEASE_NOTES.md index 41813be23..a02d1a28b 100644 --- a/documentation/RELEASE_NOTES.md +++ b/documentation/RELEASE_NOTES.md @@ -60,6 +60,101 @@ IOCs now emit a warning when a database file containing the `state` record is loaded. This record has been deprecated for a while and will be removed beginning with EPICS 7.1. Consider using the `stringin` record instead. +### Record types publish dset's + +The record types in Base now define their device support entry table (DSET) +structures in the record header file. While still optional, developers of +external support modules are encouraged to start converting their code to use +the record's new definitions instead of the traditional approach of copying the +structure definitions into each source file that needs them. By following the +instructions below it is still possible for the converted code to build and +work with older Base releases. + +This would also be a good time to modify the device support to use the type-safe +device support entry tables that were introduced in Base-3.16.2 -- see +[#type-safe-device-and-driver-support-tables](this entry below) for the +description of that change, which is also optional for now. + +Look at the aiRecord for example. Near the top of the generated `aiRecord.h` +header file is a new section that declares the `aidset`: + +```C +/* Declare Device Support Entry Table */ +struct aiRecord; +typedef struct aidset { + dset common; + long (*read_ai)(struct aiRecord *prec); + long (*special_linconv)(struct aiRecord *prec, int after); +} aidset; +#define HAS_aidset +``` + +Notice that the common members (`number`, `report()`, `init()`, `init_record()` +and `get_ioint_info()` don't appear directly but are included by embedding the +`dset common` member instead. This avoids the need to have separate definitions +of those members in each record dset, but does require those members to be +wrapped inside another set of braces `{}` when initializing the data structure +for the individual device supports. It also requires changes to code that +references those common members, but that code usually only appears inside the +record type implementation and very rarely in device supports. + +An aiRecord device support that will only be built against this or later +versions of EPICS can now declare its dset like this: + +```C +aidset devAiSoft = { + { 6, NULL, NULL, init_record, NULL }, + read_ai, NULL +}; +epicsExportAddress(dset, devAiSoft); +``` + +However most device support that is not built into EPICS itself will need to +remain compatible with older EPICS versions, which is why the ai record's header +file also declares the preprocessor macro `HAS_aidset`. This makes it easy to +define the `aidset` in the device support code when it's needed, and not when +it's provided in the header: + +```C +#ifndef HAS_aidset +typedef struct aidset { + dset common; + long (*read_ai)(aiRecord *prec); + long (*special_linconv)(aiRecord *prec, int after); +} aidset; +#endif +aidset devAiSoft = { + { 6, NULL, NULL, init_record, NULL }, + read_ai, NULL +}; +epicsExportAddress(dset, devAiSoft); +``` + +The above `typedef struct` declaration was copied directly from the new +aiRecord.h file and wrapped in the `#ifndef HAS_aidset` conditional. + +This same pattern should be followed for all record types except for the lsi, +lso and printf record types, which have published their device support entry +table structures since they were first added to Base but didn't previously embed +the `dset common` member. Device support for these record types therefore can't +use the dset name since the new definitions are different from the originals and +will cause a compile error, so this pattern should be used instead: + +```C +#ifndef HAS_lsidset +struct { + dset common; + long (*read_string)(lsiRecord *prec); +} +#else +lsidset +#endif +devLsiEtherIP = { + {5, NULL, lsi_init, lsi_init_record, get_ioint_info}, + lsi_read +}; +``` + ## EPICS Release 7.0.3.1 **IMPORTANT NOTE:** *Some record types in this release will not be compatible diff --git a/modules/database/src/ioc/Makefile b/modules/database/src/ioc/Makefile index 70b1b5558..c19b55098 100644 --- a/modules/database/src/ioc/Makefile +++ b/modules/database/src/ioc/Makefile @@ -11,9 +11,10 @@ TOP = ../../../.. include $(TOP)/configure/CONFIG -USR_CPPFLAGS += -DUSE_TYPED_RSET +USR_CPPFLAGS += -DUSE_TYPED_RSET -DUSE_TYPED_DSET -SHRLIB_VERSION = 3.17.0 +# Shared library ABI version. +SHRLIB_VERSION = $(EPICS_DATABASE_MAJOR_VERSION).$(EPICS_DATABASE_MINOR_VERSION).$(EPICS_DATABASE_MAINTENANCE_VERSION) LIBRARY_IOC += dbCore dbCore_LIBS += ca Com diff --git a/modules/database/src/ioc/dbStatic/devSup.h b/modules/database/src/ioc/dbStatic/devSup.h index dc55a35dd..c54f476d4 100644 --- a/modules/database/src/ioc/dbStatic/devSup.h +++ b/modules/database/src/ioc/dbStatic/devSup.h @@ -34,7 +34,7 @@ struct link; /* aka DBLINK */ * * In Makefile: @code - USR_CFLAGS += -DUSE_TYPED_RSET -DUSE_TYPED_DSET + USR_CPPFLAGS += -DUSE_TYPED_RSET -DUSE_TYPED_DSET @endcode * * In C source file: @@ -48,10 +48,7 @@ struct link; /* aka DBLINK */ static long get_iointr_info(int detach, dbCommon *prec, IOCSCANPVT* pscan); static long longin_read(longinRecord *prec); - const struct { - dset common; - long (*read)(longinRecord *prec); - } devLiDevName = { + longindset devLiDevName = { { 5, // 4 from dset + 1 from longinRecord NULL, diff --git a/modules/database/src/std/Makefile b/modules/database/src/std/Makefile index d8eb39bdb..d323bc077 100644 --- a/modules/database/src/std/Makefile +++ b/modules/database/src/std/Makefile @@ -11,9 +11,10 @@ TOP = ../../../.. include $(TOP)/configure/CONFIG -USR_CPPFLAGS += -DUSE_TYPED_RSET +USR_CPPFLAGS += -DUSE_TYPED_RSET -DUSE_TYPED_DSET -SHRLIB_VERSION = 3.17.0 +# Shared library ABI version. +SHRLIB_VERSION = $(EPICS_DATABASE_MAJOR_VERSION).$(EPICS_DATABASE_MINOR_VERSION).$(EPICS_DATABASE_MAINTENANCE_VERSION) LIBRARY_IOC += dbRecStd dbRecStd_LIBS = dbCore ca Com diff --git a/modules/database/src/std/dev/Makefile b/modules/database/src/std/dev/Makefile index ec3713bd6..1412f217c 100644 --- a/modules/database/src/std/dev/Makefile +++ b/modules/database/src/std/dev/Makefile @@ -47,7 +47,6 @@ dbRecStd_SRCS += devSASoft.c dbRecStd_SRCS += devSiSoft.c dbRecStd_SRCS += devSoSoft.c dbRecStd_SRCS += devWfSoft.c -dbRecStd_SRCS += devGeneralTime.c dbRecStd_SRCS += devAiSoftCallback.c dbRecStd_SRCS += devBiSoftCallback.c @@ -68,6 +67,7 @@ dbRecStd_SRCS += devMbboDirectSoftCallback.c dbRecStd_SRCS += devPrintfSoftCallback.c dbRecStd_SRCS += devSoSoftCallback.c +dbRecStd_SRCS += devGeneralTime.c dbRecStd_SRCS += devTimestamp.c dbRecStd_SRCS += devStdio.c dbRecStd_SRCS += devEnviron.c diff --git a/modules/database/src/std/dev/devAaiSoft.c b/modules/database/src/std/dev/devAaiSoft.c index cb4aa0213..1f5765650 100644 --- a/modules/database/src/std/dev/devAaiSoft.c +++ b/modules/database/src/std/dev/devAaiSoft.c @@ -32,28 +32,18 @@ #include "epicsExport.h" /* Create the dset for devAaiSoft */ -static long init_record(); -static long read_aai(); +static long init_record(dbCommon *pcommon); +static long read_aai(aaiRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_aai; -} devAaiSoft = { - 5, - NULL, - NULL, - init_record, - NULL, +aaidset devAaiSoft = { + {5, NULL, NULL, init_record, NULL}, read_aai }; -epicsExportAddress(dset,devAaiSoft); +epicsExportAddress(dset, devAaiSoft); -static long init_record(aaiRecord *prec) +static long init_record(dbCommon *pcommon) { + aaiRecord *prec = (aaiRecord *)pcommon; DBLINK *plink = &prec->inp; /* This is pass 0, link hasn't been initialized yet */ diff --git a/modules/database/src/std/dev/devAaoSoft.c b/modules/database/src/std/dev/devAaoSoft.c index 3331ec1bf..98a84cd1a 100644 --- a/modules/database/src/std/dev/devAaoSoft.c +++ b/modules/database/src/std/dev/devAaoSoft.c @@ -30,28 +30,19 @@ #include "epicsExport.h" /* Create the dset for devAaoSoft */ -static long init_record(); -static long write_aao(); +static long init_record(dbCommon *pcommon); +static long write_aao(aaoRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_aao; -} devAaoSoft = { - 5, - NULL, - NULL, - init_record, - NULL, +aaodset devAaoSoft = { + {5, NULL, NULL, init_record, NULL}, write_aao }; -epicsExportAddress(dset,devAaoSoft); +epicsExportAddress(dset, devAaoSoft); -static long init_record(aaoRecord *prec) +static long init_record(dbCommon *pcommon) { + aaoRecord *prec = (aaoRecord *)pcommon; + if (dbLinkIsConstant(&prec->out)) { prec->nord = 0; } diff --git a/modules/database/src/std/dev/devAiSoft.c b/modules/database/src/std/dev/devAiSoft.c index 0ecc1b13f..136c7f5fe 100644 --- a/modules/database/src/std/dev/devAiSoft.c +++ b/modules/database/src/std/dev/devAiSoft.c @@ -26,30 +26,19 @@ #include "epicsExport.h" /* Create the dset for devAiSoft */ -static long init_record(aiRecord *prec); +static long init_record(dbCommon *pcommon); static long read_ai(aiRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_ai; - DEVSUPFUN special_linconv; -} devAiSoft = { - 6, - NULL, - NULL, - init_record, - NULL, - read_ai, - NULL +aidset devAiSoft = { + {6, NULL, NULL, init_record, NULL}, + read_ai, NULL }; epicsExportAddress(dset, devAiSoft); -static long init_record(aiRecord *prec) +static long init_record(dbCommon *pcommon) { + aiRecord *prec = (aiRecord *)pcommon; + if (recGblInitConstantLink(&prec->inp, DBF_DOUBLE, &prec->val)) prec->udf = FALSE; diff --git a/modules/database/src/std/dev/devAiSoftCallback.c b/modules/database/src/std/dev/devAiSoftCallback.c index 8bf6385e1..4eca6b562 100644 --- a/modules/database/src/std/dev/devAiSoftCallback.c +++ b/modules/database/src/std/dev/devAiSoftCallback.c @@ -153,8 +153,10 @@ static long init(int pass) return 0; } -static long init_record(aiRecord *prec) +static long init_record(dbCommon *pcommon) { + aiRecord *prec = (aiRecord *)pcommon; + if (recGblInitConstantLink(&prec->inp, DBF_DOUBLE, &prec->val)) prec->udf = FALSE; @@ -213,14 +215,8 @@ static long read_ai(aiRecord *prec) return 2; } -/* Create the dset for devAiSoftCallback */ -struct { - dset common; - DEVSUPFUN read_ai; - DEVSUPFUN special_linconv; -} devAiSoftCallback = { +aidset devAiSoftCallback = { {6, NULL, init, init_record, NULL}, - read_ai, - NULL + read_ai, NULL }; epicsExportAddress(dset, devAiSoftCallback); diff --git a/modules/database/src/std/dev/devAiSoftRaw.c b/modules/database/src/std/dev/devAiSoftRaw.c index f2cfd5df5..39bf6b956 100644 --- a/modules/database/src/std/dev/devAiSoftRaw.c +++ b/modules/database/src/std/dev/devAiSoftRaw.c @@ -25,30 +25,19 @@ #include "epicsExport.h" /* Create the dset for devAiSoftRaw */ -static long init_record(aiRecord *prec); +static long init_record(dbCommon *pcommon); static long read_ai(aiRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_ai; - DEVSUPFUN special_linconv; -} devAiSoftRaw = { - 6, - NULL, - NULL, - init_record, - NULL, - read_ai, - NULL +aidset devAiSoftRaw = { + {6, NULL, NULL, init_record, NULL}, + read_ai, NULL }; epicsExportAddress(dset, devAiSoftRaw); -static long init_record(aiRecord *prec) +static long init_record(dbCommon *pcommon) { + aiRecord *prec = (aiRecord *)pcommon; + recGblInitConstantLink(&prec->inp, DBF_LONG, &prec->rval); return 0; diff --git a/modules/database/src/std/dev/devAoSoft.c b/modules/database/src/std/dev/devAoSoft.c index 56bd05620..8772cdede 100644 --- a/modules/database/src/std/dev/devAoSoft.c +++ b/modules/database/src/std/dev/devAoSoft.c @@ -31,31 +31,17 @@ #include "aoRecord.h" #include "epicsExport.h" -/* added for Channel Access Links */ -static long init_record(aoRecord *prec); - /* Create the dset for devAoSoft */ +static long init_record(dbCommon *pcommon); static long write_ao(aoRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_ao; - DEVSUPFUN special_linconv; -}devAoSoft={ - 6, - NULL, - NULL, - init_record, - NULL, - write_ao, - NULL}; -epicsExportAddress(dset,devAoSoft); - -static long init_record(aoRecord *prec) +aodset devAoSoft = { + {6, NULL, NULL, init_record, NULL}, + write_ao, NULL +}; +epicsExportAddress(dset, devAoSoft); + +static long init_record(dbCommon *pcommon) { long status=0; diff --git a/modules/database/src/std/dev/devAoSoftCallback.c b/modules/database/src/std/dev/devAoSoftCallback.c index c1fb72f13..5144c772a 100644 --- a/modules/database/src/std/dev/devAoSoftCallback.c +++ b/modules/database/src/std/dev/devAoSoftCallback.c @@ -31,23 +31,12 @@ /* Create the dset for devAoSoftCallback */ static long write_ao(aoRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_ao; - DEVSUPFUN special_linconv; -}devAoSoftCallback={ - 6, - NULL, - NULL, - NULL, - NULL, - write_ao, - NULL}; -epicsExportAddress(dset,devAoSoftCallback); + +aodset devAoSoftCallback = { + {6, NULL, NULL, NULL, NULL}, + write_ao, NULL +}; +epicsExportAddress(dset, devAoSoftCallback); static long write_ao(aoRecord *prec) { diff --git a/modules/database/src/std/dev/devAoSoftRaw.c b/modules/database/src/std/dev/devAoSoftRaw.c index 05aed035e..bb2ae7d94 100644 --- a/modules/database/src/std/dev/devAoSoftRaw.c +++ b/modules/database/src/std/dev/devAoSoftRaw.c @@ -33,25 +33,13 @@ /* Create the dset for devAoSoftRaw */ static long write_ao(aoRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_ao; - DEVSUPFUN special_linconv; -}devAoSoftRaw={ - 6, - NULL, - NULL, - NULL, - NULL, - write_ao, - NULL + +aodset devAoSoftRaw = { + {6, NULL, NULL, NULL, NULL}, + write_ao, NULL }; -epicsExportAddress(dset,devAoSoftRaw); - +epicsExportAddress(dset, devAoSoftRaw); + static long write_ao(aoRecord *prec) { long status; diff --git a/modules/database/src/std/dev/devBiDbState.c b/modules/database/src/std/dev/devBiDbState.c index fcb6c8f63..373270ad5 100644 --- a/modules/database/src/std/dev/devBiDbState.c +++ b/modules/database/src/std/dev/devBiDbState.c @@ -69,20 +69,9 @@ static long read_bi(biRecord *prec) return 2; } -static struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_bi; -} devBiDbState = { - 5, - NULL, - init, - NULL, - NULL, - read_bi +/* Create the dset for devBiDbState */ +bidset devBiDbState = { + {5, NULL, init, NULL, NULL}, + read_bi }; - epicsExportAddress(dset, devBiDbState); diff --git a/modules/database/src/std/dev/devBiSoft.c b/modules/database/src/std/dev/devBiSoft.c index 12640ad0c..41a308ae7 100644 --- a/modules/database/src/std/dev/devBiSoft.c +++ b/modules/database/src/std/dev/devBiSoft.c @@ -25,28 +25,19 @@ #include "epicsExport.h" /* Create the dset for devBiSoft */ -static long init_record(biRecord *prec); +static long init_record(dbCommon *pcommon); static long read_bi(biRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_bi; -} devBiSoft = { - 5, - NULL, - NULL, - init_record, - NULL, +bidset devBiSoft = { + {5, NULL, NULL, init_record, NULL}, read_bi }; epicsExportAddress(dset, devBiSoft); -static long init_record(biRecord *prec) +static long init_record(dbCommon *pcommon) { + biRecord *prec = (biRecord *)pcommon; + if (recGblInitConstantLink(&prec->inp, DBF_ENUM, &prec->val)) prec->udf = FALSE; return 0; diff --git a/modules/database/src/std/dev/devBiSoftCallback.c b/modules/database/src/std/dev/devBiSoftCallback.c index 607b1af33..06100714c 100644 --- a/modules/database/src/std/dev/devBiSoftCallback.c +++ b/modules/database/src/std/dev/devBiSoftCallback.c @@ -151,8 +151,10 @@ static long init(int pass) return 0; } -static long init_record(biRecord *prec) +static long init_record(dbCommon *pcommon) { + biRecord *prec = (biRecord *)pcommon; + if (recGblInitConstantLink(&prec->inp, DBR_ENUM, &prec->val)) prec->udf = FALSE; @@ -204,10 +206,7 @@ static long read_bi(biRecord *prec) } /* Create the dset for devBiSoftCallback */ -struct { - dset common; - DEVSUPFUN read_bi; -} devBiSoftCallback = { +bidset devBiSoftCallback = { {5, NULL, init, init_record, NULL}, read_bi }; diff --git a/modules/database/src/std/dev/devBiSoftRaw.c b/modules/database/src/std/dev/devBiSoftRaw.c index a71bf89cb..90fbcbbcc 100644 --- a/modules/database/src/std/dev/devBiSoftRaw.c +++ b/modules/database/src/std/dev/devBiSoftRaw.c @@ -25,28 +25,19 @@ #include "epicsExport.h" /* Create the dset for devBiSoftRaw */ -static long init_record(biRecord *prec); +static long init_record(dbCommon *pcommon); static long read_bi(biRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_bi; -} devBiSoftRaw = { - 5, - NULL, - NULL, - init_record, - NULL, +bidset devBiSoftRaw = { + {5, NULL, NULL, init_record, NULL}, read_bi }; epicsExportAddress(dset, devBiSoftRaw); -static long init_record(biRecord *prec) +static long init_record(dbCommon *pcommon) { + biRecord *prec = (biRecord *)pcommon; + recGblInitConstantLink(&prec->inp, DBF_ULONG, &prec->rval); return 0; diff --git a/modules/database/src/std/dev/devBoDbState.c b/modules/database/src/std/dev/devBoDbState.c index 26e97ae5b..f9a7606c9 100644 --- a/modules/database/src/std/dev/devBoDbState.c +++ b/modules/database/src/std/dev/devBoDbState.c @@ -67,20 +67,9 @@ static long write_bo(boRecord *prec) return 0; } -static struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_bo; -} devBoDbState = { - 5, - NULL, - init, - NULL, - NULL, - write_bo +/* Create the dset for devBoDbState */ +bodset devBoDbState = { + {5, NULL, init, NULL, NULL}, + write_bo }; - epicsExportAddress(dset, devBoDbState); diff --git a/modules/database/src/std/dev/devBoSoft.c b/modules/database/src/std/dev/devBoSoft.c index ba6ff14a7..b86454252 100644 --- a/modules/database/src/std/dev/devBoSoft.c +++ b/modules/database/src/std/dev/devBoSoft.c @@ -29,31 +29,18 @@ #include "boRecord.h" #include "epicsExport.h" -static long init_record(boRecord *prec); - /* Create the dset for devBoSoft */ +static long init_record(dbCommon *pcommon); static long write_bo(boRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_bo; -}devBoSoft={ - 5, - NULL, - NULL, - init_record, - NULL, - write_bo +bodset devBoSoft = { + {5, NULL, NULL, init_record, NULL}, + write_bo }; -epicsExportAddress(dset,devBoSoft); - -static long init_record(boRecord *prec) +epicsExportAddress(dset, devBoSoft); + +static long init_record(dbCommon *pcommon) { - long status=0; /* dont convert */ diff --git a/modules/database/src/std/dev/devBoSoftCallback.c b/modules/database/src/std/dev/devBoSoftCallback.c index ffb68e525..93735588b 100644 --- a/modules/database/src/std/dev/devBoSoftCallback.c +++ b/modules/database/src/std/dev/devBoSoftCallback.c @@ -31,22 +31,11 @@ /* Create the dset for devBoCallbackSoft */ static long write_bo(boRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_bo; -}devBoSoftCallback={ - 5, - NULL, - NULL, - NULL, - NULL, - write_bo +bodset devBoSoftCallback = { + {5, NULL, NULL, NULL, NULL}, + write_bo }; -epicsExportAddress(dset,devBoSoftCallback); +epicsExportAddress(dset, devBoSoftCallback); static long write_bo(boRecord *prec) { @@ -64,4 +53,3 @@ static long write_bo(boRecord *prec) return status; } - diff --git a/modules/database/src/std/dev/devBoSoftRaw.c b/modules/database/src/std/dev/devBoSoftRaw.c index df1ba5b4e..b0bd8542a 100644 --- a/modules/database/src/std/dev/devBoSoftRaw.c +++ b/modules/database/src/std/dev/devBoSoftRaw.c @@ -28,30 +28,17 @@ #include "boRecord.h" #include "epicsExport.h" -/* added for Channel Access Links */ -static long init_record(boRecord *prec); - /* Create the dset for devBoSoftRaw */ +static long init_record(dbCommon *pcommon); static long write_bo(boRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_bo; -}devBoSoftRaw={ - 5, - NULL, - NULL, - init_record, - NULL, - write_bo +bodset devBoSoftRaw = { + {5, NULL, NULL, init_record, NULL}, + write_bo }; -epicsExportAddress(dset,devBoSoftRaw); - -static long init_record(boRecord *prec) +epicsExportAddress(dset, devBoSoftRaw); + +static long init_record(dbCommon *pcommon) { long status; diff --git a/modules/database/src/std/dev/devCalcoutSoft.c b/modules/database/src/std/dev/devCalcoutSoft.c index f931e6ac0..52ee11b8d 100644 --- a/modules/database/src/std/dev/devCalcoutSoft.c +++ b/modules/database/src/std/dev/devCalcoutSoft.c @@ -31,15 +31,9 @@ static long write_calcout(calcoutRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write; -} devCalcoutSoft = { - 5, NULL, NULL, NULL, NULL, write_calcout +calcoutdset devCalcoutSoft = { + {5, NULL, NULL, NULL, NULL}, + write_calcout }; epicsExportAddress(dset, devCalcoutSoft); diff --git a/modules/database/src/std/dev/devCalcoutSoftCallback.c b/modules/database/src/std/dev/devCalcoutSoftCallback.c index 94f9d4f99..3d357b8d9 100644 --- a/modules/database/src/std/dev/devCalcoutSoftCallback.c +++ b/modules/database/src/std/dev/devCalcoutSoftCallback.c @@ -31,15 +31,9 @@ static long write_calcout(calcoutRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write; -} devCalcoutSoftCallback = { - 5, NULL, NULL, NULL, NULL, write_calcout +calcoutdset devCalcoutSoftCallback = { + {5, NULL, NULL, NULL, NULL}, + write_calcout }; epicsExportAddress(dset, devCalcoutSoftCallback); diff --git a/modules/database/src/std/dev/devEnviron.c b/modules/database/src/std/dev/devEnviron.c index 9672d6ce5..8e4bd7937 100644 --- a/modules/database/src/std/dev/devEnviron.c +++ b/modules/database/src/std/dev/devEnviron.c @@ -69,7 +69,7 @@ static long read_lsi(lsiRecord *prec) } lsidset devLsiEnviron = { - 5, NULL, init_lsi, NULL, NULL, read_lsi + {5, NULL, init_lsi, NULL, NULL }, read_lsi }; epicsExportAddress(dset, devLsiEnviron); @@ -119,10 +119,8 @@ static long read_stringin(stringinRecord *prec) return 0; } -static struct { - dset common; - DEVSUPFUN read; -} devSiEnviron = { - {5, NULL, init_stringin, NULL, NULL}, read_stringin +stringindset devSiEnviron = { + {5, NULL, init_stringin, NULL, NULL}, + read_stringin }; epicsExportAddress(dset, devSiEnviron); diff --git a/modules/database/src/std/dev/devEventSoft.c b/modules/database/src/std/dev/devEventSoft.c index a748dda66..4020c91f8 100644 --- a/modules/database/src/std/dev/devEventSoft.c +++ b/modules/database/src/std/dev/devEventSoft.c @@ -25,28 +25,19 @@ #include "epicsExport.h" /* Create the dset for devEventSoft */ -static long init_record(eventRecord *prec); +static long init_record(dbCommon *pcommon); static long read_event(eventRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_event; -} devEventSoft = { - 5, - NULL, - NULL, - init_record, - NULL, +eventdset devEventSoft = { + {5, NULL, NULL, init_record, NULL}, read_event }; epicsExportAddress(dset, devEventSoft); -static long init_record(eventRecord *prec) +static long init_record(dbCommon *pcommon) { + eventRecord *prec = (eventRecord *)pcommon; + if (recGblInitConstantLink(&prec->inp, DBF_STRING, prec->val)) prec->udf = FALSE; diff --git a/modules/database/src/std/dev/devGeneralTime.c b/modules/database/src/std/dev/devGeneralTime.c index 1b821d582..f03275165 100644 --- a/modules/database/src/std/dev/devGeneralTime.c +++ b/modules/database/src/std/dev/devGeneralTime.c @@ -50,8 +50,9 @@ static struct ai_channel { {"TIME", getCurrentTime}, }; -static long init_ai(aiRecord *prec) +static long init_ai(dbCommon *pcommon) { + aiRecord *prec = (aiRecord *)pcommon; int i; if (prec->inp.type != INST_IO) { @@ -91,12 +92,9 @@ static long read_ai(aiRecord *prec) return -1; } -struct { - dset common; - DEVSUPFUN read_write; - DEVSUPFUN special_linconv; -} devAiGeneralTime = { - {6, NULL, NULL, init_ai, NULL}, read_ai, NULL +aidset devAiGeneralTime = { + {6, NULL, NULL, init_ai, NULL}, + read_ai, NULL }; epicsExportAddress(dset, devAiGeneralTime); @@ -114,8 +112,9 @@ static struct bo_channel { {"RSTERRCNT", resetErrors}, }; -static long init_bo(boRecord *prec) +static long init_bo(dbCommon *pcommon) { + boRecord *prec = (boRecord *)pcommon; int i; if (prec->out.type != INST_IO) { @@ -151,15 +150,14 @@ static long write_bo(boRecord *prec) return 0; } -struct { - dset common; - DEVSUPFUN read_write; -} devBoGeneralTime = { - {5, NULL, NULL, init_bo, NULL}, write_bo +bodset devBoGeneralTime = { + {5, NULL, NULL, init_bo, NULL}, + write_bo }; epicsExportAddress(dset, devBoGeneralTime); + /******* longin record *************/ static int errorCount(void) { @@ -173,8 +171,9 @@ static struct li_channel { {"GETERRCNT", errorCount}, }; -static long init_li(longinRecord *prec) +static long init_li(dbCommon *pcommon) { + longinRecord *prec = (longinRecord *)pcommon; int i; if (prec->inp.type != INST_IO) { @@ -209,11 +208,9 @@ static long read_li(longinRecord *prec) return 0; } -struct { - dset common; - DEVSUPFUN read_write; -} devLiGeneralTime = { - {5, NULL, NULL, init_li, NULL}, read_li +longindset devLiGeneralTime = { + {5, NULL, NULL, init_li, NULL}, + read_li }; epicsExportAddress(dset, devLiGeneralTime); @@ -243,8 +240,9 @@ static struct si_channel { {"BESTTEP", eventProvider}, }; -static long init_si(stringinRecord *prec) +static long init_si(dbCommon *pcommon) { + stringinRecord *prec = (stringinRecord *)pcommon; int i; if (prec->inp.type != INST_IO) { @@ -288,10 +286,8 @@ static long read_si(stringinRecord *prec) return 0; } -struct { - dset common; - DEVSUPFUN read_write; -} devSiGeneralTime = { - {5, NULL, NULL, init_si, NULL}, read_si +stringindset devSiGeneralTime = { + {5, NULL, NULL, init_si, NULL}, + read_si }; epicsExportAddress(dset, devSiGeneralTime); diff --git a/modules/database/src/std/dev/devHistogramSoft.c b/modules/database/src/std/dev/devHistogramSoft.c index 3b46b5d99..a410fef5c 100644 --- a/modules/database/src/std/dev/devHistogramSoft.c +++ b/modules/database/src/std/dev/devHistogramSoft.c @@ -28,29 +28,19 @@ #include "epicsExport.h" /* Create the dset for devHistogramSoft */ -static long init_record(histogramRecord *prec); +static long init_record(dbCommon *pcommon); static long read_histogram(histogramRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_histogram; - DEVSUPFUN special_linconv; -}devHistogramSoft={ - 6, - NULL, - NULL, - init_record, - NULL, - read_histogram, - NULL + +histogramdset devHistogramSoft = { + {6, NULL, NULL, init_record, NULL}, + read_histogram, NULL }; -epicsExportAddress(dset,devHistogramSoft); - -static long init_record(histogramRecord *prec) +epicsExportAddress(dset, devHistogramSoft); + +static long init_record(dbCommon *pcommon) { + histogramRecord *prec = (histogramRecord *)pcommon; + if (recGblInitConstantLink(&prec->svl,DBF_DOUBLE,&prec->sgnl)) prec->udf = FALSE; diff --git a/modules/database/src/std/dev/devI64inSoft.c b/modules/database/src/std/dev/devI64inSoft.c index 8d4ad90b7..76a049b85 100644 --- a/modules/database/src/std/dev/devI64inSoft.c +++ b/modules/database/src/std/dev/devI64inSoft.c @@ -24,29 +24,9 @@ #include "int64inRecord.h" #include "epicsExport.h" -/* Create the dset for devI64inSoft */ -static long init_record(int64inRecord *prec); -static long read_int64in(int64inRecord *prec); - -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_int64in; -} devI64inSoft = { - 5, - NULL, - NULL, - init_record, - NULL, - read_int64in -}; -epicsExportAddress(dset, devI64inSoft); - -static long init_record(int64inRecord *prec) +static long init_record(dbCommon *common) { + int64inRecord *prec = (int64inRecord *)common; if (recGblInitConstantLink(&prec->inp, DBF_INT64, &prec->val)) prec->udf = FALSE; @@ -76,3 +56,11 @@ static long read_int64in(int64inRecord *prec) return status; } + +/* Create the dset for devI64inSoft */ + +int64indset devI64inSoft = { + { 5, NULL, NULL, init_record, NULL }, read_int64in +}; +epicsExportAddress(dset, devI64inSoft); + diff --git a/modules/database/src/std/dev/devI64inSoftCallback.c b/modules/database/src/std/dev/devI64inSoftCallback.c index 9eb5656bb..d93f8c993 100644 --- a/modules/database/src/std/dev/devI64inSoftCallback.c +++ b/modules/database/src/std/dev/devI64inSoftCallback.c @@ -151,8 +151,9 @@ static long init(int pass) return 0; } -static long init_record(int64inRecord *prec) +static long init_record(dbCommon *common) { + int64inRecord *prec = (int64inRecord *)common; if (recGblInitConstantLink(&prec->inp, DBR_INT64, &prec->val)) prec->udf = FALSE; @@ -204,11 +205,7 @@ static long read_int64in(int64inRecord *prec) } /* Create the dset for devI64inSoftCallback */ -struct { - dset common; - DEVSUPFUN read_int64in; -} devI64inSoftCallback = { - {5, NULL, init, init_record, NULL}, - read_int64in +int64indset devI64inSoftCallback = { + { 5, NULL, init, init_record, NULL }, read_int64in }; epicsExportAddress(dset, devI64inSoftCallback); diff --git a/modules/database/src/std/dev/devI64outSoft.c b/modules/database/src/std/dev/devI64outSoft.c index f9ac70a7e..f94b90855 100644 --- a/modules/database/src/std/dev/devI64outSoft.c +++ b/modules/database/src/std/dev/devI64outSoft.c @@ -25,27 +25,7 @@ #include "int64outRecord.h" #include "epicsExport.h" -/* Create the dset for devI64outSoft */ -static long init_record(int64outRecord *prec); -static long write_int64out(int64outRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_int64out; -} devI64outSoft = { - 5, - NULL, - NULL, - init_record, - NULL, - write_int64out -}; -epicsExportAddress(dset, devI64outSoft); - -static long init_record(int64outRecord *prec) +static long init_record(dbCommon *common) { return 0; } @@ -55,3 +35,10 @@ static long write_int64out(int64outRecord *prec) dbPutLink(&prec->out, DBR_INT64, &prec->val,1); return 0; } + +/* Create the dset for devI64outSoft */ +int64outdset devI64outSoft = { + { 5, NULL, NULL, init_record, NULL }, write_int64out +}; +epicsExportAddress(dset, devI64outSoft); + diff --git a/modules/database/src/std/dev/devI64outSoftCallback.c b/modules/database/src/std/dev/devI64outSoftCallback.c index e8041a26f..3ad717da3 100644 --- a/modules/database/src/std/dev/devI64outSoftCallback.c +++ b/modules/database/src/std/dev/devI64outSoftCallback.c @@ -25,25 +25,6 @@ #include "int64outRecord.h" #include "epicsExport.h" -/* Create the dset for devI64outSoftCallback */ -static long write_int64out(int64outRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_int64out; -} devI64outSoftCallback = { - 5, - NULL, - NULL, - NULL, - NULL, - write_int64out -}; -epicsExportAddress(dset, devI64outSoftCallback); - static long write_int64out(int64outRecord *prec) { struct link *plink = &prec->out; @@ -60,3 +41,9 @@ static long write_int64out(int64outRecord *prec) return status; } + +/* Create the dset for devI64outSoftCallback */ +int64outdset devI64outSoftCallback = { + { 5, NULL, NULL, NULL, NULL }, write_int64out +}; +epicsExportAddress(dset, devI64outSoftCallback); diff --git a/modules/database/src/std/dev/devLiSoft.c b/modules/database/src/std/dev/devLiSoft.c index 6d7b7fda1..4c9912bc6 100644 --- a/modules/database/src/std/dev/devLiSoft.c +++ b/modules/database/src/std/dev/devLiSoft.c @@ -25,28 +25,19 @@ #include "epicsExport.h" /* Create the dset for devLiSoft */ -static long init_record(longinRecord *prec); +static long init_record(dbCommon *pcommon); static long read_longin(longinRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_longin; -} devLiSoft = { - 5, - NULL, - NULL, - init_record, - NULL, +longindset devLiSoft = { + {5, NULL, NULL, init_record, NULL}, read_longin }; epicsExportAddress(dset, devLiSoft); -static long init_record(longinRecord *prec) +static long init_record(dbCommon *pcommon) { + longinRecord *prec = (longinRecord *)pcommon; + if (recGblInitConstantLink(&prec->inp, DBF_LONG, &prec->val)) prec->udf = FALSE; diff --git a/modules/database/src/std/dev/devLiSoftCallback.c b/modules/database/src/std/dev/devLiSoftCallback.c index d833939ee..b7f7ceea3 100644 --- a/modules/database/src/std/dev/devLiSoftCallback.c +++ b/modules/database/src/std/dev/devLiSoftCallback.c @@ -151,8 +151,10 @@ static long init(int pass) return 0; } -static long init_record(longinRecord *prec) +static long init_record(dbCommon *pcommon) { + longinRecord *prec = (longinRecord *)pcommon; + if (recGblInitConstantLink(&prec->inp, DBR_LONG, &prec->val)) prec->udf = FALSE; @@ -204,10 +206,7 @@ static long read_li(longinRecord *prec) } /* Create the dset for devLiSoftCallback */ -struct { - dset common; - DEVSUPFUN read_li; -} devLiSoftCallback = { +longindset devLiSoftCallback = { {5, NULL, init, init_record, NULL}, read_li }; diff --git a/modules/database/src/std/dev/devLoSoft.c b/modules/database/src/std/dev/devLoSoft.c index af49c60ff..c9b8fe342 100644 --- a/modules/database/src/std/dev/devLoSoft.c +++ b/modules/database/src/std/dev/devLoSoft.c @@ -26,26 +26,16 @@ #include "epicsExport.h" /* Create the dset for devLoSoft */ -static long init_record(longoutRecord *prec); +static long init_record(dbCommon *pcommon); static long write_longout(longoutRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_longout; -}devLoSoft={ - 5, - NULL, - NULL, - init_record, - NULL, - write_longout + +longoutdset devLoSoft = { + {5, NULL, NULL, init_record, NULL}, + write_longout }; -epicsExportAddress(dset,devLoSoft); - -static long init_record(longoutRecord *prec) +epicsExportAddress(dset, devLoSoft); + +static long init_record(dbCommon *pcommon) { return 0; } /* end init_record() */ diff --git a/modules/database/src/std/dev/devLoSoftCallback.c b/modules/database/src/std/dev/devLoSoftCallback.c index f211957b5..3883e1906 100644 --- a/modules/database/src/std/dev/devLoSoftCallback.c +++ b/modules/database/src/std/dev/devLoSoftCallback.c @@ -29,22 +29,12 @@ /* Create the dset for devLoSoftCallback */ static long write_longout(longoutRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_longout; -}devLoSoftCallback={ - 5, - NULL, - NULL, - NULL, - NULL, - write_longout + +longoutdset devLoSoftCallback = { + {5, NULL, NULL, NULL, NULL}, + write_longout }; -epicsExportAddress(dset,devLoSoftCallback); +epicsExportAddress(dset, devLoSoftCallback); static long write_longout(longoutRecord *prec) { @@ -62,4 +52,3 @@ static long write_longout(longoutRecord *prec) return status; } - diff --git a/modules/database/src/std/dev/devLsiSoft.c b/modules/database/src/std/dev/devLsiSoft.c index 3076c9900..d7c5021e7 100644 --- a/modules/database/src/std/dev/devLsiSoft.c +++ b/modules/database/src/std/dev/devLsiSoft.c @@ -17,8 +17,9 @@ #include "lsiRecord.h" #include "epicsExport.h" -static long init_record(lsiRecord *prec) +static long init_record(dbCommon *common) { + lsiRecord *prec = (lsiRecord *)common; dbLoadLinkLS(&prec->inp, prec->val, prec->sizv, &prec->len); return 0; @@ -49,6 +50,6 @@ static long read_string(lsiRecord *prec) } lsidset devLsiSoft = { - 5, NULL, NULL, init_record, NULL, read_string + { 5, NULL, NULL, init_record, NULL }, read_string }; epicsExportAddress(dset, devLsiSoft); diff --git a/modules/database/src/std/dev/devLsoSoft.c b/modules/database/src/std/dev/devLsoSoft.c index 02079a053..2f6f6abda 100644 --- a/modules/database/src/std/dev/devLsoSoft.c +++ b/modules/database/src/std/dev/devLsoSoft.c @@ -21,6 +21,6 @@ static long write_string(lsoRecord *prec) } lsodset devLsoSoft = { - 5, NULL, NULL, NULL, NULL, write_string + { 5, NULL, NULL, NULL, NULL }, write_string }; epicsExportAddress(dset, devLsoSoft); diff --git a/modules/database/src/std/dev/devLsoSoftCallback.c b/modules/database/src/std/dev/devLsoSoftCallback.c index 59579d558..08fca77c2 100644 --- a/modules/database/src/std/dev/devLsoSoftCallback.c +++ b/modules/database/src/std/dev/devLsoSoftCallback.c @@ -40,7 +40,7 @@ static long write_string(lsoRecord *prec) } lsodset devLsoSoftCallback = { - 5, NULL, NULL, NULL, NULL, write_string + { 5, NULL, NULL, NULL, NULL }, write_string }; epicsExportAddress(dset, devLsoSoftCallback); diff --git a/modules/database/src/std/dev/devMbbiDirectSoft.c b/modules/database/src/std/dev/devMbbiDirectSoft.c index 861952f8d..2138500be 100644 --- a/modules/database/src/std/dev/devMbbiDirectSoft.c +++ b/modules/database/src/std/dev/devMbbiDirectSoft.c @@ -25,28 +25,19 @@ #include "epicsExport.h" /* Create the dset for devMbbiDirectSoft */ -static long init_record(mbbiDirectRecord *prec); +static long init_record(dbCommon *pcommon); static long read_mbbi(mbbiDirectRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_mbbi; -} devMbbiDirectSoft = { - 5, - NULL, - NULL, - init_record, - NULL, +mbbidirectdset devMbbiDirectSoft = { + {5, NULL, NULL, init_record, NULL}, read_mbbi }; epicsExportAddress(dset, devMbbiDirectSoft); -static long init_record(mbbiDirectRecord *prec) +static long init_record(dbCommon *pcommon) { + mbbiDirectRecord *prec = (mbbiDirectRecord *)pcommon; + if (recGblInitConstantLink(&prec->inp, DBR_ULONG, &prec->val)) prec->udf = FALSE; diff --git a/modules/database/src/std/dev/devMbbiDirectSoftCallback.c b/modules/database/src/std/dev/devMbbiDirectSoftCallback.c index e40a6b006..7c9850b3f 100644 --- a/modules/database/src/std/dev/devMbbiDirectSoftCallback.c +++ b/modules/database/src/std/dev/devMbbiDirectSoftCallback.c @@ -151,8 +151,10 @@ static long init(int pass) return 0; } -static long init_record(mbbiDirectRecord *prec) +static long init_record(dbCommon *pcommon) { + mbbiDirectRecord *prec = (mbbiDirectRecord *)pcommon; + if (recGblInitConstantLink(&prec->inp, DBR_ULONG, &prec->val)) prec->udf = FALSE; @@ -204,10 +206,7 @@ static long read_mbbiDirect(mbbiDirectRecord *prec) } /* Create the dset for devMbbiDirectSoftCallback */ -struct { - dset common; - DEVSUPFUN read_mbbiDirect; -} devMbbiDirectSoftCallback = { +mbbidirectdset devMbbiDirectSoftCallback = { {5, NULL, init, init_record, NULL}, read_mbbiDirect }; diff --git a/modules/database/src/std/dev/devMbbiDirectSoftRaw.c b/modules/database/src/std/dev/devMbbiDirectSoftRaw.c index 98b4673fc..007568648 100644 --- a/modules/database/src/std/dev/devMbbiDirectSoftRaw.c +++ b/modules/database/src/std/dev/devMbbiDirectSoftRaw.c @@ -25,28 +25,19 @@ #include "epicsExport.h" /* Create the dset for devMbbiDirectSoftRaw */ -static long init_record(mbbiDirectRecord *prec); +static long init_record(dbCommon *pcommon); static long read_mbbi(mbbiDirectRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_mbbi; -} devMbbiDirectSoftRaw = { - 5, - NULL, - NULL, - init_record, - NULL, +mbbidirectdset devMbbiDirectSoftRaw = { + {5, NULL, NULL, init_record, NULL}, read_mbbi }; epicsExportAddress(dset, devMbbiDirectSoftRaw); -static long init_record(mbbiDirectRecord *prec) +static long init_record(dbCommon *pcommon) { + mbbiDirectRecord *prec = (mbbiDirectRecord *)pcommon; + recGblInitConstantLink(&prec->inp, DBF_ULONG, &prec->rval); /* Preserve old functionality */ diff --git a/modules/database/src/std/dev/devMbbiSoft.c b/modules/database/src/std/dev/devMbbiSoft.c index b0b57144f..d1e0716b3 100644 --- a/modules/database/src/std/dev/devMbbiSoft.c +++ b/modules/database/src/std/dev/devMbbiSoft.c @@ -25,28 +25,19 @@ #include "epicsExport.h" /* Create the dset for devMbbiSoft */ -static long init_record(mbbiRecord *prec); +static long init_record(dbCommon *pcommon); static long read_mbbi(mbbiRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_mbbi; -} devMbbiSoft = { - 5, - NULL, - NULL, - init_record, - NULL, +mbbidset devMbbiSoft = { + {5, NULL, NULL, init_record, NULL}, read_mbbi }; epicsExportAddress(dset, devMbbiSoft); -static long init_record(mbbiRecord *prec) +static long init_record(dbCommon *pcommon) { + mbbiRecord *prec = (mbbiRecord *)pcommon; + if (recGblInitConstantLink(&prec->inp, DBF_ENUM, &prec->val)) prec->udf = FALSE; diff --git a/modules/database/src/std/dev/devMbbiSoftCallback.c b/modules/database/src/std/dev/devMbbiSoftCallback.c index fee81b5d9..6466b4c14 100644 --- a/modules/database/src/std/dev/devMbbiSoftCallback.c +++ b/modules/database/src/std/dev/devMbbiSoftCallback.c @@ -151,8 +151,10 @@ static long init(int pass) return 0; } -static long init_record(mbbiRecord *prec) +static long init_record(dbCommon *pcommon) { + mbbiRecord *prec = (mbbiRecord *)pcommon; + if (recGblInitConstantLink(&prec->inp, DBR_ENUM, &prec->val)) prec->udf = FALSE; @@ -204,11 +206,8 @@ static long read_mbbi(mbbiRecord *prec) } /* Create the dset for devMbbiSoftCallback */ -struct { - dset common; - DEVSUPFUN read_mbbi; -} devMbbiSoftCallback = { +mbbidset devMbbiSoftCallback = { {5, NULL, init, init_record, NULL}, read_mbbi }; -epicsExportAddress(dset,devMbbiSoftCallback); +epicsExportAddress(dset, devMbbiSoftCallback); diff --git a/modules/database/src/std/dev/devMbbiSoftRaw.c b/modules/database/src/std/dev/devMbbiSoftRaw.c index 3bd6b21da..40617ab6b 100644 --- a/modules/database/src/std/dev/devMbbiSoftRaw.c +++ b/modules/database/src/std/dev/devMbbiSoftRaw.c @@ -25,28 +25,19 @@ #include "epicsExport.h" /* Create the dset for devMbbiSoftRaw */ -static long init_record(mbbiRecord *prec); +static long init_record(dbCommon *pcommon); static long read_mbbi(mbbiRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_mbbi; -} devMbbiSoftRaw = { - 5, - NULL, - NULL, - init_record, - NULL, +mbbidset devMbbiSoftRaw = { + {5, NULL, NULL, init_record, NULL}, read_mbbi }; epicsExportAddress(dset, devMbbiSoftRaw); -static long init_record(mbbiRecord *prec) +static long init_record(dbCommon *pcommon) { + mbbiRecord *prec = (mbbiRecord *)pcommon; + recGblInitConstantLink(&prec->inp, DBF_ULONG, &prec->rval); /* Preserve old functionality*/ diff --git a/modules/database/src/std/dev/devMbboDirectSoft.c b/modules/database/src/std/dev/devMbboDirectSoft.c index 75359f283..dc769b2ca 100644 --- a/modules/database/src/std/dev/devMbboDirectSoft.c +++ b/modules/database/src/std/dev/devMbboDirectSoft.c @@ -26,10 +26,7 @@ static long write_mbbo(mbboDirectRecord *prec) } /* Create the dset for devMbboDirectSoft */ -struct { - dset common; - DEVSUPFUN write; -} devMbboDirectSoft = { +mbbodirectdset devMbboDirectSoft = { {5, NULL, NULL, NULL, NULL}, write_mbbo }; diff --git a/modules/database/src/std/dev/devMbboDirectSoftCallback.c b/modules/database/src/std/dev/devMbboDirectSoftCallback.c index 6d86507ae..18d9b9c23 100644 --- a/modules/database/src/std/dev/devMbboDirectSoftCallback.c +++ b/modules/database/src/std/dev/devMbboDirectSoftCallback.c @@ -38,11 +38,8 @@ static long write_mbbo(mbboDirectRecord *prec) return status; } -/* Create the dset for devMbboSoft */ -struct { - dset common; - DEVSUPFUN write; -} devMbboDirectSoftCallback = { +/* Create the dset for devMbboDirectSoftCallback */ +mbbodirectdset devMbboDirectSoftCallback = { {5, NULL, NULL, NULL, NULL}, write_mbbo }; diff --git a/modules/database/src/std/dev/devMbboDirectSoftRaw.c b/modules/database/src/std/dev/devMbboDirectSoftRaw.c index c3bbdc898..f3d45a7fb 100644 --- a/modules/database/src/std/dev/devMbboDirectSoftRaw.c +++ b/modules/database/src/std/dev/devMbboDirectSoftRaw.c @@ -20,8 +20,10 @@ #include "mbboDirectRecord.h" #include "epicsExport.h" -static long init_record(mbboDirectRecord *prec) +static long init_record(dbCommon *pcommon) { + mbboDirectRecord *prec = (mbboDirectRecord *)pcommon; + if (prec->nobt == 0) prec->mask = 0xffffffff; @@ -40,10 +42,7 @@ static long write_mbbo(mbboDirectRecord *prec) } /* Create the dset for devMbboDirectSoftRaw */ -struct { - dset common; - DEVSUPFUN write; -} devMbboDirectSoftRaw = { +mbbodirectdset devMbboDirectSoftRaw = { {5, NULL, NULL, init_record, NULL}, write_mbbo }; diff --git a/modules/database/src/std/dev/devMbboSoft.c b/modules/database/src/std/dev/devMbboSoft.c index b2fe6b094..dfe856982 100644 --- a/modules/database/src/std/dev/devMbboSoft.c +++ b/modules/database/src/std/dev/devMbboSoft.c @@ -27,26 +27,16 @@ #include "epicsExport.h" /* Create the dset for devMbboSoft */ -static long init_record(mbboRecord *prec); +static long init_record(dbCommon *pcommon); static long write_mbbo(mbboRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_mbbo; -}devMbboSoft={ - 5, - NULL, - NULL, - init_record, - NULL, - write_mbbo + +mbbodset devMbboSoft = { + {5, NULL, NULL, init_record, NULL}, + write_mbbo }; -epicsExportAddress(dset,devMbboSoft); - -static long init_record(mbboRecord *prec) +epicsExportAddress(dset, devMbboSoft); + +static long init_record(dbCommon *pcommon) { /*dont convert*/ return 2; diff --git a/modules/database/src/std/dev/devMbboSoftCallback.c b/modules/database/src/std/dev/devMbboSoftCallback.c index fd5fe405a..d5f2f1c1d 100644 --- a/modules/database/src/std/dev/devMbboSoftCallback.c +++ b/modules/database/src/std/dev/devMbboSoftCallback.c @@ -28,22 +28,12 @@ /* Create the dset for devMbboSoftCallback */ static long write_mbbo(mbboRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_mbbo; -}devMbboSoftCallback={ - 5, - NULL, - NULL, - NULL, - NULL, - write_mbbo + +mbbodset devMbboSoftCallback = { + {5, NULL, NULL, NULL, NULL}, + write_mbbo }; -epicsExportAddress(dset,devMbboSoftCallback); +epicsExportAddress(dset, devMbboSoftCallback); static long write_mbbo(mbboRecord *prec) { diff --git a/modules/database/src/std/dev/devMbboSoftRaw.c b/modules/database/src/std/dev/devMbboSoftRaw.c index 092b6a8a7..2813ca9fa 100644 --- a/modules/database/src/std/dev/devMbboSoftRaw.c +++ b/modules/database/src/std/dev/devMbboSoftRaw.c @@ -20,8 +20,10 @@ #include "mbboRecord.h" #include "epicsExport.h" -static long init_record(mbboRecord *prec) +static long init_record(dbCommon *pcommon) { + mbboRecord *prec = (mbboRecord *)pcommon; + if (prec->nobt == 0) prec->mask = 0xffffffff; @@ -40,10 +42,7 @@ static long write_mbbo(mbboRecord *prec) } /* Create the dset for devMbboSoftRaw */ -struct { - dset common; - DEVSUPFUN write; -} devMbboSoftRaw = { +mbbodset devMbboSoftRaw = { {5, NULL, NULL, init_record, NULL}, write_mbbo }; diff --git a/modules/database/src/std/dev/devPrintfSoft.c b/modules/database/src/std/dev/devPrintfSoft.c index ca06f04be..053b6e44d 100644 --- a/modules/database/src/std/dev/devPrintfSoft.c +++ b/modules/database/src/std/dev/devPrintfSoft.c @@ -19,7 +19,7 @@ static long write_string(printfRecord *prec) } printfdset devPrintfSoft = { - 5, NULL, NULL, NULL, NULL, write_string + { 5, NULL, NULL, NULL, NULL }, write_string }; epicsExportAddress(dset, devPrintfSoft); diff --git a/modules/database/src/std/dev/devPrintfSoftCallback.c b/modules/database/src/std/dev/devPrintfSoftCallback.c index e89afd53b..a17efc400 100644 --- a/modules/database/src/std/dev/devPrintfSoftCallback.c +++ b/modules/database/src/std/dev/devPrintfSoftCallback.c @@ -40,6 +40,6 @@ static long write_string(printfRecord *prec) } printfdset devPrintfSoftCallback = { - 5, NULL, NULL, NULL, NULL, write_string + { 5, NULL, NULL, NULL, NULL }, write_string }; epicsExportAddress(dset, devPrintfSoftCallback); diff --git a/modules/database/src/std/dev/devSASoft.c b/modules/database/src/std/dev/devSASoft.c index 69894dd89..be32af458 100644 --- a/modules/database/src/std/dev/devSASoft.c +++ b/modules/database/src/std/dev/devSASoft.c @@ -26,22 +26,11 @@ #include "epicsExport.h" /* Create the dset for devSASoft */ -static long init_record(subArrayRecord *prec); +static long init_record(dbCommon *pcommon); static long read_sa(subArrayRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_sa; -} devSASoft = { - 5, - NULL, - NULL, - init_record, - NULL, +sadset devSASoft = { + {5, NULL, NULL, init_record, NULL}, read_sa }; epicsExportAddress(dset, devSASoft); @@ -65,8 +54,9 @@ static void subset(subArrayRecord *prec, long nRequest) prec->udf = FALSE; } -static long init_record(subArrayRecord *prec) +static long init_record(dbCommon *pcommon) { + subArrayRecord *prec = (subArrayRecord *)pcommon; long nRequest = prec->indx + prec->nelm; long status; diff --git a/modules/database/src/std/dev/devSiSoft.c b/modules/database/src/std/dev/devSiSoft.c index 5141c1038..7b978033a 100644 --- a/modules/database/src/std/dev/devSiSoft.c +++ b/modules/database/src/std/dev/devSiSoft.c @@ -27,28 +27,19 @@ #include "epicsExport.h" /* Create the dset for devSiSoft */ -static long init_record(stringinRecord *prec); +static long init_record(dbCommon *pcommon); static long read_stringin(stringinRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_stringin; -} devSiSoft = { - 5, - NULL, - NULL, - init_record, - NULL, +stringindset devSiSoft = { + {5, NULL, NULL, init_record, NULL}, read_stringin }; epicsExportAddress(dset, devSiSoft); -static long init_record(stringinRecord *prec) +static long init_record(dbCommon *pcommon) { + stringinRecord *prec = (stringinRecord *)pcommon; + if (recGblInitConstantLink(&prec->inp, DBF_STRING, prec->val)) prec->udf = FALSE; diff --git a/modules/database/src/std/dev/devSiSoftCallback.c b/modules/database/src/std/dev/devSiSoftCallback.c index fd0e3761b..303e1beae 100644 --- a/modules/database/src/std/dev/devSiSoftCallback.c +++ b/modules/database/src/std/dev/devSiSoftCallback.c @@ -153,8 +153,10 @@ static long init(int pass) return 0; } -static long init_record(stringinRecord *prec) +static long init_record(dbCommon *pcommon) { + stringinRecord *prec = (stringinRecord *)pcommon; + if (recGblInitConstantLink(&prec->inp, DBR_STRING, &prec->val)) prec->udf = FALSE; @@ -207,11 +209,8 @@ static long read_si(stringinRecord *prec) } /* Create the dset for devSiSoftCallback */ -struct { - dset common; - DEVSUPFUN read_li; -} devSiSoftCallback = { +stringindset devSiSoftCallback = { {5, NULL, init, init_record, NULL}, read_si }; -epicsExportAddress(dset,devSiSoftCallback); +epicsExportAddress(dset, devSiSoftCallback); diff --git a/modules/database/src/std/dev/devSoSoft.c b/modules/database/src/std/dev/devSoSoft.c index 6dda4a765..5af5a52d6 100644 --- a/modules/database/src/std/dev/devSoSoft.c +++ b/modules/database/src/std/dev/devSoSoft.c @@ -27,19 +27,9 @@ /* Create the dset for devSoSoft */ static long write_stringout(stringoutRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_stringout; -} devSoSoft = { - 5, - NULL, - NULL, - NULL, - NULL, + +stringoutdset devSoSoft = { + {5, NULL, NULL, NULL, NULL}, write_stringout }; epicsExportAddress(dset, devSoSoft); diff --git a/modules/database/src/std/dev/devSoSoftCallback.c b/modules/database/src/std/dev/devSoSoftCallback.c index df8c5d819..ceae80198 100644 --- a/modules/database/src/std/dev/devSoSoftCallback.c +++ b/modules/database/src/std/dev/devSoSoftCallback.c @@ -27,19 +27,9 @@ /* Create the dset for devSoSoftCallback */ static long write_stringout(stringoutRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_stringout; -} devSoSoftCallback = { - 5, - NULL, - NULL, - NULL, - NULL, + +stringoutdset devSoSoftCallback = { + {5, NULL, NULL, NULL, NULL}, write_stringout }; epicsExportAddress(dset, devSoSoftCallback); @@ -60,4 +50,3 @@ static long write_stringout(stringoutRecord *prec) return status; } - diff --git a/modules/database/src/std/dev/devStdio.c b/modules/database/src/std/dev/devStdio.c index e957bfce0..d8646d95a 100644 --- a/modules/database/src/std/dev/devStdio.c +++ b/modules/database/src/std/dev/devStdio.c @@ -103,7 +103,7 @@ static long write_lso(lsoRecord *prec) } lsodset devLsoStdio = { - 5, NULL, init_lso, NULL, NULL, write_lso + { 5, NULL, init_lso, NULL, NULL }, write_lso }; epicsExportAddress(dset, devLsoStdio); @@ -153,7 +153,7 @@ static long write_printf(printfRecord *prec) } printfdset devPrintfStdio = { - 5, NULL, init_printf, NULL, NULL, write_printf + {5, NULL, init_printf, NULL, NULL }, write_printf }; epicsExportAddress(dset, devPrintfStdio); @@ -202,10 +202,8 @@ static long write_stringout(stringoutRecord *prec) return 0; } -static struct { - dset common; - DEVSUPFUN write; -} devSoStdio = { - {5, NULL, init_stringout, NULL, NULL}, write_stringout +stringoutdset devSoStdio = { + {5, NULL, init_stringout, NULL, NULL}, + write_stringout }; epicsExportAddress(dset, devSoStdio); diff --git a/modules/database/src/std/dev/devTimestamp.c b/modules/database/src/std/dev/devTimestamp.c index 936d7767d..06f694eac 100644 --- a/modules/database/src/std/dev/devTimestamp.c +++ b/modules/database/src/std/dev/devTimestamp.c @@ -40,12 +40,9 @@ static long read_ai(aiRecord *prec) return 2; } -struct { - dset common; - DEVSUPFUN read_write; - DEVSUPFUN special_linconv; -} devTimestampAI = { - {6, NULL, initAllow, NULL, NULL}, read_ai, NULL +aidset devTimestampAI = { + {6, NULL, initAllow, NULL, NULL}, + read_ai, NULL }; epicsExportAddress(dset, devTimestampAI); @@ -68,10 +65,8 @@ static long read_stringin (stringinRecord *prec) return 0; } -struct { - dset common; - DEVSUPFUN read_stringin; -} devTimestampSI = { - {5, NULL, initAllow, NULL, NULL}, read_stringin +stringindset devTimestampSI = { + {5, NULL, initAllow, NULL, NULL}, + read_stringin }; epicsExportAddress(dset, devTimestampSI); diff --git a/modules/database/src/std/dev/devWfSoft.c b/modules/database/src/std/dev/devWfSoft.c index 5b521518d..0a089b831 100644 --- a/modules/database/src/std/dev/devWfSoft.c +++ b/modules/database/src/std/dev/devWfSoft.c @@ -26,28 +26,18 @@ #include "epicsExport.h" /* Create the dset for devWfSoft */ -static long init_record(waveformRecord *prec); +static long init_record(dbCommon *pcommon); static long read_wf(waveformRecord *prec); -struct { - long number; - DEVSUPFUN report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_wf; -} devWfSoft = { - 5, - NULL, - NULL, - init_record, - NULL, +wfdset devWfSoft = { + {5, NULL, NULL, init_record, NULL}, read_wf }; epicsExportAddress(dset, devWfSoft); -static long init_record(waveformRecord *prec) +static long init_record(dbCommon *pcommon) { + waveformRecord *prec = (waveformRecord *)pcommon; long nelm = prec->nelm; long status = dbLoadLinkArray(&prec->inp, prec->ftvl, prec->bptr, &nelm); diff --git a/modules/database/src/std/rec/aaiRecord.c b/modules/database/src/std/rec/aaiRecord.c index 51af45f61..e8143aedd 100644 --- a/modules/database/src/std/rec/aaiRecord.c +++ b/modules/database/src/std/rec/aaiRecord.c @@ -90,22 +90,13 @@ rset aaiRSET={ }; epicsExportAddress(rset,aaiRSET); -struct aaidset { /* aai dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_aai; /*returns: (-1,0)=>(failure,success)*/ -}; - static void monitor(aaiRecord *); static long readValue(aaiRecord *); static long init_record(struct dbCommon *pcommon, int pass) { struct aaiRecord *prec = (struct aaiRecord *)pcommon; - struct aaidset *pdset = (struct aaidset *)(prec->dset); + aaidset *pdset = (aaidset *)(prec->dset); /* must have dset defined */ if (!pdset) { @@ -125,8 +116,8 @@ static long init_record(struct dbCommon *pcommon, int pass) not change after links are established before pass 1 */ - if (pdset->init_record) { - long status = pdset->init_record(prec); + if (pdset->common.init_record) { + long status = pdset->common.init_record(pcommon); /* init_record may set the bptr to point to the data */ if (status) @@ -143,7 +134,7 @@ static long init_record(struct dbCommon *pcommon, int pass) recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml); /* must have read_aai function defined */ - if (pdset->number < 5 || pdset->read_aai == NULL) { + if (pdset->common.number < 5 || pdset->read_aai == NULL) { recGblRecordError(S_dev_missingSup, prec, "aai: init_record"); return S_dev_missingSup; } @@ -153,7 +144,7 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct aaiRecord *prec = (struct aaiRecord *)pcommon; - struct aaidset *pdset = (struct aaidset *)(prec->dset); + aaidset *pdset = (aaidset *)(prec->dset); long status; unsigned char pact = prec->pact; @@ -339,7 +330,7 @@ static void monitor(aaiRecord *prec) static long readValue(aaiRecord *prec) { - struct aaidset *pdset = (struct aaidset *) prec->dset; + aaidset *pdset = (aaidset *) prec->dset; long status; /* NB: Device support must post updates to NORD */ diff --git a/modules/database/src/std/rec/aaiRecord.dbd.pod b/modules/database/src/std/rec/aaiRecord.dbd.pod index e3af631e6..f7c1b24e5 100644 --- a/modules/database/src/std/rec/aaiRecord.dbd.pod +++ b/modules/database/src/std/rec/aaiRecord.dbd.pod @@ -288,6 +288,15 @@ Scan forward link if necessary, set PACT FALSE, and return. =cut include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct aaiRecord; + %typedef struct aaidset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaidset; + %#define HAS_aaidset + % field(VAL,DBF_NOACCESS) { prompt("Value") asl(ASL0) diff --git a/modules/database/src/std/rec/aaoRecord.c b/modules/database/src/std/rec/aaoRecord.c index ccf05179f..feb4e3479 100644 --- a/modules/database/src/std/rec/aaoRecord.c +++ b/modules/database/src/std/rec/aaoRecord.c @@ -90,22 +90,13 @@ rset aaoRSET={ }; epicsExportAddress(rset,aaoRSET); -struct aaodset { /* aao dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_aao; /*returns: (-1,0)=>(failure,success)*/ -}; - static void monitor(aaoRecord *); static long writeValue(aaoRecord *); static long init_record(struct dbCommon *pcommon, int pass) { struct aaoRecord *prec = (struct aaoRecord *)pcommon; - struct aaodset *pdset = (struct aaodset *)(prec->dset); + aaodset *pdset = (aaodset *)(prec->dset); long status; /* must have dset defined */ @@ -130,9 +121,9 @@ static long init_record(struct dbCommon *pcommon, int pass) not change after links are established before pass 1 */ - if (pdset->init_record) { + if (pdset->common.init_record) { /* init_record may set the bptr to point to the data */ - if ((status = pdset->init_record(prec))) + if ((status = pdset->common.init_record(pcommon))) return status; } if (!prec->bptr) { @@ -146,7 +137,7 @@ static long init_record(struct dbCommon *pcommon, int pass) recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml); /* must have write_aao function defined */ - if (pdset->number < 5 || pdset->write_aao == NULL) { + if (pdset->common.number < 5 || pdset->write_aao == NULL) { recGblRecordError(S_dev_missingSup, prec, "aao: init_record"); return S_dev_missingSup; } @@ -156,7 +147,7 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct aaoRecord *prec = (struct aaoRecord *)pcommon; - struct aaodset *pdset = (struct aaodset *)(prec->dset); + aaodset *pdset = (aaodset *)(prec->dset); long status; unsigned char pact = prec->pact; @@ -339,7 +330,7 @@ static void monitor(aaoRecord *prec) static long writeValue(aaoRecord *prec) { - struct aaodset *pdset = (struct aaodset *) prec->dset; + aaodset *pdset = (aaodset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/aaoRecord.dbd.pod b/modules/database/src/std/rec/aaoRecord.dbd.pod index a5756c29a..cf621e6bd 100644 --- a/modules/database/src/std/rec/aaoRecord.dbd.pod +++ b/modules/database/src/std/rec/aaoRecord.dbd.pod @@ -288,6 +288,15 @@ Scan forward link if necessary, set PACT FALSE, and return. =cut include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct aaoRecord; + %typedef struct aaodset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaodset; + %#define HAS_aaodset + % field(VAL,DBF_NOACCESS) { prompt("Value") asl(ASL0) diff --git a/modules/database/src/std/rec/aiRecord.c b/modules/database/src/std/rec/aiRecord.c index 0e3593282..512a01287 100644 --- a/modules/database/src/std/rec/aiRecord.c +++ b/modules/database/src/std/rec/aiRecord.c @@ -86,17 +86,6 @@ rset aiRSET={ }; epicsExportAddress(rset,aiRSET); -typedef struct aidset { /* analog input dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_ai;/*(0,2)=> success and convert,don't convert)*/ - /* if convert then raw value stored in rval */ - DEVSUPFUN special_linconv; -}aidset; - static void checkAlarms(aiRecord *prec, epicsTimeStamp *lastTime); static void convert(aiRecord *prec); static void monitor(aiRecord *prec); @@ -118,7 +107,7 @@ static long init_record(struct dbCommon *pcommon, int pass) return(S_dev_noDSET); } /* must have read_ai function defined */ - if( (pdset->number < 6) || (pdset->read_ai == NULL) ) { + if ((pdset->common.number < 6) || (pdset->read_ai == NULL)) { recGblRecordError(S_dev_missingSup,(void *)prec,"ai: init_record"); return(S_dev_missingSup); } @@ -128,8 +117,8 @@ static long init_record(struct dbCommon *pcommon, int pass) prec->eoff = prec->egul; } - if( pdset->init_record ) { - long status=(*pdset->init_record)(prec); + if (pdset->common.init_record) { + long status = pdset->common.init_record(pcommon); if (prec->linr == menuConvertSLOPE) { prec->eoff = eoff; prec->eslo = eslo; @@ -190,7 +179,7 @@ static long special(DBADDR *paddr,int after) switch(special_type) { case(SPC_LINCONV): - if(pdset->number<6) { + if (pdset->common.number < 6) { recGblDbaddrError(S_db_noMod,paddr,"ai: special"); return(S_db_noMod); } diff --git a/modules/database/src/std/rec/aiRecord.dbd.pod b/modules/database/src/std/rec/aiRecord.dbd.pod index 14a4c9243..4a6b38584 100644 --- a/modules/database/src/std/rec/aiRecord.dbd.pod +++ b/modules/database/src/std/rec/aiRecord.dbd.pod @@ -221,6 +221,16 @@ monitoring functionality. =cut include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct aiRecord; + %typedef struct aidset { + % dset common; + % long (*read_ai)(struct aiRecord *prec); + % long (*special_linconv)(struct aiRecord *prec, int after); + %} aidset; + %#define HAS_aidset + % field(VAL,DBF_DOUBLE) { prompt("Current EGU Value") promptgroup("40 - Input") diff --git a/modules/database/src/std/rec/aoRecord.c b/modules/database/src/std/rec/aoRecord.c index 6fa65859b..3f9a84e89 100644 --- a/modules/database/src/std/rec/aoRecord.c +++ b/modules/database/src/std/rec/aoRecord.c @@ -81,20 +81,10 @@ rset aoRSET={ put_enum_str, get_graphic_double, get_control_double, - get_alarm_double }; - -struct aodset { /* analog input dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (0,2)=>(success,success no convert)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_ao;/*(0)=>(success ) */ - DEVSUPFUN special_linconv; + get_alarm_double }; epicsExportAddress(rset,aoRSET); - static void checkAlarms(aoRecord *); static long fetch_value(aoRecord *, double *); static void convert(aoRecord *, double); @@ -104,7 +94,7 @@ static long writeValue(aoRecord *); static long init_record(struct dbCommon *pcommon, int pass) { struct aoRecord *prec = (struct aoRecord *)pcommon; - struct aodset *pdset; + aodset *pdset; double eoff = prec->eoff, eslo = prec->eslo; double value; long status = 0; @@ -113,7 +103,7 @@ static long init_record(struct dbCommon *pcommon, int pass) recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml); - if(!(pdset = (struct aodset *)(prec->dset))) { + if(!(pdset = (aodset *)(prec->dset))) { recGblRecordError(S_dev_noDSET,(void *)prec,"ao: init_record"); return(S_dev_noDSET); } @@ -122,7 +112,7 @@ static long init_record(struct dbCommon *pcommon, int pass) prec->udf = isnan(prec->val); /* must have write_ao function defined */ - if ((pdset->number < 6) || (pdset->write_ao ==NULL)) { + if ((pdset->common.number < 6) || (pdset->write_ao ==NULL)) { recGblRecordError(S_dev_missingSup,(void *)prec,"ao: init_record"); return(S_dev_missingSup); } @@ -132,8 +122,8 @@ static long init_record(struct dbCommon *pcommon, int pass) prec->eoff = prec->egul; } - if (pdset->init_record) { - status = (*pdset->init_record)(prec); + if (pdset->common.init_record) { + status = pdset->common.init_record(pcommon); if (prec->linr == menuConvertSLOPE) { prec->eoff = eoff; prec->eslo = eslo; @@ -174,7 +164,7 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct aoRecord *prec = (struct aoRecord *)pcommon; - struct aodset *pdset = (struct aodset *)(prec->dset); + aodset *pdset = (aodset *)(prec->dset); long status=0; unsigned char pact=prec->pact; double value; @@ -245,12 +235,12 @@ static long process(struct dbCommon *pcommon) static long special(DBADDR *paddr, int after) { aoRecord *prec = (aoRecord *)(paddr->precord); - struct aodset *pdset = (struct aodset *) (prec->dset); + aodset *pdset = (aodset *) (prec->dset); int special_type = paddr->special; switch(special_type) { case(SPC_LINCONV): - if(pdset->number<6 ) { + if(pdset->common.number<6 ) { recGblDbaddrError(S_db_noMod,paddr,"ao: special"); return(S_db_noMod); } @@ -555,7 +545,7 @@ static void monitor(aoRecord *prec) static long writeValue(aoRecord *prec) { - struct aodset *pdset = (struct aodset *) prec->dset; + aodset *pdset = (aodset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/aoRecord.dbd.pod b/modules/database/src/std/rec/aoRecord.dbd.pod index 68c0d6c86..040d071dd 100644 --- a/modules/database/src/std/rec/aoRecord.dbd.pod +++ b/modules/database/src/std/rec/aoRecord.dbd.pod @@ -268,6 +268,16 @@ more information on these fields. =cut include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; /*init_record returns: (0,2)=>(success,success no convert)*/ + % long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */ + % long (*special_linconv)(struct aoRecord *prec, int after); + %} aodset; + %#define HAS_aodset + % field(VAL,DBF_DOUBLE) { prompt("Desired Output") promptgroup("50 - Output") diff --git a/modules/database/src/std/rec/biRecord.c b/modules/database/src/std/rec/biRecord.c index 9c0ddb3c0..c26ed79ee 100644 --- a/modules/database/src/std/rec/biRecord.c +++ b/modules/database/src/std/rec/biRecord.c @@ -75,17 +75,10 @@ rset biRSET={ put_enum_str, get_graphic_double, get_control_double, - get_alarm_double }; -struct bidset { /* binary input dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_bi;/*(0,2)=> success and convert, don't convert)*/ - /* if convert then raw value stored in rval */ + get_alarm_double }; epicsExportAddress(rset,biRSET); + static void checkAlarms(biRecord *); static void monitor(biRecord *); static long readValue(biRecord *); @@ -93,7 +86,7 @@ static long readValue(biRecord *); static long init_record(struct dbCommon *pcommon, int pass) { struct biRecord *prec = (struct biRecord *)pcommon; - struct bidset *pdset; + bidset *pdset; long status; if (pass == 0) return 0; @@ -101,17 +94,17 @@ static long init_record(struct dbCommon *pcommon, int pass) recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml); recGblInitConstantLink(&prec->siol, DBF_USHORT, &prec->sval); - if(!(pdset = (struct bidset *)(prec->dset))) { + if(!(pdset = (bidset *)(prec->dset))) { recGblRecordError(S_dev_noDSET,(void *)prec,"bi: init_record"); return(S_dev_noDSET); } /* must have read_bi function defined */ - if( (pdset->number < 5) || (pdset->read_bi == NULL) ) { + if( (pdset->common.number < 5) || (pdset->read_bi == NULL) ) { recGblRecordError(S_dev_missingSup,(void *)prec,"bi: init_record"); return(S_dev_missingSup); } - if( pdset->init_record ) { - if((status=(*pdset->init_record)(prec))) return(status); + if( pdset->common.init_record ) { + if((status=(*pdset->common.init_record)(pcommon))) return(status); } prec->mlst = prec->val; prec->lalm = prec->val; @@ -122,7 +115,7 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct biRecord *prec = (struct biRecord *)pcommon; - struct bidset *pdset = (struct bidset *)(prec->dset); + bidset *pdset = (bidset *)(prec->dset); long status; unsigned char pact=prec->pact; @@ -275,7 +268,7 @@ static void monitor(biRecord *prec) static long readValue(biRecord *prec) { - struct bidset *pdset = (struct bidset *)prec->dset; + bidset *pdset = (bidset *)prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/biRecord.dbd.pod b/modules/database/src/std/rec/biRecord.dbd.pod index 62bcf3bf2..a3b5ed3c0 100644 --- a/modules/database/src/std/rec/biRecord.dbd.pod +++ b/modules/database/src/std/rec/biRecord.dbd.pod @@ -163,6 +163,15 @@ these fields. =cut include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct biRecord; + %typedef struct bidset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_bi)(struct biRecord *prec);/*(0,2)=> success and convert, don't convert); if convert then raw value stored in rval */ + %} bidset; + %#define HAS_bidset + % field(INP,DBF_INLINK) { prompt("Input Specification") promptgroup("40 - Input") diff --git a/modules/database/src/std/rec/boRecord.c b/modules/database/src/std/rec/boRecord.c index 4cfe62d48..94aa58782 100644 --- a/modules/database/src/std/rec/boRecord.c +++ b/modules/database/src/std/rec/boRecord.c @@ -86,16 +86,6 @@ epicsExportAddress(int, boHIGHprecision); double boHIGHlimit = 100000; epicsExportAddress(double, boHIGHlimit); -struct bodset { /* binary output dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns:(0,2)=>(success,success no convert*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_bo;/*returns: (-1,0)=>(failure,success)*/ -}; - - /* control block for callback*/ typedef struct myCallback { epicsCallback callback; @@ -131,7 +121,7 @@ static void myCallbackFunc(epicsCallback *arg) static long init_record(struct dbCommon *pcommon,int pass) { struct boRecord *prec = (struct boRecord *)pcommon; - struct bodset *pdset = (struct bodset *) prec->dset; + bodset *pdset = (bodset *) prec->dset; unsigned short ival = 0; long status = 0; myCallback *pcallback; @@ -146,7 +136,7 @@ static long init_record(struct dbCommon *pcommon,int pass) } /* must have write_bo functions defined */ - if ((pdset->number < 5) || (pdset->write_bo == NULL)) { + if ((pdset->common.number < 5) || (pdset->write_bo == NULL)) { recGblRecordError(S_dev_missingSup, prec, "bo: init_record"); return S_dev_missingSup; } @@ -163,8 +153,8 @@ static long init_record(struct dbCommon *pcommon,int pass) callbackSetUser(pcallback, &pcallback->callback); pcallback->precord = (struct dbCommon *) prec; - if (pdset->init_record) { - status=(*pdset->init_record)(prec); + if (pdset->common.init_record) { + status=(*pdset->common.init_record)(pcommon); if(status==0) { if(prec->rval==0) prec->val = 0; else prec->val = 1; @@ -188,7 +178,7 @@ static long init_record(struct dbCommon *pcommon,int pass) static long process(struct dbCommon *pcommon) { struct boRecord *prec = (struct boRecord *)pcommon; - struct bodset *pdset = (struct bodset *)(prec->dset); + bodset *pdset = (bodset *)(prec->dset); long status=0; unsigned char pact=prec->pact; @@ -420,7 +410,7 @@ static void monitor(boRecord *prec) static long writeValue(boRecord *prec) { - struct bodset *pdset = (struct bodset *) prec->dset; + bodset *pdset = (bodset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/boRecord.dbd.pod b/modules/database/src/std/rec/boRecord.dbd.pod index 6b6d1800c..ad48070a9 100644 --- a/modules/database/src/std/rec/boRecord.dbd.pod +++ b/modules/database/src/std/rec/boRecord.dbd.pod @@ -210,6 +210,15 @@ information on these fields. =cut include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct boRecord; + %typedef struct bodset { + % dset common; /*init_record returns:(0,2)=>(success,success no convert*/ + % long (*write_bo)(struct boRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} bodset; + %#define HAS_bodset + % field(VAL,DBF_ENUM) { prompt("Current Value") promptgroup("50 - Output") diff --git a/modules/database/src/std/rec/calcRecord.c b/modules/database/src/std/rec/calcRecord.c index 12a58d1c8..d72792a57 100644 --- a/modules/database/src/std/rec/calcRecord.c +++ b/modules/database/src/std/rec/calcRecord.c @@ -43,7 +43,7 @@ #define report NULL #define initialize NULL -static long init_record(struct dbCommon *prec, int pass); +static long init_record(struct dbCommon *pcommon, int pass); static long process(struct dbCommon *prec); static long special(DBADDR *paddr, int after); #define get_value NULL diff --git a/modules/database/src/std/rec/calcoutRecord.c b/modules/database/src/std/rec/calcoutRecord.c index d9f66af3c..75edcce47 100644 --- a/modules/database/src/std/rec/calcoutRecord.c +++ b/modules/database/src/std/rec/calcoutRecord.c @@ -90,16 +90,6 @@ epicsExportAddress(int, calcoutODLYprecision); double calcoutODLYlimit = 100000; epicsExportAddress(double, calcoutODLYlimit); -typedef struct calcoutDSET { - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; - DEVSUPFUN get_ioint_info; - DEVSUPFUN write; -}calcoutDSET; - - /* To provide feedback to the user as to the connection status of the * links (.INxV and .OUTV), the following algorithm has been implemented ... * @@ -142,7 +132,7 @@ static long init_record(struct dbCommon *pcommon, int pass) double *pvalue; epicsEnum16 *plinkValid; short error_number; - calcoutDSET *pcalcoutDSET; + calcoutdset *pcalcoutDSET; rpvtStruct *prpvt; if (pass == 0) { @@ -150,13 +140,13 @@ static long init_record(struct dbCommon *pcommon, int pass) return 0; } - if (!(pcalcoutDSET = (calcoutDSET *)prec->dset)) { + if (!(pcalcoutDSET = (calcoutdset *)prec->dset)) { recGblRecordError(S_dev_noDSET, (void *)prec, "calcout:init_record"); return S_dev_noDSET; } /* must have write defined */ - if ((pcalcoutDSET->number < 5) || (pcalcoutDSET->write ==NULL)) { + if ((pcalcoutDSET->common.number < 5) || (pcalcoutDSET->write ==NULL)) { recGblRecordError(S_dev_missingSup, (void *)prec, "calcout:init_record"); return S_dev_missingSup; } @@ -221,7 +211,7 @@ static long init_record(struct dbCommon *pcommon, int pass) prec->epvt = eventNameToHandle(prec->oevt); - if (pcalcoutDSET->init_record) pcalcoutDSET->init_record(prec); + if (pcalcoutDSET->common.init_record) pcalcoutDSET->common.init_record(pcommon); prec->pval = prec->val; prec->mlst = prec->val; prec->alst = prec->val; @@ -768,7 +758,7 @@ static void checkLinks(calcoutRecord *prec) static long writeValue(calcoutRecord *prec) { - calcoutDSET *pcalcoutDSET = (calcoutDSET *)prec->dset; + calcoutdset *pcalcoutDSET = (calcoutdset *)prec->dset; if (!pcalcoutDSET || !pcalcoutDSET->write) { diff --git a/modules/database/src/std/rec/calcoutRecord.dbd.pod b/modules/database/src/std/rec/calcoutRecord.dbd.pod index a9b2a4e59..b38baa07f 100644 --- a/modules/database/src/std/rec/calcoutRecord.dbd.pod +++ b/modules/database/src/std/rec/calcoutRecord.dbd.pod @@ -662,6 +662,14 @@ manner for the VAL field. =cut include "dbCommon.dbd" + %/* Declare Device Support Entry Table */ + %struct calcoutRecord; + %typedef struct calcoutdset { + % dset common; + % long (*write)(struct calcoutRecord *prec); + %} calcoutdset; + %#define HAS_calcoutdset + % field(RPVT,DBF_NOACCESS) { prompt("Record Private") special(SPC_NOMOD) diff --git a/modules/database/src/std/rec/eventRecord.c b/modules/database/src/std/rec/eventRecord.c index 8ba31e3b4..d6f103dc8 100644 --- a/modules/database/src/std/rec/eventRecord.c +++ b/modules/database/src/std/rec/eventRecord.c @@ -80,14 +80,6 @@ rset eventRSET={ }; epicsExportAddress(rset,eventRSET); -struct eventdset { /* event input dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_event;/*(0)=> success */ -}; static void monitor(eventRecord *); static long readValue(eventRecord *); @@ -95,7 +87,7 @@ static long readValue(eventRecord *); static long init_record(struct dbCommon *pcommon, int pass) { struct eventRecord *prec = (struct eventRecord *)pcommon; - struct eventdset *pdset; + eventdset *pdset; long status=0; if (pass == 0) return 0; @@ -103,8 +95,8 @@ static long init_record(struct dbCommon *pcommon, int pass) recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml); recGblInitConstantLink(&prec->siol, DBF_STRING, &prec->sval); - if( (pdset=(struct eventdset *)(prec->dset)) && (pdset->init_record) ) - status=(*pdset->init_record)(prec); + if( (pdset=(eventdset *)(prec->dset)) && (pdset->common.init_record) ) + status=(*pdset->common.init_record)(pcommon); prec->epvt = eventNameToHandle(prec->val); @@ -114,11 +106,11 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct eventRecord *prec = (struct eventRecord *)pcommon; - struct eventdset *pdset = (struct eventdset *)(prec->dset); + eventdset *pdset = (eventdset *)(prec->dset); long status=0; unsigned char pact=prec->pact; - if((pdset!=NULL) && (pdset->number >= 5) && pdset->read_event ) + if((pdset!=NULL) && (pdset->common.number >= 5) && pdset->read_event ) status=readValue(prec); /* read the new value */ /* check if device support set pact */ if ( !pact && prec->pact ) return(0); @@ -173,7 +165,7 @@ static void monitor(eventRecord *prec) static long readValue(eventRecord *prec) { - struct eventdset *pdset = (struct eventdset *) prec->dset; + eventdset *pdset = (eventdset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/eventRecord.dbd.pod b/modules/database/src/std/rec/eventRecord.dbd.pod index c783e984f..4004056b5 100644 --- a/modules/database/src/std/rec/eventRecord.dbd.pod +++ b/modules/database/src/std/rec/eventRecord.dbd.pod @@ -44,6 +44,16 @@ simulation mode parameters recordtype(event) { include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct eventRecord; + %typedef struct eventdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_event)(struct eventRecord *prec); /*(0)=> success */ + %} eventdset; + %#define HAS_eventdset + % + =head3 Scan Parameters The event record has the standard fields for specifying under what circumstances diff --git a/modules/database/src/std/rec/histogramRecord.c b/modules/database/src/std/rec/histogramRecord.c index 778a08d45..e6ee97b2b 100644 --- a/modules/database/src/std/rec/histogramRecord.c +++ b/modules/database/src/std/rec/histogramRecord.c @@ -87,17 +87,6 @@ epicsExportAddress(rset,histogramRSET); int histogramSDELprecision = 2; epicsExportAddress(int, histogramSDELprecision); -struct histogramdset { /* histogram input dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_histogram;/*(0,2)=> success and add_count, don't add_count)*/ - /* if add_count then sgnl added to array */ - DEVSUPFUN special_linconv; -}; - /* control block for callback*/ typedef struct myCallback { epicsCallback callback; @@ -160,7 +149,7 @@ static void wdogInit(histogramRecord *prec) static long init_record(struct dbCommon *pcommon, int pass) { struct histogramRecord *prec = (struct histogramRecord *)pcommon; - struct histogramdset *pdset; + histogramdset *pdset; if (pass == 0) { /* allocate space for histogram array */ @@ -181,21 +170,21 @@ static long init_record(struct dbCommon *pcommon, int pass) recGblInitConstantLink(&prec->siol, DBF_DOUBLE, &prec->sval); /* must have device support defined */ - pdset = (struct histogramdset *) prec->dset; + pdset = (histogramdset *) prec->dset; if (!pdset) { recGblRecordError(S_dev_noDSET, prec, "histogram: init_record"); return S_dev_noDSET; } /* must have read_histogram function defined */ - if (pdset->number < 6 || !pdset->read_histogram) { + if (pdset->common.number < 6 || !pdset->read_histogram) { recGblRecordError(S_dev_missingSup, prec, "histogram: init_record"); return S_dev_missingSup; } /* call device support init_record */ - if (pdset->init_record) { - long status = pdset->init_record(prec); + if (pdset->common.init_record) { + long status = pdset->common.init_record(pcommon); if (status) return status; @@ -206,7 +195,7 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct histogramRecord *prec = (struct histogramRecord *)pcommon; - struct histogramdset *pdset = (struct histogramdset *) prec->dset; + histogramdset *pdset = (histogramdset *) prec->dset; int pact = prec->pact; long status; @@ -375,7 +364,7 @@ static long clear_histogram(histogramRecord *prec) static long readValue(histogramRecord *prec) { - struct histogramdset *pdset = (struct histogramdset *) prec->dset; + histogramdset *pdset = (histogramdset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/histogramRecord.dbd.pod b/modules/database/src/std/rec/histogramRecord.dbd.pod index 5f0063867..a943102bf 100644 --- a/modules/database/src/std/rec/histogramRecord.dbd.pod +++ b/modules/database/src/std/rec/histogramRecord.dbd.pod @@ -140,6 +140,16 @@ simulation mode fields. =cut include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct histogramRecord; + %typedef struct histogramdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/ + % long (*special_linconv)(struct histogramRecord *prec, int after); + %} histogramdset; + %#define HAS_histogramdset + % field(VAL,DBF_NOACCESS) { prompt("Value") asl(ASL0) diff --git a/modules/database/src/std/rec/int64inRecord.c b/modules/database/src/std/rec/int64inRecord.c index 8ce241000..cb4d85340 100644 --- a/modules/database/src/std/rec/int64inRecord.c +++ b/modules/database/src/std/rec/int64inRecord.c @@ -83,14 +83,6 @@ rset int64inRSET={ epicsExportAddress(rset,int64inRSET); -struct int64indset { /* int64in input dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_int64in; /*returns: (-1,0)=>(failure,success)*/ -}; static void checkAlarms(int64inRecord *prec, epicsTimeStamp *timeLast); static void monitor(int64inRecord *prec); static long readValue(int64inRecord *prec); @@ -99,7 +91,7 @@ static long readValue(int64inRecord *prec); static long init_record(dbCommon *pcommon, int pass) { int64inRecord *prec = (int64inRecord*)pcommon; - struct int64indset *pdset; + int64indset *pdset; long status; if (pass == 0) return 0; @@ -108,17 +100,17 @@ static long init_record(dbCommon *pcommon, int pass) recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml); recGblInitConstantLink(&prec->siol, DBF_INT64, &prec->sval); - if(!(pdset = (struct int64indset *)(prec->dset))) { + if(!(pdset = (int64indset *)(prec->dset))) { recGblRecordError(S_dev_noDSET,(void *)prec,"int64in: init_record"); return(S_dev_noDSET); } /* must have read_int64in function defined */ - if( (pdset->number < 5) || (pdset->read_int64in == NULL) ) { + if ((pdset->common.number < 5) || (pdset->read_int64in == NULL)) { recGblRecordError(S_dev_missingSup,(void *)prec,"int64in: init_record"); return(S_dev_missingSup); } - if( pdset->init_record ) { - if((status=(*pdset->init_record)(prec))) return(status); + if (pdset->common.init_record) { + if ((status = pdset->common.init_record(pcommon))) return status; } prec->mlst = prec->val; prec->alst = prec->val; @@ -129,7 +121,7 @@ static long init_record(dbCommon *pcommon, int pass) static long process(dbCommon *pcommon) { int64inRecord *prec = (int64inRecord*)pcommon; - struct int64indset *pdset = (struct int64indset *)(prec->dset); + int64indset *pdset = (int64indset *)(prec->dset); long status; unsigned char pact=prec->pact; epicsTimeStamp timeLast; @@ -397,7 +389,7 @@ static void monitor(int64inRecord *prec) static long readValue(int64inRecord *prec) { - struct int64indset *pdset = (struct int64indset *) prec->dset; + int64indset *pdset = (int64indset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/int64inRecord.dbd.pod b/modules/database/src/std/rec/int64inRecord.dbd.pod index edb19a73f..01dc2899a 100644 --- a/modules/database/src/std/rec/int64inRecord.dbd.pod +++ b/modules/database/src/std/rec/int64inRecord.dbd.pod @@ -111,6 +111,15 @@ monitoring deadband functionality. =cut include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + %#define HAS_int64indset + % field(VAL,DBF_INT64) { prompt("Current value") promptgroup("40 - Input") diff --git a/modules/database/src/std/rec/int64outRecord.c b/modules/database/src/std/rec/int64outRecord.c index e9170f9a9..c90518e1d 100644 --- a/modules/database/src/std/rec/int64outRecord.c +++ b/modules/database/src/std/rec/int64outRecord.c @@ -80,14 +80,6 @@ rset int64outRSET={ epicsExportAddress(rset,int64outRSET); -struct int64outdset { /* int64out input dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_int64out;/*(-1,0)=>(failure,success*/ -}; static void checkAlarms(int64outRecord *prec); static void monitor(int64outRecord *prec); static long writeValue(int64outRecord *prec); @@ -97,19 +89,19 @@ static void convert(int64outRecord *prec, epicsInt64 value); static long init_record(dbCommon *pcommon, int pass) { int64outRecord *prec = (int64outRecord*)pcommon; - struct int64outdset *pdset; + int64outdset *pdset; long status=0; if (pass == 0) return 0; recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml); - if(!(pdset = (struct int64outdset *)(prec->dset))) { + if(!(pdset = (int64outdset *)(prec->dset))) { recGblRecordError(S_dev_noDSET,(void *)prec,"int64out: init_record"); return(S_dev_noDSET); } /* must have write_int64out functions defined */ - if( (pdset->number < 5) || (pdset->write_int64out == NULL) ) { + if ((pdset->common.number < 5) || (pdset->write_int64out == NULL)) { recGblRecordError(S_dev_missingSup,(void *)prec,"int64out: init_record"); return(S_dev_missingSup); } @@ -117,8 +109,8 @@ static long init_record(dbCommon *pcommon, int pass) if(recGblInitConstantLink(&prec->dol,DBF_INT64,&prec->val)) prec->udf=FALSE; } - if( pdset->init_record ) { - if((status=(*pdset->init_record)(prec))) return(status); + if (pdset->common.init_record) { + if ((status = pdset->common.init_record(pcommon))) return status; } prec->mlst = prec->val; prec->alst = prec->val; @@ -129,7 +121,7 @@ static long init_record(dbCommon *pcommon, int pass) static long process(dbCommon *pcommon) { int64outRecord *prec = (int64outRecord*)pcommon; - struct int64outdset *pdset = (struct int64outdset *)(prec->dset); + int64outdset *pdset = (int64outdset *)(prec->dset); long status=0; epicsInt64 value; unsigned char pact=prec->pact; @@ -377,7 +369,7 @@ static void monitor(int64outRecord *prec) static long writeValue(int64outRecord *prec) { - struct int64outdset *pdset = (struct int64outdset *) prec->dset; + int64outdset *pdset = (int64outdset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/int64outRecord.dbd.pod b/modules/database/src/std/rec/int64outRecord.dbd.pod index 1b5003efe..78244fb42 100644 --- a/modules/database/src/std/rec/int64outRecord.dbd.pod +++ b/modules/database/src/std/rec/int64outRecord.dbd.pod @@ -137,6 +137,15 @@ monitoring deadband functionality. =cut include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + %#define HAS_int64outdset + % field(VAL,DBF_INT64) { prompt("Desired Output") promptgroup("50 - Output") diff --git a/modules/database/src/std/rec/longinRecord.c b/modules/database/src/std/rec/longinRecord.c index d52464137..299cfb8e6 100644 --- a/modules/database/src/std/rec/longinRecord.c +++ b/modules/database/src/std/rec/longinRecord.c @@ -83,15 +83,6 @@ rset longinRSET={ }; epicsExportAddress(rset,longinRSET); - -struct longindset { /* longin input dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_longin; /*returns: (-1,0)=>(failure,success)*/ -}; static void checkAlarms(longinRecord *prec, epicsTimeStamp *timeLast); static void monitor(longinRecord *prec); static long readValue(longinRecord *prec); @@ -100,7 +91,7 @@ static long readValue(longinRecord *prec); static long init_record(struct dbCommon *pcommon, int pass) { struct longinRecord *prec = (struct longinRecord *)pcommon; - struct longindset *pdset = (struct longindset *) prec->dset; + longindset *pdset = (longindset *) prec->dset; if (pass == 0) return 0; @@ -113,13 +104,13 @@ static long init_record(struct dbCommon *pcommon, int pass) } /* must have read_longin function defined */ - if ((pdset->number < 5) || (pdset->read_longin == NULL)) { + if ((pdset->common.number < 5) || (pdset->read_longin == NULL)) { recGblRecordError(S_dev_missingSup, prec, "longin: init_record"); return S_dev_missingSup; } - if (pdset->init_record) { - long status = pdset->init_record(prec); + if (pdset->common.init_record) { + long status = pdset->common.init_record(pcommon); if (status) return status; @@ -134,7 +125,7 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct longinRecord *prec = (struct longinRecord *)pcommon; - struct longindset *pdset = (struct longindset *)(prec->dset); + longindset *pdset = (longindset *)(prec->dset); long status; unsigned char pact=prec->pact; epicsTimeStamp timeLast; @@ -405,7 +396,7 @@ static void monitor(longinRecord *prec) static long readValue(longinRecord *prec) { - struct longindset *pdset = (struct longindset *) prec->dset; + longindset *pdset = (longindset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/longinRecord.dbd.pod b/modules/database/src/std/rec/longinRecord.dbd.pod index cf2a3a395..51f74bc86 100644 --- a/modules/database/src/std/rec/longinRecord.dbd.pod +++ b/modules/database/src/std/rec/longinRecord.dbd.pod @@ -305,6 +305,15 @@ sets UDF to FALSE. read_longin returns the status of C. =cut include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct longinRecord; + %typedef struct longindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_longin)(struct longinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} longindset; + %#define HAS_longindset + % field(VAL,DBF_LONG) { prompt("Current value") promptgroup("40 - Input") diff --git a/modules/database/src/std/rec/longoutRecord.c b/modules/database/src/std/rec/longoutRecord.c index 06e3b6e21..238fb691c 100644 --- a/modules/database/src/std/rec/longoutRecord.c +++ b/modules/database/src/std/rec/longoutRecord.c @@ -80,15 +80,6 @@ rset longoutRSET={ }; epicsExportAddress(rset,longoutRSET); - -struct longoutdset { /* longout input dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_longout;/*(-1,0)=>(failure,success*/ -}; static void checkAlarms(longoutRecord *prec); static void monitor(longoutRecord *prec); static long writeValue(longoutRecord *prec); @@ -97,7 +88,7 @@ static void convert(longoutRecord *prec, epicsInt32 value); static long init_record(struct dbCommon *pcommon, int pass) { struct longoutRecord *prec = (struct longoutRecord *)pcommon; - struct longoutdset *pdset = (struct longoutdset *) prec->dset; + longoutdset *pdset = (longoutdset *) prec->dset; if (pass == 0) return 0; @@ -109,7 +100,7 @@ static long init_record(struct dbCommon *pcommon, int pass) } /* must have write_longout functions defined */ - if ((pdset->number < 5) || (pdset->write_longout == NULL)) { + if ((pdset->common.number < 5) || (pdset->write_longout == NULL)) { recGblRecordError(S_dev_missingSup, prec, "longout: init_record"); return S_dev_missingSup; } @@ -117,8 +108,8 @@ static long init_record(struct dbCommon *pcommon, int pass) if (recGblInitConstantLink(&prec->dol, DBF_LONG, &prec->val)) prec->udf=FALSE; - if (pdset->init_record) { - long status = pdset->init_record(prec); + if (pdset->common.init_record) { + long status = pdset->common.init_record(pcommon); if (status) return status; @@ -133,7 +124,7 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct longoutRecord *prec = (struct longoutRecord *)pcommon; - struct longoutdset *pdset = (struct longoutdset *)(prec->dset); + longoutdset *pdset = (longoutdset *)(prec->dset); long status=0; epicsInt32 value; unsigned char pact=prec->pact; @@ -382,7 +373,7 @@ static void monitor(longoutRecord *prec) static long writeValue(longoutRecord *prec) { - struct longoutdset *pdset = (struct longoutdset *) prec->dset; + longoutdset *pdset = (longoutdset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/longoutRecord.dbd.pod b/modules/database/src/std/rec/longoutRecord.dbd.pod index 276f3046f..f5e8b7587 100644 --- a/modules/database/src/std/rec/longoutRecord.dbd.pod +++ b/modules/database/src/std/rec/longoutRecord.dbd.pod @@ -96,6 +96,15 @@ and database links. =cut include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct longoutRecord; + %typedef struct longoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_longout)(struct longoutRecord *prec); /*(-1,0)=>(failure,success*/ + %} longoutdset; + %#define HAS_longoutdset + % field(VAL,DBF_LONG) { prompt("Desired Output") promptgroup("50 - Output") diff --git a/modules/database/src/std/rec/lsiRecord.c b/modules/database/src/std/rec/lsiRecord.c index 7396946d4..6d5b9db4a 100644 --- a/modules/database/src/std/rec/lsiRecord.c +++ b/modules/database/src/std/rec/lsiRecord.c @@ -66,13 +66,13 @@ static long init_record(struct dbCommon *pcommon, int pass) } /* must have a read_string function */ - if (pdset->number < 5 || !pdset->read_string) { + if (pdset->common.number < 5 || !pdset->read_string) { recGblRecordError(S_dev_missingSup, prec, "lsi: init_record"); return S_dev_missingSup; } - if (pdset->init_record) { - long status = pdset->init_record(prec); + if (pdset->common.init_record) { + long status = pdset->common.init_record(pcommon); if (status) return status; @@ -221,7 +221,7 @@ static void monitor(lsiRecord *prec) static long readValue(lsiRecord *prec) { - struct lsidset *pdset = (struct lsidset *) prec->dset; + lsidset *pdset = (lsidset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/lsiRecord.dbd.pod b/modules/database/src/std/rec/lsiRecord.dbd.pod index f829a3ce6..4b767800b 100644 --- a/modules/database/src/std/rec/lsiRecord.dbd.pod +++ b/modules/database/src/std/rec/lsiRecord.dbd.pod @@ -44,17 +44,14 @@ See L
for information on specifying links. =cut include "dbCommon.dbd" - %#include "devSup.h" % %/* Declare Device Support Entry Table */ + %struct lsiRecord; %typedef struct lsidset { - % long number; - % DEVSUPFUN report; - % DEVSUPFUN init; - % DEVSUPFUN init_record; - % DEVSUPFUN get_ioint_info; - % DEVSUPFUN read_string; + % dset common; + % long (*read_string)(struct lsiRecord *prec); %} lsidset; + %#define HAS_lsidset % field(VAL,DBF_NOACCESS) { prompt("Current Value") diff --git a/modules/database/src/std/rec/lsoRecord.c b/modules/database/src/std/rec/lsoRecord.c index 9485e3810..4fa6bb725 100644 --- a/modules/database/src/std/rec/lsoRecord.c +++ b/modules/database/src/std/rec/lsoRecord.c @@ -70,15 +70,15 @@ static long init_record(struct dbCommon *pcommon, int pass) } /* must have a write_string function defined */ - if (pdset->number < 5 || !pdset->write_string) { + if (pdset->common.number < 5 || !pdset->write_string) { recGblRecordError(S_dev_missingSup, prec, "lso: init_record"); return S_dev_missingSup; } dbLoadLinkLS(&prec->dol, prec->val, prec->sizv, &prec->len); - if (pdset->init_record) { - long status = pdset->init_record(prec); + if (pdset->common.init_record) { + long status = pdset->common.init_record(pcommon); if (status) return status; diff --git a/modules/database/src/std/rec/lsoRecord.dbd.pod b/modules/database/src/std/rec/lsoRecord.dbd.pod index bc83c36bc..22ab28fcb 100644 --- a/modules/database/src/std/rec/lsoRecord.dbd.pod +++ b/modules/database/src/std/rec/lsoRecord.dbd.pod @@ -109,17 +109,14 @@ lists other fields related to a alarms that are common to all record types. =cut include "dbCommon.dbd" - %#include "devSup.h" % %/* Declare Device Support Entry Table */ + %struct lsoRecord; %typedef struct lsodset { - % long number; - % DEVSUPFUN report; - % DEVSUPFUN init; - % DEVSUPFUN init_record; - % DEVSUPFUN get_ioint_info; - % DEVSUPFUN write_string; + % dset common; + % long (*write_string)(struct lsoRecord *prec); %} lsodset; + %#define HAS_lsodset % field(VAL,DBF_NOACCESS) { prompt("Current Value") diff --git a/modules/database/src/std/rec/mbbiDirectRecord.c b/modules/database/src/std/rec/mbbiDirectRecord.c index 88d805c7c..d3515119a 100644 --- a/modules/database/src/std/rec/mbbiDirectRecord.c +++ b/modules/database/src/std/rec/mbbiDirectRecord.c @@ -81,15 +81,6 @@ rset mbbiDirectRSET={ }; epicsExportAddress(rset,mbbiDirectRSET); -struct mbbidset { /* multi bit binary input dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure, success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_mbbi; /*returns: (0,2)=>(success, success no convert)*/ -}; - static void monitor(mbbiDirectRecord *); static long readValue(mbbiDirectRecord *); @@ -98,7 +89,7 @@ static long readValue(mbbiDirectRecord *); static long init_record(struct dbCommon *pcommon, int pass) { struct mbbiDirectRecord *prec = (struct mbbiDirectRecord *)pcommon; - struct mbbidset *pdset = (struct mbbidset *) prec->dset; + mbbidirectdset *pdset = (mbbidirectdset *) prec->dset; long status = 0; if (pass == 0) return 0; @@ -108,7 +99,7 @@ static long init_record(struct dbCommon *pcommon, int pass) return S_dev_noDSET; } - if ((pdset->number < 5) || (pdset->read_mbbi == NULL)) { + if ((pdset->common.number < 5) || (pdset->read_mbbi == NULL)) { recGblRecordError(S_dev_missingSup, prec, "mbbiDirect: init_record"); return S_dev_missingSup; } @@ -120,8 +111,8 @@ static long init_record(struct dbCommon *pcommon, int pass) if (prec->mask == 0 && prec->nobt <= 32) prec->mask = ((epicsUInt64) 1u << prec->nobt) - 1; - if (pdset->init_record) { - status = pdset->init_record(prec); + if (pdset->common.init_record) { + status = pdset->common.init_record(pcommon); if (status == 0) { epicsUInt32 val = prec->val; epicsUInt8 *pBn = &prec->b0; @@ -141,7 +132,7 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct mbbiDirectRecord *prec = (struct mbbiDirectRecord *)pcommon; - struct mbbidset *pdset = (struct mbbidset *) prec->dset; + mbbidirectdset *pdset = (mbbidirectdset *) prec->dset; long status; int pact = prec->pact; @@ -248,7 +239,7 @@ static void monitor(mbbiDirectRecord *prec) static long readValue(mbbiDirectRecord *prec) { - struct mbbidset *pdset = (struct mbbidset *) prec->dset; + mbbidirectdset *pdset = (mbbidirectdset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/mbbiDirectRecord.dbd.pod b/modules/database/src/std/rec/mbbiDirectRecord.dbd.pod index 5b1c4da09..fa5d40fcd 100644 --- a/modules/database/src/std/rec/mbbiDirectRecord.dbd.pod +++ b/modules/database/src/std/rec/mbbiDirectRecord.dbd.pod @@ -85,6 +85,14 @@ description (DESC) fields. =cut include "dbCommon.dbd" + %/* Declare Device Support Entry Table */ + %struct mbbiDirectRecord; + %typedef struct mbbidirectdset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiDirectRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidirectdset; + %#define HAS_mbbidirectdset + % field(VAL,DBF_LONG) { prompt("Current Value") promptgroup("40 - Input") diff --git a/modules/database/src/std/rec/mbbiRecord.c b/modules/database/src/std/rec/mbbiRecord.c index 0202594c5..ba24d52e3 100644 --- a/modules/database/src/std/rec/mbbiRecord.c +++ b/modules/database/src/std/rec/mbbiRecord.c @@ -83,15 +83,6 @@ rset mbbiRSET = { }; epicsExportAddress(rset,mbbiRSET); -struct mbbidset { /* multi bit binary input dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /* returns: (-1,0) => (failure, success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_mbbi;/* (0, 2) => (success, success no convert)*/ -}; - static void checkAlarms(mbbiRecord *, epicsTimeStamp *); static void monitor(mbbiRecord *); static long readValue(mbbiRecord *); @@ -115,18 +106,17 @@ static void init_common(mbbiRecord *prec) static long init_record(struct dbCommon *pcommon, int pass) { struct mbbiRecord *prec = (struct mbbiRecord *)pcommon; - struct mbbidset *pdset = (struct mbbidset *) prec->dset; + mbbidset *pdset = (mbbidset *) prec->dset; long status = 0; if (pass == 0) return 0; - pdset = (struct mbbidset *) prec->dset; if (!pdset) { recGblRecordError(S_dev_noDSET, prec, "mbbi: init_record"); return S_dev_noDSET; } - if ((pdset->number < 5) || (pdset->read_mbbi == NULL)) { + if ((pdset->common.number < 5) || (pdset->read_mbbi == NULL)) { recGblRecordError(S_dev_missingSup, prec, "mbbi: init_record"); return S_dev_missingSup; } @@ -138,8 +128,8 @@ static long init_record(struct dbCommon *pcommon, int pass) if (prec->mask == 0 && prec->nobt <= 32) prec->mask = ((epicsUInt64) 1u << prec->nobt) - 1; - if (pdset->init_record) - status = pdset->init_record(prec); + if (pdset->common.init_record) + status = pdset->common.init_record(pcommon); init_common(prec); @@ -152,7 +142,7 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct mbbiRecord *prec = (struct mbbiRecord *)pcommon; - struct mbbidset *pdset = (struct mbbidset *) prec->dset; + mbbidset *pdset = (mbbidset *) prec->dset; long status; int pact = prec->pact; epicsTimeStamp timeLast; @@ -380,7 +370,7 @@ static void monitor(mbbiRecord *prec) static long readValue(mbbiRecord *prec) { - struct mbbidset *pdset = (struct mbbidset *) prec->dset; + mbbidset *pdset = (mbbidset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/mbbiRecord.dbd.pod b/modules/database/src/std/rec/mbbiRecord.dbd.pod index b4ab1b402..5f0e08ebe 100644 --- a/modules/database/src/std/rec/mbbiRecord.dbd.pod +++ b/modules/database/src/std/rec/mbbiRecord.dbd.pod @@ -119,6 +119,14 @@ description (DESC) fields. =cut include "dbCommon.dbd" + %/* Declare Device Support Entry Table */ + %struct mbbiRecord; + %typedef struct mbbidset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidset; + %#define HAS_mbbidset + % field(VAL,DBF_ENUM) { prompt("Current Value") promptgroup("40 - Input") diff --git a/modules/database/src/std/rec/mbboDirectRecord.c b/modules/database/src/std/rec/mbboDirectRecord.c index 5c2dd9403..2f928198d 100644 --- a/modules/database/src/std/rec/mbboDirectRecord.c +++ b/modules/database/src/std/rec/mbboDirectRecord.c @@ -81,16 +81,6 @@ rset mbboDirectRSET = { }; epicsExportAddress(rset, mbboDirectRSET); -struct mbbodset { /* multi bit binary output dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (0, 2)=>(success, success no convert)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_mbbo; /*returns: (0, 2)=>(success, success no convert)*/ -}; - - static void convert(mbboDirectRecord *); static void monitor(mbboDirectRecord *); static long writeValue(mbboDirectRecord *); @@ -100,7 +90,7 @@ static long writeValue(mbboDirectRecord *); static long init_record(struct dbCommon *pcommon, int pass) { struct mbboDirectRecord *prec = (struct mbboDirectRecord *)pcommon; - struct mbbodset *pdset = (struct mbbodset *) prec->dset; + mbbodirectdset *pdset = (mbbodirectdset *) prec->dset; long status = 0; if (pass == 0) return 0; @@ -110,7 +100,7 @@ static long init_record(struct dbCommon *pcommon, int pass) return S_dev_noDSET; } - if ((pdset->number < 5) || (pdset->write_mbbo == NULL)) { + if ((pdset->common.number < 5) || (pdset->write_mbbo == NULL)) { recGblRecordError(S_dev_missingSup, prec, "mbboDirect: init_record"); return S_dev_missingSup; } @@ -124,8 +114,8 @@ static long init_record(struct dbCommon *pcommon, int pass) if (prec->mask == 0 && prec->nobt <= 32) prec->mask = ((epicsUInt64) 1u << prec->nobt) - 1; - if (pdset->init_record) { - status = pdset->init_record(prec); + if (pdset->common.init_record) { + status = pdset->common.init_record(pcommon); if (status == 0) { /* Convert initial read-back */ epicsUInt32 rval = prec->rval; @@ -162,7 +152,7 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct mbboDirectRecord *prec = (struct mbboDirectRecord *)pcommon; - struct mbbodset *pdset = (struct mbbodset *)(prec->dset); + mbbodirectdset *pdset = (mbbodirectdset *)(prec->dset); long status = 0; int pact = prec->pact; @@ -356,7 +346,7 @@ static void convert(mbboDirectRecord *prec) static long writeValue(mbboDirectRecord *prec) { - struct mbbodset *pdset = (struct mbbodset *) prec->dset; + mbbodirectdset *pdset = (mbbodirectdset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/mbboDirectRecord.dbd.pod b/modules/database/src/std/rec/mbboDirectRecord.dbd.pod index ca49bcd53..01402db18 100644 --- a/modules/database/src/std/rec/mbboDirectRecord.dbd.pod +++ b/modules/database/src/std/rec/mbboDirectRecord.dbd.pod @@ -90,6 +90,14 @@ description (DESC) fields. =cut include "dbCommon.dbd" + %/* Declare Device Support Entry Table */ + %struct mbboDirectRecord; + %typedef struct mbbodirectdset { + % dset common; /*init_record returns: (0, 2)=>(success, success no convert)*/ + % long (*write_mbbo)(struct mbboDirectRecord *prec); /*returns: (0, 2)=>(success, success no convert)*/ + %} mbbodirectdset; + %#define HAS_mbbodirectdset + % field(VAL,DBF_LONG) { prompt("Word") promptgroup("50 - Output") diff --git a/modules/database/src/std/rec/mbboRecord.c b/modules/database/src/std/rec/mbboRecord.c index 2488552ba..b54988d6d 100644 --- a/modules/database/src/std/rec/mbboRecord.c +++ b/modules/database/src/std/rec/mbboRecord.c @@ -82,15 +82,6 @@ rset mbboRSET = { }; epicsExportAddress(rset,mbboRSET); -struct mbbodset { /* multi bit binary output dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (0, 2) => (success, success no convert)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_mbbo; /*returns: (0, 2) => (success, success no convert)*/ -}; - static void checkAlarms(mbboRecord *); static void convert(mbboRecord *); @@ -117,7 +108,7 @@ static void init_common(mbboRecord *prec) static long init_record(struct dbCommon *pcommon, int pass) { struct mbboRecord *prec = (struct mbboRecord *)pcommon; - struct mbbodset *pdset; + mbbodset *pdset; long status; if (pass == 0) { @@ -125,13 +116,13 @@ static long init_record(struct dbCommon *pcommon, int pass) return 0; } - pdset = (struct mbbodset *) prec->dset; + pdset = (mbbodset *) prec->dset; if (!pdset) { recGblRecordError(S_dev_noDSET, prec, "mbbo: init_record"); return S_dev_noDSET; } - if ((pdset->number < 5) || (pdset->write_mbbo == NULL)) { + if ((pdset->common.number < 5) || (pdset->write_mbbo == NULL)) { recGblRecordError(S_dev_missingSup, prec, "mbbo: init_record"); return S_dev_missingSup; } @@ -145,8 +136,8 @@ static long init_record(struct dbCommon *pcommon, int pass) if (prec->mask == 0 && prec->nobt <= 32) prec->mask = ((epicsUInt64) 1u << prec->nobt) - 1; - if (pdset->init_record) { - status = pdset->init_record(prec); + if (pdset->common.init_record) { + status = pdset->common.init_record(pcommon); init_common(prec); if (status == 0) { /* Convert initial read-back */ @@ -194,7 +185,7 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct mbboRecord *prec = (struct mbboRecord *)pcommon; - struct mbbodset *pdset = (struct mbbodset *) prec->dset; + mbbodset *pdset = (mbbodset *) prec->dset; long status = 0; int pact = prec->pact; @@ -439,7 +430,7 @@ static void convert(mbboRecord *prec) static long writeValue(mbboRecord *prec) { - struct mbbodset *pdset = (struct mbbodset *) prec->dset; + mbbodset *pdset = (mbbodset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/mbboRecord.dbd.pod b/modules/database/src/std/rec/mbboRecord.dbd.pod index 2196aa5a2..ff5cd7e13 100644 --- a/modules/database/src/std/rec/mbboRecord.dbd.pod +++ b/modules/database/src/std/rec/mbboRecord.dbd.pod @@ -173,6 +173,14 @@ mode fields. =cut include "dbCommon.dbd" + %/* Declare Device Support Entry Table */ + %struct mbboRecord; + %typedef struct mbbodset { + % dset common; /*init_record returns: (0, 2) => (success, success no convert)*/ + % long (*write_mbbo)(struct mbboRecord *prec); /*returns: (0, 2) => (success, success no convert)*/ + %} mbbodset; + %#define HAS_mbbodset + % field(VAL,DBF_ENUM) { prompt("Desired Value") promptgroup("50 - Output") diff --git a/modules/database/src/std/rec/printfRecord.c b/modules/database/src/std/rec/printfRecord.c index 576b9632a..8a8edb133 100644 --- a/modules/database/src/std/rec/printfRecord.c +++ b/modules/database/src/std/rec/printfRecord.c @@ -336,13 +336,13 @@ static long init_record(struct dbCommon *pcommon, int pass) if (!pdset) return 0; /* Device support is optional */ - if (pdset->number < 5) { + if (pdset->common.number < 5) { recGblRecordError(S_dev_missingSup, prec, "printf::init_record"); return S_dev_missingSup; } - if (pdset->init_record) { - long status = pdset->init_record(prec); + if (pdset->common.init_record) { + long status = pdset->common.init_record(pcommon); if (status) return status; } @@ -368,7 +368,7 @@ static long process(struct dbCommon *pcommon) /* Call device support */ pdset = (printfdset *) prec->dset; if (pdset && - pdset->number >= 5 && + pdset->common.number >= 5 && pdset->write_string) { status = pdset->write_string(prec); diff --git a/modules/database/src/std/rec/printfRecord.dbd.pod b/modules/database/src/std/rec/printfRecord.dbd.pod index 3f4c859c1..5756daf86 100644 --- a/modules/database/src/std/rec/printfRecord.dbd.pod +++ b/modules/database/src/std/rec/printfRecord.dbd.pod @@ -171,17 +171,14 @@ description (DESC) fields. =cut include "dbCommon.dbd" - %#include "devSup.h" % %/* Declare Device Support Entry Table */ + %struct printfRecord; %typedef struct printfdset { - % long number; - % DEVSUPFUN report; - % DEVSUPFUN init; - % DEVSUPFUN init_record; - % DEVSUPFUN get_ioint_info; - % DEVSUPFUN write_string; + % dset common; + % long (*write_string)(struct printfRecord *prec); %} printfdset; + %#define HAS_printfdset % field(VAL,DBF_NOACCESS) { prompt("Result") diff --git a/modules/database/src/std/rec/stringinRecord.c b/modules/database/src/std/rec/stringinRecord.c index fdc1f2642..3c6776204 100644 --- a/modules/database/src/std/rec/stringinRecord.c +++ b/modules/database/src/std/rec/stringinRecord.c @@ -80,14 +80,6 @@ rset stringinRSET={ }; epicsExportAddress(rset,stringinRSET); -struct stringindset { /* stringin input dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_stringin; /*returns: (-1,0)=>(failure,success)*/ -}; static void monitor(stringinRecord *); static long readValue(stringinRecord *); @@ -97,7 +89,7 @@ static long init_record(struct dbCommon *pcommon, int pass) struct stringinRecord *prec = (struct stringinRecord *)pcommon; STATIC_ASSERT(sizeof(prec->oval)==sizeof(prec->val)); STATIC_ASSERT(sizeof(prec->sval)==sizeof(prec->val)); - struct stringindset *pdset = (struct stringindset *) prec->dset; + stringindset *pdset = (stringindset *) prec->dset; if (pass == 0) return 0; @@ -110,13 +102,13 @@ static long init_record(struct dbCommon *pcommon, int pass) } /* must have read_stringin function defined */ - if ((pdset->number < 5) || (pdset->read_stringin == NULL)) { + if ((pdset->common.number < 5) || (pdset->read_stringin == NULL)) { recGblRecordError(S_dev_missingSup, prec, "stringin: init_record"); return S_dev_missingSup; } - if (pdset->init_record) { - long status = pdset->init_record(prec); + if (pdset->common.init_record) { + long status = pdset->common.init_record(pcommon); if (status) return status; @@ -130,7 +122,7 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct stringinRecord *prec = (struct stringinRecord *)pcommon; - struct stringindset *pdset = (struct stringindset *)(prec->dset); + stringindset *pdset = (stringindset *)(prec->dset); long status; unsigned char pact=prec->pact; @@ -196,7 +188,7 @@ static void monitor(stringinRecord *prec) static long readValue(stringinRecord *prec) { - struct stringindset *pdset = (struct stringindset *) prec->dset; + stringindset *pdset = (stringindset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/stringinRecord.dbd.pod b/modules/database/src/std/rec/stringinRecord.dbd.pod index a9d7aadfc..b2f05a60b 100644 --- a/modules/database/src/std/rec/stringinRecord.dbd.pod +++ b/modules/database/src/std/rec/stringinRecord.dbd.pod @@ -24,6 +24,15 @@ menu(stringinPOST) { } recordtype(stringin) { include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct stringinRecord; + %typedef struct stringindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_stringin)(struct stringinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} stringindset; + %#define HAS_stringindset + % field(VAL,DBF_STRING) { prompt("Current Value") promptgroup("40 - Input") diff --git a/modules/database/src/std/rec/stringoutRecord.c b/modules/database/src/std/rec/stringoutRecord.c index ddf302848..786d295cf 100644 --- a/modules/database/src/std/rec/stringoutRecord.c +++ b/modules/database/src/std/rec/stringoutRecord.c @@ -82,14 +82,6 @@ rset stringoutRSET={ }; epicsExportAddress(rset,stringoutRSET); -struct stringoutdset { /* stringout input dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN write_stringout;/*(-1,0)=>(failure,success)*/ -}; static void monitor(stringoutRecord *); static long writeValue(stringoutRecord *); @@ -99,7 +91,7 @@ static long init_record(struct dbCommon *pcommon, int pass) struct stringoutRecord *prec = (struct stringoutRecord *)pcommon; STATIC_ASSERT(sizeof(prec->oval)==sizeof(prec->val)); STATIC_ASSERT(sizeof(prec->ivov)==sizeof(prec->val)); - struct stringoutdset *pdset = (struct stringoutdset *) prec->dset; + stringoutdset *pdset = (stringoutdset *) prec->dset; if (pass == 0) return 0; @@ -111,7 +103,7 @@ static long init_record(struct dbCommon *pcommon, int pass) } /* must have write_stringout functions defined */ - if ((pdset->number < 5) || (pdset->write_stringout == NULL)) { + if ((pdset->common.number < 5) || (pdset->write_stringout == NULL)) { recGblRecordError(S_dev_missingSup, prec, "stringout: init_record"); return S_dev_missingSup; } @@ -120,8 +112,8 @@ static long init_record(struct dbCommon *pcommon, int pass) if (recGblInitConstantLink(&prec->dol, DBF_STRING, prec->val)) prec->udf = FALSE; - if (pdset->init_record) { - long status = pdset->init_record(prec); + if (pdset->common.init_record) { + long status = pdset->common.init_record(pcommon); if(status) return status; @@ -133,7 +125,7 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct stringoutRecord *prec = (struct stringoutRecord *)pcommon; - struct stringoutdset *pdset = (struct stringoutdset *)(prec->dset); + stringoutdset *pdset = (stringoutdset *)(prec->dset); long status=0; unsigned char pact=prec->pact; @@ -228,7 +220,7 @@ static void monitor(stringoutRecord *prec) static long writeValue(stringoutRecord *prec) { - struct stringoutdset *pdset = (struct stringoutdset *) prec->dset; + stringoutdset *pdset = (stringoutdset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/stringoutRecord.dbd.pod b/modules/database/src/std/rec/stringoutRecord.dbd.pod index cd8915b2e..528983290 100644 --- a/modules/database/src/std/rec/stringoutRecord.dbd.pod +++ b/modules/database/src/std/rec/stringoutRecord.dbd.pod @@ -24,6 +24,15 @@ menu(stringoutPOST) { } recordtype(stringout) { include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct stringoutRecord; + %typedef struct stringoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_stringout)(struct stringoutRecord *prec); /*(-1,0)=>(failure,success)*/ + %} stringoutdset; + %#define HAS_stringoutdset + % field(VAL,DBF_STRING) { prompt("Current Value") promptgroup("50 - Output") diff --git a/modules/database/src/std/rec/subArrayRecord.c b/modules/database/src/std/rec/subArrayRecord.c index 6de514766..00eed313e 100644 --- a/modules/database/src/std/rec/subArrayRecord.c +++ b/modules/database/src/std/rec/subArrayRecord.c @@ -82,15 +82,6 @@ rset subArrayRSET={ }; epicsExportAddress(rset,subArrayRSET); -struct sadset { /* subArray dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_sa; /*returns: (-1,0)=>(failure,success)*/ -}; - static void monitor(subArrayRecord *prec); static long readValue(subArrayRecord *prec); @@ -98,7 +89,7 @@ static long readValue(subArrayRecord *prec); static long init_record(struct dbCommon *pcommon, int pass) { struct subArrayRecord *prec = (struct subArrayRecord *)pcommon; - struct sadset *pdset; + sadset *pdset; if (pass==0){ if (prec->malm <= 0) @@ -114,19 +105,19 @@ static long init_record(struct dbCommon *pcommon, int pass) } /* must have dset defined */ - if (!(pdset = (struct sadset *)(prec->dset))) { + if (!(pdset = (sadset *)(prec->dset))) { recGblRecordError(S_dev_noDSET,(void *)prec,"sa: init_record"); return S_dev_noDSET; } /* must have read_sa function defined */ - if ( (pdset->number < 5) || (pdset->read_sa == NULL) ) { + if ( (pdset->common.number < 5) || (pdset->read_sa == NULL) ) { recGblRecordError(S_dev_missingSup,(void *)prec,"sa: init_record"); return S_dev_missingSup; } - if (pdset->init_record) - return pdset->init_record(prec); + if (pdset->common.init_record) + return pdset->common.init_record(pcommon); return 0; } @@ -134,7 +125,7 @@ static long init_record(struct dbCommon *pcommon, int pass) static long process(struct dbCommon *pcommon) { struct subArrayRecord *prec = (struct subArrayRecord *)pcommon; - struct sadset *pdset = (struct sadset *)(prec->dset); + sadset *pdset = (sadset *)(prec->dset); long status; unsigned char pact=prec->pact; @@ -309,7 +300,7 @@ static void monitor(subArrayRecord *prec) static long readValue(subArrayRecord *prec) { long status; - struct sadset *pdset = (struct sadset *) (prec->dset); + sadset *pdset = (sadset *) (prec->dset); if (prec->nelm > prec->malm) prec->nelm = prec->malm; diff --git a/modules/database/src/std/rec/subArrayRecord.dbd.pod b/modules/database/src/std/rec/subArrayRecord.dbd.pod index 086ca583d..b2d0141cc 100644 --- a/modules/database/src/std/rec/subArrayRecord.dbd.pod +++ b/modules/database/src/std/rec/subArrayRecord.dbd.pod @@ -314,6 +314,15 @@ INP is expected to point to an array field of a waveform record or similar. =cut include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct subArrayRecord; + %typedef struct sadset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_sa)(struct subArrayRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} sadset; + %#define HAS_sadset + % field(VAL,DBF_NOACCESS) { prompt("Value") asl(ASL0) diff --git a/modules/database/src/std/rec/waveformRecord.c b/modules/database/src/std/rec/waveformRecord.c index 8d210183c..69a36f496 100644 --- a/modules/database/src/std/rec/waveformRecord.c +++ b/modules/database/src/std/rec/waveformRecord.c @@ -80,14 +80,6 @@ rset waveformRSET={ get_alarm_double }; epicsExportAddress(rset,waveformRSET); -struct wfdset { /* waveform dset */ - long number; - DEVSUPFUN dev_report; - DEVSUPFUN init; - DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/ - DEVSUPFUN get_ioint_info; - DEVSUPFUN read_wf; /*returns: (-1,0)=>(failure,success)*/ -}; static void monitor(waveformRecord *); static long readValue(waveformRecord *); @@ -95,7 +87,7 @@ static long readValue(waveformRecord *); static long init_record(struct dbCommon *pcommon, int pass) { struct waveformRecord *prec = (struct waveformRecord *)pcommon; - struct wfdset *pdset; + wfdset *pdset; if (pass == 0) { if (prec->nelm <= 0) @@ -111,25 +103,25 @@ static long init_record(struct dbCommon *pcommon, int pass) recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml); /* must have dset defined */ - if (!(pdset = (struct wfdset *)(prec->dset))) { + if (!(pdset = (wfdset *)(prec->dset))) { recGblRecordError(S_dev_noDSET,(void *)prec,"wf: init_record"); return S_dev_noDSET; } /* must have read_wf function defined */ - if ((pdset->number < 5) || (pdset->read_wf == NULL)) { + if ((pdset->common.number < 5) || (pdset->read_wf == NULL)) { recGblRecordError(S_dev_missingSup,(void *)prec,"wf: init_record"); return S_dev_missingSup; } - if (!pdset->init_record) + if (!pdset->common.init_record) return 0; - return pdset->init_record(prec); + return pdset->common.init_record(pcommon); } static long process(struct dbCommon *pcommon) { struct waveformRecord *prec = (struct waveformRecord *)pcommon; - struct wfdset *pdset = (struct wfdset *)(prec->dset); + wfdset *pdset = (wfdset *)(prec->dset); unsigned char pact=prec->pact; long status; @@ -328,7 +320,7 @@ static void monitor(waveformRecord *prec) static long readValue(waveformRecord *prec) { - struct wfdset *pdset = (struct wfdset *) prec->dset; + wfdset *pdset = (wfdset *) prec->dset; long status = 0; if (!prec->pact) { diff --git a/modules/database/src/std/rec/waveformRecord.dbd.pod b/modules/database/src/std/rec/waveformRecord.dbd.pod index 80628b564..655a8a3e3 100644 --- a/modules/database/src/std/rec/waveformRecord.dbd.pod +++ b/modules/database/src/std/rec/waveformRecord.dbd.pod @@ -374,6 +374,15 @@ If the INP link type is constant, then NORD is set to zero. =cut include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct waveformRecord; + %typedef struct wfdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_wf)(struct waveformRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} wfdset; + %#define HAS_wfdset + % field(VAL,DBF_NOACCESS) { prompt("Value") asl(ASL0)