propagate utag w/ links (including TSEL)

add lset::getTimestampTag()
This commit is contained in:
Michael Davidsaver
2021-04-05 10:31:25 -07:00
parent 4ca765d813
commit 12f1818b39
5 changed files with 51 additions and 9 deletions
+9 -1
View File
@@ -359,14 +359,21 @@ static long dbDbGetAlarm(const struct link *plink, epicsEnum16 *status,
return dbDbGetAlarmMsg(plink, status, severity, NULL, 0u);
}
static long dbDbGetTimeStamp(const struct link *plink, epicsTimeStamp *pstamp)
static long dbDbGetTimeStampTag(const struct link *plink, epicsTimeStamp *pstamp, epicsInt32 *ptag)
{
dbChannel *chan = linkChannel(plink);
dbCommon *precord = dbChannelRecord(chan);
*pstamp = precord->time;
if(ptag)
*ptag = precord->utag;
return 0;
}
static long dbDbGetTimeStamp(const struct link *plink, epicsTimeStamp *pstamp)
{
return dbDbGetTimeStampTag(plink, pstamp, NULL);
}
static long dbDbPutValue(struct link *plink, short dbrType,
const void *pbuffer, long nRequest)
{
@@ -415,6 +422,7 @@ static lset dbDb_lset = {
dbDbPutValue, NULL,
dbDbScanFwdLink, doLocked,
dbDbGetAlarmMsg,
dbDbGetTimeStampTag,
};
+12 -3
View File
@@ -422,13 +422,22 @@ long dbGetAlarmMsg(const struct link *plink, epicsEnum16 *status,
}
long dbGetTimeStamp(const struct link *plink, epicsTimeStamp *pstamp)
{
return dbGetTimeStampTag(plink, pstamp, NULL);
}
long dbGetTimeStampTag(const struct link *plink,
epicsTimeStamp *pstamp, epicsInt32 *ptag)
{
lset *plset = plink->lset;
if (!plset || !plset->getTimeStamp)
if (plset && plset->getTimeStampTag) {
return plset->getTimeStampTag(plink, pstamp, ptag);
} else if(plset && plset->getTimeStamp) {
return plset->getTimeStamp(plink, pstamp);
} else {
return S_db_noLSET;
return plset->getTimeStamp(plink, pstamp);
}
}
long dbPutLink(struct link *plink, short dbrType, const void *pbuffer,
+13
View File
@@ -377,6 +377,15 @@ typedef struct lset {
*/
long (*getAlarmMsg)(const struct link *plink, epicsEnum16 *status,
epicsEnum16 *severity, char *msgbuf, size_t msgbuflen);
/** @brief Extended version of getTimeStamp
*
* Equivalent of getTimeStamp() and also copy out time tag.
* ptag may be NULL.
*
* @since Added after UNRELEASED
*/
long (*getTimeStampTag)(const struct link *plink, epicsTimeStamp *pstamp, epicsInt32 *ptag);
} lset;
#define dbGetSevr(link, sevr) \
@@ -428,6 +437,10 @@ DBCORE_API long dbGetAlarmMsg(const struct link *plink, epicsEnum16 *status,
#define dbGetAlarmMsg(LINK, STAT, SEVR, BUF, BUFLEN) dbGetAlarmMsg(LINK, STAT, SEVR, BUF, BUFLEN)
DBCORE_API long dbGetTimeStamp(const struct link *plink,
epicsTimeStamp *pstamp);
/** @since UNRELEASED */
DBCORE_API long dbGetTimeStampTag(const struct link *plink,
epicsTimeStamp *pstamp, epicsInt32 *ptag);
#define dbGetTimeStampTag(LINK, STAMP, TAG) dbGetTimeStampTag(LINK, STAMP, TAG)
DBCORE_API long dbPutLink(struct link *plink, short dbrType,
const void *pbuffer, long nRequest);
DBCORE_API void dbLinkAsyncComplete(struct link *plink);
+1 -1
View File
@@ -304,7 +304,7 @@ void recGblGetTimeStampSimm(void *pvoid, const epicsEnum16 simm, struct link *si
if (!dbLinkIsConstant(plink)) {
if (plink->flags & DBLINK_FLAG_TSELisTIME) {
if (dbGetTimeStamp(plink, &prec->time))
if (dbGetTimeStampTag(plink, &prec->time, &prec->utag))
errlogPrintf("recGblGetTimeStamp: dbGetTimeStamp failed for %s.TSEL\n",
prec->name);
return;