Merge commit '4ee017201227ce16a4edef20912b357e8f303483' into master
Update WPILib for the 2022 beta test. This now actually runs on my RIO
2.0!
Change-Id: I6d335f61c6abe50facca76f4f5014537e742f1ac
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/frc971/config/setup_roborio.sh b/frc971/config/setup_roborio.sh
index 0a70e27..f00212f 100755
--- a/frc971/config/setup_roborio.sh
+++ b/frc971/config/setup_roborio.sh
@@ -37,19 +37,11 @@
ssh "admin@${ROBOT_HOSTNAME}" 'echo "export PATH=\"\${PATH}:/home/admin/robot_code:/home/admin/bin\"" >> /etc/profile'
fi
-if [[ "$(ssh admin@${ROBOT_HOSTNAME} uname -r)" != "4.14.87-rt49-cg-7.0.0f0-xilinx-zynq-189" ]]; then
- echo "Target roboRIO has the wrong kernel"
- exit 1
-fi
-
ssh "admin@${ROBOT_HOSTNAME}" "sed -i 's/vm\.overcommit_memory=2/vm\.overcommit_memory=0/' /etc/sysctl.conf"
ssh "admin@${ROBOT_HOSTNAME}" 'echo "vm.min_free_kbytes=4000" >> /etc/sysctl.conf'
-ssh "admin@${ROBOT_HOSTNAME}" mkdir "/lib/modules/4.14.87-rt49-cg-7.0.0f0-xilinx-zynq-189/kernel/net/sctp/ -p"
-scp frc971/config/sctp.ko "admin@${ROBOT_HOSTNAME}:/lib/modules/4.14.87-rt49-cg-7.0.0f0-xilinx-zynq-189/kernel/net/sctp/sctp.ko"
-ssh "admin@${ROBOT_HOSTNAME}" depmod
-ssh "admin@${ROBOT_HOSTNAME}" sed -i -e 's/^StartupDLLs/;StartupDLLs/' /etc/natinst/share/ni-rt.ini
+ssh "admin@${ROBOT_HOSTNAME}" 'sed -i -e "s/^StartupDLLs/;StartupDLLs/" /etc/natinst/share/ni-rt.ini'
# This fails if the code isn't running.
ssh "admin@${ROBOT_HOSTNAME}" 'PATH="${PATH}":/usr/local/natinst/bin/ /usr/local/frc/bin/frcKillRobot.sh -r -t' || true
diff --git a/frc971/wpilib/ahal/AnalogInput.cc b/frc971/wpilib/ahal/AnalogInput.cc
index 1694708..8d814ad 100644
--- a/frc971/wpilib/ahal/AnalogInput.cc
+++ b/frc971/wpilib/ahal/AnalogInput.cc
@@ -35,7 +35,7 @@
HAL_PortHandle port = HAL_GetPort(channel);
int32_t status = 0;
- m_port = HAL_InitializeAnalogInputPort(port, &status);
+ m_port = HAL_InitializeAnalogInputPort(port, nullptr, &status);
if (status != 0) {
wpi_setErrorWithContextRange(status, 0, HAL_GetNumAnalogInputs(), channel,
HAL_GetErrorMessage(status));
diff --git a/frc971/wpilib/ahal/BUILD b/frc971/wpilib/ahal/BUILD
index 510a072..1d02b30 100644
--- a/frc971/wpilib/ahal/BUILD
+++ b/frc971/wpilib/ahal/BUILD
@@ -21,5 +21,6 @@
"//aos:realtime",
"//aos/logging",
"//third_party:wpilib_hal",
+ "@com_google_absl//absl/types:span",
],
)
diff --git a/frc971/wpilib/ahal/Compressor.cc b/frc971/wpilib/ahal/Compressor.cc
index 4a17f76..ba04e52 100644
--- a/frc971/wpilib/ahal/Compressor.cc
+++ b/frc971/wpilib/ahal/Compressor.cc
@@ -6,12 +6,11 @@
/*----------------------------------------------------------------------------*/
#include "frc971/wpilib/ahal/Compressor.h"
-#include "hal/Compressor.h"
+#include "frc971/wpilib/ahal/WPIErrors.h"
+#include "hal/CTREPCM.h"
#include "hal/HAL.h"
#include "hal/Ports.h"
-#include "hal/Solenoid.h"
-#include "frc971/wpilib/ahal/WPIErrors.h"
using namespace frc;
@@ -22,7 +21,7 @@
*/
Compressor::Compressor(int pcmID) : m_module(pcmID) {
int32_t status = 0;
- m_compressorHandle = HAL_InitializeCompressor(m_module, &status);
+ m_compressorHandle = HAL_InitializeCTREPCM(m_module, nullptr, &status);
if (status != 0) {
wpi_setErrorWithContextRange(status, 0, HAL_GetNumPCMModules(), pcmID,
HAL_GetErrorMessage(status));
@@ -59,7 +58,7 @@
int32_t status = 0;
bool value;
- value = HAL_GetCompressor(m_compressorHandle, &status);
+ value = HAL_GetCTREPCMCompressor(m_compressorHandle, &status);
if (status) {
wpi_setWPIError(Timeout);
@@ -78,7 +77,7 @@
int32_t status = 0;
bool value;
- value = HAL_GetCompressorPressureSwitch(m_compressorHandle, &status);
+ value = HAL_GetCTREPCMPressureSwitch(m_compressorHandle, &status);
if (status) {
wpi_setWPIError(Timeout);
@@ -97,7 +96,7 @@
int32_t status = 0;
double value;
- value = HAL_GetCompressorCurrent(m_compressorHandle, &status);
+ value = HAL_GetCTREPCMCompressorCurrent(m_compressorHandle, &status);
if (status) {
wpi_setWPIError(Timeout);
@@ -117,7 +116,7 @@
if (StatusIsFatal()) return;
int32_t status = 0;
- HAL_SetCompressorClosedLoopControl(m_compressorHandle, on, &status);
+ HAL_SetCTREPCMClosedLoopControl(m_compressorHandle, on, &status);
if (status) {
wpi_setWPIError(Timeout);
@@ -136,7 +135,7 @@
int32_t status = 0;
bool value;
- value = HAL_GetCompressorClosedLoopControl(m_compressorHandle, &status);
+ value = HAL_GetCTREPCMClosedLoopControl(m_compressorHandle, &status);
if (status) {
wpi_setWPIError(Timeout);
@@ -156,7 +155,7 @@
int32_t status = 0;
bool value;
- value = HAL_GetCompressorCurrentTooHighFault(m_compressorHandle, &status);
+ value = HAL_GetCTREPCMCompressorCurrentTooHighFault(m_compressorHandle, &status);
if (status) {
wpi_setWPIError(Timeout);
@@ -181,7 +180,7 @@
bool value;
value =
- HAL_GetCompressorCurrentTooHighStickyFault(m_compressorHandle, &status);
+ HAL_GetCTREPCMCompressorCurrentTooHighStickyFault(m_compressorHandle, &status);
if (status) {
wpi_setWPIError(Timeout);
@@ -205,7 +204,7 @@
int32_t status = 0;
bool value;
- value = HAL_GetCompressorShortedStickyFault(m_compressorHandle, &status);
+ value = HAL_GetCTREPCMCompressorShortedStickyFault(m_compressorHandle, &status);
if (status) {
wpi_setWPIError(Timeout);
@@ -225,7 +224,7 @@
int32_t status = 0;
bool value;
- value = HAL_GetCompressorShortedFault(m_compressorHandle, &status);
+ value = HAL_GetCTREPCMCompressorShortedFault(m_compressorHandle, &status);
if (status) {
wpi_setWPIError(Timeout);
@@ -248,7 +247,7 @@
int32_t status = 0;
bool value;
- value = HAL_GetCompressorNotConnectedStickyFault(m_compressorHandle, &status);
+ value = HAL_GetCTREPCMCompressorNotConnectedStickyFault(m_compressorHandle, &status);
if (status) {
wpi_setWPIError(Timeout);
@@ -268,7 +267,7 @@
int32_t status = 0;
bool value;
- value = HAL_GetCompressorNotConnectedFault(m_compressorHandle, &status);
+ value = HAL_GetCTREPCMCompressorNotConnectedFault(m_compressorHandle, &status);
if (status) {
wpi_setWPIError(Timeout);
@@ -291,7 +290,7 @@
if (StatusIsFatal()) return;
int32_t status = 0;
- HAL_ClearAllPCMStickyFaults(m_module, &status);
+ HAL_ClearAllCTREPCMStickyFaults(m_module, &status);
if (status) {
wpi_setWPIError(Timeout);
diff --git a/frc971/wpilib/ahal/DigitalGlitchFilter.cc b/frc971/wpilib/ahal/DigitalGlitchFilter.cc
index cddfcf0..83e6201 100644
--- a/frc971/wpilib/ahal/DigitalGlitchFilter.cc
+++ b/frc971/wpilib/ahal/DigitalGlitchFilter.cc
@@ -10,13 +10,13 @@
#include <algorithm>
#include <array>
+#include "frc971/wpilib/ahal/Counter.h"
+#include "frc971/wpilib/ahal/Encoder.h"
+#include "frc971/wpilib/ahal/WPIErrors.h"
+#include "glog/logging.h"
#include "hal/Constants.h"
#include "hal/DIO.h"
#include "hal/HAL.h"
-#include "frc971/wpilib/ahal/Counter.h"
-#include "frc971/wpilib/ahal/Encoder.h"
-#include "frc971/wpilib/ahal/Utility.h"
-#include "frc971/wpilib/ahal/WPIErrors.h"
using namespace frc;
@@ -26,7 +26,7 @@
DigitalGlitchFilter::DigitalGlitchFilter() {
auto index =
std::find(m_filterAllocated.begin(), m_filterAllocated.end(), false);
- wpi_assert(index != m_filterAllocated.end());
+ CHECK_NE(index, m_filterAllocated.end());
m_channelIndex = std::distance(m_filterAllocated.begin(), index);
*index = true;
@@ -67,7 +67,7 @@
// Validate that we set it correctly.
int actual_index =
HAL_GetFilterSelect(input->GetPortHandleForRouting(), &status);
- wpi_assertEqual(actual_index, requested_index);
+ CHECK_EQ(actual_index, requested_index);
HAL_Report(HALUsageReporting::kResourceType_DigitalInput,
input->GetChannel());
diff --git a/frc971/wpilib/ahal/DigitalInput.cc b/frc971/wpilib/ahal/DigitalInput.cc
index e0121ea..3e07208 100644
--- a/frc971/wpilib/ahal/DigitalInput.cc
+++ b/frc971/wpilib/ahal/DigitalInput.cc
@@ -36,7 +36,8 @@
m_channel = channel;
int32_t status = 0;
- m_handle = HAL_InitializeDIOPort(HAL_GetPort(channel), true, &status);
+ m_handle =
+ HAL_InitializeDIOPort(HAL_GetPort(channel), true, nullptr, &status);
if (status != 0) {
wpi_setErrorWithContextRange(status, 0, HAL_GetNumDigitalChannels(),
channel, HAL_GetErrorMessage(status));
@@ -54,9 +55,7 @@
DigitalInput::~DigitalInput() {
if (StatusIsFatal()) return;
if (m_interrupt != HAL_kInvalidHandle) {
- int32_t status = 0;
- HAL_CleanInterrupts(m_interrupt, &status);
- // ignore status, as an invalid handle just needs to be ignored.
+ HAL_CleanInterrupts(m_interrupt);
m_interrupt = HAL_kInvalidHandle;
}
diff --git a/frc971/wpilib/ahal/DigitalOutput.cc b/frc971/wpilib/ahal/DigitalOutput.cc
index f4b2781..cc1f3d2 100644
--- a/frc971/wpilib/ahal/DigitalOutput.cc
+++ b/frc971/wpilib/ahal/DigitalOutput.cc
@@ -38,7 +38,8 @@
m_channel = channel;
int32_t status = 0;
- m_handle = HAL_InitializeDIOPort(HAL_GetPort(channel), false, &status);
+ m_handle =
+ HAL_InitializeDIOPort(HAL_GetPort(channel), false, nullptr, &status);
if (status != 0) {
wpi_setErrorWithContextRange(status, 0, HAL_GetNumDigitalChannels(),
channel, HAL_GetErrorMessage(status));
diff --git a/frc971/wpilib/ahal/DriverStation.cc b/frc971/wpilib/ahal/DriverStation.cc
index 9ea1f7a..2ed0a97 100644
--- a/frc971/wpilib/ahal/DriverStation.cc
+++ b/frc971/wpilib/ahal/DriverStation.cc
@@ -9,10 +9,11 @@
#include <chrono>
#include <memory>
+#include <string_view>
+#include <functional>
#include "FRC_NetworkCommunication/FRCComm.h"
#include "frc971/wpilib/ahal/AnalogInput.h"
-#include "frc971/wpilib/ahal/Utility.h"
#include "frc971/wpilib/ahal/WPIErrors.h"
#include "hal/HAL.h"
#include "hal/Power.h"
@@ -43,10 +44,8 @@
*
* The error is also printed to the program console.
*/
-void DriverStation::ReportError(const wpi::Twine &error) {
- wpi::SmallString<128> temp;
- HAL_SendError(1, 1, 0, error.toNullTerminatedStringRef(temp).data(), "", "",
- 1);
+void DriverStation::ReportError(const std::string_view &error) {
+ HAL_SendError(1, 1, 0, std::string(error).c_str(), "", "", 1);
}
/**
@@ -54,10 +53,8 @@
*
* The warning is also printed to the program console.
*/
-void DriverStation::ReportWarning(const wpi::Twine &error) {
- wpi::SmallString<128> temp;
- HAL_SendError(0, 1, 0, error.toNullTerminatedStringRef(temp).data(), "", "",
- 1);
+void DriverStation::ReportWarning(const std::string_view &error) {
+ HAL_SendError(0, 1, 0, std::string(error).c_str(), "", "", 1);
}
/**
@@ -66,16 +63,11 @@
* The error is also printed to the program console.
*/
void DriverStation::ReportError(bool is_error, int32_t code,
- const wpi::Twine &error,
- const wpi::Twine &location,
- const wpi::Twine &stack) {
- wpi::SmallString<128> errorTemp;
- wpi::SmallString<128> locationTemp;
- wpi::SmallString<128> stackTemp;
- HAL_SendError(is_error, code, 0,
- error.toNullTerminatedStringRef(errorTemp).data(),
- location.toNullTerminatedStringRef(locationTemp).data(),
- stack.toNullTerminatedStringRef(stackTemp).data(), 1);
+ const std::string_view &error,
+ const std::string_view &location,
+ const std::string_view &stack) {
+ HAL_SendError(is_error, code, 0, std::string(error).c_str(),
+ std::string(location).c_str(), std::string(stack).c_str(), 1);
}
/**
diff --git a/frc971/wpilib/ahal/DriverStation.h b/frc971/wpilib/ahal/DriverStation.h
index 2fbac9c..5150360 100644
--- a/frc971/wpilib/ahal/DriverStation.h
+++ b/frc971/wpilib/ahal/DriverStation.h
@@ -10,12 +10,13 @@
#include <atomic>
// #include <condition_variable>
#include <memory>
+#include <functional>
#include <string>
+#include <string_view>
#include <thread>
#include "hal/DriverStation.h"
#include "frc971/wpilib/ahal/SensorBase.h"
-#include "wpi/Twine.h"
namespace frc {
@@ -29,10 +30,10 @@
virtual ~DriverStation();
static DriverStation &GetInstance();
- static void ReportError(const wpi::Twine &error);
- static void ReportWarning(const wpi::Twine &error);
- static void ReportError(bool is_error, int code, const wpi::Twine &error,
- const wpi::Twine &location, const wpi::Twine &stack);
+ static void ReportError(const std::string_view &error);
+ static void ReportWarning(const std::string_view &error);
+ static void ReportError(bool is_error, int code, const std::string_view &error,
+ const std::string_view &location, const std::string_view &stack);
static const int kJoystickPorts = 6;
diff --git a/frc971/wpilib/ahal/ErrorBase.h b/frc971/wpilib/ahal/ErrorBase.h
index c92ca52..f0dfe3e 100644
--- a/frc971/wpilib/ahal/ErrorBase.h
+++ b/frc971/wpilib/ahal/ErrorBase.h
@@ -9,8 +9,6 @@
#include <vector>
-#include <wpi/StringRef.h>
-#include <wpi/Twine.h>
#include <wpi/mutex.h>
// Forward declared manually to avoid needing to pull in entire HAL header.
diff --git a/frc971/wpilib/ahal/InterruptableSensorBase.cc b/frc971/wpilib/ahal/InterruptableSensorBase.cc
index d17f2dd..59eb962 100644
--- a/frc971/wpilib/ahal/InterruptableSensorBase.cc
+++ b/frc971/wpilib/ahal/InterruptableSensorBase.cc
@@ -7,9 +7,9 @@
#include "frc971/wpilib/ahal/InterruptableSensorBase.h"
-#include "hal/HAL.h"
-#include "frc971/wpilib/ahal/Utility.h"
#include "frc971/wpilib/ahal/WPIErrors.h"
+#include "glog/logging.h"
+#include "hal/HAL.h"
using namespace frc;
@@ -18,8 +18,8 @@
void InterruptableSensorBase::RequestInterrupts() {
if (StatusIsFatal()) return;
- wpi_assert(m_interrupt == HAL_kInvalidHandle);
- AllocateInterrupts(true);
+ CHECK_EQ(m_interrupt, HAL_kInvalidHandle);
+ AllocateInterrupts();
if (StatusIsFatal()) return; // if allocate failed, out of interrupts
int32_t status = 0;
@@ -31,19 +31,18 @@
SetUpSourceEdge(true, false);
}
-void InterruptableSensorBase::AllocateInterrupts(bool watcher) {
- wpi_assert(m_interrupt == HAL_kInvalidHandle);
+void InterruptableSensorBase::AllocateInterrupts() {
+ CHECK_EQ(m_interrupt, HAL_kInvalidHandle);
// Expects the calling leaf class to allocate an interrupt index.
int32_t status = 0;
- m_interrupt = HAL_InitializeInterrupts(watcher, &status);
+ m_interrupt = HAL_InitializeInterrupts(&status);
wpi_setErrorWithContext(status, HAL_GetErrorMessage(status));
}
void InterruptableSensorBase::CancelInterrupts() {
if (StatusIsFatal()) return;
- wpi_assert(m_interrupt != HAL_kInvalidHandle);
- int32_t status = 0;
- HAL_CleanInterrupts(m_interrupt, &status);
+ CHECK_NE(m_interrupt, HAL_kInvalidHandle);
+ HAL_CleanInterrupts(m_interrupt);
// ignore status, as an invalid handle just needs to be ignored.
m_interrupt = HAL_kInvalidHandle;
}
@@ -51,7 +50,7 @@
InterruptableSensorBase::WaitResult InterruptableSensorBase::WaitForInterrupt(
double timeout, bool ignorePrevious) {
if (StatusIsFatal()) return InterruptableSensorBase::kTimeout;
- wpi_assert(m_interrupt != HAL_kInvalidHandle);
+ CHECK_NE(m_interrupt, HAL_kInvalidHandle);
int32_t status = 0;
int result;
@@ -67,17 +66,9 @@
return static_cast<WaitResult>(falling | rising);
}
-void InterruptableSensorBase::EnableInterrupts() {
- if (StatusIsFatal()) return;
- wpi_assert(m_interrupt != HAL_kInvalidHandle);
- int32_t status = 0;
- HAL_EnableInterrupts(m_interrupt, &status);
- wpi_setErrorWithContext(status, HAL_GetErrorMessage(status));
-}
-
hal::fpga_clock::time_point InterruptableSensorBase::ReadRisingTimestamp() {
if (StatusIsFatal()) return hal::fpga_clock::min_time;
- wpi_assert(m_interrupt != HAL_kInvalidHandle);
+ CHECK_NE(m_interrupt, HAL_kInvalidHandle);
int32_t status = 0;
uint64_t timestamp = HAL_ReadInterruptRisingTimestamp(m_interrupt, &status);
timestamp = HAL_ExpandFPGATime(timestamp, &status);
@@ -87,7 +78,7 @@
hal::fpga_clock::time_point InterruptableSensorBase::ReadFallingTimestamp() {
if (StatusIsFatal()) return hal::fpga_clock::min_time;
- wpi_assert(m_interrupt != HAL_kInvalidHandle);
+ CHECK_NE(m_interrupt, HAL_kInvalidHandle);
int32_t status = 0;
uint64_t timestamp = HAL_ReadInterruptFallingTimestamp(m_interrupt, &status);
timestamp = HAL_ExpandFPGATime(timestamp, &status);
diff --git a/frc971/wpilib/ahal/InterruptableSensorBase.h b/frc971/wpilib/ahal/InterruptableSensorBase.h
index 59ddc9e..c52463b 100644
--- a/frc971/wpilib/ahal/InterruptableSensorBase.h
+++ b/frc971/wpilib/ahal/InterruptableSensorBase.h
@@ -46,9 +46,6 @@
virtual WaitResult WaitForInterrupt(double timeout,
bool ignorePrevious = true);
- // Enables interrupts to occur based on the current configuration.
- virtual void EnableInterrupts();
-
// Returns the timestamp for the most recent rising interrupt.
virtual hal::fpga_clock::time_point ReadRisingTimestamp();
// Returns the timestamp for the most recent falling interrupt.
@@ -61,7 +58,7 @@
protected:
HAL_InterruptHandle m_interrupt = HAL_kInvalidHandle;
- void AllocateInterrupts(bool watcher);
+ void AllocateInterrupts();
};
} // namespace frc
diff --git a/frc971/wpilib/ahal/PWM.cc b/frc971/wpilib/ahal/PWM.cc
index 0bf38a3..31b9863 100644
--- a/frc971/wpilib/ahal/PWM.cc
+++ b/frc971/wpilib/ahal/PWM.cc
@@ -10,10 +10,10 @@
#include <sstream>
+#include "frc971/wpilib/ahal/WPIErrors.h"
+#include "glog/logging.h"
#include "hal/HAL.h"
#include "hal/Ports.h"
-#include "frc971/wpilib/ahal/Utility.h"
-#include "frc971/wpilib/ahal/WPIErrors.h"
using namespace frc;
@@ -37,7 +37,7 @@
}
int32_t status = 0;
- m_handle = HAL_InitializePWMPort(HAL_GetPort(channel), &status);
+ m_handle = HAL_InitializePWMPort(HAL_GetPort(channel), nullptr, &status);
if (status != 0) {
// wpi_setErrorWithContextRange(status, 0, HAL_GetNumPWMChannels(),
// channel,
@@ -271,7 +271,7 @@
HAL_SetPWMPeriodScale(m_handle, 0, &status); // Don't squelch any outputs
break;
default:
- wpi_assert(false);
+ LOG(FATAL) << "Invalid multiplier " << mult;
}
HAL_FATAL_ERROR();
diff --git a/frc971/wpilib/ahal/PowerDistributionPanel.cc b/frc971/wpilib/ahal/PowerDistributionPanel.cc
index 8359cdb..39087fb 100644
--- a/frc971/wpilib/ahal/PowerDistributionPanel.cc
+++ b/frc971/wpilib/ahal/PowerDistributionPanel.cc
@@ -10,7 +10,7 @@
#include <sstream>
#include "hal/HAL.h"
-#include "hal/PDP.h"
+#include "hal/PowerDistribution.h"
#include "hal/Ports.h"
#include "frc971/wpilib/ahal/WPIErrors.h"
@@ -24,7 +24,9 @@
*/
PowerDistributionPanel::PowerDistributionPanel(int module) {
int32_t status = 0;
- m_handle = HAL_InitializePDP(module, &status);
+ m_handle = HAL_InitializePowerDistribution(
+ module, HAL_PowerDistributionType::HAL_PowerDistributionType_kCTRE,
+ nullptr, &status);
if (status != 0) {
return;
}
@@ -38,7 +40,7 @@
double PowerDistributionPanel::GetVoltage() const {
int32_t status = 0;
- double voltage = HAL_GetPDPVoltage(m_handle, &status);
+ double voltage = HAL_GetPowerDistributionVoltage(m_handle, &status);
if (status) {
WPI_LIB_FATAL_ERROR(Timeout, "");
@@ -55,7 +57,7 @@
double PowerDistributionPanel::GetTemperature() const {
int32_t status = 0;
- double temperature = HAL_GetPDPTemperature(m_handle, &status);
+ double temperature = HAL_GetPowerDistributionTemperature(m_handle, &status);
if (status) {
WPI_LIB_FATAL_ERROR(Timeout, "");
@@ -72,13 +74,16 @@
double PowerDistributionPanel::GetCurrent(int channel) const {
int32_t status = 0;
- if (!CheckPDPChannel(channel)) {
+ if (!CheckPDPChannel(
+ channel,
+ HAL_PowerDistributionType::HAL_PowerDistributionType_kCTRE)) {
std::stringstream buf;
buf << "PDP Channel " << channel;
WPI_LIB_FATAL_ERROR(ChannelIndexOutOfRange, buf.str());
}
- double current = HAL_GetPDPChannelCurrent(m_handle, channel, &status);
+ double current =
+ HAL_GetPowerDistributionChannelCurrent(m_handle, channel, &status);
if (status) {
WPI_LIB_FATAL_ERROR(Timeout, "");
@@ -95,7 +100,7 @@
double PowerDistributionPanel::GetTotalCurrent() const {
int32_t status = 0;
- double current = HAL_GetPDPTotalCurrent(m_handle, &status);
+ double current = HAL_GetPowerDistributionTotalCurrent(m_handle, &status);
if (status) {
WPI_LIB_FATAL_ERROR(Timeout, "");
@@ -112,7 +117,7 @@
double PowerDistributionPanel::GetTotalPower() const {
int32_t status = 0;
- double power = HAL_GetPDPTotalPower(m_handle, &status);
+ double power = HAL_GetPowerDistributionTotalPower(m_handle, &status);
if (status) {
WPI_LIB_FATAL_ERROR(Timeout, "");
@@ -129,7 +134,7 @@
double PowerDistributionPanel::GetTotalEnergy() const {
int32_t status = 0;
- double energy = HAL_GetPDPTotalEnergy(m_handle, &status);
+ double energy = HAL_GetPowerDistributionTotalEnergy(m_handle, &status);
if (status) {
WPI_LIB_FATAL_ERROR(Timeout, "");
@@ -146,7 +151,7 @@
void PowerDistributionPanel::ResetTotalEnergy() {
int32_t status = 0;
- HAL_ResetPDPTotalEnergy(m_handle, &status);
+ HAL_ResetPowerDistributionTotalEnergy(m_handle, &status);
if (status) {
WPI_LIB_FATAL_ERROR(Timeout, "");
@@ -159,7 +164,7 @@
void PowerDistributionPanel::ClearStickyFaults() {
int32_t status = 0;
- HAL_ClearPDPStickyFaults(m_handle, &status);
+ HAL_ClearPowerDistributionStickyFaults(m_handle, &status);
if (status) {
WPI_LIB_FATAL_ERROR(Timeout, "");
diff --git a/frc971/wpilib/ahal/Relay.cc b/frc971/wpilib/ahal/Relay.cc
index e0cd090..51241be 100644
--- a/frc971/wpilib/ahal/Relay.cc
+++ b/frc971/wpilib/ahal/Relay.cc
@@ -38,7 +38,8 @@
if (m_direction == kBothDirections || m_direction == kForwardOnly) {
int32_t status = 0;
- m_forwardHandle = HAL_InitializeRelayPort(portHandle, true, &status);
+ m_forwardHandle =
+ HAL_InitializeRelayPort(portHandle, true, nullptr, &status);
if (status != 0) {
wpi_setErrorWithContextRange(status, 0, HAL_GetNumRelayChannels(),
channel, HAL_GetErrorMessage(status));
@@ -50,7 +51,7 @@
}
if (m_direction == kBothDirections || m_direction == kReverseOnly) {
int32_t status = 0;
- m_reverseHandle = HAL_InitializeRelayPort(portHandle, false, &status);
+ m_reverseHandle = HAL_InitializeRelayPort(portHandle, false, nullptr, &status);
if (status != 0) {
wpi_setErrorWithContextRange(status, 0, HAL_GetNumRelayChannels(),
channel, HAL_GetErrorMessage(status));
diff --git a/frc971/wpilib/ahal/RobotBase.cc b/frc971/wpilib/ahal/RobotBase.cc
index 1ce1d4e..3cc39df 100644
--- a/frc971/wpilib/ahal/RobotBase.cc
+++ b/frc971/wpilib/ahal/RobotBase.cc
@@ -11,7 +11,6 @@
#include "hal/HAL.h"
#include "frc971/wpilib/ahal/DriverStation.h"
-#include "frc971/wpilib/ahal/Utility.h"
#include "frc971/wpilib/ahal/WPILibVersion.h"
using namespace frc;
diff --git a/frc971/wpilib/ahal/SPI.cc b/frc971/wpilib/ahal/SPI.cc
index 01b1626..d51b20f 100644
--- a/frc971/wpilib/ahal/SPI.cc
+++ b/frc971/wpilib/ahal/SPI.cc
@@ -14,6 +14,7 @@
#include <wpi/SmallVector.h>
#include <wpi/mutex.h>
+#include "absl/types/span.h"
#include "frc971/wpilib/ahal/DigitalSource.h"
#include "frc971/wpilib/ahal/WPIErrors.h"
@@ -117,7 +118,8 @@
wpi_setHALError(status);
}
-void SPI::SetAutoTransmitData(wpi::ArrayRef<uint8_t> dataToSend, int zeroSize) {
+void SPI::SetAutoTransmitData(absl::Span<const uint8_t> dataToSend,
+ int zeroSize) {
int32_t status = 0;
HAL_SetSPIAutoTransmitData(m_port, dataToSend.data(), dataToSend.size(),
zeroSize, &status);
diff --git a/frc971/wpilib/ahal/SPI.h b/frc971/wpilib/ahal/SPI.h
index 1d439b2..6421535 100644
--- a/frc971/wpilib/ahal/SPI.h
+++ b/frc971/wpilib/ahal/SPI.h
@@ -8,8 +8,9 @@
#pragma once
#include <hal/SPITypes.h>
-#include <wpi/ArrayRef.h>
#include <wpi/deprecated.h>
+#include <wpi/span.h>
+#include "absl/types/span.h"
#include <cstdint>
#include <memory>
@@ -168,7 +169,7 @@
* @param dataToSend data to send (maximum 16 bytes)
* @param zeroSize number of zeros to send after the data
*/
- void SetAutoTransmitData(wpi::ArrayRef<uint8_t> dataToSend, int zeroSize);
+ void SetAutoTransmitData(absl::Span<const uint8_t> dataToSend, int zeroSize);
/**
* Start running the automatic SPI transfer engine at a periodic rate.
diff --git a/frc971/wpilib/ahal/SensorBase.cc b/frc971/wpilib/ahal/SensorBase.cc
index 0b796f1..111e4c6 100644
--- a/frc971/wpilib/ahal/SensorBase.cc
+++ b/frc971/wpilib/ahal/SensorBase.cc
@@ -8,35 +8,24 @@
#include "frc971/wpilib/ahal/SensorBase.h"
#include "FRC_NetworkCommunication/LoadOut.h"
+#include "frc971/wpilib/ahal/WPIErrors.h"
#include "hal/AnalogInput.h"
#include "hal/AnalogOutput.h"
#include "hal/DIO.h"
#include "hal/HAL.h"
-#include "hal/PDP.h"
#include "hal/PWM.h"
#include "hal/Ports.h"
+#include "hal/PowerDistribution.h"
#include "hal/Relay.h"
-#include "hal/Solenoid.h"
-#include "frc971/wpilib/ahal/WPIErrors.h"
namespace frc {
const int kDigitalChannels = HAL_GetNumDigitalChannels();
const int kAnalogInputs = HAL_GetNumAnalogInputs();
-const int kSolenoidChannels = HAL_GetNumSolenoidChannels();
-const int kSolenoidModules = HAL_GetNumPCMModules();
const int kPwmChannels = HAL_GetNumPWMChannels();
const int kRelayChannels = HAL_GetNumRelayHeaders();
-const int kPDPChannels = HAL_GetNumPDPChannels();
-
-/**
- * Check that the solenoid module number is valid.
- *
- * @return Solenoid module is valid and present
- */
-bool CheckSolenoidModule(int moduleNumber) {
- return HAL_CheckSolenoidModule(moduleNumber);
-}
+const int kCTREPDPChannels = HAL_GetNumCTREPDPChannels();
+const int kREVPDPChannels = HAL_GetNumREVPDHChannels();
/**
* Check that the digital channel number is valid.
@@ -93,19 +82,12 @@
}
/**
- * Verify that the solenoid channel number is within limits.
- *
- * @return Solenoid channel is valid
- */
-bool CheckSolenoidChannel(int channel) {
- return HAL_CheckSolenoidChannel(channel);
-}
-
-/**
* Verify that the power distribution channel number is within limits.
*
* @return PDP channel is valid
*/
-bool CheckPDPChannel(int channel) { return HAL_CheckPDPModule(channel); }
+bool CheckPDPChannel(int channel, HAL_PowerDistributionType type) {
+ return HAL_CheckPowerDistributionModule(channel, type);
+}
} // namespace frc
diff --git a/frc971/wpilib/ahal/SensorBase.h b/frc971/wpilib/ahal/SensorBase.h
index a4de9cc..39c5130 100644
--- a/frc971/wpilib/ahal/SensorBase.h
+++ b/frc971/wpilib/ahal/SensorBase.h
@@ -10,19 +10,18 @@
#include <cstdint>
#include "frc971/wpilib/ahal/ErrorBase.h"
+#include "hal/PowerDistribution.h"
namespace frc {
inline int GetDefaultSolenoidModule() { return 0; }
-bool CheckSolenoidModule(int moduleNumber);
bool CheckDigitalChannel(int channel);
bool CheckRelayChannel(int channel);
bool CheckPWMChannel(int channel);
bool CheckAnalogInputChannel(int channel);
bool CheckAnalogOutputChannel(int channel);
-bool CheckSolenoidChannel(int channel);
-bool CheckPDPChannel(int channel);
+bool CheckPDPChannel(int channel, HAL_PowerDistributionType type);
extern const int kDigitalChannels;
extern const int kAnalogInputs;
diff --git a/frc971/wpilib/ahal/Utility.cc b/frc971/wpilib/ahal/Utility.cc
index f4b9f38..14ed1c5 100644
--- a/frc971/wpilib/ahal/Utility.cc
+++ b/frc971/wpilib/ahal/Utility.cc
@@ -1,146 +1,10 @@
-/*----------------------------------------------------------------------------*/
-/* Copyright (c) FIRST 2008-2017. All Rights Reserved. */
-/* Open Source Software - may be modified and shared by FRC teams. The code */
-/* must be accompanied by the FIRST BSD license file in the root directory of */
-/* the project. */
-/*----------------------------------------------------------------------------*/
-
#include "frc971/wpilib/ahal/Utility.h"
-#include <cxxabi.h>
-#include <execinfo.h>
-
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-#include <sstream>
-
#include "frc971/wpilib/ahal/ErrorBase.h"
-#include "hal/DriverStation.h"
#include "hal/HAL.h"
-#include "wpi/Path.h"
-#include "wpi/SmallString.h"
-#include "wpi/raw_ostream.h"
-
-using namespace frc;
-
-/**
- * Assert implementation.
- * This allows breakpoints to be set on an assert.
- * The users don't call this, but instead use the wpi_assert macros in
- * Utility.h.
- */
-bool wpi_assert_impl(bool conditionValue, const wpi::Twine &conditionText,
- const wpi::Twine &message, wpi::StringRef fileName,
- int lineNumber, wpi::StringRef funcName) {
- if (!conditionValue) {
- wpi::SmallString<128> locBuf;
- wpi::raw_svector_ostream locStream(locBuf);
- locStream << funcName << " [" << wpi::sys::path::filename(fileName) << ":"
- << lineNumber << "]";
-
- wpi::SmallString<128> errorBuf;
- wpi::raw_svector_ostream errorStream(errorBuf);
-
- errorStream << "Assertion \"" << conditionText << "\" ";
-
- if (message.isTriviallyEmpty() ||
- (message.isSingleStringRef() && message.getSingleStringRef().empty())) {
- errorStream << "failed.\n";
- } else {
- errorStream << "failed: " << message << "\n";
- }
-
- std::string stack = GetStackTrace(2);
-
- // Print the error and send it to the DriverStation
- HAL_SendError(1, 1, 0, errorBuf.c_str(), locBuf.c_str(), stack.c_str(), 1);
- }
-
- return conditionValue;
-}
-
-/**
- * Common error routines for wpi_assertEqual_impl and wpi_assertNotEqual_impl
- * This should not be called directly; it should only be used by
- * wpi_assertEqual_impl and wpi_assertNotEqual_impl.
- */
-void wpi_assertEqual_common_impl(const wpi::Twine &valueA,
- const wpi::Twine &valueB,
- const wpi::Twine &equalityType,
- const wpi::Twine &message,
- wpi::StringRef fileName, int lineNumber,
- wpi::StringRef funcName) {
- wpi::SmallString<128> locBuf;
- wpi::raw_svector_ostream locStream(locBuf);
- locStream << funcName << " [" << wpi::sys::path::filename(fileName) << ":"
- << lineNumber << "]";
-
- wpi::SmallString<128> errorBuf;
- wpi::raw_svector_ostream errorStream(errorBuf);
-
- errorStream << "Assertion \"" << valueA << " " << equalityType << " "
- << valueB << "\" ";
-
- if (message.isTriviallyEmpty() ||
- (message.isSingleStringRef() && message.getSingleStringRef().empty())) {
- errorStream << "failed.\n";
- } else {
- errorStream << "failed: " << message << "\n";
- }
-
- std::string trace = GetStackTrace(3);
-
- // Print the error and send it to the DriverStation
- HAL_SendError(1, 1, 0, errorBuf.c_str(), locBuf.c_str(), trace.c_str(), 1);
-}
-
-/**
- * Assert equal implementation.
- * This determines whether the two given integers are equal. If not,
- * the value of each is printed along with an optional message string.
- * The users don't call this, but instead use the wpi_assertEqual macros in
- * Utility.h.
- */
-bool wpi_assertEqual_impl(int valueA, int valueB,
- const wpi::Twine &valueAString,
- const wpi::Twine &valueBString,
- const wpi::Twine &message, wpi::StringRef fileName,
- int lineNumber, wpi::StringRef funcName) {
- if (!(valueA == valueB)) {
- wpi_assertEqual_common_impl(valueAString, valueBString, "==", message,
- fileName, lineNumber, funcName);
- }
- return valueA == valueB;
-}
-
-/**
- * Assert not equal implementation.
- * This determines whether the two given integers are equal. If so,
- * the value of each is printed along with an optional message string.
- * The users don't call this, but instead use the wpi_assertNotEqual macros in
- * Utility.h.
- */
-bool wpi_assertNotEqual_impl(int valueA, int valueB,
- const wpi::Twine &valueAString,
- const wpi::Twine &valueBString,
- const wpi::Twine &message, wpi::StringRef fileName,
- int lineNumber, wpi::StringRef funcName) {
- if (!(valueA != valueB)) {
- wpi_assertEqual_common_impl(valueAString, valueBString, "!=", message,
- fileName, lineNumber, funcName);
- }
- return valueA != valueB;
-}
namespace frc {
-/**
- * Return the FPGA Version number.
- *
- * For now, expect this to be competition year.
- * @return FPGA Version number.
- */
int GetFPGAVersion() {
int32_t status = 0;
int version = HAL_GetFPGAVersion(&status);
@@ -148,14 +12,6 @@
return version;
}
-/**
- * Return the FPGA Revision number.
- * The format of the revision is 3 numbers.
- * The 12 most significant bits are the Major Revision.
- * the next 8 bits are the Minor Revision.
- * The 12 least significant bits are the Build Number.
- * @return FPGA Revision number.
- */
int64_t GetFPGARevision() {
int32_t status = 0;
int64_t revision = HAL_GetFPGARevision(&status);
@@ -163,12 +19,6 @@
return revision;
}
-/**
- * Read the microsecond-resolution timer on the FPGA.
- *
- * @return The current time in microseconds according to the FPGA (since FPGA
- * reset).
- */
uint64_t GetFPGATime() {
int32_t status = 0;
uint64_t time = HAL_GetFPGATime(&status);
@@ -176,11 +26,6 @@
return time;
}
-/**
- * Get the state of the "USER" button on the roboRIO.
- *
- * @return True if the button is currently pressed down
- */
bool GetUserButton() {
int32_t status = 0;
@@ -190,49 +35,4 @@
return value;
}
-/**
- * Demangle a C++ symbol, used for printing stack traces.
- */
-static std::string demangle(char const *mangledSymbol) {
- char buffer[256];
- size_t length;
- int32_t status;
-
- if (std::sscanf(mangledSymbol, "%*[^(]%*[(]%255[^)+]", buffer)) {
- char *symbol = abi::__cxa_demangle(buffer, nullptr, &length, &status);
- if (status == 0) {
- return symbol;
- } else {
- // If the symbol couldn't be demangled, it's probably a C function,
- // so just return it as-is.
- return buffer;
- }
- }
-
- // If everything else failed, just return the mangled symbol
- return mangledSymbol;
-}
-
-/**
- * Get a stack trace, ignoring the first "offset" symbols.
- * @param offset The number of symbols at the top of the stack to ignore
- */
-std::string GetStackTrace(int offset) {
- void *stackTrace[128];
- int stackSize = backtrace(stackTrace, 128);
- char **mangledSymbols = backtrace_symbols(stackTrace, stackSize);
- std::stringstream trace;
-
- for (int i = offset; i < stackSize; i++) {
- // Only print recursive functions once in a row.
- if (i == 0 || stackTrace[i] != stackTrace[i - 1]) {
- trace << "\tat " << demangle(mangledSymbols[i]) << std::endl;
- }
- }
-
- std::free(mangledSymbols);
-
- return trace.str();
-}
-
} // namespace frc
diff --git a/frc971/wpilib/ahal/Utility.h b/frc971/wpilib/ahal/Utility.h
index 196dfce..4962cc9 100644
--- a/frc971/wpilib/ahal/Utility.h
+++ b/frc971/wpilib/ahal/Utility.h
@@ -5,57 +5,30 @@
/* the project. */
/*----------------------------------------------------------------------------*/
-#pragma once
+#ifndef FRC971_WPILIB_AHAL_UTILITY_H_
+#define FRC971_WPILIB_AHAL_UTILITY_H_
-/** @file
- * Contains global utility functions
- */
-
-#include <cstdint>
#include <string>
-#include "wpi/StringRef.h"
-#include "wpi/Twine.h"
-
-#define wpi_assert(condition) \
- wpi_assert_impl(condition, #condition, "", __FILE__, __LINE__, __FUNCTION__)
-#define wpi_assertWithMessage(condition, message) \
- wpi_assert_impl(condition, #condition, message, __FILE__, __LINE__, \
- __FUNCTION__)
-
-#define wpi_assertEqual(a, b) \
- wpi_assertEqual_impl(a, b, #a, #b, "", __FILE__, __LINE__, __FUNCTION__)
-#define wpi_assertEqualWithMessage(a, b, message) \
- wpi_assertEqual_impl(a, b, #a, #b, message, __FILE__, __LINE__, __FUNCTION__)
-
-#define wpi_assertNotEqual(a, b) \
- wpi_assertNotEqual_impl(a, b, #a, #b, "", __FILE__, __LINE__, __FUNCTION__)
-#define wpi_assertNotEqualWithMessage(a, b, message) \
- wpi_assertNotEqual_impl(a, b, #a, #b, message, __FILE__, __LINE__, \
- __FUNCTION__)
-
-bool wpi_assert_impl(bool conditionValue, const wpi::Twine &conditionText,
- const wpi::Twine &message, wpi::StringRef fileName,
- int lineNumber, wpi::StringRef funcName);
-bool wpi_assertEqual_impl(int valueA, int valueB,
- const wpi::Twine &valueAString,
- const wpi::Twine &valueBString,
- const wpi::Twine &message, wpi::StringRef fileName,
- int lineNumber, wpi::StringRef funcName);
-bool wpi_assertNotEqual_impl(int valueA, int valueB,
- const wpi::Twine &valueAString,
- const wpi::Twine &valueBString,
- const wpi::Twine &message, wpi::StringRef fileName,
- int lineNumber, wpi::StringRef funcName);
-
-void wpi_suspendOnAssertEnabled(bool enabled);
-
namespace frc {
+// Returns the FPGA Version number. For now, this is the competition year.
int GetFPGAVersion();
+
+// Returns the FPGA Revision number.
+// The format of the revision is 3 numbers.
+// The 12 most significant bits are the Major Revision.
+// the next 8 bits are the Minor Revision.
+// The 12 least significant bits are the Build Number.
int64_t GetFPGARevision();
+
+// Reads the microsecond-resolution timer on the FPGA since reset.
uint64_t GetFPGATime();
+
+// Gets the state of the "USER" button on the roboRIO, returning true if
+// pressed.
bool GetUserButton();
-std::string GetStackTrace(int offset);
} // namespace frc
+
+#endif // FRC971_WPILIB_AHAL_UTILITY_H_
diff --git a/frc971/wpilib/buffered_pcm.cc b/frc971/wpilib/buffered_pcm.cc
index 7f6cb37..8f5a3d9 100644
--- a/frc971/wpilib/buffered_pcm.cc
+++ b/frc971/wpilib/buffered_pcm.cc
@@ -5,7 +5,7 @@
#include "aos/logging/logging.h"
#include "hal/HAL.h"
#include "hal/Ports.h"
-#include "hal/Solenoid.h"
+#include "hal/CTREPCM.h"
namespace frc971 {
namespace wpilib {
@@ -13,8 +13,8 @@
BufferedPcm::BufferedPcm(int module) : module_(module) {
for (int i = 0; i < 8; ++i) {
int32_t status = 0;
- solenoid_handles_[i] =
- HAL_InitializeSolenoidPort(HAL_GetPortWithModule(module_, i), &status);
+ solenoid_handles_[i] = HAL_InitializeCTREPCM(
+ HAL_GetPortWithModule(module_, i), nullptr, &status);
if (status != 0) {
AOS_LOG(FATAL, "Status was %d\n", status);
}
@@ -36,7 +36,7 @@
int32_t BufferedPcm::GetAll() {
int32_t status = 0;
- int32_t result = HAL_GetAllSolenoids(module_, &status);
+ int32_t result = HAL_GetCTREPCMSolenoids(module_, &status);
if (status != 0) {
AOS_LOG(ERROR, "Failed to flush, %d\n", status);
return 0;
@@ -47,7 +47,7 @@
void BufferedPcm::Flush() {
AOS_LOG(DEBUG, "sending solenoids 0x%" PRIx8 "\n", values_);
int32_t status = 0;
- HAL_SetAllSolenoids(module_, static_cast<int>(values_), &status);
+ HAL_SetCTREPCMSolenoids(module_, 0xff, static_cast<int>(values_), &status);
if (status != 0) {
AOS_LOG(ERROR, "Failed to flush, %d\n", status);
}
diff --git a/frc971/wpilib/dma_edge_counting.h b/frc971/wpilib/dma_edge_counting.h
index b645d01..2d49ecb 100644
--- a/frc971/wpilib/dma_edge_counting.h
+++ b/frc971/wpilib/dma_edge_counting.h
@@ -8,12 +8,12 @@
#include "aos/macros.h"
#include "aos/containers/sized_array.h"
+#include "frc971/wpilib/ahal/Utility.h"
#include "frc971/wpilib/dma.h"
#include "frc971/wpilib/ahal/AnalogInput.h"
#include "frc971/wpilib/ahal/DigitalInput.h"
#include "frc971/wpilib/ahal/Encoder.h"
-#include "frc971/wpilib/ahal/Utility.h"
#undef ERROR
namespace frc971 {
diff --git a/frc971/wpilib/sensor_reader.cc b/frc971/wpilib/sensor_reader.cc
index 16b0e09..2a40128 100644
--- a/frc971/wpilib/sensor_reader.cc
+++ b/frc971/wpilib/sensor_reader.cc
@@ -9,7 +9,6 @@
#include "aos/util/compiler_memory_barrier.h"
#include "frc971/wpilib/ahal/DigitalInput.h"
#include "frc971/wpilib/ahal/DriverStation.h"
-#include "frc971/wpilib/ahal/Utility.h"
#include "frc971/wpilib/fpga_time_conversion.h"
#include "frc971/wpilib/wpilib_interface.h"
#include "hal/PWM.h"