CTRE_Phoenix 5.20.2
CANifier.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/CANifierControlFrame.h"
9#include "ctre/phoenix/CANifierStatusFrame.h"
10#include "ctre/phoenix/CANifierStickyFaults.h"
11#include "ctre/phoenix/CANifierFaults.h"
12#include "ctre/phoenix/sensors/SensorVelocityMeasPeriod.h"
13#include "ctre/phoenix/CANifierVelocityMeasPeriod.h"
14
15namespace ctre {namespace phoenix {
16
41
43 velocityMeasurementPeriod(ctre::phoenix::sensors::SensorVelocityMeasPeriod::Period_100Ms),
48 {
49 }
50
54 std::string toString() {
55 return toString("");
56 }
57
63 std::string toString(std::string prependString) {
64
65 std::string retstr = prependString + ".velocityMeasurementPeriod = " + ctre::phoenix::sensors::SensorVelocityMeasPeriodRoutines::toString(velocityMeasurementPeriod) + ";\n";
66 retstr += prependString + ".velocityMeasurementWindow = " + std::to_string(velocityMeasurementWindow) + ";\n";
67 retstr += prependString + ".clearPositionOnLimitF = " + std::to_string(clearPositionOnLimitF) + ";\n";
68 retstr += prependString + ".clearPositionOnLimitR = " + std::to_string(clearPositionOnLimitR) + ";\n";
69 retstr += prependString + ".clearPositionOnQuadIdx = " + std::to_string(clearPositionOnQuadIdx) + ";\n";
70
71 retstr += CustomParamConfiguration::toString(prependString);
72
73 return retstr;
74 }
75
76};// struct CANifierConfiguration
77
82private:
83 static CANifierConfiguration _default;
84public:
91 static bool VelocityMeasurementPeriodDifferent (const CANifierConfiguration & settings) { return (!(settings.velocityMeasurementPeriod == _default.velocityMeasurementPeriod)) || !settings.enableOptimizations; }
92 static bool VelocityMeasurementWindowDifferent (const CANifierConfiguration & settings) { return (!(settings.velocityMeasurementWindow == _default.velocityMeasurementWindow)) || !settings.enableOptimizations; }
93 static bool ClearPositionOnLimitFDifferent (const CANifierConfiguration & settings) { return (!(settings.clearPositionOnLimitF == _default.clearPositionOnLimitF)) || !settings.enableOptimizations; }
94 static bool ClearPositionOnLimitRDifferent (const CANifierConfiguration & settings) { return (!(settings.clearPositionOnLimitR == _default.clearPositionOnLimitR)) || !settings.enableOptimizations; }
95 static bool ClearPositionOnQuadIdxDifferent (const CANifierConfiguration & settings) { return (!(settings.clearPositionOnQuadIdx == _default.clearPositionOnQuadIdx)) || !settings.enableOptimizations; }
96 static bool CustomParam0Different (const CANifierConfiguration & settings) { return (!(settings.customParam0 == _default.customParam0)) || !settings.enableOptimizations; }
97 static bool CustomParam1Different (const CANifierConfiguration & settings) { return (!(settings.customParam1 == _default.customParam1)) || !settings.enableOptimizations; }
99};
100
101
108public:
125 };
126
147 };
148
152 const int PWMChannelCount = 4;
153
157 enum GeneralPin { //----- Must match CANifier_CCI enums -----//
173 LIMR = 3,
177 LIMF = 4,
181 SDA = 5,
185 SCL = 6,
202 };
203
207 struct PinValues {
215 bool QUAD_B;
219 bool QUAD_A;
223 bool LIMR;
227 bool LIMF;
231 bool SDA;
235 bool SCL;
252 };
253
258 CANifier(int deviceNumber);
259
260 ~CANifier();
261
265 static void DestroyAllCANifiers();
266
272 ErrorCode SetLEDOutput(double percentOutput, LEDChannel ledChannel);
279 ErrorCode SetGeneralOutput(GeneralPin outputPin, bool outputValue, bool outputEnable);
285 ErrorCode SetGeneralOutputs(int outputBits, int isOutputBits);
316 ErrorCode SetQuadraturePosition(int newPosition, int timeoutMs = 0);
330 ctre::phoenix::sensors::SensorVelocityMeasPeriod period, int timeoutMs = 0);
331
332 [[deprecated("Use the overload with SensorVelocityMeasPeriod instead")]]
334 CANifierVelocityMeasPeriod period, int timeoutMs = 0);
347 ErrorCode ConfigVelocityMeasurementWindow(int windowSize, int timeoutMs = 0);
358 ErrorCode ConfigClearPositionOnLimitF (bool clearPositionOnLimitF, int timeoutMs = 0);
369 ErrorCode ConfigClearPositionOnLimitR (bool clearPositionOnLimitR, int timeoutMs = 0);
380 ErrorCode ConfigClearPositionOnQuadIdx(bool clearPositionOnQuadIdx, int timeoutMs = 0);
403 ErrorCode SetPWMOutput(int pwmChannel, double dutyCycle);
410 ErrorCode EnablePWMOutput(int pwmChannel, bool bEnable);
416 ErrorCode GetPWMInput(PWMChannel pwmChannel, double pulseWidthAndPeriod[]);
417
418 //------ Custom Persistent Params ----------//
433 ErrorCode ConfigSetCustomParam(int newValue, int paramIndex,
434 int timeoutMs = 0);
448 int ConfigGetCustomParam(int paramIndex,
449 int timeoutMs = 0);
450 //------ Generic Param API, typically not used ----------//
468 uint8_t subValue, int ordinal, int timeoutMs = 0);
483 double ConfigGetParameter(ParamEnum param, int ordinal, int timeoutMs = 0);
484
504 ErrorCode ConfigGetParameter(ParamEnum param, int32_t valueToSend,
505 int32_t & valueReceived, uint8_t & subValue, int32_t ordinal,
506 int32_t timeoutMs);
507
508
520 uint8_t periodMs, int timeoutMs = 0);
530 int GetStatusFramePeriod(CANifierStatusFrame frame, int timeoutMs = 0);
576 ErrorCode ClearStickyFaults(int timeoutMs = 0);
577
578 //------ All Configs ----------//
598 void GetAllConfigs(CANifierConfiguration &allConfigs, int timeoutMs = 50);
608 ErrorCode ConfigFactoryDefault(int timeoutMs = 50);
609
610
611private:
612 void* m_handle;
613 bool _tempPins[11];
614};// class CANifier
615
616} // namespace phoenix
617} // namespace ctre
Definition: CANBusAddressable.h:8
Definition: CANifier.h:107
ErrorCode ConfigFactoryDefault(int timeoutMs=50)
GeneralPin
Definition: CANifier.h:157
@ SPI_MOSI_PWM1P
Definition: CANifier.h:197
@ LIMR
Definition: CANifier.h:173
@ QUAD_A
Definition: CANifier.h:169
@ LIMF
Definition: CANifier.h:177
@ SPI_CLK_PWM0P
Definition: CANifier.h:201
@ SPI_MISO_PWM2P
Definition: CANifier.h:193
@ SCL
Definition: CANifier.h:185
@ SDA
Definition: CANifier.h:181
@ SPI_CS
Definition: CANifier.h:189
@ QUAD_B
Definition: CANifier.h:165
@ QUAD_IDX
Definition: CANifier.h:161
bool GetGeneralInput(GeneralPin inputPin)
ErrorCode ConfigVelocityMeasurementWindow(int windowSize, int timeoutMs=0)
int GetStatusFramePeriod(CANifierStatusFrame frame, int timeoutMs=0)
ErrorCode GetFaults(CANifierFaults &toFill)
PWMChannel
Definition: CANifier.h:130
@ PWMChannel0
Definition: CANifier.h:134
@ PWMChannel3
Definition: CANifier.h:146
@ PWMChannel1
Definition: CANifier.h:138
@ PWMChannel2
Definition: CANifier.h:142
ctre::phoenix::ErrorCode ConfigAllSettings(const CANifierConfiguration &allConfigs, int timeoutMs=50)
ErrorCode ClearStickyFaults(int timeoutMs=0)
ErrorCode ConfigClearPositionOnQuadIdx(bool clearPositionOnQuadIdx, int timeoutMs=0)
ErrorCode ConfigSetParameter(ParamEnum param, double value, uint8_t subValue, int ordinal, int timeoutMs=0)
ErrorCode ConfigSetCustomParam(int newValue, int paramIndex, int timeoutMs=0)
CANifier(int deviceNumber)
ErrorCode ConfigClearPositionOnLimitR(bool clearPositionOnLimitR, int timeoutMs=0)
ErrorCode SetStatusFramePeriod(CANifierStatusFrame statusFrame, uint8_t periodMs, int timeoutMs=0)
double ConfigGetParameter(ParamEnum param, int ordinal, int timeoutMs=0)
LEDChannel
Definition: CANifier.h:112
@ LEDChannelC
Definition: CANifier.h:124
@ LEDChannelA
Definition: CANifier.h:116
@ LEDChannelB
Definition: CANifier.h:120
ErrorCode GetGeneralInputs(PinValues &allPins)
ErrorCode SetLEDOutput(double percentOutput, LEDChannel ledChannel)
const int PWMChannelCount
Definition: CANifier.h:152
ErrorCode SetPWMOutput(int pwmChannel, double dutyCycle)
ErrorCode SetGeneralOutput(GeneralPin outputPin, bool outputValue, bool outputEnable)
static void DestroyAllCANifiers()
ErrorCode ConfigClearPositionOnLimitF(bool clearPositionOnLimitF, int timeoutMs=0)
ErrorCode SetQuadraturePosition(int newPosition, int timeoutMs=0)
int ConfigGetCustomParam(int paramIndex, int timeoutMs=0)
ErrorCode SetGeneralOutputs(int outputBits, int isOutputBits)
ErrorCode ConfigGetParameter(ParamEnum param, int32_t valueToSend, int32_t &valueReceived, uint8_t &subValue, int32_t ordinal, int32_t timeoutMs)
ErrorCode ConfigVelocityMeasurementPeriod(ctre::phoenix::sensors::SensorVelocityMeasPeriod period, int timeoutMs=0)
ErrorCode GetStickyFaults(CANifierStickyFaults &toFill)
ErrorCode GetPWMInput(PWMChannel pwmChannel, double pulseWidthAndPeriod[])
void GetAllConfigs(CANifierConfiguration &allConfigs, int timeoutMs=50)
ErrorCode SetControlFramePeriod(CANifierControlFrame frame, int periodMs)
ErrorCode EnablePWMOutput(int pwmChannel, bool bEnable)
static std::string toString(SensorVelocityMeasPeriod value)
Definition: SensorVelocityMeasPeriod.h:57
SensorVelocityMeasPeriod
Definition: SensorVelocityMeasPeriod.h:12
CANifierStatusFrame
Definition: CANifierStatusFrame.h:7
ParamEnum
Definition: paramEnum.h:12
ErrorCode
Definition: ErrorCode.h:12
CANifierVelocityMeasPeriod
Definition: CANifierVelocityMeasPeriod.h:11
@ Period_100Ms
Definition: CANifierVelocityMeasPeriod.h:43
CANifierControlFrame
Definition: CANifierControlFrame.h:7
Definition: ErrorCode.h:5
Definition: CANifier.h:207
bool SPI_MOSI_PWM1
Definition: CANifier.h:247
bool LIMR
Definition: CANifier.h:223
bool SPI_CS_PWM3
Definition: CANifier.h:239
bool QUAD_IDX
Definition: CANifier.h:211
bool SPI_MISO_PWM2
Definition: CANifier.h:243
bool QUAD_B
Definition: CANifier.h:215
bool SCL
Definition: CANifier.h:235
bool SPI_CLK_PWM0
Definition: CANifier.h:251
bool QUAD_A
Definition: CANifier.h:219
bool LIMF
Definition: CANifier.h:227
bool SDA
Definition: CANifier.h:231
Definition: CANifier.h:81
static bool VelocityMeasurementPeriodDifferent(const CANifierConfiguration &settings)
Definition: CANifier.h:91
Definition: CANifier.h:20
bool clearPositionOnLimitF
Definition: CANifier.h:32
bool clearPositionOnLimitR
Definition: CANifier.h:36
bool clearPositionOnQuadIdx
Definition: CANifier.h:40
ctre::phoenix::sensors::SensorVelocityMeasPeriod velocityMeasurementPeriod
Definition: CANifier.h:24
int velocityMeasurementWindow
Definition: CANifier.h:28
std::string toString()
Definition: CANifier.h:54
std::string toString(std::string prependString)
Definition: CANifier.h:63
Definition: CANifierFaults.h:9
Definition: CANifierStickyFaults.h:9
Definition: CustomParamConfiguration.h:10
int customParam1
Definition: CustomParamConfiguration.h:18
bool enableOptimizations
Definition: CustomParamConfiguration.h:22
int customParam0
Definition: CustomParamConfiguration.h:14
std::string toString()
Definition: CustomParamConfiguration.h:33