11 #include "ErrorBase.h"
12 #include "MotorSafety.h"
13 #include "MotorSafetyHelper.h"
14 #include "PIDOutput.h"
15 #include "SpeedController.h"
18 #include "LiveWindow/LiveWindowSendable.h"
19 #include "tables/ITable.h"
32 static const int32_t kControllerRate = 1000;
33 static constexpr
double kApproxBusVoltage = 12.0;
35 typedef enum {kPercentVbus, kCurrent, kSpeed, kPosition, kVoltage} ControlMode;
36 typedef enum {kCurrentFault = 1, kTemperatureFault = 2, kBusVoltageFault = 4, kGateDriverFault = 8} Faults;
37 typedef enum {kForwardLimit = 1, kReverseLimit = 2} Limits;
38 typedef enum {kPosRef_QuadEncoder = 0, kPosRef_Potentiometer = 1, kPosRef_None = 0xFF} PositionReference;
39 typedef enum {kSpeedRef_Encoder = 0, kSpeedRef_InvEncoder = 2, kSpeedRef_QuadEncoder = 3, kSpeedRef_None = 0xFF} SpeedReference;
40 typedef enum {kNeutralMode_Jumper = 0, kNeutralMode_Brake = 1, kNeutralMode_Coast = 2} NeutralMode;
41 typedef enum {kLimitMode_SwitchInputsOnly = 0, kLimitMode_SoftPositionLimits = 1} LimitMode;
43 explicit CANJaguar(uint8_t deviceNumber, ControlMode controlMode = kPercentVbus);
48 virtual void Set(
float value, uint8_t syncGroup=0);
59 void SetPID(
double p,
double i,
double d);
90 void SetExpiration(
float timeout);
91 float GetExpiration();
94 bool IsSafetyEnabled();
95 void SetSafetyEnabled(
bool enabled);
96 void GetDescription(
char *desc);
99 uint8_t packPercentage(uint8_t *buffer,
double value);
100 uint8_t packFXP8_8(uint8_t *buffer,
double value);
101 uint8_t packFXP16_16(uint8_t *buffer,
double value);
102 uint8_t packint16_t(uint8_t *buffer, int16_t value);
103 uint8_t packint32_t(uint8_t *buffer, int32_t value);
104 double unpackPercentage(uint8_t *buffer);
105 double unpackFXP8_8(uint8_t *buffer);
106 double unpackFXP16_16(uint8_t *buffer);
107 int16_t unpackint16_t(uint8_t *buffer);
108 int32_t unpackint32_t(uint8_t *buffer);
109 virtual void setTransaction(uint32_t messageID,
const uint8_t *data, uint8_t dataSize);
110 virtual void getTransaction(uint32_t messageID, uint8_t *data, uint8_t *dataSize);
112 static int32_t
sendMessage(uint32_t messageID,
const uint8_t *data, uint8_t dataSize);
113 static int32_t
receiveMessage(uint32_t *messageID, uint8_t *data, uint8_t *dataSize,
float timeout = 0.02);
115 uint8_t m_deviceNumber;
116 ControlMode m_controlMode;
117 SEM_ID m_transactionSemaphore;
118 double m_maxOutputVoltage;
133 void InitCANJaguar();
void SetSpeedReference(SpeedReference reference)
void InitTable(ITable *subTable)
void ConfigFaultTime(float faultTime)
void SetPID(double p, double i, double d)
void ValueChanged(ITable *source, const std::string &key, EntryValue value, bool isNew)
static int32_t sendMessage(uint32_t messageID, const uint8_t *data, uint8_t dataSize)
void ConfigNeutralMode(NeutralMode mode)
void ConfigPotentiometerTurns(uint16_t turns)
void SetVoltageRampRate(double rampRate)
virtual void getTransaction(uint32_t messageID, uint8_t *data, uint8_t *dataSize)
SpeedReference GetSpeedReference()
void ConfigMaxOutputVoltage(double voltage)
void ConfigSoftPositionLimits(double forwardLimitPosition, double reverseLimitPosition)
void SetPositionReference(PositionReference reference)
void StopLiveWindowMode()
CANJaguar(uint8_t deviceNumber, ControlMode controlMode=kPercentVbus)
ControlMode GetControlMode()
static int32_t receiveMessage(uint32_t *messageID, uint8_t *data, uint8_t *dataSize, float timeout=0.02)
virtual void Set(float value, uint8_t syncGroup=0)
void ChangeControlMode(ControlMode controlMode)
virtual void PIDWrite(float output)
void ConfigEncoderCodesPerRev(uint16_t codesPerRev)
virtual void setTransaction(uint32_t messageID, const uint8_t *data, uint8_t dataSize)
virtual uint32_t GetFirmwareVersion()
uint8_t GetHardwareVersion()
std::string GetSmartDashboardType()
PositionReference GetPositionReference()
void StartLiveWindowMode()
static void UpdateSyncGroup(uint8_t syncGroup)
void EnableControl(double encoderInitialPosition=0.0)
void DisableSoftPositionLimits()