REVLib - C++
A301.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 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 <memory>
32#include <string>
33
34#include <wpi/hardware/motor/MotorController.hpp>
35
36// TODO
37#include "rev/REVLibError.h"
38#include "rev/util/Signal.h"
39
40namespace first::a301 {
41
42namespace internal {
43class A301;
44} // namespace internal
45
46// The default A301 device ID is set to 3 out of the factory.
47constexpr int defaultDeviceId{3};
48
49class A301 : public wpi::MotorController {
50public:
60 explicit A301(int busId, int deviceId = defaultDeviceId);
61
65 ~A301() override;
66
73 int GetBusId() const;
74
81 int GetDeviceId() const;
82
84 uint8_t major;
85 uint8_t minor;
86 uint16_t patch;
87 uint8_t prerelease;
88 };
89
97
104 std::string GetFirmwareString() const;
105
114
122
130
138
139 struct Faults {
140 bool other{};
141 bool sensor{};
142 bool can{};
145 bool escEeprom{};
146 bool firmware{};
148 uint16_t rawBits{};
149
150 Faults() = default;
151
152 explicit Faults(uint16_t faults);
153 };
154
162
173
174 struct Warnings {
177 bool brownout{};
179 bool escEeprom{};
180 bool extEeprom{};
181 bool sensor{};
182 bool stall{};
183 bool hasReset{};
184 bool other{};
185 uint16_t rawBits{};
186
187 Warnings() = default;
188
189 explicit Warnings(uint16_t warnings);
190 };
191
199
210
217
224
231
238
239 enum class GearboxRPM {
241 kRPM_215,
242 kRPM_500,
243 };
244
251
259
267
275
284
293
298
305 rev::REVLibError SetVelocity(double velocity);
306
313 rev::REVLibError SetRelativePosition(double position);
314
323 double speed);
324
331 rev::REVLibError SetAbsolutePosition(double absPosition);
332
343 double speed);
344
351
358
365
372 rev::REVLibError SetCurrent(double current);
373
374 /**** MotorController Interface ****/
375
382 void SetThrottle(double throttle) override;
383
390 double GetThrottle() const override;
391
401 void SetVoltage(wpi::units::volt_t output) override;
402
408 void SetInverted(bool isInverted) override;
409
415 bool GetInverted() const override;
416
420 void Disable() override;
421
422 /**** Signals Configuration Interface ****/
423
437 A301& FaultsPeriodMs(int period_ms);
438
445 int GetFaultsPeriodMs() const;
446
460 A301& WarningsPeriodMs(int period_ms);
461
468 int GetWarningsPeriodMs() const;
469
483 A301& BusVoltagePeriodMs(int period_ms);
484
491 int GetBusVoltagePeriodMs() const;
492
506 A301& AppliedOutputPeriodMs(int period_ms);
507
514 int GetAppliedOutputPeriodMs() const;
515
529 A301& MotorCurrentPeriodMs(int period_ms);
530
537 int GetMotorCurrentPeriodMs() const;
538
552 A301& MotorTemperaturePeriodMs(int period_ms);
553
560 int GetMotorTemperaturePeriodMs() const;
561
576
584
598 A301& EncoderVelocityPeriodMs(int period_ms);
599
606 int GetEncoderVelocityPeriodMs() const;
607
622
630
631private:
632 std::unique_ptr<internal::A301> p;
633};
634
635} // namespace first::a301
Definition: A301.h:49
rev::REVLibError SetVelocity(double velocity)
Definition: A301.cpp:550
rev::util::Signal< bool > HasActiveFault() const
Definition: A301.cpp:374
rev::util::Signal< bool > HasActiveWarning() const
Definition: A301.cpp:384
int GetFaultsPeriodMs() const
Definition: A301.cpp:643
void Disable() override
Definition: A301.cpp:636
~A301() override
A301 & FaultsPeriodMs(int period_ms)
Definition: A301.cpp:638
rev::REVLibError EnableAbsolutePositionContinuousInput()
Definition: A301.cpp:576
rev::REVLibError SetAbsoluteEncoderPosition(double position)
Definition: A301.cpp:606
rev::util::Signal< double > GetMotorTemperature() const
Definition: A301.cpp:505
int GetDeviceId() const
Definition: A301.cpp:346
int GetBusId() const
Definition: A301.cpp:344
bool GetInverted() const override
Definition: A301.cpp:630
rev::REVLibError DisableAbsolutePositionContinuousInput()
Definition: A301.cpp:582
rev::REVLibError SetRelativePositionWithSpeed(double position, double speed)
Definition: A301.cpp:559
bool IsAbsolutePositionContinuousInputEnabled() const
Definition: A301.cpp:588
rev::REVLibError ClearFaults()
Definition: A301.cpp:545
rev::util::Signal< double > GetBusVoltage() const
Definition: A301.cpp:490
int GetMotorTemperaturePeriodMs() const
Definition: A301.cpp:698
rev::util::Signal< Warnings > GetStickyWarnings() const
Definition: A301.cpp:462
rev::util::Signal< double > GetMotorCurrent() const
Definition: A301.cpp:500
int GetEncoderVelocityPeriodMs() const
Definition: A301.cpp:720
rev::util::Signal< bool > HasStickyFault() const
Definition: A301.cpp:379
rev::util::Signal< GearboxRPM > GetGearboxRPM() const
Definition: A301.cpp:511
int GetAbsoluteEncoderPositionPeriodMs() const
Definition: A301.cpp:731
rev::REVLibError SetRelativeEncoderPosition(double position)
Definition: A301.cpp:600
rev::REVLibError SetCurrent(double current)
Definition: A301.cpp:596
rev::util::Signal< double > GetEncoderVelocity() const
Definition: A301.cpp:534
rev::util::Signal< Warnings > GetWarnings() const
Definition: A301.cpp:437
rev::util::Signal< bool > HasStickyWarning() const
Definition: A301.cpp:389
void SetThrottle(double throttle) override
Definition: A301.cpp:612
A301 & BusVoltagePeriodMs(int period_ms)
Definition: A301.cpp:660
A301 & MotorTemperaturePeriodMs(int period_ms)
Definition: A301.cpp:693
A301 & WarningsPeriodMs(int period_ms)
Definition: A301.cpp:649
void SetVoltage(wpi::units::volt_t output) override
Definition: A301.cpp:620
A301(int busId, int deviceId=defaultDeviceId)
Definition: A301.cpp:339
int GetMotorCurrentPeriodMs() const
Definition: A301.cpp:687
A301 & MotorCurrentPeriodMs(int period_ms)
Definition: A301.cpp:682
rev::util::Signal< double > GetAppliedOutput() const
Definition: A301.cpp:495
A301 & RelativeEncoderPositionPeriodMs(int period_ms)
Definition: A301.cpp:704
rev::util::Signal< double > GetAbsoluteEncoderPosition() const
Definition: A301.cpp:539
A301 & AppliedOutputPeriodMs(int period_ms)
Definition: A301.cpp:671
int GetBusVoltagePeriodMs() const
Definition: A301.cpp:665
double GetThrottle() const override
Definition: A301.cpp:618
rev::util::Signal< double > GetRelativeEncoderPosition() const
Definition: A301.cpp:528
rev::util::Signal< Faults > GetFaults() const
Definition: A301.cpp:394
std::string GetFirmwareString() const
Definition: A301.cpp:359
int GetAppliedOutputPeriodMs() const
Definition: A301.cpp:676
void SetInverted(bool isInverted) override
Definition: A301.cpp:626
A301 & EncoderVelocityPeriodMs(int period_ms)
Definition: A301.cpp:715
int GetWarningsPeriodMs() const
Definition: A301.cpp:654
int GetRelativeEncoderPositionPeriodMs() const
Definition: A301.cpp:709
rev::util::Signal< Faults > GetStickyFaults() const
Definition: A301.cpp:414
rev::REVLibError SetRelativePosition(double position)
Definition: A301.cpp:554
FirmwareVersion GetFirmwareVersion() const
Definition: A301.cpp:348
GearboxRPM
Definition: A301.h:239
rev::REVLibError SetAbsolutePosition(double absPosition)
Definition: A301.cpp:565
A301 & AbsoluteEncoderPositionPeriodMs(int period_ms)
Definition: A301.cpp:726
rev::REVLibError SetAbsolutePositionWithSpeed(double absPosition, double speed)
Definition: A301.cpp:570
Definition: Signal.h:42
Definition: A301.cpp:42
constexpr int defaultDeviceId
Definition: A301.h:47
REVLibError
Definition: REVLibError.h:33
Definition: A301.h:139
bool gateDriver
Definition: A301.h:144
bool other
Definition: A301.h:140
bool temperature
Definition: A301.h:143
bool escEeprom
Definition: A301.h:145
bool sensor
Definition: A301.h:141
uint16_t rawBits
Definition: A301.h:148
bool can
Definition: A301.h:142
bool motorStartup
Definition: A301.h:147
bool firmware
Definition: A301.h:146
uint8_t prerelease
Definition: A301.h:87
uint16_t patch
Definition: A301.h:86
uint8_t major
Definition: A301.h:84
uint8_t minor
Definition: A301.h:85
Definition: A301.h:174
bool escEeprom
Definition: A301.h:179
bool stall
Definition: A301.h:182
bool sensor
Definition: A301.h:181
bool overvoltage
Definition: A301.h:175
bool brownout
Definition: A301.h:177
bool other
Definition: A301.h:184
bool hasReset
Definition: A301.h:183
bool motorLoopSpeed
Definition: A301.h:176
bool overcurrent
Definition: A301.h:178
bool extEeprom
Definition: A301.h:180
uint16_t rawBits
Definition: A301.h:185