This is Unofficial EPICS BASE Doxygen Site
epics::pvCopy::PVDeadbandFilter Class Reference

A Plugin for a filter that gets a sub array from a PVScalarDeadband. More...

#include "pvDeadbandPlugin.h"

+ Inheritance diagram for epics::pvCopy::PVDeadbandFilter:
+ Collaboration diagram for epics::pvCopy::PVDeadbandFilter:

Public Member Functions

 POINTER_DEFINITIONS (PVDeadbandFilter)
 
virtual ~PVDeadbandFilter ()
 
bool filter (const epics::pvData::PVFieldPtr &pvCopy, const epics::pvData::BitSetPtr &bitSet, bool toCopy)
 
std::string getName ()
 
- Public Member Functions inherited from epics::pvCopy::PVFilter
 POINTER_DEFINITIONS (PVFilter)
 
virtual ~PVFilter ()
 

Static Public Member Functions

static PVDeadbandFilterPtr create (const std::string &requestValue, const epics::pvData::PVFieldPtr &master)
 

Detailed Description

A Plugin for a filter that gets a sub array from a PVScalarDeadband.

Definition at line 61 of file pvDeadbandPlugin.h.

Constructor & Destructor Documentation

epics::pvCopy::PVDeadbandFilter::~PVDeadbandFilter ( )
virtual

Definition at line 56 of file pvDeadbandPlugin.cpp.

57 {
58 }

Member Function Documentation

PVDeadbandFilterPtr epics::pvCopy::PVDeadbandFilter::create ( const std::string &  requestValue,
const epics::pvData::PVFieldPtr master 
)
static

Create a PVDeadbandFilter.

Parameters
requestValueThe value part of a name=value request option.
masterThe field in the master PVStructure to which the PVFilter will be attached.
Returns
The PVFilter. A null is returned if master or requestValue is not appropriate for the plugin.

Definition at line 60 of file pvDeadbandPlugin.cpp.

63 {
64  FieldConstPtr field =master->getField();
65  Type type = field->getType();
66  if(type!=scalar) return PVDeadbandFilterPtr();
68  if(!ScalarTypeFunc::isNumeric(scalar->getScalarType())) return PVDeadbandFilterPtr();
69  bool absolute = false;
70  if(requestValue.find("abs")==0) {
71  absolute = true;
72  } else if(requestValue.find("rel")==0) {
73  absolute = false;
74  } else {
75  return PVDeadbandFilterPtr();
76  }
77  size_t ind = requestValue.find(':');
78  if(ind==string::npos) return PVDeadbandFilterPtr();
79  string svalue = requestValue.substr(ind+1);
80  double deadband = atof(svalue.c_str());
81  if(deadband==0.0) return PVDeadbandFilterPtr();
84  new PVDeadbandFilter(
85  absolute,deadband,static_pointer_cast<PVScalar>(master)));
86  return filter;
87 }
This class implements introspection object for Scalar.
Definition: pvIntrospect.h:397
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:788
pvd::StructureConstPtr type
std::tr1::shared_ptr< PVDeadbandFilter > PVDeadbandFilterPtr
std::tr1::shared_ptr< const Scalar > ScalarConstPtr
Definition: pvIntrospect.h:150
bool filter(const epics::pvData::PVFieldPtr &pvCopy, const epics::pvData::BitSetPtr &bitSet, bool toCopy)
bool isNumeric(ScalarType type)
Definition: TypeFunc.cpp:53
std::tr1::shared_ptr< const Field > FieldConstPtr
Definition: pvIntrospect.h:137
bool epics::pvCopy::PVDeadbandFilter::filter ( const epics::pvData::PVFieldPtr pvCopy,
const epics::pvData::BitSetPtr bitSet,
bool  toCopy 
)
virtual

Perform a filter operation

Parameters
pvCopyThe field in the copy PVStructure.
bitSetA bitSet for copyPVStructure.
toCopy(true,false) means copy (from master to copy,from copy to master)
Returns
if filter (modified, did not modify) destination. Null is returned if master or requestValue is not appropriate for the plugin.

Implements epics::pvCopy::PVFilter.

Definition at line 99 of file pvDeadbandPlugin.cpp.

100 {
101  if(!toCopy) return false;
102  double value = convert->toDouble(master);
103  double diff = value - lastReportedValue;
104  if(diff<0.0) diff = - diff;
105  bool report = true;
106  if(firstTime) {
107  firstTime = false;
108  } else if(absolute) {
109  if(diff<deadband) report = false;
110  } else {
111  double last = lastReportedValue;
112  if(last<0.0) last = -last;
113  if(last>1e-20) {
114  double percent = (diff/last)*100.0;
115  if(percent<deadband) report = false;
116  }
117  }
119  convert->fromDouble(copy,value);
120  if(report) {
121  lastReportedValue = value;
122  bitSet->set(pvCopy->getFieldOffset());
123  } else {
124  bitSet->clear(pvCopy->getFieldOffset());
125  }
126  return true;
127 }
Definition: link.h:174
PVScalar is the base class for each scalar field.
Definition: pvData.h:272
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:788
void copy(PVValueArray< T > &pvFrom, size_t fromOffset, size_t fromStride, PVValueArray< T > &pvTo, size_t toOffset, size_t toStride, size_t count)
Copy a subarray from one scalar array to another.
#define report
Definition: aaiRecord.c:53
std::tr1::shared_ptr< PVScalar > PVScalarPtr
Definition: pvData.h:77
string epics::pvCopy::PVDeadbandFilter::getName ( )
virtual

Get the filter name.

Returns
The name.

Implements epics::pvCopy::PVFilter.

Definition at line 129 of file pvDeadbandPlugin.cpp.

130 {
131  return name;
132 }
epics::pvCopy::PVDeadbandFilter::POINTER_DEFINITIONS ( PVDeadbandFilter  )

The documentation for this class was generated from the following files: