summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruvok2026-05-03 18:57:41 +0200
committeruvok2026-05-03 18:57:41 +0200
commit3f808628dd27552bc50609baad1073e5c0b59b87 (patch)
tree27269f8569404bd19250b791349b6def5f9be3c7
parentd98908f1b2fbc1136b1efebb582d568e7555ba23 (diff)
Add function to draw text
-rw-r--r--include/badge/display.h2
-rw-r--r--src/display.cpp54
2 files changed, 42 insertions, 14 deletions
diff --git a/include/badge/display.h b/include/badge/display.h
index fa4c1e9..d1053f2 100644
--- a/include/badge/display.h
+++ b/include/badge/display.h
@@ -2,6 +2,7 @@
#include "indicator.h"
#include <stdint.h>
+#include <string>
namespace de::uvok::badge
{
@@ -13,5 +14,6 @@ namespace de::uvok::badge
uint8_t display_prev(void);
uint8_t display_refresh(void);
void display_direct(uint8_t num);
+ void display_text(const std::string& text);
void display_indicator(DisplayIndicator);
} // namespace de::uvok::badge
diff --git a/src/display.cpp b/src/display.cpp
index 37b938a..277fc7a 100644
--- a/src/display.cpp
+++ b/src/display.cpp
@@ -6,6 +6,7 @@
#include <Fonts/FreeSansBold12pt7b.h>
// #include <GxEPD2_3C.h>
#include <GxEPD2_BW.h>
+#include <QRCodeGFX.h>
#include "badge/config.h"
#include "badge/util.h"
@@ -33,7 +34,10 @@ GxEPD2_BW<GxEPD2_290_T94, GxEPD2_290_T94::HEIGHT> display(GxEPD2_290_T94(45, 46,
#error "define display"
#endif
-static uint8_t displayed = 0;
+QRCodeGFX qrc(display);
+
+static uint8_t displayed_image = 0;
+static std::string displayed_text;
#include "cheebox.xbm"
#include "chleepy.xbm"
@@ -63,6 +67,7 @@ void de::uvok::badge::display_init()
display.hibernate();
LOG_F("Display done.\n");
+
}
#define IMAGE_DATA(name, text) {name##_bits, name##_width, name##_height, text}
@@ -83,24 +88,38 @@ const int de::uvok::badge::image_count = (ARRAY_LENGTH(imgs));
typedef enum
{
DISPLAY_PREVIEW,
- DISPLAY_FULL
+ DISPLAY_FULL,
+ DISPLAY_QRCODE
} display_mode_t;
+static void displayQRCode()
+{
+ do
+ {
+ display.setFullWindow();
+ } while (display.nextPage());
+}
+
static void displayDo(display_mode_t mode)
{
+ if (mode == DISPLAY_QRCODE)
+ {
+ displayQRCode();
+ return;
+ }
if (is_initial)
{
mode = DISPLAY_FULL;
is_initial = false;
}
- LOG_F("Print image %d in full mode? %d\n", displayed, mode);
+ LOG_F("Print image %d in full mode? %d\n", displayed_image, mode);
display.setRotation(rotation);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeSansBold12pt7b);
- const char *display_text = imgs[displayed].text;
+ const char *display_text = imgs[displayed_image].text;
int16_t tbx, tby;
uint16_t tbw, tbh;
display.getTextBounds(display_text, 0, 0, &tbx, &tby, &tbw, &tbh);
@@ -117,8 +136,8 @@ static void displayDo(display_mode_t mode)
if (mode == DISPLAY_FULL)
{
display.setFullWindow();
- display.drawXBitmap(0, 0, (const unsigned char *)imgs[displayed].bits, imgs[displayed].width,
- imgs[displayed].height, GxEPD_BLACK);
+ display.drawXBitmap(0, 0, (const unsigned char *)imgs[displayed_image].bits, imgs[displayed_image].width,
+ imgs[displayed_image].height, GxEPD_BLACK);
}
else
{
@@ -137,24 +156,24 @@ static void displayDo(display_mode_t mode)
uint8_t de::uvok::badge::display_prev()
{
- displayed--;
- if (displayed >= image_count)
- displayed = image_count - 1;
+ displayed_image--;
+ if (displayed_image >= image_count)
+ displayed_image = image_count - 1;
displayDo(DISPLAY_PREVIEW);
- return displayed;
+ return displayed_image;
}
uint8_t de::uvok::badge::display_next()
{
- displayed = (displayed + 1) % image_count;
+ displayed_image = (displayed_image + 1) % image_count;
displayDo(DISPLAY_PREVIEW);
- return displayed;
+ return displayed_image;
}
uint8_t de::uvok::badge::display_refresh()
{
displayDo(DISPLAY_FULL);
- return displayed;
+ return displayed_image;
}
void de::uvok::badge::display_direct(uint8_t num)
@@ -162,10 +181,17 @@ void de::uvok::badge::display_direct(uint8_t num)
LOG_F("Display direct\n");
if (num >= image_count)
return;
- displayed = num;
+ displayed_image = num;
displayDo(DISPLAY_FULL);
}
+void de::uvok::badge::display_text(const std::string& text)
+{
+ displayed_text = text;
+ displayDo(DISPLAY_QRCODE);
+ is_initial = true;
+}
+
void de::uvok::badge::display_indicator(DisplayIndicator indicator)
{
LOG_F("Set indicator to %d\n", indicator);