mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-10-17 02:45:05 +00:00
246 lines
6.8 KiB
C
246 lines
6.8 KiB
C
#ifndef _EPAPER_CONFIG_H_
|
|
#define _EPAPER_CONFIG_H_
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include "driver/spi_master.h"
|
|
|
|
// Default pinout (ESP32-WROOM-32D)
|
|
#define EPD_DEFAULT_PIN_BUSY 14
|
|
#define EPD_DEFAULT_PIN_RST 15
|
|
#define EPD_DEFAULT_PIN_DC 16
|
|
#define EPD_DEFAULT_PIN_CS 17
|
|
#define EPD_DEFAULT_PIN_SCK 18
|
|
#define EPD_DEFAULT_PIN_MOSI 23
|
|
|
|
#define EPD_DEFAULT_SPI_HOST SPI2_HOST
|
|
#define EPD_DEFAULT_SPI_SPEED 4000000 // 4MHz
|
|
|
|
// Panel types
|
|
typedef enum {
|
|
// Specific panels (with custom LUT or special features)
|
|
EPD_PANEL_GDEY0154D67 = 0, // 1.54" BW 200x200 (custom LUT for better partial)
|
|
EPD_PANEL_GDEP073E01, // 7.3" 6-Color 800x480
|
|
EPD_PANEL_GDEY037F51, // 3.7" 4-Color BWRY 240x416
|
|
EPD_PANEL_GDEY029T71H, // 2.9" BW 168x384 (SSD1685, sources S8..S175)
|
|
|
|
// Generic SSD16xx BW panels (same driver, different sizes)
|
|
EPD_PANEL_SSD16XX_154, // 1.54" BW 200x200 (generic, no custom LUT)
|
|
EPD_PANEL_SSD16XX_213, // 2.13" BW 122x250 (GDEY0213B74, etc.)
|
|
EPD_PANEL_SSD16XX_266, // 2.66" BW 152x296 (GDEY0266T90, etc.)
|
|
EPD_PANEL_SSD16XX_270, // 2.7" BW 176x264 (GDEY027T91, etc.)
|
|
EPD_PANEL_SSD16XX_290, // 2.9" BW 128x296 (GDEY029T94, etc.)
|
|
EPD_PANEL_SSD16XX_370, // 3.7" BW 280x480 (GDEY037T03, etc.)
|
|
EPD_PANEL_SSD16XX_420, // 4.2" BW 400x300 (GDEY042T81, etc.)
|
|
|
|
EPD_PANEL_GDEQ031T10, // 3.1" BW 240x320 (UC8253)
|
|
|
|
EPD_PANEL_COUNT, // Must be BEFORE aliases!
|
|
|
|
// Legacy aliases (for backward compatibility, don't affect count)
|
|
EPD_PANEL_GDEY0266T90 = EPD_PANEL_SSD16XX_266,
|
|
} epd_panel_type_t;
|
|
|
|
// Board presets
|
|
typedef enum {
|
|
EPD_BOARD_CUSTOM = 0,
|
|
EPD_BOARD_ESP32_WROOM, // Default ESP32-WROOM-32D
|
|
EPD_BOARD_ESP32S3_EPAPER_154, // ESP32-S3-ePaper-1.54 board
|
|
EPD_BOARD_ESP32S3_EPAPER_73, // ESP32-S3 + 7.3" 6-Color board
|
|
} epd_board_preset_t;
|
|
|
|
// Color mode
|
|
typedef enum {
|
|
EPD_COLOR_BW = 0, // Black/White (1-bit)
|
|
EPD_COLOR_BWR, // Black/White/Red (3-color)
|
|
EPD_COLOR_BWY, // Black/White/Yellow (3-color)
|
|
EPD_COLOR_4GRAY, // 4 Gray levels
|
|
EPD_COLOR_4COLOR, // 4-color BWRY (Black/White/Yellow/Red, 2-bit)
|
|
EPD_COLOR_7COLOR, // 7-color (B/W/R/Y/Orange/Green/Blue)
|
|
EPD_COLOR_6COLOR, // 6-color (B/W/R/Y/Green/Blue)
|
|
} epd_color_mode_t;
|
|
|
|
// E-paper color indices (for multi-color panels)
|
|
#define EPD_PIXEL_BLACK 0x0
|
|
#define EPD_PIXEL_WHITE 0x1
|
|
#define EPD_PIXEL_YELLOW 0x2
|
|
#define EPD_PIXEL_RED 0x3
|
|
#define EPD_PIXEL_ORANGE 0x4
|
|
#define EPD_PIXEL_BLUE 0x5
|
|
#define EPD_PIXEL_GREEN 0x6
|
|
|
|
// Dithering mode
|
|
typedef enum {
|
|
EPD_DITHER_NONE = 0, // No dithering (direct color mapping)
|
|
EPD_DITHER_FLOYD_STEINBERG, // Floyd-Steinberg error diffusion
|
|
EPD_DITHER_ORDERED, // Ordered/Bayer dithering
|
|
} epd_dither_mode_t;
|
|
|
|
// Update mode
|
|
typedef enum {
|
|
EPD_UPDATE_FULL = 0, // Full refresh
|
|
EPD_UPDATE_FAST, // Fast refresh
|
|
EPD_UPDATE_PARTIAL, // Partial refresh
|
|
} epd_update_mode_t;
|
|
|
|
// Pin configuration
|
|
typedef struct {
|
|
int busy;
|
|
int rst;
|
|
int dc;
|
|
int cs;
|
|
int sck;
|
|
int mosi;
|
|
} epd_pin_config_t;
|
|
|
|
// SPI configuration
|
|
typedef struct {
|
|
int host; // SPI host (SPI2_HOST, SPI3_HOST)
|
|
int speed_hz; // Clock speed
|
|
} epd_spi_config_t;
|
|
|
|
// Panel configuration
|
|
typedef struct {
|
|
epd_panel_type_t type;
|
|
uint16_t width; // Override width (0 = use default)
|
|
uint16_t height; // Override height (0 = use default)
|
|
bool mirror_x;
|
|
bool mirror_y;
|
|
uint8_t rotation; // 0, 90, 180, 270
|
|
} epd_panel_config_t;
|
|
|
|
// Full device configuration
|
|
typedef struct {
|
|
epd_pin_config_t pins;
|
|
epd_spi_config_t spi;
|
|
epd_panel_config_t panel;
|
|
} epd_config_t;
|
|
|
|
// Default configuration macro (ESP32-WROOM-32D)
|
|
#define EPD_CONFIG_DEFAULT() { \
|
|
.pins = { \
|
|
.busy = EPD_DEFAULT_PIN_BUSY, \
|
|
.rst = EPD_DEFAULT_PIN_RST, \
|
|
.dc = EPD_DEFAULT_PIN_DC, \
|
|
.cs = EPD_DEFAULT_PIN_CS, \
|
|
.sck = EPD_DEFAULT_PIN_SCK, \
|
|
.mosi = EPD_DEFAULT_PIN_MOSI, \
|
|
}, \
|
|
.spi = { \
|
|
.host = EPD_DEFAULT_SPI_HOST, \
|
|
.speed_hz = EPD_DEFAULT_SPI_SPEED, \
|
|
}, \
|
|
.panel = { \
|
|
.type = EPD_PANEL_GDEY0266T90, \
|
|
.width = 0, \
|
|
.height = 0, \
|
|
.mirror_x = false, \
|
|
.mirror_y = false, \
|
|
.rotation = 0, \
|
|
}, \
|
|
}
|
|
|
|
// ESP32-S3-ePaper-1.54 board configuration
|
|
// Pinout: DC=10, CS=11, SCK=12, MOSI=13, RST=9, BUSY=8
|
|
#define EPD_CONFIG_ESP32S3_154() { \
|
|
.pins = { \
|
|
.busy = 8, \
|
|
.rst = 9, \
|
|
.dc = 10, \
|
|
.cs = 11, \
|
|
.sck = 12, \
|
|
.mosi = 13, \
|
|
}, \
|
|
.spi = { \
|
|
.host = SPI2_HOST, \
|
|
.speed_hz = 40000000, \
|
|
}, \
|
|
.panel = { \
|
|
.type = EPD_PANEL_GDEY0154D67, \
|
|
.width = 0, \
|
|
.height = 0, \
|
|
.mirror_x = false, \
|
|
.mirror_y = false, \
|
|
.rotation = 0, \
|
|
}, \
|
|
}
|
|
|
|
// 7.3" 6-Color E-Paper configuration (800x480)
|
|
// Adjust pins according to your board
|
|
#define EPD_CONFIG_73_6COLOR() { \
|
|
.pins = { \
|
|
.busy = 13, \
|
|
.rst = 12, \
|
|
.dc = 8, \
|
|
.cs = 9, \
|
|
.sck = 10, \
|
|
.mosi = 11, \
|
|
}, \
|
|
.spi = { \
|
|
.host = SPI2_HOST, \
|
|
.speed_hz = 10000000, \
|
|
}, \
|
|
.panel = { \
|
|
.type = EPD_PANEL_GDEP073E01, \
|
|
.width = 0, \
|
|
.height = 0, \
|
|
.mirror_x = false, \
|
|
.mirror_y = false, \
|
|
.rotation = 0, \
|
|
}, \
|
|
}
|
|
|
|
// Good Display ESP32-WROOM-32D development board
|
|
// Default panel: 2.66" BW (152x296)
|
|
// Pinout: BUSY=13, RST=12, DC=14, CS=27, SCK=18, MOSI=23
|
|
#define EPD_CONFIG_ESP32_WROOM() { \
|
|
.pins = { \
|
|
.busy = 13, \
|
|
.rst = 12, \
|
|
.dc = 14, \
|
|
.cs = 27, \
|
|
.sck = 18, \
|
|
.mosi = 23, \
|
|
}, \
|
|
.spi = { \
|
|
.host = SPI2_HOST, \
|
|
.speed_hz = 10000000, \
|
|
}, \
|
|
.panel = { \
|
|
.type = EPD_PANEL_SSD16XX_266, \
|
|
.width = 0, \
|
|
.height = 0, \
|
|
.mirror_x = false, \
|
|
.mirror_y = false, \
|
|
.rotation = 0, \
|
|
}, \
|
|
}
|
|
|
|
// Good Display ESP32-WROOM-32D + 3.7" 4-Color BWRY (GDEY037F51)
|
|
// 240x416 resolution, no PSRAM required (streaming mode)
|
|
// Pinout: BUSY=13, RST=12, DC=14, CS=27, SCK=18, MOSI=23
|
|
#define EPD_CONFIG_ESP32_WROOM_4COLOR() { \
|
|
.pins = { \
|
|
.busy = 13, \
|
|
.rst = 12, \
|
|
.dc = 14, \
|
|
.cs = 27, \
|
|
.sck = 18, \
|
|
.mosi = 23, \
|
|
}, \
|
|
.spi = { \
|
|
.host = SPI2_HOST, \
|
|
.speed_hz = 10000000, \
|
|
}, \
|
|
.panel = { \
|
|
.type = EPD_PANEL_GDEY037F51, \
|
|
.width = 0, \
|
|
.height = 0, \
|
|
.mirror_x = false, \
|
|
.mirror_y = false, \
|
|
.rotation = 0, \
|
|
}, \
|
|
}
|
|
|
|
#endif // _EPAPER_CONFIG_H_
|