blob: 8b2b4964a8daee4a68fe5853a21e1e53b60f0acb [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
James Kuszmaulcf324122023-01-14 14:07:17 -08007#include <cstddef>
8
Brian Silverman8fce7482020-01-05 13:18:21 -08009#include <hal/CAN.h>
Brian Silverman8fce7482020-01-05 13:18:21 -080010#include <hal/HALBase.h>
11#include <hal/Power.h>
12
Austin Schuh812d0d12021-11-04 20:16:48 -070013#include "frc/Errors.h"
Brian Silverman8fce7482020-01-05 13:18:21 -080014
15using namespace frc;
16
17int RobotController::GetFPGAVersion() {
18 int32_t status = 0;
19 int version = HAL_GetFPGAVersion(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080020 FRC_CheckErrorStatus(status, "GetFPGAVersion");
Brian Silverman8fce7482020-01-05 13:18:21 -080021 return version;
22}
23
24int64_t RobotController::GetFPGARevision() {
25 int32_t status = 0;
26 int64_t revision = HAL_GetFPGARevision(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080027 FRC_CheckErrorStatus(status, "GetFPGARevision");
Brian Silverman8fce7482020-01-05 13:18:21 -080028 return revision;
29}
30
James Kuszmaulcf324122023-01-14 14:07:17 -080031std::string RobotController::GetSerialNumber() {
32 // Serial number is 8 characters
33 char serialNum[9];
34 size_t len = HAL_GetSerialNumber(serialNum, sizeof(serialNum));
35 return std::string(serialNum, len);
36}
37
38std::string RobotController::GetComments() {
39 char comments[65];
40 size_t len = HAL_GetComments(comments, sizeof(comments));
41 return std::string(comments, len);
42}
43
James Kuszmaulb13e13f2023-11-22 20:44:04 -080044int32_t RobotController::GetTeamNumber() {
45 return HAL_GetTeamNumber();
46}
47
Brian Silverman8fce7482020-01-05 13:18:21 -080048uint64_t RobotController::GetFPGATime() {
49 int32_t status = 0;
50 uint64_t time = HAL_GetFPGATime(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080051 FRC_CheckErrorStatus(status, "GetFPGATime");
Brian Silverman8fce7482020-01-05 13:18:21 -080052 return time;
53}
54
55bool RobotController::GetUserButton() {
56 int32_t status = 0;
Brian Silverman8fce7482020-01-05 13:18:21 -080057 bool value = HAL_GetFPGAButton(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080058 FRC_CheckErrorStatus(status, "GetUserButton");
Brian Silverman8fce7482020-01-05 13:18:21 -080059 return value;
60}
61
Austin Schuh812d0d12021-11-04 20:16:48 -070062units::volt_t RobotController::GetBatteryVoltage() {
63 int32_t status = 0;
64 double retVal = HAL_GetVinVoltage(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080065 FRC_CheckErrorStatus(status, "GetBatteryVoltage");
Austin Schuh812d0d12021-11-04 20:16:48 -070066 return units::volt_t{retVal};
67}
68
Brian Silverman8fce7482020-01-05 13:18:21 -080069bool RobotController::IsSysActive() {
70 int32_t status = 0;
71 bool retVal = HAL_GetSystemActive(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080072 FRC_CheckErrorStatus(status, "IsSysActive");
Brian Silverman8fce7482020-01-05 13:18:21 -080073 return retVal;
74}
75
76bool RobotController::IsBrownedOut() {
77 int32_t status = 0;
78 bool retVal = HAL_GetBrownedOut(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080079 FRC_CheckErrorStatus(status, "IsBrownedOut");
Brian Silverman8fce7482020-01-05 13:18:21 -080080 return retVal;
81}
82
James Kuszmaulb13e13f2023-11-22 20:44:04 -080083bool RobotController::GetRSLState() {
84 int32_t status = 0;
85 bool retVal = HAL_GetRSLState(&status);
86 FRC_CheckErrorStatus(status, "GetRSLState");
87 return retVal;
88}
89
90bool RobotController::IsSystemTimeValid() {
91 int32_t status = 0;
92 bool retVal = HAL_GetSystemTimeValid(&status);
93 FRC_CheckErrorStatus(status, "IsSystemTimeValid");
94 return retVal;
95}
96
Brian Silverman8fce7482020-01-05 13:18:21 -080097double RobotController::GetInputVoltage() {
98 int32_t status = 0;
99 double retVal = HAL_GetVinVoltage(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800100 FRC_CheckErrorStatus(status, "GetInputVoltage");
Brian Silverman8fce7482020-01-05 13:18:21 -0800101 return retVal;
102}
103
104double RobotController::GetInputCurrent() {
105 int32_t status = 0;
106 double retVal = HAL_GetVinCurrent(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800107 FRC_CheckErrorStatus(status, "GetInputCurrent");
Brian Silverman8fce7482020-01-05 13:18:21 -0800108 return retVal;
109}
110
111double RobotController::GetVoltage3V3() {
112 int32_t status = 0;
113 double retVal = HAL_GetUserVoltage3V3(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800114 FRC_CheckErrorStatus(status, "GetVoltage3V3");
Brian Silverman8fce7482020-01-05 13:18:21 -0800115 return retVal;
116}
117
118double RobotController::GetCurrent3V3() {
119 int32_t status = 0;
120 double retVal = HAL_GetUserCurrent3V3(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800121 FRC_CheckErrorStatus(status, "GetCurrent3V3");
Brian Silverman8fce7482020-01-05 13:18:21 -0800122 return retVal;
123}
124
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800125void RobotController::SetEnabled3V3(bool enabled) {
126 int32_t status = 0;
127 HAL_SetUserRailEnabled3V3(enabled, &status);
128 FRC_CheckErrorStatus(status, "SetEnabled3V3");
129}
130
Brian Silverman8fce7482020-01-05 13:18:21 -0800131bool RobotController::GetEnabled3V3() {
132 int32_t status = 0;
133 bool retVal = HAL_GetUserActive3V3(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800134 FRC_CheckErrorStatus(status, "GetEnabled3V3");
Brian Silverman8fce7482020-01-05 13:18:21 -0800135 return retVal;
136}
137
138int RobotController::GetFaultCount3V3() {
139 int32_t status = 0;
140 int retVal = HAL_GetUserCurrentFaults3V3(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800141 FRC_CheckErrorStatus(status, "GetFaultCount3V3");
Brian Silverman8fce7482020-01-05 13:18:21 -0800142 return retVal;
143}
144
145double RobotController::GetVoltage5V() {
146 int32_t status = 0;
147 double retVal = HAL_GetUserVoltage5V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800148 FRC_CheckErrorStatus(status, "GetVoltage5V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800149 return retVal;
150}
151
152double RobotController::GetCurrent5V() {
153 int32_t status = 0;
154 double retVal = HAL_GetUserCurrent5V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800155 FRC_CheckErrorStatus(status, "GetCurrent5V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800156 return retVal;
157}
158
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800159void RobotController::SetEnabled5V(bool enabled) {
160 int32_t status = 0;
161 HAL_SetUserRailEnabled5V(enabled, &status);
162 FRC_CheckErrorStatus(status, "SetEnabled5V");
163}
164
Brian Silverman8fce7482020-01-05 13:18:21 -0800165bool RobotController::GetEnabled5V() {
166 int32_t status = 0;
167 bool retVal = HAL_GetUserActive5V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800168 FRC_CheckErrorStatus(status, "GetEnabled5V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800169 return retVal;
170}
171
172int RobotController::GetFaultCount5V() {
173 int32_t status = 0;
174 int retVal = HAL_GetUserCurrentFaults5V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800175 FRC_CheckErrorStatus(status, "GetFaultCount5V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800176 return retVal;
177}
178
179double RobotController::GetVoltage6V() {
180 int32_t status = 0;
181 double retVal = HAL_GetUserVoltage6V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800182 FRC_CheckErrorStatus(status, "GetVoltage6V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800183 return retVal;
184}
185
186double RobotController::GetCurrent6V() {
187 int32_t status = 0;
188 double retVal = HAL_GetUserCurrent6V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800189 FRC_CheckErrorStatus(status, "GetCurrent6V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800190 return retVal;
191}
192
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800193void RobotController::SetEnabled6V(bool enabled) {
194 int32_t status = 0;
195 HAL_SetUserRailEnabled6V(enabled, &status);
196 FRC_CheckErrorStatus(status, "SetEnabled6V");
197}
198
Brian Silverman8fce7482020-01-05 13:18:21 -0800199bool RobotController::GetEnabled6V() {
200 int32_t status = 0;
201 bool retVal = HAL_GetUserActive6V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800202 FRC_CheckErrorStatus(status, "GetEnabled6V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800203 return retVal;
204}
205
206int RobotController::GetFaultCount6V() {
207 int32_t status = 0;
208 int retVal = HAL_GetUserCurrentFaults6V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800209 FRC_CheckErrorStatus(status, "GetFaultCount6V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800210 return retVal;
211}
212
Austin Schuh812d0d12021-11-04 20:16:48 -0700213units::volt_t RobotController::GetBrownoutVoltage() {
214 int32_t status = 0;
215 double retVal = HAL_GetBrownoutVoltage(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800216 FRC_CheckErrorStatus(status, "GetBrownoutVoltage");
217 return units::volt_t{retVal};
Austin Schuh812d0d12021-11-04 20:16:48 -0700218}
219
220void RobotController::SetBrownoutVoltage(units::volt_t brownoutVoltage) {
221 int32_t status = 0;
222 HAL_SetBrownoutVoltage(brownoutVoltage.value(), &status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800223 FRC_CheckErrorStatus(status, "SetBrownoutVoltage");
Austin Schuh812d0d12021-11-04 20:16:48 -0700224}
225
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800226units::celsius_t RobotController::GetCPUTemp() {
227 int32_t status = 0;
228 double retVal = HAL_GetCPUTemp(&status);
229 FRC_CheckErrorStatus(status, "GetCPUTemp");
230 return units::celsius_t{retVal};
231}
232
Brian Silverman8fce7482020-01-05 13:18:21 -0800233CANStatus RobotController::GetCANStatus() {
234 int32_t status = 0;
235 float percentBusUtilization = 0;
236 uint32_t busOffCount = 0;
237 uint32_t txFullCount = 0;
238 uint32_t receiveErrorCount = 0;
239 uint32_t transmitErrorCount = 0;
240 HAL_CAN_GetCANStatus(&percentBusUtilization, &busOffCount, &txFullCount,
241 &receiveErrorCount, &transmitErrorCount, &status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800242 FRC_CheckErrorStatus(status, "GetCANStatus");
Brian Silverman8fce7482020-01-05 13:18:21 -0800243 return {percentBusUtilization, static_cast<int>(busOffCount),
244 static_cast<int>(txFullCount), static_cast<int>(receiveErrorCount),
245 static_cast<int>(transmitErrorCount)};
246}