From a57d24dd3d46c6799e360a6a1a8eee637b0e11b3 Mon Sep 17 00:00:00 2001 From: "Janet B. Anderson" Date: Wed, 26 Aug 1992 13:54:31 +0000 Subject: [PATCH] Added disable alarm severity, ansi c changes, removed dbr_field_type ref --- src/db/dbAccess.c | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/src/db/dbAccess.c b/src/db/dbAccess.c index da4b5ba70..d4837191f 100644 --- a/src/db/dbAccess.c +++ b/src/db/dbAccess.c @@ -40,6 +40,8 @@ * .09 03-02-92 jba Added function dbValueSize to replace db_value_size * .10 04-17-92 rcz put in mrk's dbNameToAddr changes for dbBase * .11 05-18-92 mrk Changes for database internal structures + * .12 07-16-92 jba Added disable alarm severity, ansi c changes + * .13 08-05-92 jba Removed all references to dbr_field_type */ /* This is a major revision of the original implementation of database access.*/ @@ -95,6 +97,10 @@ extern struct dbBase *pdbBase; +static short mapDBFToDBR[DBF_NTYPES] = { DBF_STRING, DBF_CHAR, DBF_UCHAR, DBF_SHORT, DBF_USHORT, + DBF_LONG, DBF_ULONG, DBF_FLOAT, DBF_DOUBLE, DBF_ENUM, DBF_ENUM, DBF_ENUM, DBF_ENUM, DBF_ENUM, + DBF_NOACCESS, DBF_NOACCESS, DBF_NOACCESS, DBF_NOACCESS}; + /* Added for Channel Access Links */ long dbCaAddInlink(); long dbCaGetLink(); @@ -240,23 +246,40 @@ long dbProcess(struct dbCommon *precord) long nRequest=1; status = dbGetLink(&precord->sdis.value.db_link,precord, - DBR_SHORT,(caddr_t)(&(precord->disa)),&options,&nRequest); - if(!RTN_SUCCESS(status)) recGblRecordError(status,precord,"dbProcess"); + DBF_SHORT,(caddr_t)(&(precord->disa)),&options,&nRequest); + if(!RTN_SUCCESS(status)) recGblRecordError(status,(void *)precord,"dbProcess"); } else if(precord->sdis.type == CA_LINK) { status = dbCaGetLink(&(precord->sdis)); - if(!RTN_SUCCESS(status)) recGblRecordError(status,precord,"dbProcess"); + if(!RTN_SUCCESS(status)) recGblRecordError(status,(void *)precord,"dbProcess"); } /* endif */ - /* if disabled just return success */ + /* if disabled check disable alarm severity and return success */ if(precord->disa == precord->disv) { + struct valueDes valueDes; + if(trace && trace_lset==lset) printf("disabled: %s\n",precord->name); + /* raise disable alarm */ + if(precord->stat==DISABLE_ALARM) goto all_done; + precord->sevr = precord->diss; + precord->stat = DISABLE_ALARM; + precord->nsev = 0; + precord->nsta = 0; + /* anyone waiting for an event on this record?*/ + if(precord->mlis.count==0) goto all_done; + db_post_events(precord,&precord->stat,DBE_VALUE); + db_post_events(precord,&precord->sevr,DBE_VALUE); + prset=(struct rset *)precord->rset; + if( prset && prset->get_value ){ + (*prset->get_value)(precord,&valueDes); + db_post_events(precord,valueDes.pvalue,DBE_VALUE|DBE_ALARM); + } goto all_done; } /* locate record processing routine */ if(!(prset=(struct rset *)precord->rset) || !(prset->process)) { precord->pact=1;/*set pact TRUE so error is issued only once*/ - recGblRecordError(S_db_noRSET,precord,"dbProcess"); + recGblRecordError(S_db_noRSET,(void *)precord,"dbProcess"); status = S_db_noRSET; if(trace && trace_lset==lset) printf("failure: %s\n",precord->name); @@ -297,7 +320,7 @@ long dbNameToAddr(pname,paddr) pfldDes = dbEntry.pfldDes; paddr->pfldDes = (void *)pfldDes; paddr->field_type = pfldDes->field_type; - paddr->dbr_field_type = pfldDes->dbr_field_type; + paddr->dbr_field_type = mapDBFToDBR[pfldDes->field_type]; paddr->field_size = pfldDes->size; paddr->choice_set = pfldDes->choice_set; paddr->special = pfldDes->special; @@ -335,7 +358,7 @@ long dbGetLink( if(pdblink->maximize_sevr) recGblSetSevr(pdest,LINK_ALARM,psource->sevr); status= dbGetField(paddr,dbrType,pbuffer,options,nRequest,NULL); - if(status) recGblRecordError(status,pdest,"dbGetLink"); + if(status) recGblRecordError(status,(void *)pdest,"dbGetLink"); return(status); } @@ -349,7 +372,6 @@ long dbPutLink( { struct dbAddr *paddr=(struct dbAddr*)(pdblink->pdbAddr); struct dbCommon *pdest=paddr->precord; - struct fldDes *pfldDes=(struct fldDes *)(paddr->pfldDes); long status; status=dbPut(paddr,dbrType,pbuffer,nRequest); @@ -358,7 +380,7 @@ long dbPutLink( if(paddr->pfield==(void *)&pdest->proc) status=dbProcess(pdest); else if (pdblink->process_passive) status=dbScanPassive(pdest); - if(status) recGblRecordError(status,psource,"dbPutLink"); + if(status) recGblRecordError(status,(void *)psource,"dbPutLink"); return(status); }