Merge remote-tracking branch 'lp-anj7/typed-dsets' into 7.0

* lp-anj7/typed-dsets:
  Bump database version to 3.18.0, use in SHRLIB_VERSION
  Adjust example code in devSup.h
  Set USE_TYPED_DSET centrally now everything uses it
  Update the wording of the Release Notes entry
  - Record updates:   . histogramRecord   . eventRecord   . aaiRecord   . aaoRecord
  - Record updates:   . aoRecord   . biRecord   . boRecord   . mbbiRecord   . mbbiDirectRecord   . mbboRecord   . mbboDirectRecord   . longinRecord   . longoutRecord   . stringoutRecord   . stringinRecord   . waveformRecord   . calcoutRecord   . subArrayRecord
  initial typed-dset changes for ao record
  Add Release Notes entry about dsets
  Export and use aidset, set USE_TYPED_DSET
  Remove duplicated include line
  Add HAS_<record>dset macros to allow detection
  Export and use int64outdset, set USE_TYPED_DSET
  Export and use int64indset, set USE_TYPED_DSET
  Modify lsodset, set USE_TYPED_DSET
  Modify lsidset, set USE_TYPED_DSET
  Modify printfdset, set USE_TYPED_DSET
This commit is contained in:
Michael Davidsaver
2020-04-30 11:26:08 -07:00
110 changed files with 750 additions and 1060 deletions

View File

@@ -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

View File

@@ -60,6 +60,101 @@ IOCs now emit a warning when a database file containing the `state` record is
loaded. This record has been deprecated for a while and will be removed
beginning with EPICS 7.1. Consider using the `stringin` record instead.
### Record types publish dset's
The record types in Base now define their device support entry table (DSET)
structures in the record header file. While still optional, developers of
external support modules are encouraged to start converting their code to use
the record's new definitions instead of the traditional approach of copying the
structure definitions into each source file that needs them. By following the
instructions below it is still possible for the converted code to build and
work with older Base releases.
This would also be a good time to modify the device support to use the type-safe
device support entry tables that were introduced in Base-3.16.2 -- see
[#type-safe-device-and-driver-support-tables](this entry below) for the
description of that change, which is also optional for now.
Look at the aiRecord for example. Near the top of the generated `aiRecord.h`
header file is a new section that declares the `aidset`:
```C
/* Declare Device Support Entry Table */
struct aiRecord;
typedef struct aidset {
dset common;
long (*read_ai)(struct aiRecord *prec);
long (*special_linconv)(struct aiRecord *prec, int after);
} aidset;
#define HAS_aidset
```
Notice that the common members (`number`, `report()`, `init()`, `init_record()`
and `get_ioint_info()` don't appear directly but are included by embedding the
`dset common` member instead. This avoids the need to have separate definitions
of those members in each record dset, but does require those members to be
wrapped inside another set of braces `{}` when initializing the data structure
for the individual device supports. It also requires changes to code that
references those common members, but that code usually only appears inside the
record type implementation and very rarely in device supports.
An aiRecord device support that will only be built against this or later
versions of EPICS can now declare its dset like this:
```C
aidset devAiSoft = {
{ 6, NULL, NULL, init_record, NULL },
read_ai, NULL
};
epicsExportAddress(dset, devAiSoft);
```
However most device support that is not built into EPICS itself will need to
remain compatible with older EPICS versions, which is why the ai record's header
file also declares the preprocessor macro `HAS_aidset`. This makes it easy to
define the `aidset` in the device support code when it's needed, and not when
it's provided in the header:
```C
#ifndef HAS_aidset
typedef struct aidset {
dset common;
long (*read_ai)(aiRecord *prec);
long (*special_linconv)(aiRecord *prec, int after);
} aidset;
#endif
aidset devAiSoft = {
{ 6, NULL, NULL, init_record, NULL },
read_ai, NULL
};
epicsExportAddress(dset, devAiSoft);
```
The above `typedef struct` declaration was copied directly from the new
aiRecord.h file and wrapped in the `#ifndef HAS_aidset` conditional.
This same pattern should be followed for all record types except for the lsi,
lso and printf record types, which have published their device support entry
table structures since they were first added to Base but didn't previously embed
the `dset common` member. Device support for these record types therefore can't
use the dset name since the new definitions are different from the originals and
will cause a compile error, so this pattern should be used instead:
```C
#ifndef HAS_lsidset
struct {
dset common;
long (*read_string)(lsiRecord *prec);
}
#else
lsidset
#endif
devLsiEtherIP = {
{5, NULL, lsi_init, lsi_init_record, get_ioint_info},
lsi_read
};
```
## EPICS Release 7.0.3.1
**IMPORTANT NOTE:** *Some record types in this release will not be compatible

View File

@@ -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

View File

@@ -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,

View File

@@ -11,9 +11,10 @@ TOP = ../../../..
include $(TOP)/configure/CONFIG
USR_CPPFLAGS += -DUSE_TYPED_RSET
USR_CPPFLAGS += -DUSE_TYPED_RSET -DUSE_TYPED_DSET
SHRLIB_VERSION = 3.17.0
# Shared library ABI version.
SHRLIB_VERSION = $(EPICS_DATABASE_MAJOR_VERSION).$(EPICS_DATABASE_MINOR_VERSION).$(EPICS_DATABASE_MAINTENANCE_VERSION)
LIBRARY_IOC += dbRecStd
dbRecStd_LIBS = dbCore ca Com

View File

@@ -47,7 +47,6 @@ dbRecStd_SRCS += devSASoft.c
dbRecStd_SRCS += devSiSoft.c
dbRecStd_SRCS += devSoSoft.c
dbRecStd_SRCS += devWfSoft.c
dbRecStd_SRCS += devGeneralTime.c
dbRecStd_SRCS += devAiSoftCallback.c
dbRecStd_SRCS += devBiSoftCallback.c
@@ -68,6 +67,7 @@ dbRecStd_SRCS += devMbboDirectSoftCallback.c
dbRecStd_SRCS += devPrintfSoftCallback.c
dbRecStd_SRCS += devSoSoftCallback.c
dbRecStd_SRCS += devGeneralTime.c
dbRecStd_SRCS += devTimestamp.c
dbRecStd_SRCS += devStdio.c
dbRecStd_SRCS += devEnviron.c

View File

@@ -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 */

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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)
{

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;

View File

@@ -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
};

View File

@@ -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;

View File

@@ -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);

View File

@@ -29,31 +29,18 @@
#include "boRecord.h"
#include "epicsExport.h"
static long init_record(boRecord *prec);
/* Create the dset for devBoSoft */
static long init_record(dbCommon *pcommon);
static long write_bo(boRecord *prec);
struct {
long number;
DEVSUPFUN report;
DEVSUPFUN init;
DEVSUPFUN init_record;
DEVSUPFUN get_ioint_info;
DEVSUPFUN write_bo;
}devBoSoft={
5,
NULL,
NULL,
init_record,
NULL,
write_bo
bodset devBoSoft = {
{5, NULL, NULL, init_record, NULL},
write_bo
};
epicsExportAddress(dset,devBoSoft);
static long init_record(boRecord *prec)
epicsExportAddress(dset, devBoSoft);
static long init_record(dbCommon *pcommon)
{
long status=0;
/* dont convert */

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);

View File

@@ -69,7 +69,7 @@ static long read_lsi(lsiRecord *prec)
}
lsidset devLsiEnviron = {
5, NULL, init_lsi, NULL, NULL, read_lsi
{5, NULL, init_lsi, NULL, NULL }, read_lsi
};
epicsExportAddress(dset, devLsiEnviron);
@@ -119,10 +119,8 @@ static long read_stringin(stringinRecord *prec)
return 0;
}
static struct {
dset common;
DEVSUPFUN read;
} devSiEnviron = {
{5, NULL, init_stringin, NULL, NULL}, read_stringin
stringindset devSiEnviron = {
{5, NULL, init_stringin, NULL, NULL},
read_stringin
};
epicsExportAddress(dset, devSiEnviron);

View File

@@ -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;

View File

@@ -50,8 +50,9 @@ static struct ai_channel {
{"TIME", getCurrentTime},
};
static long init_ai(aiRecord *prec)
static long init_ai(dbCommon *pcommon)
{
aiRecord *prec = (aiRecord *)pcommon;
int i;
if (prec->inp.type != INST_IO) {
@@ -91,12 +92,9 @@ static long read_ai(aiRecord *prec)
return -1;
}
struct {
dset common;
DEVSUPFUN read_write;
DEVSUPFUN special_linconv;
} devAiGeneralTime = {
{6, NULL, NULL, init_ai, NULL}, read_ai, NULL
aidset devAiGeneralTime = {
{6, NULL, NULL, init_ai, NULL},
read_ai, NULL
};
epicsExportAddress(dset, devAiGeneralTime);
@@ -114,8 +112,9 @@ static struct bo_channel {
{"RSTERRCNT", resetErrors},
};
static long init_bo(boRecord *prec)
static long init_bo(dbCommon *pcommon)
{
boRecord *prec = (boRecord *)pcommon;
int i;
if (prec->out.type != INST_IO) {
@@ -151,15 +150,14 @@ static long write_bo(boRecord *prec)
return 0;
}
struct {
dset common;
DEVSUPFUN read_write;
} devBoGeneralTime = {
{5, NULL, NULL, init_bo, NULL}, write_bo
bodset devBoGeneralTime = {
{5, NULL, NULL, init_bo, NULL},
write_bo
};
epicsExportAddress(dset, devBoGeneralTime);
/******* longin record *************/
static int errorCount(void)
{
@@ -173,8 +171,9 @@ static struct li_channel {
{"GETERRCNT", errorCount},
};
static long init_li(longinRecord *prec)
static long init_li(dbCommon *pcommon)
{
longinRecord *prec = (longinRecord *)pcommon;
int i;
if (prec->inp.type != INST_IO) {
@@ -209,11 +208,9 @@ static long read_li(longinRecord *prec)
return 0;
}
struct {
dset common;
DEVSUPFUN read_write;
} devLiGeneralTime = {
{5, NULL, NULL, init_li, NULL}, read_li
longindset devLiGeneralTime = {
{5, NULL, NULL, init_li, NULL},
read_li
};
epicsExportAddress(dset, devLiGeneralTime);
@@ -243,8 +240,9 @@ static struct si_channel {
{"BESTTEP", eventProvider},
};
static long init_si(stringinRecord *prec)
static long init_si(dbCommon *pcommon)
{
stringinRecord *prec = (stringinRecord *)pcommon;
int i;
if (prec->inp.type != INST_IO) {
@@ -288,10 +286,8 @@ static long read_si(stringinRecord *prec)
return 0;
}
struct {
dset common;
DEVSUPFUN read_write;
} devSiGeneralTime = {
{5, NULL, NULL, init_si, NULL}, read_si
stringindset devSiGeneralTime = {
{5, NULL, NULL, init_si, NULL},
read_si
};
epicsExportAddress(dset, devSiGeneralTime);

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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
};

View File

@@ -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() */

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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
};

View File

@@ -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 */

View File

@@ -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;

View File

@@ -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);

View File

@@ -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*/

View File

@@ -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
};

View File

@@ -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
};

View File

@@ -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
};

View File

@@ -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;

View File

@@ -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)
{

View File

@@ -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
};

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -103,7 +103,7 @@ static long write_lso(lsoRecord *prec)
}
lsodset devLsoStdio = {
5, NULL, init_lso, NULL, NULL, write_lso
{ 5, NULL, init_lso, NULL, NULL }, write_lso
};
epicsExportAddress(dset, devLsoStdio);
@@ -153,7 +153,7 @@ static long write_printf(printfRecord *prec)
}
printfdset devPrintfStdio = {
5, NULL, init_printf, NULL, NULL, write_printf
{5, NULL, init_printf, NULL, NULL }, write_printf
};
epicsExportAddress(dset, devPrintfStdio);
@@ -202,10 +202,8 @@ static long write_stringout(stringoutRecord *prec)
return 0;
}
static struct {
dset common;
DEVSUPFUN write;
} devSoStdio = {
{5, NULL, init_stringout, NULL, NULL}, write_stringout
stringoutdset devSoStdio = {
{5, NULL, init_stringout, NULL, NULL},
write_stringout
};
epicsExportAddress(dset, devSoStdio);

View File

@@ -40,12 +40,9 @@ static long read_ai(aiRecord *prec)
return 2;
}
struct {
dset common;
DEVSUPFUN read_write;
DEVSUPFUN special_linconv;
} devTimestampAI = {
{6, NULL, initAllow, NULL, NULL}, read_ai, NULL
aidset devTimestampAI = {
{6, NULL, initAllow, NULL, NULL},
read_ai, NULL
};
epicsExportAddress(dset, devTimestampAI);
@@ -68,10 +65,8 @@ static long read_stringin (stringinRecord *prec)
return 0;
}
struct {
dset common;
DEVSUPFUN read_stringin;
} devTimestampSI = {
{5, NULL, initAllow, NULL, NULL}, read_stringin
stringindset devTimestampSI = {
{5, NULL, initAllow, NULL, NULL},
read_stringin
};
epicsExportAddress(dset, devTimestampSI);

View File

@@ -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);

View File

@@ -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 */

View File

@@ -288,6 +288,15 @@ Scan forward link if necessary, set PACT FALSE, and return.
=cut
include "dbCommon.dbd"
%
%/* Declare Device Support Entry Table */
%struct aaiRecord;
%typedef struct aaidset {
% dset common; /*init_record returns: (-1,0)=>(failure,success)*/
% long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/
%} aaidset;
%#define HAS_aaidset
%
field(VAL,DBF_NOACCESS) {
prompt("Value")
asl(ASL0)

View File

@@ -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) {

View File

@@ -288,6 +288,15 @@ Scan forward link if necessary, set PACT FALSE, and return.
=cut
include "dbCommon.dbd"
%
%/* Declare Device Support Entry Table */
%struct aaoRecord;
%typedef struct aaodset {
% dset common; /*init_record returns: (-1,0)=>(failure,success)*/
% long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/
%} aaodset;
%#define HAS_aaodset
%
field(VAL,DBF_NOACCESS) {
prompt("Value")
asl(ASL0)

View File

@@ -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);
}

View File

@@ -221,6 +221,16 @@ monitoring functionality.
=cut
include "dbCommon.dbd"
%
%/* Declare Device Support Entry Table */
%struct aiRecord;
%typedef struct aidset {
% dset common;
% long (*read_ai)(struct aiRecord *prec);
% long (*special_linconv)(struct aiRecord *prec, int after);
%} aidset;
%#define HAS_aidset
%
field(VAL,DBF_DOUBLE) {
prompt("Current EGU Value")
promptgroup("40 - Input")

View File

@@ -81,20 +81,10 @@ rset aoRSET={
put_enum_str,
get_graphic_double,
get_control_double,
get_alarm_double };
struct aodset { /* analog input dset */
long number;
DEVSUPFUN dev_report;
DEVSUPFUN init;
DEVSUPFUN init_record; /*returns: (0,2)=>(success,success no convert)*/
DEVSUPFUN get_ioint_info;
DEVSUPFUN write_ao;/*(0)=>(success ) */
DEVSUPFUN special_linconv;
get_alarm_double
};
epicsExportAddress(rset,aoRSET);
static void checkAlarms(aoRecord *);
static long fetch_value(aoRecord *, double *);
static void convert(aoRecord *, double);
@@ -104,7 +94,7 @@ static long writeValue(aoRecord *);
static long init_record(struct dbCommon *pcommon, int pass)
{
struct aoRecord *prec = (struct aoRecord *)pcommon;
struct aodset *pdset;
aodset *pdset;
double eoff = prec->eoff, eslo = prec->eslo;
double value;
long status = 0;
@@ -113,7 +103,7 @@ static long init_record(struct dbCommon *pcommon, int pass)
recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml);
if(!(pdset = (struct aodset *)(prec->dset))) {
if(!(pdset = (aodset *)(prec->dset))) {
recGblRecordError(S_dev_noDSET,(void *)prec,"ao: init_record");
return(S_dev_noDSET);
}
@@ -122,7 +112,7 @@ static long init_record(struct dbCommon *pcommon, int pass)
prec->udf = isnan(prec->val);
/* must have write_ao function defined */
if ((pdset->number < 6) || (pdset->write_ao ==NULL)) {
if ((pdset->common.number < 6) || (pdset->write_ao ==NULL)) {
recGblRecordError(S_dev_missingSup,(void *)prec,"ao: init_record");
return(S_dev_missingSup);
}
@@ -132,8 +122,8 @@ static long init_record(struct dbCommon *pcommon, int pass)
prec->eoff = prec->egul;
}
if (pdset->init_record) {
status = (*pdset->init_record)(prec);
if (pdset->common.init_record) {
status = pdset->common.init_record(pcommon);
if (prec->linr == menuConvertSLOPE) {
prec->eoff = eoff;
prec->eslo = eslo;
@@ -174,7 +164,7 @@ static long init_record(struct dbCommon *pcommon, int pass)
static long process(struct dbCommon *pcommon)
{
struct aoRecord *prec = (struct aoRecord *)pcommon;
struct aodset *pdset = (struct aodset *)(prec->dset);
aodset *pdset = (aodset *)(prec->dset);
long status=0;
unsigned char pact=prec->pact;
double value;
@@ -245,12 +235,12 @@ static long process(struct dbCommon *pcommon)
static long special(DBADDR *paddr, int after)
{
aoRecord *prec = (aoRecord *)(paddr->precord);
struct aodset *pdset = (struct aodset *) (prec->dset);
aodset *pdset = (aodset *) (prec->dset);
int special_type = paddr->special;
switch(special_type) {
case(SPC_LINCONV):
if(pdset->number<6 ) {
if(pdset->common.number<6 ) {
recGblDbaddrError(S_db_noMod,paddr,"ao: special");
return(S_db_noMod);
}
@@ -555,7 +545,7 @@ static void monitor(aoRecord *prec)
static long writeValue(aoRecord *prec)
{
struct aodset *pdset = (struct aodset *) prec->dset;
aodset *pdset = (aodset *) prec->dset;
long status = 0;
if (!prec->pact) {

View File

@@ -268,6 +268,16 @@ more information on these fields.
=cut
include "dbCommon.dbd"
%
%/* Declare Device Support Entry Table */
%struct aoRecord;
%typedef struct aodset {
% dset common; /*init_record returns: (0,2)=>(success,success no convert)*/
% long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */
% long (*special_linconv)(struct aoRecord *prec, int after);
%} aodset;
%#define HAS_aodset
%
field(VAL,DBF_DOUBLE) {
prompt("Desired Output")
promptgroup("50 - Output")

View File

@@ -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) {

View File

@@ -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")

View File

@@ -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) {

View File

@@ -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")

View File

@@ -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

View File

@@ -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) {

View File

@@ -662,6 +662,14 @@ manner for the VAL field.
=cut
include "dbCommon.dbd"
%/* Declare Device Support Entry Table */
%struct calcoutRecord;
%typedef struct calcoutdset {
% dset common;
% long (*write)(struct calcoutRecord *prec);
%} calcoutdset;
%#define HAS_calcoutdset
%
field(RPVT,DBF_NOACCESS) {
prompt("Record Private")
special(SPC_NOMOD)

View File

@@ -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) {

View File

@@ -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

View File

@@ -87,17 +87,6 @@ epicsExportAddress(rset,histogramRSET);
int histogramSDELprecision = 2;
epicsExportAddress(int, histogramSDELprecision);
struct histogramdset { /* histogram input dset */
long number;
DEVSUPFUN dev_report;
DEVSUPFUN init;
DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/
DEVSUPFUN get_ioint_info;
DEVSUPFUN read_histogram;/*(0,2)=> success and add_count, don't add_count)*/
/* if add_count then sgnl added to array */
DEVSUPFUN special_linconv;
};
/* control block for callback*/
typedef struct myCallback {
epicsCallback callback;
@@ -160,7 +149,7 @@ static void wdogInit(histogramRecord *prec)
static long init_record(struct dbCommon *pcommon, int pass)
{
struct histogramRecord *prec = (struct histogramRecord *)pcommon;
struct histogramdset *pdset;
histogramdset *pdset;
if (pass == 0) {
/* allocate space for histogram array */
@@ -181,21 +170,21 @@ static long init_record(struct dbCommon *pcommon, int pass)
recGblInitConstantLink(&prec->siol, DBF_DOUBLE, &prec->sval);
/* must have device support defined */
pdset = (struct histogramdset *) prec->dset;
pdset = (histogramdset *) prec->dset;
if (!pdset) {
recGblRecordError(S_dev_noDSET, prec, "histogram: init_record");
return S_dev_noDSET;
}
/* must have read_histogram function defined */
if (pdset->number < 6 || !pdset->read_histogram) {
if (pdset->common.number < 6 || !pdset->read_histogram) {
recGblRecordError(S_dev_missingSup, prec, "histogram: init_record");
return S_dev_missingSup;
}
/* call device support init_record */
if (pdset->init_record) {
long status = pdset->init_record(prec);
if (pdset->common.init_record) {
long status = pdset->common.init_record(pcommon);
if (status)
return status;
@@ -206,7 +195,7 @@ static long init_record(struct dbCommon *pcommon, int pass)
static long process(struct dbCommon *pcommon)
{
struct histogramRecord *prec = (struct histogramRecord *)pcommon;
struct histogramdset *pdset = (struct histogramdset *) prec->dset;
histogramdset *pdset = (histogramdset *) prec->dset;
int pact = prec->pact;
long status;
@@ -375,7 +364,7 @@ static long clear_histogram(histogramRecord *prec)
static long readValue(histogramRecord *prec)
{
struct histogramdset *pdset = (struct histogramdset *) prec->dset;
histogramdset *pdset = (histogramdset *) prec->dset;
long status = 0;
if (!prec->pact) {

View File

@@ -140,6 +140,16 @@ simulation mode fields.
=cut
include "dbCommon.dbd"
%
%/* Declare Device Support Entry Table */
%struct histogramRecord;
%typedef struct histogramdset {
% dset common; /*init_record returns: (-1,0)=>(failure,success)*/
% long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/
% long (*special_linconv)(struct histogramRecord *prec, int after);
%} histogramdset;
%#define HAS_histogramdset
%
field(VAL,DBF_NOACCESS) {
prompt("Value")
asl(ASL0)

View File

@@ -83,14 +83,6 @@ rset int64inRSET={
epicsExportAddress(rset,int64inRSET);
struct int64indset { /* int64in input dset */
long number;
DEVSUPFUN dev_report;
DEVSUPFUN init;
DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/
DEVSUPFUN get_ioint_info;
DEVSUPFUN read_int64in; /*returns: (-1,0)=>(failure,success)*/
};
static void checkAlarms(int64inRecord *prec, epicsTimeStamp *timeLast);
static void monitor(int64inRecord *prec);
static long readValue(int64inRecord *prec);
@@ -99,7 +91,7 @@ static long readValue(int64inRecord *prec);
static long init_record(dbCommon *pcommon, int pass)
{
int64inRecord *prec = (int64inRecord*)pcommon;
struct int64indset *pdset;
int64indset *pdset;
long status;
if (pass == 0) return 0;
@@ -108,17 +100,17 @@ static long init_record(dbCommon *pcommon, int pass)
recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml);
recGblInitConstantLink(&prec->siol, DBF_INT64, &prec->sval);
if(!(pdset = (struct int64indset *)(prec->dset))) {
if(!(pdset = (int64indset *)(prec->dset))) {
recGblRecordError(S_dev_noDSET,(void *)prec,"int64in: init_record");
return(S_dev_noDSET);
}
/* must have read_int64in function defined */
if( (pdset->number < 5) || (pdset->read_int64in == NULL) ) {
if ((pdset->common.number < 5) || (pdset->read_int64in == NULL)) {
recGblRecordError(S_dev_missingSup,(void *)prec,"int64in: init_record");
return(S_dev_missingSup);
}
if( pdset->init_record ) {
if((status=(*pdset->init_record)(prec))) return(status);
if (pdset->common.init_record) {
if ((status = pdset->common.init_record(pcommon))) return status;
}
prec->mlst = prec->val;
prec->alst = prec->val;
@@ -129,7 +121,7 @@ static long init_record(dbCommon *pcommon, int pass)
static long process(dbCommon *pcommon)
{
int64inRecord *prec = (int64inRecord*)pcommon;
struct int64indset *pdset = (struct int64indset *)(prec->dset);
int64indset *pdset = (int64indset *)(prec->dset);
long status;
unsigned char pact=prec->pact;
epicsTimeStamp timeLast;
@@ -397,7 +389,7 @@ static void monitor(int64inRecord *prec)
static long readValue(int64inRecord *prec)
{
struct int64indset *pdset = (struct int64indset *) prec->dset;
int64indset *pdset = (int64indset *) prec->dset;
long status = 0;
if (!prec->pact) {

View File

@@ -111,6 +111,15 @@ monitoring deadband functionality.
=cut
include "dbCommon.dbd"
%
%/* Declare Device Support Entry Table */
%struct int64inRecord;
%typedef struct int64indset {
% dset common;
% long (*read_int64in)(struct int64inRecord *prec);
%} int64indset;
%#define HAS_int64indset
%
field(VAL,DBF_INT64) {
prompt("Current value")
promptgroup("40 - Input")

View File

@@ -80,14 +80,6 @@ rset int64outRSET={
epicsExportAddress(rset,int64outRSET);
struct int64outdset { /* int64out input dset */
long number;
DEVSUPFUN dev_report;
DEVSUPFUN init;
DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/
DEVSUPFUN get_ioint_info;
DEVSUPFUN write_int64out;/*(-1,0)=>(failure,success*/
};
static void checkAlarms(int64outRecord *prec);
static void monitor(int64outRecord *prec);
static long writeValue(int64outRecord *prec);
@@ -97,19 +89,19 @@ static void convert(int64outRecord *prec, epicsInt64 value);
static long init_record(dbCommon *pcommon, int pass)
{
int64outRecord *prec = (int64outRecord*)pcommon;
struct int64outdset *pdset;
int64outdset *pdset;
long status=0;
if (pass == 0) return 0;
recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml);
if(!(pdset = (struct int64outdset *)(prec->dset))) {
if(!(pdset = (int64outdset *)(prec->dset))) {
recGblRecordError(S_dev_noDSET,(void *)prec,"int64out: init_record");
return(S_dev_noDSET);
}
/* must have write_int64out functions defined */
if( (pdset->number < 5) || (pdset->write_int64out == NULL) ) {
if ((pdset->common.number < 5) || (pdset->write_int64out == NULL)) {
recGblRecordError(S_dev_missingSup,(void *)prec,"int64out: init_record");
return(S_dev_missingSup);
}
@@ -117,8 +109,8 @@ static long init_record(dbCommon *pcommon, int pass)
if(recGblInitConstantLink(&prec->dol,DBF_INT64,&prec->val))
prec->udf=FALSE;
}
if( pdset->init_record ) {
if((status=(*pdset->init_record)(prec))) return(status);
if (pdset->common.init_record) {
if ((status = pdset->common.init_record(pcommon))) return status;
}
prec->mlst = prec->val;
prec->alst = prec->val;
@@ -129,7 +121,7 @@ static long init_record(dbCommon *pcommon, int pass)
static long process(dbCommon *pcommon)
{
int64outRecord *prec = (int64outRecord*)pcommon;
struct int64outdset *pdset = (struct int64outdset *)(prec->dset);
int64outdset *pdset = (int64outdset *)(prec->dset);
long status=0;
epicsInt64 value;
unsigned char pact=prec->pact;
@@ -377,7 +369,7 @@ static void monitor(int64outRecord *prec)
static long writeValue(int64outRecord *prec)
{
struct int64outdset *pdset = (struct int64outdset *) prec->dset;
int64outdset *pdset = (int64outdset *) prec->dset;
long status = 0;
if (!prec->pact) {

View File

@@ -137,6 +137,15 @@ monitoring deadband functionality.
=cut
include "dbCommon.dbd"
%
%/* Declare Device Support Entry Table */
%struct int64outRecord;
%typedef struct int64outdset {
% dset common;
% long (*write_int64out)(struct int64outRecord *prec);
%} int64outdset;
%#define HAS_int64outdset
%
field(VAL,DBF_INT64) {
prompt("Desired Output")
promptgroup("50 - Output")

View File

@@ -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) {

View File

@@ -305,6 +305,15 @@ sets UDF to FALSE. read_longin returns the status of C<recGblGetLinkValue>.
=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")

View File

@@ -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) {

View File

@@ -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")

View File

@@ -66,13 +66,13 @@ static long init_record(struct dbCommon *pcommon, int pass)
}
/* must have a read_string function */
if (pdset->number < 5 || !pdset->read_string) {
if (pdset->common.number < 5 || !pdset->read_string) {
recGblRecordError(S_dev_missingSup, prec, "lsi: init_record");
return S_dev_missingSup;
}
if (pdset->init_record) {
long status = pdset->init_record(prec);
if (pdset->common.init_record) {
long status = pdset->common.init_record(pcommon);
if (status)
return status;
@@ -221,7 +221,7 @@ static void monitor(lsiRecord *prec)
static long readValue(lsiRecord *prec)
{
struct lsidset *pdset = (struct lsidset *) prec->dset;
lsidset *pdset = (lsidset *) prec->dset;
long status = 0;
if (!prec->pact) {

View File

@@ -44,17 +44,14 @@ See L<Address Specification> for information on specifying links.
=cut
include "dbCommon.dbd"
%#include "devSup.h"
%
%/* Declare Device Support Entry Table */
%struct lsiRecord;
%typedef struct lsidset {
% long number;
% DEVSUPFUN report;
% DEVSUPFUN init;
% DEVSUPFUN init_record;
% DEVSUPFUN get_ioint_info;
% DEVSUPFUN read_string;
% dset common;
% long (*read_string)(struct lsiRecord *prec);
%} lsidset;
%#define HAS_lsidset
%
field(VAL,DBF_NOACCESS) {
prompt("Current Value")

View File

@@ -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;

View File

@@ -109,17 +109,14 @@ lists other fields related to a alarms that are common to all record types.
=cut
include "dbCommon.dbd"
%#include "devSup.h"
%
%/* Declare Device Support Entry Table */
%struct lsoRecord;
%typedef struct lsodset {
% long number;
% DEVSUPFUN report;
% DEVSUPFUN init;
% DEVSUPFUN init_record;
% DEVSUPFUN get_ioint_info;
% DEVSUPFUN write_string;
% dset common;
% long (*write_string)(struct lsoRecord *prec);
%} lsodset;
%#define HAS_lsodset
%
field(VAL,DBF_NOACCESS) {
prompt("Current Value")

View File

@@ -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) {

View File

@@ -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")

View File

@@ -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) {

View File

@@ -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")

View File

@@ -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) {

View File

@@ -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")

View File

@@ -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) {

View File

@@ -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")

Some files were not shown because too many files have changed in this diff Show More