diff --git a/main/cloud.cpp b/main/cloud.cpp index 946fb4a..867a0ef 100644 --- a/main/cloud.cpp +++ b/main/cloud.cpp @@ -478,6 +478,8 @@ void send_information() infoObject["tempBack"] = fixBoardTemp(controllers.back.feedback.boardTemp); infoObject["current"] = sumCurrent; + infoObject["btnCnt"] = bobbydpad::ButtonCount; + std::string body; serializeJson(doc, body); doc.clear(); diff --git a/main/dpad.h b/main/dpad.h index e2a1a43..7ae5a3e 100644 --- a/main/dpad.h +++ b/main/dpad.h @@ -96,6 +96,8 @@ void update() debounceBack = now; } } + +constexpr const uint8_t BUTTON_COUNT = 4; #endif -} -} +} // namespace dpad +} // namespace diff --git a/main/dpad3wire.h b/main/dpad3wire.h index 09934c0..e2387f7 100644 --- a/main/dpad3wire.h +++ b/main/dpad3wire.h @@ -111,6 +111,7 @@ void update() debounceBack = now; } } +constexpr const uint8_t BUTTON_COUNT = 4; #endif -} -} +} // namespace dpad3wire +} // namespace diff --git a/main/dpad5wire.h b/main/dpad5wire.h index f28c3b5..67b729a 100644 --- a/main/dpad5wire.h +++ b/main/dpad5wire.h @@ -1,8 +1,12 @@ #pragma once +// system includes +#include + #ifdef FEATURE_DPAD_5WIRESW namespace dpad5wire { void init(); void update(); +constexpr const uint8_t BUTTON_COUNT = 8; } // namespace dpad5wire #endif diff --git a/main/dpad5wire_2out.h b/main/dpad5wire_2out.h index 1a9c555..046b42c 100644 --- a/main/dpad5wire_2out.h +++ b/main/dpad5wire_2out.h @@ -1,8 +1,12 @@ #pragma once +// system includes +#include + #ifdef FEATURE_DPAD_5WIRESW_2OUT namespace dpad5wire_2out { void init(); void update(); +constexpr const uint8_t BUTTON_COUNT = 12; } // namespace dpad5wire_2out #endif diff --git a/main/dpad6wire.h b/main/dpad6wire.h index c5ed317..45a33d9 100644 --- a/main/dpad6wire.h +++ b/main/dpad6wire.h @@ -1,8 +1,12 @@ #pragma once +// system includes +#include + #ifdef FEATURE_DPAD_6WIRESW namespace dpad6wire { void init(); void update(); +constexpr const uint8_t BUTTON_COUNT = 10; } // namespace dpad6wire #endif diff --git a/main/dpad_boardcomputer_v2.h b/main/dpad_boardcomputer_v2.h index a1cae14..8c8eacc 100644 --- a/main/dpad_boardcomputer_v2.h +++ b/main/dpad_boardcomputer_v2.h @@ -1,8 +1,12 @@ #pragma once +// system includes +#include + #ifdef DPAD_BOARDCOMPUTER_V2 namespace dpad_boardcomputer_v2 { void init(); void update(); +constexpr const uint8_t BUTTON_COUNT = 16; } // namespace dpad_boardcomputer_v2 #endif diff --git a/main/taskmanager.cpp b/main/taskmanager.cpp index cb91686..e24414d 100644 --- a/main/taskmanager.cpp +++ b/main/taskmanager.cpp @@ -10,22 +10,6 @@ // local includes #include "wifi_bobbycar.h" -#include "dpad.h" -#ifdef FEATURE_DPAD_3WIRESW -#include "dpad3wire.h" -#endif -#ifdef FEATURE_DPAD_5WIRESW -#include "dpad5wire.h" -#endif -#ifdef FEATURE_DPAD_5WIRESW_2OUT -#include "dpad5wire_2out.h" -#endif -#ifdef FEATURE_DPAD_6WIRESW -#include "dpad6wire.h" -#endif -#ifdef DPAD_BOARDCOMPUTER_V2 -#include "dpad_boardcomputer_v2.h" -#endif #ifdef FEATURE_ROTARY #include "rotary.h" #endif @@ -58,6 +42,7 @@ #include "drivingstatistics.h" #include "dnsannounce.h" #include "screens.h" +#include "utils.h" using namespace std::chrono_literals; @@ -68,23 +53,8 @@ void not_needed() {} BobbySchedulerTask schedulerTasksArr[] { BobbySchedulerTask { "wifi", wifi_begin, wifi_update, 100ms }, -#ifdef FEATURE_DPAD - BobbySchedulerTask { "dpad", dpad::init, dpad::update, 20ms }, -#endif -#ifdef FEATURE_DPAD_3WIRESW - BobbySchedulerTask { "dpad3wire", dpad3wire::init, dpad3wire::update, 20ms }, -#endif -#ifdef FEATURE_DPAD_5WIRESW - BobbySchedulerTask { "dpad5wire", dpad5wire::init, dpad5wire::update, 20ms }, -#endif -#ifdef FEATURE_DPAD_5WIRESW_2OUT - BobbySchedulerTask { "dpad5wire_2out", dpad5wire_2out::init, dpad5wire_2out::update, 20ms }, -#endif -#ifdef FEATURE_DPAD_6WIRESW - BobbySchedulerTask { "dpad6wire", dpad6wire::init, dpad6wire::update, 20ms }, -#endif -#ifdef DPAD_BOARDCOMPUTER_V2 - BobbySchedulerTask { "dpad_boardcomputer_v2", dpad_boardcomputer_v2::init, dpad_boardcomputer_v2::update, 20ms }, +#if defined(FEATURE_DPAD) || defined(FEATURE_DPAD_3WIRESW) || defined(FEATURE_DPAD_5WIRESW) || defined(FEATURE_DPAD_5WIRESW_2OUT) || defined(FEATURE_DPAD_6WIRESW) || defined(DPAD_BOARDCOMPUTER_V2) + BobbySchedulerTask { bobbydpad::dpad_name, bobbydpad::dpad_init, bobbydpad::dpad_update, 20ms }, #endif #ifdef FEATURE_ROTARY BobbySchedulerTask { "rotary", initRotary, updateRotary, 20ms }, diff --git a/main/utils.h b/main/utils.h index 93194c2..c2fe1a7 100644 --- a/main/utils.h +++ b/main/utils.h @@ -28,6 +28,25 @@ #include "can.h" #endif +#ifdef FEATURE_DPAD +#include "dpad.h" +#endif +#ifdef FEATURE_DPAD_3WIRESW +#include "dpad3wire.h" +#endif +#ifdef FEATURE_DPAD_5WIRESW +#include "dpad5wire.h" +#endif +#ifdef FEATURE_DPAD_5WIRESW_2OUT +#include "dpad5wire_2out.h" +#endif +#ifdef FEATURE_DPAD_6WIRESW +#include "dpad6wire.h" +#endif +#ifdef DPAD_BOARDCOMPUTER_V2 +#include "dpad_boardcomputer_v2.h" +#endif + extern bool currentlyReverseBeeping; extern bool reverseBeepToggle; extern espchrono::millis_clock::time_point lastReverseBeepToggle; @@ -80,3 +99,42 @@ inline CRGB UINT32_TO_CRGB(uint32_t color) std::string get_wifi_security_string(wifi_auth_mode_t authMode); float float_map(float x, float in_min, float in_max, float out_min, float out_max); bool is_valid_timestamp(espchrono::utc_clock::time_point timestamp); + +namespace bobbydpad { +#ifdef FEATURE_DPAD +static constexpr const auto ButtonCount = dpad::BUTTON_COUNT; +static constexpr const auto &dpad_init = dpad::init; +static constexpr const auto &dpad_update = dpad::update; +static constexpr const char * const dpad_name = "dpad"; +#endif +#ifdef FEATURE_DPAD_3WIRESW +static constexpr const auto ButtonCount = dpad3wire::BUTTON_COUNT; +static constexpr const auto &dpad_init = dpad3wire::init; +static constexpr const auto &dpad_update = dpad3wire::update; +static constexpr const char * const dpad_name = "dpad3wire"; +#endif +#ifdef FEATURE_DPAD_5WIRESW +static constexpr const auto ButtonCount = dpad5wire::BUTTON_COUNT; +static constexpr const auto &dpad_init = dpad5wire::init; +static constexpr const auto &dpad_update = dpad5wire::update; +static constexpr const char * const dpad_name = "dpad5wire"; +#endif +#ifdef FEATURE_DPAD_5WIRESW_2OUT +static constexpr const auto ButtonCount = dpad5wire_2out::BUTTON_COUNT; +static constexpr const auto &dpad_init = dpad5wire_2out::init; +static constexpr const auto &dpad_update = dpad5wire_2out::update; +static constexpr const char * const dpad_name = "dpad5wire_2out"; +#endif +#ifdef FEATURE_DPAD_6WIRESW +static constexpr const auto ButtonCount = dpad6wire::BUTTON_COUNT; +static constexpr const auto &dpad_init = dpad6wire::init; +static constexpr const auto &dpad_update = dpad6wire::update; +static constexpr const char * const dpad_name = "dpad6wire"; +#endif +#ifdef DPAD_BOARDCOMPUTER_V2 +static constexpr const auto ButtonCount = dpad_boardcomputer_v2::BUTTON_COUNT; +static constexpr const auto &dpad_init = dpad_boardcomputer_v2::init; +static constexpr const auto &dpad_update = dpad_boardcomputer_v2::update; +static constexpr const char * const dpad_name = "dpad_boardcomputer_v2"; +#endif +} // namespace bobbydpad diff --git a/main/webserver_displaycontrol.cpp b/main/webserver_displaycontrol.cpp index 6b09e33..f6ef4a0 100644 --- a/main/webserver_displaycontrol.cpp +++ b/main/webserver_displaycontrol.cpp @@ -190,7 +190,11 @@ esp_err_t webserver_root_handler(httpd_req_t *req) "Button8 " "Button9 " "Button10 " - "Button11"; + "Button11 " + "Button12 " + "Button13 " + "Button14 " + "Button15"; } { @@ -207,7 +211,11 @@ esp_err_t webserver_root_handler(httpd_req_t *req) "Left2 " "Right2 " "Up2 " - "Down2", + "Down2" + "Extra1" + "Extra2" + "Extra3" + "Extra4", std::to_underlying(espgui::Button::Left), std::to_underlying(espgui::Button::Right), std::to_underlying(espgui::Button::Up), @@ -219,7 +227,11 @@ esp_err_t webserver_root_handler(httpd_req_t *req) std::to_underlying(BobbyButton::Left2), std::to_underlying(BobbyButton::Right2), std::to_underlying(BobbyButton::Up2), - std::to_underlying(BobbyButton::Down2)); + std::to_underlying(BobbyButton::Down2), + std::to_underlying(BobbyButton::Extra1), + std::to_underlying(BobbyButton::Extra2), + std::to_underlying(BobbyButton::Extra3), + std::to_underlying(BobbyButton::Extra4)); } if (auto currentDisplay = static_cast(espgui::currentDisplay.get()))