blob: 8bc2d6b2c9ef93be9e04d37a4a3f1f3ee469eaa0 [file] [log] [blame]
Austin Schuh812d0d12021-11-04 20:16:48 -07001// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
Brian Silverman8fce7482020-01-05 13:18:21 -08004
5#include "frc/RobotController.h"
6
7#include <hal/CAN.h>
Brian Silverman8fce7482020-01-05 13:18:21 -08008#include <hal/HALBase.h>
9#include <hal/Power.h>
10
Austin Schuh812d0d12021-11-04 20:16:48 -070011#include "frc/Errors.h"
Brian Silverman8fce7482020-01-05 13:18:21 -080012
13using namespace frc;
14
15int RobotController::GetFPGAVersion() {
16 int32_t status = 0;
17 int version = HAL_GetFPGAVersion(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -070018 FRC_CheckErrorStatus(status, "{}", "GetFPGAVersion");
Brian Silverman8fce7482020-01-05 13:18:21 -080019 return version;
20}
21
22int64_t RobotController::GetFPGARevision() {
23 int32_t status = 0;
24 int64_t revision = HAL_GetFPGARevision(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -070025 FRC_CheckErrorStatus(status, "{}", "GetFPGARevision");
Brian Silverman8fce7482020-01-05 13:18:21 -080026 return revision;
27}
28
29uint64_t RobotController::GetFPGATime() {
30 int32_t status = 0;
31 uint64_t time = HAL_GetFPGATime(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -070032 FRC_CheckErrorStatus(status, "{}", "GetFPGATime");
Brian Silverman8fce7482020-01-05 13:18:21 -080033 return time;
34}
35
36bool RobotController::GetUserButton() {
37 int32_t status = 0;
Brian Silverman8fce7482020-01-05 13:18:21 -080038 bool value = HAL_GetFPGAButton(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -070039 FRC_CheckErrorStatus(status, "{}", "GetUserButton");
Brian Silverman8fce7482020-01-05 13:18:21 -080040 return value;
41}
42
Austin Schuh812d0d12021-11-04 20:16:48 -070043units::volt_t RobotController::GetBatteryVoltage() {
44 int32_t status = 0;
45 double retVal = HAL_GetVinVoltage(&status);
46 FRC_CheckErrorStatus(status, "{}", "GetBatteryVoltage");
47 return units::volt_t{retVal};
48}
49
Brian Silverman8fce7482020-01-05 13:18:21 -080050bool RobotController::IsSysActive() {
51 int32_t status = 0;
52 bool retVal = HAL_GetSystemActive(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -070053 FRC_CheckErrorStatus(status, "{}", "IsSysActive");
Brian Silverman8fce7482020-01-05 13:18:21 -080054 return retVal;
55}
56
57bool RobotController::IsBrownedOut() {
58 int32_t status = 0;
59 bool retVal = HAL_GetBrownedOut(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -070060 FRC_CheckErrorStatus(status, "{}", "IsBrownedOut");
Brian Silverman8fce7482020-01-05 13:18:21 -080061 return retVal;
62}
63
64double RobotController::GetInputVoltage() {
65 int32_t status = 0;
66 double retVal = HAL_GetVinVoltage(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -070067 FRC_CheckErrorStatus(status, "{}", "GetInputVoltage");
Brian Silverman8fce7482020-01-05 13:18:21 -080068 return retVal;
69}
70
71double RobotController::GetInputCurrent() {
72 int32_t status = 0;
73 double retVal = HAL_GetVinCurrent(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -070074 FRC_CheckErrorStatus(status, "{}", "GetInputCurrent");
Brian Silverman8fce7482020-01-05 13:18:21 -080075 return retVal;
76}
77
78double RobotController::GetVoltage3V3() {
79 int32_t status = 0;
80 double retVal = HAL_GetUserVoltage3V3(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -070081 FRC_CheckErrorStatus(status, "{}", "GetVoltage3V3");
Brian Silverman8fce7482020-01-05 13:18:21 -080082 return retVal;
83}
84
85double RobotController::GetCurrent3V3() {
86 int32_t status = 0;
87 double retVal = HAL_GetUserCurrent3V3(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -070088 FRC_CheckErrorStatus(status, "{}", "GetCurrent3V3");
Brian Silverman8fce7482020-01-05 13:18:21 -080089 return retVal;
90}
91
92bool RobotController::GetEnabled3V3() {
93 int32_t status = 0;
94 bool retVal = HAL_GetUserActive3V3(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -070095 FRC_CheckErrorStatus(status, "{}", "GetEnabled3V3");
Brian Silverman8fce7482020-01-05 13:18:21 -080096 return retVal;
97}
98
99int RobotController::GetFaultCount3V3() {
100 int32_t status = 0;
101 int retVal = HAL_GetUserCurrentFaults3V3(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -0700102 FRC_CheckErrorStatus(status, "{}", "GetFaultCount3V3");
Brian Silverman8fce7482020-01-05 13:18:21 -0800103 return retVal;
104}
105
106double RobotController::GetVoltage5V() {
107 int32_t status = 0;
108 double retVal = HAL_GetUserVoltage5V(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -0700109 FRC_CheckErrorStatus(status, "{}", "GetVoltage5V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800110 return retVal;
111}
112
113double RobotController::GetCurrent5V() {
114 int32_t status = 0;
115 double retVal = HAL_GetUserCurrent5V(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -0700116 FRC_CheckErrorStatus(status, "{}", "GetCurrent5V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800117 return retVal;
118}
119
120bool RobotController::GetEnabled5V() {
121 int32_t status = 0;
122 bool retVal = HAL_GetUserActive5V(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -0700123 FRC_CheckErrorStatus(status, "{}", "GetEnabled5V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800124 return retVal;
125}
126
127int RobotController::GetFaultCount5V() {
128 int32_t status = 0;
129 int retVal = HAL_GetUserCurrentFaults5V(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -0700130 FRC_CheckErrorStatus(status, "{}", "GetFaultCount5V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800131 return retVal;
132}
133
134double RobotController::GetVoltage6V() {
135 int32_t status = 0;
136 double retVal = HAL_GetUserVoltage6V(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -0700137 FRC_CheckErrorStatus(status, "{}", "GetVoltage6V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800138 return retVal;
139}
140
141double RobotController::GetCurrent6V() {
142 int32_t status = 0;
143 double retVal = HAL_GetUserCurrent6V(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -0700144 FRC_CheckErrorStatus(status, "{}", "GetCurrent6V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800145 return retVal;
146}
147
148bool RobotController::GetEnabled6V() {
149 int32_t status = 0;
150 bool retVal = HAL_GetUserActive6V(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -0700151 FRC_CheckErrorStatus(status, "{}", "GetEnabled6V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800152 return retVal;
153}
154
155int RobotController::GetFaultCount6V() {
156 int32_t status = 0;
157 int retVal = HAL_GetUserCurrentFaults6V(&status);
Austin Schuh812d0d12021-11-04 20:16:48 -0700158 FRC_CheckErrorStatus(status, "{}", "GetFaultCount6V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800159 return retVal;
160}
161
Austin Schuh812d0d12021-11-04 20:16:48 -0700162units::volt_t RobotController::GetBrownoutVoltage() {
163 int32_t status = 0;
164 double retVal = HAL_GetBrownoutVoltage(&status);
165 FRC_CheckErrorStatus(status, "{}", "GetBrownoutVoltage");
166 return units::volt_t(retVal);
167}
168
169void RobotController::SetBrownoutVoltage(units::volt_t brownoutVoltage) {
170 int32_t status = 0;
171 HAL_SetBrownoutVoltage(brownoutVoltage.value(), &status);
172 FRC_CheckErrorStatus(status, "{}", "SetBrownoutVoltage");
173}
174
Brian Silverman8fce7482020-01-05 13:18:21 -0800175CANStatus RobotController::GetCANStatus() {
176 int32_t status = 0;
177 float percentBusUtilization = 0;
178 uint32_t busOffCount = 0;
179 uint32_t txFullCount = 0;
180 uint32_t receiveErrorCount = 0;
181 uint32_t transmitErrorCount = 0;
182 HAL_CAN_GetCANStatus(&percentBusUtilization, &busOffCount, &txFullCount,
183 &receiveErrorCount, &transmitErrorCount, &status);
Austin Schuh812d0d12021-11-04 20:16:48 -0700184 FRC_CheckErrorStatus(status, "{}", "GetCANStatus");
Brian Silverman8fce7482020-01-05 13:18:21 -0800185 return {percentBusUtilization, static_cast<int>(busOffCount),
186 static_cast<int>(txFullCount), static_cast<int>(receiveErrorCount),
187 static_cast<int>(transmitErrorCount)};
188}