Merge "Port SPI to roboRIO. Java SPIDevice renamed to SPI and rewritten to match C++ API."

This commit is contained in:
Thomas Clark (WPI)
2014-07-17 12:16:14 -07:00
committed by Gerrit Code Review
11 changed files with 883 additions and 1150 deletions

View File

@@ -6,15 +6,15 @@
#pragma once
#include "SensorBase.h"
#include "SPI.h"
class DigitalInput;
class DigitalOutput;
class SPI;
/**
* ADXL345 Accelerometer on SPI.
*
* This class alows access to an Analog Devices ADXL345 3-axis accelerometer via SPI.
* This class allows access to an Analog Devices ADXL345 3-axis accelerometer via SPI.
* This class assumes the sensor is wired in 4-wire SPI mode.
*/
class ADXL345_SPI : public SensorBase
@@ -40,23 +40,14 @@ public:
};
public:
ADXL345_SPI(DigitalOutput &clk, DigitalOutput &mosi, DigitalInput &miso,
DigitalOutput &cs, DataFormat_Range range=kRange_2G);
ADXL345_SPI(DigitalOutput *clk, DigitalOutput *mosi, DigitalInput *miso,
DigitalOutput *cs, DataFormat_Range range=kRange_2G);
ADXL345_SPI(uint32_t clk, uint32_t mosi, uint32_t miso, uint32_t cs,
DataFormat_Range range=kRange_2G);
ADXL345_SPI(SPI::Port port, DataFormat_Range range=kRange_2G);
virtual ~ADXL345_SPI();
virtual double GetAcceleration(Axes axis);
virtual AllAxes GetAccelerations();
protected:
void Init(DigitalOutput *clk, DigitalOutput *mosi, DigitalInput *miso,
DigitalOutput *cs, DataFormat_Range range);
void Init(DataFormat_Range range);
DigitalOutput *m_clk;
DigitalOutput *m_mosi;
DigitalInput *m_miso;
DigitalOutput *m_cs;
SPI* m_spi;
SPI::Port m_port;
};

View File

@@ -17,21 +17,14 @@ class DigitalInput;
* This class is intended to be used by sensor (and other SPI device) drivers.
* It probably should not be used directly.
*
* The FPGA only supports a single SPI interface.
*/
class SPI : public SensorBase
{
public:
SPI(DigitalOutput &clk, DigitalOutput &mosi, DigitalInput &miso);
SPI(DigitalOutput *clk, DigitalOutput *mosi, DigitalInput *miso);
SPI(DigitalOutput &clk, DigitalOutput &mosi);
SPI(DigitalOutput *clk, DigitalOutput *mosi);
SPI(DigitalOutput &clk, DigitalInput &miso);
SPI(DigitalOutput *clk, DigitalInput *miso);
enum Port {kOnboardCS0, kOnboardCS1, kOnboardCS2, kOnboardCS3, kMXP};
SPI(Port SPIport);
virtual ~SPI();
void SetBitsPerWord(uint32_t bits);
uint32_t GetBitsPerWord();
void SetClockRate(double hz);
void SetMSBFirst();
@@ -40,33 +33,26 @@ public:
void SetSampleDataOnFalling();
void SetSampleDataOnRising();
void SetSlaveSelect(DigitalOutput *ss, tFrameMode mode = kChipSelect, bool activeLow = false);
void SetSlaveSelect(DigitalOutput &ss, tFrameMode mode = kChipSelect, bool activeLow = false);
DigitalOutput *GetSlaveSelect(tFrameMode *mode = NULL, bool *activeLow = NULL);
void SetClockActiveLow();
void SetClockActiveHigh();
virtual void ApplyConfig();
void SetChipSelectActiveHigh();
void SetChipSelectActiveLow();
virtual uint16_t GetOutputFIFOAvailable();
virtual uint16_t GetNumReceived();
virtual int32_t Write(uint8_t* data, uint8_t size);
virtual int32_t Read(bool initiate, uint8_t* dataReceived, uint8_t size);
virtual int32_t Transaction(uint8_t* dataToSend, uint8_t* dataReceived, uint8_t size);
virtual bool IsDone();
bool HadReceiveOverflow();
virtual void Write(uint32_t data);
virtual uint32_t Read(bool initiate = false);
virtual void Reset();
virtual void ClearReceivedData();
protected:
void* m_spi;
DigitalOutput *m_ss;
uint8_t m_port;
bool m_msbFirst;
bool m_sampleOnTrailing;
bool m_clk_idle_high;
private:
void Init(DigitalOutput *clk, DigitalOutput *mosi, DigitalInput *miso);
void Init();
DISALLOW_COPY_AND_ASSIGN(SPI);
};