add alarm message field
This commit is contained in:
@@ -279,6 +279,11 @@ support routines which write to the VAL field are responsible for setting UDF.
|
||||
special(SPC_NOMOD)
|
||||
menu(menuAlarmSevr)
|
||||
}
|
||||
field(AMSG,DBF_STRING) {
|
||||
prompt("Alarm Message")
|
||||
special(SPC_NOMOD)
|
||||
size(40)
|
||||
}
|
||||
field(NSTA,DBF_MENU) {
|
||||
prompt("New Alarm Status")
|
||||
special(SPC_NOMOD)
|
||||
@@ -291,6 +296,11 @@ support routines which write to the VAL field are responsible for setting UDF.
|
||||
interest(2)
|
||||
menu(menuAlarmSevr)
|
||||
}
|
||||
field(NAMSG,DBF_STRING) {
|
||||
prompt("New Alarm Message")
|
||||
special(SPC_NOMOD)
|
||||
size(40)
|
||||
}
|
||||
field(ACKS,DBF_MENU) {
|
||||
prompt("Alarm Ack Severity")
|
||||
special(SPC_NOMOD)
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "epicsMath.h"
|
||||
#include "epicsPrint.h"
|
||||
#include "epicsStdlib.h"
|
||||
#include "epicsStdio.h"
|
||||
#include "epicsTime.h"
|
||||
#include "errlog.h"
|
||||
|
||||
@@ -184,6 +185,11 @@ unsigned short recGblResetAlarms(void *precord)
|
||||
if (new_sevr > INVALID_ALARM)
|
||||
new_sevr = INVALID_ALARM;
|
||||
|
||||
if(strcmp(pdbc->namsg, pdbc->amsg)!=0) {
|
||||
strcpy(pdbc->amsg, pdbc->namsg);
|
||||
stat_mask = DBE_ALARM;
|
||||
}
|
||||
|
||||
pdbc->stat = new_stat;
|
||||
pdbc->sevr = new_sevr;
|
||||
pdbc->nsta = 0;
|
||||
@@ -198,6 +204,7 @@ unsigned short recGblResetAlarms(void *precord)
|
||||
}
|
||||
if (stat_mask) {
|
||||
db_post_events(pdbc, &pdbc->stat, stat_mask);
|
||||
db_post_events(pdbc, &pdbc->amsg, stat_mask);
|
||||
val_mask = DBE_ALARM;
|
||||
|
||||
if (!pdbc->ackt || new_sevr >= pdbc->acks) {
|
||||
@@ -211,18 +218,44 @@ unsigned short recGblResetAlarms(void *precord)
|
||||
}
|
||||
return val_mask;
|
||||
}
|
||||
int recGblSetSevrMsg(void *precord, epicsEnum16 new_stat,
|
||||
epicsEnum16 new_sevr,
|
||||
const char *msg, ...)
|
||||
{
|
||||
int ret;
|
||||
va_list args;
|
||||
va_start(args, msg);
|
||||
ret = recGblSetSevrVMsg(precord, new_stat, new_sevr, msg, args);
|
||||
va_end(args);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int recGblSetSevr(void *precord, epicsEnum16 new_stat, epicsEnum16 new_sevr)
|
||||
int recGblSetSevrVMsg(void *precord, epicsEnum16 new_stat,
|
||||
epicsEnum16 new_sevr,
|
||||
const char *msg, va_list args)
|
||||
{
|
||||
struct dbCommon *prec = precord;
|
||||
if (prec->nsev < new_sevr) {
|
||||
prec->nsta = new_stat;
|
||||
prec->nsev = new_sevr;
|
||||
if(msg) {
|
||||
epicsVsnprintf(prec->namsg, sizeof(prec->namsg)-1, msg, args);
|
||||
prec->namsg[sizeof(prec->namsg)-1] = '\0';
|
||||
|
||||
} else {
|
||||
prec->namsg[0] = '\0';
|
||||
}
|
||||
prec->namsg[sizeof(prec->namsg)-1] = '\0';
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int recGblSetSevr(void *precord, epicsEnum16 new_stat, epicsEnum16 new_sevr)
|
||||
{
|
||||
return recGblSetSevrMsg(precord, new_stat, new_sevr, NULL);
|
||||
}
|
||||
|
||||
void recGblInheritSevr(int msMode, void *precord, epicsEnum16 stat,
|
||||
epicsEnum16 sevr)
|
||||
{
|
||||
|
||||
@@ -15,6 +15,9 @@
|
||||
#ifndef INCrecGblh
|
||||
#define INCrecGblh 1
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "compilerDependencies.h"
|
||||
#include "epicsTypes.h"
|
||||
#include "dbCoreAPI.h"
|
||||
|
||||
@@ -62,6 +65,12 @@ DBCORE_API int recGblSetSevr(void *precord, epicsEnum16 new_stat,
|
||||
epicsEnum16 new_sevr);
|
||||
DBCORE_API void recGblInheritSevr(int msMode, void *precord, epicsEnum16 stat,
|
||||
epicsEnum16 sevr);
|
||||
DBCORE_API int recGblSetSevrMsg(void *precord, epicsEnum16 new_stat,
|
||||
epicsEnum16 new_sevr,
|
||||
const char *msg, ...) EPICS_PRINTF_STYLE(4,5);
|
||||
DBCORE_API int recGblSetSevrVMsg(void *precord, epicsEnum16 new_stat,
|
||||
epicsEnum16 new_sevr,
|
||||
const char *msg, va_list args);
|
||||
DBCORE_API void recGblFwdLink(void *precord);
|
||||
DBCORE_API void recGblGetTimeStamp(void *precord);
|
||||
DBCORE_API void recGblGetTimeStampSimm(void *prec, const epicsEnum16 simm, struct link *siol);
|
||||
|
||||
Reference in New Issue
Block a user