18 #include <epicsMutex.h>
19 #include <epicsTimer.h>
21 #include <epicsTime.h>
22 #include <generalTimeSup.h>
23 #include <epicsThread.h>
24 #include <epicsEvent.h>
25 #include <epicsMutex.h>
27 #include <devLibPCI.h>
29 #include "evgAcTrig.h"
30 #include "evgEvtClk.h"
31 #include "evgTrigEvt.h"
35 #include "evgOutput.h"
36 #include "mrmDataBufTx.h"
37 #include "mrmtimesrc.h"
38 #include "mrmevgseq.h"
40 #include "configurationInfo.h"
54 enum ALARM_TS {TS_ALARM_NONE, TS_ALARM_MINOR, TS_ALARM_MAJOR};
57 public TimeStampSource,
68 evgMrm(
const std::string&
id,
70 bus_configuration& busConfig,
71 volatile epicsUInt8*
const base,
72 const epicsPCIDevice* pciDevice);
78 virtual void lock()
const{};
79 virtual void unlock()
const{};
83 const std::string getId()
const;
84 volatile epicsUInt8* getRegAddr()
const;
85 MRFVersion version()
const;
86 std::string getFwVersionStr()
const;
87 std::string getSwVersion()
const;
88 std::string getCommitHash()
const;
90 void enable(epicsUInt16);
91 epicsUInt16 enabled()
const;
93 bool getResetMxc()
const {
return true;}
94 void resetMxc(
bool reset);
95 epicsUInt32 getDbusStatus()
const;
97 IOSCANPVT timeErrorScan()
const {
return ioScanTimestamp; }
99 virtual void postSoftSecondsSrc();
102 epicsFloat64 getFrequency()
const;
104 void setRFFreq(epicsFloat64);
105 epicsFloat64 getRFFreq()
const;
107 void setRFDiv(epicsUInt32);
108 epicsUInt32 getRFDiv()
const;
110 void setFracSynFreq(epicsFloat64);
111 epicsFloat64 getFracSynFreq()
const;
123 void setSource(epicsUInt16);
124 epicsUInt16 getSource()
const;
126 bool pllLocked()
const;
128 void setPLLBandwidth(epicsUInt16 pllBandwidth);
129 epicsUInt16 getPLLBandwidth()
const;
132 static void isr(evgMrm *evg,
bool pci);
133 static void isr_pci(
void*);
134 static void isr_vme(
void*);
135 static void isr_poll(
void*);
136 static void init_cb(CALLBACK*,
int,
void(*)(CALLBACK*),
void*);
137 static void process_inp_cb(CALLBACK*);
141 epicsUInt16 getTSGenerator()
const;
142 void setTSGenerator(epicsUInt16 TSGen);
145 void setEvtCode(epicsUInt32);
148 epicsUInt32 writeonly()
const {
return 0; }
151 evgInput* getInput(epicsUInt32, InputType);
152 epicsEvent* getTimerEvent();
153 const bus_configuration* getBusConfiguration();
155 CALLBACK irqExtInp_cb;
157 unsigned char irqExtInp_queued;
159 IOSCANPVT ioScanTimestamp;
165 const epicsPCIDevice* m_pciDevice;
168 const std::string m_id;
169 volatile epicsUInt8*
const m_pReg;
170 const bus_configuration busConfiguration;
172 epicsFloat64 m_RFref;
173 epicsFloat64 m_fracSynFreq;
176 epicsUInt16 m_TSGenerator;
183 typedef std::vector<evgTrigEvt*> TrigEvt_t;
186 typedef std::vector<evgMxc*> MuxCounter_t;
187 MuxCounter_t m_muxCounter;
189 typedef std::vector<evgDbus*> Dbus_t;
192 typedef std::map< std::pair<epicsUInt32, InputType>, evgInput*> Input_t;
196 typedef Input_t::iterator inputs_iterator;
197 inputs_iterator beginInputs() {
return m_input.begin(); }
198 inputs_iterator endInputs() {
return m_input.end(); }
201 typedef std::map< std::pair<epicsUInt32, evgOutputType>, evgOutput*> Output_t;
204 epicsEvent m_timerEvent;
206 epicsUInt32 shadowIrqEnable;
209 mrf::auto_ptr<FCT> fct;
210 mrf::auto_ptr<EVRMRM> evru, evrd;
212 EVRMRM* getEvruMrm()
const {
return evru.get(); }
213 EVRMRM* getEvrdMrm()
const {
return evrd.get(); }
Modular Register Map Event Receivers.
Definition: drvem.h:97
User implementation hook.
Definition: object.h:460
Definition: mrmDataBufTx.h:20