acid-drop

- Hacking the planet from a LilyGo T-Deck using custom firmware
git clone git://git.acid.vegas/acid-drop.git
Log | Files | Refs | Archive | README | LICENSE

lv_gpu_nxp_pxp.h (6062B)

      1 /**
      2  * @file lv_gpu_nxp_pxp.h
      3  *
      4  */
      5 
      6 /**
      7  * MIT License
      8  *
      9  * Copyright (c) 2020 NXP
     10  *
     11  * Permission is hereby granted, free of charge, to any person obtaining a copy
     12  * of this software and associated documentation files (the "Software"), to deal
     13  * in the Software without restriction, including without limitation the rights to
     14  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
     15  * the Software, and to permit persons to whom the Software is furnished to do so,
     16  * subject to the following conditions:
     17  *
     18  * The above copyright notice and this permission notice (including the next paragraph)
     19  * shall be included in all copies or substantial portions of the Software.
     20  *
     21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
     22  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
     23  * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
     24  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
     25  * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
     26  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     27  *
     28  */
     29 
     30 #ifndef LV_SRC_LV_GPU_LV_GPU_NXP_PXP_H_
     31 #define LV_SRC_LV_GPU_LV_GPU_NXP_PXP_H_
     32 
     33 #ifdef __cplusplus
     34 extern "C" {
     35 #endif
     36 
     37 /*********************
     38  *      INCLUDES
     39  *********************/
     40 
     41 #include "../../lv_conf_internal.h"
     42 
     43 #if LV_USE_GPU_NXP_PXP
     44 
     45 #include "../misc/lv_area.h"
     46 #include "../misc/lv_color.h"
     47 
     48 /*********************
     49  *      DEFINES
     50  *********************/
     51 
     52 /** PXP module instance to use*/
     53 #define LV_GPU_NXP_PXP_ID PXP
     54 
     55 /** PXP interrupt line I*/
     56 #define LV_GPU_NXP_PXP_IRQ_ID PXP_IRQn
     57 
     58 #ifndef LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT
     59 /** Minimum area (in pixels) for image copy with 100% opacity to be handled by PXP*/
     60 #define LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT 32
     61 #endif
     62 
     63 #ifndef LV_GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT
     64 /** Minimum area (in pixels) for image copy with transparency to be handled by PXP*/
     65 #define LV_GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT 16
     66 #endif
     67 
     68 #ifndef LV_GPU_NXP_PXP_BUFF_SYNC_BLIT_SIZE_LIMIT
     69 /** Minimum invalidated area (in pixels) to be synchronized by PXP during buffer sync */
     70 #define LV_GPU_NXP_PXP_BUFF_SYNC_BLIT_SIZE_LIMIT 32
     71 #endif
     72 
     73 #ifndef LV_GPU_NXP_PXP_FILL_SIZE_LIMIT
     74 /** Minimum area (in pixels) to be filled by PXP with 100% opacity*/
     75 #define LV_GPU_NXP_PXP_FILL_SIZE_LIMIT 64
     76 #endif
     77 
     78 #ifndef LV_GPU_NXP_PXP_FILL_OPA_SIZE_LIMIT
     79 /** Minimum area (in pixels) to be filled by PXP with transparency*/
     80 #define LV_GPU_NXP_PXP_FILL_OPA_SIZE_LIMIT 32
     81 #endif
     82 
     83 /**********************
     84  *      TYPEDEFS
     85  **********************/
     86 /**
     87  * NXP PXP device configuration - call-backs used for
     88  * interrupt init/wait/deinit.
     89  */
     90 typedef struct {
     91     /** Callback for PXP interrupt initialization*/
     92     lv_res_t (*pxp_interrupt_init)(void);
     93 
     94     /** Callback for PXP interrupt de-initialization*/
     95     void (*pxp_interrupt_deinit)(void);
     96 
     97     /** Callback that should start PXP and wait for operation complete*/
     98     void (*pxp_run)(void);
     99 } lv_nxp_pxp_cfg_t;
    100 
    101 /**********************
    102  *  STATIC VARIABLES
    103  **********************/
    104 
    105 /**********************
    106  *      MACROS
    107  **********************/
    108 
    109 /**********************
    110  *   GLOBAL FUNCTIONS
    111  **********************/
    112 
    113 /**
    114  * Reset and initialize PXP device. This function should be called as a part
    115  * of display init sequence.
    116  *
    117  * @return LV_RES_OK: PXP init ok; LV_RES_INV: init error. See error log for more information.
    118  */
    119 lv_res_t lv_gpu_nxp_pxp_init(lv_nxp_pxp_cfg_t * cfg);
    120 
    121 /**
    122  * Disable PXP device. Should be called during display deinit sequence.
    123  */
    124 void lv_gpu_nxp_pxp_deinit(void);
    125 
    126 /**
    127  * Fill area, with optional opacity.
    128  *
    129  * @param[in/out] dest_buf destination buffer
    130  * @param[in] dest_width width (stride) of destination buffer in pixels
    131  * @param[in] fill_area area to fill
    132  * @param[in] color color
    133  * @param[in] opa transparency of the color
    134  */
    135 void lv_gpu_nxp_pxp_fill(lv_color_t * dest_buf, lv_coord_t dest_width, const lv_area_t * fill_area, lv_color_t color,
    136                          lv_opa_t opa);
    137 
    138 /**
    139  * @brief BLock Image Transfer - copy rectangular image from src buffer to dst buffer with effects.
    140  *
    141  * By default, image is copied directly, with optional opacity configured by \p opa.
    142  * Color keying can be enabled by calling lv_gpu_nxp_pxp_enable_color_key() before calling this function.
    143  * Recoloring can be enabled by calling lv_gpu_nxp_pxp_enable_recolor() before calling this function.
    144  * Note that color keying and recoloring at the same time is not supported and black rectangle is rendered.
    145  *
    146  * @param[in/out] dest destination buffer
    147  * @param[in] dest_width width (stride) of destination buffer in pixels
    148  * @param[in] src source buffer
    149  * @param[in] src_with width (stride) of source buffer in pixels
    150  * @param[in] copy_w width of area to be copied from src to dest
    151  * @param[in] copy_h height of area to be copied from src to dest
    152  * @param[in] opa opacity of the result
    153  */
    154 void lv_gpu_nxp_pxp_blit(lv_color_t * dest, lv_coord_t dest_width, const lv_color_t * src, lv_coord_t src_width,
    155                          lv_coord_t copy_width, lv_coord_t copy_height, lv_opa_t opa);
    156 
    157 /**
    158  * @brief Enable color keying for subsequent calls to lv_gpu_nxp_pxp_blit()
    159  *
    160  * Color key is defined by LV_COLOR_TRANSP symbol in lv_conf.h
    161  */
    162 void lv_gpu_nxp_pxp_enable_color_key(void);
    163 
    164 /**
    165  * @brief Disable color keying for subsequent calls to lv_gpu_nxp_pxp_blit()
    166  *
    167  */
    168 void lv_gpu_nxp_pxp_disable_color_key(void);
    169 
    170 /**
    171  * @brief Enable recolor feature for subsequent calls to lv_gpu_nxp_pxp_blit()
    172  *
    173  * @param[in] color recolor value
    174  * @param[in] opa effect opacity
    175  */
    176 void lv_gpu_nxp_pxp_enable_recolor(lv_color_t color, lv_opa_t opa);
    177 
    178 /**
    179  * @brief Disable recolor feature for subsequent calls to lv_gpu_nxp_pxp_blit()
    180  */
    181 void lv_gpu_nxp_pxp_disable_recolor(void);
    182 
    183 /**********************
    184  *   STATIC FUNCTIONS
    185  **********************/
    186 
    187 #endif /*LV_USE_GPU_NXP_PXP*/
    188 
    189 #ifdef __cplusplus
    190 } /*extern "C"*/
    191 #endif
    192 
    193 #endif /*LV_SRC_LV_GPU_LV_GPU_NXP_PXP_H_*/