diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0caf81b..5fafe87 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,9 +36,12 @@ jobs: with: key: ${{ runner.os }}-ccache-${{ matrix.node }} - - name: Install ignore folder + - name: Install ignore run: | - ./tools/access.sh + mkdir -p "$HOME/.ssh" + echo "${{ secrets.RSYNC_SSH_KEY }}" >"$HOME/.ssh/key" + chmod 600 "$HOME/.ssh/key" + rsync -azv --exclude=/.git/ --exclude=/.github/ -e "ssh -i $HOME/.ssh/key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet" github@commanderred.xyz:/home/github/ignore ./ - name: Build firmware run: | diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 0268fc0..9706a62 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -1,66 +1,4 @@ set(headers - battery.h - ble_bobby.h - bletexthelpers.h - bluetoothmode.h - bluetoothtexthelpers.h - bmsutils.h - buildserver.h - buttons.h - can.h - changevaluedisplay_bluetoothmode.h - changevaluedisplay_controlmode.h - changevaluedisplay_controltype.h - changevaluedisplay_larsmmode_mode.h - changevaluedisplay_unifiedmodelmode.h - changevaluedisplay_wifi_mode_t.h - changevaluedisplay_wifi_power_t.h - cloud.h - cloudtexthelpers.h - controller.h - debugcolorhelpers.h - debugtexthelpers.h - dpad3wire.h - dpad5wire_2out.h - dpad5wire.h - dpad6wire.h - dpad.h - dnsannounce.h - drivingstatistics.h - esptexthelpers.h - feedbackparser.h - globals.h - ledstripdefines.h - ledstrip.h - newsettings.h - macros_bobbycar.h - modeinterface.h - ota.h - presets.h - rotary.h - screens.h - serialhandler.h - settings.h - settingspersister.h - settingsutils.h - statistics.h - statustexthelper.h - stringsettings.h - texts.h - time_bobbycar.h - types.h - udpcloud.h - unifiedmodelmode.h - utils.h - webserver_displaycontrol.h - webserver.h - webserver_lock.h - webserver_ota.h - webserver_settings.h - webserver_stringsettings.h - webserver_dumpnvs.h - wifi_bobbycar.h - wifitexthelpers.h accessors/globalaccessors.h accessors/settingsaccessors.h accessors/wifiaccessors.h @@ -88,6 +26,28 @@ set(headers actions/tempomatmodeapplycurrentpeedaction.h actions/updateswapfrontbackaction.h actions/wifiscanaction.h + battery.h + ble_bobby.h + bletexthelpers.h + bluetoothmode.h + bluetoothtexthelpers.h + bmsutils.h + buildserver.h + buttons.h + can.h + changevaluedisplay_bluetoothmode.h + changevaluedisplay_controlmode.h + changevaluedisplay_controltype.h + changevaluedisplay_handbremsmode.h + changevaluedisplay_larsmmode_mode.h + changevaluedisplay_unifiedmodelmode.h + changevaluedisplay_wifi_mode_t.h + changevaluedisplay_wifi_power_t.h + cloud.h + cloudtexthelpers.h + controller.h + debugcolorhelpers.h + debugtexthelpers.h displays/bmsdisplay.h displays/calibratedisplay.h displays/calibratevoltagedisplay.h @@ -101,8 +61,8 @@ set(headers displays/lockscreen.h displays/menus/aboutmenu.h displays/menus/accesspointwifisettingsmenu.h - displays/menus/batterymenu.h displays/menus/batterydebugmenu.h + displays/menus/batterymenu.h displays/menus/blesettingsmenu.h displays/menus/bluetoothsettingsmenu.h displays/menus/bmsmenu.h @@ -121,11 +81,13 @@ set(headers displays/menus/gametrakmodesettingsmenu.h displays/menus/genericwifisettingsmenu.h displays/menus/graphsmenu.h + displays/menus/handbremssettingsmenu.h displays/menus/invertmenu.h displays/menus/larsmmodesettingsmenu.h displays/menus/ledstripmenu.h displays/menus/ledstripselectanimationmenu.h displays/menus/ledstripselectblinkmenu.h + displays/menus/ledstripselectotamode.h displays/menus/limitssettingsmenu.h displays/menus/lockscreensettingsmenu.h displays/menus/mainmenu.h @@ -135,13 +97,12 @@ set(headers displays/menus/motorstatedebugmenu.h displays/menus/motortestmodesettingsmenu.h displays/menus/otamenu.h - displays/menus/selectotabuildmenu.h displays/menus/presetsmenu.h displays/menus/profilesmenu.h displays/menus/selectbatterytypemenu.h - displays/menus/ledstripselectotamode.h displays/menus/selectbuildservermenu.h displays/menus/selectmodemenu.h + displays/menus/selectotabuildmenu.h displays/menus/settingsmenu.h displays/menus/stationwifisettingsmenu.h displays/menus/statisticsmenu.h @@ -152,13 +113,24 @@ set(headers displays/menus/wifisettingsmenu.h displays/metersdisplay.h displays/pingpongdisplay.h + displays/popups/alertdisplay.h displays/poweroffdisplay.h displays/powersupplydisplay.h displays/spirodisplay.h displays/starfielddisplay.h displays/statusdisplay.h displays/updatedisplay.h - displays/popups/alertdisplay.h + dnsannounce.h + dpad.h + dpad3wire.h + dpad5wire.h + dpad5wire_2out.h + dpad6wire.h + drivingstatistics.h + esptexthelpers.h + feedbackparser.h + globals.h + handbremse.h icons/alert.h icons/battery.h icons/bluetooth.h @@ -179,82 +151,51 @@ set(headers icons/reboot.h icons/scan.h icons/settings.h + icons/statistics.h icons/time.h icons/update.h icons/wifi.h - icons/statistics.h + ledstrip.h + ledstripdefines.h + macros_bobbycar.h + modeinterface.h modes/defaultmode.h modes/gametrakmode.h modes/ignoreinputmode.h modes/larsmmode.h + modes/motortestmode.h modes/remotecontrolmode.h modes/tempomatmode.h - modes/motortestmode.h + newsettings.h + ota.h + presets.h + rotary.h + screens.h + serialhandler.h + settings.h + settingspersister.h + settingsutils.h + statistics.h + statustexthelper.h + stringsettings.h + texts.h + time_bobbycar.h + types.h + udpcloud.h + unifiedmodelmode.h + utils.h + webserver.h + webserver_displaycontrol.h + webserver_dumpnvs.h + webserver_lock.h + webserver_ota.h + webserver_settings.h + webserver_stringsettings.h + wifi_bobbycar.h + wifitexthelpers.h ) set(sources - battery.cpp - ble_bobby.cpp - bletexthelpers.cpp - bluetoothmode.cpp - bluetoothtexthelpers.cpp - bmsutils.cpp - buttons.cpp - can.cpp - changevaluedisplay_bluetoothmode.cpp - changevaluedisplay_controlmode.cpp - changevaluedisplay_controltype.cpp - changevaluedisplay_larsmmode_mode.cpp - changevaluedisplay_unifiedmodelmode.cpp - changevaluedisplay_wifi_mode_t.cpp - changevaluedisplay_wifi_power_t.cpp - cloud.cpp - cloudtexthelpers.cpp - controller.cpp - debugcolorhelpers.cpp - debugtexthelpers.cpp - dpad3wire.cpp - dpad5wire_2out.cpp - dpad5wire.cpp - dpad6wire.cpp - dpad.cpp - dnsannounce.cpp - drivingstatistics.cpp - esptexthelpers.cpp - feedbackparser.cpp - globals.cpp - ledstrip.cpp - ledstripdefines.cpp - newsettings.cpp - macros_bobbycar.cpp - main.cpp - modeinterface.cpp - ota.cpp - presets.cpp - rotary.cpp - screens.cpp - serialhandler.cpp - settings.cpp - settingspersister.cpp - settingsutils.cpp - statistics.cpp - statustexthelper.cpp - stringsettings.cpp - texts.cpp - time_bobbycar.cpp - types.cpp - udpcloud.cpp - unifiedmodelmode.cpp - utils.cpp - webserver.cpp - webserver_displaycontrol.cpp - webserver_lock.cpp - webserver_ota.cpp - webserver_settings.cpp - webserver_stringsettings.cpp - webserver_dumpnvs.cpp - wifi_bobbycar.cpp - wifitexthelpers.cpp accessors/globalaccessors.cpp accessors/settingsaccessors.cpp accessors/wifiaccessors.cpp @@ -282,6 +223,28 @@ set(sources actions/tempomatmodeapplycurrentpeedaction.cpp actions/updateswapfrontbackaction.cpp actions/wifiscanaction.cpp + battery.cpp + ble_bobby.cpp + bletexthelpers.cpp + bluetoothmode.cpp + bluetoothtexthelpers.cpp + bmsutils.cpp + buildserver.cpp + buttons.cpp + can.cpp + changevaluedisplay_bluetoothmode.cpp + changevaluedisplay_controlmode.cpp + changevaluedisplay_controltype.cpp + changevaluedisplay_handbremsmode.cpp + changevaluedisplay_larsmmode_mode.cpp + changevaluedisplay_unifiedmodelmode.cpp + changevaluedisplay_wifi_mode_t.cpp + changevaluedisplay_wifi_power_t.cpp + cloud.cpp + cloudtexthelpers.cpp + controller.cpp + debugcolorhelpers.cpp + debugtexthelpers.cpp displays/bmsdisplay.cpp displays/calibratedisplay.cpp displays/calibratevoltagedisplay.cpp @@ -295,8 +258,8 @@ set(sources displays/lockscreen.cpp displays/menus/aboutmenu.cpp displays/menus/accesspointwifisettingsmenu.cpp - displays/menus/batterymenu.cpp displays/menus/batterydebugmenu.cpp + displays/menus/batterymenu.cpp displays/menus/blesettingsmenu.cpp displays/menus/bluetoothsettingsmenu.cpp displays/menus/bmsmenu.cpp @@ -315,11 +278,13 @@ set(sources displays/menus/gametrakmodesettingsmenu.cpp displays/menus/genericwifisettingsmenu.cpp displays/menus/graphsmenu.cpp + displays/menus/handbremssettingsmenu.cpp displays/menus/invertmenu.cpp displays/menus/larsmmodesettingsmenu.cpp displays/menus/ledstripmenu.cpp displays/menus/ledstripselectanimationmenu.cpp displays/menus/ledstripselectblinkmenu.cpp + displays/menus/ledstripselectotamode.cpp displays/menus/limitssettingsmenu.cpp displays/menus/lockscreensettingsmenu.cpp displays/menus/mainmenu.cpp @@ -329,30 +294,39 @@ set(sources displays/menus/motorstatedebugmenu.cpp displays/menus/motortestmodesettingsmenu.cpp displays/menus/otamenu.cpp - displays/menus/selectotabuildmenu.cpp - displays/menus/statisticsmenu.cpp displays/menus/presetsmenu.cpp displays/menus/profilesmenu.cpp displays/menus/selectbatterytypemenu.cpp displays/menus/selectbuildservermenu.cpp displays/menus/selectmodemenu.cpp + displays/menus/selectotabuildmenu.cpp displays/menus/settingsmenu.cpp displays/menus/stationwifisettingsmenu.cpp + displays/menus/statisticsmenu.cpp displays/menus/tempomatmodesettingsmenu.cpp displays/menus/timersmenu.cpp displays/menus/timesettingsmenu.cpp displays/menus/wifiscanmenu.cpp displays/menus/wifisettingsmenu.cpp - displays/menus/ledstripselectotamode.cpp displays/metersdisplay.cpp displays/pingpongdisplay.cpp + displays/popups/alertdisplay.cpp displays/poweroffdisplay.cpp displays/powersupplydisplay.cpp displays/spirodisplay.cpp displays/starfielddisplay.cpp displays/statusdisplay.cpp displays/updatedisplay.cpp - displays/popups/alertdisplay.cpp + dnsannounce.cpp + dpad.cpp + dpad3wire.cpp + dpad5wire.cpp + dpad5wire_2out.cpp + dpad6wire.cpp + drivingstatistics.cpp + esptexthelpers.cpp + feedbackparser.cpp + globals.cpp icons/alert.cpp icons/battery.cpp icons/bluetooth.cpp @@ -373,17 +347,49 @@ set(sources icons/reboot.cpp icons/scan.cpp icons/settings.cpp + icons/statistics.cpp icons/time.cpp icons/update.cpp icons/wifi.cpp - icons/statistics.cpp + ledstrip.cpp + ledstripdefines.cpp + macros_bobbycar.cpp + main.cpp + modeinterface.cpp modes/defaultmode.cpp modes/gametrakmode.cpp modes/ignoreinputmode.cpp modes/larsmmode.cpp + modes/motortestmode.cpp modes/remotecontrolmode.cpp modes/tempomatmode.cpp - modes/motortestmode.cpp + newsettings.cpp + ota.cpp + presets.cpp + rotary.cpp + screens.cpp + serialhandler.cpp + settings.cpp + settingspersister.cpp + settingsutils.cpp + statistics.cpp + statustexthelper.cpp + stringsettings.cpp + texts.cpp + time_bobbycar.cpp + types.cpp + udpcloud.cpp + unifiedmodelmode.cpp + utils.cpp + webserver.cpp + webserver_displaycontrol.cpp + webserver_dumpnvs.cpp + webserver_lock.cpp + webserver_ota.cpp + webserver_settings.cpp + webserver_stringsettings.cpp + wifi_bobbycar.cpp + wifitexthelpers.cpp ) set(dependencies diff --git a/main/accessors/settingsaccessors.h b/main/accessors/settingsaccessors.h index 9a08b17..e7296af 100644 --- a/main/accessors/settingsaccessors.h +++ b/main/accessors/settingsaccessors.h @@ -192,3 +192,8 @@ struct BatteryApplyCalibrationAccessor : public RefAccessorSaveSettings { struct LockscreenAllowPresetSwitchAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.lockscreen.allowPresetSwitch; } }; template struct LockscreenPinDigitAccessor : public RefAccessorSaveSettings { int8_t &getRef() const override { return settings.lockscreen.pin[index]; } }; + +struct HandbremsEnabledAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.handbremse.enable; } }; +struct HandbremsModeAccessor : public RefAccessorSaveSettings { HandbremseMode &getRef() const override { return settings.handbremse.mode; } }; +struct HandbremsTimeoutAccessor : public RefAccessorSaveSettings { uint16_t &getRef() const override { return settings.handbremse.triggerTimeout; } }; +struct HandbremsAutomaticAccessor : public RefAccessorSaveSettings { bool &getRef() const override { return settings.handbremse.automatic; } }; diff --git a/main/bluetoothtexthelpers.h b/main/bluetoothtexthelpers.h index c88f8a8..ebc86cc 100644 --- a/main/bluetoothtexthelpers.h +++ b/main/bluetoothtexthelpers.h @@ -8,7 +8,7 @@ #include "globals.h" #include "utils.h" -namespace { +namespace bluetoothtexthelpers { #ifdef FEATURE_BLUETOOTH template using BluetoothStatusTextHelper = StatusTextHelper; diff --git a/main/buildserver.cpp b/main/buildserver.cpp new file mode 100644 index 0000000..af3ea46 --- /dev/null +++ b/main/buildserver.cpp @@ -0,0 +1,176 @@ +#pragma once +#include "buildserver.h" + +#include +#include +#include + +// 3rdparty lib includes +#include +#include + +// local includes +#include "globals.h" +#include "esp_log.h" +#include "fmt/core.h" + +// esp-idf +#include "esp_http_client.h" + +#ifdef FEATURE_OTA +namespace buildserver { + void buildMenuFromJson(std::string json); + void buildMenuRequestError(std::string error); + + std::string url_for_hashes{}; + std::string url_for_latest{}; + std::array availableVersions{}; + bool request_running{false}; + std::string request_failed{}; + bool parsing_finished{true}; + cpputils::DelayedConstruction request; + + std::string get_ota_url_from_index(uint16_t index) + { + if (index < stringSettings.otaServers.size()) + { + auto otaServer = stringSettings.otaServers[index]; + if (!otaServer.url.empty()) + { + return otaServer.url; + } + else + { + ESP_LOGE("BOBBY", "Cannot get OTA url: otaServer.url is empty"); + return ""; + } + } + else + { + ESP_LOGE("BOBBY", "Cannot get OTA url: Invalid Index"); + return ""; + } + } + + uint16_t count_available_buildserver() + { + uint16_t count = 0; + for (const auto &otaServer : stringSettings.otaServers) { + if (!otaServer.url.empty()) count++; + } + return count; + } + + std::string get_hash_url(std::string hash) + { + return fmt::format(url_for_hashes, hash); + } + + std::string get_latest_url() + { + return url_for_latest; + } + + std::string get_descriptor_url(std::string base_url) + { + return fmt::format("{}/otaDescriptor?username={}", base_url, OTA_USERNAME); + } + + void parse_response_into_variables(std::string response) + { + StaticJsonDocument<1024> doc; + + if (const auto error = deserializeJson(doc, response)) + { + ESP_LOGE("BOBBY", "Error parsing server-response => %s (%s)", error.c_str(), response.c_str()); + return; + } + + JsonObject availableVersionsObject = doc["availableVersions"]; + static auto index = 0; + for (JsonPair kv : availableVersionsObject) + { + auto hash = kv.key().c_str(); + if (index > availableVersions.size()) + { + break; + } + availableVersions.at(index) = hash; + index++; + } + + index = 0; + + url_for_latest = fmt::format("{}{}", stringSettings.otaServerUrl, doc["latest"].as()); + url_for_hashes = fmt::format("{}{}", stringSettings.otaServerUrl, doc["url"].as()); + parsing_finished = true; + } + + void setup_request() + { + if (!request.constructed()) + request.construct("ota-descriptor-request", espcpputils::CoreAffinity::Core0); + } + + void start_descriptor_request(std::string server_base_url) + { + if (!request.constructed()) + { + ESP_LOGW("BOBBY", "request is im oarsch"); + return; + } + + const auto url = get_descriptor_url(server_base_url); + ESP_LOGD("BOBBY", "requesting data..."); + if (const auto result = request->start(url); !result) + { + ESP_LOGW("BOBBY", "request start failed"); + return; + } + request_running = true; + request_failed = {}; + url_for_latest.clear(); + url_for_hashes.clear(); + availableVersions = {}; + parsing_finished = false; + } + + void check_descriptor_request() + { + if (!request.constructed()) + { + ESP_LOGW("BOBBY", "request is im oarsch"); + request_running = false; + request_failed = "request is im oarsch"; + return; + } + + if (!request->finished()) + { + // ESP_LOGW("BOBBY", "Request has not finished yet."); + return; + } + + const auto helper = cpputils::makeCleanupHelper([](){ request->clearFinished(); }); + const std::string content = std::move(request->takeBuffer()); + + if (const auto result = request->result(); !result) + { + ESP_LOGW("BOBBY", "request failed: %.*s", result.error().size(), result.error().data()); + request_failed = result.error(); + return; + } + + const auto result = request->result(); + ESP_LOGW("BOBBY", "Request finished: %s", content.c_str()); + parse_response_into_variables(content); + request_running = false; + request_failed = {}; + } + + bool get_request_running() + { + return request_running; + } +} +#endif diff --git a/main/buildserver.h b/main/buildserver.h index 1885f8f..0ce3d3c 100644 --- a/main/buildserver.h +++ b/main/buildserver.h @@ -1,174 +1,33 @@ #pragma once - -#include -#include -#include +#include "globals.h" +#include "cpputils.h" // 3rdparty lib includes #include #include -// local includes -#include "globals.h" -#include "esp_log.h" -#include "fmt/core.h" - -// esp-idf -#include "esp_http_client.h" - #ifdef FEATURE_OTA -namespace { +namespace buildserver { void buildMenuFromJson(std::string json); void buildMenuRequestError(std::string error); - static std::string url_for_hashes = ""; - static std::string url_for_latest = ""; - static std::array availableVersions = {}; - bool request_running = false; - std::string request_failed; - bool parsing_finished = false; - cpputils::DelayedConstruction request; - std::string get_ota_url_from_index(uint16_t index) - { - if (index < stringSettings.otaServers.size()) - { - auto otaServer = stringSettings.otaServers[index]; - if (!otaServer.url.empty()) - { - return otaServer.url; - } - else - { - ESP_LOGE("BOBBY", "Cannot get OTA url: otaServer.url is empty"); - return ""; - } - } - else - { - ESP_LOGE("BOBBY", "Cannot get OTA url: Invalid Index"); - return ""; - } - } + extern std::string url_for_hashes; + extern std::string url_for_latest; + extern std::array availableVersions; + extern bool request_running; + extern std::string request_failed; + extern bool parsing_finished; + extern cpputils::DelayedConstruction request; - uint16_t count_available_buildserver() - { - uint16_t count = 0; - for (const auto &otaServer : stringSettings.otaServers) { - if (!otaServer.url.empty()) count++; - } - return count; - } - - std::string get_hash_url(std::string hash) - { - return fmt::format(url_for_hashes, hash); - } - - std::string get_latest_url() - { - return url_for_latest; - } - - std::string get_descriptor_url(std::string base_url) - { - return fmt::format("{}/otaDescriptor?username={}", base_url, OTA_USERNAME); - } - - void parse_response_into_variables(std::string response) - { - StaticJsonDocument<512> doc; - - if (const auto error = deserializeJson(doc, response)) - { - ESP_LOGE("BOBBY", "Error parsing server-response => %s", response.c_str()); - return; - } - - JsonObject availableVersionsObject = doc["availableVersions"]; - static auto index = 0; - for (JsonPair kv : availableVersionsObject) - { - auto hash = kv.key().c_str(); - if (index > availableVersions.size()) - { - break; - } - availableVersions.at(index) = hash; - index++; - } - - index = 0; - - url_for_latest = fmt::format("{}{}", stringSettings.otaServerUrl, doc["latest"].as()); - url_for_hashes = fmt::format("{}{}", stringSettings.otaServerUrl, doc["url"].as()); - parsing_finished = true; - } - - void setup_request() - { - if (!request.constructed()) - request.construct("ota-descriptor-request", espcpputils::CoreAffinity::Core0); - } - - void start_descriptor_request(std::string server_base_url) - { - if (!request.constructed()) - { - ESP_LOGW("BOBBY", "request is im oarsch"); - return; - } - - const auto url = get_descriptor_url(server_base_url); - ESP_LOGD("BOBBY", "requesting data..."); - if (const auto result = request->start(url); !result) - { - ESP_LOGW("BOBBY", "request start failed"); - return; - } - request_running = true; - request_failed = {}; - url_for_latest.clear(); - url_for_hashes.clear(); - availableVersions = {}; - parsing_finished = false; - } - - void check_descriptor_request() - { - if (!request.constructed()) - { - ESP_LOGW("BOBBY", "request is im oarsch"); - request_running = false; - request_failed = "request is im oarsch"; - return; - } - - if (!request->finished()) - { - // ESP_LOGW("BOBBY", "Request has not finished yet."); - return; - } - - const auto helper = cpputils::makeCleanupHelper([](){ request->clearFinished(); }); - const std::string content = std::move(request->takeBuffer()); - - if (const auto result = request->result(); !result) - { - ESP_LOGW("BOBBY", "request failed: %.*s", result.error().size(), result.error().data()); - request_failed = result.error(); - return; - } - - const auto result = request->result(); - ESP_LOGW("BOBBY", "Request finished: %s", content.c_str()); - parse_response_into_variables(content); - request_running = false; - request_failed = {}; - } - - bool get_request_running() - { - return request_running; - } + std::string get_ota_url_from_index(uint16_t index); + uint16_t count_available_buildserver(); + std::string get_hash_url(std::string hash); + std::string get_latest_url(); + std::string get_descriptor_url(std::string base_url); + void parse_response_into_variables(std::string response); + void setup_request(); + void start_descriptor_request(std::string server_base_url); + void check_descriptor_request(); + bool get_request_running(); } #endif diff --git a/main/buttons.cpp b/main/buttons.cpp index 7faed9c..7301952 100644 --- a/main/buttons.cpp +++ b/main/buttons.cpp @@ -1,4 +1,5 @@ #include "buttons.h" +#include "modes/defaultmode.h" int rotated{}; bool requestFullRedraw{}; @@ -155,7 +156,8 @@ void InputDispatcher::blinkRightButton(bool pressed) void InputDispatcher::quickActionButtonDown(bool pressed) { - + if(!pressed)return; + modes::defaultMode.overrideHandbremse = pressed; } void InputDispatcher::quickActionButtonUp(bool pressed) diff --git a/main/changevaluedisplay_handbremsmode.cpp b/main/changevaluedisplay_handbremsmode.cpp new file mode 100644 index 0000000..80135a3 --- /dev/null +++ b/main/changevaluedisplay_handbremsmode.cpp @@ -0,0 +1,33 @@ +#include "changevaluedisplay_handbremsmode.h" + +// esp-idf includes +#include + +// local includes +#include "utils.h" +#include "texts.h" + +namespace espgui { +ChangeValueDisplay::ChangeValueDisplay() +{ + constructMenuItem, StaticText>>(HandbremseMode::MOSFETS_OFF, *this, *this); + constructMenuItem, StaticText>>(HandbremseMode::OPENMODE, *this, *this); + constructMenuItem, StaticText>>(HandbremseMode::SPEED_0, *this, *this); + constructMenuItem, StaticMenuItemIcon<&espgui::icons::back>>>(*this); +} + +void ChangeValueDisplay::start() +{ + Base::start(); + + switch (const auto value = getValue()) + { + case HandbremseMode::MOSFETS_OFF: setSelectedIndex(0); break; + case HandbremseMode::OPENMODE: setSelectedIndex(1); break; + case HandbremseMode::SPEED_0: setSelectedIndex(2); break; + default: + ESP_LOGW("BOBBY", "Unknown HandbremseMode: %i", int(value)); + setSelectedIndex(3); + } +} +} // namespace espgui diff --git a/main/changevaluedisplay_handbremsmode.h b/main/changevaluedisplay_handbremsmode.h new file mode 100644 index 0000000..fe156f4 --- /dev/null +++ b/main/changevaluedisplay_handbremsmode.h @@ -0,0 +1,27 @@ +#pragma once + +// 3rdparty lib includes +#include "changevaluedisplay.h" +#include "menudisplay.h" +#include "actions/setvalueaction.h" +#include "actions/backproxyaction.h" +#include "icons/back.h" + +// local includes +#include "handbremse.h" + +namespace espgui { +template<> +class ChangeValueDisplay : + public MenuDisplay, + public virtual AccessorInterface, + public virtual ActionInterface +{ + using Base = MenuDisplay; + +public: + ChangeValueDisplay(); + + void start() override; +}; +} // namespace espgui diff --git a/main/displays/menus/bluetoothsettingsmenu.h b/main/displays/menus/bluetoothsettingsmenu.h index 965121a..0247219 100644 --- a/main/displays/menus/bluetoothsettingsmenu.h +++ b/main/displays/menus/bluetoothsettingsmenu.h @@ -22,6 +22,7 @@ #include "texts.h" using namespace espgui; +using namespace bluetoothtexthelpers; namespace { #ifdef FEATURE_BLUETOOTH diff --git a/main/displays/menus/bmsmenu.cpp b/main/displays/menus/bmsmenu.cpp index e69de29..0b7d3f0 100644 --- a/main/displays/menus/bmsmenu.cpp +++ b/main/displays/menus/bmsmenu.cpp @@ -0,0 +1,38 @@ +#include "bmsmenu.h" + +#if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS) +// local includes +#include "menuitem.h" +#include "actions/bluetoothconnectbmsaction.h" +#include "actions/bluetoothdisconnectaction.h" +#include "actions/dummyaction.h" +#include "actions/bmsturnonchargeaction.h" +#include "actions/bmsturnoffchargeaction.h" +#include "actions/bmsturnondischargeaction.h" +#include "actions/bmsturnoffdischargeaction.h" +#include "actions/switchscreenaction.h" +#include "bluetoothtexthelpers.h" +#include "icons/back.h" +#include "texts.h" +#include "displays/menus/mainmenu.h" + +using namespace espgui; +using namespace bluetoothtexthelpers; + +BmsMenu::BmsMenu() +{ + constructMenuItem, BluetoothConnectBmsAction>>(); + constructMenuItem, BluetoothDisconnectAction>>(); + constructMenuItem>(); + constructMenuItem, BmsTurnOnChargeAction>>(); + constructMenuItem, BmsTurnOffChargeAction>>(); + constructMenuItem, BmsTurnOnDischargeAction>>(); + constructMenuItem, BmsTurnOffDischargeAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void BmsMenu::back() +{ + switchSreen(); +} +#endif diff --git a/main/displays/menus/bmsmenu.h b/main/displays/menus/bmsmenu.h index 7fe4ab5..829900b 100644 --- a/main/displays/menus/bmsmenu.h +++ b/main/displays/menus/bmsmenu.h @@ -1,44 +1,16 @@ #pragma once +#if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS) // local includes #include "menudisplay.h" -#include "utils.h" -#include "menuitem.h" -#ifdef FEATURE_BLUETOOTH -#include "actions/bluetoothconnectbmsaction.h" -#include "actions/bluetoothdisconnectaction.h" -#endif -#include "actions/dummyaction.h" -#include "actions/bmsturnonchargeaction.h" -#include "actions/bmsturnoffchargeaction.h" -#include "actions/bmsturnondischargeaction.h" -#include "actions/bmsturnoffdischargeaction.h" -#include "actions/switchscreenaction.h" -#include "bluetoothtexthelpers.h" -#include "icons/back.h" #include "texts.h" -using namespace espgui; - -namespace { -#if defined(FEATURE_BLUETOOTH) && defined(FEATURE_BMS) class BmsMenu : - public MenuDisplay, - public StaticText, - public BackActionInterface> + public espgui::MenuDisplay, + public espgui::StaticText { public: - BmsMenu() - { - constructMenuItem, BluetoothConnectBmsAction>>(); - constructMenuItem, BluetoothDisconnectAction>>(); - constructMenuItem>(); - constructMenuItem, BmsTurnOnChargeAction>>(); - constructMenuItem, BmsTurnOffChargeAction>>(); - constructMenuItem, BmsTurnOnDischargeAction>>(); - constructMenuItem, BmsTurnOffDischargeAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + BmsMenu(); + void back() override; }; #endif -} // namespace diff --git a/main/displays/menus/crashmenu.cpp b/main/displays/menus/crashmenu.cpp index e69de29..8d4d74a 100644 --- a/main/displays/menus/crashmenu.cpp +++ b/main/displays/menus/crashmenu.cpp @@ -0,0 +1,20 @@ +#include "crashmenu.h" + +// local includes +#include "actions/assertaction.h" +#include "actions/dividebyzeroaction.h" +#include "actions/switchscreenaction.h" +#include "displays/menus/settingsmenu.h" +#include "icons/back.h" + +CrashMenu::CrashMenu() +{ + constructMenuItem, AssertAction>>(); + constructMenuItem, DivideByZeroAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void CrashMenu::back() +{ + switchScreen(); +} diff --git a/main/displays/menus/crashmenu.h b/main/displays/menus/crashmenu.h index 0af4a24..49f72db 100644 --- a/main/displays/menus/crashmenu.h +++ b/main/displays/menus/crashmenu.h @@ -2,28 +2,15 @@ // local includes #include "menudisplay.h" -#include "utils.h" -#include "actions/dummyaction.h" -#include "actions/assertaction.h" -#include "actions/dividebyzeroaction.h" -#include "icons/back.h" #include "texts.h" using namespace espgui; -namespace { - class CrashMenu : public MenuDisplay, - public StaticText, - public BackActionInterface> + public StaticText { public: - CrashMenu() - { - constructMenuItem, AssertAction>>(); - constructMenuItem, DivideByZeroAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + CrashMenu(); + void back() override; }; -} // namespace diff --git a/main/displays/menus/defaultmodesettingsmenu.cpp b/main/displays/menus/defaultmodesettingsmenu.cpp index 532b3ea..b9b7e04 100644 --- a/main/displays/menus/defaultmodesettingsmenu.cpp +++ b/main/displays/menus/defaultmodesettingsmenu.cpp @@ -13,6 +13,7 @@ #include "utils.h" #include "changevaluedisplay_unifiedmodelmode.h" #include "accessors/settingsaccessors.h" +#include "displays/menus/handbremssettingsmenu.h" #include "displays/menus/modessettingsmenu.h" namespace { @@ -124,6 +125,7 @@ DefaultModeSettingsMenu::DefaultModeSettingsMenu() constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableFieldWeakSmoothingUpAccessor>>(); constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableFieldWeakSmoothingDownAccessor>>(); constructMenuItem, ToggleBoolAction, CheckboxIcon, DefaultModeEnableHybridAccessor>>(); + constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction>>(); diff --git a/main/displays/menus/enablemenu.cpp b/main/displays/menus/enablemenu.cpp index e69de29..ce51f6a 100644 --- a/main/displays/menus/enablemenu.cpp +++ b/main/displays/menus/enablemenu.cpp @@ -0,0 +1,23 @@ +#include "enablemenu.h" + +// local includes +#include "accessors/settingsaccessors.h" +#include "actions/switchscreenaction.h" +#include "actions/toggleboolaction.h" +#include "checkboxicon.h" +#include "displays/menus/controllerhardwaresettingsmenu.h" +#include "icons/back.h" + +EnableMenu::EnableMenu() +{ + constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontLeftEnabledAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontRightEnabledAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, BackLeftEnabledAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, BackRightEnabledAccessor>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void EnableMenu::back() +{ + switchScreen(); +} diff --git a/main/displays/menus/enablemenu.h b/main/displays/menus/enablemenu.h index d14c9ff..068d8ef 100644 --- a/main/displays/menus/enablemenu.h +++ b/main/displays/menus/enablemenu.h @@ -2,31 +2,15 @@ // local includes #include "menudisplay.h" -#include "utils.h" -#include "menuitem.h" -#include "actions/toggleboolaction.h" -#include "actions/switchscreenaction.h" -#include "checkboxicon.h" -#include "icons/back.h" #include "texts.h" -#include "accessors/settingsaccessors.h" using namespace espgui; -namespace { class EnableMenu : public MenuDisplay, - public StaticText, - public BackActionInterface> + public StaticText { public: - EnableMenu() - { - constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontLeftEnabledAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontRightEnabledAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, BackLeftEnabledAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, BackRightEnabledAccessor>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + EnableMenu(); + void back() override; }; -} // namespace diff --git a/main/displays/menus/handbremssettingsmenu.cpp b/main/displays/menus/handbremssettingsmenu.cpp new file mode 100644 index 0000000..214735c --- /dev/null +++ b/main/displays/menus/handbremssettingsmenu.cpp @@ -0,0 +1,56 @@ +#include "handbremssettingsmenu.h" + +// 3rd party libs +#include + +// local includes +#include "accessors/settingsaccessors.h" +#include "actions/switchscreenaction.h" +#include "actions/toggleboolaction.h" +#include "changevaluedisplay.h" +#include "changevaluedisplay_handbremsmode.h" +#include "checkboxicon.h" +#include "displays/menus/defaultmodesettingsmenu.h" +#include "icons/back.h" +#include "texts.h" + +using namespace espgui; + +namespace { +using HandBremsTriggerTimeoutChangeValueDisplay = makeComponent< + ChangeValueDisplay, + StaticText, + HandbremsTimeoutAccessor, + BackActionInterface>, + SwitchScreenAction +>; +using HandBremsModeChangeValueDisplay = makeComponent< + ChangeValueDisplay, + StaticText, + HandbremsModeAccessor, + BackActionInterface>, + SwitchScreenAction +>; +class HandBremsModeText : public virtual TextInterface +{ +public: + std::string text() const override + { + return fmt::format("Mode: &2{}", toString(settings.handbremse.mode)); + } +}; +} + +HandbremsSettingsMenu::HandbremsSettingsMenu() +{ + constructMenuItem, ToggleBoolAction, CheckboxIcon, HandbremsEnabledAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, HandbremsAutomaticAccessor>>(); + constructMenuItem>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void HandbremsSettingsMenu::back() +{ + switchScreen(); +} diff --git a/main/displays/menus/handbremssettingsmenu.h b/main/displays/menus/handbremssettingsmenu.h new file mode 100644 index 0000000..b9b22a2 --- /dev/null +++ b/main/displays/menus/handbremssettingsmenu.h @@ -0,0 +1,13 @@ +#pragma once + +#include "menudisplay.h" +#include "texts.h" + +class HandbremsSettingsMenu : + public espgui::MenuDisplay, + public espgui::StaticText +{ +public: + HandbremsSettingsMenu(); + void back() override; +}; diff --git a/main/displays/menus/invertmenu.cpp b/main/displays/menus/invertmenu.cpp index e69de29..2e0351b 100644 --- a/main/displays/menus/invertmenu.cpp +++ b/main/displays/menus/invertmenu.cpp @@ -0,0 +1,24 @@ +#include "invertmenu.h" + +// local includes +#include "accessors/settingsaccessors.h" +#include "actions/switchscreenaction.h" +#include "actions/toggleboolaction.h" +#include "checkboxicon.h" +#include "displays/menus/controllerhardwaresettingsmenu.h" +#include "icons/back.h" + +InvertMenu::InvertMenu() +{ + constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontLeftInvertedAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontRightInvertedAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, BackLeftInvertedAccessor>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, BackRightInvertedAccessor>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + + +void InvertMenu::back() +{ + switchScreen(); +} diff --git a/main/displays/menus/invertmenu.h b/main/displays/menus/invertmenu.h index 3ac4b65..15f073d 100644 --- a/main/displays/menus/invertmenu.h +++ b/main/displays/menus/invertmenu.h @@ -2,31 +2,15 @@ // local includes #include "menudisplay.h" -#include "utils.h" -#include "menuitem.h" -#include "actions/toggleboolaction.h" -#include "actions/switchscreenaction.h" -#include "checkboxicon.h" -#include "icons/back.h" #include "texts.h" -#include "accessors/settingsaccessors.h" using namespace espgui; -namespace { class InvertMenu : public MenuDisplay, - public StaticText, - public BackActionInterface> + public StaticText { public: - InvertMenu() - { - constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontLeftInvertedAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, FrontRightInvertedAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, BackLeftInvertedAccessor>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, BackRightInvertedAccessor>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + InvertMenu(); + void back() override; }; -} // namespace diff --git a/main/displays/menus/otamenu.cpp b/main/displays/menus/otamenu.cpp index 812e4cf..4ccfde0 100644 --- a/main/displays/menus/otamenu.cpp +++ b/main/displays/menus/otamenu.cpp @@ -4,17 +4,15 @@ #include "actioninterface.h" #include "actions/dummyaction.h" #include "actions/switchscreenaction.h" -#include "icons/back.h" // local includes -#include "utils.h" -#include "icons/update.h" +#include "icons/back.h" #include "icons/presets.h" -#include "buildserver.h" +#include "icons/update.h" #include "displays/menus/selectotabuildmenu.h" -#include "displays/updatedisplay.h" #include "displays/menus/selectbuildservermenu.h" #include "displays/menus/mainmenu.h" +#include "displays/updatedisplay.h" #ifdef FEATURE_OTA diff --git a/main/displays/menus/presetsmenu.cpp b/main/displays/menus/presetsmenu.cpp index e69de29..ccbf67b 100644 --- a/main/displays/menus/presetsmenu.cpp +++ b/main/displays/menus/presetsmenu.cpp @@ -0,0 +1,92 @@ +#include "presetsmenu.h" + +// local includes +#include "actioninterface.h" +#include "actions/multiaction.h" +#include "actions/switchscreenaction.h" +#include "globals.h" +#include "icons/back.h" +#include "mainmenu.h" +#include "menudisplay.h" +#include "presets.h" +#include "settings.h" +#include "texts.h" +#include "utils.h" + +namespace { +class ApplyPresetAction : public virtual ActionInterface +{ +public: + void triggered() override { saveSettings(); switchScreen(); } +}; + +template +class ApplySettingsPresetAction : public virtual ApplyPresetAction +{ +public: + void triggered() override { settings = *preset; ApplyPresetAction::triggered(); } +}; + +template +class ApplyLimitsPresetAction : public virtual ApplyPresetAction +{ +public: + void triggered() override { settings.limits = *preset; ApplyPresetAction::triggered(); } +}; + +template +class ApplyControllerHardwarePresetAction : public virtual ApplyPresetAction +{ +public: + void triggered() override { settings.controllerHardware = *preset; ApplyPresetAction::triggered(); } +}; + +template +class ApplyBoardcomputerHardwarePresetAction : public virtual ApplyPresetAction +{ +public: + void triggered() override { settings.boardcomputerHardware = *preset; ApplyPresetAction::triggered(); } +}; + +template +class ApplyDefaultModePresetAction : public virtual ApplyPresetAction +{ +public: + void triggered() override { settings.defaultMode = *preset; ApplyPresetAction::triggered(); } +}; + +template +class ApplyTempomatModePresetAction : public virtual ApplyPresetAction +{ +public: + void triggered() override { settings.tempomatMode = *preset; ApplyPresetAction::triggered(); } +}; + +template +class ApplyLarsmModePresetAction : public virtual ApplyPresetAction +{ +public: + void triggered() override { settings.larsmMode = *preset; ApplyPresetAction::triggered(); } +}; +} // namespace + +PresetsMenu::PresetsMenu() +{ + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, MultiAction, SwitchScreenAction>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void PresetsMenu::back() +{ + switchScreen(); +} diff --git a/main/displays/menus/presetsmenu.h b/main/displays/menus/presetsmenu.h index 3313135..e78892e 100644 --- a/main/displays/menus/presetsmenu.h +++ b/main/displays/menus/presetsmenu.h @@ -1,95 +1,16 @@ #pragma once // local includes -#include "actioninterface.h" #include "menudisplay.h" -#include "utils.h" -#include "actions/multiaction.h" -#include "actions/switchscreenaction.h" -#include "icons/back.h" #include "texts.h" -#include "settings.h" -#include "presets.h" -#include "globals.h" using namespace espgui; -namespace { -class ApplyPresetAction : public virtual ActionInterface -{ -public: - void triggered() override { saveSettings(); switchScreen(); } -}; - -template -class ApplySettingsPresetAction : public virtual ApplyPresetAction -{ -public: - void triggered() override { settings = *preset; ApplyPresetAction::triggered(); } -}; - -template -class ApplyLimitsPresetAction : public virtual ApplyPresetAction -{ -public: - void triggered() override { settings.limits = *preset; ApplyPresetAction::triggered(); } -}; - -template -class ApplyControllerHardwarePresetAction : public virtual ApplyPresetAction -{ -public: - void triggered() override { settings.controllerHardware = *preset; ApplyPresetAction::triggered(); } -}; - -template -class ApplyBoardcomputerHardwarePresetAction : public virtual ApplyPresetAction -{ -public: - void triggered() override { settings.boardcomputerHardware = *preset; ApplyPresetAction::triggered(); } -}; - -template -class ApplyDefaultModePresetAction : public virtual ApplyPresetAction -{ -public: - void triggered() override { settings.defaultMode = *preset; ApplyPresetAction::triggered(); } -}; - -template -class ApplyTempomatModePresetAction : public virtual ApplyPresetAction -{ -public: - void triggered() override { settings.tempomatMode = *preset; ApplyPresetAction::triggered(); } -}; - -template -class ApplyLarsmModePresetAction : public virtual ApplyPresetAction -{ -public: - void triggered() override { settings.larsmMode = *preset; ApplyPresetAction::triggered(); } -}; - class PresetsMenu : public MenuDisplay, - public StaticText, - public BackActionInterface> + public StaticText { public: - PresetsMenu() - { - constructMenuItem, MultiAction, SwitchScreenAction>>>(); - constructMenuItem, MultiAction, SwitchScreenAction>>>(); - constructMenuItem, MultiAction, SwitchScreenAction>>>(); - constructMenuItem, MultiAction, SwitchScreenAction>>>(); - constructMenuItem, MultiAction, SwitchScreenAction>>>(); - constructMenuItem, MultiAction, SwitchScreenAction>>>(); - constructMenuItem, MultiAction, SwitchScreenAction>>>(); - constructMenuItem, MultiAction, SwitchScreenAction>>>(); - constructMenuItem, MultiAction, SwitchScreenAction>>>(); - constructMenuItem, MultiAction, SwitchScreenAction>>>(); - constructMenuItem, MultiAction, SwitchScreenAction>>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + PresetsMenu(); + void back() override; }; -} // namespace diff --git a/main/displays/menus/selectbuildservermenu.cpp b/main/displays/menus/selectbuildservermenu.cpp index 9cbb7eb..5ffa52d 100644 --- a/main/displays/menus/selectbuildservermenu.cpp +++ b/main/displays/menus/selectbuildservermenu.cpp @@ -4,13 +4,20 @@ #include // 3rdparty lib includes -#include #include +#include // local includes +#include "actions/dummyaction.h" +#include "buildserver.h" #include "displays/menus/settingsmenu.h" +#include "utils.h" #ifdef FEATURE_OTA + +using namespace buildserver; +using namespace espgui; + namespace { class BuildserverMenuItem : public espgui::MenuItem { @@ -40,8 +47,6 @@ private: }; } // namespace -using namespace espgui; - SelectBuildServerMenu::SelectBuildServerMenu() { for (const auto &otaServer : stringSettings.otaServers) diff --git a/main/displays/menus/selectbuildservermenu.h b/main/displays/menus/selectbuildservermenu.h index 2ef0ecf..353b73a 100644 --- a/main/displays/menus/selectbuildservermenu.h +++ b/main/displays/menus/selectbuildservermenu.h @@ -2,14 +2,10 @@ // 3rdparty lib includes #include -#include #include // local includes -#include "utils.h" #include "texts.h" -#include "globals.h" -#include "buildserver.h" #ifdef FEATURE_OTA diff --git a/main/displays/menus/selectotabuildmenu.cpp b/main/displays/menus/selectotabuildmenu.cpp index e69de29..0db149b 100644 --- a/main/displays/menus/selectotabuildmenu.cpp +++ b/main/displays/menus/selectotabuildmenu.cpp @@ -0,0 +1,142 @@ +#include "selectotabuildmenu.h" + +#include +#include +#include "esp_log.h" +#include "fmt/core.h" + +// local includes +#include "buildserver.h" +#include "utils.h" +#include "actions/dummyaction.h" +#include "actions/switchscreenaction.h" +#include "icons/back.h" +#include "displays/menus/otamenu.h" + +#include "globals.h" + +#ifdef FEATURE_OTA +#define MESSAGE(text) constructMenuItem, DefaultFont, StaticColor, DummyAction>>() + +using namespace espgui; +using namespace buildserver; + +namespace { +template +class VersionMenuItem : public MenuItem +{ +public: + std::string text() const override { return m_hash; } + void setHash(std::string &&hash) { m_hash = std::move(hash); } + void setHash(const std::string &hash) { m_hash = hash; } + void setUrl(std::string &&url) { m_url = std::move(url); } + void setUrl(const std::string &url) { m_url = url; } + + void triggered() override + { + stringSettings.otaUrl = m_url; + saveSettings(); + } + + int color() const override + { + return item_color; + } +private: + std::string m_url; + std::string m_hash; +}; +} + +SelectBuildMenu::SelectBuildMenu() +{ + if (count_available_buildserver() < 1) + { + MESSAGE(TEXT_OTA_NOBUILDSERVERAVAILABLE); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + } + else if (stringSettings.otaServerUrl.empty()) + { + MESSAGE(TEXT_OTA_NOBUILDSERVERSELECTED); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + } + else + { + const auto staStatus = wifi_stack::get_sta_status(); + if (staStatus != wifi_stack::WiFiStaStatus::CONNECTED) + { + MESSAGE(TEXT_OTA_NOCONNECTION); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + } + else + { + std::string serverUrl = stringSettings.otaServerUrl; + if (serverUrl.substr(serverUrl.length() - 4) == ".bin") + { + auto &menuitem = constructMenuItem>(); + std::size_t last_slash_index = serverUrl.find_last_of("/"); + auto filename = serverUrl.substr(last_slash_index+1); + auto hash = filename.substr(0, filename.length() - 4); + menuitem.setHash(hash); + menuitem.setUrl(serverUrl); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + } + else + { + setup_request(); + start_descriptor_request(serverUrl); + } + } + } +} + +void SelectBuildMenu::update() +{ + if(get_request_running()) + { + check_descriptor_request(); + if (!request_failed.empty()) + { + this->buildMenuRequestError(request_failed); + request_failed = {}; + } + } + + if (parsing_finished) + { + parsing_finished = false; + if (!availableVersions.empty()) + { + this->buildMenuFromJson(); + } + } + Base::update(); +} + +void SelectBuildMenu::buildMenuFromJson() +{ + auto &latest = constructMenuItem>(); + latest.setHash("latest"); + latest.setUrl(url_for_latest); + + for (const std::string &hash : availableVersions) + { + auto &menuitem = constructMenuItem>(); + menuitem.setHash(hash); + menuitem.setUrl(fmt::format(url_for_hashes, hash)); + } + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void SelectBuildMenu::buildMenuRequestError(std::string error) +{ + auto &item = constructMenuItem, DummyAction>>(); + item.setTitle(error); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void SelectBuildMenu::back() +{ + switchScreen(); +} +#endif diff --git a/main/displays/menus/selectotabuildmenu.h b/main/displays/menus/selectotabuildmenu.h index 4a95969..66b9fdd 100644 --- a/main/displays/menus/selectotabuildmenu.h +++ b/main/displays/menus/selectotabuildmenu.h @@ -1,151 +1,21 @@ #pragma once -#include -#include -#include "esp_log.h" -#include "fmt/core.h" - // local includes #include "menudisplay.h" -#include "utils.h" -#include "actions/dummyaction.h" -#include "icons/back.h" -#include "icons/update.h" #include "texts.h" -#include "buildserver.h" -#include "globals.h" - -#define MESSAGE(text) constructMenuItem, DefaultFont, StaticColor, DummyAction>>() - -using namespace espgui; - #ifdef FEATURE_OTA -namespace { - -// ToDo: if (request_failed) => MESSAGE("An error occurred") - -template -class VersionMenuItem : public MenuItem -{ -public: - std::string text() const override { return m_hash; } - void setHash(std::string &&hash) { m_hash = std::move(hash); } - void setHash(const std::string &hash) { m_hash = hash; } - void setUrl(std::string &&url) { m_url = std::move(url); } - void setUrl(const std::string &url) { m_url = url; } - - void triggered() override - { - stringSettings.otaUrl = m_url; - saveSettings(); - } - - int color() const override - { - return item_color; - } -private: - std::string m_url; - std::string m_hash; -}; class SelectBuildMenu : - public MenuDisplay, - public StaticText, - public BackActionInterface> + public espgui::MenuDisplay, + public espgui::StaticText { using Base = MenuDisplay; public: + SelectBuildMenu(); void update() override; + void back() override; void buildMenuFromJson(); void buildMenuRequestError(std::string error); - SelectBuildMenu() - { - if (count_available_buildserver() < 1) - { - MESSAGE(TEXT_OTA_NOBUILDSERVERAVAILABLE); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } - else if (stringSettings.otaServerUrl.empty()) - { - MESSAGE(TEXT_OTA_NOBUILDSERVERSELECTED); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } - else - { - const auto staStatus = wifi_stack::get_sta_status(); - if (staStatus != wifi_stack::WiFiStaStatus::CONNECTED) - { - MESSAGE(TEXT_OTA_NOCONNECTION); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } - else - { - std::string serverUrl = stringSettings.otaServerUrl; - if (serverUrl.substr(serverUrl.length() - 4) == ".bin") - { - auto &menuitem = constructMenuItem>(); - std::size_t last_slash_index = serverUrl.find_last_of("/"); - auto filename = serverUrl.substr(last_slash_index+1); - auto hash = filename.substr(0, filename.length() - 4); - menuitem.setHash(hash); - menuitem.setUrl(serverUrl); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } - else - { - setup_request(); - start_descriptor_request(serverUrl); - } - } - } - } }; - -void SelectBuildMenu::update() -{ - if(get_request_running()) - { - check_descriptor_request(); - if (!request_failed.empty()) - { - this->buildMenuRequestError(request_failed); - request_failed = {}; - } - } - - if (parsing_finished) - { - parsing_finished = false; - if (!availableVersions.empty()) - { - this->buildMenuFromJson(); - } - } - Base::update(); -} - -void SelectBuildMenu::buildMenuFromJson() -{ - auto &latest = constructMenuItem>(); - latest.setHash("latest"); - latest.setUrl(url_for_latest); - - for (const std::string &hash : availableVersions) - { - auto &menuitem = constructMenuItem>(); - menuitem.setHash(hash); - menuitem.setUrl(fmt::format(url_for_hashes, hash)); - } - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); -} - -void SelectBuildMenu::buildMenuRequestError(std::string error) -{ - auto &item = constructMenuItem, DummyAction>>(); - item.setTitle(error); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); -} -} // namespace #endif diff --git a/main/displays/menus/timersmenu.cpp b/main/displays/menus/timersmenu.cpp index e69de29..fe6e196 100644 --- a/main/displays/menus/timersmenu.cpp +++ b/main/displays/menus/timersmenu.cpp @@ -0,0 +1,81 @@ +#include "timersmenu.h" + +// local includes +#include "accessors/settingsaccessors.h" +#include "actions/switchscreenaction.h" +#include "changevaluedisplay.h" +#include "displays/menus/boardcomputerhardwaresettingsmenu.h" +#include "icons/back.h" +#include "texts.h" + +using namespace espgui; + +namespace { +using PotiReadRateChangeDisplay = makeComponent< + ChangeValueDisplay, + StaticText, + PotiReadRateAccessor, + BackActionInterface>, + SwitchScreenAction +>; + +using ModeUpdateRateChangeDisplay = makeComponent< + ChangeValueDisplay, + StaticText, + ModeUpdateRateAccessor, + BackActionInterface>, + SwitchScreenAction +>; + +using StatsUpdateRateChangeDisplay = makeComponent< + ChangeValueDisplay, + StaticText, + StatsUpdateRateAccessor, + BackActionInterface>, + SwitchScreenAction +>; + +using DisplayUpdateRateChangeDisplay = makeComponent< + ChangeValueDisplay, + StaticText, + DisplayUpdateRateAccessor, + BackActionInterface>, + SwitchScreenAction +>; + +using DisplayRedrawRateChangeDisplay = makeComponent< + ChangeValueDisplay, + StaticText, + DisplayRedrawRateAccessor, + BackActionInterface>, + SwitchScreenAction +>; + +#ifdef FEATURE_CAN +using CanReceiveRateChangeDisplay = makeComponent< + ChangeValueDisplay, + StaticText, + CanReceiveRateAccessor, + BackActionInterface>, + SwitchScreenAction +>; +#endif +} + +TimersMenu::TimersMenu() +{ + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, SwitchScreenAction>>(); +#ifdef FEATURE_CAN + constructMenuItem, SwitchScreenAction>>(); +#endif + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void TimersMenu::back() +{ + switchScreen(); +} diff --git a/main/displays/menus/timersmenu.h b/main/displays/menus/timersmenu.h index db04c25..a7773fa 100644 --- a/main/displays/menus/timersmenu.h +++ b/main/displays/menus/timersmenu.h @@ -1,86 +1,16 @@ #pragma once // local includes -#include "changevaluedisplay.h" #include "menudisplay.h" -#include "utils.h" -#include "actions/switchscreenaction.h" -#include "icons/back.h" #include "texts.h" -#include "accessors/settingsaccessors.h" using namespace espgui; -namespace { -class TimersMenu; - -using PotiReadRateChangeDisplay = makeComponent< - ChangeValueDisplay, - StaticText, - PotiReadRateAccessor, - BackActionInterface>, - SwitchScreenAction ->; - -using ModeUpdateRateChangeDisplay = makeComponent< - ChangeValueDisplay, - StaticText, - ModeUpdateRateAccessor, - BackActionInterface>, - SwitchScreenAction ->; - -using StatsUpdateRateChangeDisplay = makeComponent< - ChangeValueDisplay, - StaticText, - StatsUpdateRateAccessor, - BackActionInterface>, - SwitchScreenAction ->; - -using DisplayUpdateRateChangeDisplay = makeComponent< - ChangeValueDisplay, - StaticText, - DisplayUpdateRateAccessor, - BackActionInterface>, - SwitchScreenAction ->; - -using DisplayRedrawRateChangeDisplay = makeComponent< - ChangeValueDisplay, - StaticText, - DisplayRedrawRateAccessor, - BackActionInterface>, - SwitchScreenAction ->; - -#ifdef FEATURE_CAN -using CanReceiveRateChangeDisplay = makeComponent< - ChangeValueDisplay, - StaticText, - CanReceiveRateAccessor, - BackActionInterface>, - SwitchScreenAction ->; -#endif - class TimersMenu : public MenuDisplay, - public StaticText, - public BackActionInterface> + public StaticText { public: - TimersMenu() - { - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); - constructMenuItem, SwitchScreenAction>>(); -#ifdef FEATURE_CAN - constructMenuItem, SwitchScreenAction>>(); -#endif - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + TimersMenu(); + void back() override; }; -} // namespace diff --git a/main/displays/menus/wifiscanmenu.cpp b/main/displays/menus/wifiscanmenu.cpp index e69de29..8108629 100644 --- a/main/displays/menus/wifiscanmenu.cpp +++ b/main/displays/menus/wifiscanmenu.cpp @@ -0,0 +1,123 @@ +#include "wifiscanmenu.h" + +// system includes +#include + +// esp-idf includes +#include + +// 3rdparty lib includes +#include +#include +#include + +// local includes +#include "menudisplay.h" +#include "utils.h" +#include "actions/multiaction.h" +#include "actions/switchscreenaction.h" +#include "actions/dummyaction.h" +#include "icons/back.h" +#include "texts.h" +#include "wifi_bobbycar.h" + +using namespace std::chrono_literals; +using namespace espgui; + +WifiScanMenu::WifiScanMenu() +{ + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +std::string WifiScanMenu::text() const +{ + const auto scanStatus = wifi_stack::get_scan_status(); + auto text = wifi_stack::toString(scanStatus); + + if (scanStatus != wifi_stack::WiFiScanStatus::Scanning) + if (const auto &result = wifi_stack::get_scan_result()) + text += fmt::format(" ({} found)", result->entries.size()); + + return text; +} + +void WifiScanMenu::start() +{ + Base::start(); + + m_lastScanComplete = {}; + + if (wifi_stack::get_scan_status() != wifi_stack::WiFiScanStatus::Scanning) + if (const auto result = wifi_scan(); result != ESP_OK) + ESP_LOGE("BOBBY", "wifi_scan() failed with %s", esp_err_to_name(result)); +} + +void WifiScanMenu::update() +{ + if (wifi_stack::get_scan_status() == wifi_stack::WiFiScanStatus::Scanning) + { + // TODO + } + else + { + const auto now = espchrono::millis_clock::now(); + + if (!m_lastScanComplete) + { + const auto &result = wifi_stack::get_scan_result(); + + auto backButton = takeLastMenuItem(); + + for (std::size_t i = 0; i < (result ? result->entries.size() : 0); i++) + { + std::string ssid{reinterpret_cast(result->entries[i].ssid)}; + if (menuItemCount() <= i) + { + if (m_reusableItems.empty()) + { + auto &item = constructMenuItem>(); + item.setTitle(std::move(ssid)); + } + else + { + std::unique_ptr> ptr = std::move(m_reusableItems.back()); + m_reusableItems.pop_back(); + ptr->setTitle(std::move(ssid)); + emplaceMenuItem(std::move(ptr)); + } + } + else + { + auto &item = *(makeComponent*)(&getMenuItem(i)); + item.setTitle(std::move(ssid)); + } + } + + while (menuItemCount() > (result ? result->entries.size() : 0)) + m_reusableItems.emplace_back((makeComponent*)takeLastMenuItem().release()); + + emplaceMenuItem(std::move(backButton)); + + m_lastScanComplete = now; + } + else if (espchrono::ago(*m_lastScanComplete) >= 10s) + { + m_lastScanComplete = {}; + + if (const auto result = wifi_scan(); result != ESP_OK) + ESP_LOGE("BOBBY", "wifi_scan() failed with %s", esp_err_to_name(result)); + } + } + + Base::update(); +} + +void WifiScanMenu::stop() +{ + wifi_stack::delete_scan_result(); +} + +void WifiScanMenu::back() +{ + switchScreen(); +} diff --git a/main/displays/menus/wifiscanmenu.h b/main/displays/menus/wifiscanmenu.h index ec6d2dc..4e3e0a6 100644 --- a/main/displays/menus/wifiscanmenu.h +++ b/main/displays/menus/wifiscanmenu.h @@ -1,139 +1,27 @@ #pragma once -// system includes -#include - -// esp-idf includes -#include - -// 3rdparty lib includes -#include -#include -#include - // local includes -#include "menudisplay.h" -#include "utils.h" -#include "actions/multiaction.h" -#include "actions/switchscreenaction.h" #include "actions/dummyaction.h" -#include "icons/back.h" +#include "actions/switchscreenaction.h" +#include "displays/menus/stationwifisettingsmenu.h" +#include "menudisplay.h" #include "texts.h" -#include "wifi_bobbycar.h" +#include "utils.h" using namespace std::chrono_literals; using namespace espgui; -namespace { class WifiScanMenu : public MenuDisplay, public BackActionInterface> { using Base = MenuDisplay; - public: WifiScanMenu(); - std::string text() const override; - void start() override; void update() override; void stop() override; - + void back() override; private: std::optional m_lastScanComplete; - std::vector>> m_reusableItems; }; - -WifiScanMenu::WifiScanMenu() -{ - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); -} - -std::string WifiScanMenu::text() const -{ - const auto scanStatus = wifi_stack::get_scan_status(); - auto text = wifi_stack::toString(scanStatus); - - if (scanStatus != wifi_stack::WiFiScanStatus::Scanning) - if (const auto &result = wifi_stack::get_scan_result()) - text += fmt::format(" ({} found)", result->entries.size()); - - return text; -} - -void WifiScanMenu::start() -{ - Base::start(); - - m_lastScanComplete = {}; - - if (wifi_stack::get_scan_status() != wifi_stack::WiFiScanStatus::Scanning) - if (const auto result = wifi_scan(); result != ESP_OK) - ESP_LOGE("BOBBY", "wifi_scan() failed with %s", esp_err_to_name(result)); -} - -void WifiScanMenu::update() -{ - if (wifi_stack::get_scan_status() == wifi_stack::WiFiScanStatus::Scanning) - { - // TODO - } - else - { - const auto now = espchrono::millis_clock::now(); - - if (!m_lastScanComplete) - { - const auto &result = wifi_stack::get_scan_result(); - - auto backButton = takeLastMenuItem(); - - for (std::size_t i = 0; i < (result ? result->entries.size() : 0); i++) - { - std::string ssid{reinterpret_cast(result->entries[i].ssid)}; - if (menuItemCount() <= i) - { - if (m_reusableItems.empty()) - { - auto &item = constructMenuItem>(); - item.setTitle(std::move(ssid)); - } - else - { - std::unique_ptr> ptr = std::move(m_reusableItems.back()); - m_reusableItems.pop_back(); - ptr->setTitle(std::move(ssid)); - emplaceMenuItem(std::move(ptr)); - } - } - else - { - auto &item = *(makeComponent*)(&getMenuItem(i)); - item.setTitle(std::move(ssid)); - } - } - - while (menuItemCount() > (result ? result->entries.size() : 0)) - m_reusableItems.emplace_back((makeComponent*)takeLastMenuItem().release()); - - emplaceMenuItem(std::move(backButton)); - - m_lastScanComplete = now; - } - else if (espchrono::ago(*m_lastScanComplete) >= 10s) - { - m_lastScanComplete = {}; - - if (const auto result = wifi_scan(); result != ESP_OK) - ESP_LOGE("BOBBY", "wifi_scan() failed with %s", esp_err_to_name(result)); - } - } - - Base::update(); -} - -void WifiScanMenu::stop() -{ - wifi_stack::delete_scan_result(); -} -} // namespace diff --git a/main/displays/statusdisplay.cpp b/main/displays/statusdisplay.cpp index cb3ff53..e3eb0cb 100644 --- a/main/displays/statusdisplay.cpp +++ b/main/displays/statusdisplay.cpp @@ -14,6 +14,7 @@ #endif #include "drivingstatistics.h" #include "udpcloud.h" +#include "modes/defaultmode.h" using namespace espgui; @@ -69,6 +70,10 @@ void StatusDisplay::initScreen() void StatusDisplay::redraw() { Base::redraw(); + if (modes::defaultMode.overrideHandbremse) + tft.fillRect(0, 0, tft.width(), 2, TFT_RED); + else + tft.fillRect(0, 0, tft.width(), 2, TFT_BLACK); tft.setTextFont(2); m_labelRawGas.redraw(raw_gas ? std::to_string(*raw_gas) : "?"); diff --git a/main/handbremse.h b/main/handbremse.h new file mode 100644 index 0000000..2e0789e --- /dev/null +++ b/main/handbremse.h @@ -0,0 +1,13 @@ +#pragma once + +// system +#include + +// 3rdparty lib includes +#include + +#define HandbremseModeValues(x) \ + x(MOSFETS_OFF) \ + x(OPENMODE) \ + x(SPEED_0) +DECLARE_TYPESAFE_ENUM(HandbremseMode, : uint8_t, HandbremseModeValues) diff --git a/main/modes/defaultmode.cpp b/main/modes/defaultmode.cpp index e34f1fc..78121fb 100644 --- a/main/modes/defaultmode.cpp +++ b/main/modes/defaultmode.cpp @@ -50,104 +50,133 @@ void DefaultMode::update() const auto now = espchrono::millis_clock::now(); - float pwm; - if (gas_processed >= settings.defaultMode.add_schwelle) + if (gas_processed > 10 || (!overrideHandbremse && (abs(avgSpeedKmh) > 2 || !controllers.front.feedbackValid || !controllers.back.feedbackValid || settings.handbremse.triggerTimeout < 1 || !settings.handbremse.enable || !settings.handbremse.automatic))) { - pwm = (gas_processed/1000.*settings.defaultMode.gas1_wert) + (brems_processed/1000.*settings.defaultMode.brems1_wert); + m_stillSince = std::nullopt; + overrideHandbremse = false; + goto hell; + } + else if (!overrideHandbremse && !m_stillSince) + { + m_stillSince = now; + goto hell; + } + else if ((overrideHandbremse && abs(avgSpeedKmh) <= 2) && espchrono::ago(*m_stillSince) >= espchrono::milliseconds32(settings.handbremse.triggerTimeout)) + { + fixCommonParams(); - if ((settings.defaultMode.enableSmoothingUp || settings.defaultMode.enableSmoothingDown) && (pwm > 1000. || lastPwm > 1000.)) + for (bobbycar::protocol::serial::MotorState &motor : motors()) { - if (lastPwm < pwm && settings.defaultMode.enableSmoothingUp) - { - pwm = std::min(pwm, lastPwm + (settings.defaultMode.smoothing * std::chrono::milliseconds{now - lastTime}.count() / 100.f)); - if (pwm < 1000.) - pwm = 1000.; - } - else if (lastPwm > pwm && settings.defaultMode.enableSmoothingDown) - { - pwm = std::max(pwm, lastPwm - (settings.defaultMode.smoothing * std::chrono::milliseconds{now - lastTime}.count() / 100.f)); - } + motor.ctrlTyp = bobbycar::protocol::ControlType::FieldOrientedControl; + motor.ctrlMod = ((settings.handbremse.mode == HandbremseMode::SPEED_0) ? bobbycar::protocol::ControlMode::Speed : bobbycar::protocol::ControlMode::OpenMode); + motor.pwm = 0; + motor.cruiseCtrlEna = false; + motor.nCruiseMotTgt = 0; + if (settings.handbremse.mode == HandbremseMode::MOSFETS_OFF) + motor.enable = false; } } else { - pwm = (gas_processed/1000.*settings.defaultMode.gas2_wert) - (brems_processed/1000.*settings.defaultMode.brems2_wert); - if ( - (settings.defaultMode.enableFieldWeakSmoothingUp || settings.defaultMode.enableFieldWeakSmoothingDown) && - (lastPwm > settings.defaultMode.fwSmoothLowerLimit) && - brems_processed > 0) +hell: + float pwm; + if (gas_processed >= settings.defaultMode.add_schwelle) { - if (lastPwm < pwm && settings.defaultMode.enableFieldWeakSmoothingUp) - { - auto effective_smoothing = settings.defaultMode.smoothing; - auto difference_to_target = std::abs(pwm-lastPwm); - effective_smoothing *= std::max((difference_to_target / 500),0.5f); + pwm = (gas_processed/1000.*settings.defaultMode.gas1_wert) + (brems_processed/1000.*settings.defaultMode.brems1_wert); - pwm = std::min(pwm, lastPwm + (effective_smoothing * std::chrono::milliseconds{now - lastTime}.count() / 100.f)); - } - else if (lastPwm > pwm && settings.defaultMode.enableFieldWeakSmoothingDown) + if ((settings.defaultMode.enableSmoothingUp || settings.defaultMode.enableSmoothingDown) && (pwm > 1000. || m_lastPwm > 1000.)) { - auto effective_smoothing = settings.defaultMode.smoothing; - auto difference_to_target = std::abs(pwm-lastPwm); - effective_smoothing *= std::max((difference_to_target / 500),0.5f); - - pwm = std::max(pwm, lastPwm - (effective_smoothing * std::chrono::milliseconds{now - lastTime}.count() / 100.f)); + if (m_lastPwm < pwm && settings.defaultMode.enableSmoothingUp) + { + pwm = std::min(pwm, m_lastPwm + (settings.defaultMode.smoothing * std::chrono::milliseconds{now - m_lastTime}.count() / 100.f)); + if (pwm < 1000.) + pwm = 1000.; + } + else if (m_lastPwm > pwm && settings.defaultMode.enableSmoothingDown) + { + pwm = std::max(pwm, m_lastPwm - (settings.defaultMode.smoothing * std::chrono::milliseconds{now - m_lastTime}.count() / 100.f)); + } } } - } - - lastPwm = pwm; - lastTime = now; - - auto pair = split(settings.defaultMode.modelMode); - - if (settings.hybrid.enable) - { - auto activationLimit = settings.hybrid.activationLimit; - auto deactivationLimit = settings.hybrid.deactivationLimit; - auto diff = std::abs(activationLimit - deactivationLimit); - - if (diff < 20) + else { - int half = (diff / 2) + 0.5; - deactivationLimit -= half; - activationLimit += half; + pwm = (gas_processed/1000.*settings.defaultMode.gas2_wert) - (brems_processed/1000.*settings.defaultMode.brems2_wert); + if ( + (settings.defaultMode.enableFieldWeakSmoothingUp || settings.defaultMode.enableFieldWeakSmoothingDown) && + (m_lastPwm > settings.defaultMode.fwSmoothLowerLimit) && + brems_processed > 0) + { + if (m_lastPwm < pwm && settings.defaultMode.enableFieldWeakSmoothingUp) + { + auto effective_smoothing = settings.defaultMode.smoothing; + auto difference_to_target = std::abs(pwm-m_lastPwm); + effective_smoothing *= std::max((difference_to_target / 500),0.5f); + + pwm = std::min(pwm, m_lastPwm + (effective_smoothing * std::chrono::milliseconds{now - m_lastTime}.count() / 100.f)); + } + else if (m_lastPwm > pwm && settings.defaultMode.enableFieldWeakSmoothingDown) + { + auto effective_smoothing = settings.defaultMode.smoothing; + auto difference_to_target = std::abs(pwm-m_lastPwm); + effective_smoothing *= std::max((difference_to_target / 500),0.5f); + + pwm = std::max(pwm, m_lastPwm - (effective_smoothing * std::chrono::milliseconds{now - m_lastTime}.count() / 100.f)); + } + } } - if (!hybridModeActivated && (pwm > activationLimit)) + m_lastPwm = pwm; + m_lastTime = now; + + auto pair = split(settings.defaultMode.modelMode); + + if (settings.hybrid.enable) { - hybridModeActivated = true; - } - else if (hybridModeActivated && (pwm < deactivationLimit)) - { - hybridModeActivated = false; + auto activationLimit = settings.hybrid.activationLimit; + auto deactivationLimit = settings.hybrid.deactivationLimit; + auto diff = std::abs(activationLimit - deactivationLimit); + + if (diff < 20) + { + int half = (diff / 2) + 0.5; + deactivationLimit -= half; + activationLimit += half; + } + + if (!hybridModeActivated && (pwm > activationLimit)) + { + hybridModeActivated = true; + } + else if (hybridModeActivated && (pwm < deactivationLimit)) + { + hybridModeActivated = false; + } + + if (hybridModeActivated) + { + pair = split(settings.hybrid.hybridMode); + } } - if (hybridModeActivated) + for (bobbycar::protocol::serial::MotorState &motor : motorsInController(controllers.front)) { - pair = split(settings.hybrid.hybridMode); + motor.ctrlTyp = pair.first; + motor.ctrlMod = pair.second; + motor.pwm = pwm / 100. * settings.defaultMode.frontPercentage; + motor.cruiseCtrlEna = false; + motor.nCruiseMotTgt = 0; + } + for (bobbycar::protocol::serial::MotorState &motor : motorsInController(controllers.back)) + { + motor.ctrlTyp = pair.first; + motor.ctrlMod = pair.second; + motor.pwm = pwm / 100. * settings.defaultMode.backPercentage; + motor.cruiseCtrlEna = false; + motor.nCruiseMotTgt = 0; } } - - for (bobbycar::protocol::serial::MotorState &motor : motorsInController(controllers.front)) - { - motor.ctrlTyp = pair.first; - motor.ctrlMod = pair.second; - motor.pwm = pwm / 100. * settings.defaultMode.frontPercentage; - motor.cruiseCtrlEna = false; - motor.nCruiseMotTgt = 0; - } - for (bobbycar::protocol::serial::MotorState &motor : motorsInController(controllers.back)) - { - motor.ctrlTyp = pair.first; - motor.ctrlMod = pair.second; - motor.pwm = pwm / 100. * settings.defaultMode.backPercentage; - motor.cruiseCtrlEna = false; - motor.nCruiseMotTgt = 0; - } + fixCommonParams(); } - fixCommonParams(); - sendCommands(); } diff --git a/main/modes/defaultmode.h b/main/modes/defaultmode.h index 3d80e1c..ef03489 100644 --- a/main/modes/defaultmode.h +++ b/main/modes/defaultmode.h @@ -2,6 +2,7 @@ // system includes #include +#include // 3rdparty lib includes #include @@ -24,10 +25,12 @@ public: bool waitForGasLoslass{false}; bool waitForBremsLoslass{false}; bool hybridModeActivated{false}; + bool overrideHandbremse{false}; private: - espchrono::millis_clock::time_point lastTime{espchrono::millis_clock::now()}; - float lastPwm{0}; + espchrono::millis_clock::time_point m_lastTime{espchrono::millis_clock::now()}; + float m_lastPwm{0}; + std::optional m_stillSince; }; namespace modes { diff --git a/main/presets.h b/main/presets.h index 57117dd..ff3651b 100644 --- a/main/presets.h +++ b/main/presets.h @@ -235,6 +235,13 @@ constexpr Settings::MotortestMode defaultMotortestMode { .maxPwm = 400 }; +constexpr Settings::Handbremse defaultHandbremse { + .mode = HandbremseMode::MOSFETS_OFF, + .triggerTimeout = 10, + .automatic = false, + .enable = false +}; + #ifdef FEATURE_LEDSTRIP constexpr Settings::Ledstrip defaultLedstrip { .enableLedAnimation = true, @@ -320,6 +327,7 @@ constexpr Settings defaultSettings { .hybrid = defaultHybrid, .lockscreen = defaultLockscreen, .savedStatistics = defaultSavedStatistics, + .handbremse = defaultHandbremse }; StringSettings makeDefaultStringSettings(); diff --git a/main/settings.h b/main/settings.h index 5abda53..3ad1568 100644 --- a/main/settings.h +++ b/main/settings.h @@ -21,6 +21,7 @@ #include "bluetoothmode.h" #endif #include "unifiedmodelmode.h" +#include "handbremse.h" #include "ledstrip.h" enum class LarsmModeMode : uint8_t { Mode1, Mode2, Mode3, Mode4 }; @@ -214,6 +215,13 @@ struct Settings uint32_t totalCentimeters; } savedStatistics; + struct Handbremse { + HandbremseMode mode; + uint16_t triggerTimeout; + bool automatic; + bool enable; + } handbremse; + template void executeForEveryCommonSetting(T &&callable); @@ -341,7 +349,13 @@ void Settings::executeForEveryCommonSetting(T &&callable) callable("lockAlwPresetSw", lockscreen.allowPresetSwitch); callable("lockscreenPin", lockscreen.pin); + callable("totalCentimeter", savedStatistics.totalCentimeters); + + callable("handBremsE", handbremse.enable); + callable("handBremsA", handbremse.automatic); + callable("handBremsM", handbremse.mode); + callable("handBremsT", handbremse.triggerTimeout); } template diff --git a/main/settingspersister.cpp b/main/settingspersister.cpp index 5922637..0da03fc 100644 --- a/main/settingspersister.cpp +++ b/main/settingspersister.cpp @@ -189,6 +189,14 @@ template<> struct nvsGetterHelper { static esp_err_t nvs_get(n *out_value = UnifiedModelMode(tempValue); return err; }}; +template<> struct nvsGetterHelper { static esp_err_t nvs_get(nvs_handle handle, const char* key, HandbremseMode* out_value) +{ + uint8_t tempValue; + esp_err_t err = nvs_get_u8(handle, key, &tempValue); + if (err == ESP_OK) + *out_value = HandbremseMode(tempValue); + return err; +}}; #if defined(FEATURE_LEDSTRIP) && defined(FEATURE_OTA) template<> struct nvsGetterHelper { static esp_err_t nvs_get(nvs_handle handle, const char* key, OtaAnimationModes* out_value) { @@ -355,6 +363,10 @@ template<> struct nvsSetterHelper { static esp_err_t nvs_set(n { return nvs_set_u8(handle, key, uint8_t(value)); }}; +template<> struct nvsSetterHelper { static esp_err_t nvs_set(nvs_handle handle, const char* key, HandbremseMode value) +{ + return nvs_set_u8(handle, key, uint8_t(value)); +}}; #if defined(FEATURE_LEDSTRIP) && defined(FEATURE_OTA) template<> struct nvsSetterHelper { static esp_err_t nvs_set(nvs_handle handle, const char* key, OtaAnimationModes value) { diff --git a/main/texts.cpp b/main/texts.cpp index e69de29..dea0f47 100644 --- a/main/texts.cpp +++ b/main/texts.cpp @@ -0,0 +1,535 @@ +#include "texts.h" +namespace bobbytexts { +//AboutMenu +char TEXT_ABOUT[] = "About"; +char TEXT_BACK[] = "Back"; + +//AccessPointWifiSettingsMenu +char TEXT_ACCESSPOINTWIFISETTINGS[] = "Access Point WiFi settings"; +char TEXT_WIFIAPENABLED[] = "AP enabled"; +char TEXT_RESEND_DNS[] = "Resend DNS"; +//char TEXT_BACK[] = "Back"; + +#ifdef TEXTS_PLUGIN +#include TEXTS_PLUGIN +#endif + +#ifdef FEATURE_BLUETOOTH +//BluetoothSettingsMenu +char TEXT_BLUETOOTHSETTINGS[] = "Bluetooth settings"; +char TEXT_BLUETOOTHBEGIN[] = "begin()"; +char TEXT_BLUETOOTHBEGINMASTER[] = "begin() Master"; +char TEXT_BLUETOOTHFLUSH[] = "flush()"; +char TEXT_BLUETOOTHEND[] = "end()"; +char TEXT_BLUETOOTHDISCONNECT[] = "disconnect()"; +char TEXT_AUTOBLUETOOTHMODE[] = "Auto bluetooth mode"; +//char TEXT_BACK[] = "Back"; + +//BmsMenu +#ifdef FEATURE_BMS +char TEXT_BMS[] = "BMS"; +char TEXT_CONNECTBMS[] = "Connect BMS"; +char TEXT_DISCONNECTBMS[] = "Disonnect BMS"; +char TEXT_TURNONCHARGE[] = "Turn on charge"; +char TEXT_TURNOFFCHARGE[] = "Turn off charge"; +char TEXT_TURNONDISCHARGE[] = "Turn on discharge"; +char TEXT_TURNOFFDISCHARGE[] = "Turn off discharge"; +//char TEXT_BACK[] = "Back"; +#endif +#endif + +#ifdef FEATURE_BLE +//BleSettingsMenu +char TEXT_BLESETTINGS[] = "BLE settings"; +char TEXT_BLEENABLED[] = "BLE enabled"; +//char TEXT_BACK[] = "Back"; +#endif + +#ifdef FEATURE_CLOUD +//CloudSettingsMenu +char TEXT_CLOUDSETTINGS[] = "Cloud settings"; +char TEXT_CLOUDENABLED[] = "Tcp Cloud enabled"; +char TEXT_UDPCLOUDENABLED[] = "Udp Cloud enabled"; +char TEXT_CLOUDTRANSMITTIMEOUT[] = "Transmit timeout"; +char TEXT_CLOUDCOLLECTRATE[] = "Cloud collect rate"; +char TEXT_CLOUDSENDRATE[] = "Cloud send rate"; +char TEXT_UDPSENDRATE[] = "Udp send rate"; +char TEXT_UDPUSESTRING[] = "Udp use std::string"; +//char TEXT_BACK[] = "Back"; +#endif + +//DebugMenu +char TEXT_LOADSETTINGS[] = "Load settings"; +char TEXT_SAVESETTINGS[] = "Save settings"; +char TEXT_ERASENVS[] = "Erase NVS"; +char TEXT_FRONTCOMMAND[] = "Front command"; +char TEXT_BACKCOMMAND[] = "Back command"; +char TEXT_FRONTLEFTCOMMAND[] = "Front left command"; +char TEXT_FRONTRIGHTCOMMAND[] = "Front right command"; +char TEXT_BACKLEFTCOMMAND[] = "Back left command"; +char TEXT_BACKRIGHTCOMMAND[] = "Back right command"; +char TEXT_FRONTFEEDBACK[] = "Front feedback"; +char TEXT_BACKFEEDBACK[] = "Back feedback"; +char TEXT_FRONTLEFTFEEDBACK[] = "Front left feedback"; +char TEXT_FRONTRIGHTFEEDBACK[] = "Front right feedback"; +char TEXT_BACKLEFTFEEDBACK[] = "Back left feedback"; +char TEXT_BACKRIGHTFEEDBACK[] = "Back right feedback"; +//char TEXT_BACK[] = "Back"; + +//MainMenu +char TEXT_MAINMENU[] = "Main menu"; +char TEXT_STATUS[] = "Status"; +char TEXT_SELECTMODE[] = "Select mode"; +char TEXT_MODESETTINGS[] = "Mode settings"; +char TEXT_PRESETS[] = "Presets"; +char TEXT_PROFILES[] = "Profiles"; +char TEXT_GRAPHS[] = "Graphs"; +//char TEXT_BMS[] = "BMS"; +char TEXT_SETTINGS[] = "Settings"; +char TEXT_LOCKVEHICLE[] = "Lock vehicle"; +char TEXT_MOSFETS[] = "Mosfets"; +char TEXT_DEMOS[] = "Demos"; +char TEXT_GARAGE[] = "Garage"; +char TEXT_UPDATE[] = "Update"; +char TEXT_POWEROFF[] = "Poweroff"; +char TEXT_REBOOT[] = "Reboot"; +char TEXT_DEBUG[] = "Debug"; +char TEXT_BATTERY[] = "Battery"; +char TEXT_BATTERYDEBUG[] = "Bat Debug Menu"; +char TEXT_TOGGLECLOUDDEBUG[] = "Cloud Debug"; + +//BatteryMenu +char TEXT_CELL_SERIES[] = "Cells (Series)"; +char TEXT_CELL_PARALLEL[] = "Cells (Parallel)"; +char TEXT_SELECT_CELL_TYPE[] = "Select Cell Type"; +char TEXT_CELL_TYPE[] = "Cell Type"; +char TEXT_BATTERY_CALIBRATE[] = "Calibrate Voltages"; +char TEXT_BATTERY_TYPE_22P[] = "22P cells"; +char TEXT_BATTERY_TYPE_HG2[] = "HG2 cells"; +char TEXT_BATTERY_TYPE_MH1[] = "MH1 cells"; +char TEXT_BATTERY_TYPE_VTC5[] = "VTC5 cells"; +char TEXT_BATTERY_TYPE_BAK_25R[] = "BAK / 25R cells"; +char TEXT_BATTERY_WHKM[] = "Wh per km"; +char TEXT_BATTERY_APPLYCALIB[] = "Apply calibration"; +char TEXT_VOLTAGECALIBRATION_RESET[] = "Reset calibration"; + +//CalibrateVoltageDisplay +char TEXT_VOLTAGECALIBRATION_30V[] = "Calibrate 30.0V"; +char TEXT_VOLTAGECALIBRATION_50V[] = "Calibrate 50.0V"; +char TEXT_VOLTAGECALIBRATION_VALUE_30_FRONT[] = "30V Front"; +char TEXT_VOLTAGECALIBRATION_VALUE_30_BACK[] = "30V Back"; +char TEXT_VOLTAGECALIBRATION_VALUE_50_FRONT[] = "50V Front"; +char TEXT_VOLTAGECALIBRATION_VALUE_50_BACK[] = "50V Back"; + +//SettingsMenu +//char TEXT_SETTINGS[] = "Settings"; +char TEXT_BACKLIGHT[] = "Backlight"; +char TEXT_LIMITSSETTINGS[] = "Limits settings"; +char TEXT_WIFISETTINGS[] = "WiFi settings"; +//char TEXT_BLUETOOTHSETTINGS[] = "Bluetooth settings"; +//char TEXT_BLESETTINGS[] = "BLE settings"; +//char TEXT_CLOUDSETTINGS[] = "Cloud settings"; +char TEXT_TIME[] = "Time"; +char TEXT_MODESSETTINGS[] = "Modes settings"; +char TEXT_CONTROLLERHARDWARESETTINGS[] = "Controller H/W settings"; +char TEXT_BOARDCOMPUTERHARDWARESETTINGS[] = "Boardcomputer H/W settings"; +char TEXT_AUTOCONNECTBMS[] = "Auto connect BMS"; +char TEXT_BUZZER[] = "Buzzer"; +char TEXT_FRONTLED[] = "Front LED"; +char TEXT_BACKLED[] = "Back LED"; +//char TEXT_ABOUT[] = "About"; +//char TEXT_BACK[] = "Back"; + +//ControllerHardwareSettings +//char TEXT_CONTROLLERHARDWARESETTINGS[] = "Controller H/W settings"; +char TEXT_WHEELDIAMETERMM[] = "Wheel diameter (mm)"; +char TEXT_WHEELDIAMETERINCH[] = "Wheel diameter (inch)"; +char TEXT_NUMMAGNETPOLES[] = "Num magnet poles"; +char TEXT_SETENABLED[] = "Set enabled"; +char TEXT_SETINVERTED[] = "Set inverted"; +char TEXT_SWAPFRONTBACK[] = "Swap front/back"; +#ifdef FEATURE_CAN +char TEXT_FRONTSENDCAN[] = "Front send CAN"; +char TEXT_BACKSENDCAN[] = "Back send CAN"; +char TEXT_CANTRANSMITTIMEOUT[] = "CanTransmitTimeout"; +char TEXT_CANRECEIVETIMEOUT[] = "CanReceiveTimeout"; +#endif +//char TEXT_BACK[] = "Back"; + +//StationWifiSettingsMenu +char TEXT_STATIONWIFISETTINGS[] = "Station WiFi settings"; +char TEXT_WIFISTAENABLED[] = "STA enabled"; +char TEXT_WIFITRIGGERSCAN[] = "Trigger Scan"; +char TEXT_WIFISCANRESULTS[] = "WiFi scan results"; +//char TEXT_BACK[] = "Back"; + +//DemosMenu +//char TEXT_DEMOS[] = "Demos"; +char TEXT_STARFIELD[] = "Starfield"; +char TEXT_PINGPONG[] = "PingPong"; +char TEXT_SPIRO[] = "Spiro"; +char TEXT_GAMEOFLIFE[] = "GameOfLife"; +//char TEXT_BACK[] = "Back"; + +//BuzzerMenu +//char TEXT_BUZZER[] = "Buzzer"; +char TEXT_FRONTFREQ[] = "Front freq"; +char TEXT_FRONTPATTERN[] = "Front pattern"; +char TEXT_BACKFREQ[] = "Back freq"; +char TEXT_BACKPATTERN[] = "Back pattern"; +char TEXT_REVERSEBEEP[] = "Reverse beep"; +char TEXT_REVERSEBEEPFREQ0[] = "Reverse beep freq0"; +char TEXT_REVERSEBEEPFREQ1[] = "Reverse beep freq1"; +char TEXT_REVERSEBEEPDURATION0[] = "Reverse beep duration0"; +char TEXT_REVERSEBEEPDURATION1[] = "Reverse beep duration1"; +//char TEXT_BACK[] = "Back"; + +//LimitsSettingsMenu +//char TEXT_LIMITSSETTINGS[] = "Limit settings"; +char TEXT_IMOTMAX[] = "iMotMax"; +char TEXT_IDCMAX[] = "iDcMax"; +char TEXT_NMOTMAXKMH[] = "nMotMaxKmh"; +char TEXT_NMOTMAX[] = "nMotMax"; +char TEXT_FIELDWEAKMAX[] = "fldWkMax"; +char TEXT_PHASEADVMAX[] = "phsAdvMax"; +//char TEXT_BACK[] = "Back"; + +//DebugMenu +//char TEXT_DEBUG[] = "Debug"; +char TEXT_DYNAMICMENU[] = "Dynamic menu"; +//char TEXT_BACK[] = "Back"; + +//DefaultModeSettingsMenu +//char TEXT_DEFAULTMODESETTINGS[] = "Default mode settings"; +char TEXT_MODELMODE[] = "Model mode"; +char TEXT_HYBRIDMODE[] = "Hybrid mode"; +char TEXT_SQUAREGAS[] = "Square gas"; +char TEXT_SQUAREBREMS[] = "Square brems"; +char TEXT_ENABLESMOOTHINGUP[] = "Enable up smoothing"; +char TEXT_ENABLESMOOTHINGDOWN[] = "Enable down smoothing"; +char TEXT_ENABLEFWSMOOTHINGUP[] = "Enable fw up smoothing"; +char TEXT_ENABLEFWSMOOTHINGDOWN[] = "Enable fw down smoothing"; +char TEXT_FWSMOOTHING_LIMIT[] = "Fw smooth lower limit"; +char TEXT_SMOOTHINGVAL[] = "Smoothing"; +char TEXT_FRONTPERCENTAGE[] = "Front %"; +char TEXT_BACKPERCENTAGE[] = "Back %"; +char TEXT_ADDSCHWELLE[] = "Add/Sub Lim"; +char TEXT_SUBGASVAL[] = "Add Gas"; +char TEXT_SUBBRAKEVAL[] = "Add Brake"; +char TEXT_ADDGASVAL[] = "Sub Gas"; +char TEXT_ADDBRAKEVAL[] = "Sub Brake"; +char TEXT_HYBRIDENABLE[] = "Enable Hybrid mode"; +char TEXT_HYBRIDACTIVATIONLIMIT[] = "Hybrid activation-limit"; +char TEXT_HYBRIDDEACTIVATIONLIMIT[] = "Hybrid deactivation-limit"; +char TEXT_LIMITS_TO_NEAR[] = "Hybrid limits too near (>20)"; + +char TEXT_HANDBREMSE_ENABLE[] = "Enable Handbrems"; +char TEXT_HANDBREMSE_AUTOMATIC[] = "Automatic Handbrems"; +char TEXT_HANDBREMSE_MODE[] = "Handbrems Mode"; +char TEXT_HANDBREMSE_TRIGGERTIMEOUT[] = "Handbrems Timeout"; +//char TEXT_BACK[] = "Back"; + +//DynamicDebugMenu +//char TEXT_DYNAMICMENU[] = "Dynamic menu"; +//char TEXT_BACK[] = "Back"; + +//EnableMenu +//char TEXT_SETENABLED[] = "Set enabled"; +char TEXT_ENABLEFRONTLEFT[] = "Enable front left"; +char TEXT_ENABLEFRONTRIGHT[] = "Enable front right"; +char TEXT_ENABLEBACKLEFT[] = "Enable back left"; +char TEXT_ENABLEBACKRIGHT[] = "Enable back right"; +//char TEXT_BACK[] = "Back"; + +//GametrakModeSettingsMenu +char TEXT_GAMETRAKMODESETTINGS[] = "Gametrak mode settings"; + +//GenericWifiSettingsMenu +char TEXT_GENERICWIFISETTINGS[] = "Generic WiFi settings"; +//char TEXT_BACK[] = "Back"; + +//GraphsMenu +//char TEXT_GRAPHS[] = "Graphs"; +char TEXT_GAS[] = "Gas"; +char TEXT_BREMS[] = "Brems"; +char TEXT_POTIS[] = "Potis"; +char TEXT_AVGSPEED[] = "Avg. speed"; +char TEXT_AVGSPEEDKMH[] = "Avg. speed KMH"; +char TEXT_SUMCURRENT[] = "Sum current"; +char TEXT_FRONTVOLTAGE[] = "Front voltage"; +char TEXT_BACKVOLTAGE[] = "Back voltage"; +char TEXT_VOLTAGES[] = "Voltages"; +char TEXT_BMSVOLTAGE[] = "BMS voltage"; +char TEXT_BMSCURRENT[] = "BMS current"; +char TEXT_BMSPOWER[] = "BMS power"; +char TEXT_SUMCURRENTSCOMPARISON[] = "Sum currents comparison"; +char TEXT_MOTORCURRENTS[] = "Motor currents"; +char TEXT_RSSI[] = "RSSI"; +//char TEXT_BACK[] = "Back"; + +//InvertMenu +//char TEXT_SETINVERTED[] = "Set inverted"; +char TEXT_INVERTFRONTLEFT[] = "Invert front left"; +char TEXT_INVERTFRONTRIGHT[] = "Invert front right"; +char TEXT_INVERTBACKLEFT[] = "Invert back left"; +char TEXT_INVERTBACKRIGHT[] = "Invert back right"; +//char TEXT_BACK[] = "Back"; + +//LarsmModeSettingsMenu +char TEXT_LARSMMODESETTINGS[] = "Larsm mode settings"; +//char TEXT_MODELMODE[] = "Model mode"; +char TEXT_SETMODE[] = "Set mode"; +char TEXT_SETITERATIONS[] = "Set iterations"; +//char TEXT_BACK[] = "Back"; + +//MotortestModeSettingsMenu +char TEXT_MOTORTESTMODESETTINGS[] = "Motortest mode seetings"; +char TEXT_MOTORTESTMAXPWM[] = "Max Pwm"; +char TEXT_MOTORTESTMULTIPLIKATOR[] = "Acceleration"; + +//LedstripMenu +char TEXT_LEDSTRIP[] = "Ledstrip"; +char TEXT_LEDANIMATION[] = "LED Animation"; +char TEXT_BRAKELIGHTS[] = "Brake Lights"; +char TEXT_BLINKANIMATION[] = "Blink animation"; +char TEXT_ANIMATION_TYPE[] = "Blink animation"; +char TEXT_LEDSCOUNT[] = "LEDs Count"; +char TEXT_CENTEROFFSET[] = "Center Offset"; +char TEXT_SMALLOFFSET[] = "Small Offset"; +char TEXT_BIGOFFSET[] = "Big Offset"; +char TEXT_LEDSTRIP_MILLIAMP[] = "Ledstrip 0.1A"; +char TEXT_BLINKBEEP[] = "Blink Beep"; +char TEXT_FULLBLINK[] = "Full blink"; +char TEXT_LEDSTRIP_STVO[] = "Enable StVO"; +char TEXT_STVO_FRONTOFFSET[] = "StVO Front Offset"; +char TEXT_STVO_FRONTLENGTH[] = "StVO Front Length"; +char TEXT_STVO_ENABLEFRONTLIGHT[] = "StVO Front Enable"; +char TEXT_ANIMATION_MULTIPLIER[] = "Animation Multiplier"; +char TEXT_LEDSTRIP_BRIGHTNESS[] = "Ledstrip Brightness"; +char TEXT_LEDSTRIP_ALLCUSTOMOFF[] = "All custom off"; +char TEXT_LEDSTRIP_EN_BLINK_ANIM[] = "Animated Blink"; +char TEXT_LEDSTRIP_CHANGE_OTA_ANIM[] = "Change Ota animation"; + +char TEXT_OTAANIM_NONE[] = "None"; +char TEXT_OTAANIM_PROGRESS[] = "Progress Bar"; +char TEXT_OTAANIM_COLOR[] = "Color change"; +//char TEXT_BACK[] = "Back"; + +//LedstripSelectAnimationMenu +char TEXT_SELECTANIMATION[] = "Select Animation"; +char TEXT_ANIMATION_DEFAULTRAINBOW[] = "Default Rainbow"; +char TEXT_ANIMATION_BETTERRAINBOW[] = "Better Rainbow"; +char TEXT_ANIMATION_SPEEDSYNCANIMATION[] = "Speed Sync"; +char TEXT_ANIMATION_CUSTOMCOLOR[] = "Custom Color"; + +//LedstripSelectBlinkMenu +char TEXT_ANIMATION_BLINKNONE[] = "Blink Off"; +char TEXT_ANIMATION_BLINKLEFT[] = "Blink Left"; +char TEXT_ANIMATION_BLINKRIGHT[] = "Blink Right"; +char TEXT_ANIMATION_BLINKBOTH[] = "Blink Both"; + +//LockscreenSettingsMenu +char TEXT_LOCKSCREENSETTINGS[] = "Lockscreen Settings"; +char TEXT_ALLOWPRESETSWITCH[] = "Allow preset switch"; +char TEXT_PINDIGIT0[] = "PIN digit0"; +char TEXT_PINDIGIT1[] = "PIN digit1"; +char TEXT_PINDIGIT2[] = "PIN digit2"; +char TEXT_PINDIGIT3[] = "PIN digit3"; +//char TEXT_BACK[] = "Back"; + +//ModesSettingsMenu +//char TEXT_MODESSETTINGS[] = "Modes settings"; +char TEXT_DEFAULTMODESETTIGNS[] = "Default mode settings"; +char TEXT_TEMPOMATMODESETTINGS[] = "Tempomat mode settings"; +//char TEXT_LARSMMODESETTINGS[] = "Larsm mode settings"; +//char TEXT_GAMETRAKMODESETTINGS[] = "Gametrak mode settings"; +//char TEXT_BACK[] = "Back"; + +//MosfetsMenu +//char TEXT_MOSFETS[] = "Mosfets"; +char TEXT_MOSFET0[] = "Mosfet0"; +char TEXT_MOSFET1[] = "Mosfet1"; +char TEXT_MOSFET2[] = "Mosfet2"; + +//TempomatModeSettingsMenu +//char TEXT_TEMPOMATMODESETTINGS[] = "Tempomat mode settings"; +char TEXT_APPLY[] = "Apply"; +char TEXT_NCRUISEMOTTGT[] = "nCruiseMotTgt"; +//char TEXT_MODELMODE[] = "Model mode"; +//char TEXT_BACK[] = "Back"; + +//WiFiSettingsMenu +//char TEXT_WIFISETTINGS[] = "WiFi settings"; +//char TEXT_GENERICWIFISETTINGS[] = "Generic WiFi settings"; +//char TEXT_BACK[] = "Back"; + +//BoardcomputerHardwareSettingsMenu +//char TEXT_BOARDCOMPUTERHARDWARESETTINGS[] = "Boardcomputer H/W settings"; +//char TEXT_LOCKSCREENSETTINGS[] = "Lockscreen Settings"; +char TEXT_CALIBRATE[] = "Calibrate"; +char TEXT_SAMPLECOUNT[] = "sampleCount"; +char TEXT_GASMIN[] = "gasMin"; +char TEXT_GASMAX[] = "gasMax"; +char TEXT_BREMSMIN[] = "bremsMin"; +char TEXT_BREMSMAX[] = "bremsMax"; +char TEXT_DPADDEBOUNCE[] = "dpadDebounce"; +char TEXT_GAMETRAKCALIBRATE[] = "Gametrak calibrate"; +char TEXT_SETGAMETRAKXMIN[] = "Set gametrakXMin"; +char TEXT_SETGAMETRAKXMAX[] = "Set gametrakXMax"; +char TEXT_SETGAMETRAKYMIN[] = "Set gametrakYMin"; +char TEXT_SETGAMETRAKYMAX[] = "Set gametrakYMax"; +char TEXT_SETGAMETRAKDISTMIN[] = "Set gametrakDistMin"; +char TEXT_SETGAMETRAKDISTMAX[] = "Set gametrakDistMax"; +char TEXT_TIMERS[] = "Timers"; +//char TEXT_BACK[] = "Back"; + +//ProfilesMenu +//char TEXT_PROFILES[] = "Profiles"; +char TEXT_PROFILE0[] = "Profile 0"; +char TEXT_PROFILE1[] = "Profile 1"; +char TEXT_PROFILE2[] = "Profile 2"; +char TEXT_PROFILE3[] = "Profile 3"; +//char TEXT_BACK[] = "Back"; + +//PresetsMenu +//char TEXT_PRESETS[] = "Presets"; +char TEXT_DEFAULTEVERYTHING[] = "Default everything"; +char TEXT_DEFAULTLIMITS[] = "Default limits"; +char TEXT_KIDSLIMITS[] = "Kids limits"; +char TEXT_DEFAULTPOTI[] = "Default poti"; +char TEXT_DEFAULTCONTROLLERHARDWARE[] = "Default controller H/W"; +char TEXT_MOSFETSOFFCONTROLLERHARDWARE[] = "MOSFETs off controller H/W"; +char TEXT_SPINNERCONTROLLERHARDWARE[] = "Spinner controller H/W"; +char TEXT_DEFAULTBOARDCOMPUTERHARDWARE[] = "Default boardcomputer H/W"; +char TEXT_DEFAULTDEFAULTMODE[] = "Default defaultMode"; +char TEXT_SINUSOIDALDEFAULTMODE[] = "Sinusoidal defaultMode"; +char TEXT_DEFAULTTEMPOMATMODE[] = "Default tempomatMode"; +char TEXT_DEFAULTLARSMMODE[] = "Default larsmMode"; +char TEXT_STREET[] = "Street"; +char TEXT_SIDEWALK[] = "Sidewalk"; +char TEXT_POLICE[] = "Police"; +char TEXT_RACE[] = "Race"; + +//SelectModeMenu +//char TEXT_SELECTMODE[] = "Select mode"; +char TEXT_DEFAULT[] = "Default"; +char TEXT_TEMPOMAT[] = "Tempomat"; +char TEXT_LARSM[] = "Larsm"; +char TEXT_REMOTECONTROL[] = "Remote control"; +char TEXT_GAMETRAK[] = "Gametrak"; +char TEXT_MOTORTEST[] = "Motortest"; +//char TEXT_BACK[] = "Back"; + +//TimersMenu +//char TEXT_TIMERS[] = "Timers"; +char TEXT_POTIREADRATE[] = "Poti read rate"; +char TEXT_MODEUPDATERATE[] = "Mode update rate"; +char TEXT_STATSUPDATERATE[] = "Stats update rate"; +char TEXT_DISPLAYUPDATERATE[] = "Display update rate"; +char TEXT_DISPLAYREDRAWRATE[] = "Display redraw rate"; +#ifdef FEATURE_CAN +char TEXT_CANRECEIVERATE[] = "CAN receive rate"; +#endif +//char TEXT_BACK[] = "Back"; + +//TimeSettingsMenu +//char TEXT_TIME[] = "Time"; +char TEXT_OFFSET[] = "Offset"; +char TEXT_DAYLIGHTSAVINGMODE[] = "Daylight Saving"; +char TEXT_NTPENABLED[] = "NTP Enabled"; +char TEXT_NTPSERVER[] = "NTP Server"; +char TEXT_NTPMODE[] = "NTP Mode"; +char TEXT_NTPINTERVAL[] = "NTP Interval"; +//char TEXT_BACK[] = "Back"; + +//ChangeValueDisplay +char TEXT_OFF[] = "Off"; +char TEXT_MASTER[] = "Master"; +char TEXT_SLAVE[] = "Slave"; + +//ChangeValueDisplay +char TEXT_OPENMODE[] = "Open mode"; +char TEXT_VOLTAGE[] = "Voltage"; +char TEXT_SPEED[] = "Speed"; +char TEXT_TORQUE[] = "Torque"; +//char TEXT_BACK[] = "Back"; + +//ChangeValueDisplay +char TEXT_COMMUTATION[] = "Commutation"; +char TEXT_SINUSOIDAL[] = "Sinusoidal"; +char TEXT_FIELDORIENTEDCONTROL[] = "Field oriented control"; +//char TEXT_BACK[] = "Back"; + +//ChangeValueDisplay +char TEXT_HANDBREMS_MOSFETS_OFF[] = "Mosfets off"; +char TEXT_HANDBREMS_OPENMODE[] = "Open Mode"; +char TEXT_HANDBREMS_SPEED0[] = "Speed 0"; +char TEXT_HANDBREMSE[] = "Handbremse"; + +//ChangeValueDisplay +char TEXT_LARSMMODE1[] = "Mode1"; +char TEXT_LARSMMODE2[] = "Mode2"; +char TEXT_LARSMMODE3[] = "Mode3"; +char TEXT_LARSMMODE4[] = "Mode4"; +//char TEXT_BACK[] = "Back"; + +//ChangeValueDisplay +//char TEXT_COMMUTATION[] = "Commutation"; +//char TEXT_SINUSOIDAL[] = "Sinusoidal"; +char TEXT_FOCVOLTAGE[] = "FOC/Voltage"; +char TEXT_FOCSPEED[] = "FOC/Speed"; +char TEXT_FOCTORQUE[] = "FOC/Torque"; +//char TEXT_BACK[] = "Back"; + +//ChangeValueDisplay +char TEXT_WIFI_MODE_NULL[] = "WIFI_MODE_NULL"; +char TEXT_WIFI_MODE_STA[] = "WIFI_MODE_STA"; +char TEXT_WIFI_MODE_AP[] = "WIFI_MODE_AP"; +char TEXT_WIFI_MODE_APSTA[] = "WIFI_MODE_APSTA"; +//char TEXT_BACK[] = "Back"; + +//ChangeValueDisplay +char TEXT_WIFI_POWER_19_5dBm[] = "19.5dBm"; +char TEXT_WIFI_POWER_19dBm[] = "19dBm"; +char TEXT_WIFI_POWER_18_5dBm[] = "18.5dBm"; +char TEXT_WIFI_POWER_17dBm[] = "17dBm"; +char TEXT_WIFI_POWER_15dBm[] = "15dBm"; +char TEXT_WIFI_POWER_13dBm[] = "13dBm"; +char TEXT_WIFI_POWER_11dBm[] = "11dBm"; +char TEXT_WIFI_POWER_8_5dBm[] = "8.5dBm"; +char TEXT_WIFI_POWER_7dBm[] = "7dBm"; +char TEXT_WIFI_POWER_5dBm[] = "5dBm"; +char TEXT_WIFI_POWER_2dBm[] = "2dBm"; +char TEXT_WIFI_POWER_MINUS_1dBm[] = "-1dBm"; +//char TEXT_BACK[] = "Back"; + +//Crashmenu +char TEXT_CRASHMENU[] = "Crash Menu"; +char TEXT_CRASH_ASSERT[] = "assert(0)"; +char TEXT_CRASH_DIVZERO[] = "42 / 0"; + +//SelectBuildServerMenu +char TEXT_SELECTBUILDSERVERMENU[] = "Select Buildserver"; +char TEXT_NOBUILDSERVERCONFIGURED[] = "Not configured"; + +//Otamenu +char TEXT_UPDATENOW[] = "Update now"; +char TEXT_SELECTBUILD[] = "Select build"; +char TEXT_OTA_NOBUILDSERVERAVAILABLE[] = "E:No server saved."; +char TEXT_OTA_NOBUILDSERVERSELECTED[] = "E:No server selected."; +char TEXT_OTA_NOCONNECTION[] = "E:No internet."; +char TEXT_OTA_WAITFORRESPONSE[] = "Wait for response..."; + +//LedstripColorMenu +char TEXT_LEDSTRIPCOLORMENU[] = "Customize Ledstrip"; + +//StatisticsMenu +char TEXT_STATISTICSMENU[] = "Statistics"; +char TEXT_STATSSAVE[] = "Save kilometers"; +char TEXT_STATSCLEAR[] = "Clear current km"; + +#ifdef FEATURE_CAN +char TEXT_POWERSUPPLY[] = "Powersupply"; +#endif +char TEXT_REENABLE_MENUITEMS[] = "Show advanced"; +} // namespace diff --git a/main/texts.h b/main/texts.h index b52a2b9..75750ac 100644 --- a/main/texts.h +++ b/main/texts.h @@ -1,14 +1,13 @@ -#pragma once - +namespace bobbytexts { //AboutMenu -constexpr char TEXT_ABOUT[] = "About"; -constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_ABOUT[]; +extern char TEXT_BACK[]; //AccessPointWifiSettingsMenu -constexpr char TEXT_ACCESSPOINTWIFISETTINGS[] = "Access Point WiFi settings"; -constexpr char TEXT_WIFIAPENABLED[] = "AP enabled"; -constexpr char TEXT_RESEND_DNS[] = "Resend DNS"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_ACCESSPOINTWIFISETTINGS[]; +extern char TEXT_WIFIAPENABLED[]; +extern char TEXT_RESEND_DNS[]; +//extern char TEXT_BACK[]; #ifdef TEXTS_PLUGIN #include TEXTS_PLUGIN @@ -16,507 +15,522 @@ constexpr char TEXT_RESEND_DNS[] = "Resend DNS"; #ifdef FEATURE_BLUETOOTH //BluetoothSettingsMenu -constexpr char TEXT_BLUETOOTHSETTINGS[] = "Bluetooth settings"; -constexpr char TEXT_BLUETOOTHBEGIN[] = "begin()"; -constexpr char TEXT_BLUETOOTHBEGINMASTER[] = "begin() Master"; -constexpr char TEXT_BLUETOOTHFLUSH[] = "flush()"; -constexpr char TEXT_BLUETOOTHEND[] = "end()"; -constexpr char TEXT_BLUETOOTHDISCONNECT[] = "disconnect()"; -constexpr char TEXT_AUTOBLUETOOTHMODE[] = "Auto bluetooth mode"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_BLUETOOTHSETTINGS[]; +extern char TEXT_BLUETOOTHBEGIN[]; +extern char TEXT_BLUETOOTHBEGINMASTER[]; +extern char TEXT_BLUETOOTHFLUSH[]; +extern char TEXT_BLUETOOTHEND[]; +extern char TEXT_BLUETOOTHDISCONNECT[]; +extern char TEXT_AUTOBLUETOOTHMODE[]; +//extern char TEXT_BACK[]; //BmsMenu #ifdef FEATURE_BMS -constexpr char TEXT_BMS[] = "BMS"; -constexpr char TEXT_CONNECTBMS[] = "Connect BMS"; -constexpr char TEXT_DISCONNECTBMS[] = "Disonnect BMS"; -constexpr char TEXT_TURNONCHARGE[] = "Turn on charge"; -constexpr char TEXT_TURNOFFCHARGE[] = "Turn off charge"; -constexpr char TEXT_TURNONDISCHARGE[] = "Turn on discharge"; -constexpr char TEXT_TURNOFFDISCHARGE[] = "Turn off discharge"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_BMS[]; +extern char TEXT_CONNECTBMS[]; +extern char TEXT_DISCONNECTBMS[]; +extern char TEXT_TURNONCHARGE[]; +extern char TEXT_TURNOFFCHARGE[]; +extern char TEXT_TURNONDISCHARGE[]; +extern char TEXT_TURNOFFDISCHARGE[]; +//extern char TEXT_BACK[]; #endif #endif #ifdef FEATURE_BLE //BleSettingsMenu -constexpr char TEXT_BLESETTINGS[] = "BLE settings"; -constexpr char TEXT_BLEENABLED[] = "BLE enabled"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_BLESETTINGS[]; +extern char TEXT_BLEENABLED[]; +//extern char TEXT_BACK[]; #endif #ifdef FEATURE_CLOUD //CloudSettingsMenu -constexpr char TEXT_CLOUDSETTINGS[] = "Cloud settings"; -constexpr char TEXT_CLOUDENABLED[] = "Tcp Cloud enabled"; -constexpr char TEXT_UDPCLOUDENABLED[] = "Udp Cloud enabled"; -constexpr char TEXT_CLOUDTRANSMITTIMEOUT[] = "Transmit timeout"; -constexpr char TEXT_CLOUDCOLLECTRATE[] = "Cloud collect rate"; -constexpr char TEXT_CLOUDSENDRATE[] = "Cloud send rate"; -constexpr char TEXT_UDPSENDRATE[] = "Udp send rate"; -constexpr char TEXT_UDPUSESTRING[] = "Udp use std::string"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_CLOUDSETTINGS[]; +extern char TEXT_CLOUDENABLED[]; +extern char TEXT_UDPCLOUDENABLED[]; +extern char TEXT_CLOUDTRANSMITTIMEOUT[]; +extern char TEXT_CLOUDCOLLECTRATE[]; +extern char TEXT_CLOUDSENDRATE[]; +extern char TEXT_UDPSENDRATE[]; +extern char TEXT_UDPUSESTRING[]; +//extern char TEXT_BACK[]; #endif //DebugMenu -constexpr char TEXT_LOADSETTINGS[] = "Load settings"; -constexpr char TEXT_SAVESETTINGS[] = "Save settings"; -constexpr char TEXT_ERASENVS[] = "Erase NVS"; -constexpr char TEXT_FRONTCOMMAND[] = "Front command"; -constexpr char TEXT_BACKCOMMAND[] = "Back command"; -constexpr char TEXT_FRONTLEFTCOMMAND[] = "Front left command"; -constexpr char TEXT_FRONTRIGHTCOMMAND[] = "Front right command"; -constexpr char TEXT_BACKLEFTCOMMAND[] = "Back left command"; -constexpr char TEXT_BACKRIGHTCOMMAND[] = "Back right command"; -constexpr char TEXT_FRONTFEEDBACK[] = "Front feedback"; -constexpr char TEXT_BACKFEEDBACK[] = "Back feedback"; -constexpr char TEXT_FRONTLEFTFEEDBACK[] = "Front left feedback"; -constexpr char TEXT_FRONTRIGHTFEEDBACK[] = "Front right feedback"; -constexpr char TEXT_BACKLEFTFEEDBACK[] = "Back left feedback"; -constexpr char TEXT_BACKRIGHTFEEDBACK[] = "Back right feedback"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_LOADSETTINGS[]; +extern char TEXT_SAVESETTINGS[]; +extern char TEXT_ERASENVS[]; +extern char TEXT_FRONTCOMMAND[]; +extern char TEXT_BACKCOMMAND[]; +extern char TEXT_FRONTLEFTCOMMAND[]; +extern char TEXT_FRONTRIGHTCOMMAND[]; +extern char TEXT_BACKLEFTCOMMAND[]; +extern char TEXT_BACKRIGHTCOMMAND[]; +extern char TEXT_FRONTFEEDBACK[]; +extern char TEXT_BACKFEEDBACK[]; +extern char TEXT_FRONTLEFTFEEDBACK[]; +extern char TEXT_FRONTRIGHTFEEDBACK[]; +extern char TEXT_BACKLEFTFEEDBACK[]; +extern char TEXT_BACKRIGHTFEEDBACK[]; +//extern char TEXT_BACK[]; //MainMenu -constexpr char TEXT_MAINMENU[] = "Main menu"; -constexpr char TEXT_STATUS[] = "Status"; -constexpr char TEXT_SELECTMODE[] = "Select mode"; -constexpr char TEXT_MODESETTINGS[] = "Mode settings"; -constexpr char TEXT_PRESETS[] = "Presets"; -constexpr char TEXT_PROFILES[] = "Profiles"; -constexpr char TEXT_GRAPHS[] = "Graphs"; -//constexpr char TEXT_BMS[] = "BMS"; -constexpr char TEXT_SETTINGS[] = "Settings"; -constexpr char TEXT_LOCKVEHICLE[] = "Lock vehicle"; -constexpr char TEXT_MOSFETS[] = "Mosfets"; -constexpr char TEXT_DEMOS[] = "Demos"; -constexpr char TEXT_GARAGE[] = "Garage"; -constexpr char TEXT_UPDATE[] = "Update"; -constexpr char TEXT_POWEROFF[] = "Poweroff"; -constexpr char TEXT_REBOOT[] = "Reboot"; -constexpr char TEXT_DEBUG[] = "Debug"; -constexpr char TEXT_BATTERY[] = "Battery"; -constexpr char TEXT_BATTERYDEBUG[] = "Bat Debug Menu"; -constexpr char TEXT_TOGGLECLOUDDEBUG[] = "Cloud Debug"; +extern char TEXT_MAINMENU[]; +extern char TEXT_STATUS[]; +extern char TEXT_SELECTMODE[]; +extern char TEXT_MODESETTINGS[]; +extern char TEXT_PRESETS[]; +extern char TEXT_PROFILES[]; +extern char TEXT_GRAPHS[]; +//extern char TEXT_BMS[]; +extern char TEXT_SETTINGS[]; +extern char TEXT_LOCKVEHICLE[]; +extern char TEXT_MOSFETS[]; +extern char TEXT_DEMOS[]; +extern char TEXT_GARAGE[]; +extern char TEXT_UPDATE[]; +extern char TEXT_POWEROFF[]; +extern char TEXT_REBOOT[]; +extern char TEXT_DEBUG[]; +extern char TEXT_BATTERY[]; +extern char TEXT_BATTERYDEBUG[]; +extern char TEXT_TOGGLECLOUDDEBUG[]; //BatteryMenu -constexpr char TEXT_CELL_SERIES[] = "Cells (Series)"; -constexpr char TEXT_CELL_PARALLEL[] = "Cells (Parallel)"; -constexpr char TEXT_SELECT_CELL_TYPE[] = "Select Cell Type"; -constexpr char TEXT_CELL_TYPE[] = "Cell Type"; -constexpr char TEXT_BATTERY_CALIBRATE[] = "Calibrate Voltages"; -constexpr char TEXT_BATTERY_TYPE_22P[] = "22P cells"; -constexpr char TEXT_BATTERY_TYPE_HG2[] = "HG2 cells"; -constexpr char TEXT_BATTERY_TYPE_MH1[] = "MH1 cells"; -constexpr char TEXT_BATTERY_TYPE_VTC5[] = "VTC5 cells"; -constexpr char TEXT_BATTERY_TYPE_BAK_25R[] = "BAK / 25R cells"; -constexpr char TEXT_BATTERY_WHKM[] = "Wh per km"; -constexpr char TEXT_BATTERY_APPLYCALIB[] = "Apply calibration"; -constexpr char TEXT_VOLTAGECALIBRATION_RESET[] = "Reset calibration"; +extern char TEXT_CELL_SERIES[]; +extern char TEXT_CELL_PARALLEL[]; +extern char TEXT_SELECT_CELL_TYPE[]; +extern char TEXT_CELL_TYPE[]; +extern char TEXT_BATTERY_CALIBRATE[]; +extern char TEXT_BATTERY_TYPE_22P[]; +extern char TEXT_BATTERY_TYPE_HG2[]; +extern char TEXT_BATTERY_TYPE_MH1[]; +extern char TEXT_BATTERY_TYPE_VTC5[]; +extern char TEXT_BATTERY_TYPE_BAK_25R[]; +extern char TEXT_BATTERY_WHKM[]; +extern char TEXT_BATTERY_APPLYCALIB[]; +extern char TEXT_VOLTAGECALIBRATION_RESET[]; //CalibrateVoltageDisplay -constexpr char TEXT_VOLTAGECALIBRATION_30V[] = "Calibrate 30.0V"; -constexpr char TEXT_VOLTAGECALIBRATION_50V[] = "Calibrate 50.0V"; -constexpr char TEXT_VOLTAGECALIBRATION_VALUE_30_FRONT[] = "30V Front"; -constexpr char TEXT_VOLTAGECALIBRATION_VALUE_30_BACK[] = "30V Back"; -constexpr char TEXT_VOLTAGECALIBRATION_VALUE_50_FRONT[] = "50V Front"; -constexpr char TEXT_VOLTAGECALIBRATION_VALUE_50_BACK[] = "50V Back"; +extern char TEXT_VOLTAGECALIBRATION_30V[]; +extern char TEXT_VOLTAGECALIBRATION_50V[]; +extern char TEXT_VOLTAGECALIBRATION_VALUE_30_FRONT[]; +extern char TEXT_VOLTAGECALIBRATION_VALUE_30_BACK[]; +extern char TEXT_VOLTAGECALIBRATION_VALUE_50_FRONT[]; +extern char TEXT_VOLTAGECALIBRATION_VALUE_50_BACK[]; //SettingsMenu -//constexpr char TEXT_SETTINGS[] = "Settings"; -constexpr char TEXT_BACKLIGHT[] = "Backlight"; -constexpr char TEXT_LIMITSSETTINGS[] = "Limits settings"; -constexpr char TEXT_WIFISETTINGS[] = "WiFi settings"; -//constexpr char TEXT_BLUETOOTHSETTINGS[] = "Bluetooth settings"; -//constexpr char TEXT_BLESETTINGS[] = "BLE settings"; -//constexpr char TEXT_CLOUDSETTINGS[] = "Cloud settings"; -constexpr char TEXT_TIME[] = "Time"; -constexpr char TEXT_MODESSETTINGS[] = "Modes settings"; -constexpr char TEXT_CONTROLLERHARDWARESETTINGS[] = "Controller H/W settings"; -constexpr char TEXT_BOARDCOMPUTERHARDWARESETTINGS[] = "Boardcomputer H/W settings"; -constexpr char TEXT_AUTOCONNECTBMS[] = "Auto connect BMS"; -constexpr char TEXT_BUZZER[] = "Buzzer"; -constexpr char TEXT_FRONTLED[] = "Front LED"; -constexpr char TEXT_BACKLED[] = "Back LED"; -//constexpr char TEXT_ABOUT[] = "About"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_SETTINGS[]; +extern char TEXT_BACKLIGHT[]; +extern char TEXT_LIMITSSETTINGS[]; +extern char TEXT_WIFISETTINGS[]; +//extern char TEXT_BLUETOOTHSETTINGS[]; +//extern char TEXT_BLESETTINGS[]; +//extern char TEXT_CLOUDSETTINGS[]; +extern char TEXT_TIME[]; +extern char TEXT_MODESSETTINGS[]; +extern char TEXT_CONTROLLERHARDWARESETTINGS[]; +extern char TEXT_BOARDCOMPUTERHARDWARESETTINGS[]; +extern char TEXT_AUTOCONNECTBMS[]; +extern char TEXT_BUZZER[]; +extern char TEXT_FRONTLED[]; +extern char TEXT_BACKLED[]; +//extern char TEXT_ABOUT[]; +//extern char TEXT_BACK[]; //ControllerHardwareSettings -//constexpr char TEXT_CONTROLLERHARDWARESETTINGS[] = "Controller H/W settings"; -constexpr char TEXT_WHEELDIAMETERMM[] = "Wheel diameter (mm)"; -constexpr char TEXT_WHEELDIAMETERINCH[] = "Wheel diameter (inch)"; -constexpr char TEXT_NUMMAGNETPOLES[] = "Num magnet poles"; -constexpr char TEXT_SETENABLED[] = "Set enabled"; -constexpr char TEXT_SETINVERTED[] = "Set inverted"; -constexpr char TEXT_SWAPFRONTBACK[] = "Swap front/back"; +//extern char TEXT_CONTROLLERHARDWARESETTINGS[]; +extern char TEXT_WHEELDIAMETERMM[]; +extern char TEXT_WHEELDIAMETERINCH[]; +extern char TEXT_NUMMAGNETPOLES[]; +extern char TEXT_SETENABLED[]; +extern char TEXT_SETINVERTED[]; +extern char TEXT_SWAPFRONTBACK[]; #ifdef FEATURE_CAN -constexpr char TEXT_FRONTSENDCAN[] = "Front send CAN"; -constexpr char TEXT_BACKSENDCAN[] = "Back send CAN"; -constexpr char TEXT_CANTRANSMITTIMEOUT[] = "CanTransmitTimeout"; -constexpr char TEXT_CANRECEIVETIMEOUT[] = "CanReceiveTimeout"; +extern char TEXT_FRONTSENDCAN[]; +extern char TEXT_BACKSENDCAN[]; +extern char TEXT_CANTRANSMITTIMEOUT[]; +extern char TEXT_CANRECEIVETIMEOUT[]; #endif -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_BACK[]; //StationWifiSettingsMenu -constexpr char TEXT_STATIONWIFISETTINGS[] = "Station WiFi settings"; -constexpr char TEXT_WIFISTAENABLED[] = "STA enabled"; -constexpr char TEXT_WIFITRIGGERSCAN[] = "Trigger Scan"; -constexpr char TEXT_WIFISCANRESULTS[] = "WiFi scan results"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_STATIONWIFISETTINGS[]; +extern char TEXT_WIFISTAENABLED[]; +extern char TEXT_WIFITRIGGERSCAN[]; +extern char TEXT_WIFISCANRESULTS[]; +//extern char TEXT_BACK[]; //DemosMenu -//constexpr char TEXT_DEMOS[] = "Demos"; -constexpr char TEXT_STARFIELD[] = "Starfield"; -constexpr char TEXT_PINGPONG[] = "PingPong"; -constexpr char TEXT_SPIRO[] = "Spiro"; -constexpr char TEXT_GAMEOFLIFE[] = "GameOfLife"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_DEMOS[]; +extern char TEXT_STARFIELD[]; +extern char TEXT_PINGPONG[]; +extern char TEXT_SPIRO[]; +extern char TEXT_GAMEOFLIFE[]; +//extern char TEXT_BACK[]; //BuzzerMenu -//constexpr char TEXT_BUZZER[] = "Buzzer"; -constexpr char TEXT_FRONTFREQ[] = "Front freq"; -constexpr char TEXT_FRONTPATTERN[] = "Front pattern"; -constexpr char TEXT_BACKFREQ[] = "Back freq"; -constexpr char TEXT_BACKPATTERN[] = "Back pattern"; -constexpr char TEXT_REVERSEBEEP[] = "Reverse beep"; -constexpr char TEXT_REVERSEBEEPFREQ0[] = "Reverse beep freq0"; -constexpr char TEXT_REVERSEBEEPFREQ1[] = "Reverse beep freq1"; -constexpr char TEXT_REVERSEBEEPDURATION0[] = "Reverse beep duration0"; -constexpr char TEXT_REVERSEBEEPDURATION1[] = "Reverse beep duration1"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_BUZZER[]; +extern char TEXT_FRONTFREQ[]; +extern char TEXT_FRONTPATTERN[]; +extern char TEXT_BACKFREQ[]; +extern char TEXT_BACKPATTERN[]; +extern char TEXT_REVERSEBEEP[]; +extern char TEXT_REVERSEBEEPFREQ0[]; +extern char TEXT_REVERSEBEEPFREQ1[]; +extern char TEXT_REVERSEBEEPDURATION0[]; +extern char TEXT_REVERSEBEEPDURATION1[]; +//extern char TEXT_BACK[]; //LimitsSettingsMenu -//constexpr char TEXT_LIMITSSETTINGS[] = "Limit settings"; -constexpr char TEXT_IMOTMAX[] = "iMotMax"; -constexpr char TEXT_IDCMAX[] = "iDcMax"; -constexpr char TEXT_NMOTMAXKMH[] = "nMotMaxKmh"; -constexpr char TEXT_NMOTMAX[] = "nMotMax"; -constexpr char TEXT_FIELDWEAKMAX[] = "fldWkMax"; -constexpr char TEXT_PHASEADVMAX[] = "phsAdvMax"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_LIMITSSETTINGS[]; +extern char TEXT_IMOTMAX[]; +extern char TEXT_IDCMAX[]; +extern char TEXT_NMOTMAXKMH[]; +extern char TEXT_NMOTMAX[]; +extern char TEXT_FIELDWEAKMAX[]; +extern char TEXT_PHASEADVMAX[]; +//extern char TEXT_BACK[]; //DebugMenu -//constexpr char TEXT_DEBUG[] = "Debug"; -constexpr char TEXT_DYNAMICMENU[] = "Dynamic menu"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_DEBUG[]; +extern char TEXT_DYNAMICMENU[]; +//extern char TEXT_BACK[]; //DefaultModeSettingsMenu -//constexpr char TEXT_DEFAULTMODESETTINGS[] = "Default mode settings"; -constexpr char TEXT_MODELMODE[] = "Model mode"; -constexpr char TEXT_HYBRIDMODE[] = "Hybrid mode"; -constexpr char TEXT_SQUAREGAS[] = "Square gas"; -constexpr char TEXT_SQUAREBREMS[] = "Square brems"; -constexpr char TEXT_ENABLESMOOTHINGUP[] = "Enable up smoothing"; -constexpr char TEXT_ENABLESMOOTHINGDOWN[] = "Enable down smoothing"; -constexpr char TEXT_ENABLEFWSMOOTHINGUP[] = "Enable fw up smoothing"; -constexpr char TEXT_ENABLEFWSMOOTHINGDOWN[] = "Enable fw down smoothing"; -constexpr char TEXT_FWSMOOTHING_LIMIT[] = "Fw smooth lower limit"; -constexpr char TEXT_SMOOTHINGVAL[] = "Smoothing"; -constexpr char TEXT_FRONTPERCENTAGE[] = "Front %"; -constexpr char TEXT_BACKPERCENTAGE[] = "Back %"; -constexpr char TEXT_ADDSCHWELLE[] = "Add/Sub Lim"; -constexpr char TEXT_SUBGASVAL[] = "Add Gas"; -constexpr char TEXT_SUBBRAKEVAL[] = "Add Brake"; -constexpr char TEXT_ADDGASVAL[] = "Sub Gas"; -constexpr char TEXT_ADDBRAKEVAL[] = "Sub Brake"; -constexpr char TEXT_HYBRIDENABLE[] = "Enable Hybrid mode"; -constexpr char TEXT_HYBRIDACTIVATIONLIMIT[] = "Hybrid activation-limit"; -constexpr char TEXT_HYBRIDDEACTIVATIONLIMIT[] = "Hybrid deactivation-limit"; -constexpr char TEXT_LIMITS_TO_NEAR[] = "Hybrid limits too near (>20)"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_DEFAULTMODESETTINGS[]; +extern char TEXT_MODELMODE[]; +extern char TEXT_HYBRIDMODE[]; +extern char TEXT_SQUAREGAS[]; +extern char TEXT_SQUAREBREMS[]; +extern char TEXT_ENABLESMOOTHINGUP[]; +extern char TEXT_ENABLESMOOTHINGDOWN[]; +extern char TEXT_ENABLEFWSMOOTHINGUP[]; +extern char TEXT_ENABLEFWSMOOTHINGDOWN[]; +extern char TEXT_FWSMOOTHING_LIMIT[]; +extern char TEXT_SMOOTHINGVAL[]; +extern char TEXT_FRONTPERCENTAGE[]; +extern char TEXT_BACKPERCENTAGE[]; +extern char TEXT_ADDSCHWELLE[]; +extern char TEXT_SUBGASVAL[]; +extern char TEXT_SUBBRAKEVAL[]; +extern char TEXT_ADDGASVAL[]; +extern char TEXT_ADDBRAKEVAL[]; +extern char TEXT_HYBRIDENABLE[]; +extern char TEXT_HYBRIDACTIVATIONLIMIT[]; +extern char TEXT_HYBRIDDEACTIVATIONLIMIT[]; +extern char TEXT_LIMITS_TO_NEAR[]; + +extern char TEXT_HANDBREMSE_ENABLE[]; +extern char TEXT_HANDBREMSE_AUTOMATIC[]; +extern char TEXT_HANDBREMSE_MODE[]; +extern char TEXT_HANDBREMSE_TRIGGERTIMEOUT[]; +extern char TEXT_HANDBREMSE[]; +//extern char TEXT_BACK[]; //DynamicDebugMenu -//constexpr char TEXT_DYNAMICMENU[] = "Dynamic menu"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_DYNAMICMENU[]; +//extern char TEXT_BACK[]; //EnableMenu -//constexpr char TEXT_SETENABLED[] = "Set enabled"; -constexpr char TEXT_ENABLEFRONTLEFT[] = "Enable front left"; -constexpr char TEXT_ENABLEFRONTRIGHT[] = "Enable front right"; -constexpr char TEXT_ENABLEBACKLEFT[] = "Enable back left"; -constexpr char TEXT_ENABLEBACKRIGHT[] = "Enable back right"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_SETENABLED[]; +extern char TEXT_ENABLEFRONTLEFT[]; +extern char TEXT_ENABLEFRONTRIGHT[]; +extern char TEXT_ENABLEBACKLEFT[]; +extern char TEXT_ENABLEBACKRIGHT[]; +//extern char TEXT_BACK[]; //GametrakModeSettingsMenu -constexpr char TEXT_GAMETRAKMODESETTINGS[] = "Gametrak mode settings"; +extern char TEXT_GAMETRAKMODESETTINGS[]; //GenericWifiSettingsMenu -constexpr char TEXT_GENERICWIFISETTINGS[] = "Generic WiFi settings"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_GENERICWIFISETTINGS[]; +//extern char TEXT_BACK[]; //GraphsMenu -//constexpr char TEXT_GRAPHS[] = "Graphs"; -constexpr char TEXT_GAS[] = "Gas"; -constexpr char TEXT_BREMS[] = "Brems"; -constexpr char TEXT_POTIS[] = "Potis"; -constexpr char TEXT_AVGSPEED[] = "Avg. speed"; -constexpr char TEXT_AVGSPEEDKMH[] = "Avg. speed KMH"; -constexpr char TEXT_SUMCURRENT[] = "Sum current"; -constexpr char TEXT_FRONTVOLTAGE[] = "Front voltage"; -constexpr char TEXT_BACKVOLTAGE[] = "Back voltage"; -constexpr char TEXT_VOLTAGES[] = "Voltages"; -constexpr char TEXT_BMSVOLTAGE[] = "BMS voltage"; -constexpr char TEXT_BMSCURRENT[] = "BMS current"; -constexpr char TEXT_BMSPOWER[] = "BMS power"; -constexpr char TEXT_SUMCURRENTSCOMPARISON[] = "Sum currents comparison"; -constexpr char TEXT_MOTORCURRENTS[] = "Motor currents"; -constexpr char TEXT_RSSI[] = "RSSI"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_GRAPHS[]; +extern char TEXT_GAS[]; +extern char TEXT_BREMS[]; +extern char TEXT_POTIS[]; +extern char TEXT_AVGSPEED[]; +extern char TEXT_AVGSPEEDKMH[]; +extern char TEXT_SUMCURRENT[]; +extern char TEXT_FRONTVOLTAGE[]; +extern char TEXT_BACKVOLTAGE[]; +extern char TEXT_VOLTAGES[]; +extern char TEXT_BMSVOLTAGE[]; +extern char TEXT_BMSCURRENT[]; +extern char TEXT_BMSPOWER[]; +extern char TEXT_SUMCURRENTSCOMPARISON[]; +extern char TEXT_MOTORCURRENTS[]; +extern char TEXT_RSSI[]; +//extern char TEXT_BACK[]; //InvertMenu -//constexpr char TEXT_SETINVERTED[] = "Set inverted"; -constexpr char TEXT_INVERTFRONTLEFT[] = "Invert front left"; -constexpr char TEXT_INVERTFRONTRIGHT[] = "Invert front right"; -constexpr char TEXT_INVERTBACKLEFT[] = "Invert back left"; -constexpr char TEXT_INVERTBACKRIGHT[] = "Invert back right"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_SETINVERTED[]; +extern char TEXT_INVERTFRONTLEFT[]; +extern char TEXT_INVERTFRONTRIGHT[]; +extern char TEXT_INVERTBACKLEFT[]; +extern char TEXT_INVERTBACKRIGHT[]; +//extern char TEXT_BACK[]; //LarsmModeSettingsMenu -constexpr char TEXT_LARSMMODESETTINGS[] = "Larsm mode settings"; -//constexpr char TEXT_MODELMODE[] = "Model mode"; -constexpr char TEXT_SETMODE[] = "Set mode"; -constexpr char TEXT_SETITERATIONS[] = "Set iterations"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_LARSMMODESETTINGS[]; +//extern char TEXT_MODELMODE[]; +extern char TEXT_SETMODE[]; +extern char TEXT_SETITERATIONS[]; +//extern char TEXT_BACK[]; //MotortestModeSettingsMenu -constexpr char TEXT_MOTORTESTMODESETTINGS[] = "Motortest mode seetings"; -constexpr char TEXT_MOTORTESTMAXPWM[] = "Max Pwm"; -constexpr char TEXT_MOTORTESTMULTIPLIKATOR[] = "Acceleration"; +extern char TEXT_MOTORTESTMODESETTINGS[]; +extern char TEXT_MOTORTESTMAXPWM[]; +extern char TEXT_MOTORTESTMULTIPLIKATOR[]; //LedstripMenu -constexpr char TEXT_LEDSTRIP[] = "Ledstrip"; -constexpr char TEXT_LEDANIMATION[] = "LED Animation"; -constexpr char TEXT_BRAKELIGHTS[] = "Brake Lights"; -constexpr char TEXT_BLINKANIMATION[] = "Blink animation"; -constexpr char TEXT_ANIMATION_TYPE[] = "Blink animation"; -constexpr char TEXT_LEDSCOUNT[] = "LEDs Count"; -constexpr char TEXT_CENTEROFFSET[] = "Center Offset"; -constexpr char TEXT_SMALLOFFSET[] = "Small Offset"; -constexpr char TEXT_BIGOFFSET[] = "Big Offset"; -constexpr char TEXT_LEDSTRIP_MILLIAMP[] = "Ledstrip 0.1A"; -constexpr char TEXT_BLINKBEEP[] = "Blink Beep"; -constexpr char TEXT_FULLBLINK[] = "Full blink"; -constexpr char TEXT_LEDSTRIP_STVO[] = "Enable StVO"; -constexpr char TEXT_STVO_FRONTOFFSET[] = "StVO Front Offset"; -constexpr char TEXT_STVO_FRONTLENGTH[] = "StVO Front Length"; -constexpr char TEXT_STVO_ENABLEFRONTLIGHT[] = "StVO Front Enable"; -constexpr char TEXT_ANIMATION_MULTIPLIER[] = "Animation Multiplier"; -constexpr char TEXT_LEDSTRIP_BRIGHTNESS[] = "Ledstrip Brightness"; -constexpr char TEXT_LEDSTRIP_ALLCUSTOMOFF[] = "All custom off"; -constexpr char TEXT_LEDSTRIP_EN_BLINK_ANIM[] = "Animated Blink"; -constexpr char TEXT_LEDSTRIP_CHANGE_OTA_ANIM[] = "Change Ota animation"; +extern char TEXT_LEDSTRIP[]; +extern char TEXT_LEDANIMATION[]; +extern char TEXT_BRAKELIGHTS[]; +extern char TEXT_BLINKANIMATION[]; +extern char TEXT_ANIMATION_TYPE[]; +extern char TEXT_LEDSCOUNT[]; +extern char TEXT_CENTEROFFSET[]; +extern char TEXT_SMALLOFFSET[]; +extern char TEXT_BIGOFFSET[]; +extern char TEXT_LEDSTRIP_MILLIAMP[]; +extern char TEXT_BLINKBEEP[]; +extern char TEXT_FULLBLINK[]; +extern char TEXT_LEDSTRIP_STVO[]; +extern char TEXT_STVO_FRONTOFFSET[]; +extern char TEXT_STVO_FRONTLENGTH[]; +extern char TEXT_STVO_ENABLEFRONTLIGHT[]; +extern char TEXT_ANIMATION_MULTIPLIER[]; +extern char TEXT_LEDSTRIP_BRIGHTNESS[]; +extern char TEXT_LEDSTRIP_ALLCUSTOMOFF[]; +extern char TEXT_LEDSTRIP_EN_BLINK_ANIM[]; +extern char TEXT_LEDSTRIP_CHANGE_OTA_ANIM[]; -constexpr char TEXT_OTAANIM_NONE[] = "None"; -constexpr char TEXT_OTAANIM_PROGRESS[] = "Progress Bar"; -constexpr char TEXT_OTAANIM_COLOR[] = "Color change"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_OTAANIM_NONE[]; +extern char TEXT_OTAANIM_PROGRESS[]; +extern char TEXT_OTAANIM_COLOR[]; +//extern char TEXT_BACK[]; //LedstripSelectAnimationMenu -constexpr char TEXT_SELECTANIMATION[] = "Select Animation"; -constexpr char TEXT_ANIMATION_DEFAULTRAINBOW[] = "Default Rainbow"; -constexpr char TEXT_ANIMATION_BETTERRAINBOW[] = "Better Rainbow"; -constexpr char TEXT_ANIMATION_SPEEDSYNCANIMATION[] = "Speed Sync"; -constexpr char TEXT_ANIMATION_CUSTOMCOLOR[] = "Custom Color"; +extern char TEXT_SELECTANIMATION[]; +extern char TEXT_ANIMATION_DEFAULTRAINBOW[]; +extern char TEXT_ANIMATION_BETTERRAINBOW[]; +extern char TEXT_ANIMATION_SPEEDSYNCANIMATION[]; +extern char TEXT_ANIMATION_CUSTOMCOLOR[]; //LedstripSelectBlinkMenu -constexpr char TEXT_ANIMATION_BLINKNONE[] = "Blink Off"; -constexpr char TEXT_ANIMATION_BLINKLEFT[] = "Blink Left"; -constexpr char TEXT_ANIMATION_BLINKRIGHT[] = "Blink Right"; -constexpr char TEXT_ANIMATION_BLINKBOTH[] = "Blink Both"; +extern char TEXT_ANIMATION_BLINKNONE[]; +extern char TEXT_ANIMATION_BLINKLEFT[]; +extern char TEXT_ANIMATION_BLINKRIGHT[]; +extern char TEXT_ANIMATION_BLINKBOTH[]; //LockscreenSettingsMenu -constexpr char TEXT_LOCKSCREENSETTINGS[] = "Lockscreen Settings"; -constexpr char TEXT_ALLOWPRESETSWITCH[] = "Allow preset switch"; -constexpr char TEXT_PINDIGIT0[] = "PIN digit0"; -constexpr char TEXT_PINDIGIT1[] = "PIN digit1"; -constexpr char TEXT_PINDIGIT2[] = "PIN digit2"; -constexpr char TEXT_PINDIGIT3[] = "PIN digit3"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_LOCKSCREENSETTINGS[]; +extern char TEXT_ALLOWPRESETSWITCH[]; +extern char TEXT_PINDIGIT0[]; +extern char TEXT_PINDIGIT1[]; +extern char TEXT_PINDIGIT2[]; +extern char TEXT_PINDIGIT3[]; +//extern char TEXT_BACK[]; //ModesSettingsMenu -//constexpr char TEXT_MODESSETTINGS[] = "Modes settings"; -constexpr char TEXT_DEFAULTMODESETTIGNS[] = "Default mode settings"; -constexpr char TEXT_TEMPOMATMODESETTINGS[] = "Tempomat mode settings"; -//constexpr char TEXT_LARSMMODESETTINGS[] = "Larsm mode settings"; -//constexpr char TEXT_GAMETRAKMODESETTINGS[] = "Gametrak mode settings"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_MODESSETTINGS[]; +extern char TEXT_DEFAULTMODESETTIGNS[]; +extern char TEXT_TEMPOMATMODESETTINGS[]; +//extern char TEXT_LARSMMODESETTINGS[]; +//extern char TEXT_GAMETRAKMODESETTINGS[]; +//extern char TEXT_BACK[]; //MosfetsMenu -//constexpr char TEXT_MOSFETS[] = "Mosfets"; -constexpr char TEXT_MOSFET0[] = "Mosfet0"; -constexpr char TEXT_MOSFET1[] = "Mosfet1"; -constexpr char TEXT_MOSFET2[] = "Mosfet2"; +//extern char TEXT_MOSFETS[]; +extern char TEXT_MOSFET0[]; +extern char TEXT_MOSFET1[]; +extern char TEXT_MOSFET2[]; //TempomatModeSettingsMenu -//constexpr char TEXT_TEMPOMATMODESETTINGS[] = "Tempomat mode settings"; -constexpr char TEXT_APPLY[] = "Apply"; -constexpr char TEXT_NCRUISEMOTTGT[] = "nCruiseMotTgt"; -//constexpr char TEXT_MODELMODE[] = "Model mode"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_TEMPOMATMODESETTINGS[]; +extern char TEXT_APPLY[]; +extern char TEXT_NCRUISEMOTTGT[]; +//extern char TEXT_MODELMODE[]; +//extern char TEXT_BACK[]; //WiFiSettingsMenu -//constexpr char TEXT_WIFISETTINGS[] = "WiFi settings"; -//constexpr char TEXT_GENERICWIFISETTINGS[] = "Generic WiFi settings"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_WIFISETTINGS[]; +//extern char TEXT_GENERICWIFISETTINGS[]; +//extern char TEXT_BACK[]; //BoardcomputerHardwareSettingsMenu -//constexpr char TEXT_BOARDCOMPUTERHARDWARESETTINGS[] = "Boardcomputer H/W settings"; -//constexpr char TEXT_LOCKSCREENSETTINGS[] = "Lockscreen Settings"; -constexpr char TEXT_CALIBRATE[] = "Calibrate"; -constexpr char TEXT_SAMPLECOUNT[] = "sampleCount"; -constexpr char TEXT_GASMIN[] = "gasMin"; -constexpr char TEXT_GASMAX[] = "gasMax"; -constexpr char TEXT_BREMSMIN[] = "bremsMin"; -constexpr char TEXT_BREMSMAX[] = "bremsMax"; -constexpr char TEXT_DPADDEBOUNCE[] = "dpadDebounce"; -constexpr char TEXT_GAMETRAKCALIBRATE[] = "Gametrak calibrate"; -constexpr char TEXT_SETGAMETRAKXMIN[] = "Set gametrakXMin"; -constexpr char TEXT_SETGAMETRAKXMAX[] = "Set gametrakXMax"; -constexpr char TEXT_SETGAMETRAKYMIN[] = "Set gametrakYMin"; -constexpr char TEXT_SETGAMETRAKYMAX[] = "Set gametrakYMax"; -constexpr char TEXT_SETGAMETRAKDISTMIN[] = "Set gametrakDistMin"; -constexpr char TEXT_SETGAMETRAKDISTMAX[] = "Set gametrakDistMax"; -constexpr char TEXT_TIMERS[] = "Timers"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_BOARDCOMPUTERHARDWARESETTINGS[]; +//extern char TEXT_LOCKSCREENSETTINGS[]; +extern char TEXT_CALIBRATE[]; +extern char TEXT_SAMPLECOUNT[]; +extern char TEXT_GASMIN[]; +extern char TEXT_GASMAX[]; +extern char TEXT_BREMSMIN[]; +extern char TEXT_BREMSMAX[]; +extern char TEXT_DPADDEBOUNCE[]; +extern char TEXT_GAMETRAKCALIBRATE[]; +extern char TEXT_SETGAMETRAKXMIN[]; +extern char TEXT_SETGAMETRAKXMAX[]; +extern char TEXT_SETGAMETRAKYMIN[]; +extern char TEXT_SETGAMETRAKYMAX[]; +extern char TEXT_SETGAMETRAKDISTMIN[]; +extern char TEXT_SETGAMETRAKDISTMAX[]; +extern char TEXT_TIMERS[]; +//extern char TEXT_BACK[]; //ProfilesMenu -//constexpr char TEXT_PROFILES[] = "Profiles"; -constexpr char TEXT_PROFILE0[] = "Profile 0"; -constexpr char TEXT_PROFILE1[] = "Profile 1"; -constexpr char TEXT_PROFILE2[] = "Profile 2"; -constexpr char TEXT_PROFILE3[] = "Profile 3"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_PROFILES[]; +extern char TEXT_PROFILE0[]; +extern char TEXT_PROFILE1[]; +extern char TEXT_PROFILE2[]; +extern char TEXT_PROFILE3[]; +//extern char TEXT_BACK[]; //PresetsMenu -//constexpr char TEXT_PRESETS[] = "Presets"; -constexpr char TEXT_DEFAULTEVERYTHING[] = "Default everything"; -constexpr char TEXT_DEFAULTLIMITS[] = "Default limits"; -constexpr char TEXT_KIDSLIMITS[] = "Kids limits"; -constexpr char TEXT_DEFAULTPOTI[] = "Default poti"; -constexpr char TEXT_DEFAULTCONTROLLERHARDWARE[] = "Default controller H/W"; -constexpr char TEXT_MOSFETSOFFCONTROLLERHARDWARE[] = "MOSFETs off controller H/W"; -constexpr char TEXT_SPINNERCONTROLLERHARDWARE[] = "Spinner controller H/W"; -constexpr char TEXT_DEFAULTBOARDCOMPUTERHARDWARE[] = "Default boardcomputer H/W"; -constexpr char TEXT_DEFAULTDEFAULTMODE[] = "Default defaultMode"; -constexpr char TEXT_SINUSOIDALDEFAULTMODE[] = "Sinusoidal defaultMode"; -constexpr char TEXT_DEFAULTTEMPOMATMODE[] = "Default tempomatMode"; -constexpr char TEXT_DEFAULTLARSMMODE[] = "Default larsmMode"; -constexpr char TEXT_STREET[] = "Street"; -constexpr char TEXT_SIDEWALK[] = "Sidewalk"; -constexpr char TEXT_POLICE[] = "Police"; -constexpr char TEXT_RACE[] = "Race"; +//extern char TEXT_PRESETS[]; +extern char TEXT_DEFAULTEVERYTHING[]; +extern char TEXT_DEFAULTLIMITS[]; +extern char TEXT_KIDSLIMITS[]; +extern char TEXT_DEFAULTPOTI[]; +extern char TEXT_DEFAULTCONTROLLERHARDWARE[]; +extern char TEXT_MOSFETSOFFCONTROLLERHARDWARE[]; +extern char TEXT_SPINNERCONTROLLERHARDWARE[]; +extern char TEXT_DEFAULTBOARDCOMPUTERHARDWARE[]; +extern char TEXT_DEFAULTDEFAULTMODE[]; +extern char TEXT_SINUSOIDALDEFAULTMODE[]; +extern char TEXT_DEFAULTTEMPOMATMODE[]; +extern char TEXT_DEFAULTLARSMMODE[]; +extern char TEXT_STREET[]; +extern char TEXT_SIDEWALK[]; +extern char TEXT_POLICE[]; +extern char TEXT_RACE[]; //SelectModeMenu -//constexpr char TEXT_SELECTMODE[] = "Select mode"; -constexpr char TEXT_DEFAULT[] = "Default"; -constexpr char TEXT_TEMPOMAT[] = "Tempomat"; -constexpr char TEXT_LARSM[] = "Larsm"; -constexpr char TEXT_REMOTECONTROL[] = "Remote control"; -constexpr char TEXT_GAMETRAK[] = "Gametrak"; -constexpr char TEXT_MOTORTEST[] = "Motortest"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_SELECTMODE[]; +extern char TEXT_DEFAULT[]; +extern char TEXT_TEMPOMAT[]; +extern char TEXT_LARSM[]; +extern char TEXT_REMOTECONTROL[]; +extern char TEXT_GAMETRAK[]; +extern char TEXT_MOTORTEST[]; +//extern char TEXT_BACK[]; //TimersMenu -//constexpr char TEXT_TIMERS[] = "Timers"; -constexpr char TEXT_POTIREADRATE[] = "Poti read rate"; -constexpr char TEXT_MODEUPDATERATE[] = "Mode update rate"; -constexpr char TEXT_STATSUPDATERATE[] = "Stats update rate"; -constexpr char TEXT_DISPLAYUPDATERATE[] = "Display update rate"; -constexpr char TEXT_DISPLAYREDRAWRATE[] = "Display redraw rate"; +//extern char TEXT_TIMERS[]; +extern char TEXT_POTIREADRATE[]; +extern char TEXT_MODEUPDATERATE[]; +extern char TEXT_STATSUPDATERATE[]; +extern char TEXT_DISPLAYUPDATERATE[]; +extern char TEXT_DISPLAYREDRAWRATE[]; #ifdef FEATURE_CAN -constexpr char TEXT_CANRECEIVERATE[] = "CAN receive rate"; +extern char TEXT_CANRECEIVERATE[]; #endif -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_BACK[]; //TimeSettingsMenu -//constexpr char TEXT_TIME[] = "Time"; -constexpr char TEXT_OFFSET[] = "Offset"; -constexpr char TEXT_DAYLIGHTSAVINGMODE[] = "Daylight Saving"; -constexpr char TEXT_NTPENABLED[] = "NTP Enabled"; -constexpr char TEXT_NTPSERVER[] = "NTP Server"; -constexpr char TEXT_NTPMODE[] = "NTP Mode"; -constexpr char TEXT_NTPINTERVAL[] = "NTP Interval"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_TIME[]; +extern char TEXT_OFFSET[]; +extern char TEXT_DAYLIGHTSAVINGMODE[]; +extern char TEXT_NTPENABLED[]; +extern char TEXT_NTPSERVER[]; +extern char TEXT_NTPMODE[]; +extern char TEXT_NTPINTERVAL[]; +//extern char TEXT_BACK[]; //ChangeValueDisplay -constexpr char TEXT_OFF[] = "Off"; -constexpr char TEXT_MASTER[] = "Master"; -constexpr char TEXT_SLAVE[] = "Slave"; +extern char TEXT_OFF[]; +extern char TEXT_MASTER[]; +extern char TEXT_SLAVE[]; //ChangeValueDisplay -constexpr char TEXT_OPENMODE[] = "Open mode"; -constexpr char TEXT_VOLTAGE[] = "Voltage"; -constexpr char TEXT_SPEED[] = "Speed"; -constexpr char TEXT_TORQUE[] = "Torque"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_OPENMODE[]; +extern char TEXT_VOLTAGE[]; +extern char TEXT_SPEED[]; +extern char TEXT_TORQUE[]; +//extern char TEXT_BACK[]; //ChangeValueDisplay -constexpr char TEXT_COMMUTATION[] = "Commutation"; -constexpr char TEXT_SINUSOIDAL[] = "Sinusoidal"; -constexpr char TEXT_FIELDORIENTEDCONTROL[] = "Field oriented control"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_COMMUTATION[]; +extern char TEXT_SINUSOIDAL[]; +extern char TEXT_FIELDORIENTEDCONTROL[]; +//extern char TEXT_BACK[]; + +//ChangeValueDisplay +extern char TEXT_HANDBREMS_MOSFETS_OFF[]; +extern char TEXT_HANDBREMS_OPENMODE[]; +extern char TEXT_HANDBREMS_SPEED0[]; //ChangeValueDisplay -constexpr char TEXT_LARSMMODE1[] = "Mode1"; -constexpr char TEXT_LARSMMODE2[] = "Mode2"; -constexpr char TEXT_LARSMMODE3[] = "Mode3"; -constexpr char TEXT_LARSMMODE4[] = "Mode4"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_LARSMMODE1[]; +extern char TEXT_LARSMMODE2[]; +extern char TEXT_LARSMMODE3[]; +extern char TEXT_LARSMMODE4[]; +//extern char TEXT_BACK[]; //ChangeValueDisplay -//constexpr char TEXT_COMMUTATION[] = "Commutation"; -//constexpr char TEXT_SINUSOIDAL[] = "Sinusoidal"; -constexpr char TEXT_FOCVOLTAGE[] = "FOC/Voltage"; -constexpr char TEXT_FOCSPEED[] = "FOC/Speed"; -constexpr char TEXT_FOCTORQUE[] = "FOC/Torque"; -//constexpr char TEXT_BACK[] = "Back"; +//extern char TEXT_COMMUTATION[]; +//extern char TEXT_SINUSOIDAL[]; +extern char TEXT_FOCVOLTAGE[]; +extern char TEXT_FOCSPEED[]; +extern char TEXT_FOCTORQUE[]; +//extern char TEXT_BACK[]; //ChangeValueDisplay -constexpr char TEXT_WIFI_MODE_NULL[] = "WIFI_MODE_NULL"; -constexpr char TEXT_WIFI_MODE_STA[] = "WIFI_MODE_STA"; -constexpr char TEXT_WIFI_MODE_AP[] = "WIFI_MODE_AP"; -constexpr char TEXT_WIFI_MODE_APSTA[] = "WIFI_MODE_APSTA"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_WIFI_MODE_NULL[]; +extern char TEXT_WIFI_MODE_STA[]; +extern char TEXT_WIFI_MODE_AP[]; +extern char TEXT_WIFI_MODE_APSTA[]; +//extern char TEXT_BACK[]; //ChangeValueDisplay -constexpr char TEXT_WIFI_POWER_19_5dBm[] = "19.5dBm"; -constexpr char TEXT_WIFI_POWER_19dBm[] = "19dBm"; -constexpr char TEXT_WIFI_POWER_18_5dBm[] = "18.5dBm"; -constexpr char TEXT_WIFI_POWER_17dBm[] = "17dBm"; -constexpr char TEXT_WIFI_POWER_15dBm[] = "15dBm"; -constexpr char TEXT_WIFI_POWER_13dBm[] = "13dBm"; -constexpr char TEXT_WIFI_POWER_11dBm[] = "11dBm"; -constexpr char TEXT_WIFI_POWER_8_5dBm[] = "8.5dBm"; -constexpr char TEXT_WIFI_POWER_7dBm[] = "7dBm"; -constexpr char TEXT_WIFI_POWER_5dBm[] = "5dBm"; -constexpr char TEXT_WIFI_POWER_2dBm[] = "2dBm"; -constexpr char TEXT_WIFI_POWER_MINUS_1dBm[] = "-1dBm"; -//constexpr char TEXT_BACK[] = "Back"; +extern char TEXT_WIFI_POWER_19_5dBm[]; +extern char TEXT_WIFI_POWER_19dBm[]; +extern char TEXT_WIFI_POWER_18_5dBm[]; +extern char TEXT_WIFI_POWER_17dBm[]; +extern char TEXT_WIFI_POWER_15dBm[]; +extern char TEXT_WIFI_POWER_13dBm[]; +extern char TEXT_WIFI_POWER_11dBm[]; +extern char TEXT_WIFI_POWER_8_5dBm[]; +extern char TEXT_WIFI_POWER_7dBm[]; +extern char TEXT_WIFI_POWER_5dBm[]; +extern char TEXT_WIFI_POWER_2dBm[]; +extern char TEXT_WIFI_POWER_MINUS_1dBm[]; +//extern char TEXT_BACK[]; //Crashmenu -constexpr char TEXT_CRASHMENU[] = "Crash Menu"; -constexpr char TEXT_CRASH_ASSERT[] = "assert(0)"; -constexpr char TEXT_CRASH_DIVZERO[] = "42 / 0"; +extern char TEXT_CRASHMENU[]; +extern char TEXT_CRASH_ASSERT[]; +extern char TEXT_CRASH_DIVZERO[]; //SelectBuildServerMenu -constexpr char TEXT_SELECTBUILDSERVERMENU[] = "Select Buildserver"; -constexpr char TEXT_NOBUILDSERVERCONFIGURED[] = "Not configured"; +extern char TEXT_SELECTBUILDSERVERMENU[]; +extern char TEXT_NOBUILDSERVERCONFIGURED[]; //Otamenu -constexpr char TEXT_UPDATENOW[] = "Update now"; -constexpr char TEXT_SELECTBUILD[] = "Select build"; -constexpr char TEXT_OTA_NOBUILDSERVERAVAILABLE[] = "E:No server saved."; -constexpr char TEXT_OTA_NOBUILDSERVERSELECTED[] = "E:No server selected."; -constexpr char TEXT_OTA_NOCONNECTION[] = "E:No internet."; -constexpr char TEXT_OTA_WAITFORRESPONSE[] = "Wait for response..."; +extern char TEXT_UPDATENOW[]; +extern char TEXT_SELECTBUILD[]; +extern char TEXT_OTA_NOBUILDSERVERAVAILABLE[]; +extern char TEXT_OTA_NOBUILDSERVERSELECTED[]; +extern char TEXT_OTA_NOCONNECTION[]; +extern char TEXT_OTA_WAITFORRESPONSE[]; //LedstripColorMenu -constexpr char TEXT_LEDSTRIPCOLORMENU[] = "Customize Ledstrip"; +extern char TEXT_LEDSTRIPCOLORMENU[]; //StatisticsMenu -constexpr char TEXT_STATISTICSMENU[] = "Statistics"; -constexpr char TEXT_STATSSAVE[] = "Save kilometers"; -constexpr char TEXT_STATSCLEAR[] = "Clear current km"; +extern char TEXT_STATISTICSMENU[]; +extern char TEXT_STATSSAVE[]; +extern char TEXT_STATSCLEAR[]; #ifdef FEATURE_CAN -constexpr char TEXT_POWERSUPPLY[] = "Powersupply"; +extern char TEXT_POWERSUPPLY[]; #endif +extern char TEXT_REENABLE_MENUITEMS[]; +} // namespace + +using namespace bobbytexts; diff --git a/sdkconfig_comred b/sdkconfig_comred index 1922492..34a523b 100644 --- a/sdkconfig_comred +++ b/sdkconfig_comred @@ -484,9 +484,9 @@ CONFIG_ESP32_REV_MIN_0=y CONFIG_ESP32_REV_MIN=0 CONFIG_ESP32_DPORT_WORKAROUND=y # CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set -CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y -# CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set -CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 +# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y +CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 # CONFIG_ESP32_SPIRAM_SUPPORT is not set # CONFIG_ESP32_TRAX is not set CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 diff --git a/tools/access.sh b/tools/access.sh deleted file mode 100755 index 0161e54..0000000 --- a/tools/access.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -wget -O ignore.tar.gz.gpg http://bobbycar.commanderred.xyz/ignore.tar.gz.gpg -gpg --quiet --batch --yes --decrypt --passphrase="$IGNORE_KEY" --output ./ignore.tar.gz ignore.tar.gz.gpg -tar xzf ignore.tar.gz