From 23450fcfc81d98b1cd3d71deb598c4d323508846 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Sat, 16 Nov 2019 22:16:50 -0600 Subject: [PATCH 01/16] Modify printfdset, set USE_TYPED_DSET --- modules/database/src/std/dev/Makefile | 3 +++ modules/database/src/std/dev/devPrintfSoft.c | 2 +- modules/database/src/std/dev/devPrintfSoftCallback.c | 2 +- modules/database/src/std/dev/devStdio.c | 2 +- modules/database/src/std/rec/Makefile | 1 + modules/database/src/std/rec/printfRecord.c | 8 ++++---- modules/database/src/std/rec/printfRecord.dbd | 9 +++------ 7 files changed, 14 insertions(+), 13 deletions(-) diff --git a/modules/database/src/std/dev/Makefile b/modules/database/src/std/dev/Makefile index ec3713bd6..a42879883 100644 --- a/modules/database/src/std/dev/Makefile +++ b/modules/database/src/std/dev/Makefile @@ -42,6 +42,7 @@ dbRecStd_SRCS += devMbboDirectSoft.c dbRecStd_SRCS += devMbboDirectSoftRaw.c dbRecStd_SRCS += devMbboSoft.c dbRecStd_SRCS += devMbboSoftRaw.c +devPrintfSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devPrintfSoft.c dbRecStd_SRCS += devSASoft.c dbRecStd_SRCS += devSiSoft.c @@ -65,10 +66,12 @@ dbRecStd_SRCS += devLoSoftCallback.c dbRecStd_SRCS += devLsoSoftCallback.c dbRecStd_SRCS += devMbboSoftCallback.c dbRecStd_SRCS += devMbboDirectSoftCallback.c +devPrintfSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devPrintfSoftCallback.c dbRecStd_SRCS += devSoSoftCallback.c dbRecStd_SRCS += devTimestamp.c +devStdio_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devStdio.c dbRecStd_SRCS += devEnviron.c 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/devStdio.c b/modules/database/src/std/dev/devStdio.c index e957bfce0..0bed72a57 100644 --- a/modules/database/src/std/dev/devStdio.c +++ b/modules/database/src/std/dev/devStdio.c @@ -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); diff --git a/modules/database/src/std/rec/Makefile b/modules/database/src/std/rec/Makefile index 87021987e..d950eda35 100644 --- a/modules/database/src/std/rec/Makefile +++ b/modules/database/src/std/rec/Makefile @@ -36,6 +36,7 @@ stdRecords += mbbiDirectRecord stdRecords += mbboRecord stdRecords += mbboDirectRecord stdRecords += permissiveRecord +printfRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += printfRecord stdRecords += selRecord stdRecords += seqRecord 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 b/modules/database/src/std/rec/printfRecord.dbd index 4fd63ef3c..6cdbc73c4 100644 --- a/modules/database/src/std/rec/printfRecord.dbd +++ b/modules/database/src/std/rec/printfRecord.dbd @@ -10,13 +10,10 @@ recordtype(printf) { %#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; % field(VAL,DBF_NOACCESS) { From 465ab446069261f31671bfe5f9746e315430e7af Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Sat, 16 Nov 2019 22:18:32 -0600 Subject: [PATCH 02/16] Modify lsidset, set USE_TYPED_DSET --- modules/database/src/std/dev/Makefile | 2 ++ modules/database/src/std/dev/devEnviron.c | 2 +- modules/database/src/std/dev/devLsiSoft.c | 5 +++-- modules/database/src/std/rec/Makefile | 1 + modules/database/src/std/rec/lsiRecord.c | 6 +++--- modules/database/src/std/rec/lsiRecord.dbd | 9 +++------ 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/modules/database/src/std/dev/Makefile b/modules/database/src/std/dev/Makefile index a42879883..a72bfa342 100644 --- a/modules/database/src/std/dev/Makefile +++ b/modules/database/src/std/dev/Makefile @@ -32,6 +32,7 @@ dbRecStd_SRCS += devI64inSoft.c dbRecStd_SRCS += devI64outSoft.c dbRecStd_SRCS += devLiSoft.c dbRecStd_SRCS += devLoSoft.c +devLsiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLsiSoft.c dbRecStd_SRCS += devLsoSoft.c dbRecStd_SRCS += devMbbiDirectSoft.c @@ -73,6 +74,7 @@ dbRecStd_SRCS += devSoSoftCallback.c dbRecStd_SRCS += devTimestamp.c devStdio_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devStdio.c +devEnviron_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devEnviron.c dbRecStd_SRCS += asSubRecordFunctions.c diff --git a/modules/database/src/std/dev/devEnviron.c b/modules/database/src/std/dev/devEnviron.c index 9672d6ce5..69c9a3d92 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); 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/rec/Makefile b/modules/database/src/std/rec/Makefile index d950eda35..4d3687794 100644 --- a/modules/database/src/std/rec/Makefile +++ b/modules/database/src/std/rec/Makefile @@ -29,6 +29,7 @@ stdRecords += int64inRecord stdRecords += int64outRecord stdRecords += longinRecord stdRecords += longoutRecord +lsiRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += lsiRecord stdRecords += lsoRecord stdRecords += mbbiRecord diff --git a/modules/database/src/std/rec/lsiRecord.c b/modules/database/src/std/rec/lsiRecord.c index 7396946d4..96e870b0e 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; diff --git a/modules/database/src/std/rec/lsiRecord.dbd b/modules/database/src/std/rec/lsiRecord.dbd index 21f2ba43d..7d885987b 100644 --- a/modules/database/src/std/rec/lsiRecord.dbd +++ b/modules/database/src/std/rec/lsiRecord.dbd @@ -10,13 +10,10 @@ recordtype(lsi) { %#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; % field(VAL,DBF_NOACCESS) { From 7893445a2ed92a1350e4fb40ac77e5f8e39b1557 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Sat, 16 Nov 2019 22:19:38 -0600 Subject: [PATCH 03/16] Modify lsodset, set USE_TYPED_DSET --- modules/database/src/std/dev/Makefile | 2 ++ modules/database/src/std/dev/devLsoSoft.c | 2 +- modules/database/src/std/dev/devLsoSoftCallback.c | 2 +- modules/database/src/std/dev/devStdio.c | 2 +- modules/database/src/std/rec/Makefile | 1 + modules/database/src/std/rec/lsoRecord.c | 6 +++--- modules/database/src/std/rec/lsoRecord.dbd | 9 +++------ 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/database/src/std/dev/Makefile b/modules/database/src/std/dev/Makefile index a72bfa342..bcfc51870 100644 --- a/modules/database/src/std/dev/Makefile +++ b/modules/database/src/std/dev/Makefile @@ -34,6 +34,7 @@ dbRecStd_SRCS += devLiSoft.c dbRecStd_SRCS += devLoSoft.c devLsiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLsiSoft.c +devLsoSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLsoSoft.c dbRecStd_SRCS += devMbbiDirectSoft.c dbRecStd_SRCS += devMbbiDirectSoftRaw.c @@ -64,6 +65,7 @@ dbRecStd_SRCS += devBoSoftCallback.c dbRecStd_SRCS += devCalcoutSoftCallback.c dbRecStd_SRCS += devI64outSoftCallback.c dbRecStd_SRCS += devLoSoftCallback.c +devLsoSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLsoSoftCallback.c dbRecStd_SRCS += devMbboSoftCallback.c dbRecStd_SRCS += devMbboDirectSoftCallback.c 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/devStdio.c b/modules/database/src/std/dev/devStdio.c index 0bed72a57..928c8a420 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); diff --git a/modules/database/src/std/rec/Makefile b/modules/database/src/std/rec/Makefile index 4d3687794..3f46ae33a 100644 --- a/modules/database/src/std/rec/Makefile +++ b/modules/database/src/std/rec/Makefile @@ -31,6 +31,7 @@ stdRecords += longinRecord stdRecords += longoutRecord lsiRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += lsiRecord +lsoRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += lsoRecord stdRecords += mbbiRecord stdRecords += mbbiDirectRecord 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 b/modules/database/src/std/rec/lsoRecord.dbd index 880139a3c..50cc6f29c 100644 --- a/modules/database/src/std/rec/lsoRecord.dbd +++ b/modules/database/src/std/rec/lsoRecord.dbd @@ -10,13 +10,10 @@ recordtype(lso) { %#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; % field(VAL,DBF_NOACCESS) { From 7e1d1650929f12ec91bf352a4b287b84bed08d1b Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Sat, 16 Nov 2019 22:40:08 -0600 Subject: [PATCH 04/16] Export and use int64indset, set USE_TYPED_DSET --- modules/database/src/std/dev/Makefile | 2 ++ modules/database/src/std/dev/devI64inSoft.c | 32 ++++++------------- .../src/std/dev/devI64inSoftCallback.c | 11 +++---- modules/database/src/std/rec/Makefile | 1 + modules/database/src/std/rec/int64inRecord.c | 14 ++------ .../src/std/rec/int64inRecord.dbd.pod | 9 ++++++ 6 files changed, 29 insertions(+), 40 deletions(-) diff --git a/modules/database/src/std/dev/Makefile b/modules/database/src/std/dev/Makefile index bcfc51870..4e023abbd 100644 --- a/modules/database/src/std/dev/Makefile +++ b/modules/database/src/std/dev/Makefile @@ -28,6 +28,7 @@ dbRecStd_SRCS += devBoDbState.c dbRecStd_SRCS += devCalcoutSoft.c dbRecStd_SRCS += devEventSoft.c dbRecStd_SRCS += devHistogramSoft.c +devI64inSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devI64inSoft.c dbRecStd_SRCS += devI64outSoft.c dbRecStd_SRCS += devLiSoft.c @@ -54,6 +55,7 @@ dbRecStd_SRCS += devGeneralTime.c dbRecStd_SRCS += devAiSoftCallback.c dbRecStd_SRCS += devBiSoftCallback.c +devI64inSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devI64inSoftCallback.c dbRecStd_SRCS += devLiSoftCallback.c dbRecStd_SRCS += devMbbiDirectSoftCallback.c 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/rec/Makefile b/modules/database/src/std/rec/Makefile index 3f46ae33a..ce2625cd3 100644 --- a/modules/database/src/std/rec/Makefile +++ b/modules/database/src/std/rec/Makefile @@ -25,6 +25,7 @@ stdRecords += dfanoutRecord stdRecords += eventRecord stdRecords += fanoutRecord stdRecords += histogramRecord +int64inRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += int64inRecord stdRecords += int64outRecord stdRecords += longinRecord diff --git a/modules/database/src/std/rec/int64inRecord.c b/modules/database/src/std/rec/int64inRecord.c index 8ce241000..b802f125c 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); @@ -113,12 +105,12 @@ static long init_record(dbCommon *pcommon, int pass) 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; diff --git a/modules/database/src/std/rec/int64inRecord.dbd.pod b/modules/database/src/std/rec/int64inRecord.dbd.pod index edb19a73f..c512fc677 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" + %#include "devSup.h" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + % field(VAL,DBF_INT64) { prompt("Current value") promptgroup("40 - Input") From b1b51cc70e737f3e56303088525e066348a4ac80 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Sat, 16 Nov 2019 23:02:34 -0600 Subject: [PATCH 05/16] Export and use int64outdset, set USE_TYPED_DSET --- modules/database/src/std/dev/Makefile | 2 ++ modules/database/src/std/dev/devI64outSoft.c | 29 +++++-------------- .../src/std/dev/devI64outSoftCallback.c | 25 ++++------------ modules/database/src/std/rec/Makefile | 1 + modules/database/src/std/rec/int64outRecord.c | 14 ++------- .../src/std/rec/int64outRecord.dbd.pod | 9 ++++++ 6 files changed, 29 insertions(+), 51 deletions(-) diff --git a/modules/database/src/std/dev/Makefile b/modules/database/src/std/dev/Makefile index 4e023abbd..40f68b8f1 100644 --- a/modules/database/src/std/dev/Makefile +++ b/modules/database/src/std/dev/Makefile @@ -30,6 +30,7 @@ dbRecStd_SRCS += devEventSoft.c dbRecStd_SRCS += devHistogramSoft.c devI64inSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devI64inSoft.c +devI64outSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devI64outSoft.c dbRecStd_SRCS += devLiSoft.c dbRecStd_SRCS += devLoSoft.c @@ -65,6 +66,7 @@ dbRecStd_SRCS += devSiSoftCallback.c dbRecStd_SRCS += devAoSoftCallback.c dbRecStd_SRCS += devBoSoftCallback.c dbRecStd_SRCS += devCalcoutSoftCallback.c +devI64outSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devI64outSoftCallback.c dbRecStd_SRCS += devLoSoftCallback.c devLsoSoftCallback_CFLAGS += -DUSE_TYPED_DSET 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/rec/Makefile b/modules/database/src/std/rec/Makefile index ce2625cd3..2d1cfe67b 100644 --- a/modules/database/src/std/rec/Makefile +++ b/modules/database/src/std/rec/Makefile @@ -27,6 +27,7 @@ stdRecords += fanoutRecord stdRecords += histogramRecord int64inRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += int64inRecord +int64outRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += int64outRecord stdRecords += longinRecord stdRecords += longoutRecord diff --git a/modules/database/src/std/rec/int64outRecord.c b/modules/database/src/std/rec/int64outRecord.c index e9170f9a9..cbacb2739 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); @@ -109,7 +101,7 @@ static long init_record(dbCommon *pcommon, int pass) 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; diff --git a/modules/database/src/std/rec/int64outRecord.dbd.pod b/modules/database/src/std/rec/int64outRecord.dbd.pod index 1b5003efe..2f0fb346a 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" + %#include "devSup.h" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + % field(VAL,DBF_INT64) { prompt("Desired Output") promptgroup("50 - Output") From 45c7039a45f801cea2ee489c813e1a8927840ebe Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Sat, 23 Nov 2019 22:23:47 -0600 Subject: [PATCH 06/16] Add HAS_dset macros to allow detection External device support that must also build against earlier Base versions can use these to determine whether they need so declare their own dset structures for each record type. --- modules/database/src/std/rec/int64inRecord.dbd.pod | 1 + modules/database/src/std/rec/int64outRecord.dbd.pod | 1 + modules/database/src/std/rec/lsiRecord.dbd | 1 + modules/database/src/std/rec/lsoRecord.dbd | 1 + modules/database/src/std/rec/printfRecord.dbd | 1 + 5 files changed, 5 insertions(+) diff --git a/modules/database/src/std/rec/int64inRecord.dbd.pod b/modules/database/src/std/rec/int64inRecord.dbd.pod index c512fc677..c690c8105 100644 --- a/modules/database/src/std/rec/int64inRecord.dbd.pod +++ b/modules/database/src/std/rec/int64inRecord.dbd.pod @@ -119,6 +119,7 @@ monitoring deadband functionality. % dset common; % long (*read_int64in)(struct int64inRecord *prec); %} int64indset; + %#define HAS_int64indset % field(VAL,DBF_INT64) { prompt("Current value") diff --git a/modules/database/src/std/rec/int64outRecord.dbd.pod b/modules/database/src/std/rec/int64outRecord.dbd.pod index 2f0fb346a..00fe822bb 100644 --- a/modules/database/src/std/rec/int64outRecord.dbd.pod +++ b/modules/database/src/std/rec/int64outRecord.dbd.pod @@ -145,6 +145,7 @@ monitoring deadband functionality. % dset common; % long (*write_int64out)(struct int64outRecord *prec); %} int64outdset; + %#define HAS_int64outdset % field(VAL,DBF_INT64) { prompt("Desired Output") diff --git a/modules/database/src/std/rec/lsiRecord.dbd b/modules/database/src/std/rec/lsiRecord.dbd index 7d885987b..a3ce1deee 100644 --- a/modules/database/src/std/rec/lsiRecord.dbd +++ b/modules/database/src/std/rec/lsiRecord.dbd @@ -15,6 +15,7 @@ recordtype(lsi) { % 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.dbd b/modules/database/src/std/rec/lsoRecord.dbd index 50cc6f29c..2011bb66d 100644 --- a/modules/database/src/std/rec/lsoRecord.dbd +++ b/modules/database/src/std/rec/lsoRecord.dbd @@ -15,6 +15,7 @@ recordtype(lso) { % 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/printfRecord.dbd b/modules/database/src/std/rec/printfRecord.dbd index 6cdbc73c4..c0f4095dd 100644 --- a/modules/database/src/std/rec/printfRecord.dbd +++ b/modules/database/src/std/rec/printfRecord.dbd @@ -15,6 +15,7 @@ recordtype(printf) { % dset common; % long (*write_string)(struct printfRecord *prec); %} printfdset; + %#define HAS_printfdset % field(VAL,DBF_NOACCESS) { prompt("Result") From 6eaef183475c786df88ac544b923d8cbe07a450d Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Thu, 28 Nov 2019 00:56:00 -0600 Subject: [PATCH 07/16] Remove duplicated include line --- modules/database/src/std/rec/int64inRecord.dbd.pod | 1 - modules/database/src/std/rec/int64outRecord.dbd.pod | 1 - modules/database/src/std/rec/lsiRecord.dbd | 1 - modules/database/src/std/rec/lsoRecord.dbd | 1 - modules/database/src/std/rec/printfRecord.dbd | 1 - 5 files changed, 5 deletions(-) diff --git a/modules/database/src/std/rec/int64inRecord.dbd.pod b/modules/database/src/std/rec/int64inRecord.dbd.pod index c690c8105..01dc2899a 100644 --- a/modules/database/src/std/rec/int64inRecord.dbd.pod +++ b/modules/database/src/std/rec/int64inRecord.dbd.pod @@ -111,7 +111,6 @@ monitoring deadband functionality. =cut include "dbCommon.dbd" - %#include "devSup.h" % %/* Declare Device Support Entry Table */ %struct int64inRecord; diff --git a/modules/database/src/std/rec/int64outRecord.dbd.pod b/modules/database/src/std/rec/int64outRecord.dbd.pod index 00fe822bb..78244fb42 100644 --- a/modules/database/src/std/rec/int64outRecord.dbd.pod +++ b/modules/database/src/std/rec/int64outRecord.dbd.pod @@ -137,7 +137,6 @@ monitoring deadband functionality. =cut include "dbCommon.dbd" - %#include "devSup.h" % %/* Declare Device Support Entry Table */ %struct int64outRecord; diff --git a/modules/database/src/std/rec/lsiRecord.dbd b/modules/database/src/std/rec/lsiRecord.dbd index a3ce1deee..4bc30809f 100644 --- a/modules/database/src/std/rec/lsiRecord.dbd +++ b/modules/database/src/std/rec/lsiRecord.dbd @@ -7,7 +7,6 @@ recordtype(lsi) { include "dbCommon.dbd" - %#include "devSup.h" % %/* Declare Device Support Entry Table */ %struct lsiRecord; diff --git a/modules/database/src/std/rec/lsoRecord.dbd b/modules/database/src/std/rec/lsoRecord.dbd index 2011bb66d..345885e2e 100644 --- a/modules/database/src/std/rec/lsoRecord.dbd +++ b/modules/database/src/std/rec/lsoRecord.dbd @@ -7,7 +7,6 @@ recordtype(lso) { include "dbCommon.dbd" - %#include "devSup.h" % %/* Declare Device Support Entry Table */ %struct lsoRecord; diff --git a/modules/database/src/std/rec/printfRecord.dbd b/modules/database/src/std/rec/printfRecord.dbd index c0f4095dd..b13608f8c 100644 --- a/modules/database/src/std/rec/printfRecord.dbd +++ b/modules/database/src/std/rec/printfRecord.dbd @@ -7,7 +7,6 @@ recordtype(printf) { include "dbCommon.dbd" - %#include "devSup.h" % %/* Declare Device Support Entry Table */ %struct printfRecord; From 5407a25775a5f400203c4d979c9f313ebfbee60b Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Sat, 30 Nov 2019 00:17:23 -0600 Subject: [PATCH 08/16] Export and use aidset, set USE_TYPED_DSET I did ai so I can use it as an example in the Release Notes. --- modules/database/src/std/dev/Makefile | 7 +++++- modules/database/src/std/dev/devAiSoft.c | 25 ++++++------------- .../database/src/std/dev/devAiSoftCallback.c | 14 ++++------- modules/database/src/std/dev/devAiSoftRaw.c | 25 ++++++------------- modules/database/src/std/dev/devGeneralTime.c | 21 ++++++++-------- modules/database/src/std/dev/devTimestamp.c | 12 ++++----- modules/database/src/std/rec/Makefile | 1 + modules/database/src/std/rec/aiRecord.c | 19 +++----------- modules/database/src/std/rec/aiRecord.dbd.pod | 10 ++++++++ 9 files changed, 56 insertions(+), 78 deletions(-) diff --git a/modules/database/src/std/dev/Makefile b/modules/database/src/std/dev/Makefile index 40f68b8f1..bd1add3ee 100644 --- a/modules/database/src/std/dev/Makefile +++ b/modules/database/src/std/dev/Makefile @@ -15,7 +15,9 @@ DBD += devSoft.dbd dbRecStd_SRCS += devAaiSoft.c dbRecStd_SRCS += devAaoSoft.c +devAiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAiSoft.c +devAiSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAiSoftRaw.c dbRecStd_SRCS += devAoSoft.c dbRecStd_SRCS += devAoSoftRaw.c @@ -52,8 +54,8 @@ dbRecStd_SRCS += devSASoft.c dbRecStd_SRCS += devSiSoft.c dbRecStd_SRCS += devSoSoft.c dbRecStd_SRCS += devWfSoft.c -dbRecStd_SRCS += devGeneralTime.c +devAiSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAiSoftCallback.c dbRecStd_SRCS += devBiSoftCallback.c devI64inSoftCallback_CFLAGS += -DUSE_TYPED_DSET @@ -77,6 +79,9 @@ devPrintfSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devPrintfSoftCallback.c dbRecStd_SRCS += devSoSoftCallback.c +devGeneralTime_CFLAGS += -DUSE_TYPED_DSET +dbRecStd_SRCS += devGeneralTime.c +devTimestamp_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devTimestamp.c devStdio_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devStdio.c 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/devGeneralTime.c b/modules/database/src/std/dev/devGeneralTime.c index 1b821d582..c424fb772 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) { @@ -173,8 +172,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) { @@ -243,8 +243,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) { diff --git a/modules/database/src/std/dev/devTimestamp.c b/modules/database/src/std/dev/devTimestamp.c index 936d7767d..bcab26629 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); @@ -72,6 +69,7 @@ struct { dset common; DEVSUPFUN read_stringin; } devTimestampSI = { - {5, NULL, initAllow, NULL, NULL}, read_stringin + {5, NULL, initAllow, NULL, NULL}, + read_stringin }; epicsExportAddress(dset, devTimestampSI); diff --git a/modules/database/src/std/rec/Makefile b/modules/database/src/std/rec/Makefile index 2d1cfe67b..e6277fb49 100644 --- a/modules/database/src/std/rec/Makefile +++ b/modules/database/src/std/rec/Makefile @@ -13,6 +13,7 @@ SRC_DIRS += $(STDDIR)/rec stdRecords += aaiRecord stdRecords += aaoRecord +aiRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += aiRecord stdRecords += aoRecord stdRecords += aSubRecord 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 3b53b7a24..440d16c0c 100644 --- a/modules/database/src/std/rec/aiRecord.dbd.pod +++ b/modules/database/src/std/rec/aiRecord.dbd.pod @@ -215,6 +215,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") From 4c99a94453007015a9ef0eb319dc2c10dcce60a8 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Sat, 30 Nov 2019 01:01:33 -0600 Subject: [PATCH 09/16] Add Release Notes entry about dsets --- documentation/RELEASE_NOTES.md | 100 +++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/documentation/RELEASE_NOTES.md b/documentation/RELEASE_NOTES.md index 2adeacf24..ec5549878 100644 --- a/documentation/RELEASE_NOTES.md +++ b/documentation/RELEASE_NOTES.md @@ -12,6 +12,106 @@ The external PVA submodules each have their own separate set of release notes which should also be read to understand what has changed since an earlier release. +## EPICS Release 7.0.3.2 + + + + +### Record types publish their dset's + +The record types in Base are starting to define the device support entry table +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 definitions instead of the traditional approach of copying the +structure definitions into each source file that needs them. It will still be +possible for converted code to build and work with older Base releases. + +This might 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)(struct aiRecord *prec); + long (*special_linconv)(struct 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 +causing a compile error, so this pattern should be used instead: + +```C +#ifndef HAS_lsidset +struct { + dset common; + long (*read_string)(struct 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 From 55ec813908f7027322c30482c83d57cb9041cd35 Mon Sep 17 00:00:00 2001 From: gabadinho Date: Wed, 12 Feb 2020 15:32:13 +0100 Subject: [PATCH 10/16] initial typed-dset changes for ao record --- modules/database/src/std/rec/Makefile | 1 + modules/database/src/std/rec/aoRecord.c | 12 ------------ modules/database/src/std/rec/aoRecord.dbd.pod | 9 +++++++++ 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/modules/database/src/std/rec/Makefile b/modules/database/src/std/rec/Makefile index e6277fb49..e289bc387 100644 --- a/modules/database/src/std/rec/Makefile +++ b/modules/database/src/std/rec/Makefile @@ -14,6 +14,7 @@ SRC_DIRS += $(STDDIR)/rec stdRecords += aaiRecord stdRecords += aaoRecord aiRecord_CFLAGS += -DUSE_TYPED_DSET +aoRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += aiRecord stdRecords += aoRecord stdRecords += aSubRecord diff --git a/modules/database/src/std/rec/aoRecord.c b/modules/database/src/std/rec/aoRecord.c index 6fa65859b..94ad11fd2 100644 --- a/modules/database/src/std/rec/aoRecord.c +++ b/modules/database/src/std/rec/aoRecord.c @@ -83,18 +83,6 @@ rset aoRSET={ 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; -}; -epicsExportAddress(rset,aoRSET); - - static void checkAlarms(aoRecord *); static long fetch_value(aoRecord *, double *); static void convert(aoRecord *, double); diff --git a/modules/database/src/std/rec/aoRecord.dbd.pod b/modules/database/src/std/rec/aoRecord.dbd.pod index c54cb2c4f..026805ee7 100644 --- a/modules/database/src/std/rec/aoRecord.dbd.pod +++ b/modules/database/src/std/rec/aoRecord.dbd.pod @@ -269,6 +269,15 @@ information on these fields. =cut include "dbCommon.dbd" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; + % long (*write_ao)(struct aoRecord *prec); + %} aodset; + %#define HAS_aodset + % field(VAL,DBF_DOUBLE) { prompt("Desired Output") promptgroup("50 - Output") From 754eb733345a2d9b0982f37b213a5afe9f7c7907 Mon Sep 17 00:00:00 2001 From: gabadinho Date: Thu, 13 Feb 2020 17:40:22 +0100 Subject: [PATCH 11/16] - Record updates: . aoRecord . biRecord . boRecord . mbbiRecord . mbbiDirectRecord . mbboRecord . mbboDirectRecord . longinRecord . longoutRecord . stringoutRecord . stringinRecord . waveformRecord . calcoutRecord . subArrayRecord - Device support updates: . devAoSoft, devAoSoftCallback, devAoSoftRaw (aoRecord) . devBiSoft, devBiSoftCallback, devBiSoftRaw, devBiDbState (biRecord) . devBoSoft, devBoSoftCallback, devBoSoftRaw, devBoDbState, devGeneralTime (boRecord) . devMbbiSoft, devMbbiSoftCallback, devMbbiSoftRaw (mbbiRecord) . devMbboSoft, devMbboSoftCallback, devMbboSoftRaw (mbboRecord) . devMbbiDirectSoft, devMbbiDirectSoftCallback, devMbbiDirectSoftRaw (mbbiDirectRecord) . devMbboDirectSoft, devMbboDirectSoftCallback, devMbboDirectSoftRaw (mbboDirectRecord) . devGeneralTime, devLiSoft, devLiSoftCallback (longinRecord) . devLoSoft, devLoSoftCallback (longoutRecord) . devSoSoft, devSoSoftCallback, devStdio (stringoutRecord) . devSiSoft, devSiSoftCallback, devEnviron, devGeneralTime, devTimestamp (stringinRecord) . devWfSoft (waveformRecord) . devCalcoutSoft, devCalcoutSoftCallback (recordCalcout) . devSASoft (subArrayRecord) --- modules/database/src/std/dev/Makefile | 33 +++++++++++++++++++ modules/database/src/std/dev/devAoSoft.c | 30 +++++------------ .../database/src/std/dev/devAoSoftCallback.c | 23 ++++--------- modules/database/src/std/dev/devAoSoftRaw.c | 24 ++++---------- modules/database/src/std/dev/devBiDbState.c | 19 +++-------- modules/database/src/std/dev/devBiSoft.c | 21 ++++-------- .../database/src/std/dev/devBiSoftCallback.c | 9 +++-- modules/database/src/std/dev/devBiSoftRaw.c | 21 ++++-------- modules/database/src/std/dev/devBoDbState.c | 19 +++-------- modules/database/src/std/dev/devBoSoft.c | 28 +++++----------- .../database/src/std/dev/devBoSoftCallback.c | 20 +++-------- modules/database/src/std/dev/devBoSoftRaw.c | 27 ++++----------- modules/database/src/std/dev/devCalcoutSoft.c | 12 ++----- .../src/std/dev/devCalcoutSoftCallback.c | 12 ++----- modules/database/src/std/dev/devEnviron.c | 8 ++--- modules/database/src/std/dev/devGeneralTime.c | 25 ++++++-------- modules/database/src/std/dev/devLiSoft.c | 21 ++++-------- .../database/src/std/dev/devLiSoftCallback.c | 9 +++-- modules/database/src/std/dev/devLoSoft.c | 26 +++++---------- .../database/src/std/dev/devLoSoftCallback.c | 21 +++--------- .../database/src/std/dev/devMbbiDirectSoft.c | 21 ++++-------- .../src/std/dev/devMbbiDirectSoftCallback.c | 9 +++-- .../src/std/dev/devMbbiDirectSoftRaw.c | 21 ++++-------- modules/database/src/std/dev/devMbbiSoft.c | 21 ++++-------- .../src/std/dev/devMbbiSoftCallback.c | 11 +++---- modules/database/src/std/dev/devMbbiSoftRaw.c | 21 ++++-------- .../database/src/std/dev/devMbboDirectSoft.c | 5 +-- .../src/std/dev/devMbboDirectSoftCallback.c | 7 ++-- .../src/std/dev/devMbboDirectSoftRaw.c | 9 +++-- modules/database/src/std/dev/devMbboSoft.c | 26 +++++---------- .../src/std/dev/devMbboSoftCallback.c | 20 +++-------- modules/database/src/std/dev/devMbboSoftRaw.c | 9 +++-- modules/database/src/std/dev/devSASoft.c | 20 +++-------- modules/database/src/std/dev/devSiSoft.c | 21 ++++-------- .../database/src/std/dev/devSiSoftCallback.c | 11 +++---- modules/database/src/std/dev/devSoSoft.c | 16 ++------- .../database/src/std/dev/devSoSoftCallback.c | 17 ++-------- modules/database/src/std/dev/devStdio.c | 8 ++--- modules/database/src/std/dev/devTimestamp.c | 5 +-- modules/database/src/std/dev/devWfSoft.c | 20 +++-------- modules/database/src/std/rec/Makefile | 12 +++++++ modules/database/src/std/rec/aoRecord.c | 22 +++++++------ modules/database/src/std/rec/aoRecord.dbd.pod | 5 +-- modules/database/src/std/rec/biRecord.c | 25 +++++--------- modules/database/src/std/rec/biRecord.dbd.pod | 9 +++++ modules/database/src/std/rec/boRecord.c | 22 ++++--------- modules/database/src/std/rec/boRecord.dbd.pod | 9 +++++ modules/database/src/std/rec/calcoutRecord.c | 20 +++-------- .../src/std/rec/calcoutRecord.dbd.pod | 8 +++++ modules/database/src/std/rec/longinRecord.c | 21 ++++-------- .../database/src/std/rec/longinRecord.dbd.pod | 9 +++++ modules/database/src/std/rec/longoutRecord.c | 21 ++++-------- .../src/std/rec/longoutRecord.dbd.pod | 9 +++++ .../database/src/std/rec/mbbiDirectRecord.c | 21 ++++-------- .../src/std/rec/mbbiDirectRecord.dbd.pod | 8 +++++ modules/database/src/std/rec/mbbiRecord.c | 22 ++++--------- .../database/src/std/rec/mbbiRecord.dbd.pod | 8 +++++ .../database/src/std/rec/mbboDirectRecord.c | 22 ++++--------- .../src/std/rec/mbboDirectRecord.dbd.pod | 8 +++++ modules/database/src/std/rec/mbboRecord.c | 23 ++++--------- .../database/src/std/rec/mbboRecord.dbd.pod | 8 +++++ modules/database/src/std/rec/stringinRecord.c | 20 ++++------- .../src/std/rec/stringinRecord.dbd.pod | 9 +++++ .../database/src/std/rec/stringoutRecord.c | 20 ++++------- .../src/std/rec/stringoutRecord.dbd.pod | 9 +++++ modules/database/src/std/rec/subArrayRecord.c | 23 ++++--------- .../src/std/rec/subArrayRecord.dbd.pod | 9 +++++ modules/database/src/std/rec/waveformRecord.c | 22 ++++--------- .../src/std/rec/waveformRecord.dbd.pod | 9 +++++ 69 files changed, 448 insertions(+), 691 deletions(-) diff --git a/modules/database/src/std/dev/Makefile b/modules/database/src/std/dev/Makefile index bd1add3ee..d78f363b8 100644 --- a/modules/database/src/std/dev/Makefile +++ b/modules/database/src/std/dev/Makefile @@ -19,14 +19,21 @@ devAiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAiSoft.c devAiSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAiSoftRaw.c +devAoSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAoSoft.c +devAoSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAoSoftRaw.c +devBiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devBiSoft.c dbRecStd_SRCS += devBiSoftRaw.c +devBiDbState_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devBiDbState.c +devBoSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devBoSoft.c +devBoSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devBoSoftRaw.c dbRecStd_SRCS += devBoDbState.c +devCalcoutSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devCalcoutSoft.c dbRecStd_SRCS += devEventSoft.c dbRecStd_SRCS += devHistogramSoft.c @@ -34,49 +41,75 @@ devI64inSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devI64inSoft.c devI64outSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devI64outSoft.c +devLiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLiSoft.c +devLoSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLoSoft.c devLsiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLsiSoft.c devLsoSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLsoSoft.c +devMbbiDirectSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbbiDirectSoft.c +devMbbiDirectSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbbiDirectSoftRaw.c +devMbbiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbbiSoft.c +devMbbiSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbbiSoftRaw.c +devMbboDirectSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbboDirectSoft.c +devMbboDirectSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbboDirectSoftRaw.c +devMbboSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbboSoft.c +devMbboSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbboSoftRaw.c devPrintfSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devPrintfSoft.c +devSASoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devSASoft.c +devSiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devSiSoft.c +devSoSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devSoSoft.c +devWfSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devWfSoft.c devAiSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAiSoftCallback.c +devBiSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devBiSoftCallback.c devI64inSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devI64inSoftCallback.c +devLiSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLiSoftCallback.c +devMbbiDirectSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbbiDirectSoftCallback.c +devMbbiCallbackSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbbiSoftCallback.c +devSiSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devSiSoftCallback.c +devAoSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAoSoftCallback.c +devBoSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devBoSoftCallback.c +devCalcoutSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devCalcoutSoftCallback.c devI64outSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devI64outSoftCallback.c +devLoSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLoSoftCallback.c devLsoSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLsoSoftCallback.c +devMbboSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbboSoftCallback.c +devMbboDirectSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbboDirectSoftCallback.c devPrintfSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devPrintfSoftCallback.c +devSoSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devSoSoftCallback.c devGeneralTime_CFLAGS += -DUSE_TYPED_DSET 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..80ca61b81 100644 --- a/modules/database/src/std/dev/devBoSoft.c +++ b/modules/database/src/std/dev/devBoSoft.c @@ -29,31 +29,19 @@ #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) { - + boRecord *prec = (boRecord *)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 69c9a3d92..8e4bd7937 100644 --- a/modules/database/src/std/dev/devEnviron.c +++ b/modules/database/src/std/dev/devEnviron.c @@ -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/devGeneralTime.c b/modules/database/src/std/dev/devGeneralTime.c index c424fb772..f03275165 100644 --- a/modules/database/src/std/dev/devGeneralTime.c +++ b/modules/database/src/std/dev/devGeneralTime.c @@ -150,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) { @@ -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); @@ -289,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/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/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/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 928c8a420..d8646d95a 100644 --- a/modules/database/src/std/dev/devStdio.c +++ b/modules/database/src/std/dev/devStdio.c @@ -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 bcab26629..06f694eac 100644 --- a/modules/database/src/std/dev/devTimestamp.c +++ b/modules/database/src/std/dev/devTimestamp.c @@ -65,10 +65,7 @@ static long read_stringin (stringinRecord *prec) return 0; } -struct { - dset common; - DEVSUPFUN read_stringin; -} devTimestampSI = { +stringindset devTimestampSI = { {5, NULL, initAllow, NULL, NULL}, read_stringin }; 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/Makefile b/modules/database/src/std/rec/Makefile index e289bc387..8c37732e2 100644 --- a/modules/database/src/std/rec/Makefile +++ b/modules/database/src/std/rec/Makefile @@ -18,9 +18,12 @@ aoRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += aiRecord stdRecords += aoRecord stdRecords += aSubRecord +biRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += biRecord +boRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += boRecord stdRecords += calcRecord +calcoutRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += calcoutRecord stdRecords += compressRecord stdRecords += dfanoutRecord @@ -31,15 +34,21 @@ int64inRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += int64inRecord int64outRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += int64outRecord +longinRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += longinRecord +longoutRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += longoutRecord lsiRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += lsiRecord lsoRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += lsoRecord +mbbiRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += mbbiRecord +mbbiDirectRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += mbbiDirectRecord +mbboRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += mbboRecord +mbboDirectRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += mbboDirectRecord stdRecords += permissiveRecord printfRecord_CFLAGS += -DUSE_TYPED_DSET @@ -48,9 +57,12 @@ stdRecords += selRecord stdRecords += seqRecord stdRecords += stateRecord stdRecords += stringinRecord +stringoutRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += stringoutRecord stdRecords += subRecord +subArrayRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += subArrayRecord +waveformRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += waveformRecord DBDINC += $(stdRecords) diff --git a/modules/database/src/std/rec/aoRecord.c b/modules/database/src/std/rec/aoRecord.c index 94ad11fd2..3f9a84e89 100644 --- a/modules/database/src/std/rec/aoRecord.c +++ b/modules/database/src/std/rec/aoRecord.c @@ -81,7 +81,9 @@ rset aoRSET={ put_enum_str, get_graphic_double, get_control_double, - get_alarm_double }; + get_alarm_double +}; +epicsExportAddress(rset,aoRSET); static void checkAlarms(aoRecord *); static long fetch_value(aoRecord *, double *); @@ -92,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; @@ -101,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); } @@ -110,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); } @@ -120,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; @@ -162,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; @@ -233,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); } @@ -543,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 026805ee7..672329e74 100644 --- a/modules/database/src/std/rec/aoRecord.dbd.pod +++ b/modules/database/src/std/rec/aoRecord.dbd.pod @@ -273,8 +273,9 @@ information on these fields. %/* Declare Device Support Entry Table */ %struct aoRecord; %typedef struct aodset { - % dset common; - % long (*write_ao)(struct aoRecord *prec); + % 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 % 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/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 176f1d25f..ef329f5ae 100644 --- a/modules/database/src/std/rec/calcoutRecord.dbd.pod +++ b/modules/database/src/std/rec/calcoutRecord.dbd.pod @@ -659,6 +659,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/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/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/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 17e0c101b..c633b314e 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 0d63d5f61..1c843edf0 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 c47f2d003..fa4a41066 100644 --- a/modules/database/src/std/rec/subArrayRecord.dbd.pod +++ b/modules/database/src/std/rec/subArrayRecord.dbd.pod @@ -315,6 +315,15 @@ INP is expected to point to a waveform record. =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 ce488ef0f..06f38b620 100644 --- a/modules/database/src/std/rec/waveformRecord.dbd.pod +++ b/modules/database/src/std/rec/waveformRecord.dbd.pod @@ -397,6 +397,15 @@ NORD is set to the number of values returned and read_wf returns. =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) From c54237e34a0c2b01b26a2d163c3786ffa6fc9de3 Mon Sep 17 00:00:00 2001 From: gabadinho Date: Fri, 14 Feb 2020 11:07:11 +0100 Subject: [PATCH 12/16] - Record updates: . histogramRecord . eventRecord . aaiRecord . aaoRecord - Device support updates: . devHistogramSoft (histogramRecord) . devEventSoft (eventRecord) . devAaiSoft (aaiRecord) . devAaoSoft (aaoRecord) - Fixes in already-migrated records . lsiRecord: replaced 'struct lsidset' with typedef(ed) 'lsidset' . int64inRecord (similar as above) . int64outRecord (similar as above) . calcRecord: minor fix in init_record() prototype declaration - Note: the comments about return values in dset structs were outright copied from .c to .pod/.dbd files without confirmation if they are indeed correct! --- modules/database/src/std/dev/Makefile | 4 +++ modules/database/src/std/dev/devAaiSoft.c | 24 +++++---------- modules/database/src/std/dev/devAaoSoft.c | 25 +++++----------- modules/database/src/std/dev/devEventSoft.c | 21 ++++--------- .../database/src/std/dev/devHistogramSoft.c | 30 +++++++------------ modules/database/src/std/rec/Makefile | 6 +++- modules/database/src/std/rec/aaiRecord.c | 21 ++++--------- modules/database/src/std/rec/aaiRecord.dbd | 9 ++++++ modules/database/src/std/rec/aaoRecord.c | 21 ++++--------- modules/database/src/std/rec/aaoRecord.dbd | 9 ++++++ modules/database/src/std/rec/calcRecord.c | 2 +- modules/database/src/std/rec/eventRecord.c | 20 ++++--------- .../database/src/std/rec/eventRecord.dbd.pod | 10 +++++++ .../database/src/std/rec/histogramRecord.c | 25 +++++----------- .../database/src/std/rec/histogramRecord.dbd | 10 +++++++ modules/database/src/std/rec/int64inRecord.c | 8 ++--- modules/database/src/std/rec/int64outRecord.c | 8 ++--- modules/database/src/std/rec/lsiRecord.c | 2 +- 18 files changed, 113 insertions(+), 142 deletions(-) diff --git a/modules/database/src/std/dev/Makefile b/modules/database/src/std/dev/Makefile index d78f363b8..b582f0b47 100644 --- a/modules/database/src/std/dev/Makefile +++ b/modules/database/src/std/dev/Makefile @@ -13,7 +13,9 @@ SRC_DIRS += $(STDDIR)/dev DBD += devSoft.dbd +devAaiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAaiSoft.c +devAaoSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAaoSoft.c devAiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAiSoft.c @@ -35,7 +37,9 @@ dbRecStd_SRCS += devBoSoftRaw.c dbRecStd_SRCS += devBoDbState.c devCalcoutSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devCalcoutSoft.c +devEventSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devEventSoft.c +devHistogramSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devHistogramSoft.c devI64inSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devI64inSoft.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/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/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/rec/Makefile b/modules/database/src/std/rec/Makefile index 8c37732e2..51f54dbdf 100644 --- a/modules/database/src/std/rec/Makefile +++ b/modules/database/src/std/rec/Makefile @@ -11,11 +11,13 @@ SRC_DIRS += $(STDDIR)/rec +aaiRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += aaiRecord +aaoRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += aaoRecord aiRecord_CFLAGS += -DUSE_TYPED_DSET -aoRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += aiRecord +aoRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += aoRecord stdRecords += aSubRecord biRecord_CFLAGS += -DUSE_TYPED_DSET @@ -27,8 +29,10 @@ calcoutRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += calcoutRecord stdRecords += compressRecord stdRecords += dfanoutRecord +eventRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += eventRecord stdRecords += fanoutRecord +histogramRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += histogramRecord int64inRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += int64inRecord 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 b/modules/database/src/std/rec/aaiRecord.dbd index b4675b302..bc29209ca 100644 --- a/modules/database/src/std/rec/aaiRecord.dbd +++ b/modules/database/src/std/rec/aaiRecord.dbd @@ -12,6 +12,15 @@ menu(aaiPOST) { } recordtype(aai) { 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 b/modules/database/src/std/rec/aaoRecord.dbd index 20e957ff4..aebb769e0 100644 --- a/modules/database/src/std/rec/aaoRecord.dbd +++ b/modules/database/src/std/rec/aaoRecord.dbd @@ -12,6 +12,15 @@ menu(aaoPOST) { } recordtype(aao) { 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/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/eventRecord.c b/modules/database/src/std/rec/eventRecord.c index c10c90240..0d03cf3e9 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 82fc91a68..1a426363d 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; @@ -165,7 +154,7 @@ static long 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 */ @@ -186,21 +175,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; @@ -211,7 +200,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; @@ -380,7 +369,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 b/modules/database/src/std/rec/histogramRecord.dbd index 304038bf1..e615d295e 100644 --- a/modules/database/src/std/rec/histogramRecord.dbd +++ b/modules/database/src/std/rec/histogramRecord.dbd @@ -14,6 +14,16 @@ menu(histogramCMD) { } recordtype(histogram) { 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 b802f125c..cb4d85340 100644 --- a/modules/database/src/std/rec/int64inRecord.c +++ b/modules/database/src/std/rec/int64inRecord.c @@ -91,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; @@ -100,7 +100,7 @@ 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); } @@ -121,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; @@ -389,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/int64outRecord.c b/modules/database/src/std/rec/int64outRecord.c index cbacb2739..c90518e1d 100644 --- a/modules/database/src/std/rec/int64outRecord.c +++ b/modules/database/src/std/rec/int64outRecord.c @@ -89,14 +89,14 @@ 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); } @@ -121,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; @@ -369,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/lsiRecord.c b/modules/database/src/std/rec/lsiRecord.c index 96e870b0e..6d5b9db4a 100644 --- a/modules/database/src/std/rec/lsiRecord.c +++ b/modules/database/src/std/rec/lsiRecord.c @@ -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) { From 8b9c3139414d412e5534bd0ebf014124d0248aca Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Fri, 6 Mar 2020 22:36:02 -0600 Subject: [PATCH 13/16] Update the wording of the Release Notes entry --- documentation/RELEASE_NOTES.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/documentation/RELEASE_NOTES.md b/documentation/RELEASE_NOTES.md index ec5549878..f13a8c37f 100644 --- a/documentation/RELEASE_NOTES.md +++ b/documentation/RELEASE_NOTES.md @@ -17,16 +17,17 @@ release. -### Record types publish their dset's +### Record types publish dset's -The record types in Base are starting to define the device support entry table +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 definitions instead of the traditional approach of copying the -structure definitions into each source file that needs them. It will still be -possible for converted code to build and work with older Base releases. +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 might also be a good time to modify the device support to use the type-safe +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. @@ -75,8 +76,8 @@ it's provided in the header: #ifndef HAS_aidset typedef struct aidset { dset common; - long (*read_ai)(struct aiRecord *prec); - long (*special_linconv)(struct aiRecord *prec, int after); + long (*read_ai)(aiRecord *prec); + long (*special_linconv)(aiRecord *prec, int after); } aidset; #endif aidset devAiSoft = { @@ -93,14 +94,14 @@ 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 -causing a compile error, so this pattern should be used instead: +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)(struct lsiRecord *prec); + long (*read_string)(lsiRecord *prec); } #else lsidset From 23cac3c1a8c5abe15ddf7ff5e77669fcd969e649 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Fri, 6 Mar 2020 22:49:58 -0600 Subject: [PATCH 14/16] Set USE_TYPED_DSET centrally now everything uses it --- modules/database/src/std/Makefile | 2 +- modules/database/src/std/dev/Makefile | 53 ------------------------ modules/database/src/std/dev/devBoSoft.c | 1 - modules/database/src/std/rec/Makefile | 23 ---------- 4 files changed, 1 insertion(+), 78 deletions(-) diff --git a/modules/database/src/std/Makefile b/modules/database/src/std/Makefile index d8eb39bdb..3aee75078 100644 --- a/modules/database/src/std/Makefile +++ b/modules/database/src/std/Makefile @@ -11,7 +11,7 @@ TOP = ../../../.. include $(TOP)/configure/CONFIG -USR_CPPFLAGS += -DUSE_TYPED_RSET +USR_CPPFLAGS += -DUSE_TYPED_RSET -DUSE_TYPED_DSET SHRLIB_VERSION = 3.17.0 diff --git a/modules/database/src/std/dev/Makefile b/modules/database/src/std/dev/Makefile index b582f0b47..1412f217c 100644 --- a/modules/database/src/std/dev/Makefile +++ b/modules/database/src/std/dev/Makefile @@ -13,116 +13,63 @@ SRC_DIRS += $(STDDIR)/dev DBD += devSoft.dbd -devAaiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAaiSoft.c -devAaoSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAaoSoft.c -devAiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAiSoft.c -devAiSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAiSoftRaw.c -devAoSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAoSoft.c -devAoSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAoSoftRaw.c -devBiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devBiSoft.c dbRecStd_SRCS += devBiSoftRaw.c -devBiDbState_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devBiDbState.c -devBoSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devBoSoft.c -devBoSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devBoSoftRaw.c dbRecStd_SRCS += devBoDbState.c -devCalcoutSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devCalcoutSoft.c -devEventSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devEventSoft.c -devHistogramSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devHistogramSoft.c -devI64inSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devI64inSoft.c -devI64outSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devI64outSoft.c -devLiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLiSoft.c -devLoSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLoSoft.c -devLsiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLsiSoft.c -devLsoSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLsoSoft.c -devMbbiDirectSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbbiDirectSoft.c -devMbbiDirectSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbbiDirectSoftRaw.c -devMbbiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbbiSoft.c -devMbbiSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbbiSoftRaw.c -devMbboDirectSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbboDirectSoft.c -devMbboDirectSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbboDirectSoftRaw.c -devMbboSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbboSoft.c -devMbboSoftRaw_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbboSoftRaw.c -devPrintfSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devPrintfSoft.c -devSASoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devSASoft.c -devSiSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devSiSoft.c -devSoSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devSoSoft.c -devWfSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devWfSoft.c -devAiSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAiSoftCallback.c -devBiSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devBiSoftCallback.c -devI64inSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devI64inSoftCallback.c -devLiSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLiSoftCallback.c -devMbbiDirectSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbbiDirectSoftCallback.c -devMbbiCallbackSoft_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbbiSoftCallback.c -devSiSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devSiSoftCallback.c -devAoSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devAoSoftCallback.c -devBoSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devBoSoftCallback.c -devCalcoutSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devCalcoutSoftCallback.c -devI64outSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devI64outSoftCallback.c -devLoSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLoSoftCallback.c -devLsoSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devLsoSoftCallback.c -devMbboSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbboSoftCallback.c -devMbboDirectSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devMbboDirectSoftCallback.c -devPrintfSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devPrintfSoftCallback.c -devSoSoftCallback_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devSoSoftCallback.c -devGeneralTime_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devGeneralTime.c -devTimestamp_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devTimestamp.c -devStdio_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devStdio.c -devEnviron_CFLAGS += -DUSE_TYPED_DSET dbRecStd_SRCS += devEnviron.c dbRecStd_SRCS += asSubRecordFunctions.c diff --git a/modules/database/src/std/dev/devBoSoft.c b/modules/database/src/std/dev/devBoSoft.c index 80ca61b81..b86454252 100644 --- a/modules/database/src/std/dev/devBoSoft.c +++ b/modules/database/src/std/dev/devBoSoft.c @@ -41,7 +41,6 @@ epicsExportAddress(dset, devBoSoft); static long init_record(dbCommon *pcommon) { - boRecord *prec = (boRecord *)pcommon; long status=0; /* dont convert */ diff --git a/modules/database/src/std/rec/Makefile b/modules/database/src/std/rec/Makefile index 51f54dbdf..87021987e 100644 --- a/modules/database/src/std/rec/Makefile +++ b/modules/database/src/std/rec/Makefile @@ -11,62 +11,39 @@ SRC_DIRS += $(STDDIR)/rec -aaiRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += aaiRecord -aaoRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += aaoRecord -aiRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += aiRecord -aoRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += aoRecord stdRecords += aSubRecord -biRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += biRecord -boRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += boRecord stdRecords += calcRecord -calcoutRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += calcoutRecord stdRecords += compressRecord stdRecords += dfanoutRecord -eventRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += eventRecord stdRecords += fanoutRecord -histogramRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += histogramRecord -int64inRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += int64inRecord -int64outRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += int64outRecord -longinRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += longinRecord -longoutRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += longoutRecord -lsiRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += lsiRecord -lsoRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += lsoRecord -mbbiRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += mbbiRecord -mbbiDirectRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += mbbiDirectRecord -mbboRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += mbboRecord -mbboDirectRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += mbboDirectRecord stdRecords += permissiveRecord -printfRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += printfRecord stdRecords += selRecord stdRecords += seqRecord stdRecords += stateRecord stdRecords += stringinRecord -stringoutRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += stringoutRecord stdRecords += subRecord -subArrayRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += subArrayRecord -waveformRecord_CFLAGS += -DUSE_TYPED_DSET stdRecords += waveformRecord DBDINC += $(stdRecords) From 048689d6dbfae9564e2e1eb103c368e640c6b356 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Fri, 6 Mar 2020 23:20:55 -0600 Subject: [PATCH 15/16] Adjust example code in devSup.h --- modules/database/src/ioc/dbStatic/devSup.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) 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, From e13b01208ba86f5e5c8f446e5fc287118e822f9a Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Fri, 6 Mar 2020 23:28:57 -0600 Subject: [PATCH 16/16] Bump database version to 3.18.0, use in SHRLIB_VERSION --- configure/CONFIG_DATABASE_VERSION | 4 ++-- modules/database/src/ioc/Makefile | 5 +++-- modules/database/src/std/Makefile | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) 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/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/std/Makefile b/modules/database/src/std/Makefile index 3aee75078..d323bc077 100644 --- a/modules/database/src/std/Makefile +++ b/modules/database/src/std/Makefile @@ -13,7 +13,8 @@ include $(TOP)/configure/CONFIG 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