mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-07-01 02:41:48 +00:00
[wpilib, hal] Add support for getting faults and versions from power distribution (#3794)
This commit is contained in:
@@ -137,6 +137,48 @@ void PowerDistribution::SetSwitchableChannel(bool enabled) {
|
||||
FRC_ReportError(status, "Module {}", m_module);
|
||||
}
|
||||
|
||||
PowerDistribution::Version PowerDistribution::GetVersion() const {
|
||||
int32_t status = 0;
|
||||
HAL_PowerDistributionVersion halVersion;
|
||||
std::memset(&halVersion, 0, sizeof(halVersion));
|
||||
HAL_GetPowerDistributionVersion(m_handle, &halVersion, &status);
|
||||
FRC_ReportError(status, "Module {}", m_module);
|
||||
PowerDistribution::Version version;
|
||||
static_assert(sizeof(halVersion) == sizeof(version));
|
||||
static_assert(std::is_standard_layout_v<decltype(version)>);
|
||||
static_assert(std::is_trivial_v<decltype(version)>);
|
||||
std::memcpy(&version, &halVersion, sizeof(version));
|
||||
return version;
|
||||
}
|
||||
|
||||
PowerDistribution::Faults PowerDistribution::GetFaults() const {
|
||||
int32_t status = 0;
|
||||
HAL_PowerDistributionFaults halFaults;
|
||||
std::memset(&halFaults, 0, sizeof(halFaults));
|
||||
HAL_GetPowerDistributionFaults(m_handle, &halFaults, &status);
|
||||
FRC_ReportError(status, "Module {}", m_module);
|
||||
PowerDistribution::Faults faults;
|
||||
static_assert(sizeof(halFaults) == sizeof(faults));
|
||||
static_assert(std::is_standard_layout_v<decltype(faults)>);
|
||||
static_assert(std::is_trivial_v<decltype(faults)>);
|
||||
std::memcpy(&faults, &halFaults, sizeof(faults));
|
||||
return faults;
|
||||
}
|
||||
|
||||
PowerDistribution::StickyFaults PowerDistribution::GetStickyFaults() const {
|
||||
int32_t status = 0;
|
||||
HAL_PowerDistributionStickyFaults halStickyFaults;
|
||||
std::memset(&halStickyFaults, 0, sizeof(halStickyFaults));
|
||||
HAL_GetPowerDistributionStickyFaults(m_handle, &halStickyFaults, &status);
|
||||
FRC_ReportError(status, "Module {}", m_module);
|
||||
PowerDistribution::StickyFaults stickyFaults;
|
||||
static_assert(sizeof(halStickyFaults) == sizeof(stickyFaults));
|
||||
static_assert(std::is_standard_layout_v<decltype(stickyFaults)>);
|
||||
static_assert(std::is_trivial_v<decltype(stickyFaults)>);
|
||||
std::memcpy(&stickyFaults, &halStickyFaults, sizeof(stickyFaults));
|
||||
return stickyFaults;
|
||||
}
|
||||
|
||||
void PowerDistribution::InitSendable(wpi::SendableBuilder& builder) {
|
||||
builder.SetSmartDashboardType("PowerDistribution");
|
||||
int32_t status = 0;
|
||||
|
||||
@@ -102,6 +102,82 @@ class PowerDistribution : public wpi::Sendable,
|
||||
|
||||
void SetSwitchableChannel(bool enabled);
|
||||
|
||||
struct Version {
|
||||
uint32_t FirmwareMajor;
|
||||
uint32_t FirmwareMinor;
|
||||
uint32_t FirmwareFix;
|
||||
uint32_t FardwareMinor;
|
||||
uint32_t FardwareMajor;
|
||||
uint32_t UniqueId;
|
||||
};
|
||||
|
||||
Version GetVersion() const;
|
||||
|
||||
struct Faults {
|
||||
uint32_t Channel0BreakerFault : 1;
|
||||
uint32_t Channel1BreakerFault : 1;
|
||||
uint32_t Channel2BreakerFault : 1;
|
||||
uint32_t Channel3BreakerFault : 1;
|
||||
uint32_t Channel4BreakerFault : 1;
|
||||
uint32_t Channel5BreakerFault : 1;
|
||||
uint32_t Channel6BreakerFault : 1;
|
||||
uint32_t Channel7BreakerFault : 1;
|
||||
uint32_t Channel8BreakerFault : 1;
|
||||
uint32_t Channel9BreakerFault : 1;
|
||||
uint32_t Channel10BreakerFault : 1;
|
||||
uint32_t Channel11BreakerFault : 1;
|
||||
uint32_t Channel12BreakerFault : 1;
|
||||
uint32_t Channel13BreakerFault : 1;
|
||||
uint32_t Channel14BreakerFault : 1;
|
||||
uint32_t Channel15BreakerFault : 1;
|
||||
uint32_t Channel16BreakerFault : 1;
|
||||
uint32_t Channel17BreakerFault : 1;
|
||||
uint32_t Channel18BreakerFault : 1;
|
||||
uint32_t Channel19BreakerFault : 1;
|
||||
uint32_t Channel20BreakerFault : 1;
|
||||
uint32_t Channel21BreakerFault : 1;
|
||||
uint32_t Channel22BreakerFault : 1;
|
||||
uint32_t Channel23BreakerFault : 1;
|
||||
uint32_t Brownout : 1;
|
||||
uint32_t CanWarning : 1;
|
||||
uint32_t HardwareFault : 1;
|
||||
};
|
||||
|
||||
Faults GetFaults() const;
|
||||
|
||||
struct StickyFaults {
|
||||
uint32_t Channel0BreakerFault : 1;
|
||||
uint32_t Channel1BreakerFault : 1;
|
||||
uint32_t Channel2BreakerFault : 1;
|
||||
uint32_t Channel3BreakerFault : 1;
|
||||
uint32_t Channel4BreakerFault : 1;
|
||||
uint32_t Channel5BreakerFault : 1;
|
||||
uint32_t Channel6BreakerFault : 1;
|
||||
uint32_t Channel7BreakerFault : 1;
|
||||
uint32_t Channel8BreakerFault : 1;
|
||||
uint32_t Channel9BreakerFault : 1;
|
||||
uint32_t Channel10BreakerFault : 1;
|
||||
uint32_t Channel11BreakerFault : 1;
|
||||
uint32_t Channel12BreakerFault : 1;
|
||||
uint32_t Channel13BreakerFault : 1;
|
||||
uint32_t Channel14BreakerFault : 1;
|
||||
uint32_t Channel15BreakerFault : 1;
|
||||
uint32_t Channel16BreakerFault : 1;
|
||||
uint32_t Channel17BreakerFault : 1;
|
||||
uint32_t Channel18BreakerFault : 1;
|
||||
uint32_t Channel19BreakerFault : 1;
|
||||
uint32_t Channel20BreakerFault : 1;
|
||||
uint32_t Channel21BreakerFault : 1;
|
||||
uint32_t Channel22BreakerFault : 1;
|
||||
uint32_t Channel23BreakerFault : 1;
|
||||
uint32_t Brownout : 1;
|
||||
uint32_t CanWarning : 1;
|
||||
uint32_t CanBusOff : 1;
|
||||
uint32_t HasReset : 1;
|
||||
};
|
||||
|
||||
StickyFaults GetStickyFaults() const;
|
||||
|
||||
void InitSendable(wpi::SendableBuilder& builder) override;
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user