diff --git a/src/hal/Natives/HalPower.cs b/src/hal/Natives/HalPower.cs index 1f02d37e..4d410683 100644 --- a/src/hal/Natives/HalPower.cs +++ b/src/hal/Natives/HalPower.cs @@ -75,4 +75,34 @@ public static partial class HalPower [LibraryImport("wpiHal", EntryPoint = "HAL_GetVinVoltage")] [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] public static partial double GetVinVoltage(out HalStatus status); + + [AutomateStatusCheck(StatusCheckMethod = HalBase.StatusCheckCall)] + [LibraryImport("wpiHal", EntryPoint = "HAL_GetCPUTemp")] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + public static partial double GetCPUTemp(out HalStatus status); + + [AutomateStatusCheck(StatusCheckMethod = HalBase.StatusCheckCall)] + [LibraryImport("wpiHal", EntryPoint = "HAL_GetBrownoutVoltage")] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + public static partial double GetBrownoutVoltage(out HalStatus status); + + [AutomateStatusCheck(StatusCheckMethod = HalBase.StatusCheckCall)] + [LibraryImport("wpiHal", EntryPoint = "HAL_SetBrownoutVoltage")] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + public static partial void SetBrownoutVoltage(double voltage, out HalStatus status); + + [AutomateStatusCheck(StatusCheckMethod = HalBase.StatusCheckCall)] + [LibraryImport("wpiHal", EntryPoint = "HAL_SetUserRailEnabled3V3")] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + public static partial void SetUserRailEnabled3V3([MarshalAs(UnmanagedType.I4)] bool enabled, out HalStatus status); + + [AutomateStatusCheck(StatusCheckMethod = HalBase.StatusCheckCall)] + [LibraryImport("wpiHal", EntryPoint = "HAL_SetUserRailEnabled5V")] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + public static partial void SetUserRailEnabled5V([MarshalAs(UnmanagedType.I4)] bool enabled, out HalStatus status); + + [AutomateStatusCheck(StatusCheckMethod = HalBase.StatusCheckCall)] + [LibraryImport("wpiHal", EntryPoint = "HAL_SetUserRailEnabled6V")] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + public static partial void SetUserRailEnabled6V([MarshalAs(UnmanagedType.I4)] bool enabled, out HalStatus status); } diff --git a/src/wpilibsharp/CANStatus.cs b/src/wpilibsharp/CANStatus.cs new file mode 100644 index 00000000..37d59c03 --- /dev/null +++ b/src/wpilibsharp/CANStatus.cs @@ -0,0 +1,3 @@ +namespace WPILib; + +public record struct CANStatus(double PercentBusUtilization, int BusOffCount, int TxFullCount, int ReceiveErrorCount, int TransmitErrorCount); diff --git a/src/wpilibsharp/RobotController.cs b/src/wpilibsharp/RobotController.cs index 6d931a0f..7267a240 100644 --- a/src/wpilibsharp/RobotController.cs +++ b/src/wpilibsharp/RobotController.cs @@ -1,7 +1,10 @@ using UnitsNet; using UnitsNet.NumberExtensions.NumberToElectricCurrent; using UnitsNet.NumberExtensions.NumberToElectricPotential; +using UnitsNet.NumberExtensions.NumberToTemperature; +using WPIHal; using WPIHal.Natives; +using WPIHal.Natives.Simulation; namespace WPILib; @@ -21,4 +24,23 @@ public static class RobotController public static bool IsSystemTimeValid => HalBase.GetSystemTimeValid(); public static ElectricPotential InputVoltage => BatteryVoltage; public static ElectricCurrent InputCurrent => HalPower.GetVinCurrent().Amperes(); + public static ElectricPotential BrownoutVoltage + { + get => HalPower.GetBrownoutVoltage().Volts(); + set => HalPower.SetBrownoutVoltage(value.Volts); + } + public static Temperature CPUTemp => HalPower.GetCPUTemp().DegreesCelsius(); + public static RadioLEDState RadioLED + { + get => HalLEDs.GetRadioLEDState(); + set => HalLEDs.SetRadioLEDState(value); + } + public static CANStatus CANStatus + { + get + { + HalCAN.GetCANStatus(out var percentBusUtilization, out var busOffCount, out var txFullCount, out var receiveErrorCount, out var transmitErrorCount); + return new CANStatus(percentBusUtilization, (int)busOffCount, (int)txFullCount, (int)receiveErrorCount, (int)transmitErrorCount); + } + } }