REVLib - C++
Loading...
Searching...
No Matches
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/bus/CANPort.hpp>
35#include <wpi/hardware/motor/MotorController.hpp>
36
37// TODO
38#include "rev/REVLibError.h"
39#include "rev/util/Signal.h"
40
41namespace first::a301 {
42
43namespace internal {
44class A301;
45} // namespace internal
46
47// The default A301 device ID is set to 3 out of the factory.
48constexpr int defaultDeviceId{3};
49
50class A301 : public wpi::MotorController {
51public:
60 explicit A301(wpi::CANPort canPort);
61
71 A301(wpi::CANPort canPort, int deviceId);
72
76 ~A301() override;
77
84 wpi::CANPort GetCanPort() const;
85
92 int GetDeviceId() const;
93
95 uint8_t major;
96 uint8_t minor;
97 uint16_t patch;
98 uint8_t prerelease;
99 };
100
108
115 std::string GetFirmwareString() const;
116
125
133
141
149
150 struct Faults {
151 bool other{};
152 bool sensor{};
153 bool can{};
156 bool escEeprom{};
157 bool firmware{};
159 uint16_t rawBits{};
160
161 Faults() = default;
162
163 explicit Faults(uint16_t faults);
164 };
165
173
184
185 struct Warnings {
188 bool brownout{};
190 bool escEeprom{};
191 bool extEeprom{};
192 bool sensor{};
193 bool stall{};
194 bool hasReset{};
195 bool other{};
196 uint16_t rawBits{};
197
198 Warnings() = default;
199
200 explicit Warnings(uint16_t warnings);
201 };
202
210
221
228
235
242
249
250 enum class GearboxRPM {
252 kRPM_215,
253 kRPM_500,
254 };
255
262
270
278
286
294
302
307
314 rev::REVLibError SetVelocity(double velocity);
315
322 rev::REVLibError SetRelativePosition(double position);
323
332 double speed);
333
340 rev::REVLibError SetAbsolutePosition(double absPosition);
341
352 double speed);
353
354 enum class IdleMode {
355 kCoast,
356 kBrake,
357 };
358
365
371 IdleMode GetIdleMode() const;
372
379
386
393
403
410 double GetAbsoluteEncoderRangeOffset() const;
411
418 rev::REVLibError SetCurrent(double current);
419
420 /**** MotorController Interface ****/
421
428 void SetThrottle(double throttle) override;
429
436 double GetThrottle() const override;
437
447 void SetVoltage(wpi::units::volt_t output) override;
448
454 void SetInverted(bool isInverted) override;
455
461 bool GetInverted() const override;
462
466 void Disable() override;
467
468 /**** Signals Configuration Interface ****/
469
483 A301& FaultsPeriodMs(int period_ms);
484
491 int GetFaultsPeriodMs() const;
492
506 A301& WarningsPeriodMs(int period_ms);
507
514 int GetWarningsPeriodMs() const;
515
529 A301& BusVoltagePeriodMs(int period_ms);
530
537 int GetBusVoltagePeriodMs() const;
538
552 A301& AppliedOutputPeriodMs(int period_ms);
553
560 int GetAppliedOutputPeriodMs() const;
561
575 A301& MotorCurrentPeriodMs(int period_ms);
576
583 int GetMotorCurrentPeriodMs() const;
584
598 A301& MotorTemperaturePeriodMs(int period_ms);
599
606 int GetMotorTemperaturePeriodMs() const;
607
622
630
644 A301& EncoderVelocityPeriodMs(int period_ms);
645
652 int GetEncoderVelocityPeriodMs() const;
653
668
676
677private:
678 std::unique_ptr<internal::A301> p;
679};
680
681} // namespace first::a301
Definition A301.h:50
rev::REVLibError SetVelocity(double velocity)
Definition A301.cpp:555
A301(wpi::CANPort canPort)
Definition A301.cpp:343
rev::util::Signal< bool > HasActiveFault() const
Definition A301.cpp:379
rev::util::Signal< bool > HasActiveWarning() const
Definition A301.cpp:389
int GetFaultsPeriodMs() const
Definition A301.cpp:673
void Disable() override
Definition A301.cpp:666
~A301() override
A301 & FaultsPeriodMs(int period_ms)
Definition A301.cpp:668
rev::REVLibError EnableAbsolutePositionContinuousInput()
Definition A301.cpp:594
rev::REVLibError SetAbsoluteEncoderPosition(double position)
Definition A301.cpp:624
rev::util::Signal< double > GetMotorTemperature() const
Definition A301.cpp:510
int GetDeviceId() const
Definition A301.cpp:351
wpi::CANPort GetCanPort() const
Definition A301.cpp:347
bool GetInverted() const override
Definition A301.cpp:660
rev::REVLibError DisableAbsolutePositionContinuousInput()
Definition A301.cpp:600
rev::REVLibError SetRelativePositionWithSpeed(double position, double speed)
Definition A301.cpp:564
bool IsAbsolutePositionContinuousInputEnabled() const
Definition A301.cpp:606
rev::REVLibError ClearFaults()
Definition A301.cpp:550
rev::util::Signal< double > GetBusVoltage() const
Definition A301.cpp:495
int GetMotorTemperaturePeriodMs() const
Definition A301.cpp:728
rev::util::Signal< Warnings > GetStickyWarnings() const
Definition A301.cpp:467
rev::util::Signal< double > GetMotorCurrent() const
Definition A301.cpp:505
int GetEncoderVelocityPeriodMs() const
Definition A301.cpp:750
rev::util::Signal< bool > HasStickyFault() const
Definition A301.cpp:384
rev::util::Signal< GearboxRPM > GetGearboxRPM() const
Definition A301.cpp:516
int GetAbsoluteEncoderPositionPeriodMs() const
Definition A301.cpp:761
rev::REVLibError SetRelativeEncoderPosition(double position)
Definition A301.cpp:618
rev::REVLibError SetCurrent(double current)
Definition A301.cpp:614
rev::util::Signal< double > GetEncoderVelocity() const
Definition A301.cpp:539
IdleMode GetIdleMode() const
Definition A301.cpp:588
rev::util::Signal< Warnings > GetWarnings() const
Definition A301.cpp:442
rev::util::Signal< bool > HasStickyWarning() const
Definition A301.cpp:394
void SetThrottle(double throttle) override
Definition A301.cpp:642
A301 & BusVoltagePeriodMs(int period_ms)
Definition A301.cpp:690
A301 & MotorTemperaturePeriodMs(int period_ms)
Definition A301.cpp:723
A301 & WarningsPeriodMs(int period_ms)
Definition A301.cpp:679
void SetVoltage(wpi::units::volt_t output) override
Definition A301.cpp:650
int GetMotorCurrentPeriodMs() const
Definition A301.cpp:717
rev::REVLibError SetIdleMode(IdleMode idleMode)
Definition A301.cpp:581
double GetAbsoluteEncoderRangeOffset() const
Definition A301.cpp:636
A301 & MotorCurrentPeriodMs(int period_ms)
Definition A301.cpp:712
rev::util::Signal< double > GetAppliedOutput() const
Definition A301.cpp:500
A301 & RelativeEncoderPositionPeriodMs(int period_ms)
Definition A301.cpp:734
rev::util::Signal< double > GetAbsoluteEncoderPosition() const
Definition A301.cpp:544
rev::REVLibError SetAbsoluteEncoderRangeOffset(double offset)
Definition A301.cpp:630
A301 & AppliedOutputPeriodMs(int period_ms)
Definition A301.cpp:701
int GetBusVoltagePeriodMs() const
Definition A301.cpp:695
double GetThrottle() const override
Definition A301.cpp:648
rev::util::Signal< double > GetRelativeEncoderPosition() const
Definition A301.cpp:533
rev::util::Signal< Faults > GetFaults() const
Definition A301.cpp:399
std::string GetFirmwareString() const
Definition A301.cpp:364
int GetAppliedOutputPeriodMs() const
Definition A301.cpp:706
void SetInverted(bool isInverted) override
Definition A301.cpp:656
A301 & EncoderVelocityPeriodMs(int period_ms)
Definition A301.cpp:745
int GetWarningsPeriodMs() const
Definition A301.cpp:684
int GetRelativeEncoderPositionPeriodMs() const
Definition A301.cpp:739
rev::util::Signal< Faults > GetStickyFaults() const
Definition A301.cpp:419
rev::REVLibError SetRelativePosition(double position)
Definition A301.cpp:559
FirmwareVersion GetFirmwareVersion() const
Definition A301.cpp:353
GearboxRPM
Definition A301.h:250
rev::REVLibError SetAbsolutePosition(double absPosition)
Definition A301.cpp:570
A301 & AbsoluteEncoderPositionPeriodMs(int period_ms)
Definition A301.cpp:756
rev::REVLibError SetAbsolutePositionWithSpeed(double absPosition, double speed)
Definition A301.cpp:575
IdleMode
Definition A301.h:354
Definition Signal.h:42
Definition A301.cpp:40
constexpr int defaultDeviceId
Definition A301.h:48
REVLibError
Definition REVLibError.h:33
Definition A301.h:150
bool gateDriver
Definition A301.h:155
bool other
Definition A301.h:151
bool temperature
Definition A301.h:154
bool escEeprom
Definition A301.h:156
bool sensor
Definition A301.h:152
uint16_t rawBits
Definition A301.h:159
bool can
Definition A301.h:153
bool motorStartup
Definition A301.h:158
bool firmware
Definition A301.h:157
uint8_t prerelease
Definition A301.h:98
uint16_t patch
Definition A301.h:97
uint8_t major
Definition A301.h:95
uint8_t minor
Definition A301.h:96
Definition A301.h:185
bool escEeprom
Definition A301.h:190
bool stall
Definition A301.h:193
bool sensor
Definition A301.h:192
bool overvoltage
Definition A301.h:186
bool brownout
Definition A301.h:188
bool other
Definition A301.h:195
bool hasReset
Definition A301.h:194
bool motorLoopSpeed
Definition A301.h:187
bool overcurrent
Definition A301.h:189
bool extEeprom
Definition A301.h:191
uint16_t rawBits
Definition A301.h:196