|
|
// Copyright 2020 Espressif Systems (Shanghai) Co. Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef _IOT_SCREEN_DRIVER_H_
#define _IOT_SCREEN_DRIVER_H_
#include "scr_interface_driver.h"
#ifdef __cplusplus
extern "C" { #endif
/**
* @brief Define all screen direction * */ typedef enum { /* @---> X
| Y */ SCR_DIR_LRTB, /**< From left to right then from top to bottom, this consider as the original direction of the screen */
/* Y
| @---> X */ SCR_DIR_LRBT, /**< From left to right then from bottom to top */
/* X <---@
| Y */ SCR_DIR_RLTB, /**< From right to left then from top to bottom */
/* Y
| X <---@ */ SCR_DIR_RLBT, /**< From right to left then from bottom to top */
/* @---> Y
| X */ SCR_DIR_TBLR, /**< From top to bottom then from left to right */
/* X
| @---> Y */ SCR_DIR_BTLR, /**< From bottom to top then from left to right */
/* Y <---@
| X */ SCR_DIR_TBRL, /**< From top to bottom then from right to left */
/* X
| Y <---@ */ SCR_DIR_BTRL, /**< From bottom to top then from right to left */
SCR_DIR_MAX,
/* Another way to represent rotation with 3 bit*/ SCR_MIRROR_X = 0x40, /**< Mirror X-axis */ SCR_MIRROR_Y = 0x20, /**< Mirror Y-axis */ SCR_SWAP_XY = 0x80, /**< Swap XY axis */ } scr_dir_t;
/**
* @brief The types of colors that can be displayed on the screen * */ typedef enum { SCR_COLOR_TYPE_MONO, /**< The screen is monochrome */ SCR_COLOR_TYPE_GRAY, /**< The screen is gray */ SCR_COLOR_TYPE_RGB565, /**< The screen is colorful */ } scr_color_type_t;
/**
* @brief All supported screen controllers * */ typedef enum { /* color screen */ SCREEN_CONTROLLER_ILI9341, SCREEN_CONTROLLER_ILI9806, SCREEN_CONTROLLER_ILI9486, SCREEN_CONTROLLER_ILI9488, SCREEN_CONTROLLER_NT35510, SCREEN_CONTROLLER_RM68120, SCREEN_CONTROLLER_ST7789, SCREEN_CONTROLLER_ST7796, SCREEN_CONTROLLER_SSD1351, SCREEN_CONTROLLER_SSD1963,
/* monochrome screen */ SCREEN_CONTROLLER_SSD1306, SCREEN_CONTROLLER_SSD1307, SCREEN_CONTROLLER_SSD1322,
} scr_controller_t;
/**
* @brief configuration of screen controller * */ typedef struct { scr_interface_driver_t *interface_drv; /*!< Interface driver for screen */ int8_t pin_num_rst; /*!< Pin to hardreset LCD*/ int8_t pin_num_bckl; /*!< Pin for control backlight */ uint8_t rst_active_level; /*!< Reset pin active level */ uint8_t bckl_active_level; /*!< Backlight active level */ uint16_t width; /*!< Screen width */ uint16_t height; /*!< Screen height */ uint16_t offset_hor; /*!< Offset of horizontal */ uint16_t offset_ver; /*!< Offset of vertical */ scr_dir_t rotate; /*!< Screen rotate direction */ } scr_controller_config_t;
/**
* @brief Information of screen * */ typedef struct { uint16_t width; /*!< Current screen width, it may change when apply to rotate */ uint16_t height; /*!< Current screen height, it may change when apply to rotate */ scr_dir_t dir; /*!< Current screen direction */ scr_color_type_t color_type; /*!< Color type of the screen, See scr_color_type_t struct */ uint8_t bpp; /*!< Bits per pixel */ const char *name; /*!< Name of the screen */ } scr_info_t;
/**
* @brief Define a screen common function * */ typedef struct { /**
* @brief Initialize screen * * @param lcd_conf Pointer to a structure with lcd config arguments. see struct scr_controller_config_t * * @return * - ESP_OK on success * - ESP_FAIL Driver not installed */ esp_err_t (*init)(const scr_controller_config_t *lcd_conf);
/**
* @brief Deinitialize screen * * @return * - ESP_OK on success * - ESP_FAIL Deinitialize failed * - ESP_ERR_NOT_SUPPORTED unsupported */ esp_err_t (*deinit)(void);
/**
* @brief Set screen direction of rotation * * @param dir Pointer to a scr_dir_t structure. * You can set the direction in two ways, for example, set it to "SCR_DIR_LRBT" or "SCR_MIRROR_Y", They are the same, depending on which expression you want to use * * @note Not all screens support eight directions, it depends on the screen controller. * * @return * - ESP_OK on success * - ESP_FAIL Failed */ esp_err_t (*set_direction)(scr_dir_t dir);
/**
* @brief Set screen window * * @param x0 Starting point in X direction * @param y0 Starting point in Y direction * @param x1 End point in X direction * @param y1 End point in Y direction * * @note When the BPP of the screen controller is less than 8, the coordinate value is limited to a multiple of some number * * @return * - ESP_OK on success * - ESP_FAIL Failed */ esp_err_t (*set_window)(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1);
/**
* @brief Write a RAM data * * @param color New color of a pixel * * @return * - ESP_OK on success * - ESP_FAIL Failed */ esp_err_t (*write_ram_data)(uint16_t color);
/**
* @brief Draw one pixel in screen with color * * @param x X co-ordinate of set orientation * @param y Y co-ordinate of set orientation * @param color New color of the pixel * * @return * - ESP_OK on success * - ESP_FAIL Failed */ esp_err_t (*draw_pixel)(uint16_t x, uint16_t y, uint16_t color);
/**
* @brief Fill the pixels on LCD screen with bitmap * * @param x Starting point in X direction * @param y Starting point in Y direction * @param w width of image in bitmap array * @param h height of image in bitmap array * @param bitmap pointer to bitmap array * * @return * - ESP_OK on success * - ESP_FAIL Failed */ esp_err_t (*draw_bitmap)(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t *bitmap);
/**
* @brief Get screen information * * @param info Pointer to a scr_info_t structure. * * @return * - ESP_OK on success * - ESP_FAIL Failed */ esp_err_t (*get_info)(scr_info_t *info); } scr_driver_t;
/**
* @brief Find a screen driver * * @param controller Screen controller to initialize * @param out_screen Pointer to a screen driver * * @return * - ESP_OK on success * - ESP_ERR_INVALID_ARG Arguments is NULL. * - ESP_ERR_NOT_FOUND Screen controller was not found. */ esp_err_t scr_find_driver(scr_controller_t controller, scr_driver_t *out_screen);
#ifdef __cplusplus
} #endif
#endif
|