REVLib - C++
SparkBase.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018-2026 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 <atomic>
43
44#include "rev/ConfigureTypes.h"
45#include "rev/REVLibError.h"
50#include "rev/SparkLowLevel.h"
52#include "rev/SparkSoftLimit.h"
53
54// Defined in HIL tester source
55class ConfigBase;
56
57namespace rev::spark {
58
59class SparkBaseConfig;
60
61class SparkBase : public SparkLowLevel {
62 friend class SparkMax;
63 friend class SparkFlex;
64 friend class SparkLimitSwitch;
65 friend class SparkSoftLimit;
69 friend class SparkSim;
71
72 // Defined in HIL tester source
73 friend class ::ConfigBase;
74
75public:
76 enum class IdleMode { kCoast = 0, kBrake = 1 };
77
79
81
83
84 struct Faults {
85 bool other;
87 bool sensor;
88 bool can;
94
95 Faults() {}
96
97 explicit Faults(uint16_t faults) {
98 rawBits = faults;
99 other = (faults & 0x1) != 0;
100 motorType = (faults & 0x2) != 0;
101 sensor = (faults & 0x4) != 0;
102 can = (faults & 0x8) != 0;
103 temperature = (faults & 0x10) != 0;
104 gateDriver = (faults & 0x20) != 0;
105 escEeprom = (faults & 0x40) != 0;
106 firmware = (faults & 0x80) != 0;
107 }
108 };
109
110 struct Warnings {
115 bool sensor;
116 bool stall;
118 bool other;
120
122
123 explicit Warnings(uint16_t warnings) {
124 rawBits = warnings;
125 brownout = (warnings & 0x1) != 0;
126 overcurrent = (warnings & 0x2) != 0;
127 escEeprom = (warnings & 0x4) != 0;
128 extEeprom = (warnings & 0x8) != 0;
129 sensor = (warnings & 0x10) != 0;
130 stall = (warnings & 0x20) != 0;
131 hasReset = (warnings & 0x40) != 0;
132 other = (warnings & 0x80) != 0;
133 }
134 };
135
139 ~SparkBase() override = default;
140
141 /**** Speed Controller Interface ****/
147 void Set(double speed) override;
148
159 void SetVoltage(units::volt_t output) override;
160
166 double Get() const override;
167
177 [[deprecated("Use SparkBaseConfig.Inverted() with Configure() instead")]]
178 void SetInverted(bool isInverted) override;
179
189 [[deprecated(
190 "Use SparkBaseConfigAccessor.GetInverted() via SparkMax.configAccessor "
191 "or SparkFlex.configAccessor instead")]]
192 bool GetInverted() const override;
193
197 void Disable() override;
198
202 void StopMotor() override;
203
204 /* ***** Extended Functions ****** */
205
229 [[deprecated(
230 "Use Configure(SparkBaseConfig&, rev::ResetMode, rev::PersistMode) "
231 "instead. This method will be removed in 2027.")]]
232 virtual REVLibError Configure(SparkBaseConfig& config, ResetMode resetMode,
233 PersistMode persistMode);
234
256 virtual REVLibError Configure(SparkBaseConfig& config,
257 rev::ResetMode resetMode,
258 rev::PersistMode persistMode);
259
288 [[deprecated(
289 "Use ConfigureAsync(SparkBaseConfig&, rev::ResetMode, "
290 "rev::PersistMode) instead. This method will be removed in 2027.")]]
292 ResetMode resetMode,
293 PersistMode persistMode);
294
322 rev::ResetMode resetMode,
323 rev::PersistMode persistMode);
324
331
338
345
351
359
367
373
379
391
409
419
434
441 bool IsFollower();
442
450 bool HasActiveFault();
451
458 bool HasStickyFault();
459
466 bool HasActiveWarning();
467
474 bool HasStickyWarning();
475
483
494
502
513
517 double GetBusVoltage();
518
526 double GetAppliedOutput();
527
531 double GetOutputCurrent();
532
536 double GetMotorTemperature();
537
542
548 REVLibError SetCANTimeout(int milliseconds);
549
559
560protected:
561 // Only used for Get() or Set() API
562 double m_setpoint{0.0};
563
575 explicit SparkBase(int deviceID, MotorType type, SparkModel model);
576
577 // Used by the HIL tester
579
584 uint8_t GetMotorInterface();
585
593
594protected:
596 std::atomic<bool> m_relativeEncoderCreated{false};
597
599 std::atomic<bool> m_analogSensorCreated{false};
600
602 std::atomic<bool> m_absoluteEncoderCreated{false};
603
605 std::atomic<bool> m_closedLoopControllerCreated{false};
606
608 std::atomic<bool> m_forwardLimitSwitchCreated{false};
609
611 std::atomic<bool> m_reverseLimitSwitchCreated{false};
612
614 std::atomic<bool> m_forwardSoftLimitCreated{false};
615
617 std::atomic<bool> m_reverseSoftLimitCreated{false};
618};
619
620} // namespace rev::spark
621
622#ifdef __GNUC__
623#pragma GCC diagnostic pop
624#endif
Definition: SparkAbsoluteEncoder.h:42
Definition: SparkAnalogSensor.h:51
Definition: SparkBaseConfig.h:46
Definition: SparkBase.h:61
bool HasStickyWarning()
Definition: SparkBase.cpp:253
std::atomic< bool > m_forwardSoftLimitCreated
Definition: SparkBase.h:614
SparkRelativeEncoder & GetEncoder()
Definition: SparkBase.cpp:147
uint8_t GetMotorInterface()
Definition: SparkBase.cpp:187
Warnings GetStickyWarnings()
Definition: SparkBase.cpp:283
std::atomic< bool > m_absoluteEncoderCreated
Definition: SparkBase.h:602
IdleMode
Definition: SparkBase.h:76
bool IsFollower()
Definition: SparkBase.cpp:226
rev::REVLibError PauseFollowerModeAsync()
Definition: SparkBase.cpp:220
REVLibError SetCANTimeout(int milliseconds)
Definition: SparkBase.cpp:324
SoftLimitDirection
Definition: SparkBase.h:78
virtual SparkAbsoluteEncoder & GetAbsoluteEncoder()
Definition: SparkBase.cpp:157
Faults GetStickyFaults()
Definition: SparkBase.cpp:267
std::atomic< bool > m_relativeEncoderCreated
Definition: SparkBase.h:596
std::atomic< bool > m_reverseSoftLimitCreated
Definition: SparkBase.h:617
std::atomic< bool > m_forwardLimitSwitchCreated
Definition: SparkBase.h:608
~SparkBase() override=default
double GetAppliedOutput()
Definition: SparkBase.cpp:297
SparkClosedLoopController & GetClosedLoopController()
Definition: SparkBase.cpp:162
std::atomic< bool > m_reverseLimitSwitchCreated
Definition: SparkBase.h:611
bool HasActiveFault()
Definition: SparkBase.cpp:233
SparkLimitSwitch m_ReverseLimitSwitch
Definition: SparkBase.h:610
Warnings GetWarnings()
Definition: SparkBase.cpp:275
Faults GetFaults()
Definition: SparkBase.cpp:260
std::atomic< bool > m_analogSensorCreated
Definition: SparkBase.h:599
bool HasStickyFault()
Definition: SparkBase.cpp:239
std::atomic< bool > m_closedLoopControllerCreated
Definition: SparkBase.h:605
SparkClosedLoopController m_ClosedLoopController
Definition: SparkBase.h:604
void Disable() override
Definition: SparkBase.cpp:93
double Get() const override
Definition: SparkBase.cpp:73
REVLibError ClearFaults()
Definition: SparkBase.cpp:318
SparkRelativeEncoder GetEncoderEvenIfAlreadyCreated()
Definition: SparkBase.cpp:336
double m_setpoint
Definition: SparkBase.h:562
ResetMode
Definition: SparkBase.h:80
SparkSoftLimit m_ForwardSoftLimit
Definition: SparkBase.h:613
double GetOutputCurrent()
Definition: SparkBase.cpp:304
rev::REVLibError PauseFollowerMode()
Definition: SparkBase.cpp:214
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:598
REVLibError GetLastError()
Definition: SparkBase.cpp:330
bool GetInverted() const override
Definition: SparkBase.cpp:83
void Set(double speed) override
Definition: SparkBase.cpp:58
virtual SparkLimitSwitch & GetReverseLimitSwitch()
Definition: SparkBase.cpp:172
SparkBase::SparkModel GetSparkModel()
Definition: SparkBase.cpp:195
virtual REVLibError ConfigureAsync(SparkBaseConfig &config, ResetMode resetMode, PersistMode persistMode)
Definition: SparkBase.cpp:126
SparkAnalogSensor & GetAnalog()
Definition: SparkBase.cpp:152
rev::REVLibError ResumeFollowerMode()
Definition: SparkBase.cpp:202
SparkAbsoluteEncoder m_AbsoluteEncoder
Definition: SparkBase.h:601
bool HasActiveWarning()
Definition: SparkBase.cpp:246
SparkSoftLimit & GetForwardSoftLimit()
Definition: SparkBase.cpp:177
SparkSoftLimit & GetReverseSoftLimit()
Definition: SparkBase.cpp:182
void SetVoltage(units::volt_t output) override
Definition: SparkBase.cpp:64
SparkRelativeEncoder m_RelativeEncoder
Definition: SparkBase.h:595
double GetBusVoltage()
Definition: SparkBase.cpp:291
rev::REVLibError ResumeFollowerModeAsync()
Definition: SparkBase.cpp:208
PersistMode
Definition: SparkBase.h:82
SparkSoftLimit m_ReverseSoftLimit
Definition: SparkBase.h:616
double GetMotorTemperature()
Definition: SparkBase.cpp:311
SparkLimitSwitch m_ForwardLimitSwitch
Definition: SparkBase.h:607
virtual SparkLimitSwitch & GetForwardLimitSwitch()
Definition: SparkBase.cpp:167
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:210
Definition: SparkMaxAlternateEncoder.h:42
Definition: SparkMax.h:40
Definition: SparkRelativeEncoder.h:42
Definition: SparkSim.h:48
Definition: SparkSoftLimit.h:48
Definition: SparkLowLevel.cpp:40
REVLibError
Definition: REVLibError.h:33
PersistMode
Definition: ConfigureTypes.h:35
ResetMode
Definition: ConfigureTypes.h:33
Definition: SparkBase.h:84
int rawBits
Definition: SparkBase.h:93
Faults()
Definition: SparkBase.h:95
bool motorType
Definition: SparkBase.h:86
bool other
Definition: SparkBase.h:85
Faults(uint16_t faults)
Definition: SparkBase.h:97
bool temperature
Definition: SparkBase.h:89
bool can
Definition: SparkBase.h:88
bool gateDriver
Definition: SparkBase.h:90
bool escEeprom
Definition: SparkBase.h:91
bool sensor
Definition: SparkBase.h:87
bool firmware
Definition: SparkBase.h:92
Definition: SparkBase.h:110
bool extEeprom
Definition: SparkBase.h:114
bool escEeprom
Definition: SparkBase.h:113
bool overcurrent
Definition: SparkBase.h:112
bool hasReset
Definition: SparkBase.h:117
bool sensor
Definition: SparkBase.h:115
Warnings()
Definition: SparkBase.h:121
int rawBits
Definition: SparkBase.h:119
bool other
Definition: SparkBase.h:118
Warnings(uint16_t warnings)
Definition: SparkBase.h:123
bool stall
Definition: SparkBase.h:116
bool brownout
Definition: SparkBase.h:111