From ca22d508312b823b3d686206ea8d16cdda2c1c11 Mon Sep 17 00:00:00 2001 From: Ralph Lange Date: Thu, 10 May 2018 10:39:11 -0400 Subject: [PATCH 1/2] rec: consistent get_alarm_double() for longin/longout (fixes lp #1770292) --- src/rec/longinRecord.c | 8 ++++---- src/rec/longoutRecord.c | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/rec/longinRecord.c b/src/rec/longinRecord.c index 58d9ccfbf..12da09c60 100644 --- a/src/rec/longinRecord.c +++ b/src/rec/longinRecord.c @@ -201,10 +201,10 @@ static long get_alarm_double(DBADDR *paddr, struct dbr_alDouble *pad) longinRecord *prec=(longinRecord *)paddr->precord; if(paddr->pfield==(void *)&prec->val){ - pad->upper_alarm_limit = prec->hihi; - pad->upper_warning_limit = prec->high; - pad->lower_warning_limit = prec->low; - pad->lower_alarm_limit = prec->lolo; + pad->upper_alarm_limit = prec->hhsv ? prec->hihi : epicsNAN; + pad->upper_warning_limit = prec->hsv ? prec->high : epicsNAN; + pad->lower_warning_limit = prec->lsv ? prec->low : epicsNAN; + pad->lower_alarm_limit = prec->llsv ? prec->lolo : epicsNAN; } else recGblGetAlarmDouble(paddr,pad); return(0); } diff --git a/src/rec/longoutRecord.c b/src/rec/longoutRecord.c index a57d52829..c6ba45a4c 100644 --- a/src/rec/longoutRecord.c +++ b/src/rec/longoutRecord.c @@ -242,10 +242,10 @@ static long get_alarm_double(DBADDR *paddr,struct dbr_alDouble *pad) int fieldIndex = dbGetFieldIndex(paddr); if(fieldIndex == longoutRecordVAL) { - pad->upper_alarm_limit = prec->hihi; - pad->upper_warning_limit = prec->high; - pad->lower_warning_limit = prec->low; - pad->lower_alarm_limit = prec->lolo; + pad->upper_alarm_limit = prec->hhsv ? prec->hihi : epicsNAN; + pad->upper_warning_limit = prec->hsv ? prec->high : epicsNAN; + pad->lower_warning_limit = prec->lsv ? prec->low : epicsNAN; + pad->lower_alarm_limit = prec->llsv ? prec->lolo : epicsNAN; } else recGblGetAlarmDouble(paddr,pad); return(0); } From 2d9c5e99a191f15ca7d20a8546be922057eb9598 Mon Sep 17 00:00:00 2001 From: Ralph Lange Date: Tue, 15 May 2018 11:17:49 +0200 Subject: [PATCH 2/2] db: correctly convert NaN alarm levels to integers (fixes lp #1771298) --- src/db/dbAccess.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/db/dbAccess.c b/src/db/dbAccess.c index ef27afafb..b60594fed 100644 --- a/src/db/dbAccess.c +++ b/src/db/dbAccess.c @@ -297,10 +297,10 @@ static void get_alarm(DBADDR *paddr, char **ppbuffer, if (*options & DBR_AL_LONG) { struct dbr_alLong *pal = (struct dbr_alLong*) pbuffer; - pal->upper_alarm_limit = (epicsInt32) ald.upper_alarm_limit; - pal->upper_warning_limit = (epicsInt32) ald.upper_warning_limit; - pal->lower_warning_limit = (epicsInt32) ald.lower_warning_limit; - pal->lower_alarm_limit = (epicsInt32) ald.lower_alarm_limit; + pal->upper_alarm_limit = isfinite(ald.upper_alarm_limit) ? (epicsInt32) ald.upper_alarm_limit : 0; + pal->upper_warning_limit = isfinite(ald.upper_warning_limit) ? (epicsInt32) ald.upper_warning_limit : 0; + pal->lower_warning_limit = isfinite(ald.lower_warning_limit) ? (epicsInt32) ald.lower_warning_limit : 0; + pal->lower_alarm_limit = isfinite(ald.lower_alarm_limit) ? (epicsInt32) ald.lower_alarm_limit : 0; if (no_data) *options ^= DBR_AL_LONG; /*Turn off option*/