blob: b1d7608a623b00571f2fce71550e66fee3870377 [file] [log] [blame]
Brian Silverman41cdd3e2019-01-19 19:48:58 -08001/*----------------------------------------------------------------------------*/
James Kuszmaul4b81d302019-12-14 20:53:14 -08002/* Copyright (c) 2017-2019 FIRST. All Rights Reserved. */
Brian Silverman41cdd3e2019-01-19 19:48:58 -08003/* Open Source Software - may be modified and shared by FRC teams. The code */
4/* must be accompanied by the FIRST BSD license file in the root directory of */
5/* the project. */
6/*----------------------------------------------------------------------------*/
7
8#include "frc/RobotController.h"
9
James Kuszmaul4b81d302019-12-14 20:53:14 -080010#include <hal/CAN.h>
11#include <hal/FRCUsageReporting.h>
12#include <hal/HALBase.h>
13#include <hal/Power.h>
Brian Silverman41cdd3e2019-01-19 19:48:58 -080014
15#include "frc/ErrorBase.h"
16
17using namespace frc;
18
19int RobotController::GetFPGAVersion() {
20 int32_t status = 0;
21 int version = HAL_GetFPGAVersion(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -080022 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080023 return version;
24}
25
26int64_t RobotController::GetFPGARevision() {
27 int32_t status = 0;
28 int64_t revision = HAL_GetFPGARevision(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -080029 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080030 return revision;
31}
32
33uint64_t RobotController::GetFPGATime() {
34 int32_t status = 0;
35 uint64_t time = HAL_GetFPGATime(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -080036 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080037 return time;
38}
39
40bool RobotController::GetUserButton() {
41 int32_t status = 0;
42
43 bool value = HAL_GetFPGAButton(&status);
44 wpi_setGlobalError(status);
45
46 return value;
47}
48
49bool RobotController::IsSysActive() {
50 int32_t status = 0;
51 bool retVal = HAL_GetSystemActive(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -080052 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080053 return retVal;
54}
55
56bool RobotController::IsBrownedOut() {
57 int32_t status = 0;
58 bool retVal = HAL_GetBrownedOut(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -080059 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080060 return retVal;
61}
62
63double RobotController::GetInputVoltage() {
64 int32_t status = 0;
65 double retVal = HAL_GetVinVoltage(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -080066 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080067 return retVal;
68}
69
70double RobotController::GetInputCurrent() {
71 int32_t status = 0;
72 double retVal = HAL_GetVinCurrent(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -080073 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080074 return retVal;
75}
76
77double RobotController::GetVoltage3V3() {
78 int32_t status = 0;
79 double retVal = HAL_GetUserVoltage3V3(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -080080 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080081 return retVal;
82}
83
84double RobotController::GetCurrent3V3() {
85 int32_t status = 0;
86 double retVal = HAL_GetUserCurrent3V3(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -080087 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080088 return retVal;
89}
90
91bool RobotController::GetEnabled3V3() {
92 int32_t status = 0;
93 bool retVal = HAL_GetUserActive3V3(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -080094 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080095 return retVal;
96}
97
98int RobotController::GetFaultCount3V3() {
99 int32_t status = 0;
100 int retVal = HAL_GetUserCurrentFaults3V3(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -0800101 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800102 return retVal;
103}
104
105double RobotController::GetVoltage5V() {
106 int32_t status = 0;
107 double retVal = HAL_GetUserVoltage5V(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -0800108 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800109 return retVal;
110}
111
112double RobotController::GetCurrent5V() {
113 int32_t status = 0;
114 double retVal = HAL_GetUserCurrent5V(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -0800115 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800116 return retVal;
117}
118
119bool RobotController::GetEnabled5V() {
120 int32_t status = 0;
121 bool retVal = HAL_GetUserActive5V(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -0800122 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800123 return retVal;
124}
125
126int RobotController::GetFaultCount5V() {
127 int32_t status = 0;
128 int retVal = HAL_GetUserCurrentFaults5V(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -0800129 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800130 return retVal;
131}
132
133double RobotController::GetVoltage6V() {
134 int32_t status = 0;
135 double retVal = HAL_GetUserVoltage6V(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -0800136 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800137 return retVal;
138}
139
140double RobotController::GetCurrent6V() {
141 int32_t status = 0;
142 double retVal = HAL_GetUserCurrent6V(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -0800143 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800144 return retVal;
145}
146
147bool RobotController::GetEnabled6V() {
148 int32_t status = 0;
149 bool retVal = HAL_GetUserActive6V(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -0800150 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800151 return retVal;
152}
153
154int RobotController::GetFaultCount6V() {
155 int32_t status = 0;
156 int retVal = HAL_GetUserCurrentFaults6V(&status);
James Kuszmaul4b81d302019-12-14 20:53:14 -0800157 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800158 return retVal;
159}
160
161CANStatus RobotController::GetCANStatus() {
162 int32_t status = 0;
163 float percentBusUtilization = 0;
164 uint32_t busOffCount = 0;
165 uint32_t txFullCount = 0;
166 uint32_t receiveErrorCount = 0;
167 uint32_t transmitErrorCount = 0;
168 HAL_CAN_GetCANStatus(&percentBusUtilization, &busOffCount, &txFullCount,
169 &receiveErrorCount, &transmitErrorCount, &status);
170 if (status != 0) {
James Kuszmaul4b81d302019-12-14 20:53:14 -0800171 wpi_setGlobalHALError(status);
Brian Silverman41cdd3e2019-01-19 19:48:58 -0800172 return {};
173 }
174 return {percentBusUtilization, static_cast<int>(busOffCount),
175 static_cast<int>(txFullCount), static_cast<int>(receiveErrorCount),
176 static_cast<int>(transmitErrorCount)};
177}