summaryrefslogtreecommitdiff
path: root/src/display.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/display.cpp')
-rw-r--r--src/display.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/display.cpp b/src/display.cpp
new file mode 100644
index 0000000..cde438f
--- /dev/null
+++ b/src/display.cpp
@@ -0,0 +1,81 @@
+#include "display.h"
+
+#include <Fonts/FreeMonoBold18pt7b.h>
+#include <Fonts/FreeMonoBold9pt7b.h>
+// #include <GxEPD2_3C.h>
+#include <GxEPD2_BW.h>
+
+#include "badge_config.h"
+
+#if UVOK_EPAP_DISPLAY == DISPLAY_WAVESHARE_219_YBW
+// HINT: Update the library code, set budy timeout to 30 or 60 seconds!
+// Small color
+GxEPD2_3C<GxEPD2_213_Z19c, GxEPD2_213_Z19c::HEIGHT> display(GxEPD2_213_Z19c(22, 21, 17, 16));
+#elif UVOK_EPAP_DISPLAY == DISPLAY_WAVESHARE_290_BW
+// larger b/w
+// or T5
+// GxEPD2_BW<GxEPD2_290_T5D, GxEPD2_290_T5D::HEIGHT> display(GxEPD2_290_T5D(22, 21, 17, 16));
+GxEPD2_BW<GxEPD2_290_M06, GxEPD2_290_M06::HEIGHT> display(GxEPD2_290_M06(22, 21, 17, 16));
+#elif UVOK_EPAP_DISPLAY == DISPLAY_ELECROW_290_BW
+/*
+#define SCK 12
+#define MOSI 11
+#define RES 47
+#define DC 46
+#define CS 45
+#define BUSY 48
+*/
+GxEPD2_BW<GxEPD2_290_T94, GxEPD2_290_T94::HEIGHT> display(GxEPD2_290_T94(45, 46, 47, 48));
+#else
+#error "define display"
+#endif
+
+void de::uvok::badge::display_init(void)
+{
+ Serial.println("Init display...");
+
+#if UVOK_EPAP_DISPLAY == DISPLAY_ELECROW_290_BW
+ // Turn on once, let controller handle the rest, lest I want to do re-init...
+ pinMode(7, OUTPUT); // Set pin 7 as output mode
+ digitalWrite(7, HIGH); // Set pin 7 to high level to turn on the screen power
+ display.init(115200, true);
+#else
+ display.init(115200, true, 2, false); // USE THIS for Waveshare boards with "clever" reset circuit, 2ms reset pulse
+#endif
+
+ display.hibernate();
+ Serial.println("Display done.");
+}
+
+#include "chee.c"
+
+void de::uvok::badge::display_demo(void)
+{
+#define TEXT_BORDER 10
+ // display.clearScreen();
+ static const char s_hungry[] = "hungry";
+ display.setRotation(1);
+ display.setTextColor(GxEPD_BLACK);
+ int16_t tbx, tby;
+ uint16_t tbw, tbh;
+ display.setFont(&FreeMonoBold9pt7b);
+ display.getTextBounds(s_hungry, 0, 0, &tbx, &tby, &tbw, &tbh);
+ // center the bounding box by transposition of the origin:
+ uint16_t x = display.width() - tbw - TEXT_BORDER - tbx;
+ uint16_t y = ((display.height() - tbh) / 2) - tby;
+ display.setFullWindow();
+ display.firstPage();
+ do
+ {
+ display.drawXBitmap(0, 0, chee_bits, chee_width, chee_height, GxEPD_BLACK);
+ display.getTextBounds(s_hungry, x, y, &tbx, &tby, &tbw, &tbh);
+ display.fillRect(tbx - TEXT_BORDER, tby - TEXT_BORDER, tbw + 2 * TEXT_BORDER, tbh + 2 * TEXT_BORDER,
+ GxEPD_WHITE);
+
+ display.setCursor(x, y);
+ display.print(s_hungry);
+ } while (display.nextPage());
+
+ display.hibernate();
+#undef TEXT_BORDER
+}