Fixed qr code
This commit is contained in:
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -58,3 +58,6 @@
|
|||||||
[submodule "components/espconfiglib"]
|
[submodule "components/espconfiglib"]
|
||||||
path = components/espconfiglib
|
path = components/espconfiglib
|
||||||
url = ../../0xFEEDC0DE64/espconfiglib.git
|
url = ../../0xFEEDC0DE64/espconfiglib.git
|
||||||
|
[submodule "components/QRCode-esp32"]
|
||||||
|
path = components/QRCode-esp32
|
||||||
|
url = git@github.com:bobbycar-graz/QRCode-esp32.git
|
||||||
|
1
components/QRCode-esp32
Submodule
1
components/QRCode-esp32
Submodule
Submodule components/QRCode-esp32 added at f06816a362
@ -20,6 +20,7 @@ set(headers
|
|||||||
actions/loadsettingsaction.h
|
actions/loadsettingsaction.h
|
||||||
actions/modesettingsaction.h
|
actions/modesettingsaction.h
|
||||||
actions/multiaction.h
|
actions/multiaction.h
|
||||||
|
actions/qraction.h
|
||||||
actions/rebootaction.h
|
actions/rebootaction.h
|
||||||
actions/savesettingsaction.h
|
actions/savesettingsaction.h
|
||||||
actions/switchprofileaction.h
|
actions/switchprofileaction.h
|
||||||
@ -51,6 +52,7 @@ set(headers
|
|||||||
displays/bmsdisplay.h
|
displays/bmsdisplay.h
|
||||||
displays/calibratedisplay.h
|
displays/calibratedisplay.h
|
||||||
displays/calibratevoltagedisplay.h
|
displays/calibratevoltagedisplay.h
|
||||||
|
displays/qrdisplay.h
|
||||||
displays/dpad5wire2outdebugdisplay.h
|
displays/dpad5wire2outdebugdisplay.h
|
||||||
displays/dpad5wiredebugdisplay.h
|
displays/dpad5wiredebugdisplay.h
|
||||||
displays/dpad6wiredebugdisplay.h
|
displays/dpad6wiredebugdisplay.h
|
||||||
@ -228,6 +230,7 @@ set(sources
|
|||||||
actions/loadsettingsaction.cpp
|
actions/loadsettingsaction.cpp
|
||||||
actions/modesettingsaction.cpp
|
actions/modesettingsaction.cpp
|
||||||
actions/multiaction.cpp
|
actions/multiaction.cpp
|
||||||
|
actions/qraction.cpp
|
||||||
actions/rebootaction.cpp
|
actions/rebootaction.cpp
|
||||||
actions/savesettingsaction.cpp
|
actions/savesettingsaction.cpp
|
||||||
actions/switchprofileaction.cpp
|
actions/switchprofileaction.cpp
|
||||||
@ -259,6 +262,7 @@ set(sources
|
|||||||
displays/bmsdisplay.cpp
|
displays/bmsdisplay.cpp
|
||||||
displays/calibratedisplay.cpp
|
displays/calibratedisplay.cpp
|
||||||
displays/calibratevoltagedisplay.cpp
|
displays/calibratevoltagedisplay.cpp
|
||||||
|
displays/qrdisplay.cpp
|
||||||
displays/dpad5wire2outdebugdisplay.cpp
|
displays/dpad5wire2outdebugdisplay.cpp
|
||||||
displays/dpad5wiredebugdisplay.cpp
|
displays/dpad5wiredebugdisplay.cpp
|
||||||
displays/dpad6wiredebugdisplay.cpp
|
displays/dpad6wiredebugdisplay.cpp
|
||||||
@ -417,7 +421,7 @@ set(sources
|
|||||||
|
|
||||||
set(dependencies
|
set(dependencies
|
||||||
libsodium freertos nvs_flash esp_http_server esp_https_ota mdns app_update esp_system esp_websocket_client driver
|
libsodium freertos nvs_flash esp_http_server esp_https_ota mdns app_update esp_system esp_websocket_client driver
|
||||||
arduino-esp32 ArduinoJson esp-nimble-cpp FastLED-idf TFT_eSPI TFT_eSPI_QRcode
|
arduino-esp32 ArduinoJson esp-nimble-cpp FastLED-idf TFT_eSPI QRCode-esp32
|
||||||
bobbycar-protocol cpputils cxx-ring-buffer date
|
bobbycar-protocol cpputils cxx-ring-buffer date
|
||||||
espasynchttpreq espasyncota espchrono espcpputils espconfiglib esp-gui-lib esphttpdutils espwifistack expected fmt
|
espasynchttpreq espasyncota espchrono espcpputils espconfiglib esp-gui-lib esphttpdutils espwifistack expected fmt
|
||||||
)
|
)
|
||||||
|
15
main/actions/qraction.cpp
Normal file
15
main/actions/qraction.cpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include "qraction.h"
|
||||||
|
|
||||||
|
#include <actioninterface.h>
|
||||||
|
#include <string>
|
||||||
|
#include <screenmanager.h>
|
||||||
|
#include "displays/qrdisplay.h"
|
||||||
|
|
||||||
|
using namespace espgui;
|
||||||
|
|
||||||
|
SwitchQrDisplayAction::SwitchQrDisplayAction(qraction::QrMenu qrmenu) : m_msg{qrmenu.message}, m_ver{qrmenu.ver} {}
|
||||||
|
|
||||||
|
void SwitchQrDisplayAction::triggered()
|
||||||
|
{
|
||||||
|
switchScreen<QrDisplay>(m_msg, m_ver);
|
||||||
|
}
|
24
main/actions/qraction.h
Normal file
24
main/actions/qraction.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <actioninterface.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "actions/qraction.h"
|
||||||
|
|
||||||
|
namespace qraction {
|
||||||
|
struct QrMenu {
|
||||||
|
std::string_view message;
|
||||||
|
uint8_t ver;
|
||||||
|
};
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
class SwitchQrDisplayAction : public virtual espgui::ActionInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SwitchQrDisplayAction(qraction::QrMenu qrmenu);
|
||||||
|
|
||||||
|
void triggered() override;
|
||||||
|
private:
|
||||||
|
std::string_view m_msg;
|
||||||
|
uint8_t m_ver;
|
||||||
|
};
|
@ -1,49 +1,21 @@
|
|||||||
#include "greenpassmenu.h"
|
#include "greenpassmenu.h"
|
||||||
|
|
||||||
#include <actioninterface.h>
|
|
||||||
|
|
||||||
// local includes
|
// local includes
|
||||||
#include "actions/switchscreenaction.h"
|
#include "actions/switchscreenaction.h"
|
||||||
|
#include "actions/qraction.h"
|
||||||
#include "displays/menus/mainmenu.h"
|
#include "displays/menus/mainmenu.h"
|
||||||
|
#include "displays/qrdisplay.h"
|
||||||
#include "icons/back.h"
|
#include "icons/back.h"
|
||||||
|
|
||||||
using namespace espgui;
|
using namespace espgui;
|
||||||
|
|
||||||
namespace greenpassmenu {
|
|
||||||
bool showingQRCode{false};
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
void GreenPassMenu::ShowCertAction::triggered() {
|
|
||||||
greenpassmenu::showingQRCode = true;
|
|
||||||
m_qrcode.init();
|
|
||||||
m_qrcode.createScaleToFit("");
|
|
||||||
}
|
|
||||||
|
|
||||||
GreenPassMenu::GreenPassMenu()
|
GreenPassMenu::GreenPassMenu()
|
||||||
{
|
{
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_SHOWCERT>, ShowCertAction>>();
|
constructMenuItem<makeComponentArgs<MenuItem, SwitchQrDisplayAction, StaticText<TEXT_SHOWCERT>>>(qraction::QrMenu{.message="CORONA_PASS", .ver=15});
|
||||||
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_BACK>, SwitchScreenAction<MainMenu>, StaticMenuItemIcon<&espgui::icons::back>>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GreenPassMenu::initScreen()
|
|
||||||
{
|
|
||||||
Base::initScreen();
|
|
||||||
greenpassmenu::showingQRCode = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GreenPassMenu::rotate(int offset)
|
|
||||||
{
|
|
||||||
if (greenpassmenu::showingQRCode)
|
|
||||||
GreenPassMenu::initScreen();
|
|
||||||
Base::rotate(offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GreenPassMenu::back()
|
void GreenPassMenu::back()
|
||||||
{
|
{
|
||||||
if (greenpassmenu::showingQRCode)
|
switchScreen<MainMenu>();
|
||||||
{
|
|
||||||
GreenPassMenu::initScreen();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
switchScreen<MainMenu>();
|
|
||||||
}
|
}
|
||||||
|
@ -6,10 +6,6 @@
|
|||||||
#include "menudisplay.h"
|
#include "menudisplay.h"
|
||||||
#include "texts.h"
|
#include "texts.h"
|
||||||
|
|
||||||
namespace greenpassmenu {
|
|
||||||
extern bool showingQRCode;
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
class GreenPassMenu :
|
class GreenPassMenu :
|
||||||
public espgui::MenuDisplay,
|
public espgui::MenuDisplay,
|
||||||
public espgui::StaticText<TEXT_GREENPASS>
|
public espgui::StaticText<TEXT_GREENPASS>
|
||||||
@ -18,13 +14,4 @@ class GreenPassMenu :
|
|||||||
public:
|
public:
|
||||||
GreenPassMenu();
|
GreenPassMenu();
|
||||||
void back() override;
|
void back() override;
|
||||||
void rotate(int offset) override;
|
|
||||||
void initScreen() override;
|
|
||||||
|
|
||||||
class ShowCertAction : public virtual espgui::ActionInterface {
|
|
||||||
public:
|
|
||||||
void triggered() override;
|
|
||||||
private:
|
|
||||||
qrcode::QRcode m_qrcode{};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "qrcodedebug.h"
|
#include "qrcodedebug.h"
|
||||||
|
|
||||||
#include <fmt/core.h>
|
#include <fmt/core.h>
|
||||||
|
#include <tftinstance.h>
|
||||||
|
|
||||||
#include "displays/menus/debugmenu.h"
|
#include "displays/menus/debugmenu.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
@ -20,17 +21,21 @@ void QrCodeDebugDisplay::back()
|
|||||||
void QrCodeDebugDisplay::initScreen()
|
void QrCodeDebugDisplay::initScreen()
|
||||||
{
|
{
|
||||||
Base::initScreen();
|
Base::initScreen();
|
||||||
m_qrcode.init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QrCodeDebugDisplay::confirm()
|
void QrCodeDebugDisplay::confirm()
|
||||||
{
|
{
|
||||||
m_qrcode.createScaleToFit(fmt::format("WIFI:T:WPA;S:{};P:{};", deviceName, stringSettings.ap_password));
|
uint8_t qrcodeBytes[qrcode_getBufferSize(7)];
|
||||||
}
|
qrcode_initText(&m_qrcode, qrcodeBytes, 7, ECC_MEDIUM, fmt::format("WIFI:T:WPA;S:{};P:{};", deviceName, stringSettings.ap_password).c_str());
|
||||||
|
|
||||||
void QrCodeDebugDisplay::rotate(int offset)
|
for (uint8_t y = 0; y < m_qrcode.size; y++) {
|
||||||
{
|
for (uint8_t x = 0; x < m_qrcode.size; x++) {
|
||||||
m_mult += offset;
|
if (qrcode_getModule(&m_qrcode, x, y))
|
||||||
m_qrcode.setMultiply(m_mult);
|
{
|
||||||
m_qrcode.create("Hello World!");
|
tft.drawPixel(x+2,y+2, TFT_BLACK);
|
||||||
|
} else {
|
||||||
|
tft.drawPixel(x+2,y+2, TFT_WHITE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,12 +10,9 @@ class QrCodeDebugDisplay :
|
|||||||
using Base = espgui::Display;
|
using Base = espgui::Display;
|
||||||
public:
|
public:
|
||||||
QrCodeDebugDisplay();
|
QrCodeDebugDisplay();
|
||||||
// std::string text() const override;
|
|
||||||
void initScreen() override;
|
void initScreen() override;
|
||||||
void confirm() override;
|
void confirm() override;
|
||||||
void back() override;
|
void back() override;
|
||||||
void rotate(int offset) override;
|
|
||||||
private:
|
private:
|
||||||
qrcode::QRcode m_qrcode{};
|
QRCode m_qrcode;
|
||||||
uint8_t m_mult{2};
|
|
||||||
};
|
};
|
||||||
|
46
main/displays/qrdisplay.cpp
Normal file
46
main/displays/qrdisplay.cpp
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#include "qrdisplay.h"
|
||||||
|
|
||||||
|
// 3rd party libs
|
||||||
|
#include <tftinstance.h>
|
||||||
|
#include <screenmanager.h>
|
||||||
|
|
||||||
|
// local includes
|
||||||
|
#include "displays/menus/greenpassmenu.h"
|
||||||
|
|
||||||
|
using namespace espgui;
|
||||||
|
|
||||||
|
QrDisplay::QrDisplay(std::string_view msg, uint8_t ver) : m_msg{msg}, m_ver{ver} {}
|
||||||
|
|
||||||
|
void QrDisplay::initScreen()
|
||||||
|
{
|
||||||
|
QRCode qrcode;
|
||||||
|
uint8_t qrcodeBytes[qrcode_getBufferSize(m_ver)];
|
||||||
|
qrcode_initText(&qrcode, qrcodeBytes, m_ver, ECC_MEDIUM, m_msg.data());
|
||||||
|
|
||||||
|
const uint8_t multiplier = (tft.width() - 9) / qrcode.size;
|
||||||
|
const uint8_t x_offset = (tft.width() - qrcode.size * multiplier) / 2;
|
||||||
|
const uint8_t y_offset = (tft.height() - qrcode.size * multiplier) / 2;
|
||||||
|
|
||||||
|
tft.fillScreen(TFT_WHITE);
|
||||||
|
|
||||||
|
for (uint8_t y = 0; y < qrcode.size; y++) {
|
||||||
|
for (uint8_t x = 0; x < qrcode.size; x++) {
|
||||||
|
if (qrcode_getModule(&qrcode, x, y))
|
||||||
|
{
|
||||||
|
tft.fillRect(x*multiplier+x_offset,y*multiplier+y_offset, multiplier, multiplier, TFT_BLACK);
|
||||||
|
} else {
|
||||||
|
tft.fillRect(x*multiplier+x_offset,y*multiplier+y_offset, multiplier, multiplier, TFT_WHITE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrDisplay::back()
|
||||||
|
{
|
||||||
|
switchScreen<GreenPassMenu>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QrDisplay::confirm()
|
||||||
|
{
|
||||||
|
switchScreen<GreenPassMenu>();
|
||||||
|
}
|
18
main/displays/qrdisplay.h
Normal file
18
main/displays/qrdisplay.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// 3rd party includes
|
||||||
|
#include <display.h>
|
||||||
|
#include <qrcode.h>
|
||||||
|
|
||||||
|
class QrDisplay :
|
||||||
|
public espgui::Display
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
QrDisplay(std::string_view msg, uint8_t ver);
|
||||||
|
void initScreen() override;
|
||||||
|
void confirm() override;
|
||||||
|
void back() override;
|
||||||
|
private:
|
||||||
|
std::string_view m_msg;
|
||||||
|
uint8_t m_ver;
|
||||||
|
};
|
Reference in New Issue
Block a user