138 lines
3.3 KiB
C++
138 lines
3.3 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
|
|
#include "drivers/uc8159/uc8159.hpp"
|
|
#include "drivers/pcf85063a/pcf85063a.hpp"
|
|
#include "drivers/fatfs/ff.h"
|
|
|
|
#include "libraries/pico_graphics/pico_graphics.hpp"
|
|
|
|
namespace pimoroni {
|
|
|
|
class InkyFrame : public PicoGraphics_Pen3Bit {
|
|
public:
|
|
enum Button : uint8_t {
|
|
BUTTON_A = 0,
|
|
BUTTON_B = 1,
|
|
BUTTON_C = 2,
|
|
BUTTON_D = 3,
|
|
BUTTON_E = 4
|
|
};
|
|
|
|
enum LED : uint8_t {
|
|
LED_ACTIVITY = 6,
|
|
LED_CONNECTION = 7,
|
|
LED_A = 11,
|
|
LED_B = 12,
|
|
LED_C = 13,
|
|
LED_D = 14,
|
|
LED_E = 15
|
|
};
|
|
|
|
enum Flags : uint8_t {
|
|
RTC_ALARM = 5,
|
|
EXTERNAL_TRIGGER = 6,
|
|
EINK_BUSY = 7
|
|
};
|
|
|
|
enum WakeUpEvent : uint8_t {
|
|
UNKNOWN_EVENT = 0,
|
|
BUTTON_A_EVENT = 1,
|
|
BUTTON_B_EVENT = 2,
|
|
BUTTON_C_EVENT = 3,
|
|
BUTTON_D_EVENT = 4,
|
|
BUTTON_E_EVENT = 5,
|
|
RTC_ALARM_EVENT = 6,
|
|
EXTERNAL_TRIGGER_EVENT = 7,
|
|
};
|
|
|
|
enum Pen : uint8_t {
|
|
BLACK = 0,
|
|
WHITE = 1,
|
|
GREEN = 2,
|
|
BLUE = 3,
|
|
RED = 4,
|
|
YELLOW = 5,
|
|
ORANGE = 6,
|
|
CLEAN = 7,
|
|
TAUPE = 7
|
|
};
|
|
|
|
protected:
|
|
WakeUpEvent _wake_up_event = UNKNOWN_EVENT;
|
|
|
|
enum Pin {
|
|
HOLD_VSYS_EN = 2,
|
|
I2C_INT = 3,
|
|
I2C_SDA = 4,
|
|
I2C_SCL = 5,
|
|
SR_CLOCK = 8,
|
|
SR_LATCH = 9,
|
|
SR_OUT = 10,
|
|
MISO = 16,
|
|
EINK_CS = 17,
|
|
CLK = 18,
|
|
MOSI = 19,
|
|
SD_DAT0 = 19,
|
|
SD_DAT1 = 20,
|
|
SD_DAT2 = 21,
|
|
SD_DAT3 = 22,
|
|
SD_CS = 22,
|
|
ADC0 = 26,
|
|
EINK_RESET = 27,
|
|
EINK_DC = 28
|
|
};
|
|
|
|
public:
|
|
UC8159 uc8159;
|
|
I2C i2c;
|
|
PCF85063A rtc;
|
|
|
|
int width;
|
|
int height;
|
|
|
|
[[deprecated("Use instance variable width.")]]
|
|
static const int WIDTH = 600;
|
|
[[deprecated("Use instance variable height.")]]
|
|
static const int HEIGHT = 448;
|
|
|
|
// Default 5.7" constructor
|
|
InkyFrame() : InkyFrame(600, 448) {};
|
|
|
|
// 600x448 for 5.7"
|
|
// 640x400 for 4.0"
|
|
InkyFrame(int width, int height) :
|
|
PicoGraphics_Pen3Bit(width, height, nullptr),
|
|
uc8159(width, height, {spi0, EINK_CS, CLK, MOSI, PIN_UNUSED, EINK_DC, PIN_UNUSED}),
|
|
i2c(4, 5),
|
|
rtc(&i2c),
|
|
width(width),
|
|
height(height) {
|
|
}
|
|
|
|
void init();
|
|
|
|
// wake/sleep management
|
|
void sleep(int wake_in_minutes = -1);
|
|
void sleep_until(int second = -1, int minute = -1, int hour = -1, int day = -1);
|
|
WakeUpEvent get_wake_up_event() {return _wake_up_event;}
|
|
|
|
// screen management
|
|
void update(bool blocking=false);
|
|
static bool is_busy();
|
|
|
|
// state
|
|
bool pressed(Button button);
|
|
static uint8_t read_shift_register();
|
|
static bool read_shift_register_bit(uint8_t index);
|
|
void led(LED led, uint8_t brightness);
|
|
|
|
void icon(const uint8_t *data, int sheet_width, int icon_size, int index, int dx, int dy);
|
|
void image(const uint8_t* data);
|
|
void image(const uint8_t *data, int w, int h, int x, int y);
|
|
void image(const uint8_t *data, int stride, int sx, int sy, int dw, int dh, int dx, int dy);
|
|
};
|
|
|
|
}
|