mrfioc2  2.3.0
evr.cpp
Go to the documentation of this file.
1 /*************************************************************************\
2 * Copyright (c) 2010 Brookhaven Science Associates, as Operator of
3 * Brookhaven National Laboratory.
4 * Copyright (c) 2015 Paul Scherrer Institute (PSI), Villigen, Switzerland
5 * mrfioc2 is distributed subject to a Software License Agreement found
6 * in file LICENSE that is included with this distribution.
7 \*************************************************************************/
8 /*
9  * Author: Michael Davidsaver <mdavidsaver@gmail.com>
10  */
11 
12 #include "mrf/version.h"
13 
14 #include "dbCommon.h"
15 #include <epicsExport.h>
16 
17 #include "evr/evr.h"
18 #include "evr/pulser.h"
19 #include "evr/output.h"
20 #include "evr/delay.h"
21 #include "evr/input.h"
22 #include "evr/prescaler.h"
23 #include "evr/cml.h"
24 
35 {
36 }
37 
38 std::string EVR::versionStr() const
39 {
40  return version().str();
41 }
42 
43 std::string EVR::versionSw() const
44 {
45  return MRF_VERSION;
46 }
47 
48 
50  return &busConfiguration;
51 }
52 
53 std::string EVR::position() const
54 {
55  std::ostringstream position;
56 
57  if(busConfiguration.busType == busType_pci) {
58  position << std::hex << busConfiguration.pci.dev->bus << ":"
59  << std::hex << busConfiguration.pci.dev->device << "."
60  << std::hex << busConfiguration.pci.dev->function;
61  if(busConfiguration.pci.dev->slot)
62  position << " slot=" << busConfiguration.pci.dev->slot;
63  } else if(busConfiguration.busType == busType_vme) {
64  position << "Slot #" << busConfiguration.vme.slot;
65  } else {
66  position << "Unknown position";
67  }
68 
69  return position.str();
70 }
71 
73 {
74 }
75 
77 {
78 }
79 
81 {
82 }
83 
85 {
86 }
87 
89 {
90 }
91 
93 {
94 }
95 
97 
98  OBJECT_PROP1("Model", &EVR::model);
99 
100  OBJECT_PROP1("Version", &EVR::versionStr);
101  OBJECT_PROP1("Sw Version", &EVR::versionSw);
102 
103  OBJECT_PROP1("Position", &EVR::position);
104 
105  OBJECT_PROP1("Event Clock TS Div", &EVR::uSecDiv);
106 
107  OBJECT_PROP1("Receive Error Count", &EVR::recvErrorCount);
108  OBJECT_PROP1("Receive Error Count", &EVR::linkChanged);
109 
110  OBJECT_PROP1("FIFO Overflow Count", &EVR::FIFOFullCount);
111 
112  OBJECT_PROP1("FIFO Over rate", &EVR::FIFOOverRate);
113  OBJECT_PROP1("FIFO Event Count", &EVR::FIFOEvtCount);
114  OBJECT_PROP1("FIFO Loop Count", &EVR::FIFOLoopCount);
115 
116  OBJECT_PROP1("HB Timeout Count", &EVR::heartbeatTIMOCount);
117  OBJECT_PROP1("HB Timeout Count", &EVR::heartbeatTIMOOccured);
118 
119  OBJECT_PROP1("Timestamp Prescaler", &EVR::tsDiv);
120 
121  OBJECT_PROP2("Timestamp Source", &EVR::SourceTSraw, &EVR::setSourceTSraw);
122 
124 
125  OBJECT_PROP2("Timestamp Clock", &EVR::clockTS, &EVR::clockTSSet);
126 
127  OBJECT_PROP2("Enable", &EVR::enabled, &EVR::enable);
128 
129  OBJECT_PROP2("External Inhibit", &EVR::extInhib, &EVR::setExtInhib);
130 
131  OBJECT_PROP1("PLL Lock Status", &EVR::pllLocked);
132 
133  OBJECT_PROP1("Interrupt Count", &EVR::irqCount);
134 
135  OBJECT_PROP1("Link Status", &EVR::linkStatus);
136  OBJECT_PROP1("Link Status", &EVR::linkChanged);
137 
138  OBJECT_PROP1("Timestamp Valid", &EVR::TimeStampValid);
139  OBJECT_PROP1("Timestamp Valid", &EVR::TimeStampValidEvent);
140 
141  OBJECT_PROP1("SW Output status", &EVR::mappedOutputState);
142 
144 
145 
147 
149 
150  OBJECT_PROP1("State", &Input::state);
151 
153 
154  OBJECT_PROP2("External Code", &Input::extEvt, &Input::extEvtSet);
155 
156  OBJECT_PROP2("Backwards Code", &Input::backEvt, &Input::backEvtSet);
157 
159 
161 
162  OBJECT_PROP2("DBus Mask", &Input::dbus, &Input::dbusSet);
163 
165 
166 
168 
170 
172 
174 
175 
177 
180 
183 
185 
187 
189 
191 
192 
194 
196 
198 
199 
200 OBJECT_BEGIN(CML) {
201 
202  OBJECT_PROP2("Enable", &CML::enabled, &CML::enable);
203 
204  OBJECT_PROP2("Reset", &CML::inReset, &CML::reset);
205 
206  OBJECT_PROP2("Power", &CML::powered, &CML::power);
207 
209 
211 
212  OBJECT_PROP2("Counts High", &CML::timeHigh, &CML::setTimeHigh);
213  OBJECT_PROP2("Counts High", &CML::countHigh, &CML::setCountHigh);
214 
215  OBJECT_PROP2("Counts Low", &CML::timeLow, &CML::setTimeLow);
216  OBJECT_PROP2("Counts Low", &CML::countLow, &CML::setCountLow);
217 
218  OBJECT_PROP2("Counts Init", &CML::timeInit, &CML::setTimeInit);
219  OBJECT_PROP2("Counts Init", &CML::countInit, &CML::setCountInit);
220 
222 
223  OBJECT_PROP1("Freq Mult", &CML::freqMultiple);
224 
226 
227  OBJECT_PROP2("Waveform", &CML::getPattern<CML::patternWaveform>,
228  &CML::setPattern<CML::patternWaveform>);
229 
230  OBJECT_PROP2("Pat Rise", &CML::getPattern<CML::patternRise>,
231  &CML::setPattern<CML::patternRise>);
232 
233  OBJECT_PROP2("Pat High", &CML::getPattern<CML::patternHigh>,
234  &CML::setPattern<CML::patternHigh>);
235 
236  OBJECT_PROP2("Pat Fall", &CML::getPattern<CML::patternFall>,
237  &CML::setPattern<CML::patternFall>);
238 
239  OBJECT_PROP2("Pat Low", &CML::getPattern<CML::patternLow>,
240  &CML::setPattern<CML::patternLow>);
241 
243 
245 
249 
struct configuration_vme vme
virtual bool inReset() const =0
enum busType busType
virtual bool powered() const =0
virtual std::string position() const
Position of EVR device in enclosure.
Definition: evr.cpp:53
virtual void edgeRiseSet(bool)=0
Set active rise/fall when using edge trigger mode.
virtual epicsUInt32 countHigh() const =0
virtual epicsUInt32 FIFOOverRate() const =0
virtual void enable(bool)=0
epicsUInt16 extModeraw() const
Definition: input.h:66
virtual epicsUInt32 FIFOLoopCount() const =0
virtual bool enabled() const =0
virtual ~CML()=0
Definition: evr.cpp:88
virtual epicsUInt32 backEvt() const =0
OBJECT_BEGIN(EVR)
Definition: evr.cpp:96
virtual void setRecyclePat(bool)=0
virtual epicsUInt32 countLow() const =0
virtual void enable(bool)=0
virtual void setTimeInit(double)=0
virtual void reset(bool)=0
virtual void backEvtSet(epicsUInt32)=0
Set the event code sent by an a backwards event.
virtual void setCountHigh(epicsUInt32)=0
virtual bool levelHigh() const =0
void setModRaw(epicsUInt16 r)
Definition: cml.h:104
virtual bool polarityInvert() const =0
virtual epicsUInt32 extEvt() const =0
virtual double fineDelay() const =0
delay by fraction of one event clock period. Units of sec
virtual void levelHighSet(bool)=0
Set active high/low when using level trigger mode.
virtual epicsUInt16 dbus() const =0
virtual void setDelay(double)=0
virtual IOSCANPVT heartbeatTIMOOccured() const =0
virtual epicsUInt32 prescaler() const =0
virtual epicsUInt32 heartbeatTIMOCount() const =0
virtual epicsUInt32 source() const =0
virtual void setSource(epicsUInt32)=0
virtual ~EVR()=0
Definition: evr.cpp:34
virtual bool edgeRise() const =0
virtual epicsUInt32 uSecDiv() const =0
Approximate divider from event clock period to 1us.
Definition: output.h:26
virtual bool polarityInvert() const =0
Trigger level.
virtual void enable(bool)=0
virtual bool recyclePat() const =0
Definition: cml.h:25
virtual double timeHigh() const =0
virtual void setPrescaler(epicsUInt32)=0
virtual double getDelay1() const =0
epicsUInt16 modeRaw() const
Definition: cml.h:105
virtual epicsUInt32 tsDiv() const =0
When using internal TS source gives the divider from event clock period to TS period.
virtual void clockSet(double clk)=0
#define OBJECT_PROP1(NAME, GET)
Definition: object.h:515
virtual bool state() const =0
virtual void setState(bool enabled)=0
virtual void setDelayRaw(epicsUInt32)=0
virtual epicsUInt32 FIFOFullCount() const =0
Definition: input.h:24
virtual void setWidthRaw(epicsUInt32)=0
virtual double delay() const =0
virtual double getDelay0() const =0
virtual epicsUInt32 FIFOEvtCount() const =0
virtual void setDelay1(double val)=0
A programmable delay unit.
Definition: pulser.h:38
virtual void setWidth(double)=0
epicsUInt16 backModeraw() const
Definition: input.h:69
virtual void setFineDelay(double)=0
virtual ~PreScaler()=0
Definition: evr.cpp:84
epicsUInt32 SourceTSraw() const
Definition: evr.h:190
virtual void extEvtSet(epicsUInt32)=0
Set the event code sent by an externel (local) event.
virtual epicsUInt32 irqCount() const =0
virtual ~Input()=0
Definition: evr.cpp:80
struct configuration_pci pci
virtual bool extInhib() const =0
Using external hardware input for inhibit?
virtual bool enabled() const =0
void extModeSetraw(epicsUInt16 r)
Definition: input.h:65
virtual double clockTS() const =0
virtual void setTimeHigh(double)=0
virtual ~Output()=0
Definition: evr.cpp:76
virtual void setCountLow(epicsUInt32)=0
virtual epicsUInt32 widthRaw() const =0
std::string versionStr() const
Definition: evr.cpp:38
const epicsPCIDevice * dev
virtual bool TimeStampValid() const =0
virtual void setCountInit(epicsUInt32)=0
virtual void enable(bool)=0
virtual epicsUInt32 freqMultiple() const =0
Speed of CML clock as a multiple of the event clock.
virtual epicsUInt32 recvErrorCount() const =0
virtual void clockTSSet(double)=0
#define OBJECT_PROP2(NAME, GET, SET)
Definition: object.h:518
bus_configuration * getBusConfiguration()
Definition: evr.cpp:49
void backModeSetraw(epicsUInt16 r)
Definition: input.h:68
virtual ~Pulser()=0
Definition: evr.cpp:72
Base interface for EVRs.
Definition: evr.h:45
virtual void dbusSet(epicsUInt16)=0
Set mask of dbus bits are driven by this input.
virtual bool enabled() const =0
virtual void setTimeLow(double)=0
virtual bool pllLocked() const =0
Internal PLL Status.
virtual bool enabled() const =0
virtual ~DelayModuleEvr()=0
Definition: evr.cpp:92
void setSourceTSraw(epicsUInt32 r)
Definition: evr.h:189
virtual double clock() const =0
virtual std::string model() const =0
Hardware model.
virtual epicsUInt32 delayRaw() const =0
virtual std::string versionSw() const
Software Version.
Definition: evr.cpp:43
virtual IOSCANPVT linkChanged() const =0
virtual bool enabled() const =0
virtual void setExtInhib(bool)=0
virtual MRFVersion version() const =0
Firmware Version.
virtual bool linkStatus() const =0
virtual double timeLow() const =0
virtual void power(bool)=0
virtual double timeInit() const =0
virtual double width() const =0
virtual void setPolarityInvert(bool)=0
OBJECT_END(EVR) OBJECT_BEGIN(Input)
Definition: evr.cpp:143
virtual bool mappedOutputState() const =0
virtual void setPolarityInvert(bool)=0
virtual epicsUInt32 countInit() const =0
virtual void setDelay0(double val)=0
virtual void setPrescaler(epicsUInt32)=0
virtual IOSCANPVT TimeStampValidEvent() const =0
virtual epicsUInt32 prescaler() const =0