15 #include <epicsMutex.h>
18 #include "evr/pulser.h"
19 #include "evr/prescaler.h"
20 #include "evr/output.h"
24 struct OutputFRIB :
public Output
29 OutputFRIB(
const std::string& n, epicsUInt32 src, EVRFRIB *evr);
30 virtual ~OutputFRIB();
32 virtual epicsUInt32 source()
const {
return src; }
33 virtual void setSource(epicsUInt32) {}
35 virtual bool enabled()
const;
36 virtual void enable(
bool);
38 virtual void lock()
const;
39 virtual void unlock()
const;
42 struct PreScalerFRIB :
public PreScaler
44 PreScalerFRIB(
const std::string& n, EVRFRIB& o);
45 virtual ~PreScalerFRIB();
47 virtual epicsUInt32 prescaler()
const;
48 virtual void setPrescaler(epicsUInt32);
50 virtual void lock()
const;
51 virtual void unlock()
const;
54 struct PulserFRIB :
public Pulser
59 PulserFRIB(
const std::string& s,
unsigned n, EVRFRIB *evr);
60 virtual ~PulserFRIB();
62 virtual bool enabled()
const {
return true;}
63 virtual void enable(
bool) {}
65 virtual void softSet() {}
66 virtual void softReset() {}
68 virtual void setDelayRaw(epicsUInt32);
69 virtual void setDelay(
double);
70 virtual epicsUInt32 delayRaw()
const;
71 virtual double delay()
const;
73 virtual void setWidthRaw(epicsUInt32);
74 virtual void setWidth(
double);
75 virtual epicsUInt32 widthRaw()
const;
76 virtual double width()
const;
78 virtual epicsUInt32 prescaler()
const {
return 1u; }
79 virtual void setPrescaler(epicsUInt32) {}
81 virtual epicsUInt32 psTrig()
const {
return 0u; }
82 virtual void setPSTrig(epicsUInt32) {}
84 virtual epicsUInt32 dbusTrig()
const {
return 0u; }
85 virtual void setDBusTrig(epicsUInt32) {}
87 virtual bool polarityInvert()
const {
return false; }
88 virtual void setPolarityInvert(
bool) {}
90 virtual MapType::type
mappedSource(epicsUInt32 src)
const;
91 virtual void sourceSetMap(epicsUInt32 src,MapType::type action);
93 virtual void lock()
const;
94 virtual void unlock()
const;
101 mutable epicsMutex mutex;
103 volatile unsigned char *base;
107 bool is_evg, internal_clk;
110 epicsUInt32 timeoffset;
112 IOSCANPVT statusScan;
114 PreScalerFRIB divider;
115 PulserFRIB pulse0, pulse1;
116 OutputFRIB out_divider,
121 MapType::type active;
123 PulseMap() :active(MapType::None), cnt(0u) {}
128 typedef std::vector<EvtMap> mappings_t;
133 EVRFRIB(
const std::string& s, bus_configuration& busConfig,
volatile unsigned char *base);
137 epicsUInt32 machineCycles()
const;
139 epicsUInt32 Config()
const;
140 void setConfig(epicsUInt32 v);
143 epicsUInt32 Command()
const;
144 void setCommand(epicsUInt32 v);
146 epicsUInt32 FPSCommCnt()
const;
147 epicsUInt32 FPSStatus()
const;
148 epicsUInt32 FPSSource()
const;
149 epicsUInt32 BeamOnTime()
const;
153 virtual void lock()
const;
154 virtual void unlock()
const;
158 virtual std::string model()
const;
159 virtual MRFVersion version()
const;
161 virtual bool enabled()
const {
return true; }
162 virtual void enable(
bool) {}
164 virtual bool mappedOutputState()
const {
return false; }
166 virtual bool specialMapped(epicsUInt32 code, epicsUInt32 func)
const {
return false; }
167 virtual void specialSetMap(epicsUInt32 code, epicsUInt32 func,
bool set) {}
169 virtual double clock()
const;
170 virtual void clockSet(
double clk);
172 virtual bool pllLocked()
const {
return linkStatus(); }
174 virtual epicsUInt32 uSecDiv()
const {
return 0; }
176 virtual bool extInhib()
const {
return false; }
177 virtual void setExtInhib(
bool) {}
179 virtual void setSourceTS(TSSource) { }
180 virtual TSSource SourceTS()
const {
return TSSourceInternal; }
182 virtual double clockTS()
const;
183 virtual void clockTSSet(
double);
185 virtual epicsUInt32 tsDiv()
const {
return 1u; }
190 virtual bool interestedInEvent(epicsUInt32 event,
bool set);
192 virtual bool TimeStampValid()
const;
193 virtual IOSCANPVT TimeStampValidEvent()
const {
return statusScan; }
195 virtual bool getTimeStamp(epicsTimeStamp *ts,epicsUInt32 event);
201 virtual bool getTicks(epicsUInt32 *tks);
203 virtual IOSCANPVT eventOccurred(epicsUInt32 event)
const;
205 virtual void eventNotifyAdd(epicsUInt32 event, eventCallback,
void*);
206 virtual void eventNotifyDel(epicsUInt32 event, eventCallback,
void*);
208 virtual epicsUInt32 irqCount()
const {
return 0; }
210 virtual bool linkStatus()
const;
211 virtual IOSCANPVT linkChanged()
const {
return statusScan; }
212 virtual epicsUInt32 recvErrorCount()
const {
return 0; }
214 virtual epicsUInt16 dbus()
const {
return 0; }
216 virtual epicsUInt32 heartbeatTIMOCount()
const {
return 0; }
217 virtual IOSCANPVT heartbeatTIMOOccured()
const {
return statusScan; }
219 virtual epicsUInt32 FIFOFullCount()
const {
return 0; }
220 virtual epicsUInt32 FIFOOverRate()
const {
return 0; }
221 virtual epicsUInt32 FIFOEvtCount()
const {
return 0; }
222 virtual epicsUInt32 FIFOLoopCount()
const {
return 0; }
A programmable delay unit.
Definition: pulser.h:40
virtual void sourceSetMap(epicsUInt32 src, MapType::type action)=0
Set mapping of source 'src'.
virtual MapType::type mappedSource(epicsUInt32 src) const =0
What action is source 'src' mapped to?
User implementation hook.
Definition: object.h:460