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