- 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!
This commit is contained in:
gabadinho
2020-02-14 11:07:11 +01:00
parent 754eb73334
commit c54237e34a
18 changed files with 113 additions and 142 deletions

View File

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

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

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

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

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

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

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

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

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

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

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

View File

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

View File

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

View File

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

View File

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