Merge changes from 3.16 branch into 7.0

This commit is contained in:
Andrew Johnson
2018-06-20 21:42:43 -05:00
39 changed files with 1207 additions and 330 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -146,9 +146,9 @@ Note: Negative index numbers address from the end of the array, with C<-1> being
=item Square bracket notation C<[start:increment:end]> (shorthand)
The common square bracket notation with can be used in place of JSON.
The common square bracket notation which can be used in place of JSON.
Any parameter may be omitted (keeping the colons) to use the default value.
If only one colon is included, this means C<[start:end]> with a increment of 1.
If only one colon is included, this means C<[start:end]> with an increment of 1.
If only a single parameter is used C<[index]> the filter returns one element.
=item Start index C<"s">

View File

@@ -22,6 +22,7 @@
#include "dbDefs.h"
#include "epicsPrint.h"
#include "epicsMath.h"
#include "alarm.h"
#include "callback.h"
#include "dbAccess.h"
@@ -248,15 +249,17 @@ static long get_alarm_double(DBADDR *paddr, struct dbr_alDouble *pad)
{
longinRecord *prec=(longinRecord *)paddr->precord;
if(dbGetFieldIndex(paddr) == indexof(VAL)){
pad->upper_alarm_limit = prec->hihi;
pad->upper_warning_limit = prec->high;
pad->lower_warning_limit = prec->low;
pad->lower_alarm_limit = prec->lolo;
} else recGblGetAlarmDouble(paddr,pad);
return(0);
if (dbGetFieldIndex(paddr) == indexof(VAL)){
pad->upper_alarm_limit = prec->hhsv ? prec->hihi : epicsNAN;
pad->upper_warning_limit = prec->hsv ? prec->high : epicsNAN;
pad->lower_warning_limit = prec->lsv ? prec->low : epicsNAN;
pad->lower_alarm_limit = prec->llsv ? prec->lolo : epicsNAN;
}
else
recGblGetAlarmDouble(paddr,pad);
return 0;
}
static void checkAlarms(longinRecord *prec, epicsTimeStamp *timeLast)
{
enum {

View File

@@ -19,6 +19,7 @@
#include "dbDefs.h"
#include "epicsPrint.h"
#include "epicsMath.h"
#include "alarm.h"
#include "callback.h"
#include "dbAccess.h"
@@ -282,15 +283,17 @@ static long get_alarm_double(DBADDR *paddr,struct dbr_alDouble *pad)
{
longoutRecord *prec=(longoutRecord *)paddr->precord;
if(dbGetFieldIndex(paddr) == indexof(VAL)) {
pad->upper_alarm_limit = prec->hihi;
pad->upper_warning_limit = prec->high;
pad->lower_warning_limit = prec->low;
pad->lower_alarm_limit = prec->lolo;
} else recGblGetAlarmDouble(paddr,pad);
return(0);
if (dbGetFieldIndex(paddr) == indexof(VAL)) {
pad->upper_alarm_limit = prec->hhsv ? prec->hihi : epicsNAN;
pad->upper_warning_limit = prec->hsv ? prec->high : epicsNAN;
pad->lower_warning_limit = prec->lsv ? prec->low : epicsNAN;
pad->lower_alarm_limit = prec->llsv ? prec->lolo : epicsNAN;
}
else
recGblGetAlarmDouble(paddr,pad);
return 0;
}
static void checkAlarms(longoutRecord *prec)
{
epicsInt32 val, hyst, lalm;

View File

@@ -6,10 +6,10 @@
* Copyright (c) 2002 Southeastern Universities Research Association, as
* Operator of Thomas Jefferson National Accelerator Facility.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* 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
@@ -93,7 +93,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)
}
recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml);
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);
}
@@ -208,7 +208,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;

View File

@@ -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) {
@@ -151,32 +151,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)
}

View File

@@ -95,7 +95,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)
{
@@ -117,7 +117,7 @@ static long init_record(struct dbCommon *pcommon, int pass)
recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml);
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 */
@@ -142,8 +142,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;
@@ -175,9 +175,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;
}
@@ -185,11 +185,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;
@@ -264,7 +264,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;
@@ -278,9 +278,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)
@@ -289,8 +289,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;
@@ -362,7 +362,7 @@ static long writeValue(mbboDirectRecord *prec)
case menuYesNoYES: {
recGblSetSevr(prec, SIMM_ALARM, prec->sims);
if (prec->pact || (prec->sdly < 0.)) {
status = dbPutLink(&prec->siol, DBR_USHORT, &prec->val, 1);
status = dbPutLink(&prec->siol, DBR_ULONG, &prec->val, 1);
prec->pact = FALSE;
} else { /* !prec->pact && delay >= 0. */
CALLBACK *pvt = prec->simpvt;

View File

@@ -7,8 +7,8 @@
# in file LICENSE that is included with this distribution.
#*************************************************************************
recordtype(mbboDirect) {
include "dbCommon.dbd"
field(VAL,DBF_USHORT) {
include "dbCommon.dbd"
field(VAL,DBF_LONG) {
prompt("Word")
promptgroup("50 - Output")
asl(ASL0)
@@ -38,6 +38,99 @@ 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("Simulation Output Link")
promptgroup("90 - Simulate")
interest(1)
}
field(SIML,DBF_INLINK) {
prompt("Simulation Mode Link")
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
prompt("Simulation Mode")
special(SPC_MOD)
interest(1)
menu(menuYesNo)
}
field(SIMS,DBF_MENU) {
prompt("Simulation Mode Severity")
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
field(OLDSIMM,DBF_MENU) {
prompt("Prev. Simulation Mode")
special(SPC_NOMOD)
interest(4)
menu(menuSimm)
}
field(SSCN,DBF_MENU) {
prompt("Sim. Mode Scan")
promptgroup("90 - Simulate")
interest(1)
menu(menuScan)
initial("65535")
}
field(SDLY,DBF_DOUBLE) {
prompt("Sim. Mode Async Delay")
promptgroup("90 - Simulate")
interest(2)
initial("-1.0")
}
%#include "callback.h"
field(SIMPVT,DBF_NOACCESS) {
prompt("Sim. Mode Private")
special(SPC_NOMOD)
interest(4)
extra("CALLBACK *simpvt")
}
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,151 +189,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)
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")
interest(1)
}
field(SIOL,DBF_OUTLINK) {
prompt("Simulation Output Link")
promptgroup("90 - Simulate")
interest(1)
}
field(SIML,DBF_INLINK) {
prompt("Simulation Mode Link")
promptgroup("90 - Simulate")
interest(1)
}
field(SIMM,DBF_MENU) {
prompt("Simulation Mode")
field(B10,DBF_UCHAR) {
prompt("Bit 16")
promptgroup("53 - Output 16-23")
special(SPC_MOD)
pp(TRUE)
interest(1)
menu(menuYesNo)
}
field(SIMS,DBF_MENU) {
prompt("Simulation Mode Severity")
promptgroup("90 - Simulate")
interest(2)
menu(menuAlarmSevr)
}
field(OLDSIMM,DBF_MENU) {
prompt("Prev. Simulation Mode")
special(SPC_NOMOD)
interest(4)
menu(menuSimm)
}
field(SSCN,DBF_MENU) {
prompt("Sim. Mode Scan")
promptgroup("90 - Simulate")
field(B11,DBF_UCHAR) {
prompt("Bit 17")
promptgroup("53 - Output 16-23")
special(SPC_MOD)
pp(TRUE)
interest(1)
menu(menuScan)
initial("65535")
}
field(SDLY,DBF_DOUBLE) {
prompt("Sim. Mode Async Delay")
promptgroup("90 - Simulate")
interest(2)
initial("-1.0")
field(B12,DBF_UCHAR) {
prompt("Bit 18")
promptgroup("53 - Output 16-23")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
%#include "callback.h"
field(SIMPVT,DBF_NOACCESS) {
prompt("Sim. Mode Private")
special(SPC_NOMOD)
interest(4)
extra("CALLBACK *simpvt")
field(B13,DBF_UCHAR) {
prompt("Bit 19")
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(B14,DBF_UCHAR) {
prompt("Bit 20")
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(B15,DBF_UCHAR) {
prompt("Bit 21")
promptgroup("53 - Output 16-23")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
field(B16,DBF_UCHAR) {
prompt("Bit 22")
promptgroup("53 - Output 16-23")
special(SPC_MOD)
pp(TRUE)
interest(1)
}
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)
}
}

View File

@@ -34,12 +34,13 @@
/* Flag bits */
#define F_CHAR 1
#define F_SHORT 2
#define F_LONG 4
#define F_LEFT 8
#define F_BADFMT 0x10
#define F_BADLNK 0x20
#define F_CHAR 1
#define F_SHORT 2
#define F_LONG 4
#define F_LONGLONG 8
#define F_LEFT 0x10
#define F_BADFMT 0x40
#define F_BADLNK 0x80
#define F_BAD (F_BADFMT | F_BADLNK)
#define GET_PRINT(VALTYPE, DBRTYPE) \
@@ -129,13 +130,20 @@ static void doPrintf(printfRecord *prec)
flags |= F_BADLNK;
break;
case 'h':
if (flags & F_SHORT)
if (flags & (F_LONGLONG | F_LONG | F_CHAR))
flags |= F_BADFMT;
else if (flags & F_SHORT)
flags = (flags & ~F_SHORT) | F_CHAR;
else
flags |= F_SHORT;
break;
case 'l':
flags |= F_LONG;
if (flags & (F_LONGLONG | F_SHORT | F_CHAR))
flags |= F_BADFMT;
else if (flags & F_LONG)
flags = (flags & ~F_LONG) | F_LONGLONG;
else
flags |= F_LONG;
break;
default:
if (strchr("diouxXeEfFgGcs%", ch) == NULL)
@@ -175,6 +183,9 @@ static void doPrintf(printfRecord *prec)
else if (flags & F_SHORT) {
GET_PRINT(epicsInt16, DBR_SHORT);
}
else if (flags & F_LONGLONG) {
GET_PRINT(epicsInt64, DBR_INT64);
}
else { /* F_LONG has no real effect */
GET_PRINT(epicsInt32, DBR_LONG);
}
@@ -187,6 +198,9 @@ static void doPrintf(printfRecord *prec)
else if (flags & F_SHORT) {
GET_PRINT(epicsUInt16, DBR_USHORT);
}
else if (flags & F_LONGLONG) {
GET_PRINT(epicsUInt64, DBR_UINT64);
}
else { /* F_LONG has no real effect */
GET_PRINT(epicsUInt32, DBR_ULONG);
}