CTRE_Phoenix 5.20.2
CANCoder.h
1#pragma once
2
3#include <cstdint>
4#include "ctre/phoenix/CANBusAddressable.h"
5#include "ctre/phoenix/CustomParamConfiguration.h"
6#include "ctre/phoenix/ErrorCode.h"
7#include "ctre/phoenix/paramEnum.h"
8#include "ctre/phoenix/sensors/AbsoluteSensorRange.h"
9#include "ctre/phoenix/sensors/CANCoderSimCollection.h"
10#include "ctre/phoenix/sensors/CANCoderStatusFrame.h"
11#include "ctre/phoenix/sensors/CANCoderStickyFaults.h"
12#include "ctre/phoenix/sensors/CANCoderFaults.h"
13#include "ctre/phoenix/sensors/SensorVelocityMeasPeriod.h"
14#include "ctre/phoenix/sensors/SensorInitializationStrategy.h"
15#include "ctre/phoenix/sensors/MagnetFieldStrength.h"
16#include "ctre/phoenix/sensors/SensorTimeBase.h"
17
18namespace ctre {
19 namespace phoenix {
20 namespace sensors {
21
29 SensorVelocityMeasPeriod velocityMeasurementPeriod = SensorVelocityMeasPeriod::Period_100Ms;
39 ctre::phoenix::sensors::AbsoluteSensorRange absoluteSensorRange = AbsoluteSensorRange::Unsigned_0_to_360;
53 bool sensorDirection = false;
63 ctre::phoenix::sensors::SensorInitializationStrategy initializationStrategy = ctre::phoenix::sensors::SensorInitializationStrategy::BootToZero;
67 double sensorCoefficient = 360.0 / 4096.0;
74 std::string unitString = "deg";
79 ctre::phoenix::sensors::SensorTimeBase sensorTimeBase = ctre::phoenix::sensors::SensorTimeBase::PerSecond;
80
85
89 std::string toString() {
90 return toString("");
91 }
92
98 std::string toString(std::string prependString) {
99
100 std::string retstr;
101 retstr += prependString + ".velocityMeasurementPeriod = " + SensorVelocityMeasPeriodRoutines::toString(velocityMeasurementPeriod) + ";\n";
102 retstr += prependString + ".velocityMeasurementWindow = " + std::to_string(velocityMeasurementWindow) + ";\n";
103 retstr += prependString + ".absoluteSensorRange = " + std::to_string(absoluteSensorRange) + ";\n";
104 retstr += prependString + ".magnetOffsetDegrees = " + std::to_string(magnetOffsetDegrees) + ";\n";
105 retstr += prependString + ".sensorDirection = " + std::to_string(sensorDirection) + ";\n";
106 retstr += prependString + ".initializationStrategy = " + std::to_string(initializationStrategy) + ";\n";
107 retstr += prependString + ".sensorCoefficient = " + std::to_string(sensorCoefficient) + ";\n";
108 retstr += prependString + ".unitString = \"" + unitString.c_str() + "\";\n";
109 retstr += prependString + ".sensorTimeBase = " + std::to_string(sensorTimeBase) + ";\n";
110 retstr += CustomParamConfiguration::toString(prependString);
111
112 return retstr;
113 }
114
115 };// struct CANCoderConfiguration
116
121 private:
122 static CANCoderConfiguration _default;
123 public:
131 static bool VelocityMeasurementWindowDifferent(const CANCoderConfiguration& settings) { return (!(settings.velocityMeasurementWindow == _default.velocityMeasurementWindow)) || !settings.enableOptimizations; }
132 static bool AbsoluteSensorRangeDifferent(const CANCoderConfiguration& settings) { return (!(settings.absoluteSensorRange == _default.absoluteSensorRange)) || !settings.enableOptimizations; }
133 static bool MagnetOffsetDegreesDifferent(const CANCoderConfiguration& settings) { return (!(settings.magnetOffsetDegrees == _default.magnetOffsetDegrees)) || !settings.enableOptimizations; }
134 static bool SensorDirectionDifferent(const CANCoderConfiguration& settings) { return (!(settings.sensorDirection == _default.sensorDirection)) || !settings.enableOptimizations; }
135 static bool InitializationStrategyDifferent(const CANCoderConfiguration& settings) { return (!(settings.initializationStrategy == _default.initializationStrategy)) || !settings.enableOptimizations; }
136 static bool SensorCoefficientDifferent(const CANCoderConfiguration& settings) { return (!(settings.sensorCoefficient == _default.sensorCoefficient)) || !settings.enableOptimizations; }
137 static bool UnitStringDifferent(const CANCoderConfiguration& settings) { return (!(settings.unitString == _default.unitString)) || !settings.enableOptimizations; }
138 static bool SensorTimeBaseDifferent(const CANCoderConfiguration& settings) { return (!(settings.sensorTimeBase == _default.sensorTimeBase)) || !settings.enableOptimizations; }
140 };
141
142
170 public:
177 CANCoder(int deviceNumber, std::string const &canbus = "");
178
179 ~CANCoder();
180
184 static void DestroyAllCANCoders();
185
186
192 double GetPosition();
199 double GetVelocity();
206 ErrorCode SetPosition(double newPosition, int timeoutMs = 0);
213
247 ErrorCode ConfigVelocityMeasurementWindow(int windowSize, int timeoutMs = 0);
274 ErrorCode ConfigMagnetOffset(double offsetDegrees, int timeoutMs = 0);
310 ErrorCode ConfigFeedbackCoefficient(double sensorCoefficient, const std::string& unitString, ctre::phoenix::sensors::SensorTimeBase sensortimeBase, int timeoutMs = 0);
311
324
337 ErrorCode ConfigSensorDirection(bool bSensorDirection, int timeoutMs = 0);
338
349
353 std::string GetLastUnitString();
354
359
374 ErrorCode ConfigSetCustomParam(int newValue, int paramIndex,
375 int timeoutMs = 0);
389 int ConfigGetCustomParam(int paramIndex,
390 int timeoutMs = 0);
391 //------ Generic Param API, typically not used ----------//
409 uint8_t subValue, int ordinal, int timeoutMs = 0);
424 double ConfigGetParameter(ParamEnum param, int ordinal, int timeoutMs = 0);
425
445 ErrorCode ConfigGetParameter(ParamEnum param, int32_t valueToSend,
446 int32_t& valueReceived, uint8_t& subValue, int32_t ordinal,
447 int32_t timeoutMs);
448
449
461 uint8_t periodMs, int timeoutMs = 0);
471 int GetStatusFramePeriod(CANCoderStatusFrame frame, int timeoutMs = 0);
509 ErrorCode ClearStickyFaults(int timeoutMs = 0);
510
511 //------ All Configs ----------//
532 ErrorCode GetAllConfigs(CANCoderConfiguration& allConfigs, int timeoutMs = 50);
542 ErrorCode ConfigFactoryDefault(int timeoutMs = 50);
543
548
549 private:
550 void* m_handle;
551 CANCoderSimCollection* _simCollection;
552
553 };// class CANCoder
554
555 } // namespace sensor
556 } // namespace phoenix
557} // namespace ctre
Definition: CANBusAddressable.h:8
Definition: CANCoder.h:169
ErrorCode SetPositionToAbsolute(int timeoutMs=0)
int GetStatusFramePeriod(CANCoderStatusFrame frame, int timeoutMs=0)
ErrorCode ConfigSensorInitializationStrategy(ctre::phoenix::sensors::SensorInitializationStrategy initializationStrategy, int timeoutMs=0)
ErrorCode ConfigSetParameter(ParamEnum param, double value, uint8_t subValue, int ordinal, int timeoutMs=0)
ErrorCode ConfigMagnetOffset(double offsetDegrees, int timeoutMs=0)
ErrorCode GetFaults(CANCoderFaults &toFill)
ErrorCode ConfigVelocityMeasurementWindow(int windowSize, int timeoutMs=0)
CANCoderSimCollection & GetSimCollection()
ErrorCode ClearStickyFaults(int timeoutMs=0)
ErrorCode ConfigVelocityMeasurementPeriod(SensorVelocityMeasPeriod period, int timeoutMs=0)
ctre::phoenix::sensors::MagnetFieldStrength GetMagnetFieldStrength()
int ConfigGetCustomParam(int paramIndex, int timeoutMs=0)
ErrorCode ConfigSetCustomParam(int newValue, int paramIndex, int timeoutMs=0)
ErrorCode ConfigFeedbackCoefficient(double sensorCoefficient, const std::string &unitString, ctre::phoenix::sensors::SensorTimeBase sensortimeBase, int timeoutMs=0)
ErrorCode GetStickyFaults(CANCoderStickyFaults &toFill)
ErrorCode ConfigSensorDirection(bool bSensorDirection, int timeoutMs=0)
CANCoder(int deviceNumber, std::string const &canbus="")
ErrorCode ConfigAbsoluteSensorRange(ctre::phoenix::sensors::AbsoluteSensorRange absoluteSensorRange, int timeoutMs=0)
ErrorCode SetStatusFramePeriod(CANCoderStatusFrame statusFrame, uint8_t periodMs, int timeoutMs=0)
ErrorCode SetPosition(double newPosition, int timeoutMs=0)
ErrorCode ConfigGetParameter(ParamEnum param, int32_t valueToSend, int32_t &valueReceived, uint8_t &subValue, int32_t ordinal, int32_t timeoutMs)
double ConfigGetParameter(ParamEnum param, int ordinal, int timeoutMs=0)
ErrorCode GetAllConfigs(CANCoderConfiguration &allConfigs, int timeoutMs=50)
ErrorCode ConfigFactoryDefault(int timeoutMs=50)
ctre::phoenix::ErrorCode ConfigAllSettings(const CANCoderConfiguration &allConfigs, int timeoutMs=50)
Definition: CANCoderSimCollection.h:23
static std::string toString(SensorVelocityMeasPeriod value)
Definition: SensorVelocityMeasPeriod.h:57
SensorInitializationStrategy
Definition: SensorInitializationStrategy.h:12
MagnetFieldStrength
Definition: MagnetFieldStrength.h:8
CANCoderStatusFrame
Definition: CANCoderStatusFrame.h:8
SensorTimeBase
Definition: SensorTimeBase.h:13
SensorVelocityMeasPeriod
Definition: SensorVelocityMeasPeriod.h:12
AbsoluteSensorRange
Definition: AbsoluteSensorRange.h:12
ParamEnum
Definition: paramEnum.h:12
ErrorCode
Definition: ErrorCode.h:12
Definition: ErrorCode.h:5
Definition: CustomParamConfiguration.h:52
Definition: CustomParamConfiguration.h:10
bool enableOptimizations
Definition: CustomParamConfiguration.h:22
std::string toString()
Definition: CustomParamConfiguration.h:33
static bool VelocityMeasurementPeriodDifferent(const CANCoderConfiguration &settings)
Definition: CANCoder.h:130
ctre::phoenix::sensors::AbsoluteSensorRange absoluteSensorRange
Definition: CANCoder.h:39
int velocityMeasurementWindow
Definition: CANCoder.h:33
ctre::phoenix::sensors::SensorTimeBase sensorTimeBase
Definition: CANCoder.h:79
double sensorCoefficient
Definition: CANCoder.h:67
std::string toString(std::string prependString)
Definition: CANCoder.h:98
bool sensorDirection
Definition: CANCoder.h:53
double magnetOffsetDegrees
Definition: CANCoder.h:46
SensorVelocityMeasPeriod velocityMeasurementPeriod
Definition: CANCoder.h:29
std::string toString()
Definition: CANCoder.h:89
ctre::phoenix::sensors::SensorInitializationStrategy initializationStrategy
Definition: CANCoder.h:63
std::string unitString
Definition: CANCoder.h:74
CANCoderConfiguration()
Definition: CANCoder.h:84
Definition: CANCoderFaults.h:10
Definition: CANCoderStickyFaults.h:10