7#include <units/current.h>
9#include <units/voltage.h>
13#include "ctre/Phoenix.h"
17 namespace talonsrx_config {
69 TalonSRXConfiguration config;
70 auto timeout = configTimeout.to<
int>();
73 motorController.SetInverted(T::inverted);
76 motorController.SetSensorPhase(T::sensorPhase);
79 motorController.SetNeutralMode(T::neutralMode);
82 constexpr units::volt_t voltage = T::voltCompSat;
83 config.voltageCompSaturation = voltage.to<
double>();
84 motorController.EnableVoltageCompensation(
true);
86 motorController.EnableVoltageCompensation(
false);
89 ctre::phoenix::motorcontrol::can::FilterConfiguration filterConfig;
90 filterConfig.remoteSensorDeviceID = T::remoteFilter0_addr.address;
91 filterConfig.remoteSensorSource = T::remoteFilter0_type;
92 config.remoteFilter0 = filterConfig;
95 config.primaryPID.selectedFeedbackSensor = T::pid0_selectedSensor;
98 config.slot0.kP = T::pid0_kP;
101 config.slot0.kI = T::pid0_kI;
104 config.slot0.kD = T::pid0_kD;
107 config.slot0.kF = T::pid0_kF;
110 config.slot0.integralZone = T::pid0_iZone;
113 config.slot0.allowableClosedloopError = T::pid0_allowableError;
116 constexpr units::ampere_t currentLimit = T::peakCurrentLimit;
117 static_assert(currentLimit.to<
double>() > 0,
"Current limit must be positive");
118 config.peakCurrentLimit = std::round(currentLimit.to<
double>());
121 constexpr units::millisecond_t currentDuration = T::peakCurrentDuration;
122 static_assert(currentDuration.to<
double>() > 0,
"Current duration must be positive");
123 config.peakCurrentDuration = std::round(currentDuration.to<
double>());
126 constexpr units::ampere_t currentLimit = T::continuousCurrentLimit;
127 static_assert(currentLimit.to<
double>() > 0,
"Current limit must be positive");
128 config.continuousCurrentLimit = std::round(currentLimit.to<
double>());
131 config.peakOutputForward = T::peakOutputForward;
134 config.peakOutputReverse = T::peakOutputReverse;
141 return 0 != motorController.ConfigAllSettings(config, timeout);
155 template <
typename CompetitionConfig,
typename PracticeConfig>
157 units::millisecond_t configTimeout,
161 return TalonSRXConfig<CompetitionConfig>(motorController, configTimeout);
164 return TalonSRXConfig<PracticeConfig>(motorController, configTimeout);
#define HAS_MEMBER(X)
Helper function generator to detect if a namespace has a member defined.
Definition: compile_time_member_check.h:14
void SetMotorStatusFrameRates(BaseTalon &motor, MotorPresetMode motorMode)
Set motor controller status frame update periods based on the motor preset.
Definition: status_frame_config.cpp:7
bool TalonSRXConfig(WPI_TalonSRX &motorController, units::millisecond_t configTimeout)
Configures a CTRE TalonSRX with only the fields provided. All other fields are given the factory defa...
Definition: talonsrx_config.h:68
Definition: swap_controllers_command.h:12
RobotInstance
Differentiates between practice robot and competition robot.
Definition: config_types.h:13
@ Competition
Competition robot.
@ Practice
Practice robot.
Definition: sensor_conversions.h:14
Definition: talonsrx_config.h:35
Definition: talonsrx_config.h:19
Definition: talonsrx_config.h:20
Definition: talonsrx_config.h:34
Definition: talonsrx_config.h:33
Definition: talonsrx_config.h:36
Definition: talonsrx_config.h:37
Definition: talonsrx_config.h:21
Definition: talonsrx_config.h:22
Definition: talonsrx_config.h:23
Definition: talonsrx_config.h:24
Definition: talonsrx_config.h:25
Definition: talonsrx_config.h:26
Definition: talonsrx_config.h:27
Definition: talonsrx_config.h:28
Definition: talonsrx_config.h:29
Definition: talonsrx_config.h:30
Definition: talonsrx_config.h:32
Definition: talonsrx_config.h:31