diff --git a/hal/lib/Athena/ctre/CanTalonSRX.cpp b/hal/lib/Athena/ctre/CanTalonSRX.cpp index 039ecc38de..3c91eeff17 100644 --- a/hal/lib/Athena/ctre/CanTalonSRX.cpp +++ b/hal/lib/Athena/ctre/CanTalonSRX.cpp @@ -242,6 +242,11 @@ typedef struct _TALON_Param_Response_t { CanTalonSRX::CanTalonSRX(int deviceNumber,int controlPeriodMs): CtreCanNode(deviceNumber), _can_h(0), _can_stat(0) { + /* bound period to be within [1 ms,95 ms] */ + if(controlPeriodMs < 1) + controlPeriodMs = 1; + else if(controlPeriodMs > 95) + controlPeriodMs = 95; RegisterRx(STATUS_1 | (UINT8)deviceNumber ); RegisterRx(STATUS_2 | (UINT8)deviceNumber ); RegisterRx(STATUS_3 | (UINT8)deviceNumber ); diff --git a/wpilibc/wpilibC++Devices/include/CANTalon.h b/wpilibc/wpilibC++Devices/include/CANTalon.h index 467b758d29..bafeb661e5 100644 --- a/wpilibc/wpilibC++Devices/include/CANTalon.h +++ b/wpilibc/wpilibC++Devices/include/CANTalon.h @@ -28,6 +28,7 @@ public: EncFalling=5 }; explicit CANTalon(int deviceNumber); + explicit CANTalon(int deviceNumber,int controlPeriodMs); virtual ~CANTalon(); // PIDController interface diff --git a/wpilibc/wpilibC++Devices/src/CANTalon.cpp b/wpilibc/wpilibC++Devices/src/CANTalon.cpp index cf09f95e69..a377e48fe4 100644 --- a/wpilibc/wpilibC++Devices/src/CANTalon.cpp +++ b/wpilibc/wpilibC++Devices/src/CANTalon.cpp @@ -24,7 +24,24 @@ CANTalon::CANTalon(int deviceNumber) SetControlMode(m_controlMode); m_impl->SetProfileSlotSelect(m_profile); } - +/** + * Constructor for the CANTalon device. + * @param deviceNumber The CAN ID of the Talon SRX + * @param controlPeriodMs The period in ms to send the CAN control frame. + * Period is bounded to [1ms, 95ms]. + */ +CANTalon::CANTalon(int deviceNumber,int controlPeriodMs) + : m_deviceNumber(deviceNumber) + , m_impl(new CanTalonSRX(deviceNumber,controlPeriodMs)) /* bounded underneath to be within [1 ms,95 ms] */ + , m_safetyHelper(new MotorSafetyHelper(this)) + , m_profile(0) + , m_controlEnabled(true) + , m_controlMode(kPercentVbus) + , m_setPoint(0) +{ + SetControlMode(m_controlMode); + m_impl->SetProfileSlotSelect(m_profile); +} CANTalon::~CANTalon() { delete m_impl; delete m_safetyHelper; diff --git a/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/CANTalon.java b/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/CANTalon.java index 276747dcb9..dd256c6ab1 100644 --- a/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/CANTalon.java +++ b/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/CANTalon.java @@ -76,6 +76,16 @@ public class CANTalon implements MotorSafety, PIDOutput, SpeedController { setProfile(m_profile); changeControlMode(ControlMode.PercentVbus); } + public CANTalon(int deviceNumber,int controlPeriodMs) { + m_deviceNumber = deviceNumber; + m_impl = new CanTalonSRX(deviceNumber,controlPeriodMs); /* bound period to be within [1 ms,95 ms] */ + m_safetyHelper = new MotorSafetyHelper(this); + m_controlEnabled = true; + m_profile = 0; + m_setPoint = 0; + setProfile(m_profile); + changeControlMode(ControlMode.PercentVbus); + } @Override public void pidWrite(double output)