diff --git a/pdbApp/pvif.cpp b/pdbApp/pvif.cpp index ec17a5d..afd5a40 100644 --- a/pdbApp/pvif.cpp +++ b/pdbApp/pvif.cpp @@ -73,7 +73,8 @@ struct pvCommon { pvd::uint32 nsecMask; - pvd::BitSet maskALWAYS, maskVALUE, maskALARM, maskPROPERTY; + pvd::BitSet maskALWAYS, maskVALUE, maskALARM, maskPROPERTY, + maskVALUEPut; pvd::PVLongPtr sec; pvd::PVIntPtr status, severity, nsec, userTag; @@ -198,7 +199,12 @@ void attachAll(PVM& pvm, const pvd::PVStructurePtr& pv) pvm.value = pv->getSubField("value.index"); if(!pvm.value) pvm.value = pv->getSubFieldT("value"); - pvm.maskVALUE.set(pvm.value->getFieldOffset()); + const pvd::PVField *fld = pvm.value.get(); + pvm.maskVALUE.set(fld->getFieldOffset()); + for(;fld; fld = fld->getParent()) { + // set field bit and all enclosing structure bits + pvm.maskVALUEPut.set(fld->getFieldOffset()); + } attachMeta(pvm, pv); } @@ -437,7 +443,7 @@ struct PVIFScalarNumeric : public PVIF virtual void get(const epics::pvData::BitSet& mask) OVERRIDE FINAL { - if(mask.logical_and(pvmeta.maskVALUE)) + if(mask.logical_and(pvmeta.maskVALUEPut)) getValue(pvmeta); }