REVLib - C++
Loading...
Searching...
No Matches
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 <wpi/hardware/bus/CANPort.hpp>
34
35#include "rev/ConfigureTypes.h"
36#include "rev/REVLibError.h"
41#include "rev/SparkLowLevel.h"
43#include "rev/SparkSoftLimit.h"
44#include "rev/util/Signal.h"
45
46// Defined in HIL tester source
47class ConfigBase;
48
49namespace rev::spark {
50
51class SparkBaseConfig;
52
53class SparkBase : public SparkLowLevel {
54 friend class SparkMax;
55 friend class SparkFlex;
56 friend class SparkLimitSwitch;
57 friend class SparkSoftLimit;
61 friend class SparkSim;
63
64 // Defined in HIL tester source
65 friend class ::ConfigBase;
66
67public:
68 enum class IdleMode { kCoast = 0, kBrake = 1 };
69
71
73
75
76 struct Faults {
77 bool other{};
78 bool motorType{};
79 bool sensor{};
80 bool can{};
82 bool gateDriver{};
83 bool escEeprom{};
84 bool firmware{};
85 int rawBits{};
86
87 Faults() = default;
88
89 explicit Faults(uint16_t faults) {
90 rawBits = faults;
91 other = (faults & 0x1) != 0;
92 motorType = (faults & 0x2) != 0;
93 sensor = (faults & 0x4) != 0;
94 can = (faults & 0x8) != 0;
95 temperature = (faults & 0x10) != 0;
96 gateDriver = (faults & 0x20) != 0;
97 escEeprom = (faults & 0x40) != 0;
98 firmware = (faults & 0x80) != 0;
99 }
100 };
101
102 struct Warnings {
103 bool brownout{};
105 bool escEeprom{};
106 bool extEeprom{};
107 bool sensor{};
108 bool stall{};
109 bool hasReset{};
110 bool other{};
111 int rawBits{};
112
113 Warnings() = default;
114
115 explicit Warnings(uint16_t warnings) {
116 rawBits = warnings;
117 brownout = (warnings & 0x1) != 0;
118 overcurrent = (warnings & 0x2) != 0;
119 escEeprom = (warnings & 0x4) != 0;
120 extEeprom = (warnings & 0x8) != 0;
121 sensor = (warnings & 0x10) != 0;
122 stall = (warnings & 0x20) != 0;
123 hasReset = (warnings & 0x40) != 0;
124 other = (warnings & 0x80) != 0;
125 }
126 };
127
131 ~SparkBase() override = default;
132
133 /**** Speed Controller Interface ****/
140 void SetThrottle(double throttle) override;
141
152 void SetVoltage(wpi::units::volt_t output) override;
153
160 double GetThrottle() const override;
161
171 [[deprecated("Use SparkBaseConfig.Inverted() with Configure() instead")]]
172 void SetInverted(bool isInverted) override;
173
183 [[deprecated(
184 "Use SparkBaseConfigAccessor.GetInverted() via SparkMax.configAccessor "
185 "or SparkFlex.configAccessor instead")]]
186 bool GetInverted() const override;
187
191 void Disable() override;
192
196 void
197 StopMotor(); // override; TODO: (2027 - StopMotor moved to MotorSafety)
198
199 /* ***** Extended Functions ****** */
200
222 virtual REVLibError Configure(SparkBaseConfig& config,
223 rev::ResetMode resetMode,
224 rev::PersistMode persistMode);
225
253 rev::ResetMode resetMode,
254 rev::PersistMode persistMode);
255
262
269
276
282
290
298
304
310
322
340
350
365
373
382
390
398
406
414
425
433
444
451
462
469
476
481
487 REVLibError SetCANTimeout(int milliseconds);
488
498
499protected:
500 // Only used for Get() or Set() API
501 double m_setpoint{0.0};
502
515 SparkBase(wpi::CANPort canPort, int deviceID, MotorType type,
516 SparkModel model);
517
518 // Used by the HIL tester
520
525 uint8_t GetMotorInterface();
526
534
535protected:
537 std::atomic<bool> m_relativeEncoderCreated{false};
538
540 std::atomic<bool> m_analogSensorCreated{false};
541
543 std::atomic<bool> m_absoluteEncoderCreated{false};
544
546 std::atomic<bool> m_closedLoopControllerCreated{false};
547
549 std::atomic<bool> m_forwardLimitSwitchCreated{false};
550
552 std::atomic<bool> m_reverseLimitSwitchCreated{false};
553
555 std::atomic<bool> m_forwardSoftLimitCreated{false};
556
558 std::atomic<bool> m_reverseSoftLimitCreated{false};
559};
560
561} // namespace rev::spark
Definition SparkAbsoluteEncoder.h:43
Definition SparkAnalogSensor.h:41
Definition SparkBaseConfig.h:46
Definition SparkBase.h:53
std::atomic< bool > m_forwardSoftLimitCreated
Definition SparkBase.h:555
SparkRelativeEncoder & GetEncoder()
Definition SparkBase.cpp:136
uint8_t GetMotorInterface()
Definition SparkBase.cpp:176
std::atomic< bool > m_absoluteEncoderCreated
Definition SparkBase.h:543
IdleMode
Definition SparkBase.h:68
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:70
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:537
rev::util::Signal< double > GetMotorTemperature() const
Definition SparkBase.cpp:343
std::atomic< bool > m_reverseSoftLimitCreated
Definition SparkBase.h:558
std::atomic< bool > m_forwardLimitSwitchCreated
Definition SparkBase.h:549
~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:552
SparkLimitSwitch m_ReverseLimitSwitch
Definition SparkBase.h:551
virtual REVLibError ConfigureAsync(SparkBaseConfig &config, rev::ResetMode resetMode, rev::PersistMode persistMode)
Definition SparkBase.cpp:122
std::atomic< bool > m_analogSensorCreated
Definition SparkBase.h:540
std::atomic< bool > m_closedLoopControllerCreated
Definition SparkBase.h:546
virtual REVLibError Configure(SparkBaseConfig &config, rev::ResetMode resetMode, rev::PersistMode persistMode)
Definition SparkBase.cpp:100
SparkClosedLoopController m_ClosedLoopController
Definition SparkBase.h:545
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:501
ResetMode
Definition SparkBase.h:72
SparkSoftLimit m_ForwardSoftLimit
Definition SparkBase.h:554
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:539
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:542
SparkSoftLimit & GetForwardSoftLimit()
Definition SparkBase.cpp:166
SparkSoftLimit & GetReverseSoftLimit()
Definition SparkBase.cpp:171
SparkRelativeEncoder m_RelativeEncoder
Definition SparkBase.h:536
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:74
SparkSoftLimit m_ReverseSoftLimit
Definition SparkBase.h:557
void SetVoltage(wpi::units::volt_t output) override
Definition SparkBase.cpp:65
SparkLimitSwitch m_ForwardLimitSwitch
Definition SparkBase.h:548
virtual SparkLimitSwitch & GetForwardLimitSwitch()
Definition SparkBase.cpp:156
Definition SparkClosedLoopController.h:40
Definition SparkFlex.h:39
Definition SparkLimitSwitch.h:38
Definition SparkLowLevel.h:50
MotorType
Definition SparkLowLevel.h:78
friend class SparkBase
Definition SparkLowLevel.h:51
SparkModel
Definition SparkLowLevel.h:212
Definition SparkMaxAlternateEncoder.h:43
Definition SparkMax.h:42
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:76
int rawBits
Definition SparkBase.h:85
bool motorType
Definition SparkBase.h:78
bool other
Definition SparkBase.h:77
Faults(uint16_t faults)
Definition SparkBase.h:89
bool temperature
Definition SparkBase.h:81
bool can
Definition SparkBase.h:80
bool gateDriver
Definition SparkBase.h:82
bool escEeprom
Definition SparkBase.h:83
bool sensor
Definition SparkBase.h:79
bool firmware
Definition SparkBase.h:84
Definition SparkBase.h:102
bool extEeprom
Definition SparkBase.h:106
bool escEeprom
Definition SparkBase.h:105
bool overcurrent
Definition SparkBase.h:104
bool hasReset
Definition SparkBase.h:109
bool sensor
Definition SparkBase.h:107
int rawBits
Definition SparkBase.h:111
bool other
Definition SparkBase.h:110
Warnings(uint16_t warnings)
Definition SparkBase.h:115
bool stall
Definition SparkBase.h:108
bool brownout
Definition SparkBase.h:103