blob: 347440d5ad76b2091e134a2a5e15f0d59cc5d0f9 [file] [log] [blame]
Brian Silverman41cdd3e2019-01-19 19:48:58 -08001/*----------------------------------------------------------------------------*/
2/* Copyright (c) 2017-2018 FIRST. All Rights Reserved. */
3/* 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
10#include <hal/HAL.h>
11
12#include "frc/ErrorBase.h"
13
14using namespace frc;
15
16int RobotController::GetFPGAVersion() {
17 int32_t status = 0;
18 int version = HAL_GetFPGAVersion(&status);
19 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
20 return version;
21}
22
23int64_t RobotController::GetFPGARevision() {
24 int32_t status = 0;
25 int64_t revision = HAL_GetFPGARevision(&status);
26 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
27 return revision;
28}
29
30uint64_t RobotController::GetFPGATime() {
31 int32_t status = 0;
32 uint64_t time = HAL_GetFPGATime(&status);
33 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
34 return time;
35}
36
37bool RobotController::GetUserButton() {
38 int32_t status = 0;
39
40 bool value = HAL_GetFPGAButton(&status);
41 wpi_setGlobalError(status);
42
43 return value;
44}
45
46bool RobotController::IsSysActive() {
47 int32_t status = 0;
48 bool retVal = HAL_GetSystemActive(&status);
49 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
50 return retVal;
51}
52
53bool RobotController::IsBrownedOut() {
54 int32_t status = 0;
55 bool retVal = HAL_GetBrownedOut(&status);
56 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
57 return retVal;
58}
59
60double RobotController::GetInputVoltage() {
61 int32_t status = 0;
62 double retVal = HAL_GetVinVoltage(&status);
63 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
64 return retVal;
65}
66
67double RobotController::GetInputCurrent() {
68 int32_t status = 0;
69 double retVal = HAL_GetVinCurrent(&status);
70 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
71 return retVal;
72}
73
74double RobotController::GetVoltage3V3() {
75 int32_t status = 0;
76 double retVal = HAL_GetUserVoltage3V3(&status);
77 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
78 return retVal;
79}
80
81double RobotController::GetCurrent3V3() {
82 int32_t status = 0;
83 double retVal = HAL_GetUserCurrent3V3(&status);
84 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
85 return retVal;
86}
87
88bool RobotController::GetEnabled3V3() {
89 int32_t status = 0;
90 bool retVal = HAL_GetUserActive3V3(&status);
91 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
92 return retVal;
93}
94
95int RobotController::GetFaultCount3V3() {
96 int32_t status = 0;
97 int retVal = HAL_GetUserCurrentFaults3V3(&status);
98 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
99 return retVal;
100}
101
102double RobotController::GetVoltage5V() {
103 int32_t status = 0;
104 double retVal = HAL_GetUserVoltage5V(&status);
105 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
106 return retVal;
107}
108
109double RobotController::GetCurrent5V() {
110 int32_t status = 0;
111 double retVal = HAL_GetUserCurrent5V(&status);
112 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
113 return retVal;
114}
115
116bool RobotController::GetEnabled5V() {
117 int32_t status = 0;
118 bool retVal = HAL_GetUserActive5V(&status);
119 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
120 return retVal;
121}
122
123int RobotController::GetFaultCount5V() {
124 int32_t status = 0;
125 int retVal = HAL_GetUserCurrentFaults5V(&status);
126 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
127 return retVal;
128}
129
130double RobotController::GetVoltage6V() {
131 int32_t status = 0;
132 double retVal = HAL_GetUserVoltage6V(&status);
133 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
134 return retVal;
135}
136
137double RobotController::GetCurrent6V() {
138 int32_t status = 0;
139 double retVal = HAL_GetUserCurrent6V(&status);
140 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
141 return retVal;
142}
143
144bool RobotController::GetEnabled6V() {
145 int32_t status = 0;
146 bool retVal = HAL_GetUserActive6V(&status);
147 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
148 return retVal;
149}
150
151int RobotController::GetFaultCount6V() {
152 int32_t status = 0;
153 int retVal = HAL_GetUserCurrentFaults6V(&status);
154 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
155 return retVal;
156}
157
158CANStatus RobotController::GetCANStatus() {
159 int32_t status = 0;
160 float percentBusUtilization = 0;
161 uint32_t busOffCount = 0;
162 uint32_t txFullCount = 0;
163 uint32_t receiveErrorCount = 0;
164 uint32_t transmitErrorCount = 0;
165 HAL_CAN_GetCANStatus(&percentBusUtilization, &busOffCount, &txFullCount,
166 &receiveErrorCount, &transmitErrorCount, &status);
167 if (status != 0) {
168 wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
169 return {};
170 }
171 return {percentBusUtilization, static_cast<int>(busOffCount),
172 static_cast<int>(txFullCount), static_cast<int>(receiveErrorCount),
173 static_cast<int>(transmitErrorCount)};
174}