blob: da6e36413121845b6f879c703c9d57dcaaa54cf1 [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
Brian Silverman8fce7482020-01-05 13:18:21 -080044uint64_t RobotController::GetFPGATime() {
45 int32_t status = 0;
46 uint64_t time = HAL_GetFPGATime(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080047 FRC_CheckErrorStatus(status, "GetFPGATime");
Brian Silverman8fce7482020-01-05 13:18:21 -080048 return time;
49}
50
51bool RobotController::GetUserButton() {
52 int32_t status = 0;
Brian Silverman8fce7482020-01-05 13:18:21 -080053 bool value = HAL_GetFPGAButton(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080054 FRC_CheckErrorStatus(status, "GetUserButton");
Brian Silverman8fce7482020-01-05 13:18:21 -080055 return value;
56}
57
Austin Schuh812d0d12021-11-04 20:16:48 -070058units::volt_t RobotController::GetBatteryVoltage() {
59 int32_t status = 0;
60 double retVal = HAL_GetVinVoltage(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080061 FRC_CheckErrorStatus(status, "GetBatteryVoltage");
Austin Schuh812d0d12021-11-04 20:16:48 -070062 return units::volt_t{retVal};
63}
64
Brian Silverman8fce7482020-01-05 13:18:21 -080065bool RobotController::IsSysActive() {
66 int32_t status = 0;
67 bool retVal = HAL_GetSystemActive(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080068 FRC_CheckErrorStatus(status, "IsSysActive");
Brian Silverman8fce7482020-01-05 13:18:21 -080069 return retVal;
70}
71
72bool RobotController::IsBrownedOut() {
73 int32_t status = 0;
74 bool retVal = HAL_GetBrownedOut(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080075 FRC_CheckErrorStatus(status, "IsBrownedOut");
Brian Silverman8fce7482020-01-05 13:18:21 -080076 return retVal;
77}
78
79double RobotController::GetInputVoltage() {
80 int32_t status = 0;
81 double retVal = HAL_GetVinVoltage(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080082 FRC_CheckErrorStatus(status, "GetInputVoltage");
Brian Silverman8fce7482020-01-05 13:18:21 -080083 return retVal;
84}
85
86double RobotController::GetInputCurrent() {
87 int32_t status = 0;
88 double retVal = HAL_GetVinCurrent(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080089 FRC_CheckErrorStatus(status, "GetInputCurrent");
Brian Silverman8fce7482020-01-05 13:18:21 -080090 return retVal;
91}
92
93double RobotController::GetVoltage3V3() {
94 int32_t status = 0;
95 double retVal = HAL_GetUserVoltage3V3(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -080096 FRC_CheckErrorStatus(status, "GetVoltage3V3");
Brian Silverman8fce7482020-01-05 13:18:21 -080097 return retVal;
98}
99
100double RobotController::GetCurrent3V3() {
101 int32_t status = 0;
102 double retVal = HAL_GetUserCurrent3V3(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800103 FRC_CheckErrorStatus(status, "GetCurrent3V3");
Brian Silverman8fce7482020-01-05 13:18:21 -0800104 return retVal;
105}
106
107bool RobotController::GetEnabled3V3() {
108 int32_t status = 0;
109 bool retVal = HAL_GetUserActive3V3(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800110 FRC_CheckErrorStatus(status, "GetEnabled3V3");
Brian Silverman8fce7482020-01-05 13:18:21 -0800111 return retVal;
112}
113
114int RobotController::GetFaultCount3V3() {
115 int32_t status = 0;
116 int retVal = HAL_GetUserCurrentFaults3V3(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800117 FRC_CheckErrorStatus(status, "GetFaultCount3V3");
Brian Silverman8fce7482020-01-05 13:18:21 -0800118 return retVal;
119}
120
121double RobotController::GetVoltage5V() {
122 int32_t status = 0;
123 double retVal = HAL_GetUserVoltage5V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800124 FRC_CheckErrorStatus(status, "GetVoltage5V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800125 return retVal;
126}
127
128double RobotController::GetCurrent5V() {
129 int32_t status = 0;
130 double retVal = HAL_GetUserCurrent5V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800131 FRC_CheckErrorStatus(status, "GetCurrent5V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800132 return retVal;
133}
134
135bool RobotController::GetEnabled5V() {
136 int32_t status = 0;
137 bool retVal = HAL_GetUserActive5V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800138 FRC_CheckErrorStatus(status, "GetEnabled5V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800139 return retVal;
140}
141
142int RobotController::GetFaultCount5V() {
143 int32_t status = 0;
144 int retVal = HAL_GetUserCurrentFaults5V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800145 FRC_CheckErrorStatus(status, "GetFaultCount5V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800146 return retVal;
147}
148
149double RobotController::GetVoltage6V() {
150 int32_t status = 0;
151 double retVal = HAL_GetUserVoltage6V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800152 FRC_CheckErrorStatus(status, "GetVoltage6V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800153 return retVal;
154}
155
156double RobotController::GetCurrent6V() {
157 int32_t status = 0;
158 double retVal = HAL_GetUserCurrent6V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800159 FRC_CheckErrorStatus(status, "GetCurrent6V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800160 return retVal;
161}
162
163bool RobotController::GetEnabled6V() {
164 int32_t status = 0;
165 bool retVal = HAL_GetUserActive6V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800166 FRC_CheckErrorStatus(status, "GetEnabled6V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800167 return retVal;
168}
169
170int RobotController::GetFaultCount6V() {
171 int32_t status = 0;
172 int retVal = HAL_GetUserCurrentFaults6V(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800173 FRC_CheckErrorStatus(status, "GetFaultCount6V");
Brian Silverman8fce7482020-01-05 13:18:21 -0800174 return retVal;
175}
176
Austin Schuh812d0d12021-11-04 20:16:48 -0700177units::volt_t RobotController::GetBrownoutVoltage() {
178 int32_t status = 0;
179 double retVal = HAL_GetBrownoutVoltage(&status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800180 FRC_CheckErrorStatus(status, "GetBrownoutVoltage");
181 return units::volt_t{retVal};
Austin Schuh812d0d12021-11-04 20:16:48 -0700182}
183
184void RobotController::SetBrownoutVoltage(units::volt_t brownoutVoltage) {
185 int32_t status = 0;
186 HAL_SetBrownoutVoltage(brownoutVoltage.value(), &status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800187 FRC_CheckErrorStatus(status, "SetBrownoutVoltage");
Austin Schuh812d0d12021-11-04 20:16:48 -0700188}
189
Brian Silverman8fce7482020-01-05 13:18:21 -0800190CANStatus RobotController::GetCANStatus() {
191 int32_t status = 0;
192 float percentBusUtilization = 0;
193 uint32_t busOffCount = 0;
194 uint32_t txFullCount = 0;
195 uint32_t receiveErrorCount = 0;
196 uint32_t transmitErrorCount = 0;
197 HAL_CAN_GetCANStatus(&percentBusUtilization, &busOffCount, &txFullCount,
198 &receiveErrorCount, &transmitErrorCount, &status);
James Kuszmaulcf324122023-01-14 14:07:17 -0800199 FRC_CheckErrorStatus(status, "GetCANStatus");
Brian Silverman8fce7482020-01-05 13:18:21 -0800200 return {percentBusUtilization, static_cast<int>(busOffCount),
201 static_cast<int>(txFullCount), static_cast<int>(receiveErrorCount),
202 static_cast<int>(transmitErrorCount)};
203}