mrfioc2  2.3.0
cml.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 CMLSHORT_HPP_INC
12 #define CMLSHORT_HPP_INC
13 
14 #include "mrf/object.h"
15 
16 #include <epicsTypes.h>
17 
18 enum cmlMode {
23 };
24 
25 class epicsShareClass CML : public mrf::ObjectInst<CML>
26 {
27 public:
28  enum pattern {
33  patternLow
34  };
35 
36  explicit CML(const std::string& n) : mrf::ObjectInst<CML>(n) {}
37  virtual ~CML()=0;
38 
39  virtual cmlMode mode() const=0;
40  virtual void setMode(cmlMode)=0;
41 
42  virtual bool enabled() const=0;
43  virtual void enable(bool)=0;
44 
45  virtual bool inReset() const=0;
46  virtual void reset(bool)=0;
47 
48  virtual bool powered() const=0;
49  virtual void power(bool)=0;
50 
52  virtual epicsUInt32 freqMultiple() const=0;
53 
55  virtual double fineDelay() const=0;
56  virtual void setFineDelay(double)=0;
57 
58  // For Frequency mode
59 
61  virtual bool polarityInvert() const=0;
62  virtual void setPolarityInvert(bool)=0;
63 
64  virtual epicsUInt32 countHigh() const=0;
65  virtual epicsUInt32 countLow () const=0;
66  virtual epicsUInt32 countInit () const=0;
67  virtual void setCountHigh(epicsUInt32)=0;
68  virtual void setCountLow (epicsUInt32)=0;
69  virtual void setCountInit (epicsUInt32)=0;
70  virtual double timeHigh() const=0;
71  virtual double timeLow () const=0;
72  virtual double timeInit () const=0;
73  virtual void setTimeHigh(double)=0;
74  virtual void setTimeLow (double)=0;
75  virtual void setTimeInit (double)=0;
76 
77  // waveform mode
78 
79  virtual bool recyclePat() const=0;
80  virtual void setRecyclePat(bool)=0;
81 
82  // waveform and 4x pattern modes
83 
84  virtual epicsUInt32 lenPattern(pattern) const=0;
85  virtual epicsUInt32 lenPatternMax(pattern) const=0;
86  virtual epicsUInt32 getPattern(pattern, unsigned char*, epicsUInt32) const=0;
87  virtual void setPattern(pattern, const unsigned char*, epicsUInt32)=0;
88 
89  // Helpers
90 
91  template<pattern P>
92  epicsUInt32 lenPattern() const{return lenPattern(P);}
93  template<pattern P>
94  epicsUInt32 lenPatternMax() const{return lenPatternMax(P);}
95 
96  template<pattern P>
97  epicsUInt32
98  getPattern(unsigned char* b, epicsUInt32 l) const{return this->getPattern(P,b,l);};
99 
100  template<pattern P>
101  void
102  setPattern(const unsigned char* b, epicsUInt32 l){this->setPattern(P,b,l);};
103 
104  void setModRaw(epicsUInt16 r){setMode((cmlMode)r);};
105  epicsUInt16 modeRaw() const{return (epicsUInt16)mode();};
106 };
107 
108 #endif // CMLSHORT_HPP_INC
epicsUInt32 lenPatternMax() const
Definition: cml.h:94
void setModRaw(epicsUInt16 r)
Definition: cml.h:104
pattern
Definition: cml.h:28
Definition: cml.h:25
epicsUInt16 modeRaw() const
Definition: cml.h:105
epicsUInt32 getPattern(unsigned char *b, epicsUInt32 l) const
Definition: cml.h:98
User implementation hook.
Definition: object.h:459
cmlMode
Definition: cml.h:18
CML(const std::string &n)
Definition: cml.h:36
Definition: flash.cpp:23
epicsUInt32 lenPattern() const
Definition: cml.h:92
void setPattern(const unsigned char *b, epicsUInt32 l)
Definition: cml.h:102