My Project
drvemPulser.h
1 /*************************************************************************\
2 * Copyright (c) 2010 Brookhaven Science Associates, as Operator of
3 * Brookhaven National Laboratory.
4 * Copyright (c) 2022 Cosylab d.d.
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 #ifndef EVRMRMPULSER_H_INC
13 #define EVRMRMPULSER_H_INC
14 
15 #include <epicsMutex.h>
16 
17 #include <evr/pulser.h>
18 
19 class EVRMRM;
20 
21 class MRMPulser : public mrf::ObjectInst<MRMPulser, Pulser>
22 {
24  const epicsUInt32 id;
25  EVRMRM& owner;
26 
27 public:
28  MRMPulser(const std::string& n, epicsUInt32,EVRMRM&);
29  virtual ~MRMPulser(){};
30 
31  virtual void lock() const OVERRIDE FINAL;
32  virtual void unlock() const OVERRIDE FINAL;
33 
34  virtual bool enabled() const OVERRIDE FINAL;
35  virtual void enable(bool) OVERRIDE FINAL;
36 
37  virtual void softSet() OVERRIDE FINAL;
38  virtual void softReset() OVERRIDE FINAL;
39 
40  virtual void setDelayRaw(epicsUInt32) OVERRIDE FINAL;
41  virtual void setDelay(double) OVERRIDE FINAL;
42  virtual epicsUInt32 delayRaw() const OVERRIDE FINAL;
43  virtual double delay() const OVERRIDE FINAL;
44 
45  virtual void setWidthRaw(epicsUInt32) OVERRIDE FINAL;
46  virtual void setWidth(double) OVERRIDE FINAL;
47  virtual epicsUInt32 widthRaw() const OVERRIDE FINAL;
48  virtual double width() const OVERRIDE FINAL;
49 
50  virtual epicsUInt32 prescaler() const OVERRIDE FINAL;
51  virtual void setPrescaler(epicsUInt32) OVERRIDE FINAL;
52 
53  virtual epicsUInt32 psTrig() const OVERRIDE FINAL;
54  virtual void setPSTrig(epicsUInt32) OVERRIDE FINAL;
55 
56  virtual epicsUInt32 dbusTrig() const OVERRIDE FINAL;
57  virtual void setDBusTrig(epicsUInt32) OVERRIDE FINAL;
58 
59  virtual bool polarityInvert() const OVERRIDE FINAL;
60  virtual void setPolarityInvert(bool) OVERRIDE FINAL;
61 
62  epicsUInt32 enables() const;
63  void setEnables(epicsUInt32 inps);
64  epicsUInt32 masks() const;
65  void setMasks(epicsUInt32 inps);
66 
67  virtual MapType::type mappedSource(epicsUInt32 src) const OVERRIDE FINAL;
68  virtual void sourceSetMap(epicsUInt32 src,MapType::type action) OVERRIDE FINAL;
69 
70 private:
71  // bit map of which event #'s are mapped
72  // used as a safty check to avoid overloaded mappings
73  unsigned char mapped[256/8];
74 
75  void _map(epicsUInt8 evt) { mapped[evt/8] |= 1<<(evt%8); }
76  void _unmap(epicsUInt8 evt) { mapped[evt/8] &= ~( 1<<(evt%8) );}
77  bool _ismap(epicsUInt8 evt) const { return (mapped[evt/8] & 1<<(evt%8)) != 0; }
78 };
79 
80 #endif // EVRMRMPULSER_H_INC
Modular Register Map Event Receivers.
Definition: drvem.h:97
User implementation hook.
Definition: object.h:460