diff --git a/documentation/RELEASE_NOTES.html b/documentation/RELEASE_NOTES.html index a4a09c7da..7eb9fdcc9 100644 --- a/documentation/RELEASE_NOTES.html +++ b/documentation/RELEASE_NOTES.html @@ -9,6 +9,8 @@
The VAL fields of mbbiDirect and mbboDirect records have +been extended from DBF_USHORT (16 bit) to DBF_LONG (32 bit). +New bit fields B10...B1F have been added.
+ +Device support which accesses the bit fields can test if the macro +mbbiDirectRecord1BF or mbboDirectRecord1BF is +defined. Device support which only accesses RVAL needs no modification.
+The epicsReadline refactoring work described below unfortunately disabled the
diff --git a/src/std/dev/devMbbiDirectSoft.c b/src/std/dev/devMbbiDirectSoft.c
index 9c929b2b6..861952f8d 100644
--- a/src/std/dev/devMbbiDirectSoft.c
+++ b/src/std/dev/devMbbiDirectSoft.c
@@ -47,7 +47,7 @@ epicsExportAddress(dset, devMbbiDirectSoft);
static long init_record(mbbiDirectRecord *prec)
{
- if (recGblInitConstantLink(&prec->inp, DBF_ENUM, &prec->val))
+ if (recGblInitConstantLink(&prec->inp, DBR_ULONG, &prec->val))
prec->udf = FALSE;
return 0;
@@ -56,7 +56,7 @@ static long init_record(mbbiDirectRecord *prec)
static long readLocked(struct link *pinp, void *dummy)
{
mbbiDirectRecord *prec = (mbbiDirectRecord *) pinp->precord;
- long status = dbGetLink(pinp, DBR_USHORT, &prec->val, 0, 0);
+ long status = dbGetLink(pinp, DBR_ULONG, &prec->val, 0, 0);
if (status) return status;
diff --git a/src/std/dev/devMbbiDirectSoftCallback.c b/src/std/dev/devMbbiDirectSoftCallback.c
index 93016329f..d785f7386 100644
--- a/src/std/dev/devMbbiDirectSoftCallback.c
+++ b/src/std/dev/devMbbiDirectSoftCallback.c
@@ -41,7 +41,7 @@ typedef struct devPvt {
struct {
DBRstatus
DBRtime
- epicsUInt16 value;
+ epicsUInt32 value;
} buffer;
} devPvt;
@@ -58,7 +58,7 @@ static void getCallback(processNotify *ppn, notifyGetType type)
}
assert(type == getFieldType);
- pdevPvt->status = dbChannelGetField(ppn->chan, DBR_USHORT,
+ pdevPvt->status = dbChannelGetField(ppn->chan, DBR_ULONG,
&pdevPvt->buffer, &pdevPvt->options, &no_elements, 0);
}
@@ -153,7 +153,7 @@ static long init(int pass)
static long init_record(mbbiDirectRecord *prec)
{
- if (recGblInitConstantLink(&prec->inp, DBR_ENUM, &prec->val))
+ if (recGblInitConstantLink(&prec->inp, DBR_ULONG, &prec->val))
prec->udf = FALSE;
return 0;
diff --git a/src/std/dev/devMbbiDirectSoftRaw.c b/src/std/dev/devMbbiDirectSoftRaw.c
index f6172cdec..98b4673fc 100644
--- a/src/std/dev/devMbbiDirectSoftRaw.c
+++ b/src/std/dev/devMbbiDirectSoftRaw.c
@@ -59,7 +59,7 @@ static long init_record(mbbiDirectRecord *prec)
static long read_mbbi(mbbiDirectRecord *prec)
{
- if (!dbGetLink(&prec->inp, DBR_LONG, &prec->rval, 0, 0)) {
+ if (!dbGetLink(&prec->inp, DBR_ULONG, &prec->rval, 0, 0)) {
prec->rval &= prec->mask;
if (dbLinkIsConstant(&prec->tsel) &&
prec->tse == epicsTimeEventDeviceTime)
diff --git a/src/std/dev/devMbboDirectSoft.c b/src/std/dev/devMbboDirectSoft.c
index 0c0851980..75359f283 100644
--- a/src/std/dev/devMbboDirectSoft.c
+++ b/src/std/dev/devMbboDirectSoft.c
@@ -21,7 +21,7 @@
static long write_mbbo(mbboDirectRecord *prec)
{
- dbPutLink(&prec->out, DBR_USHORT, &prec->val, 1);
+ dbPutLink(&prec->out, DBR_ULONG, &prec->val, 1);
return 0;
}
diff --git a/src/std/dev/devMbboDirectSoftCallback.c b/src/std/dev/devMbboDirectSoftCallback.c
index e64c3d41c..6d86507ae 100644
--- a/src/std/dev/devMbboDirectSoftCallback.c
+++ b/src/std/dev/devMbboDirectSoftCallback.c
@@ -29,11 +29,11 @@ static long write_mbbo(mbboDirectRecord *prec)
if (prec->pact)
return 0;
- status = dbPutLinkAsync(plink, DBR_USHORT, &prec->val, 1);
+ status = dbPutLinkAsync(plink, DBR_ULONG, &prec->val, 1);
if (!status)
prec->pact = TRUE;
else if (status == S_db_noLSET)
- status = dbPutLink(plink, DBR_USHORT, &prec->val, 1);
+ status = dbPutLink(plink, DBR_ULONG, &prec->val, 1);
return status;
}
diff --git a/src/std/rec/mbbiDirectRecord.c b/src/std/rec/mbbiDirectRecord.c
index 112272925..7e0c41828 100644
--- a/src/std/rec/mbbiDirectRecord.c
+++ b/src/std/rec/mbbiDirectRecord.c
@@ -9,7 +9,7 @@
* in file LICENSE that is included with this distribution.
\*************************************************************************/
-/* mbbiDirectRecord.c - Record Support routines for mbboDirect records */
+/* mbbiDirectRecord.c - Record Support routines for mbbiDirect records */
/*
* Original Authors: Bob Dalesio and Matthew Needes
* Date: 10-07-93
@@ -92,7 +92,7 @@ struct mbbidset { /* multi bit binary input dset */
static void monitor(mbbiDirectRecord *);
static long readValue(mbbiDirectRecord *);
-#define NUM_BITS 16
+#define NUM_BITS 32
static long init_record(struct dbCommon *pcommon, int pass)
{
@@ -114,7 +114,7 @@ static long init_record(struct dbCommon *pcommon, int pass)
}
recGblInitConstantLink(&prec->siml, DBF_USHORT, &prec->simm);
- recGblInitConstantLink(&prec->siol, DBF_USHORT, &prec->sval);
+ recGblInitConstantLink(&prec->siol, DBF_ULONG, &prec->sval);
/* Initialize MASK if the user set NOBT instead */
if (prec->mask == 0 && prec->nobt <= 32)
@@ -123,11 +123,11 @@ static long init_record(struct dbCommon *pcommon, int pass)
if (pdset->init_record) {
status = pdset->init_record(prec);
if (status == 0) {
- epicsUInt16 val = prec->val;
+ epicsUInt32 val = prec->val;
epicsUInt8 *pBn = &prec->b0;
int i;
- /* Initialize B0 - BF from VAL */
+ /* Initialize B0 - B1F from VAL */
for (i = 0; i < NUM_BITS; i++, pBn++, val >>= 1)
*pBn = !! (val & 1);
}
@@ -188,7 +188,7 @@ static void monitor(mbbiDirectRecord *prec)
{
epicsUInt16 events = recGblResetAlarms(prec);
epicsUInt16 vl_events = events | DBE_VALUE | DBE_LOG;
- epicsUInt16 val = prec->val;
+ epicsUInt32 val = prec->val;
epicsUInt8 *pBn = &prec->b0;
int i;
diff --git a/src/std/rec/mbbiDirectRecord.dbd b/src/std/rec/mbbiDirectRecord.dbd
index 3fa3d8823..0aa0cd496 100644
--- a/src/std/rec/mbbiDirectRecord.dbd
+++ b/src/std/rec/mbbiDirectRecord.dbd
@@ -8,7 +8,7 @@
#*************************************************************************
recordtype(mbbiDirect) {
include "dbCommon.dbd"
- field(VAL,DBF_USHORT) {
+ field(VAL,DBF_LONG) {
prompt("Current Value")
promptgroup("40 - Input")
asl(ASL0)
@@ -39,7 +39,7 @@ recordtype(mbbiDirect) {
special(SPC_NOMOD)
interest(1)
}
- field(MLST,DBF_USHORT) {
+ field(MLST,DBF_LONG) {
prompt("Last Value Monitored")
special(SPC_NOMOD)
interest(3)
@@ -54,7 +54,7 @@ recordtype(mbbiDirect) {
promptgroup("90 - Simulate")
interest(1)
}
- field(SVAL,DBF_ULONG) {
+ field(SVAL,DBF_LONG) {
prompt("Simulation Value")
}
field(SIML,DBF_INLINK) {
@@ -124,32 +124,112 @@ recordtype(mbbiDirect) {
interest(1)
}
field(BA,DBF_UCHAR) {
- prompt("Bit A")
+ prompt("Bit 10")
pp(TRUE)
interest(1)
}
field(BB,DBF_UCHAR) {
- prompt("Bit B")
+ prompt("Bit 11")
pp(TRUE)
interest(1)
}
field(BC,DBF_UCHAR) {
- prompt("Bit C")
+ prompt("Bit 12")
pp(TRUE)
interest(1)
}
field(BD,DBF_UCHAR) {
- prompt("Bit D")
+ prompt("Bit 13")
pp(TRUE)
interest(1)
}
field(BE,DBF_UCHAR) {
- prompt("Bit E")
+ prompt("Bit 14")
pp(TRUE)
interest(1)
}
field(BF,DBF_UCHAR) {
- prompt("Bit F")
+ prompt("Bit 15")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B10,DBF_UCHAR) {
+ prompt("Bit 16")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B11,DBF_UCHAR) {
+ prompt("Bit 17")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B12,DBF_UCHAR) {
+ prompt("Bit 18")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B13,DBF_UCHAR) {
+ prompt("Bit 19")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B14,DBF_UCHAR) {
+ prompt("Bit 20")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B15,DBF_UCHAR) {
+ prompt("Bit 21")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B16,DBF_UCHAR) {
+ prompt("Bit 22")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B17,DBF_UCHAR) {
+ prompt("Bit 23")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B18,DBF_UCHAR) {
+ prompt("Bit 24")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B19,DBF_UCHAR) {
+ prompt("Bit 25")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B1A,DBF_UCHAR) {
+ prompt("Bit 26")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B1B,DBF_UCHAR) {
+ prompt("Bit 27")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B1C,DBF_UCHAR) {
+ prompt("Bit 28")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B1D,DBF_UCHAR) {
+ prompt("Bit 29")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B1E,DBF_UCHAR) {
+ prompt("Bit 30")
+ pp(TRUE)
+ interest(1)
+ }
+ field(B1F,DBF_UCHAR) {
+ prompt("Bit 31")
pp(TRUE)
interest(1)
}
diff --git a/src/std/rec/mbboDirectRecord.c b/src/std/rec/mbboDirectRecord.c
index 0a6e3391e..eaae38326 100644
--- a/src/std/rec/mbboDirectRecord.c
+++ b/src/std/rec/mbboDirectRecord.c
@@ -94,7 +94,7 @@ static void convert(mbboDirectRecord *);
static void monitor(mbboDirectRecord *);
static long writeValue(mbboDirectRecord *);
-#define NUM_BITS 16
+#define NUM_BITS 32
static long init_record(struct dbCommon *pcommon, int pass)
{
@@ -116,7 +116,7 @@ static long init_record(struct dbCommon *pcommon, int pass)
}
recGblInitConstantLink(&prec->siml, DBF_USHORT, &prec->simm);
- if (recGblInitConstantLink(&prec->dol, DBF_USHORT, &prec->val))
+ if (recGblInitConstantLink(&prec->dol, DBF_ULONG, &prec->val))
prec->udf = FALSE;
/* Initialize MASK if the user set NOBT instead */
@@ -141,8 +141,8 @@ static long init_record(struct dbCommon *pcommon, int pass)
if (!prec->udf &&
prec->omsl == menuOmslsupervisory) {
- /* Set initial B0 - BF from VAL */
- epicsUInt16 val = prec->val;
+ /* Set initial B0 - B1F from VAL */
+ epicsUInt32 val = prec->val;
epicsUInt8 *pBn = &prec->b0;
int i;
@@ -174,9 +174,9 @@ static long process(struct dbCommon *pcommon)
if (!pact) {
if (!dbLinkIsConstant(&prec->dol) &&
prec->omsl == menuOmslclosed_loop) {
- epicsUInt16 val;
+ epicsUInt32 val;
- if (dbGetLink(&prec->dol, DBR_USHORT, &val, 0, 0)) {
+ if (dbGetLink(&prec->dol, DBR_ULONG, &val, 0, 0)) {
recGblSetSevr(prec, LINK_ALARM, INVALID_ALARM);
goto CONTINUE;
}
@@ -184,11 +184,11 @@ static long process(struct dbCommon *pcommon)
}
else if (prec->omsl == menuOmslsupervisory) {
epicsUInt8 *pBn = &prec->b0;
- epicsUInt16 val = 0;
- epicsUInt16 bit = 1;
+ epicsUInt32 val = 0;
+ epicsUInt32 bit = 1;
int i;
- /* Construct VAL from B0 - BF */
+ /* Construct VAL from B0 - B1F */
for (i = 0; i < NUM_BITS; i++, bit <<= 1)
if (*pBn++)
val |= bit;
@@ -253,7 +253,7 @@ static long special(DBADDR *paddr, int after)
if (prec->omsl == menuOmslsupervisory) {
/* Adjust VAL corresponding to the bit changed */
epicsUInt8 *pBn = (epicsUInt8 *) paddr->pfield;
- int bit = 1 << (pBn - &prec->b0);
+ epicsUInt32 bit = 1 << (pBn - &prec->b0);
if (*pBn)
prec->val |= bit;
@@ -267,9 +267,9 @@ static long special(DBADDR *paddr, int after)
case SPC_RESET: /* OMSL field modified */
if (prec->omsl == menuOmslclosed_loop) {
- /* Construct VAL from B0 - BF */
+ /* Construct VAL from B0 - B1F */
epicsUInt8 *pBn = &prec->b0;
- epicsUInt16 val = 0, bit = 1;
+ epicsUInt32 val = 0, bit = 1;
int i;
for (i = 0; i < NUM_BITS; i++, bit <<= 1)
@@ -278,8 +278,8 @@ static long special(DBADDR *paddr, int after)
prec->val = val;
}
else if (prec->omsl == menuOmslsupervisory) {
- /* Set B0 - BF from VAL and post monitors */
- epicsUInt16 val = prec->val;
+ /* Set B0 - B1F from VAL and post monitors */
+ epicsUInt32 val = prec->val;
epicsUInt8 *pBn = &prec->b0;
int i;
@@ -351,7 +351,7 @@ static long writeValue(mbboDirectRecord *prec)
case menuYesNoYES:
recGblSetSevr(prec, SIMM_ALARM, prec->sims);
- return dbPutLink(&prec->siol, DBR_USHORT, &prec->val, 1);
+ return dbPutLink(&prec->siol, DBR_ULONG, &prec->val, 1);
default:
recGblSetSevr(prec, SOFT_ALARM, INVALID_ALARM);
diff --git a/src/std/rec/mbboDirectRecord.dbd b/src/std/rec/mbboDirectRecord.dbd
index 0b4285e32..62c6973e9 100644
--- a/src/std/rec/mbboDirectRecord.dbd
+++ b/src/std/rec/mbboDirectRecord.dbd
@@ -8,7 +8,7 @@
#*************************************************************************
recordtype(mbboDirect) {
include "dbCommon.dbd"
- field(VAL,DBF_USHORT) {
+ field(VAL,DBF_LONG) {
prompt("Word")
promptgroup("50 - Output")
asl(ASL0)
@@ -38,6 +38,72 @@ recordtype(mbboDirect) {
promptgroup("50 - Output")
interest(1)
}
+ field(RVAL,DBF_ULONG) {
+ prompt("Raw Value")
+ special(SPC_NOMOD)
+ pp(TRUE)
+ }
+ field(ORAW,DBF_ULONG) {
+ prompt("Prev Raw Value")
+ special(SPC_NOMOD)
+ interest(3)
+ }
+ field(RBV,DBF_ULONG) {
+ prompt("Readback Value")
+ special(SPC_NOMOD)
+ }
+ field(ORBV,DBF_ULONG) {
+ prompt("Prev Readback Value")
+ special(SPC_NOMOD)
+ interest(3)
+ }
+ field(MASK,DBF_ULONG) {
+ prompt("Hardware Mask")
+ special(SPC_NOMOD)
+ interest(1)
+ }
+ field(MLST,DBF_LONG) {
+ prompt("Last Value Monitored")
+ special(SPC_NOMOD)
+ interest(3)
+ }
+ field(SHFT,DBF_USHORT) {
+ prompt("Shift")
+ promptgroup("50 - Output")
+ interest(1)
+ }
+ field(SIOL,DBF_OUTLINK) {
+ prompt("Sim Output Specifctn")
+ promptgroup("90 - Simulate")
+ interest(1)
+ }
+ field(SIML,DBF_INLINK) {
+ prompt("Sim Mode Location")
+ promptgroup("90 - Simulate")
+ interest(1)
+ }
+ field(SIMM,DBF_MENU) {
+ prompt("Simulation Mode")
+ interest(1)
+ menu(menuYesNo)
+ }
+ field(SIMS,DBF_MENU) {
+ prompt("Sim mode Alarm Svrty")
+ promptgroup("90 - Simulate")
+ interest(2)
+ menu(menuAlarmSevr)
+ }
+ field(IVOA,DBF_MENU) {
+ prompt("INVALID outpt action")
+ promptgroup("50 - Output")
+ interest(2)
+ menu(menuIvoa)
+ }
+ field(IVOV,DBF_LONG) {
+ prompt("INVALID output value")
+ promptgroup("50 - Output")
+ interest(2)
+ }
field(B0,DBF_UCHAR) {
prompt("Bit 0")
promptgroup("51 - Output 0-7")
@@ -96,124 +162,170 @@ recordtype(mbboDirect) {
}
field(B8,DBF_UCHAR) {
prompt("Bit 8")
- promptgroup("52 - Output 9-F")
+ promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(B9,DBF_UCHAR) {
prompt("Bit 9")
- promptgroup("52 - Output 9-F")
+ promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(BA,DBF_UCHAR) {
prompt("Bit 10")
- promptgroup("52 - Output 9-F")
+ promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(BB,DBF_UCHAR) {
prompt("Bit 11")
- promptgroup("52 - Output 9-F")
+ promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(BC,DBF_UCHAR) {
prompt("Bit 12")
- promptgroup("52 - Output 9-F")
+ promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(BD,DBF_UCHAR) {
prompt("Bit 13")
- promptgroup("52 - Output 9-F")
+ promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(BE,DBF_UCHAR) {
prompt("Bit 14")
- promptgroup("52 - Output 9-F")
+ promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(BF,DBF_UCHAR) {
prompt("Bit 15")
- promptgroup("52 - Output 9-F")
+ promptgroup("52 - Output 8-15")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
- field(RVAL,DBF_ULONG) {
- prompt("Raw Value")
- special(SPC_NOMOD)
+ field(B10,DBF_UCHAR) {
+ prompt("Bit 16")
+ promptgroup("53 - Output 16-23")
+ special(SPC_MOD)
pp(TRUE)
- }
- field(ORAW,DBF_ULONG) {
- prompt("Prev Raw Value")
- special(SPC_NOMOD)
- interest(3)
- }
- field(RBV,DBF_ULONG) {
- prompt("Readback Value")
- special(SPC_NOMOD)
- }
- field(ORBV,DBF_ULONG) {
- prompt("Prev Readback Value")
- special(SPC_NOMOD)
- interest(3)
- }
- field(MASK,DBF_ULONG) {
- prompt("Hardware Mask")
- special(SPC_NOMOD)
interest(1)
}
- field(MLST,DBF_ULONG) {
- prompt("Last Value Monitored")
- special(SPC_NOMOD)
- interest(3)
- }
- field(SHFT,DBF_ULONG) {
- prompt("Shift")
- promptgroup("50 - Output")
+ field(B11,DBF_UCHAR) {
+ prompt("Bit 17")
+ promptgroup("53 - Output 16-23")
+ special(SPC_MOD)
+ pp(TRUE)
interest(1)
}
- field(SIOL,DBF_OUTLINK) {
- prompt("Sim Output Specifctn")
- promptgroup("90 - Simulate")
+ field(B12,DBF_UCHAR) {
+ prompt("Bit 18")
+ promptgroup("53 - Output 16-23")
+ special(SPC_MOD)
+ pp(TRUE)
interest(1)
}
- field(SIML,DBF_INLINK) {
- prompt("Sim Mode Location")
- promptgroup("90 - Simulate")
+ field(B13,DBF_UCHAR) {
+ prompt("Bit 19")
+ promptgroup("53 - Output 16-23")
+ special(SPC_MOD)
+ pp(TRUE)
interest(1)
}
- field(SIMM,DBF_MENU) {
- prompt("Simulation Mode")
+ field(B14,DBF_UCHAR) {
+ prompt("Bit 20")
+ promptgroup("53 - Output 16-23")
+ special(SPC_MOD)
+ pp(TRUE)
interest(1)
- menu(menuYesNo)
}
- field(SIMS,DBF_MENU) {
- prompt("Sim mode Alarm Svrty")
- promptgroup("90 - Simulate")
- interest(2)
- menu(menuAlarmSevr)
+ field(B15,DBF_UCHAR) {
+ prompt("Bit 21")
+ promptgroup("53 - Output 16-23")
+ special(SPC_MOD)
+ pp(TRUE)
+ interest(1)
}
- field(IVOA,DBF_MENU) {
- prompt("INVALID outpt action")
- promptgroup("50 - Output")
- interest(2)
- menu(menuIvoa)
+ field(B16,DBF_UCHAR) {
+ prompt("Bit 22")
+ promptgroup("53 - Output 16-23")
+ special(SPC_MOD)
+ pp(TRUE)
+ interest(1)
}
- field(IVOV,DBF_USHORT) {
- prompt("INVALID output value")
- promptgroup("50 - Output")
- interest(2)
+ field(B17,DBF_UCHAR) {
+ prompt("Bit 23")
+ promptgroup("53 - Output 16-23")
+ special(SPC_MOD)
+ pp(TRUE)
+ interest(1)
+ }
+ field(B18,DBF_UCHAR) {
+ prompt("Bit 24")
+ promptgroup("54 - Output 24-31")
+ special(SPC_MOD)
+ pp(TRUE)
+ interest(1)
+ }
+ field(B19,DBF_UCHAR) {
+ prompt("Bit 25")
+ promptgroup("54 - Output 24-31")
+ special(SPC_MOD)
+ pp(TRUE)
+ interest(1)
+ }
+ field(B1A,DBF_UCHAR) {
+ prompt("Bit 26")
+ promptgroup("54 - Output 24-31")
+ special(SPC_MOD)
+ pp(TRUE)
+ interest(1)
+ }
+ field(B1B,DBF_UCHAR) {
+ prompt("Bit 27")
+ promptgroup("54 - Output 24-31")
+ special(SPC_MOD)
+ pp(TRUE)
+ interest(1)
+ }
+ field(B1C,DBF_UCHAR) {
+ prompt("Bit 28")
+ promptgroup("54 - Output 24-31")
+ special(SPC_MOD)
+ pp(TRUE)
+ interest(1)
+ }
+ field(B1D,DBF_UCHAR) {
+ prompt("Bit 29")
+ promptgroup("54 - Output 24-31")
+ special(SPC_MOD)
+ pp(TRUE)
+ interest(1)
+ }
+ field(B1E,DBF_UCHAR) {
+ prompt("Bit 30")
+ promptgroup("54 - Output 24-31")
+ special(SPC_MOD)
+ pp(TRUE)
+ interest(1)
+ }
+ field(B1F,DBF_UCHAR) {
+ prompt("Bit 31")
+ promptgroup("54 - Output 24-31")
+ special(SPC_MOD)
+ pp(TRUE)
+ interest(1)
}
}
diff --git a/src/std/rec/test/Makefile b/src/std/rec/test/Makefile
index 94afd4c01..bde69117f 100644
--- a/src/std/rec/test/Makefile
+++ b/src/std/rec/test/Makefile
@@ -116,6 +116,13 @@ regressTest_SRCS += regressTest_registerRecordDeviceDriver.cpp
TESTFILES += $(COMMON_DIR)/regressTest.dbd ../regressArray1.db ../regressHex.db ../regressLinkMS.db
TESTS += regressTest
+TESTPROD_HOST += mbbioDirectTest
+mbbioDirectTest_SRCS += mbbioDirectTest.c
+mbbioDirectTest_SRCS += recTestIoc_registerRecordDeviceDriver.cpp
+testHarness_SRCS += mbbioDirectTest.c
+TESTFILES += ../mbbioDirectTest.db
+TESTS += mbbioDirectTest
+
# epicsRunRecordTests runs all the test programs in a known working order.
testHarness_SRCS += epicsRunRecordTests.c
diff --git a/src/std/rec/test/mbbioDirectTest.c b/src/std/rec/test/mbbioDirectTest.c
new file mode 100644
index 000000000..fb011f662
--- /dev/null
+++ b/src/std/rec/test/mbbioDirectTest.c
@@ -0,0 +1,145 @@
+/*************************************************************************\
+* Copyright (c) 2017 Dirk Zimoch
+* EPICS BASE is distributed subject to a Software License Agreement found
+* in file LICENSE that is included with this distribution.
+\*************************************************************************/
+
+/* Theory of Operation
+ *
+ * For each of the two soft device supports (soft/raw soft/soft),
+ * there is a combination of mbboDirect -> val / sim -> mbbiDirect.
+ *
+ * The intermediate records are of type double (val) and long (sim) to
+ * check conversion from/to double.
+ *
+ * For each device support, the following is done:
+ * 1. The mbboDirect record is set to a specific value through the database.
+ * 2. The initial value is checked on both ends.
+ * 3. Two single bits (5 & 31) are toggled, values checked on both ends.
+ * 4. Sim mode is activated, one bit (0) is toggled, values are checked,
+ * data path (old value in val, new value in sim) is checked.
+ */
+
+#include