Files
bobbycar-boardcomputer-firm…/main/bobbyquickactions.cpp
2023-04-04 07:52:09 +02:00

182 lines
4.6 KiB
C++

#include "bobbyquickactions.h"
// local includes
#include "espnowfunctions.h"
#include "handbremse.h"
#include "newsettings.h"
#include "tempomat.h"
#include "wifi_bobbycar.h"
#include "bobbyhupe.h"
namespace quickactions {
void handle_bobby_quickaction(espgui::Button button, bool pressed)
{
espconfig::ConfigWrapper<BobbyQuickActions> *config = nullptr;
switch (BobbyButton(button))
{
case Left2:
config = &configs.quickActionLeft2;
break;
case Right2:
config = &configs.quickActionRight2;
break;
case Up2:
config = &configs.quickActionUp2;
break;
case Down2:
config = &configs.quickActionDown2;
break;
case Extra1:
config = &configs.quickActionExtra1;
break;
case Extra2:
config = &configs.quickActionExtra2;
break;
case Extra3:
config = &configs.quickActionExtra3;
break;
case Extra4:
config = &configs.quickActionExtra4;
break;
default:
return;
}
if (pressed)
{
switch (config->value()) {
case BobbyQuickActions::BLINK_LEFT:
blink_left();
break;
case BobbyQuickActions::BLINK_RIGHT:
blink_right();
break;
case BobbyQuickActions::HANDBREMSE:
handle_handbremse();
break;
case BobbyQuickActions::OPEN_GARAGE:
open_garage();
break;
case BobbyQuickActions::WIFI_SCAN:
action_wifi_scan();
break;
case BobbyQuickActions::PWMOMAT:
handle_pwmomat();
break;
case BobbyQuickActions::HUPE:
bobbyhupe::activate_hupe();
break;
case BobbyQuickActions::COMPRESSOR_TOGGLE:
bobbyhupe::toggle_compressor();
break;
default:
return;
}
}
else
{
switch (config->value()) {
case BobbyQuickActions::HUPE:
bobbyhupe::deactivate_hupe();
break;
default:
return;
}
}
}
void open_garage()
{
if (!configs.feature.esp_now.isEnabled.value())
return;
if (!espnow::espnow_init_allowed())
return;
for (const auto &config : configs.wireless_door_configs)
{
if (config.doorId.value().empty() || config.doorToken.value().empty())
continue;
if (const auto error = espnow::send_espnow_message(fmt::format("BOBBYOPEN:{}:{}", config.doorId.value(), config.doorToken.value())); error != ESP_OK)
{
ESP_LOGE("BOBBY", "send_espnow_message() failed with: %s", esp_err_to_name(error));
continue;
}
}
}
void action_wifi_scan()
{
if (const auto result = wifi_scan(); result != ESP_OK)
{
ESP_LOGE("BOBBY", "wifi_scan() failed with %s", esp_err_to_name(result));
return;
}
}
void blink_left()
{
if (configs.feature.ledstrip.isEnabled.value())
{
if (blinkAnimation == LEDSTRIP_OVERWRITE_NONE) //transition from off to left
{
blinkAnimation = LEDSTRIP_OVERWRITE_BLINKLEFT;
}
else if (blinkAnimation == LEDSTRIP_OVERWRITE_BLINKRIGHT) // transition to warning
{
blinkAnimation = LEDSTRIP_OVERWRITE_BLINKBOTH;
}
else // transition to off
{
blinkAnimation = LEDSTRIP_OVERWRITE_NONE;
}
}
}
void blink_right()
{
if(configs.feature.ledstrip.isEnabled.value())
{
if (blinkAnimation == LEDSTRIP_OVERWRITE_NONE) //transition from off to right
{
blinkAnimation = LEDSTRIP_OVERWRITE_BLINKRIGHT;
}
else if (blinkAnimation == LEDSTRIP_OVERWRITE_BLINKLEFT) // transition to warning
{
blinkAnimation = LEDSTRIP_OVERWRITE_BLINKBOTH;
}
else // transition to off
{
blinkAnimation = LEDSTRIP_OVERWRITE_NONE;
}
}
}
void handle_handbremse()
{
if (configs.handbremse.enable.value())
{
using StateWish = handbremse::StateWish;
if (handbremse::stateWish == StateWish::brake || handbremse::angezogen)
handbremse::stateWish = StateWish::release;
else
handbremse::stateWish = StateWish::brake;
handbremse::wishTimer = espchrono::millis_clock::now();
}
}
void handle_pwmomat()
{
if (pwmomat::tempomat_pwm)
{
pwmomat::wish = pwmomat::WISH::WISH_DISABLE;
}
else
{
pwmomat::wish = pwmomat::WISH::WISH_ENABLE;
}
}
} // namespace quickactions