1 /** 2 * @file lv_draw_dma2d_private.h 3 * 4 */ 5 6 #ifndef LV_DRAW_DMA2D_PRIVATE_H 7 #define LV_DRAW_DMA2D_PRIVATE_H 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 13 /********************* 14 * INCLUDES 15 *********************/ 16 17 #include "lv_draw_dma2d.h" 18 #if LV_USE_DRAW_DMA2D 19 20 #include "../lv_draw_private.h" 21 #include "../sw/lv_draw_sw.h" 22 #include LV_DRAW_DMA2D_HAL_INCLUDE 23 24 /********************* 25 * DEFINES 26 *********************/ 27 28 #if LV_USE_DRAW_DMA2D_INTERRUPT && LV_USE_OS 29 #define LV_DRAW_DMA2D_ASYNC 1 30 #else 31 #define LV_DRAW_DMA2D_ASYNC 0 32 #endif 33 34 #if defined(__CORTEX_M) && (__CORTEX_M == 7) 35 #define LV_DRAW_DMA2D_CACHE 1 36 #else 37 #define LV_DRAW_DMA2D_CACHE 0 38 #endif 39 40 /********************** 41 * TYPEDEFS 42 **********************/ 43 44 typedef enum { 45 LV_DRAW_DMA2D_OUTPUT_CF_ARGB8888 = 0, 46 LV_DRAW_DMA2D_OUTPUT_CF_RGB888, 47 LV_DRAW_DMA2D_OUTPUT_CF_RGB565, 48 LV_DRAW_DMA2D_OUTPUT_CF_ARGB1555, 49 LV_DRAW_DMA2D_OUTPUT_CF_ARGB4444 50 } lv_draw_dma2d_output_cf_t; 51 52 typedef enum { 53 LV_DRAW_DMA2D_FGBG_CF_ARGB8888 = 0, 54 LV_DRAW_DMA2D_FGBG_CF_RGB888, 55 LV_DRAW_DMA2D_FGBG_CF_RGB565, 56 LV_DRAW_DMA2D_FGBG_CF_ARGB1555, 57 LV_DRAW_DMA2D_FGBG_CF_ARGB4444, 58 LV_DRAW_DMA2D_FGBG_CF_L8, 59 LV_DRAW_DMA2D_FGBG_CF_AL44, 60 LV_DRAW_DMA2D_FGBG_CF_AL88, 61 LV_DRAW_DMA2D_FGBG_CF_L4, 62 LV_DRAW_DMA2D_FGBG_CF_A8, 63 LV_DRAW_DMA2D_FGBG_CF_A4, 64 LV_DRAW_DMA2D_FGBG_CF_YCBCR 65 } lv_draw_dma2d_fgbg_cf_t; 66 67 typedef enum { 68 LV_DRAW_DMA2D_MODE_MEMORY_TO_MEMORY = 0, 69 LV_DRAW_DMA2D_MODE_MEMORY_TO_MEMORY_WITH_PFC, 70 LV_DRAW_DMA2D_MODE_MEMORY_TO_MEMORY_WITH_BLENDING, 71 LV_DRAW_DMA2D_MODE_REGISTER_TO_MEMORY, 72 LV_DRAW_DMA2D_MODE_MEMORY_TO_MEMORY_WITH_BLENDING_AND_FIXED_COLOR_FG, 73 LV_DRAW_DMA2D_MODE_MEMORY_TO_MEMORY_WITH_BLENDING_AND_FIXED_COLOR_BG 74 } lv_draw_dma2d_mode_t; 75 76 typedef enum { 77 LV_DRAW_DMA2D_ALPHA_MODE_NO_MODIFY_IMAGE_ALPHA_CHANNEL = 0, 78 LV_DRAW_DMA2D_ALPHA_MODE_REPLACE_ALPHA_CHANNEL, 79 LV_DRAW_DMA2D_ALPHA_MODE_MULTIPLY_IMAGE_ALPHA_CHANNEL 80 } lv_draw_dma2d_alpha_mode_t; 81 82 typedef struct { 83 lv_draw_dma2d_mode_t mode; 84 uint32_t w; 85 uint32_t h; 86 87 void * output_address; 88 uint32_t output_offset; 89 lv_draw_dma2d_output_cf_t output_cf; 90 91 uint32_t reg_to_mem_mode_color; 92 93 const void * fg_address; 94 uint32_t fg_offset; 95 lv_draw_dma2d_fgbg_cf_t fg_cf; 96 uint32_t fg_color; 97 uint32_t fg_alpha_mode; 98 uint32_t fg_alpha; 99 100 const void * bg_address; 101 uint32_t bg_offset; 102 lv_draw_dma2d_fgbg_cf_t bg_cf; 103 uint32_t bg_color; 104 uint32_t bg_alpha_mode; 105 uint32_t bg_alpha; 106 107 } lv_draw_dma2d_configuration_t; 108 109 typedef struct { 110 const void * first_byte; 111 uint32_t width_bytes; 112 uint32_t height; 113 uint32_t stride; 114 } lv_draw_dma2d_cache_area_t; 115 116 typedef struct { 117 lv_draw_unit_t base_unit; 118 lv_draw_task_t * volatile task_act; 119 #if LV_DRAW_DMA2D_CACHE 120 lv_draw_dma2d_cache_area_t writing_area; 121 #endif 122 #if LV_DRAW_DMA2D_ASYNC 123 lv_thread_t thread; 124 lv_thread_sync_t interrupt_signal; 125 #endif 126 } lv_draw_dma2d_unit_t; 127 128 /********************** 129 * GLOBAL PROTOTYPES 130 **********************/ 131 132 void lv_draw_dma2d_opaque_fill(lv_draw_dma2d_unit_t * u, void * first_pixel, int32_t w, int32_t h, int32_t stride); 133 void lv_draw_dma2d_fill(lv_draw_dma2d_unit_t * u, void * first_pixel, int32_t w, int32_t h, int32_t stride); 134 void lv_draw_dma2d_opaque_image(lv_draw_dma2d_unit_t * u, void * dest_first_pixel, lv_area_t * clipped_coords, 135 int32_t dest_stride); 136 void lv_draw_dma2d_image(lv_draw_dma2d_unit_t * u, void * dest_first_pixel, lv_area_t * clipped_coords, 137 int32_t dest_stride); 138 lv_draw_dma2d_output_cf_t lv_draw_dma2d_cf_to_dma2d_output_cf(lv_color_format_t cf); 139 uint32_t lv_draw_dma2d_color_to_dma2d_color(lv_draw_dma2d_output_cf_t cf, lv_color_t color); 140 void lv_draw_dma2d_configure_and_start_transfer(const lv_draw_dma2d_configuration_t * conf); 141 #if LV_DRAW_DMA2D_CACHE 142 void lv_draw_dma2d_invalidate_cache(const lv_draw_dma2d_cache_area_t * mem_area); 143 void lv_draw_dma2d_clean_cache(const lv_draw_dma2d_cache_area_t * mem_area); 144 #endif 145 146 /********************** 147 * MACROS 148 **********************/ 149 150 #endif /*LV_USE_DRAW_DMA2D*/ 151 152 #ifdef __cplusplus 153 } /*extern "C"*/ 154 #endif 155 156 #endif /*LV_DRAW_DMA2D_PRIVATE_H*/ 157