From 437d7cf4d4059c16996121a29a98efcfc0c96d17 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Sun, 25 Dec 2022 19:03:21 +0100 Subject: [PATCH] Fixes --- ignore.tar.gz.gpg | Bin 1680 -> 1674 bytes main/screens/batterymenu.cpp | 22 ++++++++++++ main/screens/batterymenu.h | 4 +++ main/screens/qrimportdisplay.cpp | 47 ++++++++++++++++++-------- main/screens/qrimportdisplay.h | 3 ++ main/screens/setup/basic_buttons.cpp | 3 +- main/screens/typesafeenumchangemenu.h | 1 - main/setup.cpp | 10 ++++++ 8 files changed, 74 insertions(+), 16 deletions(-) diff --git a/ignore.tar.gz.gpg b/ignore.tar.gz.gpg index 0f597d7ad1db81d93569d48b48b66c0a9fb8eeac..77c22fd3ecb2580edd0f96a8b1404cd2f5b15d3e 100644 GIT binary patch literal 1674 zcmeC-WnpJ#^0jpS8{?Z@{QuI?9gGEvO#WsZ!}%63<)ho{F8I{2 z9@u%Y-mfs$(M+kQPR{Gl&-x6l_>a5ZSnD)qH0=KLQKxCq0f}9_FT+<`Ph9-|&M}K~ z>jVCzhaT42eW&J+y4R03y`-0)au^kWB zD1~-r^#PLBy&p1|E>9l zCpK3(wN@qONcu!i-ExXUJT2)T;3~c{_DJ2 zR8ZsfyKmP%VF@uvJ|K8~jfbJ3VYJVcEBg~xe)#v*>XnAwR@3agyHbP}Z7Kg!D%2c$ zMB=IDWuXaIWZuQ;-?LZaI6CJE+qL9|X)m|7-SV#HoZ$4O%kTcF?UnC7^mAq9XQ~QD zU;As7KS=QA>F-KM*L!g5{9T7Fm9@2N&<67``(}TBA#q-Dhs@!xwQW0OM~2Rcba-?`*~Hg_J>4; zZ_Ve`J(hPSYE#ebGxY+T`pY=)=<%Pd-8|uDhECY*DM_}I_ynfxdw4MP@uJ90z)OYK4r|)Z7YHm&}ZZWD==v-EO_oK$7FAOCPN3|}r zvk0o(y*-hw+a=&l6wd;w%uOxE?-&znK3->Y)ZMJ`CHm>iZ|cvsdpnD%T0B>urPyp9 zc))Rjg3}kSrN`p^x$AU4?3=&TU4PZKZ9FpyQzu`W!xCouMtH8q12>EB8@YN}Plm6p ztz2^CVNhViylrZdOk4A3ux)8M)RS7)tgP_-OErJow~A|*U3s-wn;Xu)X56<;WTy2g z+sA^r&)bf0CEV10!mQo6_veD;-`8g6e*d)oW5b-21`4(hU;QYYQuJFr)WKJC<9a^R zv#U!wgMA7aW@x{*``&FE99y(%$Bx4n+@I;5xN}yWd!FXfGnTDyMHRcZddk%&ygDcI z*J;jeWxhWuzx(1@F8H@`nsI*O<|?yae#c49JwpAvW!6KtOD{G`{r-7je-4}H^NY96 zY+sQ3HC@rp;*{ zy;nNJJ-zUzrlyuvEGkQVBHtFaq^ob*X7t4}=3>T&sX0={RVTwPukEaN{-6kZ;? zzN4|t-bTo4^JcT2w@M$k3&@pkw!iT!aBlb>hpMGU`%H{%=bsYYe_2HJbpF3PipLyX z3MCYc4{naiT+Mx>@6?Z4@1Db+yZFBSuTCn`xWsHYEj&PN$%jv}NpXI?rH#j{S?}Mf z+WRkimseMCPo==CM$6oy1KSsT@;e>cMQ)+Kq z4mxaXovi0FCFc7j?2MmPDnZwk@|1NL)wYlo8>b4L6q%0zW(+?QsUOuiU z`Q0}v{mDcgL$=$;Uu;XY35|AR7rh?#bzk=DX-D=5ekgcl^8J7BX}dnlP AVgLXD literal 1680 zcmeC-WnpJ#N;$UR$lMHD&i|K=?qf8~?`+kRDcvb?A>}*QPa*T%3$2U&D(+Rp-jDw} zKll+>C3mIJTqD^j=eTDZE2{5(&g%M^N4@u0M(p^jM~;n?CIs!GYPr_Hu)tJ(c;<^GU8n{F}9bQH;4 z!peJn#__9y0UD`6Q)ga(le_g{K^n8bB28cE-`{>~_&*NQm0Y4G!ydTyS&w>sZi!Oq zQJ%sXwaZywF>4ll`MtHW@z`We1%KUw)lZ6?D!5&)TmCjt`5n38Q%Zf*o~_wRS2Ooi z%2fXkRn|Ky$hfY3;g^pWxeU7=dxZC&*4e0V{u9S^RgQ^{{lX^IQY@>_I^Bp5s`_Kj z`Ht_b*4|r{r<>B-U+_wAmt-;tmTdL|*Qw)jp(uWM$6J)>$iSI-S1m*kHC@8-X9IfOi=M_Wi)~F3s(Rdc=*X{^Z9%6yOdK2YIX3p6++C>HU{^CW zP&Q#=vEMVk8~+@eybkX4ObQk6^KIQDR$Nf|wQ>0>Vb|D`>8-^(Y}h|ua*=scckHv} z)er6NU2nH>y~%zfnq1laPLN~IB0-Jc+w)bpKyT&UpP&ApBSb#7|RPmLrF-VD+X^M1B`PkZVcui~Y_Pxd|D9lNV* z`{T>T53N)uug$Ww`77Vj5@vUkvz2GJ;>5L2k3IbGtYrH3dG}WQt*J;*TqfZx`D$`o zNLc&?>yHlopJYB#eCZ^;f4KAZwKf&eu`5(zP+zT(&G>BcZsW^$=y%nGg*Hh zDQo_^?xg9xs?X7%mt6h3qtxr>1g<9r>$QBI3uWDOX3Q*7=)91>;$zo=3lp+e9-kFx zZejU6LM`oM-#533^HM*_UAgVh_@?oUu>8Dbc5h0zSQ%+_gzjDVHhg#F6V)wKq#rU# z3vbpBWqvK|(zy5TjT08r0@t^uS7-c>Xe)d)t?ygZC-22u3OLvTKOPG-d@On}!#Gl4 z&67!Hr}o;Ug&ev+RlDj z!1m3={XQ#r+Y)_vJ{|tSb@B7hqc>%a-k$L_O;?~_PW^LkSww|-r=G!zlrv9b&WkI! z78pD(y0$g+Wk&APKBi6)>q$)_aqgeqXdKs^nj^mG(iD|V%vuxve*3wlNptVD&;IM4 z?qU%V5_@LS_19j@d)sBh9uD8sd!G*b>MuXNb|KH<_d=^4HB1(L$K_Nd@b5RLmiZsw zgAKyJ&$7=pKA@VmT4m9CjSu$@z6){BtnGf0t38P|X=iYXJ^#+yl_nqUzMgd0+mR=- z`qtz<3)S=ItoOY+MfnXYo8oG=&i~(dIIiTS#(Z)}4lCr_(#cU&nBlUbd`92px4&&p z*$IZQ-*0Nam2@c;k- diff --git a/main/screens/batterymenu.cpp b/main/screens/batterymenu.cpp index cc5c5b7..ffdde34 100644 --- a/main/screens/batterymenu.cpp +++ b/main/screens/batterymenu.cpp @@ -105,6 +105,14 @@ void BatteryMenu::redraw(espgui::TftInterface &tft) { Base::redraw(tft); + if (m_fullRedraw) + { + m_fullRedraw = false; + m_doubleProgressBarBatPercentage.start(tft); + m_batPercentBootLabel.clear(tft, espgui::TFT_BLACK); + m_batPercentNowLabel.clear(tft, espgui::TFT_BLACK); + } + if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage) { const auto batPercent = getBatteryPercentage(*avgVoltage, BatteryCellType(configs.battery.cellType.value())); @@ -118,6 +126,20 @@ void BatteryMenu::redraw(espgui::TftInterface &tft) } } +void BatteryMenu::buttonPressed(espgui::Button button) +{ + Base::buttonPressed(button); + + switch (button) + { + case espgui::Up: + case espgui::Down: + m_fullRedraw = true; + break; + default:; + } +} + void BatteryMenu::back() { espgui::popScreen(); diff --git a/main/screens/batterymenu.h b/main/screens/batterymenu.h index e9cd7be..36779ab 100644 --- a/main/screens/batterymenu.h +++ b/main/screens/batterymenu.h @@ -24,10 +24,14 @@ public: void redraw(espgui::TftInterface &tft) override; void back() override; + void buttonPressed(espgui::Button button) override; + private: bobby::DoubleProgressBar m_doubleProgressBarBatPercentage{75, 68, 90, 24, 0, 100, espgui::TFT_RED, espgui::TFT_GREEN}; espgui::Label m_batPercentNowLabel {170, 68}; espgui::Label m_batPercentBootLabel{170, 82}; + + bool m_fullRedraw{true}; }; } // namespace bobby diff --git a/main/screens/qrimportdisplay.cpp b/main/screens/qrimportdisplay.cpp index d228bde..daadd0f 100644 --- a/main/screens/qrimportdisplay.cpp +++ b/main/screens/qrimportdisplay.cpp @@ -1,6 +1,7 @@ #include "qrimportdisplay.h" // 3rdparty lib includes +#include #include namespace bobby { @@ -16,18 +17,8 @@ void QrImportDisplay::initScreen(espgui::TftInterface &tft) m_statuslabel.start(tft); - qrimport::setup_request(); - - if (const auto result = qrimport::start_qr_request(); result) - { - ESP_LOGI(TAG, "started request, waiting for result"); - m_waitingForResult = true; - } - else - { - ESP_LOGE(TAG, "could not start request: %.*s", result.error().size(), result.error().data()); - m_result = tl::make_unexpected(std::move(result).error()); - } + if (!m_requestStarted) + start_request(); } void QrImportDisplay::update() @@ -51,7 +42,10 @@ void QrImportDisplay::update() m_result = tl::make_unexpected(fmt::format("saving qr failed: {}", esp_err_to_name(result.error()))); } else - ESP_LOGW(TAG, "failed %.*s => %.*s", m_nvs_key.size(), m_nvs_key.data(), m_result.error().size(), m_result.error().data()); + { + ESP_LOGW(TAG, "failed %.*s => %.*s", m_nvs_key.size(), m_nvs_key.data(), m_result.error().size(), + m_result.error().data()); + } } void QrImportDisplay::redraw(espgui::TftInterface &tft) @@ -66,9 +60,10 @@ void QrImportDisplay::redraw(espgui::TftInterface &tft) else if (!m_result && !m_result.error().empty()) { BobbyErrorHandler{}.errorOccurred(fmt::format("&1Error: {}&6", m_result.error())); + m_statuslabel.redraw(tft, fmt::format("Error: {}", m_result.error()), TFT_RED, TFT_BLACK, 4); m_result.error().clear(); } - else + else if (m_result && !m_result->empty()) { m_statuslabel.redraw(tft, "OK", TFT_GREEN, TFT_BLACK, 4); popScreen(); @@ -92,4 +87,28 @@ void QrImportDisplay::buttonPressed(espgui::Button button) default:; } } + +void QrImportDisplay::start_request() +{ + if (wifi_stack::get_sta_status() != wifi_stack::WiFiStaStatus::CONNECTED) + { + m_result = tl::make_unexpected(std::string{"not connected to wifi"}); + return; + } + + m_requestStarted = true; + + qrimport::setup_request(); + + if (const auto result = qrimport::start_qr_request(); result) + { + ESP_LOGI(TAG, "started request, waiting for result"); + m_waitingForResult = true; + } + else + { + ESP_LOGE(TAG, "could not start request: %.*s", result.error().size(), result.error().data()); + m_result = tl::make_unexpected(result.error()); + } +} } // namespace bobby diff --git a/main/screens/qrimportdisplay.h b/main/screens/qrimportdisplay.h index 42ef075..a7ad776 100644 --- a/main/screens/qrimportdisplay.h +++ b/main/screens/qrimportdisplay.h @@ -37,8 +37,11 @@ public: void redraw(espgui::TftInterface &tft) override; void buttonPressed(espgui::Button button) override; + void start_request(); + private: bool m_waitingForResult{false}; + bool m_requestStarted{false}; espgui::Label m_statuslabel; tl::expected m_result; diff --git a/main/screens/setup/basic_buttons.cpp b/main/screens/setup/basic_buttons.cpp index 187d0a1..e9babc4 100644 --- a/main/screens/setup/basic_buttons.cpp +++ b/main/screens/setup/basic_buttons.cpp @@ -47,9 +47,10 @@ void SetupBasicButtonsDisplay::update() m_button_cal_finished = false; saveButtons(); + setup::unlock(); + if (m_early_return) { - setup::unlock(); espgui::popScreen(); } else diff --git a/main/screens/typesafeenumchangemenu.h b/main/screens/typesafeenumchangemenu.h index 938d414..0318f0b 100644 --- a/main/screens/typesafeenumchangemenu.h +++ b/main/screens/typesafeenumchangemenu.h @@ -70,7 +70,6 @@ public: using namespace espgui; using namespace typesafeenumchangemenu; constructMenuItem>(m_config); - constructMenuItem>(); iterateEnum::iterate([&](TEnum enum_value, const auto &string_value){ constructMenuItem>(enum_value, m_config); }); diff --git a/main/setup.cpp b/main/setup.cpp index d00c52e..0f0a17d 100644 --- a/main/setup.cpp +++ b/main/setup.cpp @@ -11,16 +11,24 @@ IgnoreInputMode setup_mode{0, bobbycar::protocol::ControlType::FieldOrientedCont void lock() { if (currently_locked) + { + ESP_LOGI("setup", "already locked"); return; + } oldMode = currentMode; currentMode = &setup_mode; + + currently_locked = true; } void unlock() { if (!currently_locked) + { + ESP_LOGI("setup", "already unlocked"); return; + } if (currentMode == &setup_mode) { @@ -30,6 +38,8 @@ void unlock() currentMode = oldMode; } + + currently_locked = false; } bool isLocked()