diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 6a36651..9006d53 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -175,6 +175,7 @@ set(headers drivingstatistics.h espnowfunctions.h esptexthelpers.h + feedbackemulator.h feedbackparser.h globals.h handbremse.h @@ -425,6 +426,7 @@ set(sources drivingstatistics.cpp espnowfunctions.cpp esptexthelpers.cpp + feedbackemulator.cpp feedbackparser.cpp globals.cpp handbremse.cpp diff --git a/main/can.cpp b/main/can.cpp index a4c982b..2327382 100644 --- a/main/can.cpp +++ b/main/can.cpp @@ -82,6 +82,11 @@ void initCan() void updateCan() { + if (configs.emulateFeedback.value()) + { + return; + } + for (int i = 0; i < 4; i++) if (!tryParseCanInput()) break; diff --git a/main/feedbackemulator.cpp b/main/feedbackemulator.cpp new file mode 100644 index 0000000..63f9346 --- /dev/null +++ b/main/feedbackemulator.cpp @@ -0,0 +1,55 @@ +#include "feedbackemulator.h" + +// 3rdparty lib includes +#include +#include + +// local includes +#include "globals.h" + +namespace feedbackemulator { +void init() +{} + +void update() +{ + if (!configs.emulateFeedback.value()) + { + return; + } + + for (auto &controller: controllers) + { + controller.feedback.left.dcLink = cpputils::randomNumber(-500, 500, espcpputils::esp_random_device{}); + controller.feedback.right.dcLink = cpputils::randomNumber(-500, 500, espcpputils::esp_random_device{}); + controller.feedback.left.speed = cpputils::randomNumber(-1000, 1000, espcpputils::esp_random_device{}); + controller.feedback.right.speed = cpputils::randomNumber(-1000, 1000, espcpputils::esp_random_device{}); + controller.feedback.left.error = cpputils::randomNumber(0, 4, espcpputils::esp_random_device{}); + controller.feedback.right.error = cpputils::randomNumber(0, 4, espcpputils::esp_random_device{}); + controller.feedback.left.angle = 0; + controller.feedback.right.angle = 0; + controller.feedback.left.dcPhaA = cpputils::randomNumber(-5, 5, espcpputils::esp_random_device{}); + controller.feedback.right.dcPhaA = cpputils::randomNumber(-5, 5, espcpputils::esp_random_device{}); + controller.feedback.left.dcPhaB = cpputils::randomNumber(-5, 5, espcpputils::esp_random_device{}); + controller.feedback.right.dcPhaB = cpputils::randomNumber(-5, 5, espcpputils::esp_random_device{}); + controller.feedback.left.dcPhaC = cpputils::randomNumber(-5, 5, espcpputils::esp_random_device{}); + controller.feedback.right.dcPhaC = cpputils::randomNumber(-5, 5, espcpputils::esp_random_device{}); + controller.feedback.left.chops = 0; + controller.feedback.right.chops = 0; + controller.feedback.left.hallA = true; + controller.feedback.left.hallB = false; + controller.feedback.left.hallC = true; + controller.feedback.right.hallA = false; + controller.feedback.right.hallB = true; + controller.feedback.right.hallC = false; + controller.feedback.batVoltage = cpputils::randomNumber(3000, 5000, espcpputils::esp_random_device{}); + controller.feedback.boardTemp = cpputils::randomNumber(200, 600, espcpputils::esp_random_device{}); + controller.feedback.left.id = 0; + controller.feedback.right.id = 0; + controller.feedback.left.iq = 0; + controller.feedback.right.iq = 0; + + controller.feedbackValid = true; + } +} +} // feedbackemulator diff --git a/main/feedbackemulator.h b/main/feedbackemulator.h new file mode 100644 index 0000000..6b1247b --- /dev/null +++ b/main/feedbackemulator.h @@ -0,0 +1,6 @@ +#pragma once + +namespace feedbackemulator { + void init(); + void update(); +} // namespace feedbackemulator diff --git a/main/newsettings.h b/main/newsettings.h index 8da5910..b900cca 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -399,7 +399,7 @@ public: ConfigWrapperLegacy brightness {255, DoReset, {}, "ledbrightness" }; ConfigWrapperLegacy enableAnimBlink {false, DoReset, {}, "enAnimBlink" }; ConfigWrapperLegacy otaMode {OtaAnimationModes::GreenProgressBar, DoReset, {}, "ledOtaAnim" }; - ConfigWrapperLegacy maxMilliamps {3000, DoReset, {}, "ledMaxMilliamps" }; + ConfigWrapperLegacy maxMilliamps {3000, DoReset, {}, "ledMaxMilliamps" }; ConfigWrapperLegacy enableVisualizeBlink {false, DoReset, {}, "enVisualBlink" }; std::array, 8> custom_color { ConfigWrapperLegacy {0, DoReset, {}, "ledCustomCol1" }, @@ -479,6 +479,7 @@ public: } feature; ConfigWrapperLegacy anhaenger_id {0, DoReset, {}, "anhaenger_id" }; + ConfigWrapperLegacy emulateFeedback {false, DoReset, {}, "emuFeedback" }; struct { ConfigWrapperLegacy bleEnabled {true, DoReset, {}, "bleEnabled" }; @@ -800,7 +801,8 @@ public: x(feature.udpcloud.isEnabled) \ x(feature.webserver.isEnabled) \ x(feature.webserver_disable_lock.isEnabled) \ - x(bleSettings.bleEnabled) + x(bleSettings.bleEnabled) \ + x(emulateFeedback) #define FEATURES(x) \ x(feature.ble) \ diff --git a/main/taskmanager.cpp b/main/taskmanager.cpp index b7eb6f2..ee3e8ef 100644 --- a/main/taskmanager.cpp +++ b/main/taskmanager.cpp @@ -43,6 +43,7 @@ #include "dnsannounce.h" #include "screens.h" #include "utils.h" +#include "feedbackemulator.h" using namespace std::chrono_literals; @@ -83,12 +84,13 @@ BobbySchedulerTask schedulerTasksArr[] { BobbySchedulerTask { "ledstrip", initLedStrip, updateLedStrip, 30ms, false }, BobbySchedulerTask { "espnow", espnow::initESPNow, espnow::handle, 100ms, false }, BobbySchedulerTask { "cloud", initCloud, updateCloud, 50ms, false }, - BobbySchedulerTask { "udpcloud", udpCloudInit, udpCloudUpdate, 50ms, false }, + BobbySchedulerTask { "udpcloud", udpCloudInit, udpCloudUpdate, 25ms, false }, BobbySchedulerTask { "drivingmode", initDrivingMode, updateDrivingMode, 20ms, false }, BobbySchedulerTask { "drivingstatistics", initStatistics, calculateStatistics, 100ms, false }, BobbySchedulerTask { "dnsannounce", init_dns_announce, handle_dns_announce, 100ms, false }, BobbySchedulerTask { "updateDisp", not_needed, updateDisplay, 20ms, true }, BobbySchedulerTask { "redrawDisp", not_needed, redrawDisplay, 20ms, true }, + BobbySchedulerTask { "feedbackEmulator", feedbackemulator::init, feedbackemulator::update, 500ms, false}, }; } // namespace