This is Unofficial EPICS BASE Doxygen Site
epics::pvDatabase::ControlSupport Class Reference

Base interface for a ControlSupport. More...

#include "controlSupport.h"

+ Inheritance diagram for epics::pvDatabase::ControlSupport:
+ Collaboration diagram for epics::pvDatabase::ControlSupport:

Public Member Functions

 POINTER_DEFINITIONS (ControlSupport)
 
virtual ~ControlSupport ()
 
virtual bool init (epics::pvData::PVFieldPtr const &pvValue, epics::pvData::PVFieldPtr const &pvSupport)
 Connects to contol fields. More...
 
virtual bool process ()
 Honors control fields. More...
 
virtual void reset ()
 If implementing minSteps it sets isMinStep to false. More...
 

Static Public Member Functions

static ControlSupportPtr create (PVRecordPtr const &pvRecord)
 create a ControlSupport More...
 
static epics::pvData::StructureConstPtr controlField (epics::pvData::ScalarType scalarType)
 create a controlSupport required by ControlSupport More...
 

Detailed Description

Base interface for a ControlSupport.

Definition at line 28 of file controlSupport.h.

Constructor & Destructor Documentation

epics::pvDatabase::ControlSupport::~ControlSupport ( )
virtual

The Destructor.

Definition at line 30 of file controlSupport.cpp.

31 {
32 //cout << "ControlSupport::~ControlSupport()\n";
33 }

Member Function Documentation

epics::pvData::StructureConstPtr epics::pvDatabase::ControlSupport::controlField ( epics::pvData::ScalarType  scalarType)
static

create a controlSupport required by ControlSupport

Parameters
scalarTypeThe type for outputValue.
Returns
The controlField introspection structure.

Definition at line 35 of file controlSupport.cpp.

36 {
37  return FieldBuilder::begin()
38  ->setId("control_t")
39  ->add("limitLow", pvDouble)
40  ->add("limitHigh", pvDouble)
41  ->add("minStep", pvDouble)
42  ->add("outputValue", scalarType)
43  ->createStructure();
44 }
epicsTime begin
Definition: caConnTest.cpp:22
ControlSupportPtr epics::pvDatabase::ControlSupport::create ( PVRecordPtr const &  pvRecord)
static

create a ControlSupport

Parameters
pvRecord- The pvRecord to which the support is attached.
Returns
The new ControlSupport

Definition at line 47 of file controlSupport.cpp.

48 {
49  ControlSupportPtr support(new ControlSupport(pvRecord));
50  return support;
51 }
std::tr1::shared_ptr< ControlSupport > ControlSupportPtr
bool epics::pvDatabase::ControlSupport::init ( epics::pvData::PVFieldPtr const &  pvValue,
epics::pvData::PVFieldPtr const &  pvSupport 
)
virtual

Connects to contol fields.

Parameters
pvValueThe field to support.
pvSupportSupport specific fields.
Returns
true for success and false for failure.

Reimplemented from epics::pvDatabase::PVSupport.

Definition at line 57 of file controlSupport.cpp.

58 {
59  if(pv) {
60  if(pv->getField()->getType()==epics::pvData::scalar) {
61  ScalarConstPtr s = static_pointer_cast<const Scalar>(pv->getField());
62  if(ScalarTypeFunc::isNumeric(s->getScalarType())) {
63  pvValue = static_pointer_cast<PVScalar>(pv);
64  }
65  }
66  }
67  if(!pvValue) {
68  cout << "ControlSupport for record " << pvRecord->getRecordName()
69  << " failed because not numeric scalar\n";
70  return false;
71  }
72  pvControl = static_pointer_cast<PVStructure>(pvsup);
73  if(pvControl) {
74  pvLimitLow = pvControl->getSubField<PVDouble>("limitLow");
75  pvLimitHigh = pvControl->getSubField<PVDouble>("limitHigh");
76  pvMinStep = pvControl->getSubField<PVDouble>("minStep");
77  pvOutputValue = pvControl->getSubField<PVScalar>("outputValue");
78  }
79  if(!pvControl || !pvLimitLow || !pvLimitHigh || !pvMinStep || !pvOutputValue) {
80  cout << "ControlSupport for record " << pvRecord->getRecordName()
81  << " failed because pvSupport not a valid control structure\n";
82  return false;
83  }
84  ConvertPtr convert = getConvert();
85  currentValue = convert->toDouble(pvValue);
86  isMinStep = false;
87  return true;
88 }
This class implements introspection object for Scalar.
Definition: pvIntrospect.h:397
PVScalar is the base class for each scalar field.
Definition: pvData.h:272
Definition: tool_lib.h:67
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:788
std::tr1::shared_ptr< const Scalar > ScalarConstPtr
Definition: pvIntrospect.h:150
bool isNumeric(ScalarType type)
Definition: TypeFunc.cpp:53
Data interface for a structure,.
Definition: pvData.h:712
Class that holds the data for each possible scalar type.
Definition: pvData.h:54
std::tr1::shared_ptr< Convert > ConvertPtr
Definition: convert.h:23
epics::pvDatabase::ControlSupport::POINTER_DEFINITIONS ( ControlSupport  )
bool epics::pvDatabase::ControlSupport::process ( )
virtual

Honors control fields.

Returns
Returns true is any fields were modified; otherwise false.

Implements epics::pvDatabase::PVSupport.

Definition at line 90 of file controlSupport.cpp.

91 {
92  ConvertPtr convert = getConvert();
93  double value = convert->toDouble(pvValue);
94  if(!isMinStep && value==currentValue) return false;
95  double limitLow = pvLimitLow->get();
96  double limitHigh = pvLimitHigh->get();
97  double minStep = pvMinStep->get();
98  bool setValue = false;
99  if(limitHigh>limitLow) {
100  if(value>limitHigh) {value = limitHigh;setValue=true;}
101  if(value<limitLow) {value = limitLow;setValue=true;}
102  }
103  if(setValue) convert->fromDouble(pvValue,value);
104  double diff = value - currentValue;
105  double outputValue = value;
106  if(minStep>0.0) {
107  if(diff<0.0) {
108  outputValue = currentValue - minStep;
109  if(limitHigh>limitLow && outputValue<=limitLow) outputValue = limitLow;
110  isMinStep = true;
111  if(outputValue<value) {
112  outputValue = value;
113  isMinStep = false;
114  }
115  } else {
116  outputValue = currentValue + minStep;
117  if(limitHigh>limitLow && outputValue>=limitHigh) outputValue = limitHigh;
118  isMinStep = true;
119  if(outputValue>value) {
120  outputValue = value;
121  isMinStep = false;
122  }
123  }
124  }
125  if(outputValue==currentValue) return false;
126  currentValue = outputValue;
127  convert->fromDouble(pvOutputValue,outputValue);
128  return true;
129 }
Definition: link.h:174
std::tr1::shared_ptr< Convert > ConvertPtr
Definition: convert.h:23
void epics::pvDatabase::ControlSupport::reset ( )
virtual

If implementing minSteps it sets isMinStep to false.

Returns
Returns true is any fields were modified; otherwise false.

Reimplemented from epics::pvDatabase::PVSupport.

Definition at line 131 of file controlSupport.cpp.

132 {
133  isMinStep = false;
134 }

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