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#include <atomic>
32
33#include "rev/ConfigureTypes.h"
34#include "rev/REVLibError.h"
39#include "rev/SparkLowLevel.h"
41#include "rev/SparkSoftLimit.h"
42#include "rev/util/Signal.h"
43
44// Defined in HIL tester source
45class ConfigBase;
46
47namespace rev::spark {
48
49class SparkBaseConfig;
50
51class SparkBase : public SparkLowLevel {
52 friend class SparkMax;
53 friend class SparkFlex;
54 friend class SparkLimitSwitch;
55 friend class SparkSoftLimit;
59 friend class SparkSim;
61
62 // Defined in HIL tester source
63 friend class ::ConfigBase;
64
65public:
66 enum class IdleMode { kCoast = 0, kBrake = 1 };
67
69
71
73
74 struct Faults {
75 bool other{};
76 bool motorType{};
77 bool sensor{};
78 bool can{};
80 bool gateDriver{};
81 bool escEeprom{};
82 bool firmware{};
83 int rawBits{};
84
85 Faults() = default;
86
87 explicit Faults(uint16_t faults) {
88 rawBits = faults;
89 other = (faults & 0x1) != 0;
90 motorType = (faults & 0x2) != 0;
91 sensor = (faults & 0x4) != 0;
92 can = (faults & 0x8) != 0;
93 temperature = (faults & 0x10) != 0;
94 gateDriver = (faults & 0x20) != 0;
95 escEeprom = (faults & 0x40) != 0;
96 firmware = (faults & 0x80) != 0;
97 }
98 };
99
100 struct Warnings {
101 bool brownout{};
103 bool escEeprom{};
104 bool extEeprom{};
105 bool sensor{};
106 bool stall{};
107 bool hasReset{};
108 bool other{};
109 int rawBits{};
110
111 Warnings() = default;
112
113 explicit Warnings(uint16_t warnings) {
114 rawBits = warnings;
115 brownout = (warnings & 0x1) != 0;
116 overcurrent = (warnings & 0x2) != 0;
117 escEeprom = (warnings & 0x4) != 0;
118 extEeprom = (warnings & 0x8) != 0;
119 sensor = (warnings & 0x10) != 0;
120 stall = (warnings & 0x20) != 0;
121 hasReset = (warnings & 0x40) != 0;
122 other = (warnings & 0x80) != 0;
123 }
124 };
125
129 ~SparkBase() override = default;
130
131 /**** Speed Controller Interface ****/
138 void SetThrottle(double throttle) override;
139
150 void SetVoltage(wpi::units::volt_t output) override;
151
158 double GetThrottle() const override;
159
169 [[deprecated("Use SparkBaseConfig.Inverted() with Configure() instead")]]
170 void SetInverted(bool isInverted) override;
171
181 [[deprecated(
182 "Use SparkBaseConfigAccessor.GetInverted() via SparkMax.configAccessor "
183 "or SparkFlex.configAccessor instead")]]
184 bool GetInverted() const override;
185
189 void Disable() override;
190
194 void
195 StopMotor(); // override; TODO: (2027 - StopMotor moved to MotorSafety)
196
197 /* ***** Extended Functions ****** */
198
220 virtual REVLibError Configure(SparkBaseConfig& config,
221 rev::ResetMode resetMode,
222 rev::PersistMode persistMode);
223
251 rev::ResetMode resetMode,
252 rev::PersistMode persistMode);
253
260
267
274
280
288
296
302
308
320
338
348
363
371
380
388
396
404
412
423
431
442
449
460
467
474
479
485 REVLibError SetCANTimeout(int milliseconds);
486
496
497protected:
498 // Only used for Get() or Set() API
499 double m_setpoint{0.0};
500
513 SparkBase(int busID, int deviceID, MotorType type, SparkModel model);
514
515 // Used by the HIL tester
517
522 uint8_t GetMotorInterface();
523
531
532protected:
534 std::atomic<bool> m_relativeEncoderCreated{false};
535
537 std::atomic<bool> m_analogSensorCreated{false};
538
540 std::atomic<bool> m_absoluteEncoderCreated{false};
541
543 std::atomic<bool> m_closedLoopControllerCreated{false};
544
546 std::atomic<bool> m_forwardLimitSwitchCreated{false};
547
549 std::atomic<bool> m_reverseLimitSwitchCreated{false};
550
552 std::atomic<bool> m_forwardSoftLimitCreated{false};
553
555 std::atomic<bool> m_reverseSoftLimitCreated{false};
556};
557
558} // namespace rev::spark
Definition: SparkAbsoluteEncoder.h:43
Definition: SparkAnalogSensor.h:41
Definition: SparkBaseConfig.h:46
Definition: SparkBase.h:51
std::atomic< bool > m_forwardSoftLimitCreated
Definition: SparkBase.h:552
SparkRelativeEncoder & GetEncoder()
Definition: SparkBase.cpp:136
uint8_t GetMotorInterface()
Definition: SparkBase.cpp:176
std::atomic< bool > m_absoluteEncoderCreated
Definition: SparkBase.h:540
IdleMode
Definition: SparkBase.h:66
rev::REVLibError PauseFollowerModeAsync()
Definition: SparkBase.cpp:209
rev::util::Signal< bool > IsFollower() const
Definition: SparkBase.cpp:215
rev::util::Signal< double > GetAppliedOutput() const
Definition: SparkBase.cpp:333
REVLibError SetCANTimeout(int milliseconds)
Definition: SparkBase.cpp:355
SoftLimitDirection
Definition: SparkBase.h:68
virtual SparkAbsoluteEncoder & GetAbsoluteEncoder()
Definition: SparkBase.cpp:146
rev::util::Signal< bool > HasStickyWarning() const
Definition: SparkBase.cpp:235
rev::util::Signal< bool > HasActiveWarning() const
Definition: SparkBase.cpp:230
std::atomic< bool > m_relativeEncoderCreated
Definition: SparkBase.h:534
rev::util::Signal< double > GetMotorTemperature() const
Definition: SparkBase.cpp:343
std::atomic< bool > m_reverseSoftLimitCreated
Definition: SparkBase.h:555
std::atomic< bool > m_forwardLimitSwitchCreated
Definition: SparkBase.h:546
~SparkBase() override=default
rev::util::Signal< bool > HasActiveFault() const
Definition: SparkBase.cpp:220
SparkClosedLoopController & GetClosedLoopController()
Definition: SparkBase.cpp:151
rev::util::Signal< Warnings > GetStickyWarnings() const
Definition: SparkBase.cpp:303
std::atomic< bool > m_reverseLimitSwitchCreated
Definition: SparkBase.h:549
SparkLimitSwitch m_ReverseLimitSwitch
Definition: SparkBase.h:548
virtual REVLibError ConfigureAsync(SparkBaseConfig &config, rev::ResetMode resetMode, rev::PersistMode persistMode)
Definition: SparkBase.cpp:122
std::atomic< bool > m_analogSensorCreated
Definition: SparkBase.h:537
std::atomic< bool > m_closedLoopControllerCreated
Definition: SparkBase.h:543
virtual REVLibError Configure(SparkBaseConfig &config, rev::ResetMode resetMode, rev::PersistMode persistMode)
Definition: SparkBase.cpp:100
SparkClosedLoopController m_ClosedLoopController
Definition: SparkBase.h:542
void Disable() override
Definition: SparkBase.cpp:96
REVLibError ClearFaults()
Definition: SparkBase.cpp:349
SparkRelativeEncoder GetEncoderEvenIfAlreadyCreated()
Definition: SparkBase.cpp:367
rev::util::Signal< double > GetBusVoltage() const
Definition: SparkBase.cpp:328
double m_setpoint
Definition: SparkBase.h:499
ResetMode
Definition: SparkBase.h:70
SparkSoftLimit m_ForwardSoftLimit
Definition: SparkBase.h:551
rev::util::Signal< Faults > GetStickyFaults() const
Definition: SparkBase.cpp:259
rev::REVLibError PauseFollowerMode()
Definition: SparkBase.cpp:203
void SetInverted(bool isInverted) override
Definition: SparkBase.cpp:76
rev::util::Signal< double > GetOutputCurrent() const
Definition: SparkBase.cpp:338
double GetThrottle() const override
Definition: SparkBase.cpp:74
SparkAnalogSensor m_AnalogSensor
Definition: SparkBase.h:536
REVLibError GetLastError()
Definition: SparkBase.cpp:361
void StopMotor()
Definition: SparkBase.cpp:98
rev::util::Signal< bool > HasStickyFault() const
Definition: SparkBase.cpp:225
bool GetInverted() const override
Definition: SparkBase.cpp:85
virtual SparkLimitSwitch & GetReverseLimitSwitch()
Definition: SparkBase.cpp:161
SparkBase::SparkModel GetSparkModel()
Definition: SparkBase.cpp:184
SparkAnalogSensor & GetAnalog()
Definition: SparkBase.cpp:141
rev::util::Signal< Faults > GetFaults() const
Definition: SparkBase.cpp:240
rev::REVLibError ResumeFollowerMode()
Definition: SparkBase.cpp:191
SparkAbsoluteEncoder m_AbsoluteEncoder
Definition: SparkBase.h:539
SparkSoftLimit & GetForwardSoftLimit()
Definition: SparkBase.cpp:166
SparkSoftLimit & GetReverseSoftLimit()
Definition: SparkBase.cpp:171
SparkRelativeEncoder m_RelativeEncoder
Definition: SparkBase.h:533
void SetThrottle(double throttle) override
Definition: SparkBase.cpp:59
rev::util::Signal< Warnings > GetWarnings() const
Definition: SparkBase.cpp:281
rev::REVLibError ResumeFollowerModeAsync()
Definition: SparkBase.cpp:197
PersistMode
Definition: SparkBase.h:72
SparkSoftLimit m_ReverseSoftLimit
Definition: SparkBase.h:554
void SetVoltage(wpi::units::volt_t output) override
Definition: SparkBase.cpp:65
SparkLimitSwitch m_ForwardLimitSwitch
Definition: SparkBase.h:545
virtual SparkLimitSwitch & GetForwardLimitSwitch()
Definition: SparkBase.cpp:156
Definition: SparkClosedLoopController.h:40
Definition: SparkFlex.h:37
Definition: SparkLimitSwitch.h:38
Definition: SparkLowLevel.h:49
MotorType
Definition: SparkLowLevel.h:77
friend class SparkBase
Definition: SparkLowLevel.h:50
SparkModel
Definition: SparkLowLevel.h:211
Definition: SparkMaxAlternateEncoder.h:43
Definition: SparkMax.h:40
Definition: SparkRelativeEncoder.h:43
Definition: SparkSim.h:48
Definition: SparkSoftLimit.h:37
Definition: Signal.h:42
Definition: AnalogInput.h:35
REVLibError
Definition: REVLibError.h:33
PersistMode
Definition: ConfigureTypes.h:35
ResetMode
Definition: ConfigureTypes.h:33
Definition: SparkBase.h:74
int rawBits
Definition: SparkBase.h:83
bool motorType
Definition: SparkBase.h:76
bool other
Definition: SparkBase.h:75
Faults(uint16_t faults)
Definition: SparkBase.h:87
bool temperature
Definition: SparkBase.h:79
bool can
Definition: SparkBase.h:78
bool gateDriver
Definition: SparkBase.h:80
bool escEeprom
Definition: SparkBase.h:81
bool sensor
Definition: SparkBase.h:77
bool firmware
Definition: SparkBase.h:82
Definition: SparkBase.h:100
bool extEeprom
Definition: SparkBase.h:104
bool escEeprom
Definition: SparkBase.h:103
bool overcurrent
Definition: SparkBase.h:102
bool hasReset
Definition: SparkBase.h:107
bool sensor
Definition: SparkBase.h:105
int rawBits
Definition: SparkBase.h:109
bool other
Definition: SparkBase.h:108
Warnings(uint16_t warnings)
Definition: SparkBase.h:113
bool stall
Definition: SparkBase.h:106
bool brownout
Definition: SparkBase.h:101