diff --git a/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXL345_I2CAccelerometerData.cpp b/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXL345_I2CAccelerometerData.cpp index 3b20074408..f0650db5d6 100644 --- a/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXL345_I2CAccelerometerData.cpp +++ b/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXL345_I2CAccelerometerData.cpp @@ -40,6 +40,10 @@ ADXL345_I2CData::~ADXL345_I2CData() { HALSIM_CancelI2CWriteCallback(m_port, m_writeCallbackId); } +bool ADXL345_I2CData::GetInitialized() const { + return HALSIM_GetI2CInitialized(m_port); +} + void ADXL345_I2CData::ADXL345_I2CData::HandleWrite(const uint8_t* buffer, uint32_t count) { m_lastWriteAddress = buffer[0]; diff --git a/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXL345_SpiAccelerometerData.cpp b/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXL345_SpiAccelerometerData.cpp index 7acc7763ab..e60f4a78d1 100644 --- a/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXL345_SpiAccelerometerData.cpp +++ b/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXL345_SpiAccelerometerData.cpp @@ -40,6 +40,10 @@ ADXL345_SpiAccelerometer::~ADXL345_SpiAccelerometer() { HALSIM_CancelSPIWriteCallback(m_port, m_writeCallbackId); } +bool ADXL345_SpiAccelerometer::GetInitialized() const { + return HALSIM_GetSPIInitialized(m_port); +} + void ADXL345_SpiAccelerometer::HandleWrite(const uint8_t* buffer, uint32_t count) { m_lastWriteAddress = buffer[0] & 0xF; diff --git a/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXL362_SpiAccelerometerData.cpp b/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXL362_SpiAccelerometerData.cpp index e6411f5a83..306be89759 100644 --- a/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXL362_SpiAccelerometerData.cpp +++ b/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXL362_SpiAccelerometerData.cpp @@ -39,6 +39,9 @@ ADXL362_SpiAccelerometer::~ADXL362_SpiAccelerometer() { HALSIM_CancelSPIReadCallback(m_port, m_readCallbackId); HALSIM_CancelSPIWriteCallback(m_port, m_writeCallbackId); } +bool ADXL362_SpiAccelerometer::GetInitialized() const { + return HALSIM_GetSPIInitialized(m_port); +} void ADXL362_SpiAccelerometer::HandleWrite(const uint8_t* buffer, uint32_t count) { diff --git a/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXRS450_SpiGyroWrapperData.cpp b/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXRS450_SpiGyroWrapperData.cpp index b0dea57fdc..d29c1482bc 100644 --- a/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXRS450_SpiGyroWrapperData.cpp +++ b/simulation/halsim_adx_gyro_accelerometer/src/main/native/cpp/ADXRS450_SpiGyroWrapperData.cpp @@ -57,6 +57,9 @@ ADXRS450_SpiGyroWrapper::~ADXRS450_SpiGyroWrapper() { HALSIM_CancelSPIReadAutoReceivedDataCallback(m_port, m_autoReceiveReadCallbackId); } +bool ADXRS450_SpiGyroWrapper::GetInitialized() const { + return HALSIM_GetSPIInitialized(m_port); +} void ADXRS450_SpiGyroWrapper::ResetData() { std::lock_guard lock(m_dataMutex); diff --git a/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXL345_I2CAccelerometerData.h b/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXL345_I2CAccelerometerData.h index ad150b96af..a08e9f2044 100644 --- a/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXL345_I2CAccelerometerData.h +++ b/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXL345_I2CAccelerometerData.h @@ -15,6 +15,8 @@ class ADXL345_I2CData : public ThreeAxisAccelerometerData { explicit ADXL345_I2CData(int port); virtual ~ADXL345_I2CData(); + bool GetInitialized() const override; + void HandleWrite(const uint8_t* buffer, uint32_t count); void HandleRead(uint8_t* buffer, uint32_t count); diff --git a/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXL345_SpiAccelerometerData.h b/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXL345_SpiAccelerometerData.h index 481136a12a..23140cb414 100644 --- a/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXL345_SpiAccelerometerData.h +++ b/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXL345_SpiAccelerometerData.h @@ -15,6 +15,8 @@ class ADXL345_SpiAccelerometer : public ThreeAxisAccelerometerData { explicit ADXL345_SpiAccelerometer(int port); virtual ~ADXL345_SpiAccelerometer(); + bool GetInitialized() const override; + void HandleWrite(const uint8_t* buffer, uint32_t count); void HandleRead(uint8_t* buffer, uint32_t count); diff --git a/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXL362_SpiAccelerometerData.h b/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXL362_SpiAccelerometerData.h index ecae58f865..258efb8f2d 100644 --- a/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXL362_SpiAccelerometerData.h +++ b/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXL362_SpiAccelerometerData.h @@ -15,6 +15,8 @@ class ADXL362_SpiAccelerometer : public ThreeAxisAccelerometerData { explicit ADXL362_SpiAccelerometer(int port); virtual ~ADXL362_SpiAccelerometer(); + bool GetInitialized() const override; + void HandleWrite(const uint8_t* buffer, uint32_t count); void HandleRead(uint8_t* buffer, uint32_t count); diff --git a/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXRS450_SpiGyroWrapperData.h b/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXRS450_SpiGyroWrapperData.h index 76b69bf4a3..abb1bc5067 100644 --- a/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXRS450_SpiGyroWrapperData.h +++ b/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ADXRS450_SpiGyroWrapperData.h @@ -19,6 +19,8 @@ class ADXRS450_SpiGyroWrapper { explicit ADXRS450_SpiGyroWrapper(int port); virtual ~ADXRS450_SpiGyroWrapper(); + bool GetInitialized() const; + void HandleRead(uint8_t* buffer, uint32_t count); void HandleAutoReceiveData(uint8_t* buffer, int32_t numToRead, int32_t& outputCount); diff --git a/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ThreeAxisAccelerometerData.h b/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ThreeAxisAccelerometerData.h index 5734ff4e34..e7612cd9aa 100644 --- a/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ThreeAxisAccelerometerData.h +++ b/simulation/halsim_adx_gyro_accelerometer/src/main/native/include/ThreeAxisAccelerometerData.h @@ -19,6 +19,8 @@ class ThreeAxisAccelerometerData { ThreeAxisAccelerometerData(); virtual ~ThreeAxisAccelerometerData(); + virtual bool GetInitialized() const = 0; + int32_t RegisterXCallback(HAL_NotifyCallback callback, void* param, HAL_Bool initialNotify); void CancelXCallback(int32_t uid); diff --git a/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/SimulatorComponentBase.cpp b/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/SimulatorComponentBase.cpp new file mode 100644 index 0000000000..a65de3b323 --- /dev/null +++ b/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/SimulatorComponentBase.cpp @@ -0,0 +1,24 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2018 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "lowfisim/SimulatorComponentBase.h" + +namespace frc { +namespace sim { +namespace lowfi { + +const std::string& SimulatorComponentBase::GetDisplayName() const { + return m_name; +} + +void SimulatorComponentBase::SetDisplayName(const std::string& displayName) { + m_name = displayName; +} + +} // namespace lowfi +} // namespace sim +} // namespace frc diff --git a/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/ADXLThreeAxisAccelerometerSim.cpp b/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/ADXLThreeAxisAccelerometerSim.cpp index 50ed3361e8..5f5c87fd90 100644 --- a/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/ADXLThreeAxisAccelerometerSim.cpp +++ b/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/ADXLThreeAxisAccelerometerSim.cpp @@ -14,21 +14,30 @@ namespace lowfi { ADXLThreeAxisAccelerometerSim::ADXLThreeAxisAccelerometerSim( hal::ThreeAxisAccelerometerData& accelerometerWrapper) : m_accelerometerWrapper(accelerometerWrapper), - m_xWrapper(std::function( + m_xWrapper(std::function( + std::bind(&hal::ThreeAxisAccelerometerData::GetInitialized, + &m_accelerometerWrapper)), + std::function( std::bind(&hal::ThreeAxisAccelerometerData::SetX, &m_accelerometerWrapper, std::placeholders::_1)), std::function( std::bind(&hal::ThreeAxisAccelerometerData::GetX, &m_accelerometerWrapper))), - m_yWrapper(std::function( + m_yWrapper(std::function( + std::bind(&hal::ThreeAxisAccelerometerData::GetInitialized, + &m_accelerometerWrapper)), + std::function( std::bind(&hal::ThreeAxisAccelerometerData::SetY, &m_accelerometerWrapper, std::placeholders::_1)), std::function( std::bind(&hal::ThreeAxisAccelerometerData::GetY, &m_accelerometerWrapper))), - m_zWrapper(std::function( + m_zWrapper(std::function( + std::bind(&hal::ThreeAxisAccelerometerData::GetInitialized, + &m_accelerometerWrapper)), + std::function( std::bind(&hal::ThreeAxisAccelerometerData::SetZ, &m_accelerometerWrapper, std::placeholders::_1)), std::function( diff --git a/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/ADXRS450_SpiGyroSim.cpp b/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/ADXRS450_SpiGyroSim.cpp index 1f02a41a74..b1daf17a59 100644 --- a/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/ADXRS450_SpiGyroSim.cpp +++ b/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/ADXRS450_SpiGyroSim.cpp @@ -14,6 +14,10 @@ namespace lowfi { ADXRS450_SpiGyroSim::ADXRS450_SpiGyroSim(int spiPort) : m_gyroWrapper(spiPort) {} +bool ADXRS450_SpiGyroSim::IsWrapperInitialized() const { + return m_gyroWrapper.GetInitialized(); +} + void ADXRS450_SpiGyroSim::SetAngle(double angle) { m_gyroWrapper.SetAngle(angle); } diff --git a/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/WpiAnalogGyroSim.cpp b/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/WpiAnalogGyroSim.cpp index b31e011c2d..63619cc3c4 100644 --- a/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/WpiAnalogGyroSim.cpp +++ b/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/WpiAnalogGyroSim.cpp @@ -13,6 +13,10 @@ namespace lowfi { WpiAnalogGyroSim::WpiAnalogGyroSim(int index) : m_gyroSimulator(index) {} +bool WpiAnalogGyroSim::IsWrapperInitialized() const { + return m_gyroSimulator.GetInitialized(); +} + void WpiAnalogGyroSim::SetAngle(double angle) { m_gyroSimulator.SetAngle(angle); } diff --git a/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/WpiEncoderSim.cpp b/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/WpiEncoderSim.cpp index 48a6455df9..7425efe619 100644 --- a/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/WpiEncoderSim.cpp +++ b/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/WpiEncoderSim.cpp @@ -13,6 +13,10 @@ namespace lowfi { WpiEncoderSim::WpiEncoderSim(int index) : m_encoderSimulator(index) {} +bool WpiEncoderSim::IsWrapperInitialized() const { + return m_encoderSimulator.GetInitialized(); +} + void WpiEncoderSim::SetPosition(double position) { m_encoderSimulator.SetCount( static_cast(position / m_encoderSimulator.GetDistancePerPulse())); diff --git a/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/WpiMotorSim.cpp b/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/WpiMotorSim.cpp index fa63a1f83d..0b08cf2335 100644 --- a/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/WpiMotorSim.cpp +++ b/simulation/lowfi_simulation/src/main/native/cpp/lowfisim/wpisimulators/WpiMotorSim.cpp @@ -20,6 +20,10 @@ void WpiMotorSim::Update(double elapsedTime) { m_motorModelSimulation.Update(elapsedTime); } +bool WpiMotorSim::IsWrapperInitialized() const { + return m_pwmSimulator.GetInitialized(); +} + double WpiMotorSim::GetPosition() const { return m_motorModelSimulation.GetPosition(); } diff --git a/simulation/lowfi_simulation/src/main/native/include/lowfisim/AccelerometerSim.h b/simulation/lowfi_simulation/src/main/native/include/lowfisim/AccelerometerSim.h index 17b16f39a7..fc9a456f48 100644 --- a/simulation/lowfi_simulation/src/main/native/include/lowfisim/AccelerometerSim.h +++ b/simulation/lowfi_simulation/src/main/native/include/lowfisim/AccelerometerSim.h @@ -7,11 +7,13 @@ #pragma once +#include "lowfisim/SimulatorComponent.h" + namespace frc { namespace sim { namespace lowfi { -class AccelerometerSim { +class AccelerometerSim : public virtual SimulatorComponent { public: virtual double GetAcceleration() = 0; virtual void SetAcceleration(double acceleration) = 0; diff --git a/simulation/lowfi_simulation/src/main/native/include/lowfisim/EncoderSim.h b/simulation/lowfi_simulation/src/main/native/include/lowfisim/EncoderSim.h index b17aff413c..a16f94ce23 100644 --- a/simulation/lowfi_simulation/src/main/native/include/lowfisim/EncoderSim.h +++ b/simulation/lowfi_simulation/src/main/native/include/lowfisim/EncoderSim.h @@ -7,11 +7,13 @@ #pragma once +#include "lowfisim/SimulatorComponent.h" + namespace frc { namespace sim { namespace lowfi { -class EncoderSim { +class EncoderSim : public virtual SimulatorComponent { public: virtual void SetPosition(double position) = 0; virtual void SetVelocity(double velocity) = 0; diff --git a/simulation/lowfi_simulation/src/main/native/include/lowfisim/GyroSim.h b/simulation/lowfi_simulation/src/main/native/include/lowfisim/GyroSim.h index 41a44c4eac..dcaa28ff06 100644 --- a/simulation/lowfi_simulation/src/main/native/include/lowfisim/GyroSim.h +++ b/simulation/lowfi_simulation/src/main/native/include/lowfisim/GyroSim.h @@ -7,11 +7,13 @@ #pragma once +#include "lowfisim/SimulatorComponent.h" + namespace frc { namespace sim { namespace lowfi { -class GyroSim { +class GyroSim : public virtual SimulatorComponent { public: virtual void SetAngle(double angle) = 0; virtual double GetAngle() = 0; diff --git a/simulation/lowfi_simulation/src/main/native/include/lowfisim/MotorSim.h b/simulation/lowfi_simulation/src/main/native/include/lowfisim/MotorSim.h index 0be2fa2723..e88004878c 100644 --- a/simulation/lowfi_simulation/src/main/native/include/lowfisim/MotorSim.h +++ b/simulation/lowfi_simulation/src/main/native/include/lowfisim/MotorSim.h @@ -7,11 +7,13 @@ #pragma once +#include "lowfisim/SimulatorComponent.h" + namespace frc { namespace sim { namespace lowfi { -class MotorSim { +class MotorSim : public virtual SimulatorComponent { public: virtual double GetPosition() const = 0; virtual double GetVelocity() const = 0; diff --git a/simulation/lowfi_simulation/src/main/native/include/lowfisim/SimpleAccelerometerSim.h b/simulation/lowfi_simulation/src/main/native/include/lowfisim/SimpleAccelerometerSim.h index 9c8ef09078..4c10cfe8cd 100644 --- a/simulation/lowfi_simulation/src/main/native/include/lowfisim/SimpleAccelerometerSim.h +++ b/simulation/lowfi_simulation/src/main/native/include/lowfisim/SimpleAccelerometerSim.h @@ -10,16 +10,22 @@ #include #include "lowfisim/AccelerometerSim.h" +#include "lowfisim/SimulatorComponentBase.h" namespace frc { namespace sim { namespace lowfi { -class SimpleAccelerometerSim : public AccelerometerSim { +class SimpleAccelerometerSim : public SimulatorComponentBase, + public AccelerometerSim { public: - SimpleAccelerometerSim(const std::function& setterFunction, + using SimulatorComponentBase::GetDisplayName; + + SimpleAccelerometerSim(const std::function& initializedFunction, + const std::function& setterFunction, const std::function& getterFunction) - : m_setAccelerationFunction(setterFunction), + : m_isInitializedFunction(initializedFunction), + m_setAccelerationFunction(setterFunction), m_getAccelerationFunction(getterFunction) {} double GetAcceleration() override { return m_getAccelerationFunction(); } @@ -27,7 +33,12 @@ class SimpleAccelerometerSim : public AccelerometerSim { m_setAccelerationFunction(acceleration); } + bool IsWrapperInitialized() const override { + return m_isInitializedFunction(); + } + private: + std::function m_isInitializedFunction; std::function m_setAccelerationFunction; std::function m_getAccelerationFunction; }; diff --git a/simulation/lowfi_simulation/src/main/native/include/lowfisim/SimulatorComponent.h b/simulation/lowfi_simulation/src/main/native/include/lowfisim/SimulatorComponent.h new file mode 100644 index 0000000000..4eb5e995be --- /dev/null +++ b/simulation/lowfi_simulation/src/main/native/include/lowfisim/SimulatorComponent.h @@ -0,0 +1,29 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2018 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#pragma once + +#include + +namespace frc { +namespace sim { +namespace lowfi { + +class SimulatorComponent { + public: + virtual ~SimulatorComponent() = default; + + virtual bool IsWrapperInitialized() const = 0; + + virtual const std::string& GetDisplayName() const = 0; + + virtual void SetDisplayName(const std::string& displayName) = 0; +}; + +} // namespace lowfi +} // namespace sim +} // namespace frc diff --git a/simulation/lowfi_simulation/src/main/native/include/lowfisim/SimulatorComponentBase.h b/simulation/lowfi_simulation/src/main/native/include/lowfisim/SimulatorComponentBase.h new file mode 100644 index 0000000000..c29e68c410 --- /dev/null +++ b/simulation/lowfi_simulation/src/main/native/include/lowfisim/SimulatorComponentBase.h @@ -0,0 +1,33 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2018 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#pragma once + +#include + +#include "lowfisim/SimulatorComponent.h" + +namespace frc { +namespace sim { +namespace lowfi { + +class SimulatorComponentBase : public virtual SimulatorComponent { + public: + SimulatorComponentBase() = default; + virtual ~SimulatorComponentBase() = default; + + const std::string& GetDisplayName() const override; + + void SetDisplayName(const std::string& displayName) override; + + private: + std::string m_name; +}; + +} // namespace lowfi +} // namespace sim +} // namespace frc diff --git a/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/ADXRS450_SpiGyroSim.h b/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/ADXRS450_SpiGyroSim.h index 989602e3e1..9b23320a7e 100644 --- a/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/ADXRS450_SpiGyroSim.h +++ b/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/ADXRS450_SpiGyroSim.h @@ -9,15 +9,18 @@ #include "ADXRS450_SpiGyroWrapperData.h" #include "lowfisim/GyroSim.h" +#include "lowfisim/SimulatorComponentBase.h" namespace frc { namespace sim { namespace lowfi { -class ADXRS450_SpiGyroSim : public GyroSim { +class ADXRS450_SpiGyroSim : public SimulatorComponentBase, public GyroSim { public: explicit ADXRS450_SpiGyroSim(int spiPort); + bool IsWrapperInitialized() const override; + void SetAngle(double angle) override; double GetAngle() override; diff --git a/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/WpiAnalogGyroSim.h b/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/WpiAnalogGyroSim.h index 37c3c3ca7f..8741cb2454 100644 --- a/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/WpiAnalogGyroSim.h +++ b/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/WpiAnalogGyroSim.h @@ -8,16 +8,19 @@ #pragma once #include "lowfisim/GyroSim.h" +#include "lowfisim/SimulatorComponentBase.h" #include "simulation/AnalogGyroSim.h" namespace frc { namespace sim { namespace lowfi { -class WpiAnalogGyroSim : public GyroSim { +class WpiAnalogGyroSim : public SimulatorComponentBase, public GyroSim { public: explicit WpiAnalogGyroSim(int index); + bool IsWrapperInitialized() const override; + void SetAngle(double angle) override; double GetAngle() override; diff --git a/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/WpiEncoderSim.h b/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/WpiEncoderSim.h index c25a5d97bb..6460d8b96c 100644 --- a/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/WpiEncoderSim.h +++ b/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/WpiEncoderSim.h @@ -8,15 +8,17 @@ #pragma once #include "lowfisim/EncoderSim.h" +#include "lowfisim/SimulatorComponentBase.h" #include "simulation/EncoderSim.h" namespace frc { namespace sim { namespace lowfi { -class WpiEncoderSim : public EncoderSim { +class WpiEncoderSim : public SimulatorComponentBase, public EncoderSim { public: explicit WpiEncoderSim(int index); + bool IsWrapperInitialized() const override; void SetPosition(double position) override; void SetVelocity(double velocity) override; diff --git a/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/WpiMotorSim.h b/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/WpiMotorSim.h index 173d299261..d24e8313aa 100644 --- a/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/WpiMotorSim.h +++ b/simulation/lowfi_simulation/src/main/native/include/lowfisim/wpisimulators/WpiMotorSim.h @@ -8,6 +8,7 @@ #pragma once #include "lowfisim/MotorSim.h" +#include "lowfisim/SimulatorComponentBase.h" #include "lowfisim/motormodel/MotorModel.h" #include "simulation/PWMSim.h" @@ -15,9 +16,10 @@ namespace frc { namespace sim { namespace lowfi { -class WpiMotorSim : public MotorSim { +class WpiMotorSim : public SimulatorComponentBase, public MotorSim { public: explicit WpiMotorSim(int index, MotorModel& motorModelSimulator); + bool IsWrapperInitialized() const override; void Update(double elapsedTime); double GetPosition() const override; diff --git a/simulation/lowfi_simulation/src/test/native/cpp/lowfisim/AccelerometerSimulatorTest.cpp b/simulation/lowfi_simulation/src/test/native/cpp/lowfisim/AccelerometerSimulatorTest.cpp index c55dc7c2b6..b51a63aacc 100644 --- a/simulation/lowfi_simulation/src/test/native/cpp/lowfisim/AccelerometerSimulatorTest.cpp +++ b/simulation/lowfi_simulation/src/test/native/cpp/lowfisim/AccelerometerSimulatorTest.cpp @@ -15,17 +15,22 @@ TEST(AccelerometerTests, TestADXL345_I2CAccelerometerWrapper) { frc::I2C::Port port = frc::I2C::kOnboard; - frc::ADXL345_I2C accel{port}; - - EXPECT_NEAR(0, accel.GetX(), EPSILON); - EXPECT_NEAR(0, accel.GetY(), EPSILON); - EXPECT_NEAR(0, accel.GetZ(), EPSILON); - hal::ADXL345_I2CData rawAdxSim(port); frc::sim::lowfi::ADXLThreeAxisAccelerometerSim accelerometerSim(rawAdxSim); frc::sim::lowfi::AccelerometerSim& xWrapper = accelerometerSim.GetXWrapper(); frc::sim::lowfi::AccelerometerSim& yWrapper = accelerometerSim.GetYWrapper(); frc::sim::lowfi::AccelerometerSim& zWrapper = accelerometerSim.GetZWrapper(); + EXPECT_FALSE(xWrapper.IsWrapperInitialized()); + EXPECT_FALSE(yWrapper.IsWrapperInitialized()); + EXPECT_FALSE(zWrapper.IsWrapperInitialized()); + + frc::ADXL345_I2C accel{port}; + EXPECT_NEAR(0, accel.GetX(), EPSILON); + EXPECT_NEAR(0, accel.GetY(), EPSILON); + EXPECT_NEAR(0, accel.GetZ(), EPSILON); + EXPECT_TRUE(xWrapper.IsWrapperInitialized()); + EXPECT_TRUE(yWrapper.IsWrapperInitialized()); + EXPECT_TRUE(zWrapper.IsWrapperInitialized()); xWrapper.SetAcceleration(1.45); EXPECT_NEAR(1.45, accel.GetX(), EPSILON); diff --git a/simulation/lowfi_simulation/src/test/native/cpp/lowfisim/GyroSimulatorTest.cpp b/simulation/lowfi_simulation/src/test/native/cpp/lowfisim/GyroSimulatorTest.cpp index ac1f12d4be..6cd0b2b7e5 100644 --- a/simulation/lowfi_simulation/src/test/native/cpp/lowfisim/GyroSimulatorTest.cpp +++ b/simulation/lowfi_simulation/src/test/native/cpp/lowfisim/GyroSimulatorTest.cpp @@ -25,16 +25,23 @@ void TestGyro(frc::sim::lowfi::GyroSim& sim, frc::Gyro& gyro) { TEST(GyroSimulatorTests, TestAnalogGyro) { int port = 1; - frc::AnalogGyro gyro{port}; frc::sim::lowfi::WpiAnalogGyroSim sim{port}; + EXPECT_FALSE(sim.IsWrapperInitialized()); + + frc::AnalogGyro gyro{port}; + EXPECT_TRUE(sim.IsWrapperInitialized()); TestGyro(sim, gyro); } TEST(GyroSimulatorTests, TestSpiGyro) { frc::SPI::Port port = frc::SPI::kOnboardCS0; + frc::sim::lowfi::ADXRS450_SpiGyroSim sim{port}; + EXPECT_FALSE(sim.IsWrapperInitialized()); + frc::ADXRS450_Gyro gyro{port}; + EXPECT_TRUE(sim.IsWrapperInitialized()); TestGyro(sim, gyro); } diff --git a/simulation/lowfi_simulation/src/test/native/cpp/lowfisim/MotorEncoderSimulatorTest.cpp b/simulation/lowfi_simulation/src/test/native/cpp/lowfisim/MotorEncoderSimulatorTest.cpp index 60a4f5ccd8..83e9ddc51c 100644 --- a/simulation/lowfi_simulation/src/test/native/cpp/lowfisim/MotorEncoderSimulatorTest.cpp +++ b/simulation/lowfi_simulation/src/test/native/cpp/lowfisim/MotorEncoderSimulatorTest.cpp @@ -14,14 +14,18 @@ #include "lowfisim/wpisimulators/WpiMotorSim.h" TEST(MotorEncoderConnectorTest, TestWithoutDistancePerPulseFullSpeed) { - frc::Talon talon{3}; - frc::Encoder encoder{3, 1}; - frc::sim::lowfi::SimpleMotorModel motorModelSim(6000); frc::sim::lowfi::WpiMotorSim motorSim(3, motorModelSim); frc::sim::lowfi::WpiEncoderSim encoderSim(0); frc::sim::lowfi::MotorEncoderConnector connector(motorSim, encoderSim); + EXPECT_FALSE(motorSim.IsWrapperInitialized()); + EXPECT_FALSE(encoderSim.IsWrapperInitialized()); + frc::Talon talon{3}; + frc::Encoder encoder{3, 1}; + EXPECT_TRUE(motorSim.IsWrapperInitialized()); + EXPECT_TRUE(encoderSim.IsWrapperInitialized()); + talon.Set(-1); motorSim.Update(1); connector.Update(); diff --git a/simulation/lowfi_simulation/src/test/native/cpp/main.cpp b/simulation/lowfi_simulation/src/test/native/cpp/main.cpp index 1e5ecf004c..0e00efa33d 100644 --- a/simulation/lowfi_simulation/src/test/native/cpp/main.cpp +++ b/simulation/lowfi_simulation/src/test/native/cpp/main.cpp @@ -5,9 +5,12 @@ /* the project. */ /*----------------------------------------------------------------------------*/ +#include + #include "gtest/gtest.h" int main(int argc, char** argv) { + HAL_Initialize(500, 0); ::testing::InitGoogleTest(&argc, argv); int ret = RUN_ALL_TESTS(); return ret;