From f3622c0d42de45aa8b649780e222942e32bfe6d4 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Fri, 20 Apr 2018 16:35:44 -0700 Subject: [PATCH] pvalink fix sevr and doc --- documentation/qsrvpage.h | 38 ++++++++++++++++++++++++++++++++++++++ pdbApp/pvalink_lset.cpp | 4 ++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/documentation/qsrvpage.h b/documentation/qsrvpage.h index d567753..0347a77 100644 --- a/documentation/qsrvpage.h +++ b/documentation/qsrvpage.h @@ -176,10 +176,14 @@ record(longin, "src") { field(INP, {pva:{ pv:"tgt", field:"", # may be a sub-field + local:false,# Require local PV Q:4, # monitor queue depth + pipeline:false, # require that server uses monitor flow control protocol proc:none, # Request record processing (side-effects). sevr:false, # Maximize severity. + time:false, # set record time during getValue monorder:0, # Order of record processing as a result of CP and CPP + retry:false,# allow Put while disconnected. defer:false # Defer put }}) } @@ -204,6 +208,10 @@ will be taken from it, but not meta-data will be available. @todo Ability to traverse through unions and into structure arrays (as with group mappings). +@subsubsection qsrv_link_local local: Require local PV + +When true, link will not connect unless the named PV is provided by the local (QSRV) data provider. + @subsubsection qsrv_link_Q Q: Monitor queue depth Requests a certain monitor queue depth. @@ -243,6 +251,13 @@ Severity process. @li true - Maximize alarm severity @li "MSI" - Maximize only if the remote severity is INVALID. +@subsubsection qsrv_link_time time: Time propagation + +Somewhat analogous to sevr: applied to timestamp. +When true, the record TIME field is updated when the link value is read. + +@warning TSEL must be set to -2 for time:true to have an effect. + @subsubsection qsrv_link_monorder monorder: Monitor processing order When multiple record target the same target PV, and request processing @@ -262,4 +277,27 @@ new value in an internal cache, but not start a PVA Put. This option, in combination with field: allows a single Put to contain updates to multiple sub-fields. + +@subsubsection qsrv_link_retry retry: Put while disconnected + +Allow a Put operation to be queued while the link is disconnected. +The Put will be executed when the link becomes connected. + +@subsubsection qsrv_link_sem Link semantics/behavior + +This section attempts to answer some questions about how links behave in certain situations. + +Links are evaluated in three basic contexts. + +@li dbPutLink()/dbScanFwdLink() +@li dbGetLink() of non-CP link +@li dbGetLink() during a scan resulting from a CP link. + +An input link can bring in a Value as well as meta-data, alarm, time, and display/control info. +For input links, the PVA link engine attempts to always maintain consistency between Value, alarm, and time. +However, consistency between these, and the display/control info is only ensured during a CP scan. + + + + */ diff --git a/pdbApp/pvalink_lset.cpp b/pdbApp/pvalink_lset.cpp index c0d14a1..099a90d 100644 --- a/pdbApp/pvalink_lset.cpp +++ b/pdbApp/pvalink_lset.cpp @@ -173,7 +173,7 @@ long pvaGetValue(DBLINK *plink, short dbrType, void *pbuffer, if(!self->valid()) { // disconnected if(self->ms != pvaLink::NMS) { - recGblSetSevr(plink->precord, self->snap_severity, LINK_ALARM); + recGblSetSevr(plink->precord, LINK_ALARM, self->snap_severity); } // TODO: better capture of disconnect time epicsTimeGetCurrent(&self->snap_time); @@ -209,7 +209,7 @@ long pvaGetValue(DBLINK *plink, short dbrType, void *pbuffer, if((self->snap_severity!=NO_ALARM && self->ms == pvaLink::MS) || (self->snap_severity==INVALID_ALARM && self->ms == pvaLink::MSI)) { - recGblSetSevr(plink->precord, self->snap_severity, LINK_ALARM); + recGblSetSevr(plink->precord, LINK_ALARM, self->snap_severity); } if(self->time) {