CTRE Phoenix 6 C++ 25.4.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SpnValue.hpp
Go to the documentation of this file.
1/*
2 * Copyright (C) Cross The Road Electronics.  All rights reserved.
3 * License information can be found in CTRE_LICENSE.txt
4 * For support and suggestions contact support@ctr-electronics.com or file
5 * an issue tracker at https://github.com/CrossTheRoadElec/Phoenix-Releases
6 */
7#pragma once
8
9#include <ostream>
10#include <string>
11
12namespace ctre
13{
14 namespace phoenix6
15 {
16 namespace spns
17 {
18 /**
19 * \private
20 *
21 * \brief Class that holds all the SPN values used in Phoenix Pro devices.
22 */
23 class SpnValue
24 {
25 public:
26 int value;
27
28 static constexpr int TalonFX_System_State = 614;
29 static constexpr int Startup_ResetFlags = 635;
30 static constexpr int Version_Major = 733;
31 static constexpr int Version_Minor = 734;
32 static constexpr int Version_Bugfix = 735;
33 static constexpr int Version_Build = 736;
34 static constexpr int Version_Full = 737;
35 static constexpr int Licensing_IsProLicensed = 750;
36 static constexpr int Licensing_IsSeasonPassed = 753;
37 static constexpr int CustomParam0 = 822;
38 static constexpr int CustomParam1 = 823;
39 static constexpr int CANcoder_SensorDirection = 827;
40 static constexpr int FrcLock = 829;
41 static constexpr int RobotEnabled = 830;
42 static constexpr int LED1_OnColor = 832;
43 static constexpr int LED1_OffColor = 833;
44 static constexpr int LED2_OnColor = 834;
45 static constexpr int LED2_OffColor = 835;
46 static constexpr int AllFaults = 841;
47 static constexpr int AllStickyFaults = 842;
48 static constexpr int Pigeon2UseCompass = 916;
49 static constexpr int Pigeon2DisableTemperatureCompensation = 951;
50 static constexpr int Pigeon2DisableNoMotionCalibration = 953;
51 static constexpr int Pigeon2MountPoseYaw = 958;
52 static constexpr int Pigeon2MountPosePitch = 959;
53 static constexpr int Pigeon2MountPoseRoll = 960;
54 static constexpr int Pigeon2GyroScalarX = 964;
55 static constexpr int Pigeon2GyroScalarY = 965;
56 static constexpr int Pigeon2GyroScalarZ = 966;
57 static constexpr int Pigeon2Yaw = 973;
58 static constexpr int Pigeon2Pitch = 974;
59 static constexpr int Pigeon2Roll = 975;
60 static constexpr int Pigeon2QuatW = 976;
61 static constexpr int Pigeon2QuatX = 977;
62 static constexpr int Pigeon2QuatY = 978;
63 static constexpr int Pigeon2QuatZ = 979;
64 static constexpr int Pigeon2GravityVectorX = 980;
65 static constexpr int Pigeon2GravityVectorY = 981;
66 static constexpr int Pigeon2GravityVectorZ = 982;
67 static constexpr int Pigeon2Temperature = 983;
68 static constexpr int Pigeon2NoMotionCalEnabled = 984;
69 static constexpr int Pigeon2NoMotionCount = 985;
70 static constexpr int Pigeon2TempCompDisabled = 986;
71 static constexpr int Pigeon2UpTime = 987;
72 static constexpr int Pigeon2AccumGyroX = 988;
73 static constexpr int Pigeon2AccumGyroY = 989;
74 static constexpr int Pigeon2AccumGyroZ = 990;
75 static constexpr int Pigeon2AngularVelocityXWorld = 991;
76 static constexpr int Pigeon2AngularVelocityYWorld = 992;
77 static constexpr int Pigeon2AngularVelocityZWorld = 993;
78 static constexpr int Pigeon2AccelerationX = 994;
79 static constexpr int Pigeon2AccelerationY = 995;
80 static constexpr int Pigeon2AccelerationZ = 996;
81 static constexpr int Pigeon2_SupplyVoltage = 997;
82 static constexpr int Pigeon2AngularVelocityX = 1000;
83 static constexpr int Pigeon2AngularVelocityY = 1001;
84 static constexpr int Pigeon2AngularVelocityZ = 1002;
85 static constexpr int Pigeon2MagneticFieldX = 1005;
86 static constexpr int Pigeon2MagneticFieldY = 1006;
87 static constexpr int Pigeon2MagneticFieldZ = 1007;
88 static constexpr int Pigeon2RawMagneticFieldX = 1008;
89 static constexpr int Pigeon2RawMagneticFieldY = 1009;
90 static constexpr int Pigeon2RawMagneticFieldZ = 1010;
91 static constexpr int CANCoder_MagnetOffset = 1011;
92 static constexpr int TalonFX_SetSensorPosition = 1016;
93 static constexpr int CANcoder_SetSensorPosition = 1018;
94 static constexpr int Pigeon2_SetYaw = 1020;
95 static constexpr int DeviceEnabled = 1049;
96 static constexpr int PRO_MotorOutput_MotorVoltage = 2028;
97 static constexpr int ForwardLimit = 2029;
98 static constexpr int ReverseLimit = 2030;
99 static constexpr int PRO_MotorOutput_RotorPolarity = 2031;
100 static constexpr int PRO_MotorOutput_DutyCycle = 2032;
101 static constexpr int PRO_MotorOutput_TorqueCurrent = 2034;
102 static constexpr int PRO_SupplyAndTemp_StatorCurrent = 2035;
103 static constexpr int PRO_SupplyAndTemp_SupplyCurrent = 2036;
104 static constexpr int PRO_SupplyAndTemp_SupplyVoltage = 2037;
105 static constexpr int PRO_SupplyAndTemp_DeviceTemp = 2038;
106 static constexpr int PRO_SupplyAndTemp_ProcessorTemp = 2039;
107 static constexpr int PRO_RotorPosAndVel_Velocity = 2041;
108 static constexpr int PRO_RotorPosAndVel_Position = 2042;
109 static constexpr int PRO_PosAndVel_Velocity = 2045;
110 static constexpr int PRO_PosAndVel_Position = 2046;
111 static constexpr int PRO_PosAndVel_Acceleration = 2047;
112 static constexpr int PRO_PIDStateEnables_IntegratedAccum_DC = 2049;
113 static constexpr int PRO_PIDStateEnables_IntegratedAccum_V = 2050;
114 static constexpr int PRO_PIDStateEnables_IntegratedAccum_A = 2051;
115 static constexpr int PRO_PIDStateEnables_FeedForward_DC = 2052;
116 static constexpr int PRO_PIDStateEnables_FeedForward_V = 2053;
117 static constexpr int PRO_PIDStateEnables_FeedForward_A = 2054;
118 static constexpr int TalonFX_ControlMode = 2055;
119 static constexpr int ExternalMotorTempStatus = 2056;
120 static constexpr int ExternalMotorTemp = 2057;
121 static constexpr int PRO_PIDStateEnables_IsMotionMagicRunning = 2061;
122 static constexpr int PRO_PIDStateEnables_RobotEnable = 2062;
123 static constexpr int PRO_PIDStateEnables_DeviceEnable = 2063;
124 static constexpr int PRO_PIDRefPIDErr_PIDRef_Position = 2065;
125 static constexpr int PRO_PIDRefPIDErr_PIDRef_Velocity = 2066;
126 static constexpr int PRO_PIDRefPIDErr_PIDErr_Position = 2067;
127 static constexpr int PRO_PIDRefPIDErr_PIDErr_Velocity = 2068;
128 static constexpr int PRO_PIDRefPIDErr_ClosedLoopMode = 2069;
129 static constexpr int PRO_PIDOutput_PIDOutputMode = 2071;
130 static constexpr int PRO_PIDOutput_ProportionalOutput_DC = 2072;
131 static constexpr int PRO_PIDOutput_ProportionalOutput_V = 2073;
132 static constexpr int PRO_PIDOutput_ProportionalOutput_A = 2074;
133 static constexpr int PRO_PIDOutput_DerivativeOutput_DC = 2075;
134 static constexpr int PRO_PIDOutput_DerivativeOutput_V = 2076;
135 static constexpr int PRO_PIDOutput_DerivativeOutput_A = 2077;
136 static constexpr int PRO_PIDOutput_Output_DC = 2078;
137 static constexpr int PRO_PIDOutput_Output_V = 2079;
138 static constexpr int PRO_PIDOutput_Output_A = 2080;
139 static constexpr int PRO_PIDOutput_Slot = 2081;
140 static constexpr int PRO_PIDRefSlopeECUTime_ReferenceSlope_Position = 2082;
141 static constexpr int PRO_PIDRefSlopeECUTime_ReferenceSlope_Velocity = 2083;
142 static constexpr int PRO_PIDRefSlopeECUTime_ClosedLoopMode = 2084;
143 static constexpr int TalonFX_MotorOutputStatus = 2085;
144 static constexpr int PRO_MotorOutput_PIDState_Diff_DutyCycle = 2088;
145 static constexpr int PRO_MotorOutput_PIDState_Diff_TorqueCurrent = 2089;
146 static constexpr int TalonFX_DifferentialControlMode = 2092;
147 static constexpr int PRO_MotorOutput_PIDState_Diff_IntegratedAccum_DC = 2093;
148 static constexpr int PRO_MotorOutput_PIDState_Diff_IntegratedAccum_V = 2094;
149 static constexpr int PRO_MotorOutput_PIDState_Diff_IntegratedAccum_A = 2095;
150 static constexpr int PRO_MotorOutput_PIDState_Diff_FeedForward_DC = 2096;
151 static constexpr int PRO_MotorOutput_PIDState_Diff_FeedForward_V = 2097;
152 static constexpr int PRO_MotorOutput_PIDState_Diff_FeedForward_A = 2098;
153 static constexpr int PRO_AvgPosAndVel_Velocity = 2100;
154 static constexpr int PRO_AvgPosAndVel_Position = 2101;
155 static constexpr int PRO_DiffPosAndVel_Velocity = 2104;
156 static constexpr int PRO_DiffPosAndVel_Position = 2105;
157 static constexpr int PRO_DiffPIDRefPIDErr_PIDRef_Position = 2107;
158 static constexpr int PRO_DiffPIDRefPIDErr_PIDRef_Velocity = 2108;
159 static constexpr int PRO_DiffPIDRefPIDErr_PIDErr_Position = 2109;
160 static constexpr int PRO_DiffPIDRefPIDErr_PIDErr_Velocity = 2110;
161 static constexpr int PRO_DiffPIDRefPIDErr_ClosedLoopMode = 2111;
162 static constexpr int PRO_DiffPIDOutput_PIDOutputMode = 2113;
163 static constexpr int PRO_DiffPIDOutput_ProportionalOutput_DC = 2114;
164 static constexpr int PRO_DiffPIDOutput_ProportionalOutput_V = 2115;
165 static constexpr int PRO_DiffPIDOutput_ProportionalOutput_A = 2116;
166 static constexpr int PRO_DiffPIDOutput_DerivativeOutput_DC = 2117;
167 static constexpr int PRO_DiffPIDOutput_DerivativeOutput_V = 2118;
168 static constexpr int PRO_DiffPIDOutput_DerivativeOutput_A = 2119;
169 static constexpr int PRO_DiffPIDOutput_Output_DC = 2120;
170 static constexpr int PRO_DiffPIDOutput_Output_V = 2121;
171 static constexpr int PRO_DiffPIDOutput_Output_A = 2122;
172 static constexpr int PRO_DiffPIDOutput_Slot = 2123;
173 static constexpr int PRO_DiffPIDRefSlopeECUTime_ReferenceSlope_Position = 2124;
174 static constexpr int PRO_DiffPIDRefSlopeECUTime_ReferenceSlope_Velocity = 2125;
175 static constexpr int PRO_DiffPIDRefSlopeECUTime_ClosedLoopMode = 2126;
176 static constexpr int TalonFX_MotorConstants_kT = 2128;
177 static constexpr int TalonFX_MotorConstants_kV = 2129;
178 static constexpr int TalonFX_MotorConstants_StallCurrent = 2130;
179 static constexpr int Slot0_kP = 2131;
180 static constexpr int Slot0_kI = 2132;
181 static constexpr int Slot0_kD = 2133;
182 static constexpr int Slot0_kS = 2134;
183 static constexpr int Slot0_kV = 2135;
184 static constexpr int Slot0_kA = 2136;
185 static constexpr int Slot0_kG = 2137;
186 static constexpr int Slot0_kG_Type = 2138;
187 static constexpr int Slot1_kP = 2139;
188 static constexpr int Slot1_kI = 2140;
189 static constexpr int Slot1_kD = 2141;
190 static constexpr int Slot1_kS = 2142;
191 static constexpr int Slot1_kV = 2143;
192 static constexpr int Slot1_kA = 2144;
193 static constexpr int Slot1_kG = 2145;
194 static constexpr int Slot1_kG_Type = 2146;
195 static constexpr int Slot2_kP = 2147;
196 static constexpr int Slot2_kI = 2148;
197 static constexpr int Slot2_kD = 2149;
198 static constexpr int Slot2_kS = 2150;
199 static constexpr int Slot2_kV = 2151;
200 static constexpr int Slot2_kA = 2152;
201 static constexpr int Slot2_kG = 2153;
202 static constexpr int Slot2_kG_Type = 2154;
203 static constexpr int Config_Inverted = 2155;
204 static constexpr int Config_SupplyVLowpassTau = 2156;
205 static constexpr int Config_BeepOnBoot = 2157;
206 static constexpr int Config_NeutralMode = 2158;
207 static constexpr int Config_DutyCycleNeutralDB = 2159;
208 static constexpr int Config_StatorCurrentLimit = 2160;
209 static constexpr int Config_StatorCurrLimitEn = 2161;
210 static constexpr int Config_SupplyCurrentLimit = 2162;
211 static constexpr int Config_SupplyCurrLimitEn = 2163;
212 static constexpr int Config_PeakForwardDC = 2164;
213 static constexpr int Config_PeakReverseDC = 2165;
214 static constexpr int Config_PeakForwardV = 2166;
215 static constexpr int Config_PeakReverseV = 2167;
216 static constexpr int Config_PeakForTorqCurr = 2168;
217 static constexpr int Config_PeakRevTorqCurr = 2169;
218 static constexpr int Config_TorqueNeutralDB = 2170;
219 static constexpr int Config_FeedbackRotorOffset = 2171;
220 static constexpr int Config_SensorToMechanismRatio = 2172;
221 static constexpr int Config_RotorToSensorRatio = 2173;
222 static constexpr int Config_FeedbackSensorSource = 2174;
223 static constexpr int Config_FeedbackRemoteSensorID = 2175;
224 static constexpr int Config_DutyCycleOpenLoopRampPeriod = 2176;
225 static constexpr int Config_VoltageOpenLoopRampPeriod = 2177;
226 static constexpr int Config_TorqueOpenLoopRampPeriod = 2178;
227 static constexpr int Config_DutyCycleClosedLoopRampPeriod = 2179;
228 static constexpr int Config_VoltageClosedLoopRampPeriod = 2180;
229 static constexpr int Config_TorqueClosedLoopRampPeriod = 2181;
230 static constexpr int Config_ForwardLimitType = 2182;
231 static constexpr int Config_ForwardLimitAutosetPosEnable = 2183;
232 static constexpr int Config_ForwardLimitAutosetPosValue = 2184;
233 static constexpr int Config_ForwardLimitEnable = 2185;
234 static constexpr int Config_ForwardLimitSource = 2186;
235 static constexpr int Config_ForwardLimitRemoteSensorID = 2187;
236 static constexpr int Config_ReverseLimitType = 2188;
237 static constexpr int Config_ReverseLimitAutosetPosEnable = 2189;
238 static constexpr int Config_ReverseLimitAutosetPosValue = 2190;
239 static constexpr int Config_ReverseLimitEnable = 2191;
240 static constexpr int Config_ReverseLimitSource = 2192;
241 static constexpr int Config_ReverseLimitRemoteSensorID = 2193;
242 static constexpr int Config_ForwardSoftLimitEnable = 2194;
243 static constexpr int Config_ReverseSoftLimitEnable = 2195;
244 static constexpr int Config_ForwardSoftLimitThreshold = 2196;
245 static constexpr int Config_ReverseSoftLimitThreshold = 2197;
246 static constexpr int Config_MotionMagicCruiseVelocity = 2198;
247 static constexpr int Config_MotionMagicAcceleration = 2199;
248 static constexpr int Config_MotionMagicJerk = 2200;
249 static constexpr int Config_MotionMagicExpo_kV = 2201;
250 static constexpr int Config_MotionMagicExpo_kA = 2202;
251 static constexpr int Config_PeakDiffDC = 2203;
252 static constexpr int Config_PeakDiffV = 2204;
253 static constexpr int Config_PeakDiffTorqCurr = 2205;
254 static constexpr int CANcoder_Velocity = 2206;
255 static constexpr int CANcoder_Position = 2207;
256 static constexpr int CANcoder_AbsPosition = 2208;
257 static constexpr int CANCoder_RawVel = 2210;
258 static constexpr int CANCoder_RawPos = 2211;
259 static constexpr int CANCoder_SupplyVoltage = 2212;
260 static constexpr int CANcoder_MagHealth = 2213;
261 static constexpr int SPN_ClearStickyFaults = 2216;
262 static constexpr int PRO_MotorOutput_BridgeType_Public = 2217;
263 static constexpr int Config_ContinuousWrap = 2239;
264 static constexpr int Config_SupplyCurrentLowerLimit = 2245;
265 static constexpr int Config_SupplyCurrentLowerTime = 2246;
266 static constexpr int Config_DifferentialSensorSource = 2260;
267 static constexpr int Config_DifferentialTalonFXSensorID = 2261;
268 static constexpr int Config_DifferentialRemoteSensorID = 2262;
269 static constexpr int Config_BeepOnConfig = 2301;
270 static constexpr int Config_AllowMusicDurDisable = 2302;
271 static constexpr int Compliancy_Version = 2303;
272 static constexpr int Version_IsProLicensed = 2304;
273 static constexpr int PRO_SupplyAndTemp_DeviceTemp2 = 2343;
274 static constexpr int Slot0_kS_Sign = 2366;
275 static constexpr int Slot1_kS_Sign = 2367;
276 static constexpr int Slot2_kS_Sign = 2368;
277 static constexpr int TalonFX_ConnectedMotor = 2369;
278 static constexpr int CANrange_SupplyVoltage = 2391;
279 static constexpr int CANrange_Distance_Meters = 2392;
280 static constexpr int CANrange_MeasTime = 2394;
281 static constexpr int CANrange_SignalStrength = 2395;
282 static constexpr int CANrange_ProximityDetected = 2396;
283 static constexpr int CANrange_MeasState = 2397;
284 static constexpr int CANrange_AmbientSignal = 2398;
285 static constexpr int CANrange_DistanceStdDev = 2399;
286 static constexpr int CANrange_RealFOVCenterX = 2402;
287 static constexpr int CANrange_RealFOVCenterY = 2403;
288 static constexpr int CANrange_RealFOVRangeX = 2404;
289 static constexpr int CANrange_RealFOVRangeY = 2405;
290 static constexpr int CANrange_UpdateMode = 2409;
291 static constexpr int CANrange_UpdateFreq = 2410;
292 static constexpr int CANrange_ProximityThreshold = 2412;
293 static constexpr int CANrange_ProximityHysteresis = 2413;
294 static constexpr int CANrange_MinSigStrengthForValidMeas = 2414;
295 static constexpr int CANrange_FOVCenterX = 2415;
296 static constexpr int CANrange_FOVCenterY = 2416;
297 static constexpr int CANrange_FOVRangeX = 2417;
298 static constexpr int CANrange_FOVRangeY = 2418;
299 static constexpr int Config_ControlTimesyncFreq = 2419;
300 static constexpr int Config_VelocityFilterTimeConstant = 2420;
301 static constexpr int Config_AdvancedHallSupport = 2617;
302 static constexpr int Config_MotorType = 2618;
303 static constexpr int CANdi_Pin1State = 2677;
304 static constexpr int CANdi_Pin2State = 2678;
305 static constexpr int CANdi_QuadPosition = 2679;
306 static constexpr int CANdi_Pwm1_RiseToRise = 2685;
307 static constexpr int CANdi_Pwm1_Position = 2686;
308 static constexpr int CANdi_Pwm1_Velocity = 2688;
309 static constexpr int CANdi_Pwm2_RiseToRise = 2689;
310 static constexpr int CANdi_Pwm2_Position = 2690;
311 static constexpr int CANdi_Overcurrent = 2692;
312 static constexpr int CANdi_VSense = 2693;
313 static constexpr int CANdi_OutputCurrent = 2694;
314 static constexpr int CANdi_S1FloatState = 2695;
315 static constexpr int CANdi_S2FloatState = 2696;
316 static constexpr int Config_AbsoluteSensorOffset = 2705;
317 static constexpr int Config_ExternalFeedbackSensorSource = 2706;
318 static constexpr int Config_SensorPhase = 2707;
319 static constexpr int Config_QuadratureEdgesPerRotation = 2708;
320 static constexpr int Config_AbsoluteSensorDiscontinuityPoint = 2709;
321 static constexpr int CANdi_Pwm2_Velocity = 2847;
322 static constexpr int TalonFXS_5VRailVoltage = 2849;
323 static constexpr int TalonFXS_Gadgeteer_G3 = 2850;
324 static constexpr int CANdi_QuadVelocity = 2857;
325 static constexpr int Config_PWM1_AbsoluteSensorOffset = 2858;
326 static constexpr int Config_PWM1_AbsoluteSensorDiscontinuityPoint = 2859;
327 static constexpr int Config_PWM1_SensorDirection = 2860;
328 static constexpr int Config_PWM2_AbsoluteSensorOffset = 2862;
329 static constexpr int Config_PWM2_AbsoluteSensorDiscontinuityPoint = 2863;
330 static constexpr int Config_PWM2_SensorDirection = 2864;
331 static constexpr int Config_Quad_SensorDirection = 2866;
332 static constexpr int CANdi_SetQuadPosition = 2868;
333 static constexpr int Config_S1_CloseState = 2869;
334 static constexpr int Config_S2_CloseState = 2870;
335 static constexpr int CANdi_S1Closed = 2871;
336 static constexpr int CANdi_S2Closed = 2872;
337 static constexpr int Config_BrushedMotorWiring = 2878;
338 static constexpr int PRO_GadgeteerQuad_RawQuadraturePosition = 2885;
339 static constexpr int PRO_GadgeteerQuad_RawQuadratureVelocity = 2886;
340 static constexpr int PRO_GadgeteerPwm_RawPwmPosition = 2887;
341 static constexpr int PRO_GadgeteerPwm_RawPwmVelocity = 2888;
342 static constexpr int CANdle_General_SupplyVoltage = 2899;
343 static constexpr int CANdle_General_FiveVRailVoltage = 2900;
344 static constexpr int CANdle_General_OutputCurrent = 2901;
345 static constexpr int CANdle_General_DeviceTemp = 2902;
346 static constexpr int CANdle_General_VBatModulation = 2903;
347 static constexpr int CANdle_General_MaxSimulAnimCount = 2904;
348 static constexpr int Config_LED_StripType = 2905;
349 static constexpr int Config_LED_BrightnessScalar = 2906;
350 static constexpr int Config_LED_LossOfSignalBehavior = 2907;
351 static constexpr int Config_CANdle_5VRail = 2908;
352 static constexpr int Config_CANdle_VBatOutputMode = 2909;
353 static constexpr int Config_CANdle_StatusLedWhenActive = 2910;
354 static constexpr int CANdle_Animation0_Type = 2927;
355 static constexpr int CANdle_Animation1_Type = 2928;
356 static constexpr int CANdle_Animation2_Type = 2929;
357 static constexpr int CANdle_Animation3_Type = 2930;
358 static constexpr int CANdle_Animation4_Type = 2931;
359 static constexpr int CANdle_Animation5_Type = 2932;
360 static constexpr int CANdle_Animation6_Type = 2933;
361 static constexpr int CANdle_Animation7_Type = 2934;
362 static constexpr int CANdle_AnimationDirection = 2935;
363 static constexpr int CANdle_LarsonBounceMode = 2936;
364 static constexpr int Fault_Hardware = 10001;
365 static constexpr int StickyFault_Hardware = 10002;
366 static constexpr int ClearStickyFault_Hardware = 10003;
367 static constexpr int Fault_ProcTemp = 10004;
368 static constexpr int StickyFault_ProcTemp = 10005;
369 static constexpr int ClearStickyFault_ProcTemp = 10006;
370 static constexpr int Fault_DeviceTemp = 10007;
371 static constexpr int StickyFault_DeviceTemp = 10008;
372 static constexpr int ClearStickyFault_DeviceTemp = 10009;
373 static constexpr int Fault_Undervoltage = 10010;
374 static constexpr int StickyFault_Undervoltage = 10011;
375 static constexpr int ClearStickyFault_Undervoltage = 10012;
376 static constexpr int Fault_BootDuringEnable = 10013;
377 static constexpr int StickyFault_BootDuringEnable = 10014;
378 static constexpr int ClearStickyFault_BootDuringEnable = 10015;
379 static constexpr int Fault_UnlicensedFeatureInUse = 10016;
380 static constexpr int StickyFault_UnlicensedFeatureInUse = 10017;
381 static constexpr int ClearStickyFault_UnlicensedFeatureInUse = 10018;
382 static constexpr int Fault_PIGEON2_BootupAccel = 10019;
383 static constexpr int StickyFault_PIGEON2_BootupAccel = 10020;
384 static constexpr int ClearStickyFault_PIGEON2_BootupAccel = 10021;
385 static constexpr int Fault_PIGEON2_BootupGyros = 10022;
386 static constexpr int StickyFault_PIGEON2_BootupGyros = 10023;
387 static constexpr int ClearStickyFault_PIGEON2_BootupGyros = 10024;
388 static constexpr int Fault_PIGEON2_BootupMagne = 10025;
389 static constexpr int StickyFault_PIGEON2_BootupMagne = 10026;
390 static constexpr int ClearStickyFault_PIGEON2_BootupMagne = 10027;
391 static constexpr int Fault_PIGEON2_BootIntoMotion = 10028;
392 static constexpr int StickyFault_PIGEON2_BootIntoMotion = 10029;
393 static constexpr int ClearStickyFault_PIGEON2_BootIntoMotion = 10030;
394 static constexpr int Fault_PIGEON2_DataAcquiredLate = 10031;
395 static constexpr int StickyFault_PIGEON2_DataAcquiredLate = 10032;
396 static constexpr int ClearStickyFault_PIGEON2_DataAcquiredLate = 10033;
397 static constexpr int Fault_PIGEON2_LoopTimeSlow = 10034;
398 static constexpr int StickyFault_PIGEON2_LoopTimeSlow = 10035;
399 static constexpr int ClearStickyFault_PIGEON2_LoopTimeSlow = 10036;
400 static constexpr int Fault_PIGEON2_SaturatedMagne = 10037;
401 static constexpr int StickyFault_PIGEON2_SaturatedMagne = 10038;
402 static constexpr int ClearStickyFault_PIGEON2_SaturatedMagne = 10039;
403 static constexpr int Fault_PIGEON2_SaturatedAccel = 10040;
404 static constexpr int StickyFault_PIGEON2_SaturatedAccel = 10041;
405 static constexpr int ClearStickyFault_PIGEON2_SaturatedAccel = 10042;
406 static constexpr int Fault_PIGEON2_SaturatedGyros = 10043;
407 static constexpr int StickyFault_PIGEON2_SaturatedGyros = 10044;
408 static constexpr int ClearStickyFault_PIGEON2_SaturatedGyros = 10045;
409 static constexpr int Fault_CANCODER_BadMagnet = 10046;
410 static constexpr int StickyFault_CANCODER_BadMagnet = 10047;
411 static constexpr int ClearStickyFault_CANCODER_BadMagnet = 10048;
412 static constexpr int Fault_TALONFX_BridgeBrownout = 10049;
413 static constexpr int StickyFault_TALONFX_BridgeBrownout = 10050;
414 static constexpr int ClearStickyFault_TALONFX_BridgeBrownout = 10051;
415 static constexpr int Fault_TALONFX_RemoteSensorReset = 10052;
416 static constexpr int StickyFault_TALONFX_RemoteSensorReset = 10053;
417 static constexpr int ClearStickyFault_TALONFX_RemoteSensorReset = 10054;
418 static constexpr int Fault_TALONFX_MissingDifferentialFX = 10055;
419 static constexpr int StickyFault_TALONFX_MissingDifferentialFX = 10056;
420 static constexpr int ClearStickyFault_TALONFX_MissingDifferentialFX = 10057;
421 static constexpr int Fault_TALONFX_RemoteSensorPosOverflow = 10058;
422 static constexpr int StickyFault_TALONFX_RemoteSensorPosOverflow = 10059;
423 static constexpr int ClearStickyFault_TALONFX_RemoteSensorPosOverflow = 10060;
424 static constexpr int Fault_TALONFX_OverSupplyV = 10061;
425 static constexpr int StickyFault_TALONFX_OverSupplyV = 10062;
426 static constexpr int ClearStickyFault_TALONFX_OverSupplyV = 10063;
427 static constexpr int Fault_TALONFX_UnstableSupplyV = 10064;
428 static constexpr int StickyFault_TALONFX_UnstableSupplyV = 10065;
429 static constexpr int ClearStickyFault_TALONFX_UnstableSupplyV = 10066;
430 static constexpr int Fault_TALONFX_ReverseHardLimit = 10067;
431 static constexpr int StickyFault_TALONFX_ReverseHardLimit = 10068;
432 static constexpr int ClearStickyFault_TALONFX_ReverseHardLimit = 10069;
433 static constexpr int Fault_TALONFX_ForwardHardLimit = 10070;
434 static constexpr int StickyFault_TALONFX_ForwardHardLimit = 10071;
435 static constexpr int ClearStickyFault_TALONFX_ForwardHardLimit = 10072;
436 static constexpr int Fault_TALONFX_ReverseSoftLimit = 10073;
437 static constexpr int StickyFault_TALONFX_ReverseSoftLimit = 10074;
438 static constexpr int ClearStickyFault_TALONFX_ReverseSoftLimit = 10075;
439 static constexpr int Fault_TALONFX_ForwardSoftLimit = 10076;
440 static constexpr int StickyFault_TALONFX_ForwardSoftLimit = 10077;
441 static constexpr int ClearStickyFault_TALONFX_ForwardSoftLimit = 10078;
442 static constexpr int Fault_TALONFX_MissingRemSoftLim = 10079;
443 static constexpr int StickyFault_TALONFX_MissingRemSoftLim = 10080;
444 static constexpr int ClearStickyFault_TALONFX_MissingRemSoftLim = 10081;
445 static constexpr int Fault_TALONFX_MissingRemHardLim = 10082;
446 static constexpr int StickyFault_TALONFX_MissingRemHardLim = 10083;
447 static constexpr int ClearStickyFault_TALONFX_MissingRemHardLim = 10084;
448 static constexpr int Fault_TALONFX_MissingRemoteSensor = 10085;
449 static constexpr int StickyFault_TALONFX_MissingRemoteSensor = 10086;
450 static constexpr int ClearStickyFault_TALONFX_MissingRemoteSensor = 10087;
451 static constexpr int Fault_TALONFX_FusedSensorOutOfSync = 10088;
452 static constexpr int StickyFault_TALONFX_FusedSensorOutOfSync = 10089;
453 static constexpr int ClearStickyFault_TALONFX_FusedSensorOutOfSync = 10090;
454 static constexpr int Fault_TALONFX_StatorCurrLimit = 10091;
455 static constexpr int StickyFault_TALONFX_StatorCurrLimit = 10092;
456 static constexpr int ClearStickyFault_TALONFX_StatorCurrLimit = 10093;
457 static constexpr int Fault_TALONFX_SupplyCurrLimit = 10094;
458 static constexpr int StickyFault_TALONFX_SupplyCurrLimit = 10095;
459 static constexpr int ClearStickyFault_TALONFX_SupplyCurrLimit = 10096;
460 static constexpr int Fault_TALONFX_UsingFusedCCWhileUnlicensed = 10097;
461 static constexpr int StickyFault_TALONFX_UsingFusedCCWhileUnlicensed = 10098;
462 static constexpr int ClearStickyFault_TALONFX_UsingFusedCCWhileUnlicensed = 10099;
463 static constexpr int Fault_TALONFX_StaticBrakeDisabled = 10100;
464 static constexpr int StickyFault_TALONFX_StaticBrakeDisabled = 10101;
465 static constexpr int ClearStickyFault_TALONFX_StaticBrakeDisabled = 10102;
466 static constexpr int Fault_TALONFX_BridgeShort = 10103;
467 static constexpr int StickyFault_TALONFX_BridgeShort = 10104;
468 static constexpr int ClearStickyFault_TALONFX_BridgeShort = 10105;
469 static constexpr int Fault_TALONFX_HallSensorMissing = 10106;
470 static constexpr int StickyFault_TALONFX_HallSensorMissing = 10107;
471 static constexpr int ClearStickyFault_TALONFX_HallSensorMissing = 10108;
472 static constexpr int Fault_TALONFX_DriveDisabledHallSensor = 10109;
473 static constexpr int StickyFault_TALONFX_DriveDisabledHallSensor = 10110;
474 static constexpr int ClearStickyFault_TALONFX_DriveDisabledHallSensor = 10111;
475 static constexpr int Fault_TALONFX_MotorTempSensorMissing = 10112;
476 static constexpr int StickyFault_TALONFX_MotorTempSensorMissing = 10113;
477 static constexpr int ClearStickyFault_TALONFX_MotorTempSensorMissing = 10114;
478 static constexpr int Fault_TALONFX_MotorTempSensorTooHot = 10115;
479 static constexpr int StickyFault_TALONFX_MotorTempSensorTooHot = 10116;
480 static constexpr int ClearStickyFault_TALONFX_MotorTempSensorTooHot = 10117;
481 static constexpr int Fault_CANDI_5V = 10118;
482 static constexpr int StickyFault_CANDI_5V = 10119;
483 static constexpr int ClearStickyFault_CANDI_5V = 10120;
484 static constexpr int Fault_CANDLE_OVERVOLTAGE = 10124;
485 static constexpr int StickyFault_CANDLE_OVERVOLTAGE = 10125;
486 static constexpr int ClearStickyFault_CANDLE_OVERVOLTAGE = 10126;
487 static constexpr int Fault_CANDLE_5V_TOO_HIGH = 10127;
488 static constexpr int StickyFault_CANDLE_5V_TOO_HIGH = 10128;
489 static constexpr int ClearStickyFault_CANDLE_5V_TOO_HIGH = 10129;
490 static constexpr int Fault_CANDLE_5V_TOO_LOW = 10130;
491 static constexpr int StickyFault_CANDLE_5V_TOO_LOW = 10131;
492 static constexpr int ClearStickyFault_CANDLE_5V_TOO_LOW = 10132;
493 static constexpr int Fault_CANDLE_THERMAL = 10133;
494 static constexpr int StickyFault_CANDLE_THERMAL = 10134;
495 static constexpr int ClearStickyFault_CANDLE_THERMAL = 10135;
496 static constexpr int Fault_CANDLE_SOFTWARE_FUSE = 10136;
497 static constexpr int StickyFault_CANDLE_SOFTWARE_FUSE = 10137;
498 static constexpr int ClearStickyFault_CANDLE_SOFTWARE_FUSE = 10138;
499 static constexpr int Fault_CANDLE_SHORT_CIRCUIT = 10139;
500 static constexpr int StickyFault_CANDLE_SHORT_CIRCUIT = 10140;
501 static constexpr int ClearStickyFault_CANDLE_SHORT_CIRCUIT = 10141;
502
503 constexpr bool operator==(SpnValue data) const
504 {
505 return this->value == data.value;
506 }
507 constexpr bool operator==(int data) const
508 {
509 return this->value == data;
510 }
511 constexpr bool operator!=(SpnValue data) const
512 {
513 return this->value != data.value;
514 }
515 constexpr bool operator!=(int data) const
516 {
517 return this->value != data;
518 }
519 constexpr bool operator<(SpnValue data) const
520 {
521 return this->value < data.value;
522 }
523 constexpr bool operator<(int data) const
524 {
525 return this->value < data;
526 }
527
528 /**
529 * \brief Gets the string representation of this enum
530 *
531 * \returns String representation of this enum
532 */
533 std::string ToString() const
534 {
535 switch (value)
536 {
537 case SpnValue::TalonFX_System_State: return "TalonFX_System_State";
538 case SpnValue::Startup_ResetFlags: return "Startup_ResetFlags";
539 case SpnValue::Version_Major: return "Version_Major";
540 case SpnValue::Version_Minor: return "Version_Minor";
541 case SpnValue::Version_Bugfix: return "Version_Bugfix";
542 case SpnValue::Version_Build: return "Version_Build";
543 case SpnValue::Version_Full: return "Version_Full";
544 case SpnValue::Licensing_IsProLicensed: return "Licensing_IsProLicensed";
545 case SpnValue::Licensing_IsSeasonPassed: return "Licensing_IsSeasonPassed";
546 case SpnValue::CustomParam0: return "CustomParam0";
547 case SpnValue::CustomParam1: return "CustomParam1";
548 case SpnValue::CANcoder_SensorDirection: return "CANcoder_SensorDirection";
549 case SpnValue::FrcLock: return "FrcLock";
550 case SpnValue::RobotEnabled: return "RobotEnabled";
551 case SpnValue::LED1_OnColor: return "LED1_OnColor";
552 case SpnValue::LED1_OffColor: return "LED1_OffColor";
553 case SpnValue::LED2_OnColor: return "LED2_OnColor";
554 case SpnValue::LED2_OffColor: return "LED2_OffColor";
555 case SpnValue::AllFaults: return "AllFaults";
556 case SpnValue::AllStickyFaults: return "AllStickyFaults";
557 case SpnValue::Pigeon2UseCompass: return "Pigeon2UseCompass";
558 case SpnValue::Pigeon2DisableTemperatureCompensation: return "Pigeon2DisableTemperatureCompensation";
559 case SpnValue::Pigeon2DisableNoMotionCalibration: return "Pigeon2DisableNoMotionCalibration";
560 case SpnValue::Pigeon2MountPoseYaw: return "Pigeon2MountPoseYaw";
561 case SpnValue::Pigeon2MountPosePitch: return "Pigeon2MountPosePitch";
562 case SpnValue::Pigeon2MountPoseRoll: return "Pigeon2MountPoseRoll";
563 case SpnValue::Pigeon2GyroScalarX: return "Pigeon2GyroScalarX";
564 case SpnValue::Pigeon2GyroScalarY: return "Pigeon2GyroScalarY";
565 case SpnValue::Pigeon2GyroScalarZ: return "Pigeon2GyroScalarZ";
566 case SpnValue::Pigeon2Yaw: return "Pigeon2Yaw";
567 case SpnValue::Pigeon2Pitch: return "Pigeon2Pitch";
568 case SpnValue::Pigeon2Roll: return "Pigeon2Roll";
569 case SpnValue::Pigeon2QuatW: return "Pigeon2QuatW";
570 case SpnValue::Pigeon2QuatX: return "Pigeon2QuatX";
571 case SpnValue::Pigeon2QuatY: return "Pigeon2QuatY";
572 case SpnValue::Pigeon2QuatZ: return "Pigeon2QuatZ";
573 case SpnValue::Pigeon2GravityVectorX: return "Pigeon2GravityVectorX";
574 case SpnValue::Pigeon2GravityVectorY: return "Pigeon2GravityVectorY";
575 case SpnValue::Pigeon2GravityVectorZ: return "Pigeon2GravityVectorZ";
576 case SpnValue::Pigeon2Temperature: return "Pigeon2Temperature";
577 case SpnValue::Pigeon2NoMotionCalEnabled: return "Pigeon2NoMotionCalEnabled";
578 case SpnValue::Pigeon2NoMotionCount: return "Pigeon2NoMotionCount";
579 case SpnValue::Pigeon2TempCompDisabled: return "Pigeon2TempCompDisabled";
580 case SpnValue::Pigeon2UpTime: return "Pigeon2UpTime";
581 case SpnValue::Pigeon2AccumGyroX: return "Pigeon2AccumGyroX";
582 case SpnValue::Pigeon2AccumGyroY: return "Pigeon2AccumGyroY";
583 case SpnValue::Pigeon2AccumGyroZ: return "Pigeon2AccumGyroZ";
584 case SpnValue::Pigeon2AngularVelocityXWorld: return "Pigeon2AngularVelocityXWorld";
585 case SpnValue::Pigeon2AngularVelocityYWorld: return "Pigeon2AngularVelocityYWorld";
586 case SpnValue::Pigeon2AngularVelocityZWorld: return "Pigeon2AngularVelocityZWorld";
587 case SpnValue::Pigeon2AccelerationX: return "Pigeon2AccelerationX";
588 case SpnValue::Pigeon2AccelerationY: return "Pigeon2AccelerationY";
589 case SpnValue::Pigeon2AccelerationZ: return "Pigeon2AccelerationZ";
590 case SpnValue::Pigeon2_SupplyVoltage: return "Pigeon2_SupplyVoltage";
591 case SpnValue::Pigeon2AngularVelocityX: return "Pigeon2AngularVelocityX";
592 case SpnValue::Pigeon2AngularVelocityY: return "Pigeon2AngularVelocityY";
593 case SpnValue::Pigeon2AngularVelocityZ: return "Pigeon2AngularVelocityZ";
594 case SpnValue::Pigeon2MagneticFieldX: return "Pigeon2MagneticFieldX";
595 case SpnValue::Pigeon2MagneticFieldY: return "Pigeon2MagneticFieldY";
596 case SpnValue::Pigeon2MagneticFieldZ: return "Pigeon2MagneticFieldZ";
597 case SpnValue::Pigeon2RawMagneticFieldX: return "Pigeon2RawMagneticFieldX";
598 case SpnValue::Pigeon2RawMagneticFieldY: return "Pigeon2RawMagneticFieldY";
599 case SpnValue::Pigeon2RawMagneticFieldZ: return "Pigeon2RawMagneticFieldZ";
600 case SpnValue::CANCoder_MagnetOffset: return "CANCoder_MagnetOffset";
601 case SpnValue::TalonFX_SetSensorPosition: return "TalonFX_SetSensorPosition";
602 case SpnValue::CANcoder_SetSensorPosition: return "CANcoder_SetSensorPosition";
603 case SpnValue::Pigeon2_SetYaw: return "Pigeon2_SetYaw";
604 case SpnValue::DeviceEnabled: return "DeviceEnabled";
605 case SpnValue::PRO_MotorOutput_MotorVoltage: return "PRO_MotorOutput_MotorVoltage";
606 case SpnValue::ForwardLimit: return "ForwardLimit";
607 case SpnValue::ReverseLimit: return "ReverseLimit";
608 case SpnValue::PRO_MotorOutput_RotorPolarity: return "PRO_MotorOutput_RotorPolarity";
609 case SpnValue::PRO_MotorOutput_DutyCycle: return "PRO_MotorOutput_DutyCycle";
610 case SpnValue::PRO_MotorOutput_TorqueCurrent: return "PRO_MotorOutput_TorqueCurrent";
611 case SpnValue::PRO_SupplyAndTemp_StatorCurrent: return "PRO_SupplyAndTemp_StatorCurrent";
612 case SpnValue::PRO_SupplyAndTemp_SupplyCurrent: return "PRO_SupplyAndTemp_SupplyCurrent";
613 case SpnValue::PRO_SupplyAndTemp_SupplyVoltage: return "PRO_SupplyAndTemp_SupplyVoltage";
614 case SpnValue::PRO_SupplyAndTemp_DeviceTemp: return "PRO_SupplyAndTemp_DeviceTemp";
615 case SpnValue::PRO_SupplyAndTemp_ProcessorTemp: return "PRO_SupplyAndTemp_ProcessorTemp";
616 case SpnValue::PRO_RotorPosAndVel_Velocity: return "PRO_RotorPosAndVel_Velocity";
617 case SpnValue::PRO_RotorPosAndVel_Position: return "PRO_RotorPosAndVel_Position";
618 case SpnValue::PRO_PosAndVel_Velocity: return "PRO_PosAndVel_Velocity";
619 case SpnValue::PRO_PosAndVel_Position: return "PRO_PosAndVel_Position";
620 case SpnValue::PRO_PosAndVel_Acceleration: return "PRO_PosAndVel_Acceleration";
621 case SpnValue::PRO_PIDStateEnables_IntegratedAccum_DC: return "PRO_PIDStateEnables_IntegratedAccum_DC";
622 case SpnValue::PRO_PIDStateEnables_IntegratedAccum_V: return "PRO_PIDStateEnables_IntegratedAccum_V";
623 case SpnValue::PRO_PIDStateEnables_IntegratedAccum_A: return "PRO_PIDStateEnables_IntegratedAccum_A";
624 case SpnValue::PRO_PIDStateEnables_FeedForward_DC: return "PRO_PIDStateEnables_FeedForward_DC";
625 case SpnValue::PRO_PIDStateEnables_FeedForward_V: return "PRO_PIDStateEnables_FeedForward_V";
626 case SpnValue::PRO_PIDStateEnables_FeedForward_A: return "PRO_PIDStateEnables_FeedForward_A";
627 case SpnValue::TalonFX_ControlMode: return "TalonFX_ControlMode";
628 case SpnValue::ExternalMotorTempStatus: return "ExternalMotorTempStatus";
629 case SpnValue::ExternalMotorTemp: return "ExternalMotorTemp";
630 case SpnValue::PRO_PIDStateEnables_IsMotionMagicRunning: return "PRO_PIDStateEnables_IsMotionMagicRunning";
631 case SpnValue::PRO_PIDStateEnables_RobotEnable: return "PRO_PIDStateEnables_RobotEnable";
632 case SpnValue::PRO_PIDStateEnables_DeviceEnable: return "PRO_PIDStateEnables_DeviceEnable";
633 case SpnValue::PRO_PIDRefPIDErr_PIDRef_Position: return "PRO_PIDRefPIDErr_PIDRef_Position";
634 case SpnValue::PRO_PIDRefPIDErr_PIDRef_Velocity: return "PRO_PIDRefPIDErr_PIDRef_Velocity";
635 case SpnValue::PRO_PIDRefPIDErr_PIDErr_Position: return "PRO_PIDRefPIDErr_PIDErr_Position";
636 case SpnValue::PRO_PIDRefPIDErr_PIDErr_Velocity: return "PRO_PIDRefPIDErr_PIDErr_Velocity";
637 case SpnValue::PRO_PIDRefPIDErr_ClosedLoopMode: return "PRO_PIDRefPIDErr_ClosedLoopMode";
638 case SpnValue::PRO_PIDOutput_PIDOutputMode: return "PRO_PIDOutput_PIDOutputMode";
639 case SpnValue::PRO_PIDOutput_ProportionalOutput_DC: return "PRO_PIDOutput_ProportionalOutput_DC";
640 case SpnValue::PRO_PIDOutput_ProportionalOutput_V: return "PRO_PIDOutput_ProportionalOutput_V";
641 case SpnValue::PRO_PIDOutput_ProportionalOutput_A: return "PRO_PIDOutput_ProportionalOutput_A";
642 case SpnValue::PRO_PIDOutput_DerivativeOutput_DC: return "PRO_PIDOutput_DerivativeOutput_DC";
643 case SpnValue::PRO_PIDOutput_DerivativeOutput_V: return "PRO_PIDOutput_DerivativeOutput_V";
644 case SpnValue::PRO_PIDOutput_DerivativeOutput_A: return "PRO_PIDOutput_DerivativeOutput_A";
645 case SpnValue::PRO_PIDOutput_Output_DC: return "PRO_PIDOutput_Output_DC";
646 case SpnValue::PRO_PIDOutput_Output_V: return "PRO_PIDOutput_Output_V";
647 case SpnValue::PRO_PIDOutput_Output_A: return "PRO_PIDOutput_Output_A";
648 case SpnValue::PRO_PIDOutput_Slot: return "PRO_PIDOutput_Slot";
649 case SpnValue::PRO_PIDRefSlopeECUTime_ReferenceSlope_Position: return "PRO_PIDRefSlopeECUTime_ReferenceSlope_Position";
650 case SpnValue::PRO_PIDRefSlopeECUTime_ReferenceSlope_Velocity: return "PRO_PIDRefSlopeECUTime_ReferenceSlope_Velocity";
651 case SpnValue::PRO_PIDRefSlopeECUTime_ClosedLoopMode: return "PRO_PIDRefSlopeECUTime_ClosedLoopMode";
652 case SpnValue::TalonFX_MotorOutputStatus: return "TalonFX_MotorOutputStatus";
653 case SpnValue::PRO_MotorOutput_PIDState_Diff_DutyCycle: return "PRO_MotorOutput_PIDState_Diff_DutyCycle";
654 case SpnValue::PRO_MotorOutput_PIDState_Diff_TorqueCurrent: return "PRO_MotorOutput_PIDState_Diff_TorqueCurrent";
655 case SpnValue::TalonFX_DifferentialControlMode: return "TalonFX_DifferentialControlMode";
656 case SpnValue::PRO_MotorOutput_PIDState_Diff_IntegratedAccum_DC: return "PRO_MotorOutput_PIDState_Diff_IntegratedAccum_DC";
657 case SpnValue::PRO_MotorOutput_PIDState_Diff_IntegratedAccum_V: return "PRO_MotorOutput_PIDState_Diff_IntegratedAccum_V";
658 case SpnValue::PRO_MotorOutput_PIDState_Diff_IntegratedAccum_A: return "PRO_MotorOutput_PIDState_Diff_IntegratedAccum_A";
659 case SpnValue::PRO_MotorOutput_PIDState_Diff_FeedForward_DC: return "PRO_MotorOutput_PIDState_Diff_FeedForward_DC";
660 case SpnValue::PRO_MotorOutput_PIDState_Diff_FeedForward_V: return "PRO_MotorOutput_PIDState_Diff_FeedForward_V";
661 case SpnValue::PRO_MotorOutput_PIDState_Diff_FeedForward_A: return "PRO_MotorOutput_PIDState_Diff_FeedForward_A";
662 case SpnValue::PRO_AvgPosAndVel_Velocity: return "PRO_AvgPosAndVel_Velocity";
663 case SpnValue::PRO_AvgPosAndVel_Position: return "PRO_AvgPosAndVel_Position";
664 case SpnValue::PRO_DiffPosAndVel_Velocity: return "PRO_DiffPosAndVel_Velocity";
665 case SpnValue::PRO_DiffPosAndVel_Position: return "PRO_DiffPosAndVel_Position";
666 case SpnValue::PRO_DiffPIDRefPIDErr_PIDRef_Position: return "PRO_DiffPIDRefPIDErr_PIDRef_Position";
667 case SpnValue::PRO_DiffPIDRefPIDErr_PIDRef_Velocity: return "PRO_DiffPIDRefPIDErr_PIDRef_Velocity";
668 case SpnValue::PRO_DiffPIDRefPIDErr_PIDErr_Position: return "PRO_DiffPIDRefPIDErr_PIDErr_Position";
669 case SpnValue::PRO_DiffPIDRefPIDErr_PIDErr_Velocity: return "PRO_DiffPIDRefPIDErr_PIDErr_Velocity";
670 case SpnValue::PRO_DiffPIDRefPIDErr_ClosedLoopMode: return "PRO_DiffPIDRefPIDErr_ClosedLoopMode";
671 case SpnValue::PRO_DiffPIDOutput_PIDOutputMode: return "PRO_DiffPIDOutput_PIDOutputMode";
672 case SpnValue::PRO_DiffPIDOutput_ProportionalOutput_DC: return "PRO_DiffPIDOutput_ProportionalOutput_DC";
673 case SpnValue::PRO_DiffPIDOutput_ProportionalOutput_V: return "PRO_DiffPIDOutput_ProportionalOutput_V";
674 case SpnValue::PRO_DiffPIDOutput_ProportionalOutput_A: return "PRO_DiffPIDOutput_ProportionalOutput_A";
675 case SpnValue::PRO_DiffPIDOutput_DerivativeOutput_DC: return "PRO_DiffPIDOutput_DerivativeOutput_DC";
676 case SpnValue::PRO_DiffPIDOutput_DerivativeOutput_V: return "PRO_DiffPIDOutput_DerivativeOutput_V";
677 case SpnValue::PRO_DiffPIDOutput_DerivativeOutput_A: return "PRO_DiffPIDOutput_DerivativeOutput_A";
678 case SpnValue::PRO_DiffPIDOutput_Output_DC: return "PRO_DiffPIDOutput_Output_DC";
679 case SpnValue::PRO_DiffPIDOutput_Output_V: return "PRO_DiffPIDOutput_Output_V";
680 case SpnValue::PRO_DiffPIDOutput_Output_A: return "PRO_DiffPIDOutput_Output_A";
681 case SpnValue::PRO_DiffPIDOutput_Slot: return "PRO_DiffPIDOutput_Slot";
682 case SpnValue::PRO_DiffPIDRefSlopeECUTime_ReferenceSlope_Position: return "PRO_DiffPIDRefSlopeECUTime_ReferenceSlope_Position";
683 case SpnValue::PRO_DiffPIDRefSlopeECUTime_ReferenceSlope_Velocity: return "PRO_DiffPIDRefSlopeECUTime_ReferenceSlope_Velocity";
684 case SpnValue::PRO_DiffPIDRefSlopeECUTime_ClosedLoopMode: return "PRO_DiffPIDRefSlopeECUTime_ClosedLoopMode";
685 case SpnValue::TalonFX_MotorConstants_kT: return "TalonFX_MotorConstants_kT";
686 case SpnValue::TalonFX_MotorConstants_kV: return "TalonFX_MotorConstants_kV";
687 case SpnValue::TalonFX_MotorConstants_StallCurrent: return "TalonFX_MotorConstants_StallCurrent";
688 case SpnValue::Slot0_kP: return "Slot0_kP";
689 case SpnValue::Slot0_kI: return "Slot0_kI";
690 case SpnValue::Slot0_kD: return "Slot0_kD";
691 case SpnValue::Slot0_kS: return "Slot0_kS";
692 case SpnValue::Slot0_kV: return "Slot0_kV";
693 case SpnValue::Slot0_kA: return "Slot0_kA";
694 case SpnValue::Slot0_kG: return "Slot0_kG";
695 case SpnValue::Slot0_kG_Type: return "Slot0_kG_Type";
696 case SpnValue::Slot1_kP: return "Slot1_kP";
697 case SpnValue::Slot1_kI: return "Slot1_kI";
698 case SpnValue::Slot1_kD: return "Slot1_kD";
699 case SpnValue::Slot1_kS: return "Slot1_kS";
700 case SpnValue::Slot1_kV: return "Slot1_kV";
701 case SpnValue::Slot1_kA: return "Slot1_kA";
702 case SpnValue::Slot1_kG: return "Slot1_kG";
703 case SpnValue::Slot1_kG_Type: return "Slot1_kG_Type";
704 case SpnValue::Slot2_kP: return "Slot2_kP";
705 case SpnValue::Slot2_kI: return "Slot2_kI";
706 case SpnValue::Slot2_kD: return "Slot2_kD";
707 case SpnValue::Slot2_kS: return "Slot2_kS";
708 case SpnValue::Slot2_kV: return "Slot2_kV";
709 case SpnValue::Slot2_kA: return "Slot2_kA";
710 case SpnValue::Slot2_kG: return "Slot2_kG";
711 case SpnValue::Slot2_kG_Type: return "Slot2_kG_Type";
712 case SpnValue::Config_Inverted: return "Config_Inverted";
713 case SpnValue::Config_SupplyVLowpassTau: return "Config_SupplyVLowpassTau";
714 case SpnValue::Config_BeepOnBoot: return "Config_BeepOnBoot";
715 case SpnValue::Config_NeutralMode: return "Config_NeutralMode";
716 case SpnValue::Config_DutyCycleNeutralDB: return "Config_DutyCycleNeutralDB";
717 case SpnValue::Config_StatorCurrentLimit: return "Config_StatorCurrentLimit";
718 case SpnValue::Config_StatorCurrLimitEn: return "Config_StatorCurrLimitEn";
719 case SpnValue::Config_SupplyCurrentLimit: return "Config_SupplyCurrentLimit";
720 case SpnValue::Config_SupplyCurrLimitEn: return "Config_SupplyCurrLimitEn";
721 case SpnValue::Config_PeakForwardDC: return "Config_PeakForwardDC";
722 case SpnValue::Config_PeakReverseDC: return "Config_PeakReverseDC";
723 case SpnValue::Config_PeakForwardV: return "Config_PeakForwardV";
724 case SpnValue::Config_PeakReverseV: return "Config_PeakReverseV";
725 case SpnValue::Config_PeakForTorqCurr: return "Config_PeakForTorqCurr";
726 case SpnValue::Config_PeakRevTorqCurr: return "Config_PeakRevTorqCurr";
727 case SpnValue::Config_TorqueNeutralDB: return "Config_TorqueNeutralDB";
728 case SpnValue::Config_FeedbackRotorOffset: return "Config_FeedbackRotorOffset";
729 case SpnValue::Config_SensorToMechanismRatio: return "Config_SensorToMechanismRatio";
730 case SpnValue::Config_RotorToSensorRatio: return "Config_RotorToSensorRatio";
731 case SpnValue::Config_FeedbackSensorSource: return "Config_FeedbackSensorSource";
732 case SpnValue::Config_FeedbackRemoteSensorID: return "Config_FeedbackRemoteSensorID";
733 case SpnValue::Config_DutyCycleOpenLoopRampPeriod: return "Config_DutyCycleOpenLoopRampPeriod";
734 case SpnValue::Config_VoltageOpenLoopRampPeriod: return "Config_VoltageOpenLoopRampPeriod";
735 case SpnValue::Config_TorqueOpenLoopRampPeriod: return "Config_TorqueOpenLoopRampPeriod";
736 case SpnValue::Config_DutyCycleClosedLoopRampPeriod: return "Config_DutyCycleClosedLoopRampPeriod";
737 case SpnValue::Config_VoltageClosedLoopRampPeriod: return "Config_VoltageClosedLoopRampPeriod";
738 case SpnValue::Config_TorqueClosedLoopRampPeriod: return "Config_TorqueClosedLoopRampPeriod";
739 case SpnValue::Config_ForwardLimitType: return "Config_ForwardLimitType";
740 case SpnValue::Config_ForwardLimitAutosetPosEnable: return "Config_ForwardLimitAutosetPosEnable";
741 case SpnValue::Config_ForwardLimitAutosetPosValue: return "Config_ForwardLimitAutosetPosValue";
742 case SpnValue::Config_ForwardLimitEnable: return "Config_ForwardLimitEnable";
743 case SpnValue::Config_ForwardLimitSource: return "Config_ForwardLimitSource";
744 case SpnValue::Config_ForwardLimitRemoteSensorID: return "Config_ForwardLimitRemoteSensorID";
745 case SpnValue::Config_ReverseLimitType: return "Config_ReverseLimitType";
746 case SpnValue::Config_ReverseLimitAutosetPosEnable: return "Config_ReverseLimitAutosetPosEnable";
747 case SpnValue::Config_ReverseLimitAutosetPosValue: return "Config_ReverseLimitAutosetPosValue";
748 case SpnValue::Config_ReverseLimitEnable: return "Config_ReverseLimitEnable";
749 case SpnValue::Config_ReverseLimitSource: return "Config_ReverseLimitSource";
750 case SpnValue::Config_ReverseLimitRemoteSensorID: return "Config_ReverseLimitRemoteSensorID";
751 case SpnValue::Config_ForwardSoftLimitEnable: return "Config_ForwardSoftLimitEnable";
752 case SpnValue::Config_ReverseSoftLimitEnable: return "Config_ReverseSoftLimitEnable";
753 case SpnValue::Config_ForwardSoftLimitThreshold: return "Config_ForwardSoftLimitThreshold";
754 case SpnValue::Config_ReverseSoftLimitThreshold: return "Config_ReverseSoftLimitThreshold";
755 case SpnValue::Config_MotionMagicCruiseVelocity: return "Config_MotionMagicCruiseVelocity";
756 case SpnValue::Config_MotionMagicAcceleration: return "Config_MotionMagicAcceleration";
757 case SpnValue::Config_MotionMagicJerk: return "Config_MotionMagicJerk";
758 case SpnValue::Config_MotionMagicExpo_kV: return "Config_MotionMagicExpo_kV";
759 case SpnValue::Config_MotionMagicExpo_kA: return "Config_MotionMagicExpo_kA";
760 case SpnValue::Config_PeakDiffDC: return "Config_PeakDiffDC";
761 case SpnValue::Config_PeakDiffV: return "Config_PeakDiffV";
762 case SpnValue::Config_PeakDiffTorqCurr: return "Config_PeakDiffTorqCurr";
763 case SpnValue::CANcoder_Velocity: return "CANcoder_Velocity";
764 case SpnValue::CANcoder_Position: return "CANcoder_Position";
765 case SpnValue::CANcoder_AbsPosition: return "CANcoder_AbsPosition";
766 case SpnValue::CANCoder_RawVel: return "CANCoder_RawVel";
767 case SpnValue::CANCoder_RawPos: return "CANCoder_RawPos";
768 case SpnValue::CANCoder_SupplyVoltage: return "CANCoder_SupplyVoltage";
769 case SpnValue::CANcoder_MagHealth: return "CANcoder_MagHealth";
770 case SpnValue::SPN_ClearStickyFaults: return "SPN_ClearStickyFaults";
771 case SpnValue::PRO_MotorOutput_BridgeType_Public: return "PRO_MotorOutput_BridgeType_Public";
772 case SpnValue::Config_ContinuousWrap: return "Config_ContinuousWrap";
773 case SpnValue::Config_SupplyCurrentLowerLimit: return "Config_SupplyCurrentLowerLimit";
774 case SpnValue::Config_SupplyCurrentLowerTime: return "Config_SupplyCurrentLowerTime";
775 case SpnValue::Config_DifferentialSensorSource: return "Config_DifferentialSensorSource";
776 case SpnValue::Config_DifferentialTalonFXSensorID: return "Config_DifferentialTalonFXSensorID";
777 case SpnValue::Config_DifferentialRemoteSensorID: return "Config_DifferentialRemoteSensorID";
778 case SpnValue::Config_BeepOnConfig: return "Config_BeepOnConfig";
779 case SpnValue::Config_AllowMusicDurDisable: return "Config_AllowMusicDurDisable";
780 case SpnValue::Compliancy_Version: return "Compliancy_Version";
781 case SpnValue::Version_IsProLicensed: return "Version_IsProLicensed";
782 case SpnValue::PRO_SupplyAndTemp_DeviceTemp2: return "PRO_SupplyAndTemp_DeviceTemp2";
783 case SpnValue::Slot0_kS_Sign: return "Slot0_kS_Sign";
784 case SpnValue::Slot1_kS_Sign: return "Slot1_kS_Sign";
785 case SpnValue::Slot2_kS_Sign: return "Slot2_kS_Sign";
786 case SpnValue::TalonFX_ConnectedMotor: return "TalonFX_ConnectedMotor";
787 case SpnValue::CANrange_SupplyVoltage: return "CANrange_SupplyVoltage";
788 case SpnValue::CANrange_Distance_Meters: return "CANrange_Distance_Meters";
789 case SpnValue::CANrange_MeasTime: return "CANrange_MeasTime";
790 case SpnValue::CANrange_SignalStrength: return "CANrange_SignalStrength";
791 case SpnValue::CANrange_ProximityDetected: return "CANrange_ProximityDetected";
792 case SpnValue::CANrange_MeasState: return "CANrange_MeasState";
793 case SpnValue::CANrange_AmbientSignal: return "CANrange_AmbientSignal";
794 case SpnValue::CANrange_DistanceStdDev: return "CANrange_DistanceStdDev";
795 case SpnValue::CANrange_RealFOVCenterX: return "CANrange_RealFOVCenterX";
796 case SpnValue::CANrange_RealFOVCenterY: return "CANrange_RealFOVCenterY";
797 case SpnValue::CANrange_RealFOVRangeX: return "CANrange_RealFOVRangeX";
798 case SpnValue::CANrange_RealFOVRangeY: return "CANrange_RealFOVRangeY";
799 case SpnValue::CANrange_UpdateMode: return "CANrange_UpdateMode";
800 case SpnValue::CANrange_UpdateFreq: return "CANrange_UpdateFreq";
801 case SpnValue::CANrange_ProximityThreshold: return "CANrange_ProximityThreshold";
802 case SpnValue::CANrange_ProximityHysteresis: return "CANrange_ProximityHysteresis";
803 case SpnValue::CANrange_MinSigStrengthForValidMeas: return "CANrange_MinSigStrengthForValidMeas";
804 case SpnValue::CANrange_FOVCenterX: return "CANrange_FOVCenterX";
805 case SpnValue::CANrange_FOVCenterY: return "CANrange_FOVCenterY";
806 case SpnValue::CANrange_FOVRangeX: return "CANrange_FOVRangeX";
807 case SpnValue::CANrange_FOVRangeY: return "CANrange_FOVRangeY";
808 case SpnValue::Config_ControlTimesyncFreq: return "Config_ControlTimesyncFreq";
809 case SpnValue::Config_VelocityFilterTimeConstant: return "Config_VelocityFilterTimeConstant";
810 case SpnValue::Config_AdvancedHallSupport: return "Config_AdvancedHallSupport";
811 case SpnValue::Config_MotorType: return "Config_MotorType";
812 case SpnValue::CANdi_Pin1State: return "CANdi_Pin1State";
813 case SpnValue::CANdi_Pin2State: return "CANdi_Pin2State";
814 case SpnValue::CANdi_QuadPosition: return "CANdi_QuadPosition";
815 case SpnValue::CANdi_Pwm1_RiseToRise: return "CANdi_Pwm1_RiseToRise";
816 case SpnValue::CANdi_Pwm1_Position: return "CANdi_Pwm1_Position";
817 case SpnValue::CANdi_Pwm1_Velocity: return "CANdi_Pwm1_Velocity";
818 case SpnValue::CANdi_Pwm2_RiseToRise: return "CANdi_Pwm2_RiseToRise";
819 case SpnValue::CANdi_Pwm2_Position: return "CANdi_Pwm2_Position";
820 case SpnValue::CANdi_Overcurrent: return "CANdi_Overcurrent";
821 case SpnValue::CANdi_VSense: return "CANdi_VSense";
822 case SpnValue::CANdi_OutputCurrent: return "CANdi_OutputCurrent";
823 case SpnValue::CANdi_S1FloatState: return "CANdi_S1FloatState";
824 case SpnValue::CANdi_S2FloatState: return "CANdi_S2FloatState";
825 case SpnValue::Config_AbsoluteSensorOffset: return "Config_AbsoluteSensorOffset";
826 case SpnValue::Config_ExternalFeedbackSensorSource: return "Config_ExternalFeedbackSensorSource";
827 case SpnValue::Config_SensorPhase: return "Config_SensorPhase";
828 case SpnValue::Config_QuadratureEdgesPerRotation: return "Config_QuadratureEdgesPerRotation";
829 case SpnValue::Config_AbsoluteSensorDiscontinuityPoint: return "Config_AbsoluteSensorDiscontinuityPoint";
830 case SpnValue::CANdi_Pwm2_Velocity: return "CANdi_Pwm2_Velocity";
831 case SpnValue::TalonFXS_5VRailVoltage: return "TalonFXS_5VRailVoltage";
832 case SpnValue::TalonFXS_Gadgeteer_G3: return "TalonFXS_Gadgeteer_G3";
833 case SpnValue::CANdi_QuadVelocity: return "CANdi_QuadVelocity";
834 case SpnValue::Config_PWM1_AbsoluteSensorOffset: return "Config_PWM1_AbsoluteSensorOffset";
835 case SpnValue::Config_PWM1_AbsoluteSensorDiscontinuityPoint: return "Config_PWM1_AbsoluteSensorDiscontinuityPoint";
836 case SpnValue::Config_PWM1_SensorDirection: return "Config_PWM1_SensorDirection";
837 case SpnValue::Config_PWM2_AbsoluteSensorOffset: return "Config_PWM2_AbsoluteSensorOffset";
838 case SpnValue::Config_PWM2_AbsoluteSensorDiscontinuityPoint: return "Config_PWM2_AbsoluteSensorDiscontinuityPoint";
839 case SpnValue::Config_PWM2_SensorDirection: return "Config_PWM2_SensorDirection";
840 case SpnValue::Config_Quad_SensorDirection: return "Config_Quad_SensorDirection";
841 case SpnValue::CANdi_SetQuadPosition: return "CANdi_SetQuadPosition";
842 case SpnValue::Config_S1_CloseState: return "Config_S1_CloseState";
843 case SpnValue::Config_S2_CloseState: return "Config_S2_CloseState";
844 case SpnValue::CANdi_S1Closed: return "CANdi_S1Closed";
845 case SpnValue::CANdi_S2Closed: return "CANdi_S2Closed";
846 case SpnValue::Config_BrushedMotorWiring: return "Config_BrushedMotorWiring";
847 case SpnValue::PRO_GadgeteerQuad_RawQuadraturePosition: return "PRO_GadgeteerQuad_RawQuadraturePosition";
848 case SpnValue::PRO_GadgeteerQuad_RawQuadratureVelocity: return "PRO_GadgeteerQuad_RawQuadratureVelocity";
849 case SpnValue::PRO_GadgeteerPwm_RawPwmPosition: return "PRO_GadgeteerPwm_RawPwmPosition";
850 case SpnValue::PRO_GadgeteerPwm_RawPwmVelocity: return "PRO_GadgeteerPwm_RawPwmVelocity";
851 case SpnValue::CANdle_General_SupplyVoltage: return "CANdle_General_SupplyVoltage";
852 case SpnValue::CANdle_General_FiveVRailVoltage: return "CANdle_General_FiveVRailVoltage";
853 case SpnValue::CANdle_General_OutputCurrent: return "CANdle_General_OutputCurrent";
854 case SpnValue::CANdle_General_DeviceTemp: return "CANdle_General_DeviceTemp";
855 case SpnValue::CANdle_General_VBatModulation: return "CANdle_General_VBatModulation";
856 case SpnValue::CANdle_General_MaxSimulAnimCount: return "CANdle_General_MaxSimulAnimCount";
857 case SpnValue::Config_LED_StripType: return "Config_LED_StripType";
858 case SpnValue::Config_LED_BrightnessScalar: return "Config_LED_BrightnessScalar";
859 case SpnValue::Config_LED_LossOfSignalBehavior: return "Config_LED_LossOfSignalBehavior";
860 case SpnValue::Config_CANdle_5VRail: return "Config_CANdle_5VRail";
861 case SpnValue::Config_CANdle_VBatOutputMode: return "Config_CANdle_VBatOutputMode";
862 case SpnValue::Config_CANdle_StatusLedWhenActive: return "Config_CANdle_StatusLedWhenActive";
863 case SpnValue::CANdle_Animation0_Type: return "CANdle_Animation0_Type";
864 case SpnValue::CANdle_Animation1_Type: return "CANdle_Animation1_Type";
865 case SpnValue::CANdle_Animation2_Type: return "CANdle_Animation2_Type";
866 case SpnValue::CANdle_Animation3_Type: return "CANdle_Animation3_Type";
867 case SpnValue::CANdle_Animation4_Type: return "CANdle_Animation4_Type";
868 case SpnValue::CANdle_Animation5_Type: return "CANdle_Animation5_Type";
869 case SpnValue::CANdle_Animation6_Type: return "CANdle_Animation6_Type";
870 case SpnValue::CANdle_Animation7_Type: return "CANdle_Animation7_Type";
871 case SpnValue::CANdle_AnimationDirection: return "CANdle_AnimationDirection";
872 case SpnValue::CANdle_LarsonBounceMode: return "CANdle_LarsonBounceMode";
873 case SpnValue::Fault_Hardware: return "Fault_Hardware";
874 case SpnValue::StickyFault_Hardware: return "StickyFault_Hardware";
875 case SpnValue::ClearStickyFault_Hardware: return "ClearStickyFault_Hardware";
876 case SpnValue::Fault_ProcTemp: return "Fault_ProcTemp";
877 case SpnValue::StickyFault_ProcTemp: return "StickyFault_ProcTemp";
878 case SpnValue::ClearStickyFault_ProcTemp: return "ClearStickyFault_ProcTemp";
879 case SpnValue::Fault_DeviceTemp: return "Fault_DeviceTemp";
880 case SpnValue::StickyFault_DeviceTemp: return "StickyFault_DeviceTemp";
881 case SpnValue::ClearStickyFault_DeviceTemp: return "ClearStickyFault_DeviceTemp";
882 case SpnValue::Fault_Undervoltage: return "Fault_Undervoltage";
883 case SpnValue::StickyFault_Undervoltage: return "StickyFault_Undervoltage";
884 case SpnValue::ClearStickyFault_Undervoltage: return "ClearStickyFault_Undervoltage";
885 case SpnValue::Fault_BootDuringEnable: return "Fault_BootDuringEnable";
886 case SpnValue::StickyFault_BootDuringEnable: return "StickyFault_BootDuringEnable";
887 case SpnValue::ClearStickyFault_BootDuringEnable: return "ClearStickyFault_BootDuringEnable";
888 case SpnValue::Fault_UnlicensedFeatureInUse: return "Fault_UnlicensedFeatureInUse";
889 case SpnValue::StickyFault_UnlicensedFeatureInUse: return "StickyFault_UnlicensedFeatureInUse";
890 case SpnValue::ClearStickyFault_UnlicensedFeatureInUse: return "ClearStickyFault_UnlicensedFeatureInUse";
891 case SpnValue::Fault_PIGEON2_BootupAccel: return "Fault_PIGEON2_BootupAccel";
892 case SpnValue::StickyFault_PIGEON2_BootupAccel: return "StickyFault_PIGEON2_BootupAccel";
893 case SpnValue::ClearStickyFault_PIGEON2_BootupAccel: return "ClearStickyFault_PIGEON2_BootupAccel";
894 case SpnValue::Fault_PIGEON2_BootupGyros: return "Fault_PIGEON2_BootupGyros";
895 case SpnValue::StickyFault_PIGEON2_BootupGyros: return "StickyFault_PIGEON2_BootupGyros";
896 case SpnValue::ClearStickyFault_PIGEON2_BootupGyros: return "ClearStickyFault_PIGEON2_BootupGyros";
897 case SpnValue::Fault_PIGEON2_BootupMagne: return "Fault_PIGEON2_BootupMagne";
898 case SpnValue::StickyFault_PIGEON2_BootupMagne: return "StickyFault_PIGEON2_BootupMagne";
899 case SpnValue::ClearStickyFault_PIGEON2_BootupMagne: return "ClearStickyFault_PIGEON2_BootupMagne";
900 case SpnValue::Fault_PIGEON2_BootIntoMotion: return "Fault_PIGEON2_BootIntoMotion";
901 case SpnValue::StickyFault_PIGEON2_BootIntoMotion: return "StickyFault_PIGEON2_BootIntoMotion";
902 case SpnValue::ClearStickyFault_PIGEON2_BootIntoMotion: return "ClearStickyFault_PIGEON2_BootIntoMotion";
903 case SpnValue::Fault_PIGEON2_DataAcquiredLate: return "Fault_PIGEON2_DataAcquiredLate";
904 case SpnValue::StickyFault_PIGEON2_DataAcquiredLate: return "StickyFault_PIGEON2_DataAcquiredLate";
905 case SpnValue::ClearStickyFault_PIGEON2_DataAcquiredLate: return "ClearStickyFault_PIGEON2_DataAcquiredLate";
906 case SpnValue::Fault_PIGEON2_LoopTimeSlow: return "Fault_PIGEON2_LoopTimeSlow";
907 case SpnValue::StickyFault_PIGEON2_LoopTimeSlow: return "StickyFault_PIGEON2_LoopTimeSlow";
908 case SpnValue::ClearStickyFault_PIGEON2_LoopTimeSlow: return "ClearStickyFault_PIGEON2_LoopTimeSlow";
909 case SpnValue::Fault_PIGEON2_SaturatedMagne: return "Fault_PIGEON2_SaturatedMagne";
910 case SpnValue::StickyFault_PIGEON2_SaturatedMagne: return "StickyFault_PIGEON2_SaturatedMagne";
911 case SpnValue::ClearStickyFault_PIGEON2_SaturatedMagne: return "ClearStickyFault_PIGEON2_SaturatedMagne";
912 case SpnValue::Fault_PIGEON2_SaturatedAccel: return "Fault_PIGEON2_SaturatedAccel";
913 case SpnValue::StickyFault_PIGEON2_SaturatedAccel: return "StickyFault_PIGEON2_SaturatedAccel";
914 case SpnValue::ClearStickyFault_PIGEON2_SaturatedAccel: return "ClearStickyFault_PIGEON2_SaturatedAccel";
915 case SpnValue::Fault_PIGEON2_SaturatedGyros: return "Fault_PIGEON2_SaturatedGyros";
916 case SpnValue::StickyFault_PIGEON2_SaturatedGyros: return "StickyFault_PIGEON2_SaturatedGyros";
917 case SpnValue::ClearStickyFault_PIGEON2_SaturatedGyros: return "ClearStickyFault_PIGEON2_SaturatedGyros";
918 case SpnValue::Fault_CANCODER_BadMagnet: return "Fault_CANCODER_BadMagnet";
919 case SpnValue::StickyFault_CANCODER_BadMagnet: return "StickyFault_CANCODER_BadMagnet";
920 case SpnValue::ClearStickyFault_CANCODER_BadMagnet: return "ClearStickyFault_CANCODER_BadMagnet";
921 case SpnValue::Fault_TALONFX_BridgeBrownout: return "Fault_TALONFX_BridgeBrownout";
922 case SpnValue::StickyFault_TALONFX_BridgeBrownout: return "StickyFault_TALONFX_BridgeBrownout";
923 case SpnValue::ClearStickyFault_TALONFX_BridgeBrownout: return "ClearStickyFault_TALONFX_BridgeBrownout";
924 case SpnValue::Fault_TALONFX_RemoteSensorReset: return "Fault_TALONFX_RemoteSensorReset";
925 case SpnValue::StickyFault_TALONFX_RemoteSensorReset: return "StickyFault_TALONFX_RemoteSensorReset";
926 case SpnValue::ClearStickyFault_TALONFX_RemoteSensorReset: return "ClearStickyFault_TALONFX_RemoteSensorReset";
927 case SpnValue::Fault_TALONFX_MissingDifferentialFX: return "Fault_TALONFX_MissingDifferentialFX";
928 case SpnValue::StickyFault_TALONFX_MissingDifferentialFX: return "StickyFault_TALONFX_MissingDifferentialFX";
929 case SpnValue::ClearStickyFault_TALONFX_MissingDifferentialFX: return "ClearStickyFault_TALONFX_MissingDifferentialFX";
930 case SpnValue::Fault_TALONFX_RemoteSensorPosOverflow: return "Fault_TALONFX_RemoteSensorPosOverflow";
931 case SpnValue::StickyFault_TALONFX_RemoteSensorPosOverflow: return "StickyFault_TALONFX_RemoteSensorPosOverflow";
932 case SpnValue::ClearStickyFault_TALONFX_RemoteSensorPosOverflow: return "ClearStickyFault_TALONFX_RemoteSensorPosOverflow";
933 case SpnValue::Fault_TALONFX_OverSupplyV: return "Fault_TALONFX_OverSupplyV";
934 case SpnValue::StickyFault_TALONFX_OverSupplyV: return "StickyFault_TALONFX_OverSupplyV";
935 case SpnValue::ClearStickyFault_TALONFX_OverSupplyV: return "ClearStickyFault_TALONFX_OverSupplyV";
936 case SpnValue::Fault_TALONFX_UnstableSupplyV: return "Fault_TALONFX_UnstableSupplyV";
937 case SpnValue::StickyFault_TALONFX_UnstableSupplyV: return "StickyFault_TALONFX_UnstableSupplyV";
938 case SpnValue::ClearStickyFault_TALONFX_UnstableSupplyV: return "ClearStickyFault_TALONFX_UnstableSupplyV";
939 case SpnValue::Fault_TALONFX_ReverseHardLimit: return "Fault_TALONFX_ReverseHardLimit";
940 case SpnValue::StickyFault_TALONFX_ReverseHardLimit: return "StickyFault_TALONFX_ReverseHardLimit";
941 case SpnValue::ClearStickyFault_TALONFX_ReverseHardLimit: return "ClearStickyFault_TALONFX_ReverseHardLimit";
942 case SpnValue::Fault_TALONFX_ForwardHardLimit: return "Fault_TALONFX_ForwardHardLimit";
943 case SpnValue::StickyFault_TALONFX_ForwardHardLimit: return "StickyFault_TALONFX_ForwardHardLimit";
944 case SpnValue::ClearStickyFault_TALONFX_ForwardHardLimit: return "ClearStickyFault_TALONFX_ForwardHardLimit";
945 case SpnValue::Fault_TALONFX_ReverseSoftLimit: return "Fault_TALONFX_ReverseSoftLimit";
946 case SpnValue::StickyFault_TALONFX_ReverseSoftLimit: return "StickyFault_TALONFX_ReverseSoftLimit";
947 case SpnValue::ClearStickyFault_TALONFX_ReverseSoftLimit: return "ClearStickyFault_TALONFX_ReverseSoftLimit";
948 case SpnValue::Fault_TALONFX_ForwardSoftLimit: return "Fault_TALONFX_ForwardSoftLimit";
949 case SpnValue::StickyFault_TALONFX_ForwardSoftLimit: return "StickyFault_TALONFX_ForwardSoftLimit";
950 case SpnValue::ClearStickyFault_TALONFX_ForwardSoftLimit: return "ClearStickyFault_TALONFX_ForwardSoftLimit";
951 case SpnValue::Fault_TALONFX_MissingRemSoftLim: return "Fault_TALONFX_MissingRemSoftLim";
952 case SpnValue::StickyFault_TALONFX_MissingRemSoftLim: return "StickyFault_TALONFX_MissingRemSoftLim";
953 case SpnValue::ClearStickyFault_TALONFX_MissingRemSoftLim: return "ClearStickyFault_TALONFX_MissingRemSoftLim";
954 case SpnValue::Fault_TALONFX_MissingRemHardLim: return "Fault_TALONFX_MissingRemHardLim";
955 case SpnValue::StickyFault_TALONFX_MissingRemHardLim: return "StickyFault_TALONFX_MissingRemHardLim";
956 case SpnValue::ClearStickyFault_TALONFX_MissingRemHardLim: return "ClearStickyFault_TALONFX_MissingRemHardLim";
957 case SpnValue::Fault_TALONFX_MissingRemoteSensor: return "Fault_TALONFX_MissingRemoteSensor";
958 case SpnValue::StickyFault_TALONFX_MissingRemoteSensor: return "StickyFault_TALONFX_MissingRemoteSensor";
959 case SpnValue::ClearStickyFault_TALONFX_MissingRemoteSensor: return "ClearStickyFault_TALONFX_MissingRemoteSensor";
960 case SpnValue::Fault_TALONFX_FusedSensorOutOfSync: return "Fault_TALONFX_FusedSensorOutOfSync";
961 case SpnValue::StickyFault_TALONFX_FusedSensorOutOfSync: return "StickyFault_TALONFX_FusedSensorOutOfSync";
962 case SpnValue::ClearStickyFault_TALONFX_FusedSensorOutOfSync: return "ClearStickyFault_TALONFX_FusedSensorOutOfSync";
963 case SpnValue::Fault_TALONFX_StatorCurrLimit: return "Fault_TALONFX_StatorCurrLimit";
964 case SpnValue::StickyFault_TALONFX_StatorCurrLimit: return "StickyFault_TALONFX_StatorCurrLimit";
965 case SpnValue::ClearStickyFault_TALONFX_StatorCurrLimit: return "ClearStickyFault_TALONFX_StatorCurrLimit";
966 case SpnValue::Fault_TALONFX_SupplyCurrLimit: return "Fault_TALONFX_SupplyCurrLimit";
967 case SpnValue::StickyFault_TALONFX_SupplyCurrLimit: return "StickyFault_TALONFX_SupplyCurrLimit";
968 case SpnValue::ClearStickyFault_TALONFX_SupplyCurrLimit: return "ClearStickyFault_TALONFX_SupplyCurrLimit";
969 case SpnValue::Fault_TALONFX_UsingFusedCCWhileUnlicensed: return "Fault_TALONFX_UsingFusedCCWhileUnlicensed";
970 case SpnValue::StickyFault_TALONFX_UsingFusedCCWhileUnlicensed: return "StickyFault_TALONFX_UsingFusedCCWhileUnlicensed";
971 case SpnValue::ClearStickyFault_TALONFX_UsingFusedCCWhileUnlicensed: return "ClearStickyFault_TALONFX_UsingFusedCCWhileUnlicensed";
972 case SpnValue::Fault_TALONFX_StaticBrakeDisabled: return "Fault_TALONFX_StaticBrakeDisabled";
973 case SpnValue::StickyFault_TALONFX_StaticBrakeDisabled: return "StickyFault_TALONFX_StaticBrakeDisabled";
974 case SpnValue::ClearStickyFault_TALONFX_StaticBrakeDisabled: return "ClearStickyFault_TALONFX_StaticBrakeDisabled";
975 case SpnValue::Fault_TALONFX_BridgeShort: return "Fault_TALONFX_BridgeShort";
976 case SpnValue::StickyFault_TALONFX_BridgeShort: return "StickyFault_TALONFX_BridgeShort";
977 case SpnValue::ClearStickyFault_TALONFX_BridgeShort: return "ClearStickyFault_TALONFX_BridgeShort";
978 case SpnValue::Fault_TALONFX_HallSensorMissing: return "Fault_TALONFX_HallSensorMissing";
979 case SpnValue::StickyFault_TALONFX_HallSensorMissing: return "StickyFault_TALONFX_HallSensorMissing";
980 case SpnValue::ClearStickyFault_TALONFX_HallSensorMissing: return "ClearStickyFault_TALONFX_HallSensorMissing";
981 case SpnValue::Fault_TALONFX_DriveDisabledHallSensor: return "Fault_TALONFX_DriveDisabledHallSensor";
982 case SpnValue::StickyFault_TALONFX_DriveDisabledHallSensor: return "StickyFault_TALONFX_DriveDisabledHallSensor";
983 case SpnValue::ClearStickyFault_TALONFX_DriveDisabledHallSensor: return "ClearStickyFault_TALONFX_DriveDisabledHallSensor";
984 case SpnValue::Fault_TALONFX_MotorTempSensorMissing: return "Fault_TALONFX_MotorTempSensorMissing";
985 case SpnValue::StickyFault_TALONFX_MotorTempSensorMissing: return "StickyFault_TALONFX_MotorTempSensorMissing";
986 case SpnValue::ClearStickyFault_TALONFX_MotorTempSensorMissing: return "ClearStickyFault_TALONFX_MotorTempSensorMissing";
987 case SpnValue::Fault_TALONFX_MotorTempSensorTooHot: return "Fault_TALONFX_MotorTempSensorTooHot";
988 case SpnValue::StickyFault_TALONFX_MotorTempSensorTooHot: return "StickyFault_TALONFX_MotorTempSensorTooHot";
989 case SpnValue::ClearStickyFault_TALONFX_MotorTempSensorTooHot: return "ClearStickyFault_TALONFX_MotorTempSensorTooHot";
990 case SpnValue::Fault_CANDI_5V: return "Fault_CANDI_5V";
991 case SpnValue::StickyFault_CANDI_5V: return "StickyFault_CANDI_5V";
992 case SpnValue::ClearStickyFault_CANDI_5V: return "ClearStickyFault_CANDI_5V";
993 case SpnValue::Fault_CANDLE_OVERVOLTAGE: return "Fault_CANDLE_OVERVOLTAGE";
994 case SpnValue::StickyFault_CANDLE_OVERVOLTAGE: return "StickyFault_CANDLE_OVERVOLTAGE";
995 case SpnValue::ClearStickyFault_CANDLE_OVERVOLTAGE: return "ClearStickyFault_CANDLE_OVERVOLTAGE";
996 case SpnValue::Fault_CANDLE_5V_TOO_HIGH: return "Fault_CANDLE_5V_TOO_HIGH";
997 case SpnValue::StickyFault_CANDLE_5V_TOO_HIGH: return "StickyFault_CANDLE_5V_TOO_HIGH";
998 case SpnValue::ClearStickyFault_CANDLE_5V_TOO_HIGH: return "ClearStickyFault_CANDLE_5V_TOO_HIGH";
999 case SpnValue::Fault_CANDLE_5V_TOO_LOW: return "Fault_CANDLE_5V_TOO_LOW";
1000 case SpnValue::StickyFault_CANDLE_5V_TOO_LOW: return "StickyFault_CANDLE_5V_TOO_LOW";
1001 case SpnValue::ClearStickyFault_CANDLE_5V_TOO_LOW: return "ClearStickyFault_CANDLE_5V_TOO_LOW";
1002 case SpnValue::Fault_CANDLE_THERMAL: return "Fault_CANDLE_THERMAL";
1003 case SpnValue::StickyFault_CANDLE_THERMAL: return "StickyFault_CANDLE_THERMAL";
1004 case SpnValue::ClearStickyFault_CANDLE_THERMAL: return "ClearStickyFault_CANDLE_THERMAL";
1005 case SpnValue::Fault_CANDLE_SOFTWARE_FUSE: return "Fault_CANDLE_SOFTWARE_FUSE";
1006 case SpnValue::StickyFault_CANDLE_SOFTWARE_FUSE: return "StickyFault_CANDLE_SOFTWARE_FUSE";
1007 case SpnValue::ClearStickyFault_CANDLE_SOFTWARE_FUSE: return "ClearStickyFault_CANDLE_SOFTWARE_FUSE";
1008 case SpnValue::Fault_CANDLE_SHORT_CIRCUIT: return "Fault_CANDLE_SHORT_CIRCUIT";
1009 case SpnValue::StickyFault_CANDLE_SHORT_CIRCUIT: return "StickyFault_CANDLE_SHORT_CIRCUIT";
1010 case SpnValue::ClearStickyFault_CANDLE_SHORT_CIRCUIT: return "ClearStickyFault_CANDLE_SHORT_CIRCUIT";
1011 default:
1012 return "Invalid Value";
1013 }
1014 }
1015
1016 /**
1017 * \brief Gets the API name for this enum
1018 *
1019 * \returns API name of this enum
1020 */
1021 std::string GetName() const
1022 {
1023 switch (value)
1024 {
1025 case SpnValue::TalonFX_System_State: return "System_State";
1026 case SpnValue::Startup_ResetFlags: return "ResetFlags";
1027 case SpnValue::Version_Major: return "VersionMajor";
1028 case SpnValue::Version_Minor: return "VersionMinor";
1029 case SpnValue::Version_Bugfix: return "VersionBugfix";
1030 case SpnValue::Version_Build: return "VersionBuild";
1031 case SpnValue::Version_Full: return "Version";
1032 case SpnValue::Licensing_IsProLicensed: return "IsPROLicensed";
1033 case SpnValue::Licensing_IsSeasonPassed: return "Licensing_IsSeasonPassed";
1034 case SpnValue::CustomParam0: return "CustomParam0";
1035 case SpnValue::CustomParam1: return "CustomParam1";
1036 case SpnValue::CANcoder_SensorDirection: return "SensorDirection";
1037 case SpnValue::FrcLock: return "FrcLock";
1038 case SpnValue::RobotEnabled: return "RobotEnable";
1039 case SpnValue::LED1_OnColor: return "Led1OnColor";
1040 case SpnValue::LED1_OffColor: return "Led1OffColor";
1041 case SpnValue::LED2_OnColor: return "Led2OnColor";
1042 case SpnValue::LED2_OffColor: return "Led2OffColor";
1043 case SpnValue::AllFaults: return "FaultField";
1044 case SpnValue::AllStickyFaults: return "StickyFaultField";
1045 case SpnValue::Pigeon2UseCompass: return "EnableCompass";
1046 case SpnValue::Pigeon2DisableTemperatureCompensation: return "DisableTemperatureCompensation";
1047 case SpnValue::Pigeon2DisableNoMotionCalibration: return "DisableNoMotionCalibration";
1048 case SpnValue::Pigeon2MountPoseYaw: return "MountPoseYaw";
1049 case SpnValue::Pigeon2MountPosePitch: return "MountPosePitch";
1050 case SpnValue::Pigeon2MountPoseRoll: return "MountPoseRoll";
1051 case SpnValue::Pigeon2GyroScalarX: return "GyroScalarX";
1052 case SpnValue::Pigeon2GyroScalarY: return "GyroScalarY";
1053 case SpnValue::Pigeon2GyroScalarZ: return "GyroScalarZ";
1054 case SpnValue::Pigeon2Yaw: return "Yaw";
1055 case SpnValue::Pigeon2Pitch: return "Pitch";
1056 case SpnValue::Pigeon2Roll: return "Roll";
1057 case SpnValue::Pigeon2QuatW: return "QuatW";
1058 case SpnValue::Pigeon2QuatX: return "QuatX";
1059 case SpnValue::Pigeon2QuatY: return "QuatY";
1060 case SpnValue::Pigeon2QuatZ: return "QuatZ";
1061 case SpnValue::Pigeon2GravityVectorX: return "GravityVectorX";
1062 case SpnValue::Pigeon2GravityVectorY: return "GravityVectorY";
1063 case SpnValue::Pigeon2GravityVectorZ: return "GravityVectorZ";
1064 case SpnValue::Pigeon2Temperature: return "Temperature";
1065 case SpnValue::Pigeon2NoMotionCalEnabled: return "NoMotionEnabled";
1066 case SpnValue::Pigeon2NoMotionCount: return "NoMotionCount";
1067 case SpnValue::Pigeon2TempCompDisabled: return "TemperatureCompensationDisabled";
1068 case SpnValue::Pigeon2UpTime: return "UpTime";
1069 case SpnValue::Pigeon2AccumGyroX: return "AccumGyroX";
1070 case SpnValue::Pigeon2AccumGyroY: return "AccumGyroY";
1071 case SpnValue::Pigeon2AccumGyroZ: return "AccumGyroZ";
1072 case SpnValue::Pigeon2AngularVelocityXWorld: return "AngularVelocityXWorld";
1073 case SpnValue::Pigeon2AngularVelocityYWorld: return "AngularVelocityYWorld";
1074 case SpnValue::Pigeon2AngularVelocityZWorld: return "AngularVelocityZWorld";
1075 case SpnValue::Pigeon2AccelerationX: return "AccelerationX";
1076 case SpnValue::Pigeon2AccelerationY: return "AccelerationY";
1077 case SpnValue::Pigeon2AccelerationZ: return "AccelerationZ";
1078 case SpnValue::Pigeon2_SupplyVoltage: return "SupplyVoltage";
1079 case SpnValue::Pigeon2AngularVelocityX: return "AngularVelocityXDevice";
1080 case SpnValue::Pigeon2AngularVelocityY: return "AngularVelocityYDevice";
1081 case SpnValue::Pigeon2AngularVelocityZ: return "AngularVelocityZDevice";
1082 case SpnValue::Pigeon2MagneticFieldX: return "MagneticFieldX";
1083 case SpnValue::Pigeon2MagneticFieldY: return "MagneticFieldY";
1084 case SpnValue::Pigeon2MagneticFieldZ: return "MagneticFieldZ";
1085 case SpnValue::Pigeon2RawMagneticFieldX: return "RawMagneticFieldX";
1086 case SpnValue::Pigeon2RawMagneticFieldY: return "RawMagneticFieldY";
1087 case SpnValue::Pigeon2RawMagneticFieldZ: return "RawMagneticFieldZ";
1088 case SpnValue::CANCoder_MagnetOffset: return "MagnetOffset";
1089 case SpnValue::TalonFX_SetSensorPosition: return "SetPosition";
1090 case SpnValue::CANcoder_SetSensorPosition: return "SetPosition";
1091 case SpnValue::Pigeon2_SetYaw: return "SetYaw";
1092 case SpnValue::DeviceEnabled: return "DeviceEnable";
1093 case SpnValue::PRO_MotorOutput_MotorVoltage: return "MotorVoltage";
1094 case SpnValue::ForwardLimit: return "ForwardLimit";
1095 case SpnValue::ReverseLimit: return "ReverseLimit";
1096 case SpnValue::PRO_MotorOutput_RotorPolarity: return "AppliedRotorPolarity";
1097 case SpnValue::PRO_MotorOutput_DutyCycle: return "DutyCycle";
1098 case SpnValue::PRO_MotorOutput_TorqueCurrent: return "TorqueCurrent";
1099 case SpnValue::PRO_SupplyAndTemp_StatorCurrent: return "StatorCurrent";
1100 case SpnValue::PRO_SupplyAndTemp_SupplyCurrent: return "SupplyCurrent";
1101 case SpnValue::PRO_SupplyAndTemp_SupplyVoltage: return "SupplyVoltage";
1102 case SpnValue::PRO_SupplyAndTemp_DeviceTemp: return "DeviceTemp";
1103 case SpnValue::PRO_SupplyAndTemp_ProcessorTemp: return "ProcessorTemp";
1104 case SpnValue::PRO_RotorPosAndVel_Velocity: return "RotorVelocity";
1105 case SpnValue::PRO_RotorPosAndVel_Position: return "RotorPosition";
1106 case SpnValue::PRO_PosAndVel_Velocity: return "Velocity";
1107 case SpnValue::PRO_PosAndVel_Position: return "Position";
1108 case SpnValue::PRO_PosAndVel_Acceleration: return "Acceleration";
1109 case SpnValue::PRO_PIDStateEnables_IntegratedAccum_DC: return "PIDDutyCycle_IntegratedAccum";
1110 case SpnValue::PRO_PIDStateEnables_IntegratedAccum_V: return "PIDMotorVoltage_IntegratedAccum";
1111 case SpnValue::PRO_PIDStateEnables_IntegratedAccum_A: return "PIDTorqueCurrent_IntegratedAccum";
1112 case SpnValue::PRO_PIDStateEnables_FeedForward_DC: return "PIDDutyCycle_FeedForward";
1113 case SpnValue::PRO_PIDStateEnables_FeedForward_V: return "PIDMotorVoltage_FeedForward";
1114 case SpnValue::PRO_PIDStateEnables_FeedForward_A: return "PIDTorqueCurrent_FeedForward";
1115 case SpnValue::TalonFX_ControlMode: return "ControlMode";
1116 case SpnValue::ExternalMotorTempStatus: return "ExternalMotorTempStatus";
1117 case SpnValue::ExternalMotorTemp: return "ExternalMotorTemp";
1118 case SpnValue::PRO_PIDStateEnables_IsMotionMagicRunning: return "MotionMagicIsRunning";
1119 case SpnValue::PRO_PIDStateEnables_RobotEnable: return "RobotEnable";
1120 case SpnValue::PRO_PIDStateEnables_DeviceEnable: return "DeviceEnable";
1121 case SpnValue::PRO_PIDRefPIDErr_PIDRef_Position: return "PIDPosition_Reference";
1122 case SpnValue::PRO_PIDRefPIDErr_PIDRef_Velocity: return "PIDVelocity_Reference";
1123 case SpnValue::PRO_PIDRefPIDErr_PIDErr_Position: return "PIDPosition_ClosedLoopError";
1124 case SpnValue::PRO_PIDRefPIDErr_PIDErr_Velocity: return "PIDVelocity_ClosedLoopError";
1125 case SpnValue::PRO_PIDRefPIDErr_ClosedLoopMode: return "PIDRefPIDErr_ClosedLoopMode";
1126 case SpnValue::PRO_PIDOutput_PIDOutputMode: return "PIDOutput_PIDOutputMode";
1127 case SpnValue::PRO_PIDOutput_ProportionalOutput_DC: return "PIDDutyCycle_ProportionalOutput";
1128 case SpnValue::PRO_PIDOutput_ProportionalOutput_V: return "PIDMotorVoltage_ProportionalOutput";
1129 case SpnValue::PRO_PIDOutput_ProportionalOutput_A: return "PIDTorqueCurrent_ProportionalOutput";
1130 case SpnValue::PRO_PIDOutput_DerivativeOutput_DC: return "PIDDutyCycle_DerivativeOutput";
1131 case SpnValue::PRO_PIDOutput_DerivativeOutput_V: return "PIDMotorVoltage_DerivativeOutput";
1132 case SpnValue::PRO_PIDOutput_DerivativeOutput_A: return "PIDTorqueCurrent_DerivativeOutput";
1133 case SpnValue::PRO_PIDOutput_Output_DC: return "PIDDutyCycle_Output";
1134 case SpnValue::PRO_PIDOutput_Output_V: return "PIDMotorVoltage_Output";
1135 case SpnValue::PRO_PIDOutput_Output_A: return "PIDTorqueCurrent_Output";
1136 case SpnValue::PRO_PIDOutput_Slot: return "ClosedLoopSlot";
1137 case SpnValue::PRO_PIDRefSlopeECUTime_ReferenceSlope_Position: return "PIDPosition_ReferenceSlope";
1138 case SpnValue::PRO_PIDRefSlopeECUTime_ReferenceSlope_Velocity: return "PIDVelocity_ReferenceSlope";
1139 case SpnValue::PRO_PIDRefSlopeECUTime_ClosedLoopMode: return "PIDRefSlopeECUTime_ClosedLoopMode";
1140 case SpnValue::TalonFX_MotorOutputStatus: return "MotorOutputStatus";
1141 case SpnValue::PRO_MotorOutput_PIDState_Diff_DutyCycle: return "DifferentialDutyCycle";
1142 case SpnValue::PRO_MotorOutput_PIDState_Diff_TorqueCurrent: return "DifferentialTorqueCurrent";
1143 case SpnValue::TalonFX_DifferentialControlMode: return "DifferentialControlMode";
1144 case SpnValue::PRO_MotorOutput_PIDState_Diff_IntegratedAccum_DC: return "Differential_PIDDutyCycle_IntegratedAccum";
1145 case SpnValue::PRO_MotorOutput_PIDState_Diff_IntegratedAccum_V: return "Differential_PIDMotorVoltage_IntegratedAccum";
1146 case SpnValue::PRO_MotorOutput_PIDState_Diff_IntegratedAccum_A: return "Differential_PIDTorqueCurrent_IntegratedAccum";
1147 case SpnValue::PRO_MotorOutput_PIDState_Diff_FeedForward_DC: return "Differential_PIDDutyCycle_FeedForward";
1148 case SpnValue::PRO_MotorOutput_PIDState_Diff_FeedForward_V: return "Differential_PIDMotorVoltage_FeedForward";
1149 case SpnValue::PRO_MotorOutput_PIDState_Diff_FeedForward_A: return "Differential_PIDTorqueCurrent_FeedForward";
1150 case SpnValue::PRO_AvgPosAndVel_Velocity: return "DifferentialAverageVelocity";
1151 case SpnValue::PRO_AvgPosAndVel_Position: return "DifferentialAveragePosition";
1152 case SpnValue::PRO_DiffPosAndVel_Velocity: return "DifferentialDifferenceVelocity";
1153 case SpnValue::PRO_DiffPosAndVel_Position: return "DifferentialDifferencePosition";
1154 case SpnValue::PRO_DiffPIDRefPIDErr_PIDRef_Position: return "Differential_PIDPosition_Reference";
1155 case SpnValue::PRO_DiffPIDRefPIDErr_PIDRef_Velocity: return "Differential_PIDVelocity_Reference";
1156 case SpnValue::PRO_DiffPIDRefPIDErr_PIDErr_Position: return "Differential_PIDPosition_ClosedLoopError";
1157 case SpnValue::PRO_DiffPIDRefPIDErr_PIDErr_Velocity: return "Differential_PIDVelocity_ClosedLoopError";
1158 case SpnValue::PRO_DiffPIDRefPIDErr_ClosedLoopMode: return "DiffPIDRefPIDErr_ClosedLoopMode";
1159 case SpnValue::PRO_DiffPIDOutput_PIDOutputMode: return "DiffPIDOutput_PIDOutputMode";
1160 case SpnValue::PRO_DiffPIDOutput_ProportionalOutput_DC: return "Differential_PIDDutyCycle_ProportionalOutput";
1161 case SpnValue::PRO_DiffPIDOutput_ProportionalOutput_V: return "Differential_PIDMotorVoltage_ProportionalOutput";
1162 case SpnValue::PRO_DiffPIDOutput_ProportionalOutput_A: return "Differential_PIDTorqueCurrent_ProportionalOutput";
1163 case SpnValue::PRO_DiffPIDOutput_DerivativeOutput_DC: return "Differential_PIDDutyCycle_DerivativeOutput";
1164 case SpnValue::PRO_DiffPIDOutput_DerivativeOutput_V: return "DiffPIDMotorVoltage_DerivativeOutput";
1165 case SpnValue::PRO_DiffPIDOutput_DerivativeOutput_A: return "Differential_PIDTorqueCurrent_DerivativeOutput";
1166 case SpnValue::PRO_DiffPIDOutput_Output_DC: return "Differential_PIDDutyCycle_Output";
1167 case SpnValue::PRO_DiffPIDOutput_Output_V: return "Differential_PIDMotorVoltage_Output";
1168 case SpnValue::PRO_DiffPIDOutput_Output_A: return "Differential_PIDTorqueCurrent_Output";
1169 case SpnValue::PRO_DiffPIDOutput_Slot: return "DifferentialClosedLoopSlot";
1170 case SpnValue::PRO_DiffPIDRefSlopeECUTime_ReferenceSlope_Position: return "Differential_PIDPosition_ReferenceSlope";
1171 case SpnValue::PRO_DiffPIDRefSlopeECUTime_ReferenceSlope_Velocity: return "Differential_PIDVelocity_ReferenceSlope";
1172 case SpnValue::PRO_DiffPIDRefSlopeECUTime_ClosedLoopMode: return "DiffPIDRefSlopeECUTime_ClosedLoopMode";
1173 case SpnValue::TalonFX_MotorConstants_kT: return "MotorKT";
1174 case SpnValue::TalonFX_MotorConstants_kV: return "MotorKV";
1175 case SpnValue::TalonFX_MotorConstants_StallCurrent: return "MotorStallCurrent";
1176 case SpnValue::Slot0_kP: return "kP";
1177 case SpnValue::Slot0_kI: return "kI";
1178 case SpnValue::Slot0_kD: return "kD";
1179 case SpnValue::Slot0_kS: return "kS";
1180 case SpnValue::Slot0_kV: return "kV";
1181 case SpnValue::Slot0_kA: return "kA";
1182 case SpnValue::Slot0_kG: return "kG";
1183 case SpnValue::Slot0_kG_Type: return "GravityType";
1184 case SpnValue::Slot1_kP: return "kP";
1185 case SpnValue::Slot1_kI: return "kI";
1186 case SpnValue::Slot1_kD: return "kD";
1187 case SpnValue::Slot1_kS: return "kS";
1188 case SpnValue::Slot1_kV: return "kV";
1189 case SpnValue::Slot1_kA: return "kA";
1190 case SpnValue::Slot1_kG: return "kG";
1191 case SpnValue::Slot1_kG_Type: return "GravityType";
1192 case SpnValue::Slot2_kP: return "kP";
1193 case SpnValue::Slot2_kI: return "kI";
1194 case SpnValue::Slot2_kD: return "kD";
1195 case SpnValue::Slot2_kS: return "kS";
1196 case SpnValue::Slot2_kV: return "kV";
1197 case SpnValue::Slot2_kA: return "kA";
1198 case SpnValue::Slot2_kG: return "kG";
1199 case SpnValue::Slot2_kG_Type: return "GravityType";
1200 case SpnValue::Config_Inverted: return "Inverted";
1201 case SpnValue::Config_SupplyVLowpassTau: return "SupplyVoltageTimeConstant";
1202 case SpnValue::Config_BeepOnBoot: return "BeepOnBoot";
1203 case SpnValue::Config_NeutralMode: return "NeutralMode";
1204 case SpnValue::Config_DutyCycleNeutralDB: return "DutyCycleNeutralDeadband";
1205 case SpnValue::Config_StatorCurrentLimit: return "StatorCurrentLimit";
1206 case SpnValue::Config_StatorCurrLimitEn: return "StatorCurrentLimitEnable";
1207 case SpnValue::Config_SupplyCurrentLimit: return "SupplyCurrentLimit";
1208 case SpnValue::Config_SupplyCurrLimitEn: return "SupplyCurrentLimitEnable";
1209 case SpnValue::Config_PeakForwardDC: return "PeakForwardDutyCycle";
1210 case SpnValue::Config_PeakReverseDC: return "PeakReverseDutyCycle";
1211 case SpnValue::Config_PeakForwardV: return "PeakForwardVoltage";
1212 case SpnValue::Config_PeakReverseV: return "PeakReverseVoltage";
1213 case SpnValue::Config_PeakForTorqCurr: return "PeakForwardTorqueCurrent";
1214 case SpnValue::Config_PeakRevTorqCurr: return "PeakReverseTorqueCurrent";
1215 case SpnValue::Config_TorqueNeutralDB: return "TorqueNeutralDeadband";
1216 case SpnValue::Config_FeedbackRotorOffset: return "FeedbackRotorOffset";
1217 case SpnValue::Config_SensorToMechanismRatio: return "SensorToMechanismRatio";
1218 case SpnValue::Config_RotorToSensorRatio: return "RotorToSensorRatio";
1219 case SpnValue::Config_FeedbackSensorSource: return "FeedbackSensorSource";
1220 case SpnValue::Config_FeedbackRemoteSensorID: return "FeedbackRemoteSensorID";
1221 case SpnValue::Config_DutyCycleOpenLoopRampPeriod: return "DutyCycleOpenLoopRampPeriod";
1222 case SpnValue::Config_VoltageOpenLoopRampPeriod: return "VoltageOpenLoopRampPeriod";
1223 case SpnValue::Config_TorqueOpenLoopRampPeriod: return "TorqueOpenLoopRampPeriod";
1224 case SpnValue::Config_DutyCycleClosedLoopRampPeriod: return "DutyCycleClosedLoopRampPeriod";
1225 case SpnValue::Config_VoltageClosedLoopRampPeriod: return "VoltageClosedLoopRampPeriod";
1226 case SpnValue::Config_TorqueClosedLoopRampPeriod: return "TorqueClosedLoopRampPeriod";
1227 case SpnValue::Config_ForwardLimitType: return "ForwardLimitType";
1228 case SpnValue::Config_ForwardLimitAutosetPosEnable: return "ForwardLimitAutosetPositionEnable";
1229 case SpnValue::Config_ForwardLimitAutosetPosValue: return "ForwardLimitAutosetPositionValue";
1230 case SpnValue::Config_ForwardLimitEnable: return "ForwardLimitEnable";
1231 case SpnValue::Config_ForwardLimitSource: return "ForwardLimitSource";
1232 case SpnValue::Config_ForwardLimitRemoteSensorID: return "ForwardLimitRemoteSensorID";
1233 case SpnValue::Config_ReverseLimitType: return "ReverseLimitType";
1234 case SpnValue::Config_ReverseLimitAutosetPosEnable: return "ReverseLimitAutosetPositionEnable";
1235 case SpnValue::Config_ReverseLimitAutosetPosValue: return "ReverseLimitAutosetPositionValue";
1236 case SpnValue::Config_ReverseLimitEnable: return "ReverseLimitEnable";
1237 case SpnValue::Config_ReverseLimitSource: return "ReverseLimitSource";
1238 case SpnValue::Config_ReverseLimitRemoteSensorID: return "ReverseLimitRemoteSensorID";
1239 case SpnValue::Config_ForwardSoftLimitEnable: return "ForwardSoftLimitEnable";
1240 case SpnValue::Config_ReverseSoftLimitEnable: return "ReverseSoftLimitEnable";
1241 case SpnValue::Config_ForwardSoftLimitThreshold: return "ForwardSoftLimitThreshold";
1242 case SpnValue::Config_ReverseSoftLimitThreshold: return "ReverseSoftLimitThreshold";
1243 case SpnValue::Config_MotionMagicCruiseVelocity: return "MotionMagicCruiseVelocity";
1244 case SpnValue::Config_MotionMagicAcceleration: return "MotionMagicAcceleration";
1245 case SpnValue::Config_MotionMagicJerk: return "MotionMagicJerk";
1246 case SpnValue::Config_MotionMagicExpo_kV: return "MotionMagicExpo_kV";
1247 case SpnValue::Config_MotionMagicExpo_kA: return "MotionMagicExpo_kA";
1248 case SpnValue::Config_PeakDiffDC: return "PeakDifferentialDutyCycle";
1249 case SpnValue::Config_PeakDiffV: return "PeakDifferentialVoltage";
1250 case SpnValue::Config_PeakDiffTorqCurr: return "PeakDifferentialTorqueCurrent";
1251 case SpnValue::CANcoder_Velocity: return "Velocity";
1252 case SpnValue::CANcoder_Position: return "Position";
1253 case SpnValue::CANcoder_AbsPosition: return "AbsolutePosition";
1254 case SpnValue::CANCoder_RawVel: return "UnfilteredVelocity";
1255 case SpnValue::CANCoder_RawPos: return "PositionSinceBoot";
1256 case SpnValue::CANCoder_SupplyVoltage: return "SupplyVoltage";
1257 case SpnValue::CANcoder_MagHealth: return "MagnetHealth";
1258 case SpnValue::SPN_ClearStickyFaults: return "ClearStickyFaults";
1259 case SpnValue::PRO_MotorOutput_BridgeType_Public: return "BridgeOutput";
1260 case SpnValue::Config_ContinuousWrap: return "ContinuousWrap";
1261 case SpnValue::Config_SupplyCurrentLowerLimit: return "SupplyCurrentLowerLimit";
1262 case SpnValue::Config_SupplyCurrentLowerTime: return "SupplyCurrentLowerTime";
1263 case SpnValue::Config_DifferentialSensorSource: return "DifferentialSensorSource";
1264 case SpnValue::Config_DifferentialTalonFXSensorID: return "DifferentialTalonFXSensorID";
1265 case SpnValue::Config_DifferentialRemoteSensorID: return "DifferentialRemoteSensorID";
1266 case SpnValue::Config_BeepOnConfig: return "BeepOnConfig";
1267 case SpnValue::Config_AllowMusicDurDisable: return "AllowMusicDurDisable";
1268 case SpnValue::Compliancy_Version: return "Compliancy";
1269 case SpnValue::Version_IsProLicensed: return "IsProLicensed";
1270 case SpnValue::PRO_SupplyAndTemp_DeviceTemp2: return "AncillaryDeviceTemp";
1271 case SpnValue::Slot0_kS_Sign: return "StaticFeedforwardSign";
1272 case SpnValue::Slot1_kS_Sign: return "StaticFeedforwardSign";
1273 case SpnValue::Slot2_kS_Sign: return "StaticFeedforwardSign";
1274 case SpnValue::TalonFX_ConnectedMotor: return "ConnectedMotor";
1275 case SpnValue::CANrange_SupplyVoltage: return "SupplyVoltage";
1276 case SpnValue::CANrange_Distance_Meters: return "Distance";
1277 case SpnValue::CANrange_MeasTime: return "MeasurementTime";
1278 case SpnValue::CANrange_SignalStrength: return "SignalStrength";
1279 case SpnValue::CANrange_ProximityDetected: return "IsDetected";
1280 case SpnValue::CANrange_MeasState: return "MeasurementHealth";
1281 case SpnValue::CANrange_AmbientSignal: return "AmbientSignal";
1282 case SpnValue::CANrange_DistanceStdDev: return "DistanceStdDev";
1283 case SpnValue::CANrange_RealFOVCenterX: return "RealFOVCenterX";
1284 case SpnValue::CANrange_RealFOVCenterY: return "RealFOVCenterY";
1285 case SpnValue::CANrange_RealFOVRangeX: return "RealFOVRangeX";
1286 case SpnValue::CANrange_RealFOVRangeY: return "RealFOVRangeY";
1287 case SpnValue::CANrange_UpdateMode: return "UpdateMode";
1288 case SpnValue::CANrange_UpdateFreq: return "UpdateFrequency";
1289 case SpnValue::CANrange_ProximityThreshold: return "ProximityThreshold";
1290 case SpnValue::CANrange_ProximityHysteresis: return "ProximityHysteresis";
1291 case SpnValue::CANrange_MinSigStrengthForValidMeas: return "MinSignalStrengthForValidMeasurement";
1292 case SpnValue::CANrange_FOVCenterX: return "FOVCenterX";
1293 case SpnValue::CANrange_FOVCenterY: return "FOVCenterY";
1294 case SpnValue::CANrange_FOVRangeX: return "FOVRangeX";
1295 case SpnValue::CANrange_FOVRangeY: return "FOVRangeY";
1296 case SpnValue::Config_ControlTimesyncFreq: return "ControlTimesyncFreqHz";
1297 case SpnValue::Config_VelocityFilterTimeConstant: return "VelocityFilterTimeConstant";
1298 case SpnValue::Config_AdvancedHallSupport: return "AdvancedHallSupport";
1299 case SpnValue::Config_MotorType: return "MotorArrangement";
1300 case SpnValue::CANdi_Pin1State: return "S1State";
1301 case SpnValue::CANdi_Pin2State: return "S2State";
1302 case SpnValue::CANdi_QuadPosition: return "QuadraturePosition";
1303 case SpnValue::CANdi_Pwm1_RiseToRise: return "PWM1RiseToRise";
1304 case SpnValue::CANdi_Pwm1_Position: return "PWM1Position";
1305 case SpnValue::CANdi_Pwm1_Velocity: return "PWM1Velocity";
1306 case SpnValue::CANdi_Pwm2_RiseToRise: return "PWM2RiseToRise";
1307 case SpnValue::CANdi_Pwm2_Position: return "PWM2Position";
1308 case SpnValue::CANdi_Overcurrent: return "Overcurrent";
1309 case SpnValue::CANdi_VSense: return "SupplyVoltage";
1310 case SpnValue::CANdi_OutputCurrent: return "OutputCurrent";
1311 case SpnValue::CANdi_S1FloatState: return "S1FloatState";
1312 case SpnValue::CANdi_S2FloatState: return "S2FloatState";
1313 case SpnValue::Config_AbsoluteSensorOffset: return "AbsoluteSensorOffset";
1314 case SpnValue::Config_ExternalFeedbackSensorSource: return "ExternalFeedbackSensorSource";
1315 case SpnValue::Config_SensorPhase: return "SensorPhase";
1316 case SpnValue::Config_QuadratureEdgesPerRotation: return "QuadratureEdgesPerRotation";
1317 case SpnValue::Config_AbsoluteSensorDiscontinuityPoint: return "AbsoluteSensorDiscontinuityPoint";
1318 case SpnValue::CANdi_Pwm2_Velocity: return "PWM2Velocity";
1319 case SpnValue::TalonFXS_5VRailVoltage: return "FiveVRailVoltage";
1320 case SpnValue::TalonFXS_Gadgeteer_G3: return "AnalogVoltage";
1321 case SpnValue::CANdi_QuadVelocity: return "QuadratureVelocity";
1322 case SpnValue::Config_PWM1_AbsoluteSensorOffset: return "AbsoluteSensorOffset";
1323 case SpnValue::Config_PWM1_AbsoluteSensorDiscontinuityPoint: return "AbsoluteSensorDiscontinuityPoint";
1324 case SpnValue::Config_PWM1_SensorDirection: return "SensorDirection";
1325 case SpnValue::Config_PWM2_AbsoluteSensorOffset: return "AbsoluteSensorOffset";
1326 case SpnValue::Config_PWM2_AbsoluteSensorDiscontinuityPoint: return "AbsoluteSensorDiscontinuityPoint";
1327 case SpnValue::Config_PWM2_SensorDirection: return "SensorDirection";
1328 case SpnValue::Config_Quad_SensorDirection: return "SensorDirection";
1329 case SpnValue::CANdi_SetQuadPosition: return "SetQuadraturePosition";
1330 case SpnValue::Config_S1_CloseState: return "S1CloseState";
1331 case SpnValue::Config_S2_CloseState: return "S2CloseState";
1332 case SpnValue::CANdi_S1Closed: return "S1Closed";
1333 case SpnValue::CANdi_S2Closed: return "S2Closed";
1334 case SpnValue::Config_BrushedMotorWiring: return "BrushedMotorWiring";
1335 case SpnValue::PRO_GadgeteerQuad_RawQuadraturePosition: return "RawQuadraturePosition";
1336 case SpnValue::PRO_GadgeteerQuad_RawQuadratureVelocity: return "RawQuadratureVelocity";
1337 case SpnValue::PRO_GadgeteerPwm_RawPwmPosition: return "RawPulseWidthPosition";
1338 case SpnValue::PRO_GadgeteerPwm_RawPwmVelocity: return "RawPulseWidthVelocity";
1339 case SpnValue::CANdle_General_SupplyVoltage: return "SupplyVoltage";
1340 case SpnValue::CANdle_General_FiveVRailVoltage: return "FiveVRailVoltage";
1341 case SpnValue::CANdle_General_OutputCurrent: return "OutputCurrent";
1342 case SpnValue::CANdle_General_DeviceTemp: return "DeviceTemp";
1343 case SpnValue::CANdle_General_VBatModulation: return "VBatModulation";
1344 case SpnValue::CANdle_General_MaxSimulAnimCount: return "MaxSimultaneousAnimationCount";
1345 case SpnValue::Config_LED_StripType: return "StripType";
1346 case SpnValue::Config_LED_BrightnessScalar: return "BrightnessScalar";
1347 case SpnValue::Config_LED_LossOfSignalBehavior: return "LossOfSignalBehavior";
1348 case SpnValue::Config_CANdle_5VRail: return "Enable5VRail";
1349 case SpnValue::Config_CANdle_VBatOutputMode: return "VBatOutputMode";
1350 case SpnValue::Config_CANdle_StatusLedWhenActive: return "StatusLedWhenActive";
1351 case SpnValue::CANdle_Animation0_Type: return "Animation0Type";
1352 case SpnValue::CANdle_Animation1_Type: return "Animation1Type";
1353 case SpnValue::CANdle_Animation2_Type: return "Animation2Type";
1354 case SpnValue::CANdle_Animation3_Type: return "Animation3Type";
1355 case SpnValue::CANdle_Animation4_Type: return "Animation4Type";
1356 case SpnValue::CANdle_Animation5_Type: return "Animation5Type";
1357 case SpnValue::CANdle_Animation6_Type: return "Animation6Type";
1358 case SpnValue::CANdle_Animation7_Type: return "Animation7Type";
1359 case SpnValue::CANdle_AnimationDirection: return "AnimationDirection";
1360 case SpnValue::CANdle_LarsonBounceMode: return "LarsonBounce";
1361 case SpnValue::Fault_Hardware: return "Fault_Hardware";
1362 case SpnValue::StickyFault_Hardware: return "StickyFault_Hardware";
1363 case SpnValue::ClearStickyFault_Hardware: return "ClearStickyFault_Hardware";
1364 case SpnValue::Fault_ProcTemp: return "Fault_ProcTemp";
1365 case SpnValue::StickyFault_ProcTemp: return "StickyFault_ProcTemp";
1366 case SpnValue::ClearStickyFault_ProcTemp: return "ClearStickyFault_ProcTemp";
1367 case SpnValue::Fault_DeviceTemp: return "Fault_DeviceTemp";
1368 case SpnValue::StickyFault_DeviceTemp: return "StickyFault_DeviceTemp";
1369 case SpnValue::ClearStickyFault_DeviceTemp: return "ClearStickyFault_DeviceTemp";
1370 case SpnValue::Fault_Undervoltage: return "Fault_Undervoltage";
1371 case SpnValue::StickyFault_Undervoltage: return "StickyFault_Undervoltage";
1372 case SpnValue::ClearStickyFault_Undervoltage: return "ClearStickyFault_Undervoltage";
1373 case SpnValue::Fault_BootDuringEnable: return "Fault_BootDuringEnable";
1374 case SpnValue::StickyFault_BootDuringEnable: return "StickyFault_BootDuringEnable";
1375 case SpnValue::ClearStickyFault_BootDuringEnable: return "ClearStickyFault_BootDuringEnable";
1376 case SpnValue::Fault_UnlicensedFeatureInUse: return "Fault_UnlicensedFeatureInUse";
1377 case SpnValue::StickyFault_UnlicensedFeatureInUse: return "StickyFault_UnlicensedFeatureInUse";
1378 case SpnValue::ClearStickyFault_UnlicensedFeatureInUse: return "ClearStickyFault_UnlicensedFeatureInUse";
1379 case SpnValue::Fault_PIGEON2_BootupAccel: return "Fault_BootupAccelerometer";
1380 case SpnValue::StickyFault_PIGEON2_BootupAccel: return "StickyFault_BootupAccelerometer";
1381 case SpnValue::ClearStickyFault_PIGEON2_BootupAccel: return "ClearStickyFault_BootupAccelerometer";
1382 case SpnValue::Fault_PIGEON2_BootupGyros: return "Fault_BootupGyroscope";
1383 case SpnValue::StickyFault_PIGEON2_BootupGyros: return "StickyFault_BootupGyroscope";
1384 case SpnValue::ClearStickyFault_PIGEON2_BootupGyros: return "ClearStickyFault_BootupGyroscope";
1385 case SpnValue::Fault_PIGEON2_BootupMagne: return "Fault_BootupMagnetometer";
1386 case SpnValue::StickyFault_PIGEON2_BootupMagne: return "StickyFault_BootupMagnetometer";
1387 case SpnValue::ClearStickyFault_PIGEON2_BootupMagne: return "ClearStickyFault_BootupMagnetometer";
1388 case SpnValue::Fault_PIGEON2_BootIntoMotion: return "Fault_BootIntoMotion";
1389 case SpnValue::StickyFault_PIGEON2_BootIntoMotion: return "StickyFault_BootIntoMotion";
1390 case SpnValue::ClearStickyFault_PIGEON2_BootIntoMotion: return "ClearStickyFault_BootIntoMotion";
1391 case SpnValue::Fault_PIGEON2_DataAcquiredLate: return "Fault_DataAcquiredLate";
1392 case SpnValue::StickyFault_PIGEON2_DataAcquiredLate: return "StickyFault_DataAcquiredLate";
1393 case SpnValue::ClearStickyFault_PIGEON2_DataAcquiredLate: return "ClearStickyFault_DataAcquiredLate";
1394 case SpnValue::Fault_PIGEON2_LoopTimeSlow: return "Fault_LoopTimeSlow";
1395 case SpnValue::StickyFault_PIGEON2_LoopTimeSlow: return "StickyFault_LoopTimeSlow";
1396 case SpnValue::ClearStickyFault_PIGEON2_LoopTimeSlow: return "ClearStickyFault_LoopTimeSlow";
1397 case SpnValue::Fault_PIGEON2_SaturatedMagne: return "Fault_SaturatedMagnetometer";
1398 case SpnValue::StickyFault_PIGEON2_SaturatedMagne: return "StickyFault_SaturatedMagnetometer";
1399 case SpnValue::ClearStickyFault_PIGEON2_SaturatedMagne: return "ClearStickyFault_SaturatedMagnetometer";
1400 case SpnValue::Fault_PIGEON2_SaturatedAccel: return "Fault_SaturatedAccelerometer";
1401 case SpnValue::StickyFault_PIGEON2_SaturatedAccel: return "StickyFault_SaturatedAccelerometer";
1402 case SpnValue::ClearStickyFault_PIGEON2_SaturatedAccel: return "ClearStickyFault_SaturatedAccelerometer";
1403 case SpnValue::Fault_PIGEON2_SaturatedGyros: return "Fault_SaturatedGyroscope";
1404 case SpnValue::StickyFault_PIGEON2_SaturatedGyros: return "StickyFault_SaturatedGyroscope";
1405 case SpnValue::ClearStickyFault_PIGEON2_SaturatedGyros: return "ClearStickyFault_SaturatedGyroscope";
1406 case SpnValue::Fault_CANCODER_BadMagnet: return "Fault_BadMagnet";
1407 case SpnValue::StickyFault_CANCODER_BadMagnet: return "StickyFault_BadMagnet";
1408 case SpnValue::ClearStickyFault_CANCODER_BadMagnet: return "ClearStickyFault_BadMagnet";
1409 case SpnValue::Fault_TALONFX_BridgeBrownout: return "Fault_BridgeBrownout";
1410 case SpnValue::StickyFault_TALONFX_BridgeBrownout: return "StickyFault_BridgeBrownout";
1411 case SpnValue::ClearStickyFault_TALONFX_BridgeBrownout: return "ClearStickyFault_BridgeBrownout";
1412 case SpnValue::Fault_TALONFX_RemoteSensorReset: return "Fault_RemoteSensorReset";
1413 case SpnValue::StickyFault_TALONFX_RemoteSensorReset: return "StickyFault_RemoteSensorReset";
1414 case SpnValue::ClearStickyFault_TALONFX_RemoteSensorReset: return "ClearStickyFault_RemoteSensorReset";
1415 case SpnValue::Fault_TALONFX_MissingDifferentialFX: return "Fault_MissingDifferentialFX";
1416 case SpnValue::StickyFault_TALONFX_MissingDifferentialFX: return "StickyFault_MissingDifferentialFX";
1417 case SpnValue::ClearStickyFault_TALONFX_MissingDifferentialFX: return "ClearStickyFault_MissingDifferentialFX";
1418 case SpnValue::Fault_TALONFX_RemoteSensorPosOverflow: return "Fault_RemoteSensorPosOverflow";
1419 case SpnValue::StickyFault_TALONFX_RemoteSensorPosOverflow: return "StickyFault_RemoteSensorPosOverflow";
1420 case SpnValue::ClearStickyFault_TALONFX_RemoteSensorPosOverflow: return "ClearStickyFault_RemoteSensorPosOverflow";
1421 case SpnValue::Fault_TALONFX_OverSupplyV: return "Fault_OverSupplyV";
1422 case SpnValue::StickyFault_TALONFX_OverSupplyV: return "StickyFault_OverSupplyV";
1423 case SpnValue::ClearStickyFault_TALONFX_OverSupplyV: return "ClearStickyFault_OverSupplyV";
1424 case SpnValue::Fault_TALONFX_UnstableSupplyV: return "Fault_UnstableSupplyV";
1425 case SpnValue::StickyFault_TALONFX_UnstableSupplyV: return "StickyFault_UnstableSupplyV";
1426 case SpnValue::ClearStickyFault_TALONFX_UnstableSupplyV: return "ClearStickyFault_UnstableSupplyV";
1427 case SpnValue::Fault_TALONFX_ReverseHardLimit: return "Fault_ReverseHardLimit";
1428 case SpnValue::StickyFault_TALONFX_ReverseHardLimit: return "StickyFault_ReverseHardLimit";
1429 case SpnValue::ClearStickyFault_TALONFX_ReverseHardLimit: return "ClearStickyFault_ReverseHardLimit";
1430 case SpnValue::Fault_TALONFX_ForwardHardLimit: return "Fault_ForwardHardLimit";
1431 case SpnValue::StickyFault_TALONFX_ForwardHardLimit: return "StickyFault_ForwardHardLimit";
1432 case SpnValue::ClearStickyFault_TALONFX_ForwardHardLimit: return "ClearStickyFault_ForwardHardLimit";
1433 case SpnValue::Fault_TALONFX_ReverseSoftLimit: return "Fault_ReverseSoftLimit";
1434 case SpnValue::StickyFault_TALONFX_ReverseSoftLimit: return "StickyFault_ReverseSoftLimit";
1435 case SpnValue::ClearStickyFault_TALONFX_ReverseSoftLimit: return "ClearStickyFault_ReverseSoftLimit";
1436 case SpnValue::Fault_TALONFX_ForwardSoftLimit: return "Fault_ForwardSoftLimit";
1437 case SpnValue::StickyFault_TALONFX_ForwardSoftLimit: return "StickyFault_ForwardSoftLimit";
1438 case SpnValue::ClearStickyFault_TALONFX_ForwardSoftLimit: return "ClearStickyFault_ForwardSoftLimit";
1439 case SpnValue::Fault_TALONFX_MissingRemSoftLim: return "Fault_MissingSoftLimitRemote";
1440 case SpnValue::StickyFault_TALONFX_MissingRemSoftLim: return "StickyFault_MissingSoftLimitRemote";
1441 case SpnValue::ClearStickyFault_TALONFX_MissingRemSoftLim: return "ClearStickyFault_MissingSoftLimitRemote";
1442 case SpnValue::Fault_TALONFX_MissingRemHardLim: return "Fault_MissingHardLimitRemote";
1443 case SpnValue::StickyFault_TALONFX_MissingRemHardLim: return "StickyFault_MissingHardLimitRemote";
1444 case SpnValue::ClearStickyFault_TALONFX_MissingRemHardLim: return "ClearStickyFault_MissingHardLimitRemote";
1445 case SpnValue::Fault_TALONFX_MissingRemoteSensor: return "Fault_RemoteSensorDataInvalid";
1446 case SpnValue::StickyFault_TALONFX_MissingRemoteSensor: return "StickyFault_RemoteSensorDataInvalid";
1447 case SpnValue::ClearStickyFault_TALONFX_MissingRemoteSensor: return "ClearStickyFault_RemoteSensorDataInvalid";
1448 case SpnValue::Fault_TALONFX_FusedSensorOutOfSync: return "Fault_FusedSensorOutOfSync";
1449 case SpnValue::StickyFault_TALONFX_FusedSensorOutOfSync: return "StickyFault_FusedSensorOutOfSync";
1450 case SpnValue::ClearStickyFault_TALONFX_FusedSensorOutOfSync: return "ClearStickyFault_FusedSensorOutOfSync";
1451 case SpnValue::Fault_TALONFX_StatorCurrLimit: return "Fault_StatorCurrLimit";
1452 case SpnValue::StickyFault_TALONFX_StatorCurrLimit: return "StickyFault_StatorCurrLimit";
1453 case SpnValue::ClearStickyFault_TALONFX_StatorCurrLimit: return "ClearStickyFault_StatorCurrLimit";
1454 case SpnValue::Fault_TALONFX_SupplyCurrLimit: return "Fault_SupplyCurrLimit";
1455 case SpnValue::StickyFault_TALONFX_SupplyCurrLimit: return "StickyFault_SupplyCurrLimit";
1456 case SpnValue::ClearStickyFault_TALONFX_SupplyCurrLimit: return "ClearStickyFault_SupplyCurrLimit";
1457 case SpnValue::Fault_TALONFX_UsingFusedCCWhileUnlicensed: return "Fault_UsingFusedCANcoderWhileUnlicensed";
1458 case SpnValue::StickyFault_TALONFX_UsingFusedCCWhileUnlicensed: return "StickyFault_UsingFusedCANcoderWhileUnlicensed";
1459 case SpnValue::ClearStickyFault_TALONFX_UsingFusedCCWhileUnlicensed: return "ClearStickyFault_UsingFusedCANcoderWhileUnlicensed";
1460 case SpnValue::Fault_TALONFX_StaticBrakeDisabled: return "Fault_StaticBrakeDisabled";
1461 case SpnValue::StickyFault_TALONFX_StaticBrakeDisabled: return "StickyFault_StaticBrakeDisabled";
1462 case SpnValue::ClearStickyFault_TALONFX_StaticBrakeDisabled: return "ClearStickyFault_StaticBrakeDisabled";
1463 case SpnValue::Fault_TALONFX_BridgeShort: return "Fault_BridgeShort";
1464 case SpnValue::StickyFault_TALONFX_BridgeShort: return "StickyFault_BridgeShort";
1465 case SpnValue::ClearStickyFault_TALONFX_BridgeShort: return "ClearStickyFault_BridgeShort";
1466 case SpnValue::Fault_TALONFX_HallSensorMissing: return "Fault_HallSensorMissing";
1467 case SpnValue::StickyFault_TALONFX_HallSensorMissing: return "StickyFault_HallSensorMissing";
1468 case SpnValue::ClearStickyFault_TALONFX_HallSensorMissing: return "ClearStickyFault_HallSensorMissing";
1469 case SpnValue::Fault_TALONFX_DriveDisabledHallSensor: return "Fault_DriveDisabledHallSensor";
1470 case SpnValue::StickyFault_TALONFX_DriveDisabledHallSensor: return "StickyFault_DriveDisabledHallSensor";
1471 case SpnValue::ClearStickyFault_TALONFX_DriveDisabledHallSensor: return "ClearStickyFault_DriveDisabledHallSensor";
1472 case SpnValue::Fault_TALONFX_MotorTempSensorMissing: return "Fault_MotorTempSensorMissing";
1473 case SpnValue::StickyFault_TALONFX_MotorTempSensorMissing: return "StickyFault_MotorTempSensorMissing";
1474 case SpnValue::ClearStickyFault_TALONFX_MotorTempSensorMissing: return "ClearStickyFault_MotorTempSensorMissing";
1475 case SpnValue::Fault_TALONFX_MotorTempSensorTooHot: return "Fault_MotorTempSensorTooHot";
1476 case SpnValue::StickyFault_TALONFX_MotorTempSensorTooHot: return "StickyFault_MotorTempSensorTooHot";
1477 case SpnValue::ClearStickyFault_TALONFX_MotorTempSensorTooHot: return "ClearStickyFault_MotorTempSensorTooHot";
1478 case SpnValue::Fault_CANDI_5V: return "Fault_5V";
1479 case SpnValue::StickyFault_CANDI_5V: return "StickyFault_5V";
1480 case SpnValue::ClearStickyFault_CANDI_5V: return "ClearStickyFault_5V";
1481 case SpnValue::Fault_CANDLE_OVERVOLTAGE: return "Fault_Overvoltage";
1482 case SpnValue::StickyFault_CANDLE_OVERVOLTAGE: return "StickyFault_Overvoltage";
1483 case SpnValue::ClearStickyFault_CANDLE_OVERVOLTAGE: return "ClearStickyFault_Overvoltage";
1484 case SpnValue::Fault_CANDLE_5V_TOO_HIGH: return "Fault_5VTooHigh";
1485 case SpnValue::StickyFault_CANDLE_5V_TOO_HIGH: return "StickyFault_5VTooHigh";
1486 case SpnValue::ClearStickyFault_CANDLE_5V_TOO_HIGH: return "ClearStickyFault_5VTooHigh";
1487 case SpnValue::Fault_CANDLE_5V_TOO_LOW: return "Fault_5VTooLow";
1488 case SpnValue::StickyFault_CANDLE_5V_TOO_LOW: return "StickyFault_5VTooLow";
1489 case SpnValue::ClearStickyFault_CANDLE_5V_TOO_LOW: return "ClearStickyFault_5VTooLow";
1490 case SpnValue::Fault_CANDLE_THERMAL: return "Fault_Thermal";
1491 case SpnValue::StickyFault_CANDLE_THERMAL: return "StickyFault_Thermal";
1492 case SpnValue::ClearStickyFault_CANDLE_THERMAL: return "ClearStickyFault_Thermal";
1493 case SpnValue::Fault_CANDLE_SOFTWARE_FUSE: return "Fault_SoftwareFuse";
1494 case SpnValue::StickyFault_CANDLE_SOFTWARE_FUSE: return "StickyFault_SoftwareFuse";
1495 case SpnValue::ClearStickyFault_CANDLE_SOFTWARE_FUSE: return "ClearStickyFault_SoftwareFuse";
1496 case SpnValue::Fault_CANDLE_SHORT_CIRCUIT: return "Fault_ShortCircuit";
1497 case SpnValue::StickyFault_CANDLE_SHORT_CIRCUIT: return "StickyFault_ShortCircuit";
1498 case SpnValue::ClearStickyFault_CANDLE_SHORT_CIRCUIT: return "ClearStickyFault_ShortCircuit";
1499 default:
1500 return "Invalid Value";
1501 }
1502 }
1503
1504 /**
1505 * \brief Gets the units for this enum if applicable
1506 *
1507 * \returns Units of this enum
1508 */
1509 std::string GetUnits() const
1510 {
1511 switch (value)
1512 {
1513 case SpnValue::TalonFX_System_State: return "";
1514 case SpnValue::Startup_ResetFlags: return "";
1515 case SpnValue::Version_Major: return "";
1516 case SpnValue::Version_Minor: return "";
1517 case SpnValue::Version_Bugfix: return "";
1518 case SpnValue::Version_Build: return "";
1519 case SpnValue::Version_Full: return "";
1520 case SpnValue::Licensing_IsProLicensed: return "";
1521 case SpnValue::Licensing_IsSeasonPassed: return "";
1522 case SpnValue::CustomParam0: return "";
1523 case SpnValue::CustomParam1: return "";
1524 case SpnValue::CANcoder_SensorDirection: return "";
1525 case SpnValue::FrcLock: return "";
1526 case SpnValue::RobotEnabled: return "";
1527 case SpnValue::LED1_OnColor: return "";
1528 case SpnValue::LED1_OffColor: return "";
1529 case SpnValue::LED2_OnColor: return "";
1530 case SpnValue::LED2_OffColor: return "";
1531 case SpnValue::AllFaults: return "";
1532 case SpnValue::AllStickyFaults: return "";
1533 case SpnValue::Pigeon2UseCompass: return "";
1534 case SpnValue::Pigeon2DisableTemperatureCompensation: return "";
1535 case SpnValue::Pigeon2DisableNoMotionCalibration: return "";
1536 case SpnValue::Pigeon2MountPoseYaw: return "deg";
1537 case SpnValue::Pigeon2MountPosePitch: return "deg";
1538 case SpnValue::Pigeon2MountPoseRoll: return "deg";
1539 case SpnValue::Pigeon2GyroScalarX: return "deg per rotation";
1540 case SpnValue::Pigeon2GyroScalarY: return "deg per rotation";
1541 case SpnValue::Pigeon2GyroScalarZ: return "deg per rotation";
1542 case SpnValue::Pigeon2Yaw: return "deg";
1543 case SpnValue::Pigeon2Pitch: return "deg";
1544 case SpnValue::Pigeon2Roll: return "deg";
1545 case SpnValue::Pigeon2QuatW: return "";
1546 case SpnValue::Pigeon2QuatX: return "";
1547 case SpnValue::Pigeon2QuatY: return "";
1548 case SpnValue::Pigeon2QuatZ: return "";
1549 case SpnValue::Pigeon2GravityVectorX: return "";
1550 case SpnValue::Pigeon2GravityVectorY: return "";
1551 case SpnValue::Pigeon2GravityVectorZ: return "";
1552 case SpnValue::Pigeon2Temperature: return "℃";
1553 case SpnValue::Pigeon2NoMotionCalEnabled: return "";
1554 case SpnValue::Pigeon2NoMotionCount: return "";
1555 case SpnValue::Pigeon2TempCompDisabled: return "";
1556 case SpnValue::Pigeon2UpTime: return "s";
1557 case SpnValue::Pigeon2AccumGyroX: return "deg";
1558 case SpnValue::Pigeon2AccumGyroY: return "deg";
1559 case SpnValue::Pigeon2AccumGyroZ: return "deg";
1560 case SpnValue::Pigeon2AngularVelocityXWorld: return "dps";
1561 case SpnValue::Pigeon2AngularVelocityYWorld: return "dps";
1562 case SpnValue::Pigeon2AngularVelocityZWorld: return "dps";
1563 case SpnValue::Pigeon2AccelerationX: return "g";
1564 case SpnValue::Pigeon2AccelerationY: return "g";
1565 case SpnValue::Pigeon2AccelerationZ: return "g";
1566 case SpnValue::Pigeon2_SupplyVoltage: return "V";
1567 case SpnValue::Pigeon2AngularVelocityX: return "dps";
1568 case SpnValue::Pigeon2AngularVelocityY: return "dps";
1569 case SpnValue::Pigeon2AngularVelocityZ: return "dps";
1570 case SpnValue::Pigeon2MagneticFieldX: return "uT";
1571 case SpnValue::Pigeon2MagneticFieldY: return "uT";
1572 case SpnValue::Pigeon2MagneticFieldZ: return "uT";
1573 case SpnValue::Pigeon2RawMagneticFieldX: return "uT";
1574 case SpnValue::Pigeon2RawMagneticFieldY: return "uT";
1575 case SpnValue::Pigeon2RawMagneticFieldZ: return "uT";
1576 case SpnValue::CANCoder_MagnetOffset: return "rotations";
1577 case SpnValue::TalonFX_SetSensorPosition: return "rotations";
1578 case SpnValue::CANcoder_SetSensorPosition: return "rotations";
1579 case SpnValue::Pigeon2_SetYaw: return "deg";
1580 case SpnValue::DeviceEnabled: return "";
1581 case SpnValue::PRO_MotorOutput_MotorVoltage: return "V";
1582 case SpnValue::ForwardLimit: return "";
1583 case SpnValue::ReverseLimit: return "";
1584 case SpnValue::PRO_MotorOutput_RotorPolarity: return "";
1585 case SpnValue::PRO_MotorOutput_DutyCycle: return "fractional";
1586 case SpnValue::PRO_MotorOutput_TorqueCurrent: return "A";
1587 case SpnValue::PRO_SupplyAndTemp_StatorCurrent: return "A";
1588 case SpnValue::PRO_SupplyAndTemp_SupplyCurrent: return "A";
1589 case SpnValue::PRO_SupplyAndTemp_SupplyVoltage: return "V";
1590 case SpnValue::PRO_SupplyAndTemp_DeviceTemp: return "℃";
1591 case SpnValue::PRO_SupplyAndTemp_ProcessorTemp: return "℃";
1592 case SpnValue::PRO_RotorPosAndVel_Velocity: return "rotations per second";
1593 case SpnValue::PRO_RotorPosAndVel_Position: return "rotations";
1594 case SpnValue::PRO_PosAndVel_Velocity: return "rotations per second";
1595 case SpnValue::PRO_PosAndVel_Position: return "rotations";
1596 case SpnValue::PRO_PosAndVel_Acceleration: return "rotations per second²";
1597 case SpnValue::PRO_PIDStateEnables_IntegratedAccum_DC: return "fractional";
1598 case SpnValue::PRO_PIDStateEnables_IntegratedAccum_V: return "V";
1599 case SpnValue::PRO_PIDStateEnables_IntegratedAccum_A: return "A";
1600 case SpnValue::PRO_PIDStateEnables_FeedForward_DC: return "fractional";
1601 case SpnValue::PRO_PIDStateEnables_FeedForward_V: return "V";
1602 case SpnValue::PRO_PIDStateEnables_FeedForward_A: return "A";
1603 case SpnValue::TalonFX_ControlMode: return "";
1604 case SpnValue::ExternalMotorTempStatus: return "";
1605 case SpnValue::ExternalMotorTemp: return "℃";
1606 case SpnValue::PRO_PIDStateEnables_IsMotionMagicRunning: return "";
1607 case SpnValue::PRO_PIDStateEnables_RobotEnable: return "";
1608 case SpnValue::PRO_PIDStateEnables_DeviceEnable: return "";
1609 case SpnValue::PRO_PIDRefPIDErr_PIDRef_Position: return "rotations";
1610 case SpnValue::PRO_PIDRefPIDErr_PIDRef_Velocity: return "rotations per second";
1611 case SpnValue::PRO_PIDRefPIDErr_PIDErr_Position: return "rotations";
1612 case SpnValue::PRO_PIDRefPIDErr_PIDErr_Velocity: return "rotations per second";
1613 case SpnValue::PRO_PIDRefPIDErr_ClosedLoopMode: return "";
1614 case SpnValue::PRO_PIDOutput_PIDOutputMode: return "";
1615 case SpnValue::PRO_PIDOutput_ProportionalOutput_DC: return "fractional";
1616 case SpnValue::PRO_PIDOutput_ProportionalOutput_V: return "V";
1617 case SpnValue::PRO_PIDOutput_ProportionalOutput_A: return "A";
1618 case SpnValue::PRO_PIDOutput_DerivativeOutput_DC: return "fractional";
1619 case SpnValue::PRO_PIDOutput_DerivativeOutput_V: return "V";
1620 case SpnValue::PRO_PIDOutput_DerivativeOutput_A: return "A";
1621 case SpnValue::PRO_PIDOutput_Output_DC: return "fractional";
1622 case SpnValue::PRO_PIDOutput_Output_V: return "V";
1623 case SpnValue::PRO_PIDOutput_Output_A: return "A";
1624 case SpnValue::PRO_PIDOutput_Slot: return "";
1625 case SpnValue::PRO_PIDRefSlopeECUTime_ReferenceSlope_Position: return "rotations per second";
1626 case SpnValue::PRO_PIDRefSlopeECUTime_ReferenceSlope_Velocity: return "rotations per second²";
1627 case SpnValue::PRO_PIDRefSlopeECUTime_ClosedLoopMode: return "";
1628 case SpnValue::TalonFX_MotorOutputStatus: return "";
1629 case SpnValue::PRO_MotorOutput_PIDState_Diff_DutyCycle: return "fractional";
1630 case SpnValue::PRO_MotorOutput_PIDState_Diff_TorqueCurrent: return "A";
1631 case SpnValue::TalonFX_DifferentialControlMode: return "";
1632 case SpnValue::PRO_MotorOutput_PIDState_Diff_IntegratedAccum_DC: return "fractional";
1633 case SpnValue::PRO_MotorOutput_PIDState_Diff_IntegratedAccum_V: return "V";
1634 case SpnValue::PRO_MotorOutput_PIDState_Diff_IntegratedAccum_A: return "A";
1635 case SpnValue::PRO_MotorOutput_PIDState_Diff_FeedForward_DC: return "fractional";
1636 case SpnValue::PRO_MotorOutput_PIDState_Diff_FeedForward_V: return "V";
1637 case SpnValue::PRO_MotorOutput_PIDState_Diff_FeedForward_A: return "A";
1638 case SpnValue::PRO_AvgPosAndVel_Velocity: return "rotations per second";
1639 case SpnValue::PRO_AvgPosAndVel_Position: return "rotations";
1640 case SpnValue::PRO_DiffPosAndVel_Velocity: return "rotations per second";
1641 case SpnValue::PRO_DiffPosAndVel_Position: return "rotations";
1642 case SpnValue::PRO_DiffPIDRefPIDErr_PIDRef_Position: return "rotations";
1643 case SpnValue::PRO_DiffPIDRefPIDErr_PIDRef_Velocity: return "rotations per second";
1644 case SpnValue::PRO_DiffPIDRefPIDErr_PIDErr_Position: return "rotations";
1645 case SpnValue::PRO_DiffPIDRefPIDErr_PIDErr_Velocity: return "rotations per second";
1646 case SpnValue::PRO_DiffPIDRefPIDErr_ClosedLoopMode: return "";
1647 case SpnValue::PRO_DiffPIDOutput_PIDOutputMode: return "";
1648 case SpnValue::PRO_DiffPIDOutput_ProportionalOutput_DC: return "fractional";
1649 case SpnValue::PRO_DiffPIDOutput_ProportionalOutput_V: return "V";
1650 case SpnValue::PRO_DiffPIDOutput_ProportionalOutput_A: return "A";
1651 case SpnValue::PRO_DiffPIDOutput_DerivativeOutput_DC: return "fractional";
1652 case SpnValue::PRO_DiffPIDOutput_DerivativeOutput_V: return "V";
1653 case SpnValue::PRO_DiffPIDOutput_DerivativeOutput_A: return "A";
1654 case SpnValue::PRO_DiffPIDOutput_Output_DC: return "fractional";
1655 case SpnValue::PRO_DiffPIDOutput_Output_V: return "V";
1656 case SpnValue::PRO_DiffPIDOutput_Output_A: return "A";
1657 case SpnValue::PRO_DiffPIDOutput_Slot: return "";
1658 case SpnValue::PRO_DiffPIDRefSlopeECUTime_ReferenceSlope_Position: return "rotations per second";
1659 case SpnValue::PRO_DiffPIDRefSlopeECUTime_ReferenceSlope_Velocity: return "rotations per second²";
1660 case SpnValue::PRO_DiffPIDRefSlopeECUTime_ClosedLoopMode: return "";
1661 case SpnValue::TalonFX_MotorConstants_kT: return "Nm/A";
1662 case SpnValue::TalonFX_MotorConstants_kV: return "RPM/V";
1663 case SpnValue::TalonFX_MotorConstants_StallCurrent: return "A";
1664 case SpnValue::Slot0_kP: return "";
1665 case SpnValue::Slot0_kI: return "";
1666 case SpnValue::Slot0_kD: return "";
1667 case SpnValue::Slot0_kS: return "";
1668 case SpnValue::Slot0_kV: return "";
1669 case SpnValue::Slot0_kA: return "";
1670 case SpnValue::Slot0_kG: return "";
1671 case SpnValue::Slot0_kG_Type: return "";
1672 case SpnValue::Slot1_kP: return "";
1673 case SpnValue::Slot1_kI: return "";
1674 case SpnValue::Slot1_kD: return "";
1675 case SpnValue::Slot1_kS: return "";
1676 case SpnValue::Slot1_kV: return "";
1677 case SpnValue::Slot1_kA: return "";
1678 case SpnValue::Slot1_kG: return "";
1679 case SpnValue::Slot1_kG_Type: return "";
1680 case SpnValue::Slot2_kP: return "";
1681 case SpnValue::Slot2_kI: return "";
1682 case SpnValue::Slot2_kD: return "";
1683 case SpnValue::Slot2_kS: return "";
1684 case SpnValue::Slot2_kV: return "";
1685 case SpnValue::Slot2_kA: return "";
1686 case SpnValue::Slot2_kG: return "";
1687 case SpnValue::Slot2_kG_Type: return "";
1688 case SpnValue::Config_Inverted: return "";
1689 case SpnValue::Config_SupplyVLowpassTau: return "seconds";
1690 case SpnValue::Config_BeepOnBoot: return "";
1691 case SpnValue::Config_NeutralMode: return "";
1692 case SpnValue::Config_DutyCycleNeutralDB: return "fractional";
1693 case SpnValue::Config_StatorCurrentLimit: return "A";
1694 case SpnValue::Config_StatorCurrLimitEn: return "";
1695 case SpnValue::Config_SupplyCurrentLimit: return "A";
1696 case SpnValue::Config_SupplyCurrLimitEn: return "";
1697 case SpnValue::Config_PeakForwardDC: return "fractional";
1698 case SpnValue::Config_PeakReverseDC: return "fractional";
1699 case SpnValue::Config_PeakForwardV: return "V";
1700 case SpnValue::Config_PeakReverseV: return "V";
1701 case SpnValue::Config_PeakForTorqCurr: return "A";
1702 case SpnValue::Config_PeakRevTorqCurr: return "A";
1703 case SpnValue::Config_TorqueNeutralDB: return "A";
1704 case SpnValue::Config_FeedbackRotorOffset: return "rotations";
1705 case SpnValue::Config_SensorToMechanismRatio: return "scalar";
1706 case SpnValue::Config_RotorToSensorRatio: return "scalar";
1707 case SpnValue::Config_FeedbackSensorSource: return "";
1708 case SpnValue::Config_FeedbackRemoteSensorID: return "";
1709 case SpnValue::Config_DutyCycleOpenLoopRampPeriod: return "seconds";
1710 case SpnValue::Config_VoltageOpenLoopRampPeriod: return "seconds";
1711 case SpnValue::Config_TorqueOpenLoopRampPeriod: return "seconds";
1712 case SpnValue::Config_DutyCycleClosedLoopRampPeriod: return "seconds";
1713 case SpnValue::Config_VoltageClosedLoopRampPeriod: return "seconds";
1714 case SpnValue::Config_TorqueClosedLoopRampPeriod: return "seconds";
1715 case SpnValue::Config_ForwardLimitType: return "";
1716 case SpnValue::Config_ForwardLimitAutosetPosEnable: return "";
1717 case SpnValue::Config_ForwardLimitAutosetPosValue: return "rotations";
1718 case SpnValue::Config_ForwardLimitEnable: return "";
1719 case SpnValue::Config_ForwardLimitSource: return "";
1720 case SpnValue::Config_ForwardLimitRemoteSensorID: return "";
1721 case SpnValue::Config_ReverseLimitType: return "";
1722 case SpnValue::Config_ReverseLimitAutosetPosEnable: return "";
1723 case SpnValue::Config_ReverseLimitAutosetPosValue: return "rotations";
1724 case SpnValue::Config_ReverseLimitEnable: return "";
1725 case SpnValue::Config_ReverseLimitSource: return "";
1726 case SpnValue::Config_ReverseLimitRemoteSensorID: return "";
1727 case SpnValue::Config_ForwardSoftLimitEnable: return "";
1728 case SpnValue::Config_ReverseSoftLimitEnable: return "";
1729 case SpnValue::Config_ForwardSoftLimitThreshold: return "rotations";
1730 case SpnValue::Config_ReverseSoftLimitThreshold: return "rotations";
1731 case SpnValue::Config_MotionMagicCruiseVelocity: return "rot per sec";
1732 case SpnValue::Config_MotionMagicAcceleration: return "rot per sec²";
1733 case SpnValue::Config_MotionMagicJerk: return "rot per sec³";
1734 case SpnValue::Config_MotionMagicExpo_kV: return "V/rps";
1735 case SpnValue::Config_MotionMagicExpo_kA: return "V/rps²";
1736 case SpnValue::Config_PeakDiffDC: return "fractional";
1737 case SpnValue::Config_PeakDiffV: return "V";
1738 case SpnValue::Config_PeakDiffTorqCurr: return "A";
1739 case SpnValue::CANcoder_Velocity: return "rotations per second";
1740 case SpnValue::CANcoder_Position: return "rotations";
1741 case SpnValue::CANcoder_AbsPosition: return "rotations";
1742 case SpnValue::CANCoder_RawVel: return "rotations per second";
1743 case SpnValue::CANCoder_RawPos: return "rotations";
1744 case SpnValue::CANCoder_SupplyVoltage: return "V";
1745 case SpnValue::CANcoder_MagHealth: return "";
1746 case SpnValue::SPN_ClearStickyFaults: return "";
1747 case SpnValue::PRO_MotorOutput_BridgeType_Public: return "";
1748 case SpnValue::Config_ContinuousWrap: return "";
1749 case SpnValue::Config_SupplyCurrentLowerLimit: return "A";
1750 case SpnValue::Config_SupplyCurrentLowerTime: return "seconds";
1751 case SpnValue::Config_DifferentialSensorSource: return "";
1752 case SpnValue::Config_DifferentialTalonFXSensorID: return "";
1753 case SpnValue::Config_DifferentialRemoteSensorID: return "";
1754 case SpnValue::Config_BeepOnConfig: return "";
1755 case SpnValue::Config_AllowMusicDurDisable: return "";
1756 case SpnValue::Compliancy_Version: return "";
1757 case SpnValue::Version_IsProLicensed: return "";
1758 case SpnValue::PRO_SupplyAndTemp_DeviceTemp2: return "℃";
1759 case SpnValue::Slot0_kS_Sign: return "";
1760 case SpnValue::Slot1_kS_Sign: return "";
1761 case SpnValue::Slot2_kS_Sign: return "";
1762 case SpnValue::TalonFX_ConnectedMotor: return "";
1763 case SpnValue::CANrange_SupplyVoltage: return "V";
1764 case SpnValue::CANrange_Distance_Meters: return "m";
1765 case SpnValue::CANrange_MeasTime: return "s";
1766 case SpnValue::CANrange_SignalStrength: return "";
1767 case SpnValue::CANrange_ProximityDetected: return "";
1768 case SpnValue::CANrange_MeasState: return "";
1769 case SpnValue::CANrange_AmbientSignal: return "";
1770 case SpnValue::CANrange_DistanceStdDev: return "m";
1771 case SpnValue::CANrange_RealFOVCenterX: return "deg";
1772 case SpnValue::CANrange_RealFOVCenterY: return "deg";
1773 case SpnValue::CANrange_RealFOVRangeX: return "deg";
1774 case SpnValue::CANrange_RealFOVRangeY: return "deg";
1775 case SpnValue::CANrange_UpdateMode: return "";
1776 case SpnValue::CANrange_UpdateFreq: return "Hz";
1777 case SpnValue::CANrange_ProximityThreshold: return "m";
1778 case SpnValue::CANrange_ProximityHysteresis: return "m";
1779 case SpnValue::CANrange_MinSigStrengthForValidMeas: return "";
1780 case SpnValue::CANrange_FOVCenterX: return "deg";
1781 case SpnValue::CANrange_FOVCenterY: return "deg";
1782 case SpnValue::CANrange_FOVRangeX: return "deg";
1783 case SpnValue::CANrange_FOVRangeY: return "deg";
1784 case SpnValue::Config_ControlTimesyncFreq: return "Hz";
1785 case SpnValue::Config_VelocityFilterTimeConstant: return "seconds";
1786 case SpnValue::Config_AdvancedHallSupport: return "";
1787 case SpnValue::Config_MotorType: return "";
1788 case SpnValue::CANdi_Pin1State: return "";
1789 case SpnValue::CANdi_Pin2State: return "";
1790 case SpnValue::CANdi_QuadPosition: return "rotations";
1791 case SpnValue::CANdi_Pwm1_RiseToRise: return "us";
1792 case SpnValue::CANdi_Pwm1_Position: return "rotations";
1793 case SpnValue::CANdi_Pwm1_Velocity: return "rotations per second";
1794 case SpnValue::CANdi_Pwm2_RiseToRise: return "us";
1795 case SpnValue::CANdi_Pwm2_Position: return "rotations";
1796 case SpnValue::CANdi_Overcurrent: return "";
1797 case SpnValue::CANdi_VSense: return "V";
1798 case SpnValue::CANdi_OutputCurrent: return "A";
1799 case SpnValue::CANdi_S1FloatState: return "";
1800 case SpnValue::CANdi_S2FloatState: return "";
1801 case SpnValue::Config_AbsoluteSensorOffset: return "rotations";
1802 case SpnValue::Config_ExternalFeedbackSensorSource: return "";
1803 case SpnValue::Config_SensorPhase: return "";
1804 case SpnValue::Config_QuadratureEdgesPerRotation: return "";
1805 case SpnValue::Config_AbsoluteSensorDiscontinuityPoint: return "rotations";
1806 case SpnValue::CANdi_Pwm2_Velocity: return "rotations per second";
1807 case SpnValue::TalonFXS_5VRailVoltage: return "Volts";
1808 case SpnValue::TalonFXS_Gadgeteer_G3: return "Volts";
1809 case SpnValue::CANdi_QuadVelocity: return "rotations per second";
1810 case SpnValue::Config_PWM1_AbsoluteSensorOffset: return "rotations";
1811 case SpnValue::Config_PWM1_AbsoluteSensorDiscontinuityPoint: return "rotations";
1812 case SpnValue::Config_PWM1_SensorDirection: return "";
1813 case SpnValue::Config_PWM2_AbsoluteSensorOffset: return "rotations";
1814 case SpnValue::Config_PWM2_AbsoluteSensorDiscontinuityPoint: return "rotations";
1815 case SpnValue::Config_PWM2_SensorDirection: return "";
1816 case SpnValue::Config_Quad_SensorDirection: return "";
1817 case SpnValue::CANdi_SetQuadPosition: return "rotations";
1818 case SpnValue::Config_S1_CloseState: return "";
1819 case SpnValue::Config_S2_CloseState: return "";
1820 case SpnValue::CANdi_S1Closed: return "";
1821 case SpnValue::CANdi_S2Closed: return "";
1822 case SpnValue::Config_BrushedMotorWiring: return "";
1823 case SpnValue::PRO_GadgeteerQuad_RawQuadraturePosition: return "rotations";
1824 case SpnValue::PRO_GadgeteerQuad_RawQuadratureVelocity: return "rotations per second";
1825 case SpnValue::PRO_GadgeteerPwm_RawPwmPosition: return "rotations";
1826 case SpnValue::PRO_GadgeteerPwm_RawPwmVelocity: return "rotations per second";
1827 case SpnValue::CANdle_General_SupplyVoltage: return "V";
1828 case SpnValue::CANdle_General_FiveVRailVoltage: return "V";
1829 case SpnValue::CANdle_General_OutputCurrent: return "A";
1830 case SpnValue::CANdle_General_DeviceTemp: return "℃";
1831 case SpnValue::CANdle_General_VBatModulation: return "frac";
1832 case SpnValue::CANdle_General_MaxSimulAnimCount: return "";
1833 case SpnValue::Config_LED_StripType: return "";
1834 case SpnValue::Config_LED_BrightnessScalar: return "scalar";
1835 case SpnValue::Config_LED_LossOfSignalBehavior: return "";
1836 case SpnValue::Config_CANdle_5VRail: return "";
1837 case SpnValue::Config_CANdle_VBatOutputMode: return "";
1838 case SpnValue::Config_CANdle_StatusLedWhenActive: return "";
1839 case SpnValue::CANdle_Animation0_Type: return "";
1840 case SpnValue::CANdle_Animation1_Type: return "";
1841 case SpnValue::CANdle_Animation2_Type: return "";
1842 case SpnValue::CANdle_Animation3_Type: return "";
1843 case SpnValue::CANdle_Animation4_Type: return "";
1844 case SpnValue::CANdle_Animation5_Type: return "";
1845 case SpnValue::CANdle_Animation6_Type: return "";
1846 case SpnValue::CANdle_Animation7_Type: return "";
1847 case SpnValue::CANdle_AnimationDirection: return "";
1848 case SpnValue::CANdle_LarsonBounceMode: return "";
1849 case SpnValue::Fault_Hardware: return "";
1850 case SpnValue::StickyFault_Hardware: return "";
1851 case SpnValue::ClearStickyFault_Hardware: return "";
1852 case SpnValue::Fault_ProcTemp: return "";
1853 case SpnValue::StickyFault_ProcTemp: return "";
1854 case SpnValue::ClearStickyFault_ProcTemp: return "";
1855 case SpnValue::Fault_DeviceTemp: return "";
1856 case SpnValue::StickyFault_DeviceTemp: return "";
1857 case SpnValue::ClearStickyFault_DeviceTemp: return "";
1858 case SpnValue::Fault_Undervoltage: return "";
1859 case SpnValue::StickyFault_Undervoltage: return "";
1860 case SpnValue::ClearStickyFault_Undervoltage: return "";
1861 case SpnValue::Fault_BootDuringEnable: return "";
1862 case SpnValue::StickyFault_BootDuringEnable: return "";
1863 case SpnValue::ClearStickyFault_BootDuringEnable: return "";
1864 case SpnValue::Fault_UnlicensedFeatureInUse: return "";
1865 case SpnValue::StickyFault_UnlicensedFeatureInUse: return "";
1866 case SpnValue::ClearStickyFault_UnlicensedFeatureInUse: return "";
1867 case SpnValue::Fault_PIGEON2_BootupAccel: return "";
1868 case SpnValue::StickyFault_PIGEON2_BootupAccel: return "";
1869 case SpnValue::ClearStickyFault_PIGEON2_BootupAccel: return "";
1870 case SpnValue::Fault_PIGEON2_BootupGyros: return "";
1871 case SpnValue::StickyFault_PIGEON2_BootupGyros: return "";
1872 case SpnValue::ClearStickyFault_PIGEON2_BootupGyros: return "";
1873 case SpnValue::Fault_PIGEON2_BootupMagne: return "";
1874 case SpnValue::StickyFault_PIGEON2_BootupMagne: return "";
1875 case SpnValue::ClearStickyFault_PIGEON2_BootupMagne: return "";
1876 case SpnValue::Fault_PIGEON2_BootIntoMotion: return "";
1877 case SpnValue::StickyFault_PIGEON2_BootIntoMotion: return "";
1878 case SpnValue::ClearStickyFault_PIGEON2_BootIntoMotion: return "";
1879 case SpnValue::Fault_PIGEON2_DataAcquiredLate: return "";
1880 case SpnValue::StickyFault_PIGEON2_DataAcquiredLate: return "";
1881 case SpnValue::ClearStickyFault_PIGEON2_DataAcquiredLate: return "";
1882 case SpnValue::Fault_PIGEON2_LoopTimeSlow: return "";
1883 case SpnValue::StickyFault_PIGEON2_LoopTimeSlow: return "";
1884 case SpnValue::ClearStickyFault_PIGEON2_LoopTimeSlow: return "";
1885 case SpnValue::Fault_PIGEON2_SaturatedMagne: return "";
1886 case SpnValue::StickyFault_PIGEON2_SaturatedMagne: return "";
1887 case SpnValue::ClearStickyFault_PIGEON2_SaturatedMagne: return "";
1888 case SpnValue::Fault_PIGEON2_SaturatedAccel: return "";
1889 case SpnValue::StickyFault_PIGEON2_SaturatedAccel: return "";
1890 case SpnValue::ClearStickyFault_PIGEON2_SaturatedAccel: return "";
1891 case SpnValue::Fault_PIGEON2_SaturatedGyros: return "";
1892 case SpnValue::StickyFault_PIGEON2_SaturatedGyros: return "";
1893 case SpnValue::ClearStickyFault_PIGEON2_SaturatedGyros: return "";
1894 case SpnValue::Fault_CANCODER_BadMagnet: return "";
1895 case SpnValue::StickyFault_CANCODER_BadMagnet: return "";
1896 case SpnValue::ClearStickyFault_CANCODER_BadMagnet: return "";
1897 case SpnValue::Fault_TALONFX_BridgeBrownout: return "";
1898 case SpnValue::StickyFault_TALONFX_BridgeBrownout: return "";
1899 case SpnValue::ClearStickyFault_TALONFX_BridgeBrownout: return "";
1900 case SpnValue::Fault_TALONFX_RemoteSensorReset: return "";
1901 case SpnValue::StickyFault_TALONFX_RemoteSensorReset: return "";
1902 case SpnValue::ClearStickyFault_TALONFX_RemoteSensorReset: return "";
1903 case SpnValue::Fault_TALONFX_MissingDifferentialFX: return "";
1904 case SpnValue::StickyFault_TALONFX_MissingDifferentialFX: return "";
1905 case SpnValue::ClearStickyFault_TALONFX_MissingDifferentialFX: return "";
1906 case SpnValue::Fault_TALONFX_RemoteSensorPosOverflow: return "";
1907 case SpnValue::StickyFault_TALONFX_RemoteSensorPosOverflow: return "";
1908 case SpnValue::ClearStickyFault_TALONFX_RemoteSensorPosOverflow: return "";
1909 case SpnValue::Fault_TALONFX_OverSupplyV: return "";
1910 case SpnValue::StickyFault_TALONFX_OverSupplyV: return "";
1911 case SpnValue::ClearStickyFault_TALONFX_OverSupplyV: return "";
1912 case SpnValue::Fault_TALONFX_UnstableSupplyV: return "";
1913 case SpnValue::StickyFault_TALONFX_UnstableSupplyV: return "";
1914 case SpnValue::ClearStickyFault_TALONFX_UnstableSupplyV: return "";
1915 case SpnValue::Fault_TALONFX_ReverseHardLimit: return "";
1916 case SpnValue::StickyFault_TALONFX_ReverseHardLimit: return "";
1917 case SpnValue::ClearStickyFault_TALONFX_ReverseHardLimit: return "";
1918 case SpnValue::Fault_TALONFX_ForwardHardLimit: return "";
1919 case SpnValue::StickyFault_TALONFX_ForwardHardLimit: return "";
1920 case SpnValue::ClearStickyFault_TALONFX_ForwardHardLimit: return "";
1921 case SpnValue::Fault_TALONFX_ReverseSoftLimit: return "";
1922 case SpnValue::StickyFault_TALONFX_ReverseSoftLimit: return "";
1923 case SpnValue::ClearStickyFault_TALONFX_ReverseSoftLimit: return "";
1924 case SpnValue::Fault_TALONFX_ForwardSoftLimit: return "";
1925 case SpnValue::StickyFault_TALONFX_ForwardSoftLimit: return "";
1926 case SpnValue::ClearStickyFault_TALONFX_ForwardSoftLimit: return "";
1927 case SpnValue::Fault_TALONFX_MissingRemSoftLim: return "";
1928 case SpnValue::StickyFault_TALONFX_MissingRemSoftLim: return "";
1929 case SpnValue::ClearStickyFault_TALONFX_MissingRemSoftLim: return "";
1930 case SpnValue::Fault_TALONFX_MissingRemHardLim: return "";
1931 case SpnValue::StickyFault_TALONFX_MissingRemHardLim: return "";
1932 case SpnValue::ClearStickyFault_TALONFX_MissingRemHardLim: return "";
1933 case SpnValue::Fault_TALONFX_MissingRemoteSensor: return "";
1934 case SpnValue::StickyFault_TALONFX_MissingRemoteSensor: return "";
1935 case SpnValue::ClearStickyFault_TALONFX_MissingRemoteSensor: return "";
1936 case SpnValue::Fault_TALONFX_FusedSensorOutOfSync: return "";
1937 case SpnValue::StickyFault_TALONFX_FusedSensorOutOfSync: return "";
1938 case SpnValue::ClearStickyFault_TALONFX_FusedSensorOutOfSync: return "";
1939 case SpnValue::Fault_TALONFX_StatorCurrLimit: return "";
1940 case SpnValue::StickyFault_TALONFX_StatorCurrLimit: return "";
1941 case SpnValue::ClearStickyFault_TALONFX_StatorCurrLimit: return "";
1942 case SpnValue::Fault_TALONFX_SupplyCurrLimit: return "";
1943 case SpnValue::StickyFault_TALONFX_SupplyCurrLimit: return "";
1944 case SpnValue::ClearStickyFault_TALONFX_SupplyCurrLimit: return "";
1945 case SpnValue::Fault_TALONFX_UsingFusedCCWhileUnlicensed: return "";
1946 case SpnValue::StickyFault_TALONFX_UsingFusedCCWhileUnlicensed: return "";
1947 case SpnValue::ClearStickyFault_TALONFX_UsingFusedCCWhileUnlicensed: return "";
1948 case SpnValue::Fault_TALONFX_StaticBrakeDisabled: return "";
1949 case SpnValue::StickyFault_TALONFX_StaticBrakeDisabled: return "";
1950 case SpnValue::ClearStickyFault_TALONFX_StaticBrakeDisabled: return "";
1951 case SpnValue::Fault_TALONFX_BridgeShort: return "";
1952 case SpnValue::StickyFault_TALONFX_BridgeShort: return "";
1953 case SpnValue::ClearStickyFault_TALONFX_BridgeShort: return "";
1954 case SpnValue::Fault_TALONFX_HallSensorMissing: return "";
1955 case SpnValue::StickyFault_TALONFX_HallSensorMissing: return "";
1956 case SpnValue::ClearStickyFault_TALONFX_HallSensorMissing: return "";
1957 case SpnValue::Fault_TALONFX_DriveDisabledHallSensor: return "";
1958 case SpnValue::StickyFault_TALONFX_DriveDisabledHallSensor: return "";
1959 case SpnValue::ClearStickyFault_TALONFX_DriveDisabledHallSensor: return "";
1960 case SpnValue::Fault_TALONFX_MotorTempSensorMissing: return "";
1961 case SpnValue::StickyFault_TALONFX_MotorTempSensorMissing: return "";
1962 case SpnValue::ClearStickyFault_TALONFX_MotorTempSensorMissing: return "";
1963 case SpnValue::Fault_TALONFX_MotorTempSensorTooHot: return "";
1964 case SpnValue::StickyFault_TALONFX_MotorTempSensorTooHot: return "";
1965 case SpnValue::ClearStickyFault_TALONFX_MotorTempSensorTooHot: return "";
1966 case SpnValue::Fault_CANDI_5V: return "";
1967 case SpnValue::StickyFault_CANDI_5V: return "";
1968 case SpnValue::ClearStickyFault_CANDI_5V: return "";
1969 case SpnValue::Fault_CANDLE_OVERVOLTAGE: return "";
1970 case SpnValue::StickyFault_CANDLE_OVERVOLTAGE: return "";
1971 case SpnValue::ClearStickyFault_CANDLE_OVERVOLTAGE: return "";
1972 case SpnValue::Fault_CANDLE_5V_TOO_HIGH: return "";
1973 case SpnValue::StickyFault_CANDLE_5V_TOO_HIGH: return "";
1974 case SpnValue::ClearStickyFault_CANDLE_5V_TOO_HIGH: return "";
1975 case SpnValue::Fault_CANDLE_5V_TOO_LOW: return "";
1976 case SpnValue::StickyFault_CANDLE_5V_TOO_LOW: return "";
1977 case SpnValue::ClearStickyFault_CANDLE_5V_TOO_LOW: return "";
1978 case SpnValue::Fault_CANDLE_THERMAL: return "";
1979 case SpnValue::StickyFault_CANDLE_THERMAL: return "";
1980 case SpnValue::ClearStickyFault_CANDLE_THERMAL: return "";
1981 case SpnValue::Fault_CANDLE_SOFTWARE_FUSE: return "";
1982 case SpnValue::StickyFault_CANDLE_SOFTWARE_FUSE: return "";
1983 case SpnValue::ClearStickyFault_CANDLE_SOFTWARE_FUSE: return "";
1984 case SpnValue::Fault_CANDLE_SHORT_CIRCUIT: return "";
1985 case SpnValue::StickyFault_CANDLE_SHORT_CIRCUIT: return "";
1986 case SpnValue::ClearStickyFault_CANDLE_SHORT_CIRCUIT: return "";
1987 default:
1988 return "Invalid Value";
1989 }
1990 }
1991
1992 /**
1993 * \brief Gets the summary for this enum if applicable
1994 *
1995 * \returns Summary of this enum
1996 */
1997 std::string GetSummary() const
1998 {
1999 switch (value)
2000 {
2001 case SpnValue::TalonFX_System_State: return "System state of the device.";
2002 case SpnValue::Startup_ResetFlags: return "This signal needs a summary";
2003 case SpnValue::Version_Major: return "App Major Version number.";
2004 case SpnValue::Version_Minor: return "App Minor Version number.";
2005 case SpnValue::Version_Bugfix: return "App Bugfix Version number.";
2006 case SpnValue::Version_Build: return "App Build Version number.";
2007 case SpnValue::Version_Full: return "Full Version of firmware in device. The format is a four byte value.";
2008 case SpnValue::Licensing_IsProLicensed: return "Whether the device is Pro licensed.";
2009 case SpnValue::Licensing_IsSeasonPassed: return "Whether the device is Season Pass licensed.";
2010 case SpnValue::CustomParam0: return "Custom parameter 0. This is provided to allow end-applications to store persistent information in the device.";
2011 case SpnValue::CustomParam1: return "Custom parameter 1. This is provided to allow end-applications to store persistent information in the device.";
2012 case SpnValue::CANcoder_SensorDirection: return "Direction of the sensor to determine positive rotation, as seen facing the LED side of the CANcoder.";
2013 case SpnValue::FrcLock: return "Whether device is locked by FRC.";
2014 case SpnValue::RobotEnabled: return "Whether the robot is enabled.";
2015 case SpnValue::LED1_OnColor: return "The Color of LED1 when it's \"On\".";
2016 case SpnValue::LED1_OffColor: return "The Color of LED1 when it's \"Off\".";
2017 case SpnValue::LED2_OnColor: return "The Color of LED2 when it's \"On\".";
2018 case SpnValue::LED2_OffColor: return "The Color of LED2 when it's \"Off\".";
2019 case SpnValue::AllFaults: return "Integer representing all fault flags reported by the device.";
2020 case SpnValue::AllStickyFaults: return "Integer representing all (persistent) sticky fault flags reported by the device.";
2021 case SpnValue::Pigeon2UseCompass: return "Turns on or off the magnetometer fusing for 9-axis. FRC users are not recommended to turn this on, as the magnetic influence of the robot will likely negatively affect the performance of the Pigeon2.";
2022 case SpnValue::Pigeon2DisableTemperatureCompensation: return "Disables using the temperature compensation feature.";
2023 case SpnValue::Pigeon2DisableNoMotionCalibration: return "Disables using the no-motion calibration feature.";
2024 case SpnValue::Pigeon2MountPoseYaw: return "The mounting calibration yaw-component.";
2025 case SpnValue::Pigeon2MountPosePitch: return "The mounting calibration pitch-component.";
2026 case SpnValue::Pigeon2MountPoseRoll: return "The mounting calibration roll-component.";
2027 case SpnValue::Pigeon2GyroScalarX: return "The gyro scalar component for the X axis.";
2028 case SpnValue::Pigeon2GyroScalarY: return "The gyro scalar component for the Y axis.";
2029 case SpnValue::Pigeon2GyroScalarZ: return "The gyro scalar component for the Z axis.";
2030 case SpnValue::Pigeon2Yaw: return "Current reported yaw of the Pigeon2.";
2031 case SpnValue::Pigeon2Pitch: return "Current reported pitch of the Pigeon2.";
2032 case SpnValue::Pigeon2Roll: return "Current reported roll of the Pigeon2.";
2033 case SpnValue::Pigeon2QuatW: return "The W component of the reported Quaternion.";
2034 case SpnValue::Pigeon2QuatX: return "The X component of the reported Quaternion.";
2035 case SpnValue::Pigeon2QuatY: return "The Y component of the reported Quaternion.";
2036 case SpnValue::Pigeon2QuatZ: return "The Z component of the reported Quaternion.";
2037 case SpnValue::Pigeon2GravityVectorX: return "The X component of the gravity vector.";
2038 case SpnValue::Pigeon2GravityVectorY: return "The Y component of the gravity vector.";
2039 case SpnValue::Pigeon2GravityVectorZ: return "The Z component of the gravity vector.";
2040 case SpnValue::Pigeon2Temperature: return "Temperature of the Pigeon 2.";
2041 case SpnValue::Pigeon2NoMotionCalEnabled: return "Whether the no-motion calibration feature is enabled.";
2042 case SpnValue::Pigeon2NoMotionCount: return "The number of times a no-motion event occurred, wraps at 15.";
2043 case SpnValue::Pigeon2TempCompDisabled: return "Whether the temperature-compensation feature is disabled.";
2044 case SpnValue::Pigeon2UpTime: return "How long the Pigeon 2's been up in seconds, caps at 255 seconds.";
2045 case SpnValue::Pigeon2AccumGyroX: return "The accumulated gyro about the X axis without any sensor fusing.";
2046 case SpnValue::Pigeon2AccumGyroY: return "The accumulated gyro about the Y axis without any sensor fusing.";
2047 case SpnValue::Pigeon2AccumGyroZ: return "The accumulated gyro about the Z axis without any sensor fusing.";
2048 case SpnValue::Pigeon2AngularVelocityXWorld: return "The angular velocity (ω) of the Pigeon 2 about the X axis with respect to the world frame. This value is mount-calibrated.";
2049 case SpnValue::Pigeon2AngularVelocityYWorld: return "The angular velocity (ω) of the Pigeon 2 about the Y axis with respect to the world frame. This value is mount-calibrated.";
2050 case SpnValue::Pigeon2AngularVelocityZWorld: return "The angular velocity (ω) of the Pigeon 2 about the Z axis with respect to the world frame. This value is mount-calibrated.";
2051 case SpnValue::Pigeon2AccelerationX: return "The acceleration measured by Pigeon2 in the X direction.";
2052 case SpnValue::Pigeon2AccelerationY: return "The acceleration measured by Pigeon2 in the Y direction.";
2053 case SpnValue::Pigeon2AccelerationZ: return "The acceleration measured by Pigeon2 in the Z direction.";
2054 case SpnValue::Pigeon2_SupplyVoltage: return "Measured supply voltage to the Pigeon2.";
2055 case SpnValue::Pigeon2AngularVelocityX: return "The angular velocity (ω) of the Pigeon 2 about the device's X axis.";
2056 case SpnValue::Pigeon2AngularVelocityY: return "The angular velocity (ω) of the Pigeon 2 about the device's Y axis.";
2057 case SpnValue::Pigeon2AngularVelocityZ: return "The angular velocity (ω) of the Pigeon 2 about the device's Z axis.";
2058 case SpnValue::Pigeon2MagneticFieldX: return "The biased magnitude of the magnetic field measured by the Pigeon 2 in the X direction. This is only valid after performing a magnetometer calibration.";
2059 case SpnValue::Pigeon2MagneticFieldY: return "The biased magnitude of the magnetic field measured by the Pigeon 2 in the Y direction. This is only valid after performing a magnetometer calibration.";
2060 case SpnValue::Pigeon2MagneticFieldZ: return "The biased magnitude of the magnetic field measured by the Pigeon 2 in the Z direction. This is only valid after performing a magnetometer calibration.";
2061 case SpnValue::Pigeon2RawMagneticFieldX: return "The raw magnitude of the magnetic field measured by the Pigeon 2 in the X direction. This is only valid after performing a magnetometer calibration.";
2062 case SpnValue::Pigeon2RawMagneticFieldY: return "The raw magnitude of the magnetic field measured by the Pigeon 2 in the Y direction. This is only valid after performing a magnetometer calibration.";
2063 case SpnValue::Pigeon2RawMagneticFieldZ: return "The raw magnitude of the magnetic field measured by the Pigeon 2 in the Z direction. This is only valid after performing a magnetometer calibration.";
2064 case SpnValue::CANCoder_MagnetOffset: return "This offset is added to the reported position, allowing the application to trim the zero position. When set to the default value of zero, position reports zero when magnet north pole aligns with the LED.";
2065 case SpnValue::TalonFX_SetSensorPosition: return "Sets the mechanism position of the device in mechanism rotations.";
2066 case SpnValue::CANcoder_SetSensorPosition: return "Sets the current position of the device.";
2067 case SpnValue::Pigeon2_SetYaw: return "The yaw to set the Pigeon2 to right now.";
2068 case SpnValue::DeviceEnabled: return "Whether the device is enabled.";
2069 case SpnValue::PRO_MotorOutput_MotorVoltage: return "The applied (output) motor voltage.";
2070 case SpnValue::ForwardLimit: return "Forward Limit Pin.";
2071 case SpnValue::ReverseLimit: return "Reverse Limit Pin.";
2072 case SpnValue::PRO_MotorOutput_RotorPolarity: return "The applied rotor polarity as seen from the front of the motor. This typically is determined by the Inverted config, but can be overridden if using Follower features.";
2073 case SpnValue::PRO_MotorOutput_DutyCycle: return "The applied motor duty cycle.";
2074 case SpnValue::PRO_MotorOutput_TorqueCurrent: return "Current corresponding to the torque output by the motor. Similar to StatorCurrent. Users will likely prefer this current to calculate the applied torque to the rotor.";
2075 case SpnValue::PRO_SupplyAndTemp_StatorCurrent: return "Current corresponding to the stator windings. Similar to TorqueCurrent. Users will likely prefer TorqueCurrent over StatorCurrent.";
2076 case SpnValue::PRO_SupplyAndTemp_SupplyCurrent: return "Measured supply side current.";
2077 case SpnValue::PRO_SupplyAndTemp_SupplyVoltage: return "Measured supply voltage to the device.";
2078 case SpnValue::PRO_SupplyAndTemp_DeviceTemp: return "Temperature of device.";
2079 case SpnValue::PRO_SupplyAndTemp_ProcessorTemp: return "Temperature of the processor.";
2080 case SpnValue::PRO_RotorPosAndVel_Velocity: return "Velocity of the motor rotor. This velocity is not affected by any feedback configs.";
2081 case SpnValue::PRO_RotorPosAndVel_Position: return "Position of the motor rotor. This position is only affected by the RotorOffset config and calls to setPosition.";
2082 case SpnValue::PRO_PosAndVel_Velocity: return "Velocity of the device in mechanism rotations per second. This can be the velocity of a remote sensor and is affected by the RotorToSensorRatio and SensorToMechanismRatio configs.";
2083 case SpnValue::PRO_PosAndVel_Position: return "Position of the device in mechanism rotations. This can be the position of a remote sensor and is affected by the RotorToSensorRatio and SensorToMechanismRatio configs, as well as calls to setPosition.";
2084 case SpnValue::PRO_PosAndVel_Acceleration: return "Acceleration of the device in mechanism rotations per second². This can be the acceleration of a remote sensor and is affected by the RotorToSensorRatio and SensorToMechanismRatio configs.";
2085 case SpnValue::PRO_PIDStateEnables_IntegratedAccum_DC: return "Integrated Accumulator of PID controller when PID'ing under a DutyCycle Request.";
2086 case SpnValue::PRO_PIDStateEnables_IntegratedAccum_V: return "Integrated Accumulator of PID controller when PID'ing under a Voltage Request.";
2087 case SpnValue::PRO_PIDStateEnables_IntegratedAccum_A: return "Integrated Accumulator of PID controller when PID'ing under a TorqueCurrent Request.";
2088 case SpnValue::PRO_PIDStateEnables_FeedForward_DC: return "Feedforward passed to PID controller.";
2089 case SpnValue::PRO_PIDStateEnables_FeedForward_V: return "Feedforward passed to PID controller.";
2090 case SpnValue::PRO_PIDStateEnables_FeedForward_A: return "Feedforward passed to PID controller.";
2091 case SpnValue::TalonFX_ControlMode: return "The active control mode of the motor controller.";
2092 case SpnValue::ExternalMotorTempStatus: return "Status of the temperature sensor of the external motor.";
2093 case SpnValue::ExternalMotorTemp: return "Temperature of the external motor.";
2094 case SpnValue::PRO_PIDStateEnables_IsMotionMagicRunning: return "Check if Motion Magic® is running. This is equivalent to checking that the reported control mode is a Motion Magic® based mode.";
2095 case SpnValue::PRO_PIDStateEnables_RobotEnable: return "Indicates if the robot is enabled.";
2096 case SpnValue::PRO_PIDStateEnables_DeviceEnable: return "Indicates if device is actuator enabled.";
2097 case SpnValue::PRO_PIDRefPIDErr_PIDRef_Position: return "Input position of PID controller when PID'ing to a position.";
2098 case SpnValue::PRO_PIDRefPIDErr_PIDRef_Velocity: return "Input velocity of PID controller when PID'ing to a velocity.";
2099 case SpnValue::PRO_PIDRefPIDErr_PIDErr_Position: return "The difference between target position and current position.";
2100 case SpnValue::PRO_PIDRefPIDErr_PIDErr_Velocity: return "The difference between target velocity and current velocity.";
2101 case SpnValue::PRO_PIDRefPIDErr_ClosedLoopMode: return "Whether the closed-loop is running on position or velocity.";
2102 case SpnValue::PRO_PIDOutput_PIDOutputMode: return "The output mode of the PID controller.";
2103 case SpnValue::PRO_PIDOutput_ProportionalOutput_DC: return "Proportional output of PID controller when PID'ing under a DutyCycle Request.";
2104 case SpnValue::PRO_PIDOutput_ProportionalOutput_V: return "Proportional output of PID controller when PID'ing under a Voltage Request.";
2105 case SpnValue::PRO_PIDOutput_ProportionalOutput_A: return "Proportional output of PID controller when PID'ing under a TorqueCurrent Request.";
2106 case SpnValue::PRO_PIDOutput_DerivativeOutput_DC: return "Derivative Output of PID controller when PID'ing under a DutyCycle Request.";
2107 case SpnValue::PRO_PIDOutput_DerivativeOutput_V: return "Derivative Output of PID controller when PID'ing under a Voltage Request.";
2108 case SpnValue::PRO_PIDOutput_DerivativeOutput_A: return "Derivative Output of PID controller when PID'ing under a TorqueCurrent Request.";
2109 case SpnValue::PRO_PIDOutput_Output_DC: return "Output of PID controller when PID'ing under a DutyCycle Request.";
2110 case SpnValue::PRO_PIDOutput_Output_V: return "Output of PID controller when PID'ing under a Voltage Request.";
2111 case SpnValue::PRO_PIDOutput_Output_A: return "Output of PID controller when PID'ing under a TorqueCurrent Request.";
2112 case SpnValue::PRO_PIDOutput_Slot: return "The slot that the closed-loop PID is using.";
2113 case SpnValue::PRO_PIDRefSlopeECUTime_ReferenceSlope_Position: return "Change in input (velocity) of PID controller when PID'ing to a position.";
2114 case SpnValue::PRO_PIDRefSlopeECUTime_ReferenceSlope_Velocity: return "Change in input (acceleration) of PID controller when PID'ing to a velocity.";
2115 case SpnValue::PRO_PIDRefSlopeECUTime_ClosedLoopMode: return "Whether the closed-loop is running on position or velocity.";
2116 case SpnValue::TalonFX_MotorOutputStatus: return "Assess the status of the motor output with respect to load and supply.";
2117 case SpnValue::PRO_MotorOutput_PIDState_Diff_DutyCycle: return "The calculated motor duty cycle for differential followers.";
2118 case SpnValue::PRO_MotorOutput_PIDState_Diff_TorqueCurrent: return "The calculated motor torque current for differential followers.";
2119 case SpnValue::TalonFX_DifferentialControlMode: return "The active control mode of the differential controller.";
2120 case SpnValue::PRO_MotorOutput_PIDState_Diff_IntegratedAccum_DC: return "Integrated Accumulator of differential PID controller when PID'ing under a DutyCycle Request.";
2121 case SpnValue::PRO_MotorOutput_PIDState_Diff_IntegratedAccum_V: return "Integrated Accumulator of differential PID controller when PID'ing under a Voltage Request.";
2122 case SpnValue::PRO_MotorOutput_PIDState_Diff_IntegratedAccum_A: return "Integrated Accumulator of differential PID controller when PID'ing under a TorqueCurrent Request.";
2123 case SpnValue::PRO_MotorOutput_PIDState_Diff_FeedForward_DC: return "Feedforward passed to differential PID controller.";
2124 case SpnValue::PRO_MotorOutput_PIDState_Diff_FeedForward_V: return "Feedforward passed to differential PID controller.";
2125 case SpnValue::PRO_MotorOutput_PIDState_Diff_FeedForward_A: return "Feedforward passed to differential PID controller.";
2126 case SpnValue::PRO_AvgPosAndVel_Velocity: return "Average component of the differential velocity of device.";
2127 case SpnValue::PRO_AvgPosAndVel_Position: return "Average component of the differential position of device.";
2128 case SpnValue::PRO_DiffPosAndVel_Velocity: return "Difference component of the differential velocity of device.";
2129 case SpnValue::PRO_DiffPosAndVel_Position: return "Difference component of the differential position of device.";
2130 case SpnValue::PRO_DiffPIDRefPIDErr_PIDRef_Position: return "Input position of differential PID controller when PID'ing to a differential position.";
2131 case SpnValue::PRO_DiffPIDRefPIDErr_PIDRef_Velocity: return "Input velocity of differential PID controller when PID'ing to a differential velocity.";
2132 case SpnValue::PRO_DiffPIDRefPIDErr_PIDErr_Position: return "The difference between target differential position and current differential position.";
2133 case SpnValue::PRO_DiffPIDRefPIDErr_PIDErr_Velocity: return "The difference between target differential velocity and current differential velocity.";
2134 case SpnValue::PRO_DiffPIDRefPIDErr_ClosedLoopMode: return "Whether the closed-loop is running on position or velocity.";
2135 case SpnValue::PRO_DiffPIDOutput_PIDOutputMode: return "The output mode of the differential PID controller.";
2136 case SpnValue::PRO_DiffPIDOutput_ProportionalOutput_DC: return "Proportional output of differential PID controller when PID'ing under a DutyCycle Request.";
2137 case SpnValue::PRO_DiffPIDOutput_ProportionalOutput_V: return "Proportional output of differential PID controller when PID'ing under a Voltage Request.";
2138 case SpnValue::PRO_DiffPIDOutput_ProportionalOutput_A: return "Proportional output of differential PID controller when PID'ing under a TorqueCurrent Request.";
2139 case SpnValue::PRO_DiffPIDOutput_DerivativeOutput_DC: return "Derivative Output of differential PID controller when PID'ing under a DutyCycle Request.";
2140 case SpnValue::PRO_DiffPIDOutput_DerivativeOutput_V: return "Derivative Output of differential PID controller when PID'ing under a Voltage Request.";
2141 case SpnValue::PRO_DiffPIDOutput_DerivativeOutput_A: return "Derivative Output of differential PID controller when PID'ing under a TorqueCurrent Request.";
2142 case SpnValue::PRO_DiffPIDOutput_Output_DC: return "Output of differential PID controller when PID'ing under a DutyCycle Request.";
2143 case SpnValue::PRO_DiffPIDOutput_Output_V: return "Output of differential PID controller when PID'ing under a Voltage Request.";
2144 case SpnValue::PRO_DiffPIDOutput_Output_A: return "Output of differential PID controller when PID'ing under a TorqueCurrent Request.";
2145 case SpnValue::PRO_DiffPIDOutput_Slot: return "The slot that the closed-loop differential PID is using.";
2146 case SpnValue::PRO_DiffPIDRefSlopeECUTime_ReferenceSlope_Position: return "Change in input (velocity) of differential PID controller when PID'ing to a differential position.";
2147 case SpnValue::PRO_DiffPIDRefSlopeECUTime_ReferenceSlope_Velocity: return "Change in input (acceleration) of differential PID controller when PID'ing to a differential velocity.";
2148 case SpnValue::PRO_DiffPIDRefSlopeECUTime_ClosedLoopMode: return "Whether the closed-loop is running on position or velocity.";
2149 case SpnValue::TalonFX_MotorConstants_kT: return "The torque constant (K_T) of the motor.";
2150 case SpnValue::TalonFX_MotorConstants_kV: return "The velocity constant (K_V) of the motor.";
2151 case SpnValue::TalonFX_MotorConstants_StallCurrent: return "The stall current of the motor at 12 V output.";
2152 case SpnValue::Slot0_kP: return "Proportional Gain.";
2153 case SpnValue::Slot0_kI: return "Integral Gain.";
2154 case SpnValue::Slot0_kD: return "Derivative Gain.";
2155 case SpnValue::Slot0_kS: return "Static Feedforward Gain.";
2156 case SpnValue::Slot0_kV: return "Velocity Feedforward Gain.";
2157 case SpnValue::Slot0_kA: return "Acceleration Feedforward Gain.";
2158 case SpnValue::Slot0_kG: return "Gravity Feedforward/Feedback Gain.";
2159 case SpnValue::Slot0_kG_Type: return "Gravity Feedforward/Feedback Type.\nThis determines the type of the gravity feedforward/feedback.\nChoose Elevator_Static for systems where the gravity feedforward is constant, such as an elevator. The gravity feedforward output will always have the same sign.\nChoose Arm_Cosine for systems where the gravity feedback is dependent on the angular position of the mechanism, such as an arm. The gravity feedback output will vary depending on the mechanism angular position. Note that the sensor offset and ratios must be configured so that the sensor reports a position of 0 when the mechanism is horizonal (parallel to the ground), and the reported sensor position is 1:1 with the mechanism.";
2160 case SpnValue::Slot1_kP: return "Proportional Gain.";
2161 case SpnValue::Slot1_kI: return "Integral Gain.";
2162 case SpnValue::Slot1_kD: return "Derivative Gain.";
2163 case SpnValue::Slot1_kS: return "Static Feedforward Gain.";
2164 case SpnValue::Slot1_kV: return "Velocity Feedforward Gain.";
2165 case SpnValue::Slot1_kA: return "Acceleration Feedforward Gain.";
2166 case SpnValue::Slot1_kG: return "Gravity Feedforward/Feedback Gain.";
2167 case SpnValue::Slot1_kG_Type: return "Gravity Feedforward/Feedback Type.\nThis determines the type of the gravity feedforward/feedback.\nChoose Elevator_Static for systems where the gravity feedforward is constant, such as an elevator. The gravity feedforward output will always be positive.\nChoose Arm_Cosine for systems where the gravity feedback is dependent on the angular position of the mechanism, such as an arm. The gravity feedback output will vary depending on the mechanism angular position. Note that the sensor offset and ratios must be configured so that the sensor position is 0 when the mechanism is horizonal, and one rotation of the mechanism corresponds to one rotation of the sensor position.";
2168 case SpnValue::Slot2_kP: return "Proportional Gain.";
2169 case SpnValue::Slot2_kI: return "Integral Gain.";
2170 case SpnValue::Slot2_kD: return "Derivative Gain.";
2171 case SpnValue::Slot2_kS: return "Static Feedforward Gain.";
2172 case SpnValue::Slot2_kV: return "Velocity Feedforward Gain.";
2173 case SpnValue::Slot2_kA: return "Acceleration Feedforward Gain.";
2174 case SpnValue::Slot2_kG: return "Gravity Feedforward/Feedback Gain.";
2175 case SpnValue::Slot2_kG_Type: return "Gravity Feedforward/Feedback Type.\nThis determines the type of the gravity feedforward/feedback.\nChoose Elevator_Static for systems where the gravity feedforward is constant, such as an elevator. The gravity feedforward output will always be positive.\nChoose Arm_Cosine for systems where the gravity feedback is dependent on the angular position of the mechanism, such as an arm. The gravity feedback output will vary depending on the mechanism angular position. Note that the sensor offset and ratios must be configured so that the sensor position is 0 when the mechanism is horizonal, and one rotation of the mechanism corresponds to one rotation of the sensor position.";
2176 case SpnValue::Config_Inverted: return "Invert state of the device as seen from the front of the motor.";
2177 case SpnValue::Config_SupplyVLowpassTau: return "The time constant (in seconds) of the low-pass filter for the supply voltage.";
2178 case SpnValue::Config_BeepOnBoot: return "If true, the TalonFX will beep during boot-up. This is useful for general debugging, and defaults to true. If rotor is moving during boot-up, the beep will not occur regardless of this setting.";
2179 case SpnValue::Config_NeutralMode: return "The state of the motor controller bridge when output is neutral or disabled.";
2180 case SpnValue::Config_DutyCycleNeutralDB: return "Configures the output deadband duty cycle during duty cycle and voltage based control modes.";
2181 case SpnValue::Config_StatorCurrentLimit: return "The amount of current allowed in the motor (motoring and regen current). Note this requires StatorCurrentLimitEnable to be true.\nFor torque current control, this is applied in addition to the PeakForwardTorqueCurrent and PeakReverseTorqueCurrent in TorqueCurrentConfigs.\nStator current is directly proportional to torque, so this limit can be used to restrict the torque output of the motor, such as preventing wheel slip for a drivetrain. Additionally, stator current limits can prevent brownouts during acceleration; supply current will never exceed the stator current limit and is often significantly lower than stator current.\nA reasonable starting point for a stator current limit is 120 A, with values commonly ranging from 80-160 A. Mechanisms with a hard stop may need a smaller limit to reduce the torque applied when running into the hard stop.";
2182 case SpnValue::Config_StatorCurrLimitEn: return "Enable motor stator current limiting.";
2183 case SpnValue::Config_SupplyCurrentLimit: return "The absolute maximum amount of supply current allowed. Note this requires SupplyCurrentLimitEnable to be true. Use SupplyCurrentLowerLimit and SupplyCurrentLowerTime to reduce the supply current limit after the time threshold is exceeded.\nSupply current is the current drawn from the battery, so this limit can be used to prevent breaker trips and improve battery longevity. Additionally, in scenarios where the robot experiences brownouts despite configuring stator current limits, a supply current limit can further help avoid brownouts. However, it is important to note that such brownouts may be caused by a bad battery or poor power wiring.\nA reasonable starting point for a supply current limit is 70 A with a lower limit of 40 A after 1.0 second. Supply current limits commonly range from 20-80 A depending on the breaker used.";
2184 case SpnValue::Config_SupplyCurrLimitEn: return "Enable motor supply current limiting.";
2185 case SpnValue::Config_PeakForwardDC: return "Maximum (forward) output during duty cycle based control modes.";
2186 case SpnValue::Config_PeakReverseDC: return "Minimum (reverse) output during duty cycle based control modes.";
2187 case SpnValue::Config_PeakForwardV: return "Maximum (forward) output during voltage based control modes.";
2188 case SpnValue::Config_PeakReverseV: return "Minimum (reverse) output during voltage based control modes.";
2189 case SpnValue::Config_PeakForTorqCurr: return "Maximum (forward) output during torque current based control modes.";
2190 case SpnValue::Config_PeakRevTorqCurr: return "Minimum (reverse) output during torque current based control modes.";
2191 case SpnValue::Config_TorqueNeutralDB: return "Configures the output deadband during torque current based control modes.";
2192 case SpnValue::Config_FeedbackRotorOffset: return "The offset applied to the absolute integrated rotor sensor. This can be used to zero the rotor in applications that are within one rotor rotation.";
2193 case SpnValue::Config_SensorToMechanismRatio: return "The ratio of sensor rotations to the mechanism's output, where a ratio greater than 1 is a reduction.\nThis is equivalent to the mechanism's gear ratio if the sensor is located on the input of a gearbox. If sensor is on the output of a gearbox, then this is typically set to 1.\nWe recommend against using this config to perform onboard unit conversions. Instead, unit conversions should be performed in robot code using the units library.\nIf this is set to zero, the device will reset back to one.";
2194 case SpnValue::Config_RotorToSensorRatio: return "The ratio of motor rotor rotations to remote sensor rotations, where a ratio greater than 1 is a reduction.\nThe Talon FX is capable of fusing a remote CANcoder with its rotor sensor to produce a high-bandwidth sensor source. This feature requires specifying the ratio between the motor rotor and the remote sensor.\nIf this is set to zero, the device will reset back to one.";
2195 case SpnValue::Config_FeedbackSensorSource: return "Choose what sensor source is reported via API and used by closed-loop and limit features. The default is RotorSensor, which uses the internal rotor sensor in the Talon.\nChoose Remote* to use another sensor on the same CAN bus (this also requires setting FeedbackRemoteSensorID). Talon will update its position and velocity whenever the remote sensor publishes its information on CAN bus, and the Talon internal rotor will not be used.\nChoose Fused* (requires Phoenix Pro) and Talon will fuse another sensor's information with the internal rotor, which provides the best possible position and velocity for accuracy and bandwidth (this also requires setting FeedbackRemoteSensorID). This was developed for applications such as swerve-azimuth.\nChoose Sync* (requires Phoenix Pro) and Talon will synchronize its internal rotor position against another sensor, then continue to use the rotor sensor for closed loop control (this also requires setting FeedbackRemoteSensorID). The Talon will report if its internal position differs significantly from the reported remote sensor position. This was developed for mechanisms where there is a risk of the sensor failing in such a way that it reports a position that does not match the mechanism, such as the sensor mounting assembly breaking off.\nChoose RemotePigeon2_Yaw, RemotePigeon2_Pitch, and RemotePigeon2_Roll to use another Pigeon2 on the same CAN bus (this also requires setting FeedbackRemoteSensorID). Talon will update its position to match the selected value whenever Pigeon2 publishes its information on CAN bus. Note that the Talon position will be in rotations and not degrees.";
2196 case SpnValue::Config_FeedbackRemoteSensorID: return "Device ID of which remote device to use. This is not used if the Sensor Source is the internal rotor sensor.";
2197 case SpnValue::Config_DutyCycleOpenLoopRampPeriod: return "If non-zero, this determines how much time to ramp from 0% output to 100% during the open-loop DutyCycleOut control mode.\nThis provides an easy way to limit the acceleration of the motor. However, the acceleration and current draw of the motor can be better restricted using current limits instead of a ramp rate.";
2198 case SpnValue::Config_VoltageOpenLoopRampPeriod: return "If non-zero, this determines how much time to ramp from 0V output to 12V during the open-loop VoltageOut control mode.\nThis provides an easy way to limit the acceleration of the motor. However, the acceleration and current draw of the motor can be better restricted using current limits instead of a ramp rate.";
2199 case SpnValue::Config_TorqueOpenLoopRampPeriod: return "If non-zero, this determines how much time to ramp from 0A output to 300A during the open-loop TorqueCurrent control mode.\nSince TorqueCurrent is directly proportional to acceleration, this ramp limits jerk instead of acceleration.";
2200 case SpnValue::Config_DutyCycleClosedLoopRampPeriod: return "If non-zero, this determines how much time to ramp from 0% output to 100% during the closed-loop DutyCycle control modes.\nIf the goal is to limit acceleration, it is more useful to ramp the closed-loop setpoint instead of the output. This can be achieved using Motion Magic® controls.\nThe acceleration and current draw of the motor can also be better restricted using current limits instead of a ramp rate.";
2201 case SpnValue::Config_VoltageClosedLoopRampPeriod: return "If non-zero, this determines how much time to ramp from 0V output to 12V during the closed-loop Voltage control modes.\nIf the goal is to limit acceleration, it is more useful to ramp the closed-loop setpoint instead of the output. This can be achieved using Motion Magic® controls.\nThe acceleration and current draw of the motor can also be better restricted using current limits instead of a ramp rate.";
2202 case SpnValue::Config_TorqueClosedLoopRampPeriod: return "If non-zero, this determines how much time to ramp from 0A output to 300A during the closed-loop TorqueCurrent control modes.\nSince TorqueCurrent is directly proportional to acceleration, this ramp limits jerk instead of acceleration.\nIf the goal is to limit acceleration or jerk, it is more useful to ramp the closed-loop setpoint instead of the output. This can be achieved using Motion Magic® controls.\nThe acceleration and current draw of the motor can also be better restricted using current limits instead of a ramp rate.";
2203 case SpnValue::Config_ForwardLimitType: return "Determines if the forward limit switch is normally-open (default) or normally-closed.";
2204 case SpnValue::Config_ForwardLimitAutosetPosEnable: return "If enabled, the position is automatically set to a specific value, specified by ForwardLimitAutosetPositionValue, when the forward limit switch is asserted.";
2205 case SpnValue::Config_ForwardLimitAutosetPosValue: return "The value to automatically set the position to when the forward limit switch is asserted. This has no effect if ForwardLimitAutosetPositionEnable is false.";
2206 case SpnValue::Config_ForwardLimitEnable: return "If enabled, motor output is set to neutral when the forward limit switch is asserted and positive output is requested.";
2207 case SpnValue::Config_ForwardLimitSource: return "Determines where to poll the forward limit switch. This defaults to the forward limit switch pin on the limit switch connector.\nChoose RemoteTalonFX to use the forward limit switch attached to another Talon FX on the same CAN bus (this also requires setting ForwardLimitRemoteSensorID).\nChoose RemoteCANifier to use the forward limit switch attached to another CANifier on the same CAN bus (this also requires setting ForwardLimitRemoteSensorID).\nChoose RemoteCANcoder to use another CANcoder on the same CAN bus (this also requires setting ForwardLimitRemoteSensorID). The forward limit will assert when the CANcoder magnet strength changes from BAD (red) to ADEQUATE (orange) or GOOD (green).";
2208 case SpnValue::Config_ForwardLimitRemoteSensorID: return "Device ID of the remote device if using remote limit switch features for the forward limit switch.";
2209 case SpnValue::Config_ReverseLimitType: return "Determines if the reverse limit switch is normally-open (default) or normally-closed.";
2210 case SpnValue::Config_ReverseLimitAutosetPosEnable: return "If enabled, the position is automatically set to a specific value, specified by ReverseLimitAutosetPositionValue, when the reverse limit switch is asserted.";
2211 case SpnValue::Config_ReverseLimitAutosetPosValue: return "The value to automatically set the position to when the reverse limit switch is asserted. This has no effect if ReverseLimitAutosetPositionEnable is false.";
2212 case SpnValue::Config_ReverseLimitEnable: return "If enabled, motor output is set to neutral when reverse limit switch is asseted and negative output is requested.";
2213 case SpnValue::Config_ReverseLimitSource: return "Determines where to poll the reverse limit switch. This defaults to the reverse limit switch pin on the limit switch connector.\nChoose RemoteTalonFX to use the reverse limit switch attached to another Talon FX on the same CAN bus (this also requires setting ReverseLimitRemoteSensorID).\nChoose RemoteCANifier to use the reverse limit switch attached to another CANifier on the same CAN bus (this also requires setting ReverseLimitRemoteSensorID).\nChoose RemoteCANcoder to use another CANcoder on the same CAN bus (this also requires setting ReverseLimitRemoteSensorID). The reverse limit will assert when the CANcoder magnet strength changes from BAD (red) to ADEQUATE (orange) or GOOD (green).";
2214 case SpnValue::Config_ReverseLimitRemoteSensorID: return "Device ID of the remote device if using remote limit switch features for the reverse limit switch.";
2215 case SpnValue::Config_ForwardSoftLimitEnable: return "If enabled, the motor output is set to neutral if position exceeds ForwardSoftLimitThreshold and forward output is requested.";
2216 case SpnValue::Config_ReverseSoftLimitEnable: return "If enabled, the motor output is set to neutral if position exceeds ReverseSoftLimitThreshold and reverse output is requested.";
2217 case SpnValue::Config_ForwardSoftLimitThreshold: return "Position threshold for forward soft limit features. ForwardSoftLimitEnable must be enabled for this to take effect.";
2218 case SpnValue::Config_ReverseSoftLimitThreshold: return "Position threshold for reverse soft limit features. ReverseSoftLimitEnable must be enabled for this to take effect.";
2219 case SpnValue::Config_MotionMagicCruiseVelocity: return "This is the maximum velocity Motion Magic® based control modes are allowed to use. Motion Magic® Velocity control modes do not use this config.\nWhen using Motion Magic® Expo control modes, setting this to 0 will allow the profile to run to the max possible velocity based on Expo_kV.";
2220 case SpnValue::Config_MotionMagicAcceleration: return "This is the target acceleration Motion Magic® based control modes are allowed to use. Motion Magic® Expo control modes do not use this config.";
2221 case SpnValue::Config_MotionMagicJerk: return "This is the target jerk (acceleration derivative) Motion Magic® based control modes are allowed to use. Motion Magic® Expo control modes do not use this config. This allows Motion Magic® to generate S-Curve profiles.\nJerk is optional; if this is set to zero, then Motion Magic® will not apply a Jerk limit.";
2222 case SpnValue::Config_MotionMagicExpo_kV: return "This is the target kV used only by Motion Magic® Expo control modes. Unlike the kV slot gain, this is always in units of V/rps.\nThis represents the amount of voltage necessary to hold a velocity. In terms of the Motion Magic® Expo profile, a higher kV results in a slower maximum velocity.";
2223 case SpnValue::Config_MotionMagicExpo_kA: return "This is the target kA used only by Motion Magic® Expo control modes. Unlike the kA slot gain, this is always in units of V/rps².\nThis represents the amount of voltage necessary to achieve an acceleration. In terms of the Motion Magic® Expo profile, a higher kA results in a slower acceleration.";
2224 case SpnValue::Config_PeakDiffDC: return "Maximum differential output during duty cycle based differential control modes.";
2225 case SpnValue::Config_PeakDiffV: return "Maximum differential output during voltage based differential control modes.";
2226 case SpnValue::Config_PeakDiffTorqCurr: return "Maximum differential output during torque current based differential control modes.";
2227 case SpnValue::CANcoder_Velocity: return "Velocity of the device.";
2228 case SpnValue::CANcoder_Position: return "Position of the device. This is initialized to the absolute position on boot.";
2229 case SpnValue::CANcoder_AbsPosition: return "Absolute Position of the device. The possible range is documented below; however, the exact expected range is determined by the AbsoluteSensorDiscontinuityPoint. This position is only affected by the MagnetSensor configs.";
2230 case SpnValue::CANCoder_RawVel: return "The unfiltered velocity reported by CANcoder.";
2231 case SpnValue::CANCoder_RawPos: return "The relative position reported by the CANcoder since boot.";
2232 case SpnValue::CANCoder_SupplyVoltage: return "Measured supply voltage to the CANcoder.";
2233 case SpnValue::CANcoder_MagHealth: return "Magnet health as measured by CANcoder.\nRed indicates too close or too far, Orange is adequate but with reduced accuracy, green is ideal. Invalid means the accuracy cannot be determined.";
2234 case SpnValue::SPN_ClearStickyFaults: return "Clear the sticky faults in the device.";
2235 case SpnValue::PRO_MotorOutput_BridgeType_Public: return "The applied output of the bridge.";
2236 case SpnValue::Config_ContinuousWrap: return "Wrap position error within [-0.5,+0.5) mechanism rotations. Typically used for continuous position closed-loops like swerve azimuth.";
2237 case SpnValue::Config_SupplyCurrentLowerLimit: return "The amount of supply current allowed after the regular SupplyCurrentLimit is active for longer than SupplyCurrentLowerTime. This allows higher current draws for a fixed period of time before reducing the current limit to protect breakers. This has no effect if SupplyCurrentLimit is lower than this value or SupplyCurrentLowerTime is 0.";
2238 case SpnValue::Config_SupplyCurrentLowerTime: return "Reduces supply current to the SupplyCurrentLowerLimit after limiting to SupplyCurrentLimit for this period of time. If this is set to 0, SupplyCurrentLowerLimit will be ignored.";
2239 case SpnValue::Config_DifferentialSensorSource: return "Choose what sensor source is used for differential control of a mechanism. The default is Disabled. All other options require setting the DifferentialTalonFXSensorID, as the average of this Talon FX's sensor and the remote TalonFX's sensor is used for the differential controller's primary targets.\nChoose RemoteTalonFX_Diff to use another TalonFX on the same CAN bus. Talon FX will update its differential position and velocity whenever the remote TalonFX publishes its information on CAN bus. The differential controller will use the difference between this TalonFX's sensor and the remote Talon FX's sensor for the differential component of the output.\nChoose RemotePigeon2_Yaw, RemotePigeon2_Pitch, and RemotePigeon2_Roll to use another Pigeon2 on the same CAN bus (this also requires setting DifferentialRemoteSensorID). Talon FX will update its differential position to match the selected value whenever Pigeon2 publishes its information on CAN bus. Note that the Talon FX differential position will be in rotations and not degrees.\nChoose RemoteCANcoder to use another CANcoder on the same CAN bus (this also requires setting DifferentialRemoteSensorID). Talon FX will update its differential position and velocity to match the CANcoder whenever CANcoder publishes its information on CAN bus.";
2240 case SpnValue::Config_DifferentialTalonFXSensorID: return "Device ID of which remote Talon FX to use. This is used when the Differential Sensor Source is not disabled.";
2241 case SpnValue::Config_DifferentialRemoteSensorID: return "Device ID of which remote sensor to use on the differential axis. This is used when the Differential Sensor Source is not RemoteTalonFX_Diff.";
2242 case SpnValue::Config_BeepOnConfig: return "If true, the TalonFX will beep during configuration API calls if device is disabled. This is useful for general debugging, and defaults to true. Note that if the rotor is moving, the beep will not occur regardless of this setting.";
2243 case SpnValue::Config_AllowMusicDurDisable: return "If true, the TalonFX will allow Orchestra and MusicTone requests during disabled state. This can be used to address corner cases when music features are needed when disabled. This setting defaults to false. Note that if the rotor is moving, music features are always disabled regardless of this setting.";
2244 case SpnValue::Compliancy_Version: return "Compliancy number.";
2245 case SpnValue::Version_IsProLicensed: return "Whether the device is Phoenix Pro licensed.";
2246 case SpnValue::PRO_SupplyAndTemp_DeviceTemp2: return "Temperature of device from second sensor.";
2247 case SpnValue::Slot0_kS_Sign: return "Static Feedforward Sign during position closed loop.\nThis determines the sign of the applied kS during position closed-loop modes. The default behavior uses the velocity reference sign. This works well with velocity closed loop, Motion Magic® controls, and position closed loop when velocity reference is specified (motion profiling).\nHowever, when using position closed loop with zero velocity reference (no motion profiling), the application may want to apply static feedforward based on the sign of closed loop error instead. When doing so, we recommend using the minimal amount of kS, otherwise the motor output may dither when closed loop error is near zero.";
2248 case SpnValue::Slot1_kS_Sign: return "Static Feedforward Sign during position closed loop.\nThis determines the sign of the applied kS during position closed-loop modes. The default behavior uses the velocity reference sign. This works well with velocity closed loop, Motion Magic® controls, and position closed loop when velocity reference is specified (motion profiling).\nHowever, when using position closed loop with zero velocity reference (no motion profiling), the application may want to apply static feedforward based on the closed loop error sign instead. When doing so, we recommend using the minimal amount of kS, otherwise the motor output may dither when closed loop error is near zero.";
2249 case SpnValue::Slot2_kS_Sign: return "Static Feedforward Sign during position closed loop.\nThis determines the sign of the applied kS during position closed-loop modes. The default behavior uses the velocity reference sign. This works well with velocity closed loop, Motion Magic® controls, and position closed loop when velocity reference is specified (motion profiling).\nHowever, when using position closed loop with zero velocity reference (no motion profiling), the application may want to apply static feedforward based on the closed loop error sign instead. When doing so, we recommend using the minimal amount of kS, otherwise the motor output may dither when closed loop error is near zero.";
2250 case SpnValue::TalonFX_ConnectedMotor: return "The type of motor attached to the Talon.";
2251 case SpnValue::CANrange_SupplyVoltage: return "Measured supply voltage to the CANrange.";
2252 case SpnValue::CANrange_Distance_Meters: return "Distance to the nearest object in the configured field of view of the CANrange.";
2253 case SpnValue::CANrange_MeasTime: return "Timestamp of the most recent measurements. This is not synchronized to any other clock source.\nUsers can use this to check when the measurements are updated.";
2254 case SpnValue::CANrange_SignalStrength: return "Approximate signal strength of the measurement. A higher value indicates a higher strength of signal.\nA value of ~2500 is typical when detecting an object under short-range conditions.";
2255 case SpnValue::CANrange_ProximityDetected: return "Whether the CANrange detects an object using the configured proximity parameters.";
2256 case SpnValue::CANrange_MeasState: return "Health of the distance measurement.";
2257 case SpnValue::CANrange_AmbientSignal: return "The amount of ambient infrared light that the sensor is detecting. For ideal operation, this should be as low as possible.";
2258 case SpnValue::CANrange_DistanceStdDev: return "Standard Deviation of the distance measurement.";
2259 case SpnValue::CANrange_RealFOVCenterX: return "The actual center of the FOV in the X direction. This takes into account the user-configured FOVCenterX and FOVRangeX.";
2260 case SpnValue::CANrange_RealFOVCenterY: return "The actual center of the FOV in the Y direction. This takes into account the user-configured FOVCenterY and FOVRangeY.";
2261 case SpnValue::CANrange_RealFOVRangeX: return "The actual range of the FOV in the X direction. This takes into account the user-configured FOVRangeX.";
2262 case SpnValue::CANrange_RealFOVRangeY: return "The actual range of the FOV in the Y direction. This takes into account the user-configured FOVRangeY.";
2263 case SpnValue::CANrange_UpdateMode: return "Update mode of the CANrange. The CANrange supports short-range and long-range detection at various update frequencies.";
2264 case SpnValue::CANrange_UpdateFreq: return "Rate at which the CANrange will take measurements. A lower frequency may provide more stable readings but will reduce the data rate of the sensor.";
2265 case SpnValue::CANrange_ProximityThreshold: return "Threshold for object detection.";
2266 case SpnValue::CANrange_ProximityHysteresis: return "How far above and below the threshold the distance needs to be to trigger undetected and detected, respectively. This is used to prevent bouncing between the detected and undetected states for objects on the threshold.\nIf the threshold is set to 0.1 meters, and the hysteresis is 0.01 meters, then an object needs to be within 0.09 meters to be detected. After the object is first detected, the distance then needs to exceed 0.11 meters to become undetected again.";
2267 case SpnValue::CANrange_MinSigStrengthForValidMeas: return "The minimum allowable signal strength before determining the measurement is valid.\nIf the signal strength is particularly low, this typically means the object is far away and there's fewer total samples to derive the distance from. Set this value to be below the lowest strength you see when you're detecting an object with the CANrange; the default of 2500 is typically acceptable in most cases.";
2268 case SpnValue::CANrange_FOVCenterX: return "Specifies the target center of the Field of View in the X direction.";
2269 case SpnValue::CANrange_FOVCenterY: return "Specifies the target center of the Field of View in the Y direction.";
2270 case SpnValue::CANrange_FOVRangeX: return "Specifies the target range of the Field of View in the X direction. This is the full range of the FOV.\nThe magnitude of this is capped to abs(27 - 2*FOVCenterX).";
2271 case SpnValue::CANrange_FOVRangeY: return "Specifies the target range of the Field of View in the Y direction. This is the full range of the FOV.\nThe magnitude of this is capped to abs(27 - 2*FOVCenterY).";
2272 case SpnValue::Config_ControlTimesyncFreq: return "When a control request UseTimesync is enabled, this determines the time-sychronized frequency at which control requests are applied.";
2273 case SpnValue::Config_VelocityFilterTimeConstant: return "The configurable time constant of the Kalman velocity filter. The velocity Kalman filter will adjust to act as a low-pass with this value as its time constant.";
2274 case SpnValue::Config_AdvancedHallSupport: return "Requires Phoenix Pro; Improves commutation and velocity measurement for motors with hall sensors. Talon can use advanced features to improve commutation and velocity measurement when using a motor with hall sensors. This can improve peak efficiency by as high as 2% and reduce noise in the measured velocity.";
2275 case SpnValue::Config_MotorType: return "Selects the motor and motor connections used with Talon.\nThis setting determines what kind of motor and sensors are used with the Talon. This also determines what signals are used on the JST and Gadgeteer port.\nMotor drive will not function correctly if this setting does not match the physical setup.";
2276 case SpnValue::CANdi_Pin1State: return "State of the Signal 1 input (S1IN).";
2277 case SpnValue::CANdi_Pin2State: return "State of the Signal 2 input (S2IN).";
2278 case SpnValue::CANdi_QuadPosition: return "Position from a quadrature encoder sensor connected to both the S1IN and S2IN inputs.";
2279 case SpnValue::CANdi_Pwm1_RiseToRise: return "Measured rise to rise time of the PWM signal at the S1 input of the CTR Electronics' CANdi™.";
2280 case SpnValue::CANdi_Pwm1_Position: return "Measured position of the PWM sensor at the S1 input of the CTR Electronics' CANdi™.";
2281 case SpnValue::CANdi_Pwm1_Velocity: return "Measured velocity of the PWM sensor at the S1 input of the CTR Electronics' CANdi™.";
2282 case SpnValue::CANdi_Pwm2_RiseToRise: return "Measured rise to rise time of the PWM signal at the S2 input of the CTR Electronics' CANdi™.";
2283 case SpnValue::CANdi_Pwm2_Position: return "Measured position of the PWM sensor at the S2 input of the CTR Electronics' CANdi™.";
2284 case SpnValue::CANdi_Overcurrent: return "True when the CANdi™ is in overcurrent protection mode. This may be due to either overcurrent or a short-circuit.";
2285 case SpnValue::CANdi_VSense: return "Measured supply voltage to the CANdi™.";
2286 case SpnValue::CANdi_OutputCurrent: return "Measured output current. This includes both Vbat and 5V output current.";
2287 case SpnValue::CANdi_S1FloatState: return "The floating state of the Signal 1 input (S1IN).";
2288 case SpnValue::CANdi_S2FloatState: return "The floating state of the Signal 2 input (S2IN).";
2289 case SpnValue::Config_AbsoluteSensorOffset: return "The offset applied to any absolute sensor connected to the Talon data port. This is only supported when using the PulseWidth sensor source.\nThis can be used to zero the sensor position in applications where the sensor is 1:1 with the mechanism.";
2290 case SpnValue::Config_ExternalFeedbackSensorSource: return "Choose what sensor source is reported via API and used by closed-loop and limit features. The default is Commutation, which uses the external sensor used for motor commutation.\nChoose Remote* to use another sensor on the same CAN bus (this also requires setting FeedbackRemoteSensorID). Talon will update its position and velocity whenever the remote sensor publishes its information on CAN bus, and the Talon commutation sensor will not be used.\nChoose Fused* (requires Phoenix Pro) and Talon will fuse another sensor's information with the commutation sensor, which provides the best possible position and velocity for accuracy and bandwidth (this also requires setting FeedbackRemoteSensorID). This was developed for applications such as swerve-azimuth.\nChoose Sync* (requires Phoenix Pro) and Talon will synchronize its commutation sensor position against another sensor, then continue to use the rotor sensor for closed loop control (this also requires setting FeedbackRemoteSensorID). The Talon will report if its internal position differs significantly from the reported remote sensor position. This was developed for mechanisms where there is a risk of the sensor failing in such a way that it reports a position that does not match the mechanism, such as the sensor mounting assembly breaking off.\nChoose RemotePigeon2_Yaw, RemotePigeon2_Pitch, and RemotePigeon2_Roll to use another Pigeon2 on the same CAN bus (this also requires setting FeedbackRemoteSensorID). Talon will update its position to match the selected value whenever Pigeon2 publishes its information on CAN bus. Note that the Talon position will be in rotations and not degrees.\nChoose Quadrature to use a quadrature encoder directly attached to the Talon data port. This provides velocity and relative position measurements.\nChoose PulseWidth to use a pulse-width encoder directly attached to the Talon data port. This provides velocity and absolute position measurements.";
2291 case SpnValue::Config_SensorPhase: return "The relationship between the motor controlled by a Talon and the external sensor connected to the data port. This does not affect the commutation sensor or remote sensors.\nTo determine the sensor phase, set this config to Aligned and drive the motor with positive output. If the reported sensor velocity is positive, then the phase is Aligned. If the reported sensor velocity is negative, then the phase is Opposed.\nThe sensor direction is automatically inverted along with motor invert, so the sensor phase does not need to be changed when motor invert changes.";
2292 case SpnValue::Config_QuadratureEdgesPerRotation: return "The number of quadrature edges in one rotation for the quadrature sensor connected to the Talon data port.\nThis is the total number of transitions from high-to-low or low-to-high across both channels per rotation of the sensor. This is also equivalent to the Counts Per Revolution when using 4x decoding.\nFor example, the SRX Mag Encoder has 4096 edges per rotation, and a US Digital 1024 CPR (Cycles Per Revolution) quadrature encoder has 4096 edges per rotation.";
2293 case SpnValue::Config_AbsoluteSensorDiscontinuityPoint: return "The positive discontinuity point of the absolute sensor in rotations. This determines the point at which the absolute sensor wraps around, keeping the absolute position (after offset) in the range [x-1, x). <list><item>Setting this to 1 makes the absolute position unsigned [0, 1) <item>Setting this to 0.5 makes the absolute position signed [-0.5, 0.5) <item>Setting this to 0 makes the absolute position always negative [-1, 0)</list> Many rotational mechanisms such as arms have a region of motion that is unreachable. This should be set to the center of that region of motion, in non-negative rotations. This affects the position of the device at bootup.";
2294 case SpnValue::CANdi_Pwm2_Velocity: return "Measured velocity of the PWM sensor at the S2 input of the CTR Electronics' CANdi™.";
2295 case SpnValue::TalonFXS_5VRailVoltage: return "The measured voltage of the 5V rail available on the JST and dataport connectors.";
2296 case SpnValue::TalonFXS_Gadgeteer_G3: return "The voltage of the analog pin (pin 3) of the Talon FXS data port. The analog pin reads a nominal voltage of 0-5V.";
2297 case SpnValue::CANdi_QuadVelocity: return "Velocity from a quadrature encoder sensor connected to both the S1IN and S2IN inputs.";
2298 case SpnValue::Config_PWM1_AbsoluteSensorOffset: return "The offset applied to the PWM sensor.\nThis can be used to zero the sensor position in applications where the sensor is 1:1 with the mechanism.";
2299 case SpnValue::Config_PWM1_AbsoluteSensorDiscontinuityPoint: return "The positive discontinuity point of the absolute sensor in rotations. This determines the point at which the absolute sensor wraps around, keeping the absolute position (after offset) in the range [x-1, x). <list><item>Setting this to 1 makes the absolute position unsigned [0, 1) <item>Setting this to 0.5 makes the absolute position signed [-0.5, 0.5) <item>Setting this to 0 makes the absolute position always negative [-1, 0)</list> Many rotational mechanisms such as arms have a region of motion that is unreachable. This should be set to the center of that region of motion, in non-negative rotations. This affects the position of the device at bootup.";
2300 case SpnValue::Config_PWM1_SensorDirection: return "Direction of the PWM sensor to determine positive rotation. Invert this so that forward motion on the mechanism results in an increase in PWM position.";
2301 case SpnValue::Config_PWM2_AbsoluteSensorOffset: return "The offset applied to the PWM sensor.\nThis can be used to zero the sensor position in applications where the sensor is 1:1 with the mechanism.";
2302 case SpnValue::Config_PWM2_AbsoluteSensorDiscontinuityPoint: return "The positive discontinuity point of the absolute sensor in rotations. This determines the point at which the absolute sensor wraps around, keeping the absolute position (after offset) in the range [x-1, x). <list><item>Setting this to 1 makes the absolute position unsigned [0, 1) <item>Setting this to 0.5 makes the absolute position signed [-0.5, 0.5) <item>Setting this to 0 makes the absolute position always negative [-1, 0)</list> Many rotational mechanisms such as arms have a region of motion that is unreachable. This should be set to the center of that region of motion, in non-negative rotations. This affects the position of the device at bootup.";
2303 case SpnValue::Config_PWM2_SensorDirection: return "Direction of the PWM sensor to determine positive rotation. Invert this so that forward motion on the mechanism results in an increase in PWM position.";
2304 case SpnValue::Config_Quad_SensorDirection: return "Direction of the quadrature sensor to determine positive rotation. Invert this so that forward motion on the mechanism results in an increase in quadrature position.";
2305 case SpnValue::CANdi_SetQuadPosition: return "Sets the position of the quadrature input.";
2306 case SpnValue::Config_S1_CloseState: return "What value the Signal 1 input (S1IN) needs to be for the CTR Electronics' CANdi™ to detect as Closed.";
2307 case SpnValue::Config_S2_CloseState: return "What value the Signal 2 input (S2IN) needs to be for the CTR Electronics' CANdi™ to detect as Closed.";
2308 case SpnValue::CANdi_S1Closed: return "True if the Signal 1 input (S1IN) matches the configured S1 Closed State.";
2309 case SpnValue::CANdi_S2Closed: return "True if the Signal 2 input (S2IN) matches the configured S2 Closed State.";
2310 case SpnValue::Config_BrushedMotorWiring: return "If a brushed motor is selected with Motor Arrangement, this config determines which of three leads to use.";
2311 case SpnValue::PRO_GadgeteerQuad_RawQuadraturePosition: return "The raw position retrieved from the connected quadrature encoder. This is only affected by the QuadratureEdgesPerRotation config. In most situations, the user should instead configure the ExternalFeedbackSensorSource and use the regular position getter.\nThis signal must have its update frequency configured before it will have data.";
2312 case SpnValue::PRO_GadgeteerQuad_RawQuadratureVelocity: return "The raw velocity retrieved from the connected quadrature encoder. This is only affected by the QuadratureEdgesPerRotation config. In most situations, the user should instead configure the ExternalFeedbackSensorSource and use the regular velocity getter.\nThis signal must have its update frequency configured before it will have data.";
2313 case SpnValue::PRO_GadgeteerPwm_RawPwmPosition: return "The raw position retrieved from the connected pulse-width encoder. This is not affected by any config. In most situations, the user should instead configure the ExternalFeedbackSensorSource and use the regular position getter.\nThis signal must have its update frequency configured before it will have data.";
2314 case SpnValue::PRO_GadgeteerPwm_RawPwmVelocity: return "The raw velocity retrieved from the connected pulse-width encoder. This is not affected by any config. In most situations, the user should instead configure the ExternalFeedbackSensorSource and use the regular velocity getter.\nThis signal must have its update frequency configured before it will have data.";
2315 case SpnValue::CANdle_General_SupplyVoltage: return "Measured supply voltage to the CANdle.";
2316 case SpnValue::CANdle_General_FiveVRailVoltage: return "The measured voltage of the 5V rail line.";
2317 case SpnValue::CANdle_General_OutputCurrent: return "The measured output current. This includes both VBat and 5V output current.";
2318 case SpnValue::CANdle_General_DeviceTemp: return "The temperature that the CANdle measures itself to be at.";
2319 case SpnValue::CANdle_General_VBatModulation: return "The applied VBat modulation duty cycle.\nThis signal will report 1.0 if the VBatOutputMode is configured to be always on, and 0.0 if configured to be always off. Otherwise, this will report the applied modulation from the last ModulateVBatOut request.";
2320 case SpnValue::CANdle_General_MaxSimulAnimCount: return "The maximum number of simultaneous animations supported by the current version of CANdle firmware.\nAny control request using an animation slot greater than or equal to this signal will be ignored.";
2321 case SpnValue::Config_LED_StripType: return "The type of LEDs that are being controlled.";
2322 case SpnValue::Config_LED_BrightnessScalar: return "The brightness scalar for all LEDs controlled. All LED values sent to the CANdle will be scaled by this config.";
2323 case SpnValue::Config_LED_LossOfSignalBehavior: return "The behavior of the LEDs when the control signal is lost.";
2324 case SpnValue::Config_CANdle_5VRail: return "Whether the 5V rail is enabled. Disabling the 5V rail will also turn off the onboard LEDs.";
2325 case SpnValue::Config_CANdle_VBatOutputMode: return "The behavior of the VBat output. CANdle supports modulating VBat output for single-color LED strips.";
2326 case SpnValue::Config_CANdle_StatusLedWhenActive: return "Whether the Status LED is enabled when the CANdle is actively being controlled.";
2327 case SpnValue::CANdle_Animation0_Type: return "The type of animation running in slot 0 of the CANdle.";
2328 case SpnValue::CANdle_Animation1_Type: return "The type of animation running in slot 1 of the CANdle.";
2329 case SpnValue::CANdle_Animation2_Type: return "The type of animation running in slot 2 of the CANdle.";
2330 case SpnValue::CANdle_Animation3_Type: return "The type of animation running in slot 3 of the CANdle.";
2331 case SpnValue::CANdle_Animation4_Type: return "The type of animation running in slot 4 of the CANdle.";
2332 case SpnValue::CANdle_Animation5_Type: return "The type of animation running in slot 5 of the CANdle.";
2333 case SpnValue::CANdle_Animation6_Type: return "The type of animation running in slot 6 of the CANdle.";
2334 case SpnValue::CANdle_Animation7_Type: return "The type of animation running in slot 7 of the CANdle.";
2335 case SpnValue::CANdle_AnimationDirection: return "Direction of the animation.";
2336 case SpnValue::CANdle_LarsonBounceMode: return "The behavior of the larson animation pocket of light when it reaches the end of the strip.";
2337 case SpnValue::Fault_Hardware: return "Hardware fault occurred";
2338 case SpnValue::StickyFault_Hardware: return "Hardware fault occurred";
2339 case SpnValue::ClearStickyFault_Hardware: return "Clear sticky fault: Hardware fault occurred";
2340 case SpnValue::Fault_ProcTemp: return "Processor temperature exceeded limit";
2341 case SpnValue::StickyFault_ProcTemp: return "Processor temperature exceeded limit";
2342 case SpnValue::ClearStickyFault_ProcTemp: return "Clear sticky fault: Processor temperature exceeded limit";
2343 case SpnValue::Fault_DeviceTemp: return "Device temperature exceeded limit";
2344 case SpnValue::StickyFault_DeviceTemp: return "Device temperature exceeded limit";
2345 case SpnValue::ClearStickyFault_DeviceTemp: return "Clear sticky fault: Device temperature exceeded limit";
2346 case SpnValue::Fault_Undervoltage: return "Device supply voltage dropped to near brownout levels";
2347 case SpnValue::StickyFault_Undervoltage: return "Device supply voltage dropped to near brownout levels";
2348 case SpnValue::ClearStickyFault_Undervoltage: return "Clear sticky fault: Device supply voltage dropped to near brownout levels";
2349 case SpnValue::Fault_BootDuringEnable: return "Device boot while detecting the enable signal";
2350 case SpnValue::StickyFault_BootDuringEnable: return "Device boot while detecting the enable signal";
2351 case SpnValue::ClearStickyFault_BootDuringEnable: return "Clear sticky fault: Device boot while detecting the enable signal";
2352 case SpnValue::Fault_UnlicensedFeatureInUse: return "An unlicensed feature is in use, device may not behave as expected.";
2353 case SpnValue::StickyFault_UnlicensedFeatureInUse: return "An unlicensed feature is in use, device may not behave as expected.";
2354 case SpnValue::ClearStickyFault_UnlicensedFeatureInUse: return "Clear sticky fault: An unlicensed feature is in use, device may not behave as expected.";
2355 case SpnValue::Fault_PIGEON2_BootupAccel: return "Bootup checks failed: Accelerometer";
2356 case SpnValue::StickyFault_PIGEON2_BootupAccel: return "Bootup checks failed: Accelerometer";
2357 case SpnValue::ClearStickyFault_PIGEON2_BootupAccel: return "Clear sticky fault: Bootup checks failed: Accelerometer";
2358 case SpnValue::Fault_PIGEON2_BootupGyros: return "Bootup checks failed: Gyroscope";
2359 case SpnValue::StickyFault_PIGEON2_BootupGyros: return "Bootup checks failed: Gyroscope";
2360 case SpnValue::ClearStickyFault_PIGEON2_BootupGyros: return "Clear sticky fault: Bootup checks failed: Gyroscope";
2361 case SpnValue::Fault_PIGEON2_BootupMagne: return "Bootup checks failed: Magnetometer";
2362 case SpnValue::StickyFault_PIGEON2_BootupMagne: return "Bootup checks failed: Magnetometer";
2363 case SpnValue::ClearStickyFault_PIGEON2_BootupMagne: return "Clear sticky fault: Bootup checks failed: Magnetometer";
2364 case SpnValue::Fault_PIGEON2_BootIntoMotion: return "Motion Detected during bootup.";
2365 case SpnValue::StickyFault_PIGEON2_BootIntoMotion: return "Motion Detected during bootup.";
2366 case SpnValue::ClearStickyFault_PIGEON2_BootIntoMotion: return "Clear sticky fault: Motion Detected during bootup.";
2367 case SpnValue::Fault_PIGEON2_DataAcquiredLate: return "Motion stack data acquisition was slower than expected";
2368 case SpnValue::StickyFault_PIGEON2_DataAcquiredLate: return "Motion stack data acquisition was slower than expected";
2369 case SpnValue::ClearStickyFault_PIGEON2_DataAcquiredLate: return "Clear sticky fault: Motion stack data acquisition was slower than expected";
2370 case SpnValue::Fault_PIGEON2_LoopTimeSlow: return "Motion stack loop time was slower than expected.";
2371 case SpnValue::StickyFault_PIGEON2_LoopTimeSlow: return "Motion stack loop time was slower than expected.";
2372 case SpnValue::ClearStickyFault_PIGEON2_LoopTimeSlow: return "Clear sticky fault: Motion stack loop time was slower than expected.";
2373 case SpnValue::Fault_PIGEON2_SaturatedMagne: return "Magnetometer values are saturated";
2374 case SpnValue::StickyFault_PIGEON2_SaturatedMagne: return "Magnetometer values are saturated";
2375 case SpnValue::ClearStickyFault_PIGEON2_SaturatedMagne: return "Clear sticky fault: Magnetometer values are saturated";
2376 case SpnValue::Fault_PIGEON2_SaturatedAccel: return "Accelerometer values are saturated";
2377 case SpnValue::StickyFault_PIGEON2_SaturatedAccel: return "Accelerometer values are saturated";
2378 case SpnValue::ClearStickyFault_PIGEON2_SaturatedAccel: return "Clear sticky fault: Accelerometer values are saturated";
2379 case SpnValue::Fault_PIGEON2_SaturatedGyros: return "Gyroscope values are saturated";
2380 case SpnValue::StickyFault_PIGEON2_SaturatedGyros: return "Gyroscope values are saturated";
2381 case SpnValue::ClearStickyFault_PIGEON2_SaturatedGyros: return "Clear sticky fault: Gyroscope values are saturated";
2382 case SpnValue::Fault_CANCODER_BadMagnet: return "The magnet distance is not correct or magnet is missing";
2383 case SpnValue::StickyFault_CANCODER_BadMagnet: return "The magnet distance is not correct or magnet is missing";
2384 case SpnValue::ClearStickyFault_CANCODER_BadMagnet: return "Clear sticky fault: The magnet distance is not correct or magnet is missing";
2385 case SpnValue::Fault_TALONFX_BridgeBrownout: return "Bridge was disabled most likely due to supply voltage dropping too low.";
2386 case SpnValue::StickyFault_TALONFX_BridgeBrownout: return "Bridge was disabled most likely due to supply voltage dropping too low.";
2387 case SpnValue::ClearStickyFault_TALONFX_BridgeBrownout: return "Clear sticky fault: Bridge was disabled most likely due to supply voltage dropping too low.";
2388 case SpnValue::Fault_TALONFX_RemoteSensorReset: return "The remote sensor has reset.";
2389 case SpnValue::StickyFault_TALONFX_RemoteSensorReset: return "The remote sensor has reset.";
2390 case SpnValue::ClearStickyFault_TALONFX_RemoteSensorReset: return "Clear sticky fault: The remote sensor has reset.";
2391 case SpnValue::Fault_TALONFX_MissingDifferentialFX: return "The remote Talon used for differential control is not present on CAN Bus.";
2392 case SpnValue::StickyFault_TALONFX_MissingDifferentialFX: return "The remote Talon used for differential control is not present on CAN Bus.";
2393 case SpnValue::ClearStickyFault_TALONFX_MissingDifferentialFX: return "Clear sticky fault: The remote Talon used for differential control is not present on CAN Bus.";
2394 case SpnValue::Fault_TALONFX_RemoteSensorPosOverflow: return "The remote sensor position has overflowed. Because of the nature of remote sensors, it is possible for the remote sensor position to overflow beyond what is supported by the status signal frame. However, this is rare and cannot occur over the course of an FRC match under normal use.";
2395 case SpnValue::StickyFault_TALONFX_RemoteSensorPosOverflow: return "The remote sensor position has overflowed. Because of the nature of remote sensors, it is possible for the remote sensor position to overflow beyond what is supported by the status signal frame. However, this is rare and cannot occur over the course of an FRC match under normal use.";
2396 case SpnValue::ClearStickyFault_TALONFX_RemoteSensorPosOverflow: return "Clear sticky fault: The remote sensor position has overflowed. Because of the nature of remote sensors, it is possible for the remote sensor position to overflow beyond what is supported by the status signal frame. However, this is rare and cannot occur over the course of an FRC match under normal use.";
2397 case SpnValue::Fault_TALONFX_OverSupplyV: return "Supply Voltage has exceeded the maximum voltage rating of device.";
2398 case SpnValue::StickyFault_TALONFX_OverSupplyV: return "Supply Voltage has exceeded the maximum voltage rating of device.";
2399 case SpnValue::ClearStickyFault_TALONFX_OverSupplyV: return "Clear sticky fault: Supply Voltage has exceeded the maximum voltage rating of device.";
2400 case SpnValue::Fault_TALONFX_UnstableSupplyV: return "Supply Voltage is unstable. Ensure you are using a battery and current limited power supply.";
2401 case SpnValue::StickyFault_TALONFX_UnstableSupplyV: return "Supply Voltage is unstable. Ensure you are using a battery and current limited power supply.";
2402 case SpnValue::ClearStickyFault_TALONFX_UnstableSupplyV: return "Clear sticky fault: Supply Voltage is unstable. Ensure you are using a battery and current limited power supply.";
2403 case SpnValue::Fault_TALONFX_ReverseHardLimit: return "Reverse limit switch has been asserted. Output is set to neutral.";
2404 case SpnValue::StickyFault_TALONFX_ReverseHardLimit: return "Reverse limit switch has been asserted. Output is set to neutral.";
2405 case SpnValue::ClearStickyFault_TALONFX_ReverseHardLimit: return "Clear sticky fault: Reverse limit switch has been asserted. Output is set to neutral.";
2406 case SpnValue::Fault_TALONFX_ForwardHardLimit: return "Forward limit switch has been asserted. Output is set to neutral.";
2407 case SpnValue::StickyFault_TALONFX_ForwardHardLimit: return "Forward limit switch has been asserted. Output is set to neutral.";
2408 case SpnValue::ClearStickyFault_TALONFX_ForwardHardLimit: return "Clear sticky fault: Forward limit switch has been asserted. Output is set to neutral.";
2409 case SpnValue::Fault_TALONFX_ReverseSoftLimit: return "Reverse soft limit has been asserted. Output is set to neutral.";
2410 case SpnValue::StickyFault_TALONFX_ReverseSoftLimit: return "Reverse soft limit has been asserted. Output is set to neutral.";
2411 case SpnValue::ClearStickyFault_TALONFX_ReverseSoftLimit: return "Clear sticky fault: Reverse soft limit has been asserted. Output is set to neutral.";
2412 case SpnValue::Fault_TALONFX_ForwardSoftLimit: return "Forward soft limit has been asserted. Output is set to neutral.";
2413 case SpnValue::StickyFault_TALONFX_ForwardSoftLimit: return "Forward soft limit has been asserted. Output is set to neutral.";
2414 case SpnValue::ClearStickyFault_TALONFX_ForwardSoftLimit: return "Clear sticky fault: Forward soft limit has been asserted. Output is set to neutral.";
2415 case SpnValue::Fault_TALONFX_MissingRemSoftLim: return "The remote soft limit device is not present on CAN Bus.";
2416 case SpnValue::StickyFault_TALONFX_MissingRemSoftLim: return "The remote soft limit device is not present on CAN Bus.";
2417 case SpnValue::ClearStickyFault_TALONFX_MissingRemSoftLim: return "Clear sticky fault: The remote soft limit device is not present on CAN Bus.";
2418 case SpnValue::Fault_TALONFX_MissingRemHardLim: return "The remote limit switch device is not present on CAN Bus.";
2419 case SpnValue::StickyFault_TALONFX_MissingRemHardLim: return "The remote limit switch device is not present on CAN Bus.";
2420 case SpnValue::ClearStickyFault_TALONFX_MissingRemHardLim: return "Clear sticky fault: The remote limit switch device is not present on CAN Bus.";
2421 case SpnValue::Fault_TALONFX_MissingRemoteSensor: return "The remote sensor's data is no longer trusted. This can happen if the remote sensor disappears from the CAN bus or if the remote sensor indicates its data is no longer valid, such as when a CANcoder's magnet strength falls into the \"red\" range.";
2422 case SpnValue::StickyFault_TALONFX_MissingRemoteSensor: return "The remote sensor's data is no longer trusted. This can happen if the remote sensor disappears from the CAN bus or if the remote sensor indicates its data is no longer valid, such as when a CANcoder's magnet strength falls into the \"red\" range.";
2423 case SpnValue::ClearStickyFault_TALONFX_MissingRemoteSensor: return "Clear sticky fault: The remote sensor's data is no longer trusted. This can happen if the remote sensor disappears from the CAN bus or if the remote sensor indicates its data is no longer valid, such as when a CANcoder's magnet strength falls into the \"red\" range.";
2424 case SpnValue::Fault_TALONFX_FusedSensorOutOfSync: return "The remote sensor used for fusion has fallen out of sync to the local sensor. A re-synchronization has occurred, which may cause a discontinuity. This typically happens if there is significant slop in the mechanism, or if the RotorToSensorRatio configuration parameter is incorrect.";
2425 case SpnValue::StickyFault_TALONFX_FusedSensorOutOfSync: return "The remote sensor used for fusion has fallen out of sync to the local sensor. A re-synchronization has occurred, which may cause a discontinuity. This typically happens if there is significant slop in the mechanism, or if the RotorToSensorRatio configuration parameter is incorrect.";
2426 case SpnValue::ClearStickyFault_TALONFX_FusedSensorOutOfSync: return "Clear sticky fault: The remote sensor used for fusion has fallen out of sync to the local sensor. A re-synchronization has occurred, which may cause a discontinuity. This typically happens if there is significant slop in the mechanism, or if the RotorToSensorRatio configuration parameter is incorrect.";
2427 case SpnValue::Fault_TALONFX_StatorCurrLimit: return "Stator current limit occured.";
2428 case SpnValue::StickyFault_TALONFX_StatorCurrLimit: return "Stator current limit occured.";
2429 case SpnValue::ClearStickyFault_TALONFX_StatorCurrLimit: return "Clear sticky fault: Stator current limit occured.";
2430 case SpnValue::Fault_TALONFX_SupplyCurrLimit: return "Supply current limit occured.";
2431 case SpnValue::StickyFault_TALONFX_SupplyCurrLimit: return "Supply current limit occured.";
2432 case SpnValue::ClearStickyFault_TALONFX_SupplyCurrLimit: return "Clear sticky fault: Supply current limit occured.";
2433 case SpnValue::Fault_TALONFX_UsingFusedCCWhileUnlicensed: return "Using Fused CANcoder feature while unlicensed. Device has fallen back to remote CANcoder.";
2434 case SpnValue::StickyFault_TALONFX_UsingFusedCCWhileUnlicensed: return "Using Fused CANcoder feature while unlicensed. Device has fallen back to remote CANcoder.";
2435 case SpnValue::ClearStickyFault_TALONFX_UsingFusedCCWhileUnlicensed: return "Clear sticky fault: Using Fused CANcoder feature while unlicensed. Device has fallen back to remote CANcoder.";
2436 case SpnValue::Fault_TALONFX_StaticBrakeDisabled: return "Static brake was momentarily disabled due to excessive braking current while disabled.";
2437 case SpnValue::StickyFault_TALONFX_StaticBrakeDisabled: return "Static brake was momentarily disabled due to excessive braking current while disabled.";
2438 case SpnValue::ClearStickyFault_TALONFX_StaticBrakeDisabled: return "Clear sticky fault: Static brake was momentarily disabled due to excessive braking current while disabled.";
2439 case SpnValue::Fault_TALONFX_BridgeShort: return "Bridge was disabled most likely due to a short in the motor leads.";
2440 case SpnValue::StickyFault_TALONFX_BridgeShort: return "Bridge was disabled most likely due to a short in the motor leads.";
2441 case SpnValue::ClearStickyFault_TALONFX_BridgeShort: return "Clear sticky fault: Bridge was disabled most likely due to a short in the motor leads.";
2442 case SpnValue::Fault_TALONFX_HallSensorMissing: return "Hall sensor signals are invalid. Check hall sensor and cabling. This fault can be used to detect when hall cable is unplugged.";
2443 case SpnValue::StickyFault_TALONFX_HallSensorMissing: return "Hall sensor signals are invalid. Check hall sensor and cabling. This fault can be used to detect when hall cable is unplugged.";
2444 case SpnValue::ClearStickyFault_TALONFX_HallSensorMissing: return "Clear sticky fault: Hall sensor signals are invalid. Check hall sensor and cabling. This fault can be used to detect when hall cable is unplugged.";
2445 case SpnValue::Fault_TALONFX_DriveDisabledHallSensor: return "Hall sensor signals are invalid during motor drive, so motor was disabled. Check hall sensor and cabling.";
2446 case SpnValue::StickyFault_TALONFX_DriveDisabledHallSensor: return "Hall sensor signals are invalid during motor drive, so motor was disabled. Check hall sensor and cabling.";
2447 case SpnValue::ClearStickyFault_TALONFX_DriveDisabledHallSensor: return "Clear sticky fault: Hall sensor signals are invalid during motor drive, so motor was disabled. Check hall sensor and cabling.";
2448 case SpnValue::Fault_TALONFX_MotorTempSensorMissing: return "Motor temperature signal appears to not be connected.";
2449 case SpnValue::StickyFault_TALONFX_MotorTempSensorMissing: return "Motor temperature signal appears to not be connected.";
2450 case SpnValue::ClearStickyFault_TALONFX_MotorTempSensorMissing: return "Clear sticky fault: Motor temperature signal appears to not be connected.";
2451 case SpnValue::Fault_TALONFX_MotorTempSensorTooHot: return "Motor temperature signal indicates motor is too hot.";
2452 case SpnValue::StickyFault_TALONFX_MotorTempSensorTooHot: return "Motor temperature signal indicates motor is too hot.";
2453 case SpnValue::ClearStickyFault_TALONFX_MotorTempSensorTooHot: return "Clear sticky fault: Motor temperature signal indicates motor is too hot.";
2454 case SpnValue::Fault_CANDI_5V: return "The CTR Electronics' CANdi™ branded device has detected a 5V fault. This may be due to overcurrent or a short-circuit.";
2455 case SpnValue::StickyFault_CANDI_5V: return "The CTR Electronics' CANdi™ branded device has detected a 5V fault. This may be due to overcurrent or a short-circuit.";
2456 case SpnValue::ClearStickyFault_CANDI_5V: return "Clear sticky fault: The CTR Electronics' CANdi™ branded device has detected a 5V fault. This may be due to overcurrent or a short-circuit.";
2457 case SpnValue::Fault_CANDLE_OVERVOLTAGE: return "Device supply voltage is too high (above 30 V).";
2458 case SpnValue::StickyFault_CANDLE_OVERVOLTAGE: return "Device supply voltage is too high (above 30 V).";
2459 case SpnValue::ClearStickyFault_CANDLE_OVERVOLTAGE: return "Clear sticky fault: Device supply voltage is too high (above 30 V).";
2460 case SpnValue::Fault_CANDLE_5V_TOO_HIGH: return "Device 5V line is too high (above 6 V).";
2461 case SpnValue::StickyFault_CANDLE_5V_TOO_HIGH: return "Device 5V line is too high (above 6 V).";
2462 case SpnValue::ClearStickyFault_CANDLE_5V_TOO_HIGH: return "Clear sticky fault: Device 5V line is too high (above 6 V).";
2463 case SpnValue::Fault_CANDLE_5V_TOO_LOW: return "Device 5V line is too low (below 4 V).";
2464 case SpnValue::StickyFault_CANDLE_5V_TOO_LOW: return "Device 5V line is too low (below 4 V).";
2465 case SpnValue::ClearStickyFault_CANDLE_5V_TOO_LOW: return "Clear sticky fault: Device 5V line is too low (below 4 V).";
2466 case SpnValue::Fault_CANDLE_THERMAL: return "Device temperature exceeded limit.";
2467 case SpnValue::StickyFault_CANDLE_THERMAL: return "Device temperature exceeded limit.";
2468 case SpnValue::ClearStickyFault_CANDLE_THERMAL: return "Clear sticky fault: Device temperature exceeded limit.";
2469 case SpnValue::Fault_CANDLE_SOFTWARE_FUSE: return "CANdle output current exceeded the 6 A limit.";
2470 case SpnValue::StickyFault_CANDLE_SOFTWARE_FUSE: return "CANdle output current exceeded the 6 A limit.";
2471 case SpnValue::ClearStickyFault_CANDLE_SOFTWARE_FUSE: return "Clear sticky fault: CANdle output current exceeded the 6 A limit.";
2472 case SpnValue::Fault_CANDLE_SHORT_CIRCUIT: return "CANdle has detected the output pin is shorted.";
2473 case SpnValue::StickyFault_CANDLE_SHORT_CIRCUIT: return "CANdle has detected the output pin is shorted.";
2474 case SpnValue::ClearStickyFault_CANDLE_SHORT_CIRCUIT: return "Clear sticky fault: CANdle has detected the output pin is shorted.";
2475 default:
2476 return "Invalid Value";
2477 }
2478 }
2479
2480 friend std::ostream &operator<<(std::ostream &os, SpnValue data)
2481 {
2482 os << data.ToString();
2483 return os;
2484 }
2485 };
2486 }
2487 }
2488}
Definition Diff_PositionDutyCycle_Position.hpp:15