mrfioc2  2.3.0
drvemPulser.h
Go to the documentation of this file.
1 /*************************************************************************\
2 * Copyright (c) 2010 Brookhaven Science Associates, as Operator of
3 * Brookhaven National Laboratory.
4 * mrfioc2 is distributed subject to a Software License Agreement found
5 * in file LICENSE that is included with this distribution.
6 \*************************************************************************/
7 /*
8  * Author: Michael Davidsaver <mdavidsaver@gmail.com>
9  */
10 
11 #ifndef EVRMRMPULSER_H_INC
12 #define EVRMRMPULSER_H_INC
13 
14 #include <epicsMutex.h>
15 
16 #include <evr/pulser.h>
17 
18 class EVRMRM;
19 
20 class MRMPulser : public mrf::ObjectInst<MRMPulser, Pulser>
21 {
23  const epicsUInt32 id;
24  EVRMRM& owner;
25 
26 public:
27  MRMPulser(const std::string& n, epicsUInt32,EVRMRM&);
28  virtual ~MRMPulser(){};
29 
30  virtual void lock() const OVERRIDE FINAL;
31  virtual void unlock() const OVERRIDE FINAL;
32 
33  virtual bool enabled() const OVERRIDE FINAL;
34  virtual void enable(bool) OVERRIDE FINAL;
35 
36  virtual void setDelayRaw(epicsUInt32) OVERRIDE FINAL;
37  virtual void setDelay(double) OVERRIDE FINAL;
38  virtual epicsUInt32 delayRaw() const OVERRIDE FINAL;
39  virtual double delay() const OVERRIDE FINAL;
40 
41  virtual void setWidthRaw(epicsUInt32) OVERRIDE FINAL;
42  virtual void setWidth(double) OVERRIDE FINAL;
43  virtual epicsUInt32 widthRaw() const OVERRIDE FINAL;
44  virtual double width() const OVERRIDE FINAL;
45 
46  virtual epicsUInt32 prescaler() const OVERRIDE FINAL;
47  virtual void setPrescaler(epicsUInt32) OVERRIDE FINAL;
48 
49  virtual bool polarityInvert() const OVERRIDE FINAL;
50  virtual void setPolarityInvert(bool) OVERRIDE FINAL;
51 
52  epicsUInt32 enables() const;
53  void setEnables(epicsUInt32 inps);
54  epicsUInt32 masks() const;
55  void setMasks(epicsUInt32 inps);
56 
57  virtual MapType::type mappedSource(epicsUInt32 src) const OVERRIDE FINAL;
58  virtual void sourceSetMap(epicsUInt32 src,MapType::type action) OVERRIDE FINAL;
59 
60 private:
61  // bit map of which event #'s are mapped
62  // used as a safty check to avoid overloaded mappings
63  unsigned char mapped[256/8];
64 
65  void _map(epicsUInt8 evt) { mapped[evt/8] |= 1<<(evt%8); }
66  void _unmap(epicsUInt8 evt) { mapped[evt/8] &= ~( 1<<(evt%8) );}
67  bool _ismap(epicsUInt8 evt) const { return (mapped[evt/8] & 1<<(evt%8)) != 0; }
68 };
69 
70 #endif // EVRMRMPULSER_H_INC
virtual ~MRMPulser()
Definition: drvemPulser.h:28
epicsUInt32 masks() const
virtual epicsUInt32 delayRaw() const OVERRIDE FINAL
Definition: drvemPulser.cpp:78
virtual void enable(bool) OVERRIDE FINAL
Definition: drvemPulser.cpp:49
virtual double width() const OVERRIDE FINAL
virtual void setDelayRaw(epicsUInt32) OVERRIDE FINAL
Definition: drvemPulser.cpp:60
virtual void setPrescaler(epicsUInt32) OVERRIDE FINAL
virtual epicsUInt32 prescaler() const OVERRIDE FINAL
Modular Register Map Event Receivers.
Definition: drvem.h:86
virtual void unlock() const OVERRIDE FINAL
Definition: drvemPulser.cpp:40
virtual epicsUInt32 widthRaw() const OVERRIDE FINAL
virtual bool enabled() const OVERRIDE FINAL
Definition: drvemPulser.cpp:43
virtual void setDelay(double) OVERRIDE FINAL
Definition: drvemPulser.cpp:66
virtual bool polarityInvert() const OVERRIDE FINAL
virtual void setWidth(double) OVERRIDE FINAL
virtual MapType::type mappedSource(epicsUInt32 src) const OVERRIDE FINAL
What action is source &#39;src&#39; mapped to?
MRMPulser(const std::string &n, epicsUInt32, EVRMRM &)
Definition: drvemPulser.cpp:28
User implementation hook.
Definition: object.h:459
type
Definition: pulser.h:21
virtual void sourceSetMap(epicsUInt32 src, MapType::type action) OVERRIDE FINAL
Set mapping of source &#39;src&#39;.
void setEnables(epicsUInt32 inps)
virtual void setPolarityInvert(bool) OVERRIDE FINAL
virtual void lock() const OVERRIDE FINAL
Definition: drvemPulser.cpp:39
void setMasks(epicsUInt32 inps)
epicsUInt32 enables() const
virtual double delay() const OVERRIDE FINAL
Definition: drvemPulser.cpp:84
virtual void setWidthRaw(epicsUInt32) OVERRIDE FINAL
Definition: drvemPulser.cpp:95