REVLib - C++
SparkBase.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018-2025 REV Robotics
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright notice,
8 * this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * 3. Neither the name of REV Robotics nor the names of its
13 * contributors may be used to endorse or promote products derived from
14 * this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#pragma once
30
31#ifdef _MSC_VER
32// Disable deprecation warnings for this file when using VS compiler
33#pragma warning(disable : 4996)
34#endif
35
36#ifdef __GNUC__
37#pragma GCC diagnostic push
38#pragma GCC diagnostic ignored "-Wdeprecated"
39#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
40#endif
41
42#include "rev/REVLibError.h"
47#include "rev/SparkLowLevel.h"
49#include "rev/SparkSoftLimit.h"
50
51// Defined in HIL tester source
52class ConfigBase;
53
54namespace rev::spark {
55
56class SparkBaseConfig;
57
58class SparkBase : public SparkLowLevel {
59 friend class SparkMax;
60 friend class SparkFlex;
61 friend class SparkLimitSwitch;
62 friend class SparkSoftLimit;
66 friend class SparkSim;
68
69 // Defined in HIL tester source
70 friend class ::ConfigBase;
71
72public:
73 enum class IdleMode { kCoast = 0, kBrake = 1 };
74
76
78
80
81 struct Faults {
82 bool other;
84 bool sensor;
85 bool can;
91
92 Faults() {}
93
94 explicit Faults(uint16_t faults) {
95 rawBits = faults;
96 other = (faults & 0x1) != 0;
97 motorType = (faults & 0x2) != 0;
98 sensor = (faults & 0x4) != 0;
99 can = (faults & 0x8) != 0;
100 temperature = (faults & 0x10) != 0;
101 gateDriver = (faults & 0x20) != 0;
102 escEeprom = (faults & 0x40) != 0;
103 firmware = (faults & 0x80) != 0;
104 }
105 };
106
107 struct Warnings {
112 bool sensor;
113 bool stall;
115 bool other;
117
119
120 explicit Warnings(uint16_t warnings) {
121 rawBits = warnings;
122 brownout = (warnings & 0x1) != 0;
123 overcurrent = (warnings & 0x2) != 0;
124 escEeprom = (warnings & 0x4) != 0;
125 extEeprom = (warnings & 0x8) != 0;
126 sensor = (warnings & 0x10) != 0;
127 stall = (warnings & 0x20) != 0;
128 hasReset = (warnings & 0x40) != 0;
129 other = (warnings & 0x80) != 0;
130 }
131 };
132
136 ~SparkBase() override = default;
137
138 /**** Speed Controller Interface ****/
144 void Set(double speed) override;
145
156 void SetVoltage(units::volt_t output) override;
157
163 double Get() const override;
164
174 [[deprecated("Use SparkBaseConfig.Inverted() with Configure() instead")]]
175 void SetInverted(bool isInverted) override;
176
186 [[deprecated(
187 "Use SparkBaseConfigAccessor.GetInverted() via SparkMax.configAccessor "
188 "or SparkFlex.configAccessor instead")]]
189 bool GetInverted() const override;
190
194 void Disable() override;
195
199 void StopMotor() override;
200
201 /* ***** Extended Functions ****** */
202
224 virtual REVLibError Configure(SparkBaseConfig& config, ResetMode resetMode,
225 PersistMode persistMode);
226
254 ResetMode resetMode,
255 PersistMode persistMode);
256
263
270
277
283
291
299
305
311
323
341
351
366
373 bool IsFollower();
374
382 bool HasActiveFault();
383
390 bool HasStickyFault();
391
398 bool HasActiveWarning();
399
406 bool HasStickyWarning();
407
415
426
434
445
449 double GetBusVoltage();
450
458 double GetAppliedOutput();
459
463 double GetOutputCurrent();
464
468 double GetMotorTemperature();
469
476
482 REVLibError SetCANTimeout(int milliseconds);
483
493
494protected:
495 // Only used for Get() or Set() API
496 double m_setpoint{0.0};
497
509 explicit SparkBase(int deviceID, MotorType type, SparkModel model);
510
511 // Used by the HIL tester
513
518 uint8_t GetMotorInterface();
519
527
528protected:
530 std::atomic<bool> m_relativeEncoderCreated{false};
531
533 std::atomic<bool> m_analogSensorCreated{false};
534
536 std::atomic<bool> m_absoluteEncoderCreated{false};
537
539 std::atomic<bool> m_closedLoopControllerCreated{false};
540
542 std::atomic<bool> m_forwardLimitSwitchCreated{false};
543
545 std::atomic<bool> m_reverseLimitSwitchCreated{false};
546
548 std::atomic<bool> m_forwardSoftLimitCreated{false};
549
551 std::atomic<bool> m_reverseSoftLimitCreated{false};
552};
553
554} // namespace rev::spark
555
556#ifdef __GNUC__
557#pragma GCC diagnostic pop
558#endif
Definition: SparkAbsoluteEncoder.h:44
Definition: SparkAnalogSensor.h:51
Definition: SparkBaseConfig.h:46
Definition: SparkBase.h:58
bool HasStickyWarning()
Definition: SparkBase.cpp:238
std::atomic< bool > m_forwardSoftLimitCreated
Definition: SparkBase.h:548
SparkRelativeEncoder & GetEncoder()
Definition: SparkBase.cpp:132
uint8_t GetMotorInterface()
Definition: SparkBase.cpp:172
Warnings GetStickyWarnings()
Definition: SparkBase.cpp:268
std::atomic< bool > m_absoluteEncoderCreated
Definition: SparkBase.h:536
IdleMode
Definition: SparkBase.h:73
bool IsFollower()
Definition: SparkBase.cpp:211
rev::REVLibError PauseFollowerModeAsync()
Definition: SparkBase.cpp:205
REVLibError SetCANTimeout(int milliseconds)
Definition: SparkBase.cpp:309
SoftLimitDirection
Definition: SparkBase.h:75
virtual SparkAbsoluteEncoder & GetAbsoluteEncoder()
Definition: SparkBase.cpp:142
Faults GetStickyFaults()
Definition: SparkBase.cpp:252
std::atomic< bool > m_relativeEncoderCreated
Definition: SparkBase.h:530
std::atomic< bool > m_reverseSoftLimitCreated
Definition: SparkBase.h:551
std::atomic< bool > m_forwardLimitSwitchCreated
Definition: SparkBase.h:542
~SparkBase() override=default
double GetAppliedOutput()
Definition: SparkBase.cpp:282
SparkClosedLoopController & GetClosedLoopController()
Definition: SparkBase.cpp:147
std::atomic< bool > m_reverseLimitSwitchCreated
Definition: SparkBase.h:545
bool HasActiveFault()
Definition: SparkBase.cpp:218
SparkLimitSwitch m_ReverseLimitSwitch
Definition: SparkBase.h:544
Warnings GetWarnings()
Definition: SparkBase.cpp:260
Faults GetFaults()
Definition: SparkBase.cpp:245
std::atomic< bool > m_analogSensorCreated
Definition: SparkBase.h:533
bool HasStickyFault()
Definition: SparkBase.cpp:224
std::atomic< bool > m_closedLoopControllerCreated
Definition: SparkBase.h:539
SparkClosedLoopController m_ClosedLoopController
Definition: SparkBase.h:538
void Disable() override
Definition: SparkBase.cpp:93
double Get() const override
Definition: SparkBase.cpp:73
REVLibError ClearFaults()
Definition: SparkBase.cpp:303
SparkRelativeEncoder GetEncoderEvenIfAlreadyCreated()
Definition: SparkBase.cpp:321
double m_setpoint
Definition: SparkBase.h:496
ResetMode
Definition: SparkBase.h:77
SparkSoftLimit m_ForwardSoftLimit
Definition: SparkBase.h:547
double GetOutputCurrent()
Definition: SparkBase.cpp:289
rev::REVLibError PauseFollowerMode()
Definition: SparkBase.cpp:199
void SetInverted(bool isInverted) override
Definition: SparkBase.cpp:75
virtual REVLibError Configure(SparkBaseConfig &config, ResetMode resetMode, PersistMode persistMode)
Definition: SparkBase.cpp:97
SparkAnalogSensor m_AnalogSensor
Definition: SparkBase.h:532
REVLibError GetLastError()
Definition: SparkBase.cpp:315
bool GetInverted() const override
Definition: SparkBase.cpp:83
void Set(double speed) override
Definition: SparkBase.cpp:58
virtual SparkLimitSwitch & GetReverseLimitSwitch()
Definition: SparkBase.cpp:157
SparkBase::SparkModel GetSparkModel()
Definition: SparkBase.cpp:180
virtual REVLibError ConfigureAsync(SparkBaseConfig &config, ResetMode resetMode, PersistMode persistMode)
Definition: SparkBase.cpp:119
SparkAnalogSensor & GetAnalog()
Definition: SparkBase.cpp:137
rev::REVLibError ResumeFollowerMode()
Definition: SparkBase.cpp:187
SparkAbsoluteEncoder m_AbsoluteEncoder
Definition: SparkBase.h:535
bool HasActiveWarning()
Definition: SparkBase.cpp:231
SparkSoftLimit & GetForwardSoftLimit()
Definition: SparkBase.cpp:162
SparkSoftLimit & GetReverseSoftLimit()
Definition: SparkBase.cpp:167
void SetVoltage(units::volt_t output) override
Definition: SparkBase.cpp:64
SparkRelativeEncoder m_RelativeEncoder
Definition: SparkBase.h:529
double GetBusVoltage()
Definition: SparkBase.cpp:276
rev::REVLibError ResumeFollowerModeAsync()
Definition: SparkBase.cpp:193
PersistMode
Definition: SparkBase.h:79
SparkSoftLimit m_ReverseSoftLimit
Definition: SparkBase.h:550
double GetMotorTemperature()
Definition: SparkBase.cpp:296
SparkLimitSwitch m_ForwardLimitSwitch
Definition: SparkBase.h:541
virtual SparkLimitSwitch & GetForwardLimitSwitch()
Definition: SparkBase.cpp:152
void StopMotor() override
Definition: SparkBase.cpp:95
Definition: SparkClosedLoopController.h:50
Definition: SparkFlex.h:37
Definition: SparkLimitSwitch.h:48
Definition: SparkLowLevel.h:48
MotorType
Definition: SparkLowLevel.h:76
friend class SparkBase
Definition: SparkLowLevel.h:49
SparkModel
Definition: SparkLowLevel.h:222
Definition: SparkMaxAlternateEncoder.h:46
Definition: SparkMax.h:37
Definition: SparkRelativeEncoder.h:46
Definition: SparkSim.h:48
Definition: SparkSoftLimit.h:48
Definition: SparkLowLevel.cpp:40
REVLibError
Definition: REVLibError.h:33
Definition: SparkBase.h:81
int rawBits
Definition: SparkBase.h:90
Faults()
Definition: SparkBase.h:92
bool motorType
Definition: SparkBase.h:83
bool other
Definition: SparkBase.h:82
Faults(uint16_t faults)
Definition: SparkBase.h:94
bool temperature
Definition: SparkBase.h:86
bool can
Definition: SparkBase.h:85
bool gateDriver
Definition: SparkBase.h:87
bool escEeprom
Definition: SparkBase.h:88
bool sensor
Definition: SparkBase.h:84
bool firmware
Definition: SparkBase.h:89
Definition: SparkBase.h:107
bool extEeprom
Definition: SparkBase.h:111
bool escEeprom
Definition: SparkBase.h:110
bool overcurrent
Definition: SparkBase.h:109
bool hasReset
Definition: SparkBase.h:114
bool sensor
Definition: SparkBase.h:112
Warnings()
Definition: SparkBase.h:118
int rawBits
Definition: SparkBase.h:116
bool other
Definition: SparkBase.h:115
Warnings(uint16_t warnings)
Definition: SparkBase.h:120
bool stall
Definition: SparkBase.h:113
bool brownout
Definition: SparkBase.h:108