Treehopper C++ API
Lsm303dlhcMagRegisters.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 Sensors { namespace Magnetic {
11 
12  enum class MagDataRates
13  {
14  Hz_0_75 = 0,
15  Hz_1_5 = 1,
16  Hz_3_0 = 2,
17  Hz_7_5 = 3,
18  Hz_15 = 4,
19  Hz_30 = 5,
20  Hz_75 = 6,
21  Hz_100 = 7
22  };
23 
24  enum class GainConfigurations
25  {
26  gauss_1_3 = 1,
27  gauss_1_9 = 2,
28  gauss_2_5 = 3,
29  gauss_4_0 = 4,
30  gauss_4_7 = 5,
31  gauss_5_6 = 6,
32  gauss_8_1 = 7
33  };
34 
35  enum class MagSensorModes
36  {
37  ContinuousConversion = 0,
38  SingleConversion = 1,
39  PowerDown = 2
40  };
41 
42 
43  class Lsm303dlhcMagRegisters : public RegisterManager
44  {
45  public:
46  class TempOutRegister : public Register
47  {
48  public:
49  TempOutRegister(RegisterManager& regManager) : Register(regManager,0x05, 2, false) { }
50  int value;
51 
52  long getValue() { return ((value & 0xFFF) << 4); }
53  void setValue(long val)
54  {
55  value = (int)(((val >> 4) & 0xFFF) << (32 - 12)) >> (32 - 12);
56  }
57  };
58 
59  class SrRegister : public Register
60  {
61  public:
62  SrRegister(RegisterManager& regManager) : Register(regManager,0x09, 1, false) { }
63  int drdy;
64  int registerLock;
65 
66  long getValue() { return ((drdy & 0x1) << 0) | ((registerLock & 0x1) << 1); }
67  void setValue(long val)
68  {
69  drdy = (int)((val >> 0) & 0x1);
70  registerLock = (int)((val >> 1) & 0x1);
71  }
72  };
73 
74  class CraRegister : public Register
75  {
76  public:
77  CraRegister(RegisterManager& regManager) : Register(regManager,0x80, 1, false) { }
78  int magDataRate;
79  int tempEnable;
80  MagDataRates getMagDataRate() { return (MagDataRates)magDataRate; }
81  void setMagDataRate(MagDataRates enumVal) { magDataRate = (int)enumVal; }
82 
83  long getValue() { return ((magDataRate & 0x7) << 2) | ((tempEnable & 0x1) << 7); }
84  void setValue(long val)
85  {
86  magDataRate = (int)((val >> 2) & 0x7);
87  tempEnable = (int)((val >> 7) & 0x1);
88  }
89  };
90 
91  class CrbRegister : public Register
92  {
93  public:
94  CrbRegister(RegisterManager& regManager) : Register(regManager,0x81, 1, false) { }
95  int gainConfiguration;
96  GainConfigurations getGainConfiguration() { return (GainConfigurations)gainConfiguration; }
97  void setGainConfiguration(GainConfigurations enumVal) { gainConfiguration = (int)enumVal; }
98 
99  long getValue() { return ((gainConfiguration & 0x7) << 5); }
100  void setValue(long val)
101  {
102  gainConfiguration = (int)((val >> 5) & 0x7);
103  }
104  };
105 
106  class MrRegister : public Register
107  {
108  public:
109  MrRegister(RegisterManager& regManager) : Register(regManager,0x82, 1, false) { }
110  int magSensorMode;
111  MagSensorModes getMagSensorMode() { return (MagSensorModes)magSensorMode; }
112  void setMagSensorMode(MagSensorModes enumVal) { magSensorMode = (int)enumVal; }
113 
114  long getValue() { return ((magSensorMode & 0x3) << 0); }
115  void setValue(long val)
116  {
117  magSensorMode = (int)((val >> 0) & 0x3);
118  }
119  };
120 
121  class OutXRegister : public Register
122  {
123  public:
124  OutXRegister(RegisterManager& regManager) : Register(regManager,0x83, 2, false) { }
125  int value;
126 
127  long getValue() { return ((value & 0xFFFF) << 0); }
128  void setValue(long val)
129  {
130  value = (int)(((val >> 0) & 0xFFFF) << (32 - 16)) >> (32 - 16);
131  }
132  };
133 
134  class OutYRegister : public Register
135  {
136  public:
137  OutYRegister(RegisterManager& regManager) : Register(regManager,0x85, 2, false) { }
138  int value;
139 
140  long getValue() { return ((value & 0xFFFF) << 0); }
141  void setValue(long val)
142  {
143  value = (int)(((val >> 0) & 0xFFFF) << (32 - 16)) >> (32 - 16);
144  }
145  };
146 
147  class OutZRegister : public Register
148  {
149  public:
150  OutZRegister(RegisterManager& regManager) : Register(regManager,0x87, 2, false) { }
151  int value;
152 
153  long getValue() { return ((value & 0xFFFF) << 0); }
154  void setValue(long val)
155  {
156  value = (int)(((val >> 0) & 0xFFFF) << (32 - 16)) >> (32 - 16);
157  }
158  };
159 
160  TempOutRegister tempOut;
161  SrRegister sr;
162  CraRegister cra;
163  CrbRegister crb;
164  MrRegister mr;
165  OutXRegister outX;
166  OutYRegister outY;
167  OutZRegister outZ;
168 
169  Lsm303dlhcMagRegisters(SMBusDevice& device) : RegisterManager(device, true), tempOut(*this), sr(*this), cra(*this), crb(*this), mr(*this), outX(*this), outY(*this), outZ(*this)
170  {
171  registers.push_back(&tempOut);
172  registers.push_back(&sr);
173  registers.push_back(&cra);
174  registers.push_back(&crb);
175  registers.push_back(&mr);
176  registers.push_back(&outX);
177  registers.push_back(&outY);
178  registers.push_back(&outZ);
179  }
180  };
181  } } } }
GainConfigurations
Definition: Lsm303dlhcMagRegisters.h:24
Definition: Dm632.h:9
Definition: Register.h:11
Definition: RegisterManager.h:10
MagDataRates
Definition: Lsm303dlhcMagRegisters.h:12
MagSensorModes
Definition: Lsm303dlhcMagRegisters.h:35
Definition: AdcPin.h:3