This is Unofficial EPICS BASE Doxygen Site
traceRecord.cpp
Go to the documentation of this file.
1 /* traceRecord.cpp */
12 #include <string>
13 #include <cstring>
14 #include <stdexcept>
15 #include <memory>
16 #include <set>
17 
18 #include <pv/lock.h>
19 #include <pv/pvType.h>
20 #include <pv/pvData.h>
21 #include <pv/pvTimeStamp.h>
22 #include <pv/timeStamp.h>
23 #include <pv/rpcService.h>
24 #include <pv/pvAccess.h>
25 #include <pv/status.h>
26 #include <pv/serverContext.h>
27 
28 #define epicsExportSharedSymbols
29 #include "pv/pvStructureCopy.h"
31 #include "pv/traceRecord.h"
32 
34 using namespace epics::pvData;
35 using namespace epics::pvAccess;
36 using namespace std;
37 
38 namespace epics { namespace pvDatabase {
39 
40 TraceRecordPtr TraceRecord::create(
41  std::string const & recordName)
42 {
43  FieldCreatePtr fieldCreate = getFieldCreate();
44  PVDataCreatePtr pvDataCreate = getPVDataCreate();
45  StructureConstPtr topStructure = fieldCreate->createFieldBuilder()->
46  addNestedStructure("argument")->
47  add("recordName",pvString)->
48  add("level",pvInt)->
49  endNested()->
50  addNestedStructure("result") ->
51  add("status",pvString) ->
52  endNested()->
53  createStructure();
54  PVStructurePtr pvStructure = pvDataCreate->createPVStructure(topStructure);
55  TraceRecordPtr pvRecord(
56  new TraceRecord(recordName,pvStructure));
57  if(!pvRecord->init()) pvRecord.reset();
58  return pvRecord;
59 }
60 
61 TraceRecord::TraceRecord(
62  std::string const & recordName,
63  epics::pvData::PVStructurePtr const & pvStructure)
64 : PVRecord(recordName,pvStructure)
65 {
66 }
67 
68 
69 bool TraceRecord::init()
70 {
71  initPVRecord();
72  PVStructurePtr pvStructure = getPVStructure();
73  pvRecordName = pvStructure->getSubField<PVString>("argument.recordName");
74  if(!pvRecordName) return false;
75  pvLevel = pvStructure->getSubField<PVInt>("argument.level");
76  if(!pvLevel) return false;
77  pvResult = pvStructure->getSubField<PVString>("result.status");
78  if(!pvResult) return false;
79  return true;
80 }
81 
82 void TraceRecord::process()
83 {
84  string name = pvRecordName->get();
85  PVRecordPtr pvRecord = PVDatabase::getMaster()->findRecord(name);
86  if(!pvRecord) {
87  pvResult->put(name + " not found");
88  return;
89  }
90  pvRecord->setTraceLevel(pvLevel->get());
91  pvResult->put("success");
92 }
93 
94 
95 }}
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:788
Definition: memory.hpp:41
TODO only here because of the Lockable.
Definition: ntaggregate.cpp:16
std::tr1::shared_ptr< const Structure > StructureConstPtr
Definition: pvIntrospect.h:162
Base interface for a PVRecord.
Definition: pvDatabase.h:56
std::tr1::shared_ptr< PVDataCreate > PVDataCreatePtr
Definition: pvData.h:124
Holds all PVA related.
Definition: pvif.h:34
PVString is special case, since it implements SerializableArray.
Definition: pvData.h:521
pvData
Definition: monitor.h:428
Trace activity of PVRecord.
Definition: traceRecord.h:33
FORCE_INLINE const FieldCreatePtr & getFieldCreate()
std::tr1::shared_ptr< PVRecord > PVRecordPtr
Definition: pvDatabase.h:21
std::tr1::shared_ptr< TraceRecord > TraceRecordPtr
Definition: traceRecord.h:22
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
Class that holds the data for each possible scalar type.
Definition: pvData.h:54
std::tr1::shared_ptr< FieldCreate > FieldCreatePtr
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
Definition: pvData.h:1648