diff --git a/wpilibc/athena/include/ADXL345_I2C.h b/wpilibc/athena/include/ADXL345_I2C.h index d57e6bfc28..495c598e70 100644 --- a/wpilibc/athena/include/ADXL345_I2C.h +++ b/wpilibc/athena/include/ADXL345_I2C.h @@ -21,9 +21,7 @@ * This class assumes the default (not alternate) sensor address of 0x1D (7-bit * address). */ -class ADXL345_I2C : public Accelerometer, - public I2C, - public LiveWindowSendable { +class ADXL345_I2C : public Accelerometer, public LiveWindowSendable { protected: static const uint8_t kAddress = 0x1D; static const uint8_t kPowerCtlRegister = 0x2D; @@ -53,7 +51,7 @@ class ADXL345_I2C : public Accelerometer, }; public: - explicit ADXL345_I2C(Port port, Range range = kRange_2G, + explicit ADXL345_I2C(I2C::Port port, Range range = kRange_2G, int deviceAddress = kAddress); virtual ~ADXL345_I2C() = default; @@ -76,6 +74,9 @@ class ADXL345_I2C : public Accelerometer, virtual void StartLiveWindowMode() override {} virtual void StopLiveWindowMode() override {} + protected: + I2C m_i2c; + private: std::shared_ptr m_table; }; diff --git a/wpilibc/athena/include/ADXL345_SPI.h b/wpilibc/athena/include/ADXL345_SPI.h index 5c4e29fb96..9427f2805c 100644 --- a/wpilibc/athena/include/ADXL345_SPI.h +++ b/wpilibc/athena/include/ADXL345_SPI.h @@ -24,9 +24,7 @@ class DigitalOutput; * via SPI. * This class assumes the sensor is wired in 4-wire SPI mode. */ -class ADXL345_SPI : public Accelerometer, - protected SPI, - public LiveWindowSendable { +class ADXL345_SPI : public Accelerometer, public LiveWindowSendable { protected: static const uint8_t kPowerCtlRegister = 0x2D; static const uint8_t kDataFormatRegister = 0x31; @@ -78,6 +76,9 @@ class ADXL345_SPI : public Accelerometer, virtual void StartLiveWindowMode() override {} virtual void StopLiveWindowMode() override {} + protected: + SPI m_spi; + private: std::shared_ptr m_table; }; diff --git a/wpilibc/athena/src/ADXL345_I2C.cpp b/wpilibc/athena/src/ADXL345_I2C.cpp index 5ecb91743b..67efa55ad9 100644 --- a/wpilibc/athena/src/ADXL345_I2C.cpp +++ b/wpilibc/athena/src/ADXL345_I2C.cpp @@ -23,10 +23,10 @@ constexpr double ADXL345_I2C::kGsPerLSB; * @param range The range (+ or -) that the accelerometer will measure * @param deviceAddress The I2C address of the accelerometer (0x1D or 0x53) */ -ADXL345_I2C::ADXL345_I2C(Port port, Range range, int deviceAddress) - : I2C(port, deviceAddress) { +ADXL345_I2C::ADXL345_I2C(I2C::Port port, Range range, int deviceAddress) + : m_i2c(port, deviceAddress) { // Turn on the measurements - Write(kPowerCtlRegister, kPowerCtl_Measure); + m_i2c.Write(kPowerCtlRegister, kPowerCtl_Measure); // Specify the data format to read SetRange(range); @@ -36,7 +36,7 @@ ADXL345_I2C::ADXL345_I2C(Port port, Range range, int deviceAddress) } void ADXL345_I2C::SetRange(Range range) { - Write(kDataFormatRegister, kDataFormat_FullRes | (uint8_t)range); + m_i2c.Write(kDataFormatRegister, kDataFormat_FullRes | (uint8_t)range); } double ADXL345_I2C::GetX() { return GetAcceleration(kAxis_X); } @@ -53,7 +53,8 @@ double ADXL345_I2C::GetZ() { return GetAcceleration(kAxis_Z); } */ double ADXL345_I2C::GetAcceleration(ADXL345_I2C::Axes axis) { int16_t rawAccel = 0; - Read(kDataRegister + (uint8_t)axis, sizeof(rawAccel), (uint8_t*)&rawAccel); + m_i2c.Read(kDataRegister + (uint8_t)axis, sizeof(rawAccel), + (uint8_t*)&rawAccel); return rawAccel * kGsPerLSB; } @@ -66,7 +67,7 @@ double ADXL345_I2C::GetAcceleration(ADXL345_I2C::Axes axis) { ADXL345_I2C::AllAxes ADXL345_I2C::GetAccelerations() { AllAxes data = AllAxes(); int16_t rawData[3]; - Read(kDataRegister, sizeof(rawData), (uint8_t*)rawData); + m_i2c.Read(kDataRegister, sizeof(rawData), (uint8_t*)rawData); data.XAxis = rawData[0] * kGsPerLSB; data.YAxis = rawData[1] * kGsPerLSB; diff --git a/wpilibc/athena/src/ADXL345_SPI.cpp b/wpilibc/athena/src/ADXL345_SPI.cpp index 5d9d6ee0da..e77586ab13 100644 --- a/wpilibc/athena/src/ADXL345_SPI.cpp +++ b/wpilibc/athena/src/ADXL345_SPI.cpp @@ -22,18 +22,19 @@ constexpr double ADXL345_SPI::kGsPerLSB; * @param port The SPI port the accelerometer is attached to * @param range The range (+ or -) that the accelerometer will measure */ -ADXL345_SPI::ADXL345_SPI(SPI::Port port, ADXL345_SPI::Range range) : SPI(port) { - SetClockRate(500000); - SetMSBFirst(); - SetSampleDataOnFalling(); - SetClockActiveLow(); - SetChipSelectActiveHigh(); +ADXL345_SPI::ADXL345_SPI(SPI::Port port, ADXL345_SPI::Range range) + : m_spi(port) { + m_spi.SetClockRate(500000); + m_spi.SetMSBFirst(); + m_spi.SetSampleDataOnFalling(); + m_spi.SetClockActiveLow(); + m_spi.SetChipSelectActiveHigh(); uint8_t commands[2]; // Turn on the measurements commands[0] = kPowerCtlRegister; commands[1] = kPowerCtl_Measure; - Transaction(commands, commands, 2); + m_spi.Transaction(commands, commands, 2); SetRange(range); @@ -49,7 +50,7 @@ void ADXL345_SPI::SetRange(Range range) { // Specify the data format to read commands[0] = kDataFormatRegister; commands[1] = kDataFormat_FullRes | (uint8_t)(range & 0x03); - Transaction(commands, commands, 2); + m_spi.Transaction(commands, commands, 2); } double ADXL345_SPI::GetX() { return GetAcceleration(kAxis_X); } @@ -69,7 +70,7 @@ double ADXL345_SPI::GetAcceleration(ADXL345_SPI::Axes axis) { uint8_t command[3] = {0, 0, 0}; command[0] = (kAddress_Read | kAddress_MultiByte | kDataRegister) + (uint8_t)axis; - Transaction(command, buffer, 3); + m_spi.Transaction(command, buffer, 3); // Sensor is little endian... swap bytes int16_t rawAccel = buffer[2] << 8 | buffer[1]; @@ -89,7 +90,7 @@ ADXL345_SPI::AllAxes ADXL345_SPI::GetAccelerations() { // Select the data address. dataBuffer[0] = (kAddress_Read | kAddress_MultiByte | kDataRegister); - Transaction(dataBuffer, dataBuffer, 7); + m_spi.Transaction(dataBuffer, dataBuffer, 7); for (int32_t i = 0; i < 3; i++) { // Sensor is little endian... swap bytes diff --git a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/ADXL345_I2C.java b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/ADXL345_I2C.java index 183c6f095c..94559307f3 100644 --- a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/ADXL345_I2C.java +++ b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/ADXL345_I2C.java @@ -66,7 +66,7 @@ public class ADXL345_I2C extends SensorBase implements Accelerometer, LiveWindow public double ZAxis; } - private I2C m_i2c; + protected I2C m_i2c; /** * Constructs the ADXL345 Accelerometer with I2C address 0x1D. diff --git a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/ADXL345_SPI.java b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/ADXL345_SPI.java index 6d0ba88c9a..3e2162eae7 100644 --- a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/ADXL345_SPI.java +++ b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/ADXL345_SPI.java @@ -69,7 +69,7 @@ public class ADXL345_SPI extends SensorBase implements Accelerometer, LiveWindow public double ZAxis; } - private SPI m_spi; + protected SPI m_spi; /** * Constructor.