Tasmota/lib/libesp32_eink/epdiy/src/epd_board.h
Theo Arends 2deb34e856 Update epdiy library
- ESP32 Platform from 2025.07.31 to 2025.08.30, Framework (Arduino Core) from v3.1.3.250712 to v3.1.3.250808 and IDF from v5.3.3.250707 to v5.3.3.250801 (#23778)
- Epdiy library from v1.0.0 to v2.0.0
2025-08-12 16:15:58 +02:00

134 lines
3.1 KiB
C

/**
* @file "epd_board.h"
* @brief Board-definitions provided by epdiy.
*/
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include <esp_err.h>
#include <xtensa/core-macros.h>
/**
* State of display control pins.
*/
typedef struct {
bool ep_latch_enable : 1;
bool ep_output_enable : 1;
bool ep_sth : 1;
bool ep_mode : 1;
bool ep_stv : 1;
} epd_ctrl_state_t;
/**
* Operations available on an epdiy board.
*/
typedef struct {
/**
* Initialize the board.
*/
void (*init)(uint32_t epd_row_width);
/**
* Clean up resources and peripherals used by the board.
*/
void (*deinit)(void);
/**
* Set display line state
*/
void (*set_ctrl)(epd_ctrl_state_t*, const epd_ctrl_state_t* const);
/**
* Enable power to the display.
*/
void (*poweron)(epd_ctrl_state_t*);
/**
* Measure VCOM kick-back. Only in v6 & v7 boards!
*/
void (*measure_vcom)(epd_ctrl_state_t* state);
/**
* Disable power to the display.
*/
void (*poweroff)(epd_ctrl_state_t*);
/**
* Set the display common voltage if supported.
*
* Voltage is set as absolute value in millivolts.
* Although VCOM is negative, this function takes a positive (absolute) value.
*/
void (*set_vcom)(int);
/**
* Get the current temperature if supported by the board.
*/
float (*get_temperature)(void);
/**
* Set GPIO direction of the broken-out GPIO extender port,
* if available.
* Setting `make_input` to `1` corresponds to input, `0` corresponds to output.
*/
esp_err_t (*gpio_set_direction)(int pin, bool make_input);
/**
* Get the input level of a GPIO extender pin, if available.
*/
bool (*gpio_read)(int pin);
/**
* Set the output level of a GPIO extender, if available.
*/
esp_err_t (*gpio_write)(int pin, bool value);
} EpdBoardDefinition;
/**
* Get the current board.
*/
const EpdBoardDefinition* epd_current_board();
/**
* Set the board hardware definition. This must be called before epd_init()
*
* The implementation of this method is in board/epd_board.c.
**/
void epd_set_board(const EpdBoardDefinition* board);
/**
* Get the board's current control register state.
*/
epd_ctrl_state_t* epd_ctrl_state();
/**
* Set the display mode pin.
*/
void epd_set_mode(bool state);
/**
* Initialize the control register
*/
void epd_control_reg_init();
/**
* Put the control register into the state of lowest power consumption.
*/
void epd_control_reg_deinit();
// Built in board definitions
extern const EpdBoardDefinition epd_board_lilygo_t5_47;
extern const EpdBoardDefinition epd_board_lilygo_t5_47_touch;
extern const EpdBoardDefinition lilygo_board_s3;
extern const EpdBoardDefinition epd_board_v2_v3;
extern const EpdBoardDefinition epd_board_v4;
extern const EpdBoardDefinition epd_board_v5;
extern const EpdBoardDefinition epd_board_v6;
extern const EpdBoardDefinition epd_board_v7;
extern const EpdBoardDefinition epd_board_v7_raw;
/**
* Helper for short, precise delays.
*/
void epd_busy_delay(uint32_t cycles);