Update WPILib, roborio compilers, and CTRE Phoenix libraries
This borrows heavily from work that Ravago did to initially get this
stuff working.
Tested rudimentary functionality on a test bench, ensured that we could:
* Enable the robot.
* Read joystick and button values.
* Switch between auto and teleop modes.
* Read sensor values (encoder, absolute encoder, potentiometer).
* Read PDP values.
* Drive PWM motors.
* Drive CANivore motors.
Non-WPILib changes are made to accommodate the upgrade roborio
compiler's improved pickiness.
Merge commit '125aac16d9bf03c833ffa18de2f113a33758a4b8' into HEAD
Change-Id: I8648956fb7517b2d784bf58e0a236742af7a306a
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/frc971/wpilib/ahal/SPI.cc b/frc971/wpilib/ahal/SPI.cc
index d51b20f..8568210 100644
--- a/frc971/wpilib/ahal/SPI.cc
+++ b/frc971/wpilib/ahal/SPI.cc
@@ -7,13 +7,13 @@
#include "frc971/wpilib/ahal/SPI.h"
-#include <cstring>
-#include <utility>
-
#include <hal/SPI.h>
#include <wpi/SmallVector.h>
#include <wpi/mutex.h>
+#include <cstring>
+#include <utility>
+
#include "absl/types/span.h"
#include "frc971/wpilib/ahal/DigitalSource.h"
#include "frc971/wpilib/ahal/WPIErrors.h"
@@ -30,44 +30,37 @@
void SPI::SetClockRate(int hz) { HAL_SetSPISpeed(m_port, hz); }
-void SPI::SetMSBFirst() {
- m_msbFirst = true;
- HAL_SetSPIOpts(m_port, m_msbFirst, m_sampleOnTrailing, m_clockIdleHigh);
-}
-
-void SPI::SetLSBFirst() {
- m_msbFirst = false;
- HAL_SetSPIOpts(m_port, m_msbFirst, m_sampleOnTrailing, m_clockIdleHigh);
+void SPI::SetMode(Mode mode) {
+ m_mode = static_cast<HAL_SPIMode>(mode & 0x3);
+ HAL_SetSPIMode(m_port, m_mode);
}
void SPI::SetSampleDataOnLeadingEdge() {
- m_sampleOnTrailing = false;
- HAL_SetSPIOpts(m_port, m_msbFirst, m_sampleOnTrailing, m_clockIdleHigh);
+ int mode = m_mode;
+ mode &= 2;
+ m_mode = static_cast<HAL_SPIMode>(mode);
+ HAL_SetSPIMode(m_port, m_mode);
}
void SPI::SetSampleDataOnTrailingEdge() {
- m_sampleOnTrailing = true;
- HAL_SetSPIOpts(m_port, m_msbFirst, m_sampleOnTrailing, m_clockIdleHigh);
-}
-
-void SPI::SetSampleDataOnFalling() {
- m_sampleOnTrailing = true;
- HAL_SetSPIOpts(m_port, m_msbFirst, m_sampleOnTrailing, m_clockIdleHigh);
-}
-
-void SPI::SetSampleDataOnRising() {
- m_sampleOnTrailing = false;
- HAL_SetSPIOpts(m_port, m_msbFirst, m_sampleOnTrailing, m_clockIdleHigh);
+ int mode = m_mode;
+ mode |= 2;
+ m_mode = static_cast<HAL_SPIMode>(mode);
+ HAL_SetSPIMode(m_port, m_mode);
}
void SPI::SetClockActiveLow() {
- m_clockIdleHigh = true;
- HAL_SetSPIOpts(m_port, m_msbFirst, m_sampleOnTrailing, m_clockIdleHigh);
+ int mode = m_mode;
+ mode |= 1;
+ m_mode = static_cast<HAL_SPIMode>(mode);
+ HAL_SetSPIMode(m_port, m_mode);
}
void SPI::SetClockActiveHigh() {
- m_clockIdleHigh = false;
- HAL_SetSPIOpts(m_port, m_msbFirst, m_sampleOnTrailing, m_clockIdleHigh);
+ int mode = m_mode;
+ mode &= 1;
+ m_mode = static_cast<HAL_SPIMode>(mode);
+ HAL_SetSPIMode(m_port, m_mode);
}
void SPI::SetChipSelectActiveHigh() {
@@ -82,13 +75,13 @@
wpi_setHALError(status);
}
-int SPI::Write(uint8_t* data, int size) {
+int SPI::Write(uint8_t *data, int size) {
int retVal = 0;
retVal = HAL_WriteSPI(m_port, data, size);
return retVal;
}
-int SPI::Read(bool initiate, uint8_t* dataReceived, int size) {
+int SPI::Read(bool initiate, uint8_t *dataReceived, int size) {
int retVal = 0;
if (initiate) {
wpi::SmallVector<uint8_t, 32> dataToSend;
@@ -100,7 +93,7 @@
return retVal;
}
-int SPI::Transaction(uint8_t* dataToSend, uint8_t* dataReceived, int size) {
+int SPI::Transaction(uint8_t *dataToSend, uint8_t *dataReceived, int size) {
int retVal = 0;
retVal = HAL_TransactionSPI(m_port, dataToSend, dataReceived, size);
return retVal;
@@ -132,7 +125,7 @@
wpi_setHALError(status);
}
-void SPI::StartAutoTrigger(DigitalSource& source, bool rising, bool falling) {
+void SPI::StartAutoTrigger(DigitalSource &source, bool rising, bool falling) {
int32_t status = 0;
HAL_StartSPIAutoTrigger(
m_port, source.GetPortHandleForRouting(),
@@ -155,8 +148,8 @@
int SPI::ReadAutoReceivedData(uint32_t *buffer, int numToRead, double timeout) {
int32_t status = 0;
- int32_t val = HAL_ReadSPIAutoReceivedData(m_port, buffer, numToRead,
- timeout, &status);
+ int32_t val =
+ HAL_ReadSPIAutoReceivedData(m_port, buffer, numToRead, timeout, &status);
wpi_setHALError(status);
return val;
}