7 #include "ADXL345_SPI.h"
8 #include "DigitalInput.h"
9 #include "DigitalOutput.h"
10 #include "NetworkCommunication/UsageReporting.h"
13 const uint8_t ADXL345_SPI::kPowerCtlRegister;
14 const uint8_t ADXL345_SPI::kDataFormatRegister;
15 const uint8_t ADXL345_SPI::kDataRegister;
16 constexpr
double ADXL345_SPI::kGsPerLSB;
35 Init(&clk, &mosi, &miso, &cs, range);
55 Init(clk, mosi, miso, cs, range);
69 uint32_t cs, ADXL345_SPI::DataFormat_Range range)
80 Init(m_clk, m_mosi, m_miso, m_cs, range);
89 if (clk != NULL && mosi != NULL && miso != NULL && cs != NULL)
91 m_spi =
new SPI(clk, mosi, miso);
102 m_spi->
Write((kPowerCtlRegister << 8) | kPowerCtl_Measure);
105 m_spi->
Write((kDataFormatRegister << 8) | kDataFormat_FullRes | (uint8_t)(range & 0x03));
112 nUsageReporting::report(nUsageReporting::kResourceType_ADXL345, nUsageReporting::kADXL345_SPI);
141 int16_t rawAccel = 0;
144 m_spi->
Write(((kAddress_Read | kAddress_MultiByte | kDataRegister) + (uint8_t)axis) << 16);
145 rawAccel = (uint16_t)m_spi->
Read();
148 rawAccel = ((rawAccel >> 8) & 0xFF) | (rawAccel << 8);
150 return rawAccel * kGsPerLSB;
164 SPI::tFrameMode mode;
184 m_spi->
Write(kAddress_Read | kAddress_MultiByte | kDataRegister);
191 for (int32_t i=0; i<3; i++)
194 rawData[i] = (uint16_t)m_spi->
Read(
true);
196 rawData[i] = ((rawData[i] >> 8) & 0xFF) | (rawData[i] << 8);
207 data.XAxis = rawData[0] * kGsPerLSB;
208 data.YAxis = rawData[1] * kGsPerLSB;
209 data.ZAxis = rawData[2] * kGsPerLSB;
virtual double GetAcceleration(Axes axis)
void Init(DigitalOutput *clk, DigitalOutput *mosi, DigitalInput *miso, DigitalOutput *cs, DataFormat_Range range)
ADXL345_SPI(DigitalOutput &clk, DigitalOutput &mosi, DigitalInput &miso, DigitalOutput &cs, DataFormat_Range range=kRange_2G)
uint32_t GetBitsPerWord()
void SetSlaveSelect(DigitalOutput *ss, tFrameMode mode=kChipSelect, bool activeLow=false)
void SetSampleDataOnRising()
virtual uint32_t Read(bool initiate=false)
virtual AllAxes GetAccelerations()
virtual void ClearReceivedData()
virtual void Write(uint32_t data)
void SetBitsPerWord(uint32_t bits)
virtual void ApplyConfig()
DigitalOutput * GetSlaveSelect(tFrameMode *mode=NULL, bool *activeLow=NULL)