From 8b8d7e77cd4deaee2de3bdbf90e7c92d1f58cf0f Mon Sep 17 00:00:00 2001 From: Omar Zrien Date: Wed, 17 Dec 2014 18:35:00 -0500 Subject: [PATCH] C++ CANTalon was missing SetIzone. Added SetIzone to match java, and made the set/get Izone integral. Change-Id: I264ac8faaab0ebd208062923f6da2094e7e28b0a --- wpilibc/wpilibC++Devices/include/CANTalon.h | 3 ++- wpilibc/wpilibC++Devices/src/CANTalon.cpp | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/wpilibc/wpilibC++Devices/include/CANTalon.h b/wpilibc/wpilibC++Devices/include/CANTalon.h index bafeb661e5..838556dd6c 100644 --- a/wpilibc/wpilibC++Devices/include/CANTalon.h +++ b/wpilibc/wpilibC++Devices/include/CANTalon.h @@ -52,6 +52,7 @@ public: virtual void SetI(double i) override; virtual void SetD(double d) override; void SetF(double f); + void SetIzone(unsigned iz); virtual void SetPID(double p, double i, double d) override; void SetPID(double p, double i, double d, double f); virtual double GetP() override; @@ -100,7 +101,7 @@ public: void SetSensorDirection(bool reverseSensor); void SetCloseLoopRampRate(double rampRate); void SelectProfileSlot(int slotIdx); - double GetIzone(); + int GetIzone(); int GetIaccum(); void ClearIaccum(); diff --git a/wpilibc/wpilibC++Devices/src/CANTalon.cpp b/wpilibc/wpilibC++Devices/src/CANTalon.cpp index a377e48fe4..01a0185a40 100644 --- a/wpilibc/wpilibC++Devices/src/CANTalon.cpp +++ b/wpilibc/wpilibC++Devices/src/CANTalon.cpp @@ -220,6 +220,19 @@ void CANTalon::SetF(double f) wpi_setErrorWithContext(status, getHALErrorMessage(status)); } } +/** + * Set the Izone to a nonzero value to auto clear the integral accumulator + * when the absolute value of CloseLoopError exceeds Izone. + * + * @see SelectProfileSlot to choose between the two sets of gains. + */ +void CANTalon::SetIzone(unsigned iz) +{ + CTR_Code status = m_impl->SetIzone(m_profile, iz); + if(status != CTR_OKAY) { + wpi_setErrorWithContext(status, getHALErrorMessage(status)); + } +} /** * SRX has two available slots for PID. * @param slotIdx one or zero depending on which slot caller wants. @@ -349,7 +362,7 @@ double CANTalon::GetF() /** * @see SelectProfileSlot to choose between the two sets of gains. */ -double CANTalon::GetIzone() +int CANTalon::GetIzone() { CanTalonSRX::param_t param = m_profile ? CanTalonSRX::eProfileParamSlot1_IZone: CanTalonSRX::eProfileParamSlot0_IZone; // Update the info in m_impl. @@ -364,7 +377,7 @@ double CANTalon::GetIzone() if(status != CTR_OKAY) { wpi_setErrorWithContext(status, getHALErrorMessage(status)); } - return (double)iz; + return iz; } /**