mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-23 01:21:42 +00:00
Use new NetworkTables across WPILib (C++ and Java).
Also make sure table listeners stop listening in their destructors. This might be better handled by moving the table itself into ITableListener and providing cleanup functionality there. A submodule is used to pull in ntcore. Change-Id: I3031c1a768595cf0f8754c47e15cd423e2dbcce5
This commit is contained in:
committed by
Brad Miller (WPI)
parent
f65e697107
commit
f89c5e150f
@@ -93,6 +93,10 @@ void PIDController::Initialize(float Kp, float Ki, float Kd, float Kf,
|
||||
m_toleranceType = kNoTolerance;
|
||||
}
|
||||
|
||||
PIDController::~PIDController() {
|
||||
if (m_table != nullptr) m_table->RemoveTableListener(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call the Calculate method as a non-static method. This avoids having to prepend
|
||||
* all local variables in that method with the class pointer. This way the "this"
|
||||
@@ -579,20 +583,27 @@ std::shared_ptr<ITable> PIDController::GetTable() const {
|
||||
return m_table;
|
||||
}
|
||||
|
||||
void PIDController::ValueChanged(std::shared_ptr<ITable> source, const std::string& key, EntryValue value, bool isNew){
|
||||
if (key==kP || key==kI || key==kD || key==kF) {
|
||||
if (m_P != m_table->GetNumber(kP) || m_I != m_table->GetNumber(kI) || m_D != m_table->GetNumber(kD) || m_F != m_table->GetNumber(kF) ) {
|
||||
SetPID(m_table->GetNumber(kP, 0.0), m_table->GetNumber(kI, 0.0), m_table->GetNumber(kD, 0.0), m_table->GetNumber(kF, 0.0));
|
||||
}
|
||||
} else if (key==kSetpoint && m_setpoint != value.f) {
|
||||
SetSetpoint(value.f);
|
||||
} else if (key==kEnabled && m_enabled != value.b) {
|
||||
if (value.b) {
|
||||
Enable();
|
||||
} else {
|
||||
Disable();
|
||||
}
|
||||
}
|
||||
void PIDController::ValueChanged(ITable* source, llvm::StringRef key,
|
||||
std::shared_ptr<nt::Value> value, bool isNew) {
|
||||
if (key == kP || key == kI || key == kD || key == kF) {
|
||||
if (m_P != m_table->GetNumber(kP, 0.0) ||
|
||||
m_I != m_table->GetNumber(kI, 0.0) ||
|
||||
m_D != m_table->GetNumber(kD, 0.0) ||
|
||||
m_F != m_table->GetNumber(kF, 0.0)) {
|
||||
SetPID(m_table->GetNumber(kP, 0.0), m_table->GetNumber(kI, 0.0),
|
||||
m_table->GetNumber(kD, 0.0), m_table->GetNumber(kF, 0.0));
|
||||
}
|
||||
} else if (key == kSetpoint && value->IsDouble() &&
|
||||
m_setpoint != value->GetDouble()) {
|
||||
SetSetpoint(value->GetDouble());
|
||||
} else if (key == kEnabled && value->IsBoolean() &&
|
||||
m_enabled != value->GetBoolean()) {
|
||||
if (value->GetBoolean()) {
|
||||
Enable();
|
||||
} else {
|
||||
Disable();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PIDController::UpdateTable() {
|
||||
|
||||
Reference in New Issue
Block a user