From 785d84e849397d1d4a96705a933f970c91987450 Mon Sep 17 00:00:00 2001 From: amikhalev Date: Mon, 15 Jun 2015 13:25:08 -0600 Subject: [PATCH] Rewrote ManualTester --- src/Common/Logger.h | 2 +- src/Common/Tester/ManualTester.cpp | 523 ++++++++++++++++------------- src/Common/Tester/ManualTester.h | 110 ++++-- src/Common/Tester/Tester.cpp | 10 +- src/Common/Tester/Tester.h | 1 - src/Robot.cpp | 1 + src/Robot.h | 2 + src/Subsystems/Claw.cpp | 23 +- src/Subsystems/Drive.cpp | 14 +- src/Subsystems/Otto.cpp | 14 +- src/Subsystems/Shuttle.cpp | 17 +- src/Subsystems/Thief.cpp | 5 +- src/Subsystems/ToteFeed.cpp | 10 +- 13 files changed, 409 insertions(+), 323 deletions(-) diff --git a/src/Common/Logger.h b/src/Common/Logger.h index 3217b58..bccc692 100644 --- a/src/Common/Logger.h +++ b/src/Common/Logger.h @@ -31,7 +31,7 @@ class Logger { * @param const char *message for message of many words. * @param anything else needed such as things needed for %c for char */ - void Info(const char *message, ...); + void Info(const char *message, ...) __attribute__((format(printf, 2, 3))); /** * Display logger level warn diff --git a/src/Common/Tester/ManualTester.cpp b/src/Common/Tester/ManualTester.cpp index 85707d8..8050d8b 100644 --- a/src/Common/Tester/ManualTester.cpp +++ b/src/Common/Tester/ManualTester.cpp @@ -1,262 +1,332 @@ #include "ManualTester.h" + +#include +#include +#include +#include +#include +#include +#include + +#ifndef ANALOGPOTENTIOMETER_H_ +#define ANALOGPOTENTIOMETER_H_ +#include +#endif + #include "Common/Hardware/ADXRS453.h" namespace tator { -class ManualTest { -public: - ManualTest(std::string name, Logger* log) { - this->name = name; - this->log = log; - } - virtual ~ManualTest() { - } - virtual void LogInit() = 0; - virtual void Execute(Joystick* joystick) = 0; - virtual void End() = 0; - // No Interrupted(), Initialize(), or IsFinished(), as these tests should not be statefull - std::string name; - Logger* log; -}; +ManualTest::ManualTest(const std::string& name, Logger& log) : + name(name), log(log) { +} + +ManualTest::~ManualTest() { +} + +std::string ManualTest::GetName() { + return name; +} class ManualSpeedControllerTest: public ManualTest { public: - ManualSpeedControllerTest(std::string name, Logger* log, + ManualSpeedControllerTest(const std::string& name, Logger& log, SpeedController* controller, double cap) : ManualTest(name, log) { this->controller = controller; this->cap = cap; } - virtual ~ManualSpeedControllerTest() { - } - void LogInit() { - log->Info("Now testing speed controller %s", name.c_str()); - log->Info("Press A (2) for 100%% and B (2) for -100%%"); + + void Initialize() override { + log.Info("Testing speed controller %s", name.c_str()); + log.Info("Press A (2) for 100%% and B (3) for -100%%"); } - void Execute(Joystick* joystick) { - if (joystick->GetRawButton(2)) { + + void Execute(uint32_t pressedButton, double axisValue) override { + if (pressedButton == 2) { controller->Set(1.0); - } else if (joystick->GetRawButton(3)) { + } else if (pressedButton == 3) { controller->Set(-1.0); } else { - double raw = joystick->GetRawAxis(1); - double speed = std::min(pow(fabs(raw), 3), cap); - if (raw < 0) { + double speed = std::min(pow(fabs(axisValue), 3), cap); + if (axisValue < 0) { speed *= -1; } controller->Set(speed); } } - void End() { + + void End() override { controller->Set(0); } + +private: SpeedController* controller; double cap; }; class ManualPIDControllerTest: public ManualTest { public: - ManualPIDControllerTest(std::string name, Logger* log, + ManualPIDControllerTest(const std::string& name, Logger& log, PIDController* controller, double maxSetpoint) : ManualTest(name, log) { this->controller = controller; this->maxSetpoint = maxSetpoint; } - virtual ~ManualPIDControllerTest() { - } - virtual void LogInit() { - log->Info("Now testing PID controller %s", name.c_str()); + + void Initialize() override { + log.Info("Testing PID controller %s", name.c_str()); } - virtual void Execute(Joystick* joystick) { - double raw = joystick->GetRawAxis(1); - double speed = pow(fabs(raw), 3) * maxSetpoint; - if (raw < 0) { + + void Execute(uint32_t pressedButton, double axisValue) override { + double speed = pow(fabs(axisValue), 3) * maxSetpoint; + if (axisValue < 0) { speed *= -1; } controller->SetSetpoint(speed); } - virtual void End() { + + void End() override { controller->SetSetpoint(0); } + +private: PIDController* controller; double maxSetpoint; }; class ManualSolenoidTest: public ManualTest { public: - ManualSolenoidTest(std::string name, Logger* log, Solenoid* solenoid) : - ManualTest(name, log) { - this->solenoid = solenoid; - this->lastPressed = -1; + ManualSolenoidTest(const std::string& name, Logger& log, Solenoid* solenoid) : + ManualTest(name, log), solenoid(solenoid) { } - virtual ~ManualSolenoidTest() { - } - virtual void LogInit() { - log->Info("Now testing solenoid %s", name.c_str()); - log->Info("Press A (2) to retract, B (3) to extend"); + + void Initialize() override { + log.Info("Testing solenoid %s", name.c_str()); + log.Info("Press A (2) to retract, B (3) to extend"); } - virtual void Execute(Joystick* joystick) { - if (joystick->GetRawButton(2)) { - if (lastPressed != 2) { - lastPressed = 2; - log->Info("Setting solenoid %s to false", name.c_str()); - solenoid->Set(false); - } - } else if (joystick->GetRawButton(3)) { - if (lastPressed != 3) { - lastPressed = 3; - log->Info("Setting solenoid %s to true", name.c_str()); - solenoid->Set(true); - } - } else { - lastPressed = -1; + + void Execute(uint32_t pressedButton, double axisValue) override { + if (pressedButton == 2) { + log.Info("Setting solenoid %s to false", name.c_str()); + solenoid->Set(false); + } else if (pressedButton == 3) { + log.Info("Setting solenoid %s to true", name.c_str()); + solenoid->Set(true); } } - virtual void End() { + + void End() override { } + +private: Solenoid* solenoid; - int lastPressed; }; class ManualSensorTest: public ManualTest { public: - ManualSensorTest(std::string name, Logger* log) : + ManualSensorTest(const std::string& name, Logger& log) : ManualTest(name, log) { - this->wasPressed = false; } - virtual ~ManualSensorTest() { + + void Initialize() override { + LogInit(); } - virtual void LogValue() = 0; - virtual void Execute(Joystick* joystick) { - if (joystick->GetRawButton(2) && !wasPressed) { - wasPressed = true; + + void Execute(uint32_t pressedButton, double axisValue) override { + if (pressedButton == 2) { LogValue(); - } else if (!joystick->GetRawButton(2)) { - wasPressed = false; } } - virtual void End() { + + void End() override { } - bool wasPressed; + +protected: + virtual void LogInit() = 0; + virtual void LogValue() = 0; }; -class ManualEncoderTest: public ManualSensorTest { +class ManualEncoderTest: public ManualTest { public: - ManualEncoderTest(std::string name, Logger* log, Encoder* encoder) : - ManualSensorTest(name, log) { - this->encoder = encoder; - this->wasBPressed = false; - } - virtual ~ManualEncoderTest() { - } - virtual void LogInit() { - log->Info("Now testing encoder %s", name.c_str()); - log->Info("Press A (2) to log encoder values"); - log->Info("Press B (3) to zero the encoder"); - } - virtual void Execute(Joystick* joystick) { - ManualSensorTest::Execute(joystick); - if (joystick->GetRawButton(3) && !wasBPressed) { - wasBPressed = true; - log->Info("Resetting encoder"); + ManualEncoderTest(const std::string& name, Logger& log, Encoder* encoder) : + ManualTest(name, log), encoder(encoder) { + } + + void Initialize() override { + log.Info("Testing encoder %s", name.c_str()); + log.Info("Press A (2) to log the encoder value"); + log.Info("Press B (3) to zero the encoder value"); + } + + void Execute(uint32_t pressedButton, double axisValue) override { + if (pressedButton == 2) { + log.Info("Encoder ticks is %d, distance is %.2f, rate is %.2f", + encoder->GetRaw(), encoder->GetDistance(), + encoder->GetRate()); + } else if (pressedButton == 3) { + log.Info("Resetting encoder"); encoder->Reset(); - } else if (!joystick->GetRawButton(3)) { - wasBPressed = false; } - } - virtual void LogValue() { - log->Info("Encoder is at %.2f and going at %.2f", - encoder->GetDistance(), encoder->GetRate()); + + void End() override { } + +private: Encoder* encoder; - bool wasBPressed; }; class ManualDigitalInputTest: public ManualSensorTest { public: - ManualDigitalInputTest(std::string name, Logger* log, DigitalInput* input) : - ManualSensorTest(name, log) { - this->input = input; - } - virtual ~ManualDigitalInputTest() { + ManualDigitalInputTest(const std::string& name, Logger& log, + DigitalInput* input) : + ManualSensorTest(name, log), input(input) { } - virtual void LogInit() { - log->Info("Now testing digital input %s", name.c_str()); - log->Info("Press A (2) to log the value"); + + void LogInit() override { + log.Info("Now testing digital input %s", name.c_str()); + log.Info("Press A (2) to read the value"); } - virtual void LogValue() { - int state = input->Get(); - const char* strState = state ? "true" : "false"; - log->Info("Input is %s (%d)", strState, state); + + void LogValue() override { + log.Info("Input reads %s", input->Get() ? "true" : "false"); } + +private: DigitalInput* input; }; class ManualFixedFieldTest: public ManualSensorTest { public: - ManualFixedFieldTest(std::string name, Logger* log, FixedField* input) : - ManualSensorTest(name, log) { - this->input = input; - } - virtual ~ManualFixedFieldTest() { + ManualFixedFieldTest(const std::string& name, Logger& log, + FixedField* input) : + ManualSensorTest(name, log), input(input) { } - virtual void LogInit() { + + void LogInit() override { const char* type = input->IsNPN() ? "NPN" : "PNP"; - log->Info("Now testing fixed field sensor %s, which is %s", - name.c_str(), type); + log.Info("Testing %s fixed field sensor %s", type, name.c_str()); + log.Info("Press A (2) to read the value"); } - virtual void LogValue() { - const char* strState = input->Get() ? "true" : "false"; - log->Info("Input is %s", strState); + + void LogValue() override { + log.Info("Sensor reads %s", input->Get() ? "true" : "false"); } + +private: FixedField* input; }; class ManualAnalogPotentiometerTest: public ManualSensorTest { public: - ManualAnalogPotentiometerTest(std::string name, Logger* log, + ManualAnalogPotentiometerTest(const std::string& name, Logger& log, AnalogPotentiometer* pot) : - ManualSensorTest(name, log) { - this->pot = pot; - } - virtual ~ManualAnalogPotentiometerTest() { + ManualSensorTest(name, log), pot(pot) { } - virtual void LogInit() { - log->Info("Now testing analog potentiometer %s", name.c_str()); - log->Info("Press A (2) to log the value"); + + void LogInit() override { + log.Info("Testing analog potentiometer %s", name.c_str()); + log.Info("Press A (2) to read the value"); } - virtual void LogValue() { - log->Info("Potentiometer is at %f", pot->Get()); + + void LogValue() override { + log.Info("Potentiometer reads %f", pot->Get()); } + +private: AnalogPotentiometer* pot; }; class ManualADXRS453Test: public ManualSensorTest { public: - ManualADXRS453Test(std::string name, Logger* log, ADXRS453* gyro) : - ManualSensorTest(name, log) { - this->gyro = gyro; + ManualADXRS453Test(const std::string& name, Logger& log, ADXRS453* gyro) : + ManualSensorTest(name, log), gyro(gyro) { } void LogInit() override { - log->Info("Testing gyro %s", name.c_str()); - log->Info("Press A (2) to log the value"); + log.Info("Testing gyro %s", name.c_str()); + log.Info("Press A (2) to read the value"); } void LogValue() override { - log->Info("Gyro angle is %f degrees", gyro->GetAngle()); + log.Info("Gyro angle reads %f degrees", gyro->GetAngle()); } +private: ADXRS453* gyro; }; +ManualTester::TesterSubsystem::TesterSubsystem(const std::string& name, + ManualTester* manualTester) : + subsystem(name), manualTester(manualTester) { +} + +ManualTester::TesterSubsystem& ManualTester::TesterSubsystem::Add( + const std::string& name, SpeedController* controller, double maxSpeed) { + manualTester->Add(subsystem, name, + new ManualSpeedControllerTest(name, manualTester->log, controller, + maxSpeed)); + return *this; +} + +ManualTester::TesterSubsystem& ManualTester::TesterSubsystem::Add( + const std::string& name, PIDController* controller, + double maxSetpoint) { + manualTester->Add(subsystem, name, + new ManualPIDControllerTest(name, manualTester->log, controller, + maxSetpoint)); + return *this; +} + +ManualTester::TesterSubsystem& ManualTester::TesterSubsystem::Add( + const std::string& name, Solenoid* solenoid) { + manualTester->Add(subsystem, name, + new ManualSolenoidTest(name, manualTester->log, solenoid)); + return *this; +} + +ManualTester::TesterSubsystem& ManualTester::TesterSubsystem::Add( + const std::string& name, Encoder* encoder) { + manualTester->Add(subsystem, name, + new ManualEncoderTest(name, manualTester->log, encoder)); + return *this; +} + +ManualTester::TesterSubsystem& ManualTester::TesterSubsystem::Add( + const std::string& name, DigitalInput* input) { + manualTester->Add(subsystem, name, + new ManualDigitalInputTest(name, manualTester->log, input)); + return *this; +} + +ManualTester::TesterSubsystem& ManualTester::TesterSubsystem::Add( + const std::string& name, FixedField* input) { + manualTester->Add(subsystem, name, + new ManualFixedFieldTest(name, manualTester->log, input)); + return *this; +} + +ManualTester::TesterSubsystem& ManualTester::TesterSubsystem::Add( + const std::string& name, AnalogPotentiometer* pot) { + manualTester->Add(subsystem, name, + new ManualAnalogPotentiometerTest(name, manualTester->log, pot)); + return *this; +} + +ManualTester::TesterSubsystem& ManualTester::TesterSubsystem::Add( + const std::string& name, ADXRS453* gyro) { + manualTester->Add(subsystem, name, + new ManualADXRS453Test(name, manualTester->log, gyro)); + return *this; +} + ManualTester* ManualTester::instance = nullptr; ManualTester::ManualTester() : log("ManualTester") { - joystick = new Joystick(0); - lastPressed = -1; + joystick = Joystick::GetStickForPort(kStickPort); + ds = DriverStation::GetInstance(); } ManualTester::~ManualTester() { @@ -269,120 +339,89 @@ ManualTester* ManualTester::GetInstance() { return instance; } -void ManualTester::Execute() { - if (!doIteratorsExist) { - doIteratorsExist = true; - subsystemIt = tests.begin(); - testIt = subsystemIt->second.begin(); - log.Info("Switch subsystems with the left and right triggers"); - log.Info("Switch components with the left and right bumpers"); - log.Info("Starting off with testing subsytem %s", - subsystemIt->first.c_str()); - (*testIt)->LogInit(); - } - if (joystick->GetRawButton(7)) { // Left trigger - if (lastPressed != 6) { - if (subsystemIt == tests.begin()) { - log.Warn("Already at the first subsystem"); - } else { - (*testIt)->End(); - subsystemIt--; - testIt = subsystemIt->second.begin(); - log.Info("Switching to subsystem %s", - subsystemIt->first.c_str()); - (*testIt)->LogInit(); - } +void ManualTester::Initialize() { + currentSubsystem = subsystems.begin(); + currentTest = currentSubsystem->second.begin(); + log.Info("Switch subsystems with the left and right triggers"); + log.Info("Switch components with the left and right bumpers"); + log.Info("Starting off with testing subsytem %s", + currentSubsystem->first.c_str()); + (*currentTest)->Initialize(); +} + +void ManualTester::Run() { + uint32_t button = ReadButton(); + if (button == 7) { // Left trigger + if (currentSubsystem == subsystems.begin()) { + log.Warn("Already at the first subsystem"); + } else { + (*currentTest)->End(); + currentSubsystem--; + currentTest = currentSubsystem->second.begin(); + log.Info("Switching to subsystem %s", + currentSubsystem->first.c_str()); + (*currentTest)->Initialize(); } - lastPressed = 6; - } else if (joystick->GetRawButton(8)) { // Right trigger - if (lastPressed != 7) { - subsystemIt++; - if (subsystemIt == tests.end()) { - subsystemIt--; - log.Warn("Already at the last subsystem"); - } else { - (*testIt)->End(); - testIt = subsystemIt->second.begin(); - log.Info("Switching to subsystem %s", - subsystemIt->first.c_str()); - (*testIt)->LogInit(); - } + } else if (button == 8) { // Right trigger + currentSubsystem++; + if (currentSubsystem == subsystems.end()) { + currentSubsystem--; + log.Warn("Already at the last subsystem"); + } else { + (*currentTest)->End(); + currentTest = currentSubsystem->second.begin(); + log.Info("Switching to subsystem %s", + currentSubsystem->first.c_str()); + (*currentTest)->Initialize(); } - lastPressed = 7; - } else if (joystick->GetRawButton(5)) { // Left bumper - if (lastPressed != 4) { - if (testIt == subsystemIt->second.begin()) { - log.Warn("Already at the first test"); - } else { - (*testIt)->End(); - testIt--; - (*testIt)->LogInit(); - } + } else if (button == 5) { // Left bumper + if (currentTest == currentSubsystem->second.begin()) { + log.Warn("Already at the first test"); + } else { + (*currentTest)->End(); + currentTest--; + (*currentTest)->Initialize(); } - lastPressed = 4; - } else if (joystick->GetRawButton(6)) { // Right bumper - if (lastPressed != 5) { - testIt++; - if (testIt == subsystemIt->second.end()) { - testIt--; - log.Warn("Already at the last test"); - } else { - (*testIt)->End(); - (*testIt)->LogInit(); - } + } else if (button == 6) { // Right bumper + currentTest++; + if (currentTest == currentSubsystem->second.end()) { + currentTest--; + log.Warn("Already at the last test"); + } else { + (*currentTest)->End(); + (*currentTest)->Initialize(); } - lastPressed = 5; - } else { - lastPressed = -1; } - (*testIt)->Execute(joystick); + (*currentTest)->Execute(button, joystick->GetRawAxis(1)); } -void ManualTester::StopTesting() { - (*testIt)->End(); +void ManualTester::Disable() { + (*currentTest)->End(); } -void ManualTester::Add(std::string subsystem, std::string name, - SpeedController* controller, double maxSpeed) { - tests[subsystem].push_back( - new ManualSpeedControllerTest(name, &log, controller, maxSpeed)); +ManualTester::TesterSubsystem ManualTester::Subsystem( + const std::string& subsystem) { + return TesterSubsystem(subsystem, this); } -void ManualTester::Add(std::string subsystem, std::string name, - PIDController* controller, double maxSetpoint) { - tests[subsystem].push_back( - new ManualPIDControllerTest(name, &log, controller, maxSetpoint)); +void ManualTester::Add(const std::string& subsystem, const std::string& name, + ManualTest* test) { + subsystems[subsystem].push_back(TestPtr(test)); } -void ManualTester::Add(std::string subsystem, std::string name, - Solenoid* solenoid) { - tests[subsystem].push_back(new ManualSolenoidTest(name, &log, solenoid)); -} - -void ManualTester::Add(std::string subsystem, std::string name, - Encoder* encoder) { - tests[subsystem].push_back(new ManualEncoderTest(name, &log, encoder)); -} - -void ManualTester::Add(std::string subsystem, std::string name, - DigitalInput* input) { - tests[subsystem].push_back(new ManualDigitalInputTest(name, &log, input)); -} - -void ManualTester::Add(std::string subsystem, std::string name, - FixedField* input) { - tests[subsystem].push_back(new ManualFixedFieldTest(name, &log, input)); -} - -void ManualTester::Add(std::string subsystem, std::string name, - AnalogPotentiometer* pot) { - tests[subsystem].push_back( - new ManualAnalogPotentiometerTest(name, &log, pot)); -} - -void ManualTester::Add(std::string subsystem, std::string name, - ADXRS453* gyro) { - tests[subsystem].push_back(new ManualADXRS453Test(name, &log, gyro)); +uint32_t ManualTester::ReadButton() { + Buttons buttons = ds->GetStickButtons(kStickPort); + // buttons weren't pressed and are now + Buttons pressedButtons = buttons & ~lastButtons; + lastButtons = buttons; + if (pressedButtons.any()) { + for (uint32_t i = 0; i < kMaxButtons; ++i) { + if (pressedButtons[i]) { + return i; + } + } + } + return 0; } } diff --git a/src/Common/Tester/ManualTester.h b/src/Common/Tester/ManualTester.h index 14db820..10c5623 100644 --- a/src/Common/Tester/ManualTester.h +++ b/src/Common/Tester/ManualTester.h @@ -1,57 +1,99 @@ #ifndef MANUALTESTER_H_ #define MANUALTESTER_H_ -#include -#include -#include -#include -#include -#ifndef ANALOGPOTENTIOMETER_H_ -#define ANALOGPOTENTIOMETER_H_ -#include -#endif -#include #include "Common/Hardware/FixedField.h" #include "Common/Logger.h" +#include +#include +#include +#include + +class SpeedController; +class PIDController; +class Solenoid; +class Encoder; +class DigitalInput; +class AnalogPotentiometer; +class Joystick; +class DriverStation; namespace tator { -class ManualTest; +class FixedField; class ADXRS453; +class ManualTest { +public: + ManualTest(const std::string& name, Logger& log); + virtual ~ManualTest(); + + std::string GetName(); + + virtual void Initialize() = 0; + virtual void Execute(uint32_t pressedButton, double axisValue) = 0; + virtual void End() = 0; + +protected: + std::string name; + Logger& log; +}; + class ManualTester { +private: + class TesterSubsystem { + public: + TesterSubsystem(const std::string& name, ManualTester* manualTester); + TesterSubsystem& Add(const std::string& name, + SpeedController* controller, double maxSpeed = 1); + TesterSubsystem& Add(const std::string& name, PIDController* controller, + double maxSetpoint); + TesterSubsystem& Add(const std::string& name, Solenoid* solenoid); + TesterSubsystem& Add(const std::string& name, Encoder* encoder); + TesterSubsystem& Add(const std::string& name, DigitalInput* input); + TesterSubsystem& Add(const std::string& name, FixedField* input); + TesterSubsystem& Add(const std::string& name, AnalogPotentiometer* pot); + TesterSubsystem& Add(const std::string& name, ADXRS453* gyro); + + private: + std::string subsystem; + ManualTester* manualTester; + }; + public: + static const uint32_t kStickPort = 1; + static const uint32_t kMaxButtons = 32; + virtual ~ManualTester(); static ManualTester* GetInstance(); - void Execute(); - void StopTesting(); - - virtual void Add(std::string subsystem, std::string name, - SpeedController* controller, double maxSpeed = 1); - virtual void Add(std::string subsystem, std::string name, - PIDController* controller, double maxSetpoint); - virtual void Add(std::string subsystem, std::string name, - Solenoid* solenoid); - virtual void Add(std::string subsystem, std::string name, Encoder* encoder); - virtual void Add(std::string subsystem, std::string name, - DigitalInput* input); - virtual void Add(std::string subsystem, std::string name, - FixedField* input); - virtual void Add(std::string subsystem, std::string name, - AnalogPotentiometer* pot); - void Add(std::string subsystem, std::string name, ADXRS453* gyro); + void Initialize(); + void Run(); + void Disable(); -protected: + TesterSubsystem Subsystem(const std::string& subsystem); + + void Add(const std::string& subsystem, const std::string& name, + ManualTest* test); + +private: ManualTester(); static ManualTester* instance; - std::map> tests; - std::map>::iterator subsystemIt; - bool doIteratorsExist; - std::vector::iterator testIt; + + typedef std::unique_ptr TestPtr; + typedef std::vector Tests; + typedef std::map Subsystems; + typedef std::bitset Buttons; + + Subsystems subsystems; + Subsystems::iterator currentSubsystem; + Tests::iterator currentTest; + Logger log; Joystick* joystick; - int lastPressed; + DriverStation* ds; + Buttons lastButtons; + + uint32_t ReadButton(); }; } diff --git a/src/Common/Tester/Tester.cpp b/src/Common/Tester/Tester.cpp index 4cca122..0eaa925 100644 --- a/src/Common/Tester/Tester.cpp +++ b/src/Common/Tester/Tester.cpp @@ -7,9 +7,12 @@ #include "Tester.h" #include "TestGroup.h" #include "CommandBase.h" +#include + #include "Subsystems/Drive.h" #include "Subsystems/Shuttle.h" #include "Subsystems/ToteFeed.h" + #include "Tests/SuccessfulTest.h" #include "Tests/FailureTest.h" #include "Tests/SpeedControllerEncoderTest.h" @@ -69,15 +72,16 @@ void Tester::Initialize() { log.Info("Running the manual tester"); log.Info("Press START (10) to switch to the automated Tester"); testMode = TestMode::manual; + manualTester->Initialize(); } void Tester::Run() { switch (testMode) { case TestMode::manual: - manualTester->Execute(); + manualTester->Run(); if (joy->GetRawButton(10)) { log.Info("Running automated tests"); - manualTester->StopTesting(); + manualTester->Disable(); tests->Initialize(); testMode = TestMode::autonomous; } @@ -103,7 +107,7 @@ void Tester::Disable() { PrintResults(); break; case TestMode::manual: - manualTester->StopTesting(); + manualTester->Disable(); break; default: break; diff --git a/src/Common/Tester/Tester.h b/src/Common/Tester/Tester.h index 2452ec4..5259037 100644 --- a/src/Common/Tester/Tester.h +++ b/src/Common/Tester/Tester.h @@ -9,7 +9,6 @@ #include "TestGroup.h" #include "ManualTester.h" -#include "Joystick.h" #include namespace tator { diff --git a/src/Robot.cpp b/src/Robot.cpp index fc9530c..425844a 100644 --- a/src/Robot.cpp +++ b/src/Robot.cpp @@ -5,6 +5,7 @@ */ #include "Robot.h" +#include #include "Common/Config/Config.h" #include "Common/Config/Binder.h" #include "Common/Config/Kremlin.h" diff --git a/src/Robot.h b/src/Robot.h index 4a6c227..33a82c2 100644 --- a/src/Robot.h +++ b/src/Robot.h @@ -11,6 +11,8 @@ #include "Common/Tester/Tester.h" #include +class Scheduler; + namespace tator { /** diff --git a/src/Subsystems/Claw.cpp b/src/Subsystems/Claw.cpp index 2e5c07c..2c97ed5 100644 --- a/src/Subsystems/Claw.cpp +++ b/src/Subsystems/Claw.cpp @@ -59,18 +59,17 @@ Claw::Claw(YAML::Node config) : rollerInwardSpeed = speeds["inward"].as(); rollerOutwardSpeed = speeds["outward"].as(); - ManualTester* manualTester = ManualTester::GetInstance(); - std::string name = GetName(); - manualTester->Add(name, "claw lift", liftMotor); - manualTester->Add(name, "claw lift", this->liftEncoder); - manualTester->Add(name, "claw rotation", rotationMotor, 0.3); - manualTester->Add(name, "claw rotation", this->rotationEncoder); - manualTester->Add(name, "home limit", this->homeLimit); - manualTester->Add(name, "upper limit", this->topLimit); - manualTester->Add(name, "left clamp", clampLeft); - manualTester->Add(name, "right clamp", clampRight); - manualTester->Add(name, "claw rollers", rollers); - manualTester->Add(name, "bin sensor", this->binSensor); + ManualTester::GetInstance()->Subsystem(GetName()) + .Add("claw lift", liftMotor) + .Add("claw lift", this->liftEncoder) + .Add("claw rotation", rotationMotor, 0.3) + .Add("claw rotation", this->rotationEncoder) + .Add("home limit", this->homeLimit) + .Add("upper limit", this->topLimit) + .Add("left clamp", clampLeft) + .Add("right clamp", clampRight) + .Add("claw rollers", rollers) + .Add("bin sensor", this->binSensor); } Claw::~Claw() { diff --git a/src/Subsystems/Drive.cpp b/src/Subsystems/Drive.cpp index 57ee416..6229b8b 100644 --- a/src/Subsystems/Drive.cpp +++ b/src/Subsystems/Drive.cpp @@ -32,13 +32,13 @@ Drive::Drive(YAML::Node config) : this->SetControlMode(Mode::pid); - ManualTester* manualTester = ManualTester::GetInstance(); - manualTester->Add(GetName(), "left drive", driveL); - manualTester->Add(GetName(), "right drive", driveR); - manualTester->Add(GetName(), "left drive", encoderL); - manualTester->Add(GetName(), "right drive", encoderR); - manualTester->Add(GetName(), "left drive", pidL, maxRPS); - manualTester->Add(GetName(), "right drive", pidR, maxRPS); + ManualTester::GetInstance()->Subsystem(GetName()) + .Add("left drive", driveL) + .Add("right drive", driveR) + .Add("left drive", encoderL) + .Add("right drive", encoderR) + .Add("left drive", pidL, maxRPS) + .Add("right drive", pidR, maxRPS); } Drive::~Drive() { diff --git a/src/Subsystems/Otto.cpp b/src/Subsystems/Otto.cpp index 3cd6cea..e302383 100644 --- a/src/Subsystems/Otto.cpp +++ b/src/Subsystems/Otto.cpp @@ -3,8 +3,10 @@ * @file Otto.cpp * @author Nick Hodes */ -#include #include "Otto.h" +#include +#include +#include #include "Common/Tester/ManualTester.h" #include "Common/Config/Kremlin.h" @@ -31,11 +33,11 @@ Otto::Otto(YAML::Node config) : usbCamera->OpenCamera(); CameraServer::GetInstance()->StartAutomaticCapture(usbCamera); - ManualTester* manualTester = ManualTester::GetInstance(); - manualTester->Add(GetName(), "auto switch 0", autoSwitch0); - manualTester->Add(GetName(), "auto switch 1", autoSwitch1); - manualTester->Add(GetName(), "auto switch 2", autoSwitch2); - manualTester->Add(GetName(), "gyro", gyro); + ManualTester::GetInstance()->Subsystem(GetName()) + .Add("auto switch 0", autoSwitch0) + .Add("auto switch 1", autoSwitch1) + .Add("auto switch 2", autoSwitch2) + .Add("gyro", gyro); gyro->Start(); } diff --git a/src/Subsystems/Shuttle.cpp b/src/Subsystems/Shuttle.cpp index bdfd1d3..73f2cc3 100644 --- a/src/Subsystems/Shuttle.cpp +++ b/src/Subsystems/Shuttle.cpp @@ -40,15 +40,14 @@ Shuttle::Shuttle(YAML::Node config) : totesHeld = 0; totesRatcheted = 0; - ManualTester* manualTester = ManualTester::GetInstance(); - std::string name = GetName(); - manualTester->Add(name, "tote sensor", toteSensor); - manualTester->Add(name, "lower limit", lowerLimit); - manualTester->Add(name, "upper limit", upperLimit); - manualTester->Add(name, "shuttle clamp", clampPiston); - manualTester->Add(name, "shuttle lift", liftMotor, 0.4); - manualTester->Add(name, "shuttle lift", liftEncoder); - manualTester->Add(name, "shuttle fingers", fingersPiston); + ManualTester::GetInstance()->Subsystem(GetName()) + .Add("tote sensor", toteSensor) + .Add("lower limit", lowerLimit) + .Add("upper limit", upperLimit) + .Add("shuttle clamp", clampPiston) + .Add("shuttle lift", liftMotor, 0.4) + .Add("shuttle lift", liftEncoder) + .Add("shuttle fingers", fingersPiston); } Shuttle::~Shuttle() { diff --git a/src/Subsystems/Thief.cpp b/src/Subsystems/Thief.cpp index c2bacb5..af5b6c8 100644 --- a/src/Subsystems/Thief.cpp +++ b/src/Subsystems/Thief.cpp @@ -13,9 +13,8 @@ Thief::Thief(YAML::Node config) : SubsystemBase("Thief") { piston = new Solenoid(config["port"].as()); - ManualTester* manualTester = ManualTester::GetInstance(); - std::string name = GetName(); - manualTester->Add(name, "thief piston", piston); + ManualTester::GetInstance()->Subsystem(GetName()) + .Add("thief piston", piston); } Thief::~Thief() { diff --git a/src/Subsystems/ToteFeed.cpp b/src/Subsystems/ToteFeed.cpp index ac634cf..8baba5d 100644 --- a/src/Subsystems/ToteFeed.cpp +++ b/src/Subsystems/ToteFeed.cpp @@ -16,11 +16,11 @@ ToteFeed::ToteFeed(YAML::Node config) : backSensor = new FixedField(ports["backSensor"]["channel"].as(), ports["backSensor"]["isNPN"].as()); flappers = new Talon(ports["flappers"].as()); - ManualTester* manualTester = ManualTester::GetInstance(); - std::string name = GetName(); - manualTester->Add(name, "rollerbed", rollers); - manualTester->Add(name, "bottom tote sensor", backSensor); - manualTester->Add(name, "intake rollers (flappers)", flappers); + + ManualTester::GetInstance()->Subsystem(GetName()) + .Add("rollerbed", rollers) + .Add("bottom tote sensor", backSensor) + .Add("intake rollers (flappers)", flappers); } ToteFeed::~ToteFeed() {