summaryrefslogtreecommitdiff
path: root/src/display.cpp
blob: 54da2dbfed616f0a34b720dd8072c67a331485c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "badge/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
}