From bd3ecf1cbc635efe74723329336262b97a4f40f3 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Sat, 6 Feb 2021 10:36:42 -0800 Subject: [PATCH] Split out amsg/utag options through dbGet() --- modules/database/src/ioc/db/dbAccess.c | 14 ++++++---- modules/database/src/ioc/db/dbAccessDefs.h | 31 ++++++++++++--------- modules/database/test/ioc/db/dbPutGetTest.c | 6 +++- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/modules/database/src/ioc/db/dbAccess.c b/modules/database/src/ioc/db/dbAccess.c index 28c8a2b61..65deba6d6 100644 --- a/modules/database/src/ioc/db/dbAccess.c +++ b/modules/database/src/ioc/db/dbAccess.c @@ -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); diff --git a/modules/database/src/ioc/db/dbAccessDefs.h b/modules/database/src/ioc/db/dbAccessDefs.h index bc0ef1f02..771084170 100644 --- a/modules/database/src/ioc/db/dbAccessDefs.h +++ b/modules/database/src/ioc/db/dbAccessDefs.h @@ -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*/\ diff --git a/modules/database/test/ioc/db/dbPutGetTest.c b/modules/database/test/ioc/db/dbPutGetTest.c index 2968f388b..e1492a5a9 100644 --- a/modules/database/test/ioc/db/dbPutGetTest.c +++ b/modules/database/test/ioc/db/dbPutGetTest.c @@ -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;