diff --git a/modules/database/src/ioc/db/dbAccess.c b/modules/database/src/ioc/db/dbAccess.c index ac4cec958..28c8a2b61 100644 --- a/modules/database/src/ioc/db/dbAccess.c +++ b/modules/database/src/ioc/db/dbAccess.c @@ -390,18 +390,22 @@ 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; *ptime++ = pcommon->time.nsec; - *ptime++ = pcommon->utag; } else { *ptime++ = pfl->time.secPastEpoch; *ptime++ = pfl->time.nsec; - *ptime++ = pfl->utag; } - *ptime++ = 0; /* padding */ - pbuffer = (char *)ptime; + ptime64 = (epicsUInt64*)ptime; + if (!pfl || pfl->type == dbfl_type_rec) { + *ptime64++ = pcommon->utag; + } else { + *ptime64++ = pfl->utag; + } + pbuffer = (char *)ptime64; } 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 32778451f..bc0ef1f02 100644 --- a/modules/database/src/ioc/db/dbAccessDefs.h +++ b/modules/database/src/ioc/db/dbAccessDefs.h @@ -114,8 +114,7 @@ DBCORE_API extern int dbAccessDebugPUTF; * maintain 8-byte alignment. */ #define DBRtime \ epicsTimeStamp time; /* time stamp*/\ - epicsInt32 utag;\ - epicsInt32 padTime; + epicsUTag utag; #define DBRenumStrs \ epicsUInt32 no_str; /* number of strings*/\ epicsInt32 padenumStrs; /*padding to force 8 byte align*/\ diff --git a/modules/database/src/ioc/db/dbCommon.dbd.pod b/modules/database/src/ioc/db/dbCommon.dbd.pod index 509982cfc..5ad4627c5 100644 --- a/modules/database/src/ioc/db/dbCommon.dbd.pod +++ b/modules/database/src/ioc/db/dbCommon.dbd.pod @@ -524,7 +524,7 @@ field which is then used to acquire a timestamp. interest(2) extra("epicsTimeStamp time") } - field(UTAG,DBF_LONG) { + field(UTAG,DBF_UINT64) { prompt("Time Tag") special(SPC_NOMOD) interest(3) diff --git a/modules/database/src/ioc/db/dbDbLink.c b/modules/database/src/ioc/db/dbDbLink.c index 442e9f48d..db7f67cb2 100644 --- a/modules/database/src/ioc/db/dbDbLink.c +++ b/modules/database/src/ioc/db/dbDbLink.c @@ -359,7 +359,7 @@ static long dbDbGetAlarm(const struct link *plink, epicsEnum16 *status, return dbDbGetAlarmMsg(plink, status, severity, NULL, 0u); } -static long dbDbGetTimeStampTag(const struct link *plink, epicsTimeStamp *pstamp, epicsInt32 *ptag) +static long dbDbGetTimeStampTag(const struct link *plink, epicsTimeStamp *pstamp, epicsUTag *ptag) { dbChannel *chan = linkChannel(plink); dbCommon *precord = dbChannelRecord(chan); diff --git a/modules/database/src/ioc/db/dbLink.c b/modules/database/src/ioc/db/dbLink.c index 5e13c4a4e..c9f9137ca 100644 --- a/modules/database/src/ioc/db/dbLink.c +++ b/modules/database/src/ioc/db/dbLink.c @@ -427,7 +427,7 @@ long dbGetTimeStamp(const struct link *plink, epicsTimeStamp *pstamp) } long dbGetTimeStampTag(const struct link *plink, - epicsTimeStamp *pstamp, epicsInt32 *ptag) + epicsTimeStamp *pstamp, epicsUTag *ptag) { lset *plset = plink->lset; diff --git a/modules/database/src/ioc/db/dbLink.h b/modules/database/src/ioc/db/dbLink.h index 384ff8fe4..6bab6d993 100644 --- a/modules/database/src/ioc/db/dbLink.h +++ b/modules/database/src/ioc/db/dbLink.h @@ -385,7 +385,7 @@ typedef struct lset { * * @since Added after UNRELEASED */ - long (*getTimeStampTag)(const struct link *plink, epicsTimeStamp *pstamp, epicsInt32 *ptag); + long (*getTimeStampTag)(const struct link *plink, epicsTimeStamp *pstamp, epicsUTag *ptag); } lset; #define dbGetSevr(link, sevr) \ @@ -439,7 +439,7 @@ DBCORE_API long dbGetTimeStamp(const struct link *plink, epicsTimeStamp *pstamp); /** @since UNRELEASED */ DBCORE_API long dbGetTimeStampTag(const struct link *plink, - epicsTimeStamp *pstamp, epicsInt32 *ptag); + epicsTimeStamp *pstamp, epicsUTag *ptag); #define dbGetTimeStampTag(LINK, STAMP, TAG) dbGetTimeStampTag(LINK, STAMP, TAG) DBCORE_API long dbPutLink(struct link *plink, short dbrType, const void *pbuffer, long nRequest); diff --git a/modules/database/src/ioc/db/db_field_log.h b/modules/database/src/ioc/db/db_field_log.h index 1b759eb20..b9deb6fe9 100644 --- a/modules/database/src/ioc/db/db_field_log.h +++ b/modules/database/src/ioc/db/db_field_log.h @@ -113,7 +113,7 @@ typedef struct db_field_log { unsigned char mask; /* DBE_* mask */ /* the following are used for value and reference types */ epicsTimeStamp time; /* Time stamp */ - epicsInt32 utag; + epicsUTag utag; unsigned short stat; /* Alarm Status */ unsigned short sevr; /* Alarm Severity */ char amsg[40]; diff --git a/modules/database/src/std/filters/utag.c b/modules/database/src/std/filters/utag.c index 4f19947d0..21faa097c 100644 --- a/modules/database/src/std/filters/utag.c +++ b/modules/database/src/std/filters/utag.c @@ -47,7 +47,7 @@ static int parse_ok(void *raw) static db_field_log* filter(void* raw, dbChannel *chan, db_field_log *pfl) { utagPvt *pvt = (utagPvt*)raw; - epicsInt32 utag = pfl->type==dbfl_type_rec ? dbChannelRecord(chan)->utag : pfl->utag; + epicsUTag utag = pfl->type==dbfl_type_rec ? dbChannelRecord(chan)->utag : pfl->utag; int drop = (utag&pvt->mask)!=pvt->value; if(pfl->ctx!=dbfl_context_event || pfl->mask&DBE_PROPERTY) { diff --git a/modules/database/src/std/link/lnkCalc.c b/modules/database/src/std/link/lnkCalc.c index 9b8421cb9..01eff15f4 100644 --- a/modules/database/src/std/link/lnkCalc.c +++ b/modules/database/src/std/link/lnkCalc.c @@ -67,7 +67,7 @@ typedef struct calc_link { struct link out; double arg[CALCPERFORM_NARGS]; epicsTimeStamp time; - epicsInt32 utag; + epicsUTag utag; double val; } calc_link; @@ -535,7 +535,7 @@ static long lnkCalc_getElements(const struct link *plink, long *nelements) struct lcvt { double *pval; epicsTimeStamp *ptime; - epicsInt32 *ptag; + epicsUTag *ptag; }; static long readLocked(struct link *pinp, void *vvt) @@ -754,7 +754,7 @@ static long lnkCalc_getAlarm(const struct link *plink, epicsEnum16 *status, return lnkCalc_getAlarmMsg(plink, status, severity, NULL, 0u); } -static long lnkCalc_getTimestampTag(const struct link *plink, epicsTimeStamp *pstamp, epicsInt32 *ptag) +static long lnkCalc_getTimestampTag(const struct link *plink, epicsTimeStamp *pstamp, epicsUTag *ptag) { calc_link *clink = CONTAINER(plink->value.json.jlink, struct calc_link, jlink); diff --git a/modules/database/test/ioc/db/dbDbLinkTest.c b/modules/database/test/ioc/db/dbDbLinkTest.c index 08f414cec..489df4daf 100644 --- a/modules/database/test/ioc/db/dbDbLinkTest.c +++ b/modules/database/test/ioc/db/dbDbLinkTest.c @@ -26,7 +26,7 @@ static void checkTime(void) { epicsTimeStamp stamp; - epicsInt32 tag; + epicsUTag tag; dbCommon* target = testdbRecordPtr("target"); dbCommon* src = testdbRecordPtr("src"); diff --git a/modules/database/test/ioc/db/dbPutGetTest.c b/modules/database/test/ioc/db/dbPutGetTest.c index 7de087043..2968f388b 100644 --- a/modules/database/test/ioc/db/dbPutGetTest.c +++ b/modules/database/test/ioc/db/dbPutGetTest.c @@ -51,7 +51,6 @@ void testdbMetaDoubleSizes(void) testOffset(precision); testOffset(time); testOffset(utag); - testOffset(padTime); testOffset(upper_disp_limit); testOffset(lower_disp_limit); testOffset(upper_ctrl_limit); @@ -177,7 +176,6 @@ void testdbMetaEnumSizes(void) testOffset(amsg); testOffset(time); testOffset(utag); - testOffset(padTime); testOffset(no_str); testOffset(padenumStrs); testOffset(strs); @@ -315,7 +313,7 @@ void dbTestIoc_registerRecordDeviceDriver(struct dbBase *); MAIN(dbPutGet) { - testPlan(113); + testPlan(111); testdbPrepare(); testdbMetaDoubleSizes(); diff --git a/modules/libcom/src/osi/epicsTime.h b/modules/libcom/src/osi/epicsTime.h index 0c3587fef..090fb5c48 100644 --- a/modules/libcom/src/osi/epicsTime.h +++ b/modules/libcom/src/osi/epicsTime.h @@ -36,6 +36,10 @@ typedef struct epicsTimeStamp { epicsUInt32 nsec; /**< \brief nanoseconds within second */ } epicsTimeStamp; +/** \brief Type of UTAG field (dbCommon::utag) + */ +typedef epicsUInt64 epicsUTag; + /** \brief Old time-stamp data type, deprecated. * \deprecated TS_STAMP was provided for compatibility with Base-3.13 code. * It will be removed in some future release of EPICS 7.