Treehopper C++ API
Nau7802Registers.h
Go to the documentation of this file.
1 #pragma once
3 #include "SMBusDevice.h"
6 #include "Libraries/Register.h"
7 
8 using namespace Treehopper::Libraries;
9 
10 namespace Treehopper { namespace Libraries { namespace IO { namespace Adc {
11 
12  enum class Gains
13  {
14  x1 = 0,
15  x4 = 1,
16  x2 = 2,
17  x8 = 3,
18  x16 = 4,
19  x32 = 5,
20  x64 = 6,
21  x128 = 7
22  };
23 
24  enum class Vldoes
25  {
26  mV_4500 = 0,
27  mV_4200 = 1,
28  mV_3900 = 2,
29  mV_3600 = 3,
30  mV_3300 = 4,
31  mV_3000 = 5,
32  mV_2700 = 6,
33  mV_2400 = 7
34  };
35 
36  enum class CalMods
37  {
39  Reserved = 1,
42  };
43 
44  enum class ConversionRates
45  {
46  Sps_10 = 0,
47  Sps_20 = 1,
48  Sps_40 = 2,
49  Sps_80 = 3,
50  Sps_320 = 7
51  };
52 
53  enum class AdcVcms
54  {
57  disable = 0
58  };
59 
60  enum class RegChpFreqs
61  {
62  off = 3
63  };
64 
65 
66  class Nau7802Registers : public RegisterManager
67  {
68  public:
69  class PuCtrlRegister : public Register
70  {
71  public:
72  PuCtrlRegister(RegisterManager& regManager) : Register(regManager,0x00, 1, false) { }
73  int registerReset;
74  int powerUpDigital;
75  int powerUpAnalog;
76  int powerUpReady;
77  int cycleStart;
78  int cycleReady;
79  int useExternalCrystal;
80  int useInternalLdo;
81 
82  long getValue() { return ((registerReset & 0x1) << 0) | ((powerUpDigital & 0x1) << 1) | ((powerUpAnalog & 0x1) << 2) | ((powerUpReady & 0x1) << 3) | ((cycleStart & 0x1) << 4) | ((cycleReady & 0x1) << 5) | ((useExternalCrystal & 0x1) << 6) | ((useInternalLdo & 0x1) << 7); }
83  void setValue(long val)
84  {
85  registerReset = (int)((val >> 0) & 0x1);
86  powerUpDigital = (int)((val >> 1) & 0x1);
87  powerUpAnalog = (int)((val >> 2) & 0x1);
88  powerUpReady = (int)((val >> 3) & 0x1);
89  cycleStart = (int)((val >> 4) & 0x1);
90  cycleReady = (int)((val >> 5) & 0x1);
91  useExternalCrystal = (int)((val >> 6) & 0x1);
92  useInternalLdo = (int)((val >> 7) & 0x1);
93  }
94  };
95 
96  class Ctrl1Register : public Register
97  {
98  public:
99  Ctrl1Register(RegisterManager& regManager) : Register(regManager,0x01, 1, false) { }
100  int gain;
101  int vldo;
102  int drdySelect;
103  int conversionReadyPinPolarity;
104  Gains getGain() { return (Gains)gain; }
105  void setGain(Gains enumVal) { gain = (int)enumVal; }
106  Vldoes getVldo() { return (Vldoes)vldo; }
107  void setVldo(Vldoes enumVal) { vldo = (int)enumVal; }
108 
109  long getValue() { return ((gain & 0x7) << 0) | ((vldo & 0x7) << 3) | ((drdySelect & 0x1) << 6) | ((conversionReadyPinPolarity & 0x1) << 7); }
110  void setValue(long val)
111  {
112  gain = (int)((val >> 0) & 0x7);
113  vldo = (int)((val >> 3) & 0x7);
114  drdySelect = (int)((val >> 6) & 0x1);
115  conversionReadyPinPolarity = (int)((val >> 7) & 0x1);
116  }
117  };
118 
119  class Ctrl2Register : public Register
120  {
121  public:
122  Ctrl2Register(RegisterManager& regManager) : Register(regManager,0x02, 1, false) { }
123  int calMod;
124  int calStart;
125  int calError;
126  int conversionRate;
127  int channelSelect;
128  CalMods getCalMod() { return (CalMods)calMod; }
129  void setCalMod(CalMods enumVal) { calMod = (int)enumVal; }
130  ConversionRates getConversionRate() { return (ConversionRates)conversionRate; }
131  void setConversionRate(ConversionRates enumVal) { conversionRate = (int)enumVal; }
132 
133  long getValue() { return ((calMod & 0x3) << 0) | ((calStart & 0x1) << 2) | ((calError & 0x1) << 3) | ((conversionRate & 0x7) << 4) | ((channelSelect & 0x1) << 7); }
134  void setValue(long val)
135  {
136  calMod = (int)((val >> 0) & 0x3);
137  calStart = (int)((val >> 2) & 0x1);
138  calError = (int)((val >> 3) & 0x1);
139  conversionRate = (int)((val >> 4) & 0x7);
140  channelSelect = (int)((val >> 7) & 0x1);
141  }
142  };
143 
144  class I2cCtrlRegister : public Register
145  {
146  public:
147  I2cCtrlRegister(RegisterManager& regManager) : Register(regManager,0x11, 1, false) { }
148  int bgpCp;
149  int ts;
150  int boPga;
151  int si;
152  int wpd;
153  int spe;
154  int frd;
155  int crsd;
156 
157  long getValue() { return ((bgpCp & 0x1) << 0) | ((ts & 0x1) << 1) | ((boPga & 0x1) << 2) | ((si & 0x1) << 3) | ((wpd & 0x1) << 4) | ((spe & 0x1) << 5) | ((frd & 0x1) << 6) | ((crsd & 0x1) << 7); }
158  void setValue(long val)
159  {
160  bgpCp = (int)((val >> 0) & 0x1);
161  ts = (int)((val >> 1) & 0x1);
162  boPga = (int)((val >> 2) & 0x1);
163  si = (int)((val >> 3) & 0x1);
164  wpd = (int)((val >> 4) & 0x1);
165  spe = (int)((val >> 5) & 0x1);
166  frd = (int)((val >> 6) & 0x1);
167  crsd = (int)((val >> 7) & 0x1);
168  }
169  };
170 
171  class AdcResultRegister : public Register
172  {
173  public:
174  AdcResultRegister(RegisterManager& regManager) : Register(regManager,0x12, 3, true) { }
175  int value;
176 
177  long getValue() { return ((value & 0xFFFFFF) << 0); }
178  void setValue(long val)
179  {
180  value = (int)(((val >> 0) & 0xFFFFFF) << (32 - 24)) >> (32 - 24);
181  }
182  };
183 
184  class AdcRegister : public Register
185  {
186  public:
187  AdcRegister(RegisterManager& regManager) : Register(regManager,0x15, 1, false) { }
188  int regChp;
189  int adcVcm;
190  int regChpFreq;
191  AdcVcms getAdcVcm() { return (AdcVcms)adcVcm; }
192  void setAdcVcm(AdcVcms enumVal) { adcVcm = (int)enumVal; }
193  RegChpFreqs getRegChpFreq() { return (RegChpFreqs)regChpFreq; }
194  void setRegChpFreq(RegChpFreqs enumVal) { regChpFreq = (int)enumVal; }
195 
196  long getValue() { return ((regChp & 0x3) << 0) | ((adcVcm & 0x3) << 2) | ((regChpFreq & 0x3) << 4); }
197  void setValue(long val)
198  {
199  regChp = (int)((val >> 0) & 0x3);
200  adcVcm = (int)((val >> 2) & 0x3);
201  regChpFreq = (int)((val >> 4) & 0x3);
202  }
203  };
204 
205  class PgaRegister : public Register
206  {
207  public:
208  PgaRegister(RegisterManager& regManager) : Register(regManager,0x1B, 1, false) { }
209  int disableChopper;
210  int pgaInv;
211  int pgaBypass;
212  int ldoMode;
213  int rdOptSel;
214 
215  long getValue() { return ((disableChopper & 0x1) << 0) | ((pgaInv & 0x1) << 3) | ((pgaBypass & 0x1) << 4) | ((ldoMode & 0x1) << 5) | ((rdOptSel & 0x1) << 6); }
216  void setValue(long val)
217  {
218  disableChopper = (int)((val >> 0) & 0x1);
219  pgaInv = (int)((val >> 3) & 0x1);
220  pgaBypass = (int)((val >> 4) & 0x1);
221  ldoMode = (int)((val >> 5) & 0x1);
222  rdOptSel = (int)((val >> 6) & 0x1);
223  }
224  };
225 
226  class PowerCtrlRegister : public Register
227  {
228  public:
229  PowerCtrlRegister(RegisterManager& regManager) : Register(regManager,0x1C, 1, false) { }
230  int pgaCurr;
231  int adcCurr;
232  int masterBiasCurr;
233  int pgaCapEn;
234 
235  long getValue() { return ((pgaCurr & 0x3) << 0) | ((adcCurr & 0x3) << 2) | ((masterBiasCurr & 0x7) << 4) | ((pgaCapEn & 0x1) << 7); }
236  void setValue(long val)
237  {
238  pgaCurr = (int)((val >> 0) & 0x3);
239  adcCurr = (int)((val >> 2) & 0x3);
240  masterBiasCurr = (int)((val >> 4) & 0x7);
241  pgaCapEn = (int)((val >> 7) & 0x1);
242  }
243  };
244 
245  PuCtrlRegister puCtrl;
246  Ctrl1Register ctrl1;
247  Ctrl2Register ctrl2;
248  I2cCtrlRegister i2cCtrl;
249  AdcResultRegister adcResult;
250  AdcRegister adc;
251  PgaRegister pga;
252  PowerCtrlRegister powerCtrl;
253 
254  Nau7802Registers(SMBusDevice& device) : RegisterManager(device, true), puCtrl(*this), ctrl1(*this), ctrl2(*this), i2cCtrl(*this), adcResult(*this), adc(*this), pga(*this), powerCtrl(*this)
255  {
256  registers.push_back(&puCtrl);
257  registers.push_back(&ctrl1);
258  registers.push_back(&ctrl2);
259  registers.push_back(&i2cCtrl);
260  registers.push_back(&adcResult);
261  registers.push_back(&adc);
262  registers.push_back(&pga);
263  registers.push_back(&powerCtrl);
264  }
265  };
266  } } } }
CalMods
Definition: Nau7802Registers.h:36
Definition: Dm632.h:9
Definition: Register.h:11
Definition: RegisterManager.h:10
AdcVcms
Definition: Nau7802Registers.h:53
Vldoes
Definition: Nau7802Registers.h:24
ConversionRates
Definition: Nau7802Registers.h:44
RegChpFreqs
Definition: Nau7802Registers.h:60
Definition: AdcPin.h:3
Gains
Definition: Nau7802Registers.h:12