Files
bobbycar-boardcomputer-firm…/main/debugtexthelpers.h

92 lines
9.5 KiB
C
Raw Permalink Normal View History

2020-05-19 11:41:35 +02:00
#pragma once
2021-06-28 21:43:20 +02:00
// 3rdparty lib includes
#include <fmt/core.h>
// local includes
2020-05-19 11:41:35 +02:00
#include "textinterface.h"
#include "globals.h"
#include "utils.h"
namespace {
2020-06-07 22:28:27 +02:00
template<typename controller>
2020-05-19 11:41:35 +02:00
struct ControllerTexts
{
ControllerTexts() = delete;
~ControllerTexts() = delete;
struct BuzzerFreqText : public virtual TextInterface { public: std::string text() const override { return fmt::format("buzzerFreq: {}", controller::get().command.buzzer.freq); } };
struct BuzzerPatternText : public virtual TextInterface { public: std::string text() const override { return fmt::format("buzzerPattern: {}", controller::get().command.buzzer.pattern); } };
struct PoweroffText : public virtual TextInterface { public: std::string text() const override { return fmt::format("poweroff: {}", controller::get().command.poweroff); } };
struct LedText : public virtual TextInterface { public: std::string text() const override { return fmt::format("led: {}", controller::get().command.led); } };
2020-05-19 11:41:35 +02:00
2020-06-22 20:20:39 +02:00
private:
2021-06-28 10:55:50 +02:00
struct LeftCommandGetter { static const bobbycar::protocol::serial::MotorState &get() { return controller::get().command.left; } };
struct RightCommandGetter { static const bobbycar::protocol::serial::MotorState &get() { return controller::get().command.right; } };
2020-05-19 11:41:35 +02:00
2020-06-22 20:20:39 +02:00
template<typename MotorStateGetter>
struct CommandTexts
2020-05-19 11:41:35 +02:00
{
2020-06-22 20:20:39 +02:00
CommandTexts() = delete;
~CommandTexts() = delete;
2020-05-19 11:41:35 +02:00
struct EnableText : public virtual TextInterface { public: std::string text() const override { return fmt::format("enable: {}", MotorStateGetter::get().enable); } };
struct PwmText : public virtual TextInterface { public: std::string text() const override { return fmt::format("pwm: {}", MotorStateGetter::get().pwm); } };
struct CtrlTypText : public virtual TextInterface { public: std::string text() const override { return fmt::format("ctrlTyp: {}", to_string(MotorStateGetter::get().ctrlTyp)); } };
struct CtrlModText : public virtual TextInterface { public: std::string text() const override { return fmt::format("ctrlMod: {}", to_string(MotorStateGetter::get().ctrlMod)); } };
struct IMotMaxText : public virtual TextInterface { public: std::string text() const override { return fmt::format("iMotMax: {}", MotorStateGetter::get().iMotMax); } };
struct IDcMaxText : public virtual TextInterface { public: std::string text() const override { return fmt::format("iDcMax: {}", MotorStateGetter::get().iDcMax); } };
struct NMotMaxText : public virtual TextInterface { public: std::string text() const override { return fmt::format("nMotMax: {}", MotorStateGetter::get().nMotMax); } };
struct FieldWeakMaxText : public virtual TextInterface { public: std::string text() const override { return fmt::format("fieldWeakMax: {}", MotorStateGetter::get().fieldWeakMax); } };
struct PhaseAdvMaxText : public virtual TextInterface { public: std::string text() const override { return fmt::format("phaseAdvMax: {}", MotorStateGetter::get().phaseAdvMax); } };
struct CruiseCtrlEnaText : public virtual TextInterface { public: std::string text() const override { return fmt::format("cruiseCtrlEna: {}", MotorStateGetter::get().cruiseCtrlEna); } };
struct NCruiseMotTgtText : public virtual TextInterface { public: std::string text() const override { return fmt::format("nCruiseMotTgt: {}", MotorStateGetter::get().nCruiseMotTgt); } };
2020-05-19 11:41:35 +02:00
};
2020-06-22 20:20:39 +02:00
public:
using LeftCommand = CommandTexts<LeftCommandGetter>;
using RightCommand = CommandTexts<LeftCommandGetter>;
//struct BatVoltageText : public virtual TextInterface { public: std::string text() const override { std::string line{"batVoltage: "}; if (controller::get().feedbackValid) line += std::to_string(controller::get().feedback.batVoltage); return line; } };
2021-11-02 01:43:58 +01:00
struct BatVoltageFixedText : public virtual TextInterface { public: std::string text() const override { std::string line{"batVoltage: "}; if (controller::get().feedbackValid) line += fmt::format("{:.2f}V", controller::get().getCalibratedVoltage()); return line; } };
//struct BoardTempText : public virtual TextInterface { public: std::string text() const override { std::string line{"boardTemp: "}; if (controller::get().feedbackValid) line += std::to_string(controller::get().feedback.boardTemp); return line; } };
2021-06-28 21:43:20 +02:00
struct BoardTempFixedText : public virtual TextInterface { public: std::string text() const override { std::string line{"boardTemp: "}; if (controller::get().feedbackValid) line += fmt::format("{:.2f}C", fixBoardTemp(controller::get().feedback.boardTemp)); return line; } };
struct TimeoutCntSerialText : public virtual TextInterface { public: std::string text() const override { std::string line{"timeoutCntSerial: "}; if (controller::get().feedbackValid) line += std::to_string(controller::get().feedback.timeoutCntSerial); return line; } };
2020-05-19 11:41:35 +02:00
2020-06-22 20:20:39 +02:00
private:
2021-06-28 10:55:50 +02:00
struct LeftFeedbackGetter { static const bobbycar::protocol::serial::MotorFeedback &get() { return controller::get().feedback.left; } };
struct RightFeedbackGetter { static const bobbycar::protocol::serial::MotorFeedback &get() { return controller::get().feedback.right; } };
2020-05-19 11:41:35 +02:00
2020-06-22 20:20:39 +02:00
template<typename MotorFeedbackGetter>
struct FeedbackTexts
2020-05-19 11:41:35 +02:00
{
2020-06-22 20:20:39 +02:00
FeedbackTexts() = delete;
~FeedbackTexts() = delete;
2020-05-19 11:41:35 +02:00
struct AngleText : public virtual TextInterface { public: std::string text() const override { std::string line{"angle: "}; if (controller::get().feedbackValid) line += std::to_string(MotorFeedbackGetter::get().angle); return line; } };
//struct SpeedText : public virtual TextInterface { public: std::string text() const override { std::string line{"speed: "}; if (controller::get().feedbackValid) line += std::to_string(MotorFeedbackGetter::get().speed); return line; } };
struct SpeedKmhText : public virtual TextInterface { public: std::string text() const override { std::string line{"speed: "}; if (controller::get().feedbackValid) line += fmt::format("{:.2f}kmh", convertToKmh(MotorFeedbackGetter::get().speed)); return line; } };
struct ErrorText : public virtual TextInterface { public: std::string text() const override { std::string line{"error: "}; if (controller::get().feedbackValid) line += std::to_string(MotorFeedbackGetter::get().error); return line; } };
//struct DcLinkText : public virtual TextInterface { public: std::string text() const override { std::string line{"dcLink: "}; if (controller::get().feedbackValid) line += std::to_string(MotorFeedbackGetter::get().dcLink); return line; } };
2021-06-28 21:43:20 +02:00
struct DcLinkFixedText : public virtual TextInterface { public: std::string text() const override { std::string line{"dcLink: "}; if (controller::get().feedbackValid) line += fmt::format("{:.2f}A", fixCurrent(MotorFeedbackGetter::get().dcLink)); return line; } };
//struct DcPhaAText : public virtual TextInterface { public: std::string text() const override { std::string line{"dcPhaA: "}; if (controller::get().feedbackValid) line += std::to_string(MotorFeedbackGetter::get().dcPhaA); return line; } };
2021-06-28 21:43:20 +02:00
struct DcPhaAFixedText : public virtual TextInterface { public: std::string text() const override { std::string line{"dcPhaA: "}; if (controller::get().feedbackValid) line += fmt::format("{:.2f}A", fixCurrent(MotorFeedbackGetter::get().dcPhaA)); return line; } };
//struct DcPhaBText : public virtual TextInterface { public: std::string text() const override { std::string line{"dcPhaB: "}; if (controller::get().feedbackValid) line += std::to_string(MotorFeedbackGetter::get().dcPhaB); return line; } };
2021-06-28 21:43:20 +02:00
struct DcPhaBFixedText : public virtual TextInterface { public: std::string text() const override { std::string line{"dcPhaB: "}; if (controller::get().feedbackValid) line += fmt::format("{:.2f}A", fixCurrent(MotorFeedbackGetter::get().dcPhaB)); return line; } };
//struct DcPhaCText : public virtual TextInterface { public: std::string text() const override { std::string line{"dcPhaC: "}; if (controller::get().feedbackValid) line += std::to_string(MotorFeedbackGetter::get().dcPhaC); return line; } };
2021-06-28 21:43:20 +02:00
struct DcPhaCFixedText : public virtual TextInterface { public: std::string text() const override { std::string line{"dcPhaC: "}; if (controller::get().feedbackValid) line += fmt::format("{:.2f}A", fixCurrent(MotorFeedbackGetter::get().dcPhaC)); return line; } };
struct ChopsText : public virtual TextInterface { public: std::string text() const override { std::string line{"chops: "}; if (controller::get().feedbackValid) line += std::to_string(MotorFeedbackGetter::get().chops); return line; } };
struct HallText : public virtual TextInterface { public: std::string text() const override { std::string line{"hall: "}; if (controller::get().feedbackValid) line += hallString(MotorFeedbackGetter::get()); return line; } };
2022-09-17 17:38:53 +02:00
struct IdText : public virtual TextInterface { public: std::string text() const override { std::string line{"id: "}; if (controller::get().feedbackValid) line += fmt::format("{:.2f}A", fixCurrent(MotorFeedbackGetter::get().id)); return line; } };
struct IqText : public virtual TextInterface { public: std::string text() const override { std::string line{"iq: "}; if (controller::get().feedbackValid) line += fmt::format("{:.2f}A", fixCurrent(MotorFeedbackGetter::get().iq)); return line; } };
2020-05-19 11:41:35 +02:00
};
2020-06-22 20:20:39 +02:00
public:
using LeftFeedback = FeedbackTexts<LeftFeedbackGetter>;
using RightFeedback = FeedbackTexts<RightFeedbackGetter>;
2020-05-19 11:41:35 +02:00
};
2020-06-07 22:28:27 +02:00
using FrontTexts = ControllerTexts<FrontControllerGetter>;
using BackTexts = ControllerTexts<BackControllerGetter>;
2020-05-19 11:41:35 +02:00
}