Split out amsg/utag options through dbGet()

This commit is contained in:
Michael Davidsaver
2021-02-06 10:36:42 -08:00
parent b94afaa045
commit bd3ecf1cbc
3 changed files with 32 additions and 19 deletions

View File

@@ -359,6 +359,8 @@ static void getOptions(DBADDR *paddr, char **poriginal, long *options,
*pushort++ = pcommon->acks;
*pushort++ = pcommon->ackt;
pbuffer = (char *)pushort;
}
if( (*options) & DBR_AMSG ) {
if (!pfl || pfl->type == dbfl_type_rec) {
STATIC_ASSERT(sizeof(pcommon->amsg)==sizeof(pfl->amsg));
strncpy(pbuffer, pcommon->amsg, sizeof(pcommon->amsg)-1);
@@ -390,7 +392,6 @@ static void getOptions(DBADDR *paddr, char **poriginal, long *options,
}
if( (*options) & DBR_TIME ) {
epicsUInt32 *ptime = (epicsUInt32 *)pbuffer;
epicsUInt64 *ptime64;
if (!pfl) {
*ptime++ = pcommon->time.secPastEpoch;
@@ -399,13 +400,16 @@ static void getOptions(DBADDR *paddr, char **poriginal, long *options,
*ptime++ = pfl->time.secPastEpoch;
*ptime++ = pfl->time.nsec;
}
ptime64 = (epicsUInt64*)ptime;
pbuffer = (char *)ptime;
}
if( (*options) & DBR_UTAG ) {
epicsUInt64 *ptag = (epicsUInt64*)pbuffer;
if (!pfl || pfl->type == dbfl_type_rec) {
*ptime64++ = pcommon->utag;
*ptag++ = pcommon->utag;
} else {
*ptime64++ = pfl->utag;
*ptag++ = pfl->utag;
}
pbuffer = (char *)ptime64;
pbuffer = (char *)ptag;
}
if( (*options) & DBR_ENUM_STRS )
get_enum_strs(paddr, &pbuffer, prset, options);

View File

@@ -33,16 +33,18 @@ DBCORE_API extern int dbAccessDebugPUTF;
/* The database field and request types are defined in dbFldTypes.h*/
/* Data Base Request Options */
#define DBR_STATUS 0x00000001
#define DBR_UNITS 0x00000002
#define DBR_PRECISION 0x00000004
#define DBR_TIME 0x00000008
#define DBR_ENUM_STRS 0x00000010
#define DBR_GR_LONG 0x00000020
#define DBR_GR_DOUBLE 0x00000040
#define DBR_CTRL_LONG 0x00000080
#define DBR_CTRL_DOUBLE 0x00000100
#define DBR_AL_LONG 0x00000200
#define DBR_AL_DOUBLE 0x00000400
#define DBR_AMSG 0x00000002
#define DBR_UNITS 0x00000004
#define DBR_PRECISION 0x00000008
#define DBR_TIME 0x00000010
#define DBR_UTAG 0x00000020
#define DBR_ENUM_STRS 0x00000040
#define DBR_GR_LONG 0x00000080
#define DBR_GR_DOUBLE 0x00000100
#define DBR_CTRL_LONG 0x00000200
#define DBR_CTRL_DOUBLE 0x00000400
#define DBR_AL_LONG 0x00000800
#define DBR_AL_DOUBLE 0x00001000
/**********************************************************************
* The next page contains macros for defining requests.
@@ -99,8 +101,10 @@ DBCORE_API extern int dbAccessDebugPUTF;
epicsUInt16 status; /* alarm status */\
epicsUInt16 severity; /* alarm severity*/\
epicsUInt16 acks; /* alarm ack severity*/\
epicsUInt16 ackt; /* Acknowledge transient alarms?*/\
char amsg[40];
epicsUInt16 ackt; /* Acknowledge transient alarms?*/
#define DB_AMSG_SIZE 40
#define DBRamsg \
char amsg[DB_AMSG_SIZE];
#define DB_UNITS_SIZE 16
#define DBRunits \
char units[DB_UNITS_SIZE]; /* units */
@@ -113,7 +117,8 @@ DBCORE_API extern int dbAccessDebugPUTF;
* too late to change now. DBRprecision must be padded to
* maintain 8-byte alignment. */
#define DBRtime \
epicsTimeStamp time; /* time stamp*/\
epicsTimeStamp time; /* time stamp*/
#define DBRutag \
epicsUTag utag;
#define DBRenumStrs \
epicsUInt32 no_str; /* number of strings*/\

View File

@@ -20,15 +20,17 @@
typedef struct {
DBRstatus
DBRamsg
DBRunits
DBRprecision
DBRtime
DBRutag
DBRgrDouble
DBRctrlDouble
DBRalDouble
} dbMetaDouble;
enum {dbMetaDoubleMask = DBR_STATUS | DBR_UNITS | DBR_PRECISION | DBR_TIME | DBR_GR_DOUBLE | DBR_CTRL_DOUBLE | DBR_AL_DOUBLE};
enum {dbMetaDoubleMask = DBR_STATUS | DBR_AMSG | DBR_UNITS | DBR_PRECISION | DBR_TIME | DBR_UTAG | DBR_GR_DOUBLE | DBR_CTRL_DOUBLE | DBR_AL_DOUBLE};
static
void testdbMetaDoubleSizes(void)
@@ -153,7 +155,9 @@ void testdbMetaDoubleGet(void)
typedef struct {
DBRstatus
DBRamsg
DBRtime
DBRutag
DBRenumStrs
} dbMetaEnum;