propagate utag w/ links (including TSEL)
add lset::getTimestampTag()
This commit is contained in:
@@ -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,
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user