pass amsg/utag through dbGet() options

This commit is contained in:
Michael Davidsaver
2020-04-15 20:26:37 -07:00
parent aad3476c04
commit 633859d7ab
8 changed files with 281 additions and 4 deletions

View File

@@ -359,6 +359,14 @@ static void getOptions(DBADDR *paddr, char **poriginal, long *options,
*pushort++ = pcommon->acks;
*pushort++ = pcommon->ackt;
pbuffer = (char *)pushort;
if (!pfl || pfl->type == dbfl_type_rec) {
STATIC_ASSERT(sizeof(pcommon->amsg)==sizeof(pfl->amsg));
strncpy(pbuffer, pcommon->amsg, sizeof(pcommon->amsg)-1);
} else {
strncpy(pbuffer, pfl->amsg,sizeof(pfl->amsg)-1);
}
pbuffer[sizeof(pcommon->amsg)-1] = '\0';
pbuffer += sizeof(pcommon->amsg);
}
if( (*options) & DBR_UNITS ) {
memset(pbuffer,'\0',dbr_units_size);
@@ -386,10 +394,13 @@ static void getOptions(DBADDR *paddr, char **poriginal, long *options,
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;
}
if( (*options) & DBR_ENUM_STRS )

View File

@@ -99,7 +99,8 @@ DBCORE_API extern int dbAccessDebugPUTF;
epicsUInt16 status; /* alarm status */\
epicsUInt16 severity; /* alarm severity*/\
epicsUInt16 acks; /* alarm ack severity*/\
epicsUInt16 ackt; /* Acknowledge transient alarms?*/
epicsUInt16 ackt; /* Acknowledge transient alarms?*/\
char amsg[40];
#define DB_UNITS_SIZE 16
#define DBRunits \
char units[DB_UNITS_SIZE]; /* units */
@@ -112,7 +113,9 @@ 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*/\
epicsInt32 utag;\
epicsInt32 padTime;
#define DBRenumStrs \
epicsUInt32 no_str; /* number of strings*/\
epicsInt32 padenumStrs; /*padding to force 8 byte align*/\

View File

@@ -675,7 +675,10 @@ static db_field_log* db_create_field_log (struct dbChannel *chan, int use_val)
struct dbCommon *prec = dbChannelRecord(chan);
pLog->stat = prec->stat;
pLog->sevr = prec->sevr;
strncpy(pLog->amsg, prec->amsg, sizeof(pLog->amsg)-1);
pLog->amsg[sizeof(pLog->amsg)-1] = '\0';
pLog->time = prec->time;
pLog->utag = prec->utag;
pLog->field_type = dbChannelFieldType(chan);
pLog->field_size = dbChannelFieldSize(chan);
pLog->no_elements = dbChannelElements(chan);

View File

@@ -113,8 +113,10 @@ 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;
unsigned short stat; /* Alarm Status */
unsigned short sevr; /* Alarm Severity */
char amsg[40];
short field_type; /* DBF type of data */
short field_size; /* Size of a single element */
long no_elements; /* No of valid array elements */