#ifndef _DISPLAY_H_
#define _DISPLAY_H_
#include "lvgl.h"
#include "esp_lcd_panel_io.h"
#include "esp_lcd_panel_vendor.h"
#include "esp_lcd_panel_ops.h"
#include "driver/gpio.h"
#include "driver/i2c.h"
// #include "esp_lcd_touch_cst816s.h"
//CST816 defines
#define EXAMPLE_I2C_SCL 17
#define EXAMPLE_I2C_SDA 18
#define PIN_TOUCH_RES 21
#define EXAMPLE_I2C_NUM 0 // I2C number
#define EXAMPLE_LCD_PIXEL_CLOCK_HZ (20 * 1000 * 1000)
#define EXAMPLE_LCD_BK_LIGHT_ON_LEVEL 1
#define EXAMPLE_LCD_BK_LIGHT_OFF_LEVEL !EXAMPLE_LCD_BK_LIGHT_ON_LEVEL
#define EXAMPLE_PIN_NUM_DATA0 39 // 6
#define EXAMPLE_PIN_NUM_DATA1 40 // 7
#define EXAMPLE_PIN_NUM_DATA2 41 // 8
#define EXAMPLE_PIN_NUM_DATA3 42 // 9
#define EXAMPLE_PIN_NUM_DATA4 45 // 10
#define EXAMPLE_PIN_NUM_DATA5 46 // 11
#define EXAMPLE_PIN_NUM_DATA6 47 // 12
#define EXAMPLE_PIN_NUM_DATA7 48 // 13
#define EXAMPLE_PIN_NUM_PCLK 8 // 5
#define EXAMPLE_PIN_NUM_CS 6 // 3
#define EXAMPLE_PIN_NUM_DC 7 // 4
#define EXAMPLE_PIN_NUM_RST 5 // 2
#define EXAMPLE_PIN_NUM_BK_LIGHT 38 // 1
#define EXAMPLE_PIN_NUM_POWER 15
#define PIN_LCD_RD 9
// The pixel number in horizontal and vertical
#define EXAMPLE_LCD_H_RES 320
#define EXAMPLE_LCD_V_RES 170
#define LVGL_LCD_BUF_SIZE (EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES)
// Bit number used to represent command and parameter
#define EXAMPLE_LCD_CMD_BITS 8
#define EXAMPLE_LCD_PARAM_BITS 8
#define EXAMPLE_LVGL_TICK_PERIOD_MS 2
// Supported alignment: 16, 32, 64. A higher alignment can enables higher burst transfer size, thus a higher i80 bus throughput.
#define EXAMPLE_PSRAM_DATA_ALIGNMENT 32
//Change this to 0 if you do not wish to use Touch.
#define USE_TOUCH_DISPLAY 0
void display_meter();
void display_window();
void display_image();
void display_slider();
void display_red_square();
void display_dropdown();
void get_img_color();
void bsp_display_unlock(void);
bool bsp_display_lock(uint32_t timeout_ms);
void display_init(void);
void display_process(void);
#endif