Fixed qr code
This commit is contained in:
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -58,3 +58,6 @@
|
||||
[submodule "components/espconfiglib"]
|
||||
path = components/espconfiglib
|
||||
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/modesettingsaction.h
|
||||
actions/multiaction.h
|
||||
actions/qraction.h
|
||||
actions/rebootaction.h
|
||||
actions/savesettingsaction.h
|
||||
actions/switchprofileaction.h
|
||||
@ -51,6 +52,7 @@ set(headers
|
||||
displays/bmsdisplay.h
|
||||
displays/calibratedisplay.h
|
||||
displays/calibratevoltagedisplay.h
|
||||
displays/qrdisplay.h
|
||||
displays/dpad5wire2outdebugdisplay.h
|
||||
displays/dpad5wiredebugdisplay.h
|
||||
displays/dpad6wiredebugdisplay.h
|
||||
@ -228,6 +230,7 @@ set(sources
|
||||
actions/loadsettingsaction.cpp
|
||||
actions/modesettingsaction.cpp
|
||||
actions/multiaction.cpp
|
||||
actions/qraction.cpp
|
||||
actions/rebootaction.cpp
|
||||
actions/savesettingsaction.cpp
|
||||
actions/switchprofileaction.cpp
|
||||
@ -259,6 +262,7 @@ set(sources
|
||||
displays/bmsdisplay.cpp
|
||||
displays/calibratedisplay.cpp
|
||||
displays/calibratevoltagedisplay.cpp
|
||||
displays/qrdisplay.cpp
|
||||
displays/dpad5wire2outdebugdisplay.cpp
|
||||
displays/dpad5wiredebugdisplay.cpp
|
||||
displays/dpad6wiredebugdisplay.cpp
|
||||
@ -417,7 +421,7 @@ set(sources
|
||||
|
||||
set(dependencies
|
||||
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
|
||||
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 <actioninterface.h>
|
||||
|
||||
// local includes
|
||||
#include "actions/switchscreenaction.h"
|
||||
#include "actions/qraction.h"
|
||||
#include "displays/menus/mainmenu.h"
|
||||
#include "displays/qrdisplay.h"
|
||||
#include "icons/back.h"
|
||||
|
||||
using namespace espgui;
|
||||
|
||||
namespace greenpassmenu {
|
||||
bool showingQRCode{false};
|
||||
} // namespace
|
||||
|
||||
void GreenPassMenu::ShowCertAction::triggered() {
|
||||
greenpassmenu::showingQRCode = true;
|
||||
m_qrcode.init();
|
||||
m_qrcode.createScaleToFit("");
|
||||
}
|
||||
|
||||
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>>>();
|
||||
}
|
||||
|
||||
void GreenPassMenu::initScreen()
|
||||
{
|
||||
Base::initScreen();
|
||||
greenpassmenu::showingQRCode = false;
|
||||
}
|
||||
|
||||
void GreenPassMenu::rotate(int offset)
|
||||
{
|
||||
if (greenpassmenu::showingQRCode)
|
||||
GreenPassMenu::initScreen();
|
||||
Base::rotate(offset);
|
||||
}
|
||||
|
||||
void GreenPassMenu::back()
|
||||
{
|
||||
if (greenpassmenu::showingQRCode)
|
||||
{
|
||||
GreenPassMenu::initScreen();
|
||||
}
|
||||
else
|
||||
switchScreen<MainMenu>();
|
||||
switchScreen<MainMenu>();
|
||||
}
|
||||
|
@ -6,10 +6,6 @@
|
||||
#include "menudisplay.h"
|
||||
#include "texts.h"
|
||||
|
||||
namespace greenpassmenu {
|
||||
extern bool showingQRCode;
|
||||
} // namespace
|
||||
|
||||
class GreenPassMenu :
|
||||
public espgui::MenuDisplay,
|
||||
public espgui::StaticText<TEXT_GREENPASS>
|
||||
@ -18,13 +14,4 @@ class GreenPassMenu :
|
||||
public:
|
||||
GreenPassMenu();
|
||||
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 <fmt/core.h>
|
||||
#include <tftinstance.h>
|
||||
|
||||
#include "displays/menus/debugmenu.h"
|
||||
#include "globals.h"
|
||||
@ -20,17 +21,21 @@ void QrCodeDebugDisplay::back()
|
||||
void QrCodeDebugDisplay::initScreen()
|
||||
{
|
||||
Base::initScreen();
|
||||
m_qrcode.init();
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
m_mult += offset;
|
||||
m_qrcode.setMultiply(m_mult);
|
||||
m_qrcode.create("Hello World!");
|
||||
for (uint8_t y = 0; y < m_qrcode.size; y++) {
|
||||
for (uint8_t x = 0; x < m_qrcode.size; x++) {
|
||||
if (qrcode_getModule(&m_qrcode, x, y))
|
||||
{
|
||||
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;
|
||||
public:
|
||||
QrCodeDebugDisplay();
|
||||
// std::string text() const override;
|
||||
void initScreen() override;
|
||||
void confirm() override;
|
||||
void back() override;
|
||||
void rotate(int offset) override;
|
||||
private:
|
||||
qrcode::QRcode m_qrcode{};
|
||||
uint8_t m_mult{2};
|
||||
QRCode m_qrcode;
|
||||
};
|
||||
|
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