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_mem.h (5516B)
1 /** 2 * @file lv_mem.h 3 * 4 */ 5 6 #ifndef LV_MEM_H 7 #define LV_MEM_H 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 13 /********************* 14 * INCLUDES 15 *********************/ 16 #include "../lv_conf_internal.h" 17 18 #include <stdint.h> 19 #include <stddef.h> 20 #include <string.h> 21 22 #include "lv_types.h" 23 24 /********************* 25 * DEFINES 26 *********************/ 27 28 /********************** 29 * TYPEDEFS 30 **********************/ 31 32 /** 33 * Heap information structure. 34 */ 35 typedef struct { 36 uint32_t total_size; /**< Total heap size*/ 37 uint32_t free_cnt; 38 uint32_t free_size; /**< Size of available memory*/ 39 uint32_t free_biggest_size; 40 uint32_t used_cnt; 41 uint32_t max_used; /**< Max size of Heap memory used*/ 42 uint8_t used_pct; /**< Percentage used*/ 43 uint8_t frag_pct; /**< Amount of fragmentation*/ 44 } lv_mem_monitor_t; 45 46 typedef struct { 47 void * p; 48 uint16_t size; 49 uint8_t used : 1; 50 } lv_mem_buf_t; 51 52 typedef lv_mem_buf_t lv_mem_buf_arr_t[LV_MEM_BUF_MAX_NUM]; 53 54 /********************** 55 * GLOBAL PROTOTYPES 56 **********************/ 57 58 /** 59 * Initialize the dyn_mem module (work memory and other variables) 60 */ 61 void lv_mem_init(void); 62 63 /** 64 * Clean up the memory buffer which frees all the allocated memories. 65 * @note It work only if `LV_MEM_CUSTOM == 0` 66 */ 67 void lv_mem_deinit(void); 68 69 /** 70 * Allocate a memory dynamically 71 * @param size size of the memory to allocate in bytes 72 * @return pointer to the allocated memory 73 */ 74 void * lv_mem_alloc(size_t size); 75 76 /** 77 * Free an allocated data 78 * @param data pointer to an allocated memory 79 */ 80 void lv_mem_free(void * data); 81 82 /** 83 * Reallocate a memory with a new size. The old content will be kept. 84 * @param data pointer to an allocated memory. 85 * Its content will be copied to the new memory block and freed 86 * @param new_size the desired new size in byte 87 * @return pointer to the new memory, NULL on failure 88 */ 89 void * lv_mem_realloc(void * data_p, size_t new_size); 90 91 /** 92 * 93 * @return 94 */ 95 lv_res_t lv_mem_test(void); 96 97 /** 98 * Give information about the work memory of dynamic allocation 99 * @param mon_p pointer to a lv_mem_monitor_t variable, 100 * the result of the analysis will be stored here 101 */ 102 void lv_mem_monitor(lv_mem_monitor_t * mon_p); 103 104 105 /** 106 * Get a temporal buffer with the given size. 107 * @param size the required size 108 */ 109 void * lv_mem_buf_get(uint32_t size); 110 111 /** 112 * Release a memory buffer 113 * @param p buffer to release 114 */ 115 void lv_mem_buf_release(void * p); 116 117 /** 118 * Free all memory buffers 119 */ 120 void lv_mem_buf_free_all(void); 121 122 //! @cond Doxygen_Suppress 123 124 #if LV_MEMCPY_MEMSET_STD 125 126 /** 127 * Wrapper for the standard memcpy 128 * @param dst pointer to the destination buffer 129 * @param src pointer to the source buffer 130 * @param len number of byte to copy 131 */ 132 static inline void * lv_memcpy(void * dst, const void * src, size_t len) 133 { 134 return memcpy(dst, src, len); 135 } 136 137 /** 138 * Wrapper for the standard memcpy 139 * @param dst pointer to the destination buffer 140 * @param src pointer to the source buffer 141 * @param len number of byte to copy 142 */ 143 static inline void * lv_memcpy_small(void * dst, const void * src, size_t len) 144 { 145 return memcpy(dst, src, len); 146 } 147 148 /** 149 * Wrapper for the standard memset 150 * @param dst pointer to the destination buffer 151 * @param v value to set [0..255] 152 * @param len number of byte to set 153 */ 154 static inline void lv_memset(void * dst, uint8_t v, size_t len) 155 { 156 memset(dst, v, len); 157 } 158 159 /** 160 * Wrapper for the standard memset with fixed 0x00 value 161 * @param dst pointer to the destination buffer 162 * @param len number of byte to set 163 */ 164 static inline void lv_memset_00(void * dst, size_t len) 165 { 166 memset(dst, 0x00, len); 167 } 168 169 /** 170 * Wrapper for the standard memset with fixed 0xFF value 171 * @param dst pointer to the destination buffer 172 * @param len number of byte to set 173 */ 174 static inline void lv_memset_ff(void * dst, size_t len) 175 { 176 memset(dst, 0xFF, len); 177 } 178 179 #else 180 /** 181 * Same as `memcpy` but optimized for 4 byte operation. 182 * @param dst pointer to the destination buffer 183 * @param src pointer to the source buffer 184 * @param len number of byte to copy 185 */ 186 LV_ATTRIBUTE_FAST_MEM void * lv_memcpy(void * dst, const void * src, size_t len); 187 188 /** 189 * Same as `memcpy` but optimized to copy only a few bytes. 190 * @param dst pointer to the destination buffer 191 * @param src pointer to the source buffer 192 * @param len number of byte to copy 193 */ 194 LV_ATTRIBUTE_FAST_MEM static inline void * lv_memcpy_small(void * dst, const void * src, size_t len) 195 { 196 uint8_t * d8 = (uint8_t *)dst; 197 const uint8_t * s8 = (const uint8_t *)src; 198 199 while(len) { 200 *d8 = *s8; 201 d8++; 202 s8++; 203 len--; 204 } 205 206 return dst; 207 } 208 209 /** 210 * Same as `memset` but optimized for 4 byte operation. 211 * @param dst pointer to the destination buffer 212 * @param v value to set [0..255] 213 * @param len number of byte to set 214 */ 215 LV_ATTRIBUTE_FAST_MEM void lv_memset(void * dst, uint8_t v, size_t len); 216 217 /** 218 * Same as `memset(dst, 0x00, len)` but optimized for 4 byte operation. 219 * @param dst pointer to the destination buffer 220 * @param len number of byte to set 221 */ 222 LV_ATTRIBUTE_FAST_MEM void lv_memset_00(void * dst, size_t len); 223 224 /** 225 * Same as `memset(dst, 0xFF, len)` but optimized for 4 byte operation. 226 * @param dst pointer to the destination buffer 227 * @param len number of byte to set 228 */ 229 LV_ATTRIBUTE_FAST_MEM void lv_memset_ff(void * dst, size_t len); 230 231 //! @endcond 232 233 #endif 234 235 /********************** 236 * MACROS 237 **********************/ 238 239 #ifdef __cplusplus 240 } /*extern "C"*/ 241 #endif 242 243 #endif /*LV_MEM_H*/