From ceccafe82353a8b91f52d72c46981111e43752b3 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Thu, 3 Jan 2019 09:15:32 -0800 Subject: [PATCH] mbbo/mbbiDirect number of bits as precision Not really useful w/ RSRV/CA, but can be used by QSRV/PVA to provide number of bits as meta-data. --- modules/database/src/std/rec/mbbiDirectRecord.c | 12 +++++++++++- modules/database/src/std/rec/mbboDirectRecord.c | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/modules/database/src/std/rec/mbbiDirectRecord.c b/modules/database/src/std/rec/mbbiDirectRecord.c index afb59c83f..779b732d4 100644 --- a/modules/database/src/std/rec/mbbiDirectRecord.c +++ b/modules/database/src/std/rec/mbbiDirectRecord.c @@ -51,7 +51,7 @@ static long special(DBADDR *, int); #define get_array_info NULL #define put_array_info NULL #define get_units NULL -#define get_precision NULL +static long get_precision(const DBADDR *, long *); #define get_enum_str NULL #define get_enum_strs NULL #define put_enum_str NULL @@ -204,6 +204,16 @@ static long special(DBADDR *paddr, int after) } } +static long get_precision(const DBADDR *paddr,long *precision) +{ + mbbiDirectRecord *prec=(mbbiDirectRecord *)paddr->precord; + if(dbGetFieldIndex(paddr)==mbbiDirectRecordVAL) + *precision = prec->nobt; + else + recGblGetPrec(paddr,precision); + return 0; +} + static void monitor(mbbiDirectRecord *prec) { epicsUInt16 events = recGblResetAlarms(prec); diff --git a/modules/database/src/std/rec/mbboDirectRecord.c b/modules/database/src/std/rec/mbboDirectRecord.c index 9260fbda1..dcc2b3c33 100644 --- a/modules/database/src/std/rec/mbboDirectRecord.c +++ b/modules/database/src/std/rec/mbboDirectRecord.c @@ -51,7 +51,7 @@ static long special(DBADDR *, int); #define get_array_info NULL #define put_array_info NULL #define get_units NULL -#define get_precision NULL +static long get_precision(const DBADDR *, long *); #define get_enum_str NULL #define get_enum_strs NULL #define put_enum_str NULL @@ -313,6 +313,16 @@ static long special(DBADDR *paddr, int after) return 0; } +static long get_precision(const DBADDR *paddr,long *precision) +{ + mbboDirectRecord *prec=(mbboDirectRecord *)paddr->precord; + if(dbGetFieldIndex(paddr)==mbboDirectRecordVAL) + *precision = prec->nobt; + else + recGblGetPrec(paddr,precision); + return 0; +} + static void monitor(mbboDirectRecord *prec) { epicsUInt16 events = recGblResetAlarms(prec);