mrfioc2  2.3.0
evgInput.cpp
Go to the documentation of this file.
1 #include "evgInput.h"
2 
3 #include <stdexcept>
4 
5 #include <errlog.h>
6 
7 #include <mrfCommonIO.h>
8 #include <mrfCommon.h>
9 
10 #include "evgRegMap.h"
11 std::map<std::string, epicsUInt32> InpStrToEnum;
12 
13 evgInput::evgInput(const std::string& name, const epicsUInt32 num,
14  const InputType type, volatile epicsUInt8* const pInReg)
15  :mrf::ObjectInst<evgInput>(name)
16  ,m_num(num)
17  ,m_type(type)
18  ,m_pInReg(pInReg)
19 {}
20 
22 }
23 
24 epicsUInt32
26  return m_num;
27 }
28 
31  return m_type;
32 }
33 
34 void
36  if(ena)
37  nat_iowrite32(m_pInReg, nat_ioread32(m_pInReg) |
38  (epicsUInt32)EVG_EXT_INP_IRQ_ENA);
39  else
40  nat_iowrite32(m_pInReg, nat_ioread32(m_pInReg) &
41  (epicsUInt32)~(EVG_EXT_INP_IRQ_ENA));
42 }
43 
44 bool
46  return (nat_ioread32(m_pInReg) & (epicsUInt32)EVG_EXT_INP_IRQ_ENA) != 0;
47 }
48 
49 void
50 evgInput::setDbusMap(epicsUInt16 dbus, bool ena) {
51  if(dbus > 7)
52  throw std::runtime_error("EVG DBUS num out of range. Max: 7");
53 
54  epicsUInt32 mask = 0x10000 << dbus;
55 
56  //Read-Modify-Write
57  epicsUInt32 map = nat_ioread32(m_pInReg);
58 
59  if(ena)
60  map = map | mask;
61  else
62  map = map & ~mask;
63 
64  nat_iowrite32(m_pInReg, map);
65 }
66 
67 bool
68 evgInput::getDbusMap(epicsUInt16 dbus) const {
69  if(dbus > 7)
70  throw std::runtime_error("EVG DBUS num out of range. Max: 7");
71 
72  epicsUInt32 mask = 0x10000 << dbus;
73  epicsUInt32 map = nat_ioread32(m_pInReg);
74  return (map & mask) != 0;
75 }
76 
77 void
78 evgInput::setSeqTrigMap(epicsUInt32 seqTrigMap) {
79  if(seqTrigMap > 3)
80  throw std::runtime_error("Seq Trig Map out of range. Max: 3");
81 
82  //Read-Modify-Write
83  epicsUInt32 map = nat_ioread32(m_pInReg);
84 
85  map = map & 0xffff00ff;
86  map = map | (seqTrigMap << 8);
87 
88  nat_iowrite32(m_pInReg, map);
89 }
90 
91 epicsUInt32
93  epicsUInt32 map = nat_ioread32(m_pInReg);
94  map = map & 0x0000ff00;
95  map = map >> 8;
96  return map;
97 }
98 
99 void
100 evgInput::setTrigEvtMap(epicsUInt16 trigEvt, bool ena) {
101  if(trigEvt > 7)
102  throw std::runtime_error("Trig Event num out of range. Max: 7");
103 
104  epicsUInt32 mask = 1 << trigEvt;
105  //Read-Modify-Write
106  epicsUInt32 map = nat_ioread32(m_pInReg);
107 
108  if(ena)
109  map = map | mask;
110  else
111  map = map & ~mask;
112 
113  nat_iowrite32(m_pInReg, map);
114 }
115 
116 bool
117 evgInput::getTrigEvtMap(epicsUInt16 trigEvt) const {
118  if(trigEvt > 7)
119  throw std::runtime_error("EVG Trig Event num out of range. Max: 7");
120 
121  epicsUInt32 mask = 0x1 << trigEvt;
122  epicsUInt32 map = nat_ioread32(m_pInReg);
123  return (map & mask) != 0;
124 }
125 
InputType getType() const
Definition: evgInput.cpp:30
std::map< std::string, epicsUInt32 > InpStrToEnum
Definition: evgInput.cpp:11
epicsUInt32 getNum() const
Definition: evgInput.cpp:25
~evgInput()
Definition: evgInput.cpp:21
INLINE void nat_iowrite32(volatile void *addr, epicsUInt32 val)
Definition: mrfIoOpsDef.h:55
void setDbusMap(epicsUInt16, bool)
Definition: evgInput.cpp:50
void setTrigEvtMap(epicsUInt16, bool)
Definition: evgInput.cpp:100
INLINE epicsUInt32 nat_ioread32(volatile void *addr)
Definition: mrfIoOpsDef.h:48
epicsUInt32 getSeqTrigMap() const
Definition: evgInput.cpp:92
bool getExtIrq() const
Definition: evgInput.cpp:45
void setExtIrq(bool)
Definition: evgInput.cpp:35
bool getDbusMap(epicsUInt16) const
Definition: evgInput.cpp:68
#define EVG_EXT_INP_IRQ_ENA
Definition: evgRegMap.h:277
bool getTrigEvtMap(epicsUInt16) const
Definition: evgInput.cpp:117
InputType
Definition: evgInput.h:11
evgInput(const std::string &, const epicsUInt32, const InputType, volatile epicsUInt8 *const)
Definition: evgInput.cpp:13
Definition: flash.cpp:23
void setSeqTrigMap(epicsUInt32)
Definition: evgInput.cpp:78