From 3d8bf341772b6f47643ea2076105095f6ff29573 Mon Sep 17 00:00:00 2001
From: Michael Davidsaver
Date: Mon, 4 Nov 2013 13:39:12 -0500
Subject: [PATCH 1/7] fix indent
---
src/ioc/dbStatic/dbBase.h | 38 +++++-----
src/ioc/dbStatic/dbLexRoutines.c | 122 +++++++++++++++----------------
2 files changed, 80 insertions(+), 80 deletions(-)
diff --git a/src/ioc/dbStatic/dbBase.h b/src/ioc/dbStatic/dbBase.h
index 6be2465d5..6ee9f7c22 100644
--- a/src/ioc/dbStatic/dbBase.h
+++ b/src/ioc/dbStatic/dbBase.h
@@ -69,25 +69,25 @@ typedef struct brkTable { /* breakpoint table */
}brkTable;
typedef struct dbFldDes{ /* field description */
- char *prompt; /*Prompt string for DCT*/
- char *name; /*Field name*/
- char *extra; /*C def for DBF_NOACCESS*/
- struct dbRecordType *pdbRecordType;
- short indRecordType; /*within dbRecordType.papFldDes */
- short special; /*Special processing requirements */
- dbfType field_type; /*Field type as defined in dbFldTypes.h */
- short process_passive;/*should dbPutField process passive */
- ctType base; /*base for integer to string conversions*/
- short promptgroup; /*prompt, i.e. gui group */
- short interest; /*interest level */
- asLevel as_level; /*access security level */
- char *initial; /*initial value */
- /*If (DBF_MENU,DBF_DEVICE) ftPvt is (pdbMenu,pdbDeviceMenu) */
- void *ftPvt;
- /*On no runtime following only set for STRING */
- short size; /*length in bytes of a field element */
- /*The following are only available on run time system*/
- short offset; /*Offset in bytes from beginning of record*/
+ char *prompt; /*Prompt string for DCT*/
+ char *name; /*Field name*/
+ char *extra; /*C def for DBF_NOACCESS*/
+ struct dbRecordType *pdbRecordType;
+ short indRecordType; /*within dbRecordType.papFldDes */
+ short special; /*Special processing requirements */
+ dbfType field_type; /*Field type as defined in dbFldTypes.h */
+ short process_passive;/*should dbPutField process passive */
+ ctType base; /*base for integer to string conversions*/
+ short promptgroup; /*prompt, i.e. gui group */
+ short interest; /*interest level */
+ asLevel as_level; /*access security level */
+ char *initial; /*initial value */
+ /*If (DBF_MENU,DBF_DEVICE) ftPvt is (pdbMenu,pdbDeviceMenu) */
+ void *ftPvt;
+ /*On no runtime following only set for STRING */
+ short size; /*length in bytes of a field element */
+ /*The following are only available on run time system*/
+ short offset; /*Offset in bytes from beginning of record*/
}dbFldDes;
typedef struct dbInfoNode { /*non-field per-record information*/
diff --git a/src/ioc/dbStatic/dbLexRoutines.c b/src/ioc/dbStatic/dbLexRoutines.c
index fb6fd4b48..6e957fe10 100644
--- a/src/ioc/dbStatic/dbLexRoutines.c
+++ b/src/ioc/dbStatic/dbLexRoutines.c
@@ -498,87 +498,87 @@ static void dbRecordtypeFieldItem(char *name,char *value)
if(duplicate) return;
pdbFldDes = (dbFldDes *)getLastTemp();
if(strcmp(name,"asl")==0) {
- if(strcmp(value,"ASL0")==0) {
- pdbFldDes->as_level = ASL0;
- } else if(strcmp(value,"ASL1")==0) {
- pdbFldDes->as_level = ASL1;
- } else {
- yyerror("Illegal Access Security value: Must be ASL0 or ASL1");
- }
- return;
+ if(strcmp(value,"ASL0")==0) {
+ pdbFldDes->as_level = ASL0;
+ } else if(strcmp(value,"ASL1")==0) {
+ pdbFldDes->as_level = ASL1;
+ } else {
+ yyerror("Illegal Access Security value: Must be ASL0 or ASL1");
+ }
+ return;
}
if(strcmp(name,"initial")==0) {
- pdbFldDes->initial = epicsStrDup(value);
- return;
+ pdbFldDes->initial = epicsStrDup(value);
+ return;
}
if(strcmp(name,"promptgroup")==0) {
- int i;
- for(i=0; ipromptgroup = pamapguiGroup[i].value;
- return;
- }
- }
- yyerror("Illegal promptgroup. See guigroup.h for legal values");
- return;
+ int i;
+ for(i=0; ipromptgroup = pamapguiGroup[i].value;
+ return;
+ }
+ }
+ yyerror("Illegal promptgroup. See guigroup.h for legal values");
+ return;
}
if(strcmp(name,"prompt")==0) {
- pdbFldDes->prompt = epicsStrDup(value);
- return;
+ pdbFldDes->prompt = epicsStrDup(value);
+ return;
}
if(strcmp(name,"special")==0) {
- int i;
- for(i=0; ispecial = pamapspcType[i].value;
- return;
- }
- }
- if(sscanf(value,"%hd",&pdbFldDes->special)==1) {
- return;
- }
- yyerror("Illegal special value.");
- return;
+ int i;
+ for(i=0; ispecial = pamapspcType[i].value;
+ return;
+ }
+ }
+ if(sscanf(value,"%hd",&pdbFldDes->special)==1) {
+ return;
+ }
+ yyerror("Illegal special value.");
+ return;
}
if(strcmp(name,"pp")==0) {
- if((strcmp(value,"YES")==0) || (strcmp(value,"TRUE")==0)) {
- pdbFldDes->process_passive = TRUE;
- } else if((strcmp(value,"NO")==0) || (strcmp(value,"FALSE")==0)) {
- pdbFldDes->process_passive = FALSE;
- } else {
- yyerror("Illegal value. Must be NO or YES");
- }
- return;
+ if((strcmp(value,"YES")==0) || (strcmp(value,"TRUE")==0)) {
+ pdbFldDes->process_passive = TRUE;
+ } else if((strcmp(value,"NO")==0) || (strcmp(value,"FALSE")==0)) {
+ pdbFldDes->process_passive = FALSE;
+ } else {
+ yyerror("Illegal value. Must be NO or YES");
+ }
+ return;
}
if(strcmp(name,"interest")==0) {
- if(sscanf(value,"%hd",&pdbFldDes->interest)!=1)
- yyerror("Illegal value. Must be integer");
- return;
+ if(sscanf(value,"%hd",&pdbFldDes->interest)!=1)
+ yyerror("Illegal value. Must be integer");
+ return;
}
if(strcmp(name,"base")==0) {
- if(strcmp(value,"DECIMAL")==0) {
- pdbFldDes->base = CT_DECIMAL;
- } else if(strcmp(value,"HEX")==0) {
- pdbFldDes->base = CT_HEX;
- } else {
- yyerror("Illegal value. Must be CT_DECIMAL or CT_HEX");
- }
- return;
+ if(strcmp(value,"DECIMAL")==0) {
+ pdbFldDes->base = CT_DECIMAL;
+ } else if(strcmp(value,"HEX")==0) {
+ pdbFldDes->base = CT_HEX;
+ } else {
+ yyerror("Illegal value. Must be CT_DECIMAL or CT_HEX");
+ }
+ return;
}
if(strcmp(name,"size")==0) {
- if(sscanf(value,"%hd",&pdbFldDes->size)!=1)
- yyerror("Illegal value. Must be integer");
- return;
+ if(sscanf(value,"%hd",&pdbFldDes->size)!=1)
+ yyerror("Illegal value. Must be integer");
+ return;
}
if(strcmp(name,"extra")==0) {
- pdbFldDes->extra = epicsStrDup(value);
- return;
+ pdbFldDes->extra = epicsStrDup(value);
+ return;
}
if(strcmp(name,"menu")==0) {
- pdbFldDes->ftPvt = (dbMenu *)dbFindMenu(pdbbase,value);
- if(!pdbbase->ignoreMissingMenus && !pdbFldDes->ftPvt)
- yyerrorAbort("menu not found");
- return;
+ pdbFldDes->ftPvt = (dbMenu *)dbFindMenu(pdbbase,value);
+ if(!pdbbase->ignoreMissingMenus && !pdbFldDes->ftPvt)
+ yyerrorAbort("menu not found");
+ return;
}
}
From 034388f0099f884fe72be5c8c770eac84cbf275d Mon Sep 17 00:00:00 2001
From: Michael Davidsaver
Date: Mon, 4 Nov 2013 13:39:16 -0500
Subject: [PATCH 2/7] recognize and store field attribute "prop()"
---
src/ioc/dbStatic/dbBase.h | 3 ++-
src/ioc/dbStatic/dbLexRoutines.c | 7 +++++++
src/tools/DBD/Recfield.pm | 3 ++-
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/ioc/dbStatic/dbBase.h b/src/ioc/dbStatic/dbBase.h
index 6ee9f7c22..6ef2d2b3c 100644
--- a/src/ioc/dbStatic/dbBase.h
+++ b/src/ioc/dbStatic/dbBase.h
@@ -76,7 +76,8 @@ typedef struct dbFldDes{ /* field description */
short indRecordType; /*within dbRecordType.papFldDes */
short special; /*Special processing requirements */
dbfType field_type; /*Field type as defined in dbFldTypes.h */
- short process_passive;/*should dbPutField process passive */
+ unsigned int process_passive:1;/*should dbPutField process passive */
+ unsigned int prop:1;/*field is a metadata, post DBE_PROPERTY on change*/
ctType base; /*base for integer to string conversions*/
short promptgroup; /*prompt, i.e. gui group */
short interest; /*interest level */
diff --git a/src/ioc/dbStatic/dbLexRoutines.c b/src/ioc/dbStatic/dbLexRoutines.c
index 6e957fe10..801a27845 100644
--- a/src/ioc/dbStatic/dbLexRoutines.c
+++ b/src/ioc/dbStatic/dbLexRoutines.c
@@ -580,6 +580,13 @@ static void dbRecordtypeFieldItem(char *name,char *value)
yyerrorAbort("menu not found");
return;
}
+ if(strcmp(name,"prop")==0) {
+ if(strcmp(value, "YES")==0)
+ pdbFldDes->prop = 1;
+ else
+ pdbFldDes->prop = 0;
+ return;
+ }
}
static void dbRecordtypeCdef(char *text) {
diff --git a/src/tools/DBD/Recfield.pm b/src/tools/DBD/Recfield.pm
index cdf8e2747..b0bc7af56 100644
--- a/src/tools/DBD/Recfield.pm
+++ b/src/tools/DBD/Recfield.pm
@@ -35,7 +35,8 @@ our %field_attrs = (
base => qr/^(?:DECIMAL|HEX)$/,
size => qr/^\d+$/,
extra => qr/^.*$/,
- menu => qr/^$RXident$/o
+ menu => qr/^$RXident$/o,
+ prop => qr/^(?:YES|NO)$/
);
sub new {
From 3cccdd813458936b536f51589a100cfcfd91f637 Mon Sep 17 00:00:00 2001
From: Michael Davidsaver
Date: Mon, 4 Nov 2013 13:39:17 -0500
Subject: [PATCH 3/7] add prop(YES) to standard recordtypes
---
src/std/rec/aSubRecord.dbd | 1 +
src/std/rec/aaiRecord.dbd | 4 ++++
src/std/rec/aaoRecord.dbd | 4 ++++
src/std/rec/aiRecord.dbd | 8 ++++++++
src/std/rec/aoRecord.dbd | 10 ++++++++++
src/std/rec/biRecord.dbd | 2 ++
src/std/rec/boRecord.dbd | 2 ++
src/std/rec/calcRecord.dbd | 8 ++++++++
src/std/rec/calcoutRecord.dbd | 8 ++++++++
src/std/rec/compressRecord.dbd | 4 ++++
src/std/rec/dfanoutRecord.dbd | 8 ++++++++
src/std/rec/histogramRecord.dbd | 5 +++++
src/std/rec/longinRecord.dbd | 7 +++++++
src/std/rec/longoutRecord.dbd | 9 +++++++++
src/std/rec/selRecord.dbd | 7 +++++++
src/std/rec/subArrayRecord.dbd | 4 ++++
src/std/rec/subRecord.dbd | 8 ++++++++
src/std/rec/waveformRecord.dbd | 4 ++++
18 files changed, 103 insertions(+)
diff --git a/src/std/rec/aSubRecord.dbd b/src/std/rec/aSubRecord.dbd
index 6b1efb0df..3297db59b 100644
--- a/src/std/rec/aSubRecord.dbd
+++ b/src/std/rec/aSubRecord.dbd
@@ -77,6 +77,7 @@ recordtype(aSub) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(EFLG,DBF_MENU) {
prompt("Output Event Flag")
diff --git a/src/std/rec/aaiRecord.dbd b/src/std/rec/aaiRecord.dbd
index e94fecbac..fb921cfc4 100644
--- a/src/std/rec/aaiRecord.dbd
+++ b/src/std/rec/aaiRecord.dbd
@@ -24,6 +24,7 @@ recordtype(aai) {
prompt("Display Precision")
promptgroup(GUI_ALARMS)
interest(1)
+ prop(YES)
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
@@ -35,16 +36,19 @@ recordtype(aai) {
promptgroup(GUI_BITS2)
interest(1)
size(16)
+ prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_CALC)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_CLOCK)
interest(1)
+ prop(YES)
}
field(NELM,DBF_ULONG) {
prompt("Number of Elements")
diff --git a/src/std/rec/aaoRecord.dbd b/src/std/rec/aaoRecord.dbd
index 60b9b773e..025920a48 100644
--- a/src/std/rec/aaoRecord.dbd
+++ b/src/std/rec/aaoRecord.dbd
@@ -24,6 +24,7 @@ recordtype(aao) {
prompt("Display Precision")
promptgroup(GUI_ALARMS)
interest(1)
+ prop(YES)
}
field(OUT,DBF_OUTLINK) {
prompt("Output Specification")
@@ -35,16 +36,19 @@ recordtype(aao) {
promptgroup(GUI_BITS2)
interest(1)
size(16)
+ prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_CALC)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_CLOCK)
interest(1)
+ prop(YES)
}
field(NELM,DBF_ULONG) {
prompt("Number of Elements")
diff --git a/src/std/rec/aiRecord.dbd b/src/std/rec/aiRecord.dbd
index 52fd4b05b..88f46707e 100644
--- a/src/std/rec/aiRecord.dbd
+++ b/src/std/rec/aiRecord.dbd
@@ -24,6 +24,7 @@ recordtype(ai) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(LINR,DBF_MENU) {
prompt("Linearization")
@@ -52,16 +53,19 @@ recordtype(ai) {
promptgroup(GUI_DISPLAY)
interest(1)
size(16)
+ prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(AOFF,DBF_DOUBLE) {
prompt("Adjustment Offset")
@@ -86,24 +90,28 @@ recordtype(ai) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOLO,DBF_DOUBLE) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HIGH,DBF_DOUBLE) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOW,DBF_DOUBLE) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
diff --git a/src/std/rec/aoRecord.dbd b/src/std/rec/aoRecord.dbd
index a1caa6b56..b2fe2894f 100644
--- a/src/std/rec/aoRecord.dbd
+++ b/src/std/rec/aoRecord.dbd
@@ -53,6 +53,7 @@ recordtype(ao) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(LINR,DBF_MENU) {
prompt("Linearization")
@@ -81,6 +82,7 @@ recordtype(ao) {
promptgroup(GUI_DISPLAY)
interest(1)
size(16)
+ prop(YES)
}
field(ROFF,DBF_LONG) {
prompt("Raw Offset, obsolete")
@@ -105,22 +107,26 @@ recordtype(ao) {
promptgroup(GUI_OUTPUT)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(DRVL,DBF_DOUBLE) {
prompt("Drive Low Limit")
promptgroup(GUI_OUTPUT)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(AOFF,DBF_DOUBLE) {
prompt("Adjustment Offset")
@@ -139,24 +145,28 @@ recordtype(ao) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOLO,DBF_DOUBLE) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HIGH,DBF_DOUBLE) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOW,DBF_DOUBLE) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
diff --git a/src/std/rec/biRecord.dbd b/src/std/rec/biRecord.dbd
index f2c94e7ee..c0498c300 100644
--- a/src/std/rec/biRecord.dbd
+++ b/src/std/rec/biRecord.dbd
@@ -47,6 +47,7 @@ recordtype(bi) {
pp(TRUE)
interest(1)
size(26)
+ prop(YES)
}
field(ONAM,DBF_STRING) {
prompt("One Name")
@@ -54,6 +55,7 @@ recordtype(bi) {
pp(TRUE)
interest(1)
size(26)
+ prop(YES)
}
field(RVAL,DBF_ULONG) {
prompt("Raw Value")
diff --git a/src/std/rec/boRecord.dbd b/src/std/rec/boRecord.dbd
index 4bc44c2fd..9a861f157 100644
--- a/src/std/rec/boRecord.dbd
+++ b/src/std/rec/boRecord.dbd
@@ -42,6 +42,7 @@ recordtype(bo) {
pp(TRUE)
interest(1)
size(26)
+ prop(YES)
}
field(ONAM,DBF_STRING) {
prompt("One Name")
@@ -49,6 +50,7 @@ recordtype(bo) {
pp(TRUE)
interest(1)
size(26)
+ prop(YES)
}
field(RVAL,DBF_ULONG) {
prompt("Raw Value")
diff --git a/src/std/rec/calcRecord.dbd b/src/std/rec/calcRecord.dbd
index b4d4cc99b..554612b50 100644
--- a/src/std/rec/calcRecord.dbd
+++ b/src/std/rec/calcRecord.dbd
@@ -85,45 +85,53 @@ recordtype(calc) {
promptgroup(GUI_DISPLAY)
interest(1)
size(16)
+ prop(YES)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Rng")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(HIHI,DBF_DOUBLE) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOLO,DBF_DOUBLE) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HIGH,DBF_DOUBLE) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOW,DBF_DOUBLE) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
diff --git a/src/std/rec/calcoutRecord.dbd b/src/std/rec/calcoutRecord.dbd
index f58ac242f..5b3014b59 100644
--- a/src/std/rec/calcoutRecord.dbd
+++ b/src/std/rec/calcoutRecord.dbd
@@ -285,45 +285,53 @@ recordtype(calcout) {
promptgroup(GUI_DISPLAY)
interest(1)
size(16)
+ prop(YES)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Rng")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(HIHI,DBF_DOUBLE) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOLO,DBF_DOUBLE) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HIGH,DBF_DOUBLE) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOW,DBF_DOUBLE) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
diff --git a/src/std/rec/compressRecord.dbd b/src/std/rec/compressRecord.dbd
index 45f5a2957..347b807e2 100644
--- a/src/std/rec/compressRecord.dbd
+++ b/src/std/rec/compressRecord.dbd
@@ -70,22 +70,26 @@ recordtype(compress) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(EGU,DBF_STRING) {
prompt("EngineeringUnits")
promptgroup(GUI_DISPLAY)
interest(1)
size(16)
+ prop(YES)
}
field(OFF,DBF_ULONG) {
prompt("Offset")
diff --git a/src/std/rec/dfanoutRecord.dbd b/src/std/rec/dfanoutRecord.dbd
index c68e56c74..6dfe81330 100644
--- a/src/std/rec/dfanoutRecord.dbd
+++ b/src/std/rec/dfanoutRecord.dbd
@@ -91,45 +91,53 @@ recordtype(dfanout) {
promptgroup(GUI_DISPLAY)
interest(1)
size(16)
+ prop(YES)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(HIHI,DBF_DOUBLE) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOLO,DBF_DOUBLE) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HIGH,DBF_DOUBLE) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOW,DBF_DOUBLE) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
diff --git a/src/std/rec/histogramRecord.dbd b/src/std/rec/histogramRecord.dbd
index dc0d2df31..06a84b52a 100644
--- a/src/std/rec/histogramRecord.dbd
+++ b/src/std/rec/histogramRecord.dbd
@@ -46,12 +46,14 @@ recordtype(histogram) {
promptgroup(GUI_HIST)
special(SPC_RESET)
interest(1)
+ prop(YES)
}
field(LLIM,DBF_DOUBLE) {
prompt("Lower Signal Limit ")
promptgroup(GUI_HIST)
special(SPC_RESET)
interest(1)
+ prop(YES)
}
field(WDTH,DBF_DOUBLE) {
prompt("Element Width")
@@ -66,6 +68,7 @@ recordtype(histogram) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(SVL,DBF_INLINK) {
prompt("Signal Value Location")
@@ -128,11 +131,13 @@ recordtype(histogram) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_ULONG) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
}
diff --git a/src/std/rec/longinRecord.dbd b/src/std/rec/longinRecord.dbd
index ef9506e3d..5c038f9db 100644
--- a/src/std/rec/longinRecord.dbd
+++ b/src/std/rec/longinRecord.dbd
@@ -25,40 +25,47 @@ recordtype(longin) {
promptgroup(GUI_DISPLAY)
interest(1)
size(16)
+ prop(YES)
}
field(HOPR,DBF_LONG) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_LONG) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(HIHI,DBF_LONG) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOLO,DBF_LONG) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HIGH,DBF_LONG) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOW,DBF_LONG) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
diff --git a/src/std/rec/longoutRecord.dbd b/src/std/rec/longoutRecord.dbd
index e29251b9b..5124aafe8 100644
--- a/src/std/rec/longoutRecord.dbd
+++ b/src/std/rec/longoutRecord.dbd
@@ -36,52 +36,61 @@ recordtype(longout) {
promptgroup(GUI_DISPLAY)
interest(1)
size(16)
+ prop(YES)
}
field(DRVH,DBF_LONG) {
prompt("Drive High Limit")
promptgroup(GUI_OUTPUT)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(DRVL,DBF_LONG) {
prompt("Drive Low Limit")
promptgroup(GUI_OUTPUT)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HOPR,DBF_LONG) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_LONG) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(HIHI,DBF_LONG) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOLO,DBF_LONG) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HIGH,DBF_LONG) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOW,DBF_LONG) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
diff --git a/src/std/rec/selRecord.dbd b/src/std/rec/selRecord.dbd
index 172f16e36..ca59d4f0c 100644
--- a/src/std/rec/selRecord.dbd
+++ b/src/std/rec/selRecord.dbd
@@ -103,40 +103,47 @@ recordtype(sel) {
promptgroup(GUI_DISPLAY)
interest(1)
size(16)
+ prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Rng")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(HIHI,DBF_DOUBLE) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOLO,DBF_DOUBLE) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HIGH,DBF_DOUBLE) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOW,DBF_DOUBLE) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
diff --git a/src/std/rec/subArrayRecord.dbd b/src/std/rec/subArrayRecord.dbd
index 8eeb6c0d9..6442ede16 100644
--- a/src/std/rec/subArrayRecord.dbd
+++ b/src/std/rec/subArrayRecord.dbd
@@ -20,6 +20,7 @@ recordtype(subArray) {
prompt("Display Precision")
promptgroup(GUI_COMMON)
interest(1)
+ prop(YES)
}
field(FTVL,DBF_MENU) {
prompt("Field Type of Value")
@@ -38,16 +39,19 @@ recordtype(subArray) {
promptgroup(GUI_BITS2)
interest(1)
size(16)
+ prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_CALC)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_CLOCK)
interest(1)
+ prop(YES)
}
field(MALM,DBF_ULONG) {
prompt("Maximum Elements ")
diff --git a/src/std/rec/subRecord.dbd b/src/std/rec/subRecord.dbd
index 6b21c2348..0943b4e72 100644
--- a/src/std/rec/subRecord.dbd
+++ b/src/std/rec/subRecord.dbd
@@ -100,45 +100,53 @@ recordtype(sub) {
promptgroup(GUI_DISPLAY)
interest(1)
size(16)
+ prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Rng")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(HIHI,DBF_DOUBLE) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOLO,DBF_DOUBLE) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(HIGH,DBF_DOUBLE) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(LOW,DBF_DOUBLE) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(BRSV,DBF_MENU) {
prompt("Bad Return Severity")
diff --git a/src/std/rec/waveformRecord.dbd b/src/std/rec/waveformRecord.dbd
index 443f716da..92d0fc156 100644
--- a/src/std/rec/waveformRecord.dbd
+++ b/src/std/rec/waveformRecord.dbd
@@ -29,6 +29,7 @@ recordtype(waveform) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
@@ -40,16 +41,19 @@ recordtype(waveform) {
promptgroup(GUI_DISPLAY)
interest(1)
size(16)
+ prop(YES)
}
field(HOPR,DBF_DOUBLE) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(LOPR,DBF_DOUBLE) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
+ prop(YES)
}
field(NELM,DBF_ULONG) {
prompt("Number of Elements")
From 6a6e527fc11cd4212161991ebabfdc7f4472377b Mon Sep 17 00:00:00 2001
From: Michael Davidsaver
Date: Mon, 4 Nov 2013 13:39:17 -0500
Subject: [PATCH 4/7] post DBE_PROPERTY from dbPut()
All writes to a prop(YES) field result
in a monitor, even when the field value
doesn't change.
---
src/ioc/db/dbAccess.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/ioc/db/dbAccess.c b/src/ioc/db/dbAccess.c
index 40039b0c9..904423a71 100644
--- a/src/ioc/db/dbAccess.c
+++ b/src/ioc/db/dbAccess.c
@@ -1208,13 +1208,19 @@ long dbPut(DBADDR *paddr, short dbrType,
}
/* Propagate monitor events for this field, */
- /* unless the field field is VAL and PP is true. */
+ /* unless the field is VAL and PP is true. */
pfldDes = paddr->pfldDes;
isValueField = dbIsValueField(pfldDes);
if (isValueField) precord->udf = FALSE;
if (precord->mlis.count &&
!(isValueField && pfldDes->process_passive))
db_post_events(precord, paddr->pfield, DBE_VALUE | DBE_LOG);
+ /* If this field is a property (metadata) field,
+ * then post a property change event (even if the field
+ * didn't change).
+ */
+ if (precord->mlis.count && pfldDes->prop)
+ db_post_events(precord, NULL, DBE_PROPERTY);
return status;
}
From 052f0992d2ebac5b703dbe509a8fbc17255ba8f1 Mon Sep 17 00:00:00 2001
From: Andrew Johnson
Date: Wed, 6 Nov 2013 09:28:49 -0600
Subject: [PATCH 5/7] dbStatic: Add property metadata to dump outputs
Both dbWriteRecordTypeFP() and dbDumpField() now show the
value of the prop() field attribute.
---
src/ioc/dbStatic/dbStaticLib.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/ioc/dbStatic/dbStaticLib.c b/src/ioc/dbStatic/dbStaticLib.c
index d23917d27..ff1361d7e 100644
--- a/src/ioc/dbStatic/dbStaticLib.c
+++ b/src/ioc/dbStatic/dbStaticLib.c
@@ -971,6 +971,7 @@ long dbWriteRecordTypeFP(
pdbFldDes->size);
}
if(pdbFldDes->process_passive) fprintf(fp,"\t\tpp(TRUE)\n");
+ if(pdbFldDes->prop) fprintf(fp,"\t\tprop(YES)\n");
if(pdbFldDes->base) fprintf(fp,"\t\tbase(HEX)\n");
if(pdbFldDes->interest)
fprintf(fp,"\t\tinterest(%d)\n",pdbFldDes->interest);
@@ -3140,6 +3141,7 @@ void dbDumpField(
else
printf("\t field_type: %s\n", pamapdbfType[j].strvalue);
printf("\tprocess_passive: %hd\n",pdbFldDes->process_passive);
+ printf("\t property: %hd\n",pdbFldDes->prop);
printf("\t base: %d\n",pdbFldDes->base);
if(!pdbFldDes->promptgroup) {
printf("\t promptgroup: %d\n",pdbFldDes->promptgroup);
From bf3bdec7b3e9bfc2d53351ec5f1b80a7eb830f78 Mon Sep 17 00:00:00 2001
From: Andrew Johnson
Date: Wed, 6 Nov 2013 09:48:27 -0600
Subject: [PATCH 6/7] rec: Mark various *SV fields prop(YES)
Alarm limits may change to/from NaN when these fields are modified.
---
src/std/rec/aiRecord.dbd | 4 ++++
src/std/rec/aoRecord.dbd | 4 ++++
src/std/rec/calcRecord.dbd | 4 ++++
src/std/rec/calcoutRecord.dbd | 4 ++++
src/std/rec/dfanoutRecord.dbd | 4 ++++
src/std/rec/selRecord.dbd | 4 ++++
src/std/rec/subRecord.dbd | 4 ++++
7 files changed, 28 insertions(+)
diff --git a/src/std/rec/aiRecord.dbd b/src/std/rec/aiRecord.dbd
index 88f46707e..0573768fd 100644
--- a/src/std/rec/aiRecord.dbd
+++ b/src/std/rec/aiRecord.dbd
@@ -118,6 +118,7 @@ recordtype(ai) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(LLSV,DBF_MENU) {
@@ -125,6 +126,7 @@ recordtype(ai) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(HSV,DBF_MENU) {
@@ -132,6 +134,7 @@ recordtype(ai) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(LSV,DBF_MENU) {
@@ -139,6 +142,7 @@ recordtype(ai) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(HYST,DBF_DOUBLE) {
diff --git a/src/std/rec/aoRecord.dbd b/src/std/rec/aoRecord.dbd
index b2fe2894f..2d0f36450 100644
--- a/src/std/rec/aoRecord.dbd
+++ b/src/std/rec/aoRecord.dbd
@@ -173,6 +173,7 @@ recordtype(ao) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(LLSV,DBF_MENU) {
@@ -180,6 +181,7 @@ recordtype(ao) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(HSV,DBF_MENU) {
@@ -187,6 +189,7 @@ recordtype(ao) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(LSV,DBF_MENU) {
@@ -194,6 +197,7 @@ recordtype(ao) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(HYST,DBF_DOUBLE) {
diff --git a/src/std/rec/calcRecord.dbd b/src/std/rec/calcRecord.dbd
index 554612b50..27c21da95 100644
--- a/src/std/rec/calcRecord.dbd
+++ b/src/std/rec/calcRecord.dbd
@@ -138,6 +138,7 @@ recordtype(calc) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(LLSV,DBF_MENU) {
@@ -145,6 +146,7 @@ recordtype(calc) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(HSV,DBF_MENU) {
@@ -152,6 +154,7 @@ recordtype(calc) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(LSV,DBF_MENU) {
@@ -159,6 +162,7 @@ recordtype(calc) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(AFTC, DBF_DOUBLE) {
diff --git a/src/std/rec/calcoutRecord.dbd b/src/std/rec/calcoutRecord.dbd
index 5b3014b59..4b6e2a5e2 100644
--- a/src/std/rec/calcoutRecord.dbd
+++ b/src/std/rec/calcoutRecord.dbd
@@ -338,6 +338,7 @@ recordtype(calcout) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(LLSV,DBF_MENU) {
@@ -345,6 +346,7 @@ recordtype(calcout) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(HSV,DBF_MENU) {
@@ -352,6 +354,7 @@ recordtype(calcout) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(LSV,DBF_MENU) {
@@ -359,6 +362,7 @@ recordtype(calcout) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(HYST,DBF_DOUBLE) {
diff --git a/src/std/rec/dfanoutRecord.dbd b/src/std/rec/dfanoutRecord.dbd
index 6dfe81330..4e61907c7 100644
--- a/src/std/rec/dfanoutRecord.dbd
+++ b/src/std/rec/dfanoutRecord.dbd
@@ -144,6 +144,7 @@ recordtype(dfanout) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(LLSV,DBF_MENU) {
@@ -151,6 +152,7 @@ recordtype(dfanout) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(HSV,DBF_MENU) {
@@ -158,6 +160,7 @@ recordtype(dfanout) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(LSV,DBF_MENU) {
@@ -165,6 +168,7 @@ recordtype(dfanout) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(HYST,DBF_DOUBLE) {
diff --git a/src/std/rec/selRecord.dbd b/src/std/rec/selRecord.dbd
index ca59d4f0c..0d01586a0 100644
--- a/src/std/rec/selRecord.dbd
+++ b/src/std/rec/selRecord.dbd
@@ -150,6 +150,7 @@ recordtype(sel) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(LLSV,DBF_MENU) {
@@ -157,6 +158,7 @@ recordtype(sel) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(HSV,DBF_MENU) {
@@ -164,6 +166,7 @@ recordtype(sel) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(LSV,DBF_MENU) {
@@ -171,6 +174,7 @@ recordtype(sel) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(HYST,DBF_DOUBLE) {
diff --git a/src/std/rec/subRecord.dbd b/src/std/rec/subRecord.dbd
index 0943b4e72..973cab7f1 100644
--- a/src/std/rec/subRecord.dbd
+++ b/src/std/rec/subRecord.dbd
@@ -160,6 +160,7 @@ recordtype(sub) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(LLSV,DBF_MENU) {
@@ -167,6 +168,7 @@ recordtype(sub) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(HSV,DBF_MENU) {
@@ -174,6 +176,7 @@ recordtype(sub) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(LSV,DBF_MENU) {
@@ -181,6 +184,7 @@ recordtype(sub) {
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
+ prop(YES)
menu(menuAlarmSevr)
}
field(HYST,DBF_DOUBLE) {
From 55c89335fd94e6e819d919e4ae6238644f3a3ac6 Mon Sep 17 00:00:00 2001
From: Michael Davidsaver
Date: Sat, 30 Nov 2013 14:47:01 -0500
Subject: [PATCH 7/7] update release notes
---
documentation/RELEASE_NOTES.html | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/documentation/RELEASE_NOTES.html b/documentation/RELEASE_NOTES.html
index bf045b0f3..ef9a4e199 100644
--- a/documentation/RELEASE_NOTES.html
+++ b/documentation/RELEASE_NOTES.html
@@ -15,6 +15,13 @@ EPICS Base 3.15.0.x releases are not intended for use in production systems.
Changes between 3.15.0.1 and 3.15.0.2
+Post DBE_PROPERTY events automatically
+
+A new record field attribute "prop(YES)" is added to identify fields
+holding CA meta-data. Changes to fields so marked will cause a event
+to be sent to all subscriptions to that record for DBE_PROPERTY.
+Meta-data fields are marked for all Base recordtypes.
+
errlogRemoveListener() routine changed
Code that calls errlogRemoveListener(myfunc) must be modified to use