From 7ae8c7b247adcb813c9add90aae0c55c5e5436af Mon Sep 17 00:00:00 2001 From: Tyler Veness Date: Sat, 24 Oct 2020 20:18:58 -0700 Subject: [PATCH] [sim] Use DutyCycleEncoder FPGA index for sim device number (#2803) The source channel doesn't necessarily correspond with the HALSIM device index. --- wpilibc/src/main/native/cpp/DutyCycleEncoder.cpp | 4 ++++ .../main/native/cpp/simulation/DutyCycleEncoderSim.cpp | 2 +- wpilibc/src/main/native/include/frc/DutyCycleEncoder.h | 7 +++++++ .../java/edu/wpi/first/wpilibj/DutyCycleEncoder.java | 10 ++++++++++ .../first/wpilibj/simulation/DutyCycleEncoderSim.java | 2 +- 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/wpilibc/src/main/native/cpp/DutyCycleEncoder.cpp b/wpilibc/src/main/native/cpp/DutyCycleEncoder.cpp index 2028a9f27d..4fc5457b54 100644 --- a/wpilibc/src/main/native/cpp/DutyCycleEncoder.cpp +++ b/wpilibc/src/main/native/cpp/DutyCycleEncoder.cpp @@ -132,6 +132,10 @@ void DutyCycleEncoder::SetConnectedFrequencyThreshold(int frequency) { m_frequencyThreshold = frequency; } +int DutyCycleEncoder::GetFPGAIndex() const { + return m_dutyCycle->GetFPGAIndex(); +} + int DutyCycleEncoder::GetSourceChannel() const { return m_dutyCycle->GetSourceChannel(); } diff --git a/wpilibc/src/main/native/cpp/simulation/DutyCycleEncoderSim.cpp b/wpilibc/src/main/native/cpp/simulation/DutyCycleEncoderSim.cpp index dd1c6c3cba..b12f00a59c 100644 --- a/wpilibc/src/main/native/cpp/simulation/DutyCycleEncoderSim.cpp +++ b/wpilibc/src/main/native/cpp/simulation/DutyCycleEncoderSim.cpp @@ -18,7 +18,7 @@ using namespace frc::sim; DutyCycleEncoderSim::DutyCycleEncoderSim(const frc::DutyCycleEncoder& encoder) { wpi::SmallString<128> fullname; wpi::raw_svector_ostream os(fullname); - os << "DutyCycleEncoder" << '[' << encoder.GetSourceChannel() << ']'; + os << "DutyCycleEncoder" << '[' << encoder.GetFPGAIndex() << ']'; frc::sim::SimDeviceSim deviceSim{fullname.c_str()}; m_simPosition = deviceSim.GetDouble("Position"); m_simDistancePerRotation = deviceSim.GetDouble("DistancePerRotation"); diff --git a/wpilibc/src/main/native/include/frc/DutyCycleEncoder.h b/wpilibc/src/main/native/include/frc/DutyCycleEncoder.h index e9d4f44bb2..17b038fe17 100644 --- a/wpilibc/src/main/native/include/frc/DutyCycleEncoder.h +++ b/wpilibc/src/main/native/include/frc/DutyCycleEncoder.h @@ -154,6 +154,13 @@ class DutyCycleEncoder : public ErrorBase, */ double GetDistance() const; + /** + * Get the FPGA index for the DutyCycleEncoder. + * + * @return the FPGA index + */ + int GetFPGAIndex() const; + /** * Get the channel of the source. * diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/DutyCycleEncoder.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/DutyCycleEncoder.java index dc6d5c7152..f5bba5eeca 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/DutyCycleEncoder.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/DutyCycleEncoder.java @@ -236,6 +236,16 @@ public class DutyCycleEncoder implements Sendable, AutoCloseable { } } + /** + * Get the FPGA index for the DutyCycleEncoder. + * + * @return the FPGA index + */ + @SuppressWarnings("AbbreviationAsWordInName") + public int getFPGAIndex() { + return m_dutyCycle.getFPGAIndex(); + } + /** * Get the channel of the source. * diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/DutyCycleEncoderSim.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/DutyCycleEncoderSim.java index c7842f16b1..92b08830ef 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/DutyCycleEncoderSim.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/DutyCycleEncoderSim.java @@ -23,7 +23,7 @@ public class DutyCycleEncoderSim { * @param encoder DutyCycleEncoder to simulate */ public DutyCycleEncoderSim(DutyCycleEncoder encoder) { - SimDeviceSim wrappedSimDevice = new SimDeviceSim("DutyCycleEncoder" + "[" + encoder.getSourceChannel() + "]"); + SimDeviceSim wrappedSimDevice = new SimDeviceSim("DutyCycleEncoder" + "[" + encoder.getFPGAIndex() + "]"); m_simPosition = wrappedSimDevice.getDouble("Position"); m_simDistancePerRotation = wrappedSimDevice.getDouble("DistancePerRotation"); }