#ifndef TFT_H
#define TFT_H
#ifdef __cplusplus
extern "C" {
#endif
#include "stdint.h"

#define REFRESH_CALL_ENABLE 1 //使用DMA或者整体刷新函数
#define HZK_FONT              //使用HZK 12/16 字体 tools下可自由生成
#define UTF8_TO_UNICODE       //启用UTF8转换显示
//#define LVGL_FONT           //启用LVGL字体

typedef struct TFT_Dev TFT_T;

/**
 * @brief   TFT命令处理函数指针类型
 * @param   data: [输入] 数据指针
 * @param   len: [输入] 数据长度
 * @return  uint8_t 返回值
 */
typedef uint8_t (*TFT_CMD_t)(uint8_t *data, size_t len);

/**
 * @brief   TFT数据处理函数指针类型
 * @param   data: [输入] 数据指针
 * @param   len: [输入] 数据长度
 * @return  uint8_t 返回值
 */
typedef uint8_t (*TFT_DATA_t)(uint8_t *data, size_t len);

/**
 * @brief   TFT背光控制函数指针类型
 * @param   data: [输入] 数据指针
 * @return  uint8_t 返回值
 */
typedef uint8_t (*TFT_BLACKLIGHT_t)(uint8_t data);

#if REFRESH_CALL_ENABLE

 /**
  * @brief   TFT 刷新函数指针类型
  */
 typedef void (*TFT_REFRESH_t)(TFT_T *dev);

#endif

/**
* @brief   TFT状态枚举
*/
typedef enum {
    IDLE, /**< 空闲状态 */
    WRITE, /**< 写入状态 */
    REFRESH, /**< 刷新状态 */
} TFT_STATE_T;

/**
 * @brief   TFT设备结构体
 */
struct TFT_Dev {
    uint8_t dir; /**< 显示方向 */
    uint8_t width; /**< 显示宽度 */
    uint8_t height; /**< 显示高度 */
    TFT_STATE_T state; /**< TFT状态 */
    TFT_CMD_t cmd; /**< TFT命令处理函数指针 */
    TFT_DATA_t data; /**< TFT数据处理函数指针 */
    TFT_BLACKLIGHT_t blacklight; /**< TFT背光控制函数指针 */
#if REFRESH_CALL_ENABLE
    TFT_REFRESH_t call;    /**< TFT刷新函数指针 */
#endif
};


#ifdef __cplusplus
}
#endif
#endif //TFT_H