This commit is contained in:
huxi
2025-12-03 11:12:34 +08:00
parent c23ae4f24c
commit bc195654bf
8163 changed files with 3799544 additions and 92 deletions
@@ -0,0 +1,146 @@
#ifndef __BUFFER_MANAGER_H__
#define __BUFFER_MANAGER_H__
// 缓存buf的状态定义
typedef enum buffer_status_def {
BUFFER_STATUS_INIT, // 初始
BUFFER_STATUS_IDLE, // 空闲
BUFFER_STATUS_LOCK, // 锁定
BUFFER_STATUS_PEND, // 等待
BUFFER_STATUS_USED, // 使用
} BUFFER_STATUS;
// buffer管理原生API,不建议直接调用原生API,
// 防止后续库升级导致调用方法改变,使用时请调用重封装的快捷调用
int buffer_manager_set_default_handler(void *buffer_hdl);
void buffer_manager_set_memory_callback(void *(*malloc)(int size, u32 ram_type, u32 module_type), void (*free)(void *p, u32 ram_type, u32 module_type));
void *buffer_manager_init_handler(u32 buf_list[], int buf_num);
void buffer_manager_free_handler(void *buffer_hdl);
int buffer_manager_set_buf_status(void *buffer_hdl, void *buf, int status);
int buffer_manager_get_buf_status(void *buffer_hdl, void *buf);
void *buffer_manager_get_buf_by_status(void *buffer_hdl, int status);
void *buffer_manager_change_buf_status(void *buffer_hdl, int target, int result);
void *buffer_manager_status_dump(void *buffer_hdl);
/* buffer管理API快捷调用 */
// 注册buffer管理模块的回调
#define buffer_manager_callback(malloc, free) \
buffer_manager_set_memory_callback(malloc, free)
// 初始化buffer管理,创建buffer管理句柄
#define buffer_manager_init(hdl, buf, size, block_num) \
{ \
int BM_i = 0; \
int BM_buf_size = (size) / (block_num); \
u32 BM_buf_list[3] = {0}; \
for (BM_i = 0; BM_i < (block_num); BM_i++) { \
BM_buf_list[BM_i] = (u32)((buf) + (BM_buf_size * BM_i)); \
} \
(hdl) = buffer_manager_init_handler(BM_buf_list, (block_num)); \
}
// 释放buffer管理资源和句柄
#define buffer_manager_free(buffer_handler) \
buffer_manager_free_handler(buffer_handler)
// 设置指定buffer的状态
#define set_buffer_status(buffer_handler, buf_addr, status) \
buffer_manager_set_buf_status(buffer_handler, buf_addr, status)
// 获取指定buffer的状态
#define get_buffer_status(buffer_handler, buf_addr) \
buffer_manager_get_buf_status(buffer_handler, buf_addr)
// 获取指定状态的buffer
#define get_buffer_by_status(buffer_handler, status) \
buffer_manager_get_buf_by_status(buffer_handler, status)
// 获取目标状态的buffer,并修改为结果状态
#define change_buffer_status(buffer_handler, target, result) \
buffer_manager_change_buf_status(buffer_handler, target, result)
// 设置默认句柄,可以设置一个默认句柄,该句柄将作为buffer管理的静态变量,外部无需每次操作都传入该句柄
// 需要注意的时,buffer_manager_free时,可以传入NULL来释放默认句柄,但大buffer还需外面主动释放
// 即:buffer管理只做状态管理,和自身资源的申请、释放,不管被管理的buffer申请和释放
#define set_default_buffer_handler(buffer_handler) \
buffer_manager_set_default_handler(buffer_handler)
/* 快捷获取指定状态的buffer */
// 获取空闲状态的buffer
#define get_idle_buffer(buffer_handler) \
get_buffer_by_status(buffer_handler, BUFFER_STATUS_IDLE)
// 获取锁定状态的buffer
#define get_lock_buffer(buffer_handler) \
get_buffer_by_status(buffer_handler, BUFFER_STATUS_LOCK)
// 获取等待状态的buffer
#define get_pend_buffer(buffer_handler) \
get_buffer_by_status(buffer_handler, BUFFER_STATUS_PEND)
// 获取使用状态的buffer
#define get_used_buffer(buffer_handler) \
get_buffer_by_status(buffer_handler, BUFFER_STATUS_USED)
/* 快捷获取指定状态的buffer,并修改buffer状态 */
// 获取空闲状态的buffer,并修改为锁定状态
#define get_idle_buffer_to_lock(buffer_handler) \
change_buffer_status(buffer_handler, BUFFER_STATUS_IDLE, BUFFER_STATUS_LOCK)
// 获取锁定状态的buffer,并修改为等待状态
#define get_lock_buffer_to_pend(buffer_handler) \
change_buffer_status(buffer_handler, BUFFER_STATUS_LOCK, BUFFER_STATUS_PEND)
// 获取等待状态的buffer,并修改为使用状态
#define get_pend_buffer_to_used(buffer_handler) \
change_buffer_status(buffer_handler, BUFFER_STATUS_PEND, BUFFER_STATUS_USED)
// 获取使用状态的buffer,并修改为空闲状态
#define get_used_buffer_to_idle(buffer_handler) \
change_buffer_status(buffer_handler, BUFFER_STATUS_USED, BUFFER_STATUS_IDLE)
/* 快捷设置指定buffer的状态 */
// 设置buffer状态为空闲
#define set_buffer_idle(buffer_handler, buf) \
set_buffer_status(buffer_handler, buf, BUFFER_STATUS_IDLE)
// 设置buffer状态为锁定
#define set_buffer_lock(buffer_handler, buf) \
set_buffer_status(buffer_handler, buf, BUFFER_STATUS_LOCK)
// 设置buffer状态为等待
#define set_buffer_pend(buffer_handler, buf) \
set_buffer_status(buffer_handler, buf, BUFFER_STATUS_PEND)
// 设置buffer状态为使用
#define set_buffer_used(buffer_handler, buf) \
set_buffer_status(buffer_handler, buf, BUFFER_STATUS_USED)
#endif
@@ -0,0 +1,81 @@
/* ------------------------------------------------------------------------------------*/
/**
* @file time_count.h
*
* @brief 时间探针,用于粗略记录程序执行时间
*
* 使用方法:
* 1. 在程序开始执行的位置调用 time_count_start
* 2. 在程序结束执行的位置调用 time_count_end
* 3. 保证 start 和 end 时传入的 id 一致、模块会自动在程序结束位置打印出执行时间,单位 us;
* 4. 若打印出 Error 信息,说明 start 和 end 时传入的 id 不一致;
* 5. 此方法仅用于粗略统计程序执行时间,非精确时间。可用于性能调试参考。
* 注意:
* 本模块接口仅应用层可以调用,库里调用会导致宏开关无法关闭,造成资源浪费。
* 每start一个时间,会malloc 20byte空间占用,end时会释放
*
* @author
*
* @version V1.0.0
*
* @date 2025-03-18
*
* Copyright(C) 2010- , JIELI TECHNOLOGY, Inc.
* All right reserved.
*/
/* ------------------------------------------------------------------------------------*/
#ifndef __TIME_COUNT_H__
#define __TIME_COUNT_H__
// 程序计数功能使能
#define TIME_COUNT_ENABLE 0
#if (defined TIME_COUNT_ENABLE && TIME_COUNT_ENABLE)
#define time_count_start(id) \
time_count_pushing(id)
#define time_count_end(id) \
{ \
printf("%s(), %d, time count id: %d, time: %llu us\n", __func__, __LINE__, id, time_count_popping(id)); \
}
#else
#define time_count_start(id)
#define time_count_end(id)
#endif
/* ------------------------------------------------------------------------------------*/
/**
* @brief time_count_pushing 将当前时间压入计时栈中
*
* @Params id 为当前时间命名的id,用于计时出栈时计算运行时间
*
* @return 当前时间
*/
/* ------------------------------------------------------------------------------------*/
u64 time_count_pushing(u32 id);
/* ------------------------------------------------------------------------------------*/
/**
* @brief time_count_popping 统计指定ID的程序段运行时间,并将该时间出栈
*
* @Params id 需要统计时间的ID号,与计时入栈时传入的ID一致
*
* @return 指定ID的程序段运行时间,如果指定ID没有入栈,则返回当前时间,并打印错误提示
*/
/* ------------------------------------------------------------------------------------*/
u64 time_count_popping(u32 id);
#endif // !__TIME_COUNT_H__
+55
View File
@@ -0,0 +1,55 @@
/* Copyright(C) 2010- , JIELI TECHNOLOGY, Inc.
* All right reserved.
*/
#ifndef __UI_ADDR_H__
#define __UI_ADDR_H__
#include "system/malloc.h"
#include "asm/psram_api.h"
/* ================================= FLASH 地址处理 ================================= */
/* 判断地址是否在 flash 范围内 */
#define UI_ADDR_IN_FLASH(addr) (memory_in_flash((const void *)(addr)))
/* 判断地址是否在 flash cache 范围内 */
#define UI_ADDR_IN_FLASH_CACHE(addr) (memory_in_flash_cache((const void *)(addr)))
/* 判断地址是否在 flash nocache 范围内 */
#define UI_ADDR_IN_FLASH_NOCACHE(addr) (memory_in_flash_nocache((const void *)(addr)))
/* ================================= SRAM 地址处理 ================================= */
/* 判断地址是否在物理 RAM 范围内 */
#define UI_ADDR_IN_PHY_RAM(addr) (memory_in_phy((const void *)(addr)))
/* 判断地址是否在虚拟 RAM 范围内 */
#define UI_ADDR_IN_VLT_RAM(addr) (memory_in_vtl((const void *)(addr)))
/* 判断地址是否为 RAM 地址 */
#define UI_ADDR_IN_RAM(addr) (UI_ADDR_IN_PHY_RAM(addr) || UI_ADDR_IN_VLT_RAM(addr))
/* ================================= PSRAM 地址处理 ================================= */
/* 判断地址是否在 PSRAM 范围 */
#define UI_ADDR_IN_PSRAM(addr) (UI_ADDR_IN_PSRAM_NOCACHE(addr) || UI_ADDR_IN_PSRAM_CACHE(addr))
/* 判断地址是否在 PSRAM nocache 范围*/
#define UI_ADDR_IN_PSRAM_NOCACHE(addr) (psram_no_cache_check((void *)(addr)))
/* 判断地址是否在 PSRAM cache 范围 */
#define UI_ADDR_IN_PSRAM_CACHE(addr) (psram_cache_check((void *)(addr)))
/* PSRAM cache 地址转 nocache*/
#define UI_PSRAM_CACHE_TO_NOCACHE(addr) (UI_ADDR_IN_PSRAM_CACHE(addr) ? ((void *)psram_cache_2_no_cache((void *)(addr))) : (void *)(addr))
/* PSRAM nocache 地址转 cache */
#define UI_PSRAM_NOCACHE_TO_CACHE(addr) (UI_ADDR_IN_PSRAM_NOCACHE(addr) ? ((void *)psram_no_cache_2_cache((void *)(addr))) : (void *)(addr))
#endif
@@ -0,0 +1,72 @@
#ifndef __UI_COLOR_H__
#define __UI_COLOR_H__
// RGB555
#define TO_RGB555(R,G,B) (((((u8)(R))>>3)<<10) | ((((u8)(G))>>3)<<5) | (((u8)(B))>>3))
#define TO_ARGB8555(A,R,G,B) ((((u8)(A))<<16) | TO_RGB555(R,G,B))
#define RGB555_R(C) ((u8)((((C)>>10)&0x1f)<<3)|0x7)
#define RGB555_G(C) ((u8)((((C)>>5)&0x1f)<<3)|0x7)
#define RGB555_B(C) ((u8)(((C)&0x1f)<<3)|0x7)
#define ARGB8555_A(C) ((u8)((C)>>16))
#define ARGB8555_R(C) RGB555_R(C)
#define ARGB8555_G(C) RGB555_G(C)
#define ARGB8555_B(C) RGB555_B(C)
// RGB565
#define TO_RGB565(R,G,B) (((((u8)(R))>>3)<<11) | ((((u8)(G))>>2)<<5) | (((u8)(B))>>3))
#define TO_ARGB8565(A,R,G,B) ((((u8)(A))<<16) | TO_RGB565(R,G,B))
#define RGB565_R(C) ((u8)(((((C)>>11)&0x1f)<<3)|0x7))
#define RGB565_G(C) ((u8)(((((C)>>5)&0x3f)<<2)|0x3))
#define RGB565_B(C) ((u8)((((C)&0x1f)<<3)|0x7))
#define ARGB8565_A(C) ((u8)((C)>>16))
#define ARGB8565_R(C) RGB565_R(C)
#define ARGB8565_G(C) RGB565_G(C)
#define ARGB8565_B(C) RGB565_B(C)
// RGB888
#define TO_RGB888(R,G,B) ((((u8)(R))<<16) | (((u8)(G))<<8) | (((u8)(B))))
#define TO_ARGB8888(A,R,G,B) ((((u8)(A))<<24) | TO_RGB888(R,G,B))
#define RGB888_R(C) ((u8)((C)>>16))
#define RGB888_G(C) ((u8)((C)>>8))
#define RGB888_B(C) ((u8)((C)&0xff))
#define ARGB8888_A(C) ((u8)((C)>>24))
#define ARGB8888_R(C) RGB888_R(C)
#define ARGB8888_G(C) RGB888_G(C)
#define ARGB8888_B(C) RGB888_B(C)
// 555转565、888
#define RGB555_TO_RGB565(C) TO_RGB565(RGB555_R(C),RGB555_G(C),RGB555_B(C))
#define RGB555_TO_RGB888(C) TO_RGB888(RGB555_R(C),RGB555_G(C),RGB555_B(C))
#define ARGB8555_TO_ARGB8565(C) TO_ARGB8565(ARGB8555_A(C),ARGB8555_R(C),ARGB8555_G(C),ARGB8555_B(C))
#define ARGB8555_TO_ARGB8888(C) TO_ARGB8888(ARGB8555_A(C),ARGB8555_R(C),ARGB8555_G(C),ARGB8555_B(C))
// 565转555、888
#define RGB565_TO_RGB555(C) TO_RGB555(RGB565_R(C),RGB565_G(C),RGB565_B(C))
#define RGB565_TO_RGB888(C) TO_RGB888(RGB565_R(C),RGB565_G(C),RGB565_B(C))
#define ARGB8565_TO_ARGB8555(C) TO_ARGB8555(ARGB8565_A(C),ARGB8565_R(C),ARGB8565_G(C),ARGB8565_B(C))
#define ARGB8565_TO_ARGB8888(C) TO_ARGB8888(ARGB8565_A(C),ARGB8565_R(C),ARGB8565_G(C),ARGB8565_B(C))
// 888转555、565
#define RGB888_TO_RGB555(C) TO_RGB555(RGB888_R(C),RGB888_G(C),RGB888_B(C))
#define RGB888_TO_RGB565(C) TO_RGB565(RGB888_R(C),RGB888_G(C),RGB888_B(C))
#define ARGB8888_TO_ARGB8555(C) TO_ARGB8555(ARGB8888_A(C),ARGB8888_R(C),ARGB8888_G(C),ARGB8888_B(C))
#define ARGB8888_TO_ARGB8565(C) TO_ARGB8565(ARGB8888_A(C),ARGB8888_R(C),ARGB8888_G(C),ARGB8888_B(C))
#endif
@@ -0,0 +1,97 @@
#ifndef __PUBLIC_UI_EXPAND_H__
#define __PUBLIC_UI_EXPAND_H__
#ifndef ABS
#define ABS(x) (((x) > 0) ? (x) : (-(x))) // 整形绝对值
#endif
#ifndef INV
#define INV(x) (((x) > 0) ? (-(x)) : (x)) // 取反向值
#endif
#ifndef ASS
#define ASS(a, x) (((a) > 0) ? ABS(x) : INV(x)) // 取a同号
#endif
#ifndef OPE
#define OPE(x) (((x) > 0) ? 1 : (-1)) // 取x符号
#endif
#ifndef FABS
#define FABS(x) (((x) < 0.0f) ? (-(x)) : (x)) // 浮点绝对值
#endif
#ifndef MAX
#define MAX(a, b) (((a) > (b)) ? (a) : (b)) // 取较大值
#endif
#ifndef MIN
#define MIN(a, b) (((a) < (b)) ? (a) : (b)) // 取较小值
#endif
#ifndef UI_PI
#define UI_PI 3.14159265f // 定义PI
#endif
#ifndef ANGLE_TO_RADIAN
#define ANGLE_TO_RADIAN(a) (((a) * (UI_PI)) / 180.0f) // 角度转弧度
#endif
#ifndef RADIAN_TO_ANGLE
#define RADIAN_TO_ANGLE(r) (((r) * 180.0f) / (UI_PI)) // 弧度转角度
#endif
#ifndef INT_MAX
#define INT_MAX (0x7FFFFFFF) // 2147483647
#endif
#ifndef INT_MIN
#define INT_MIN (-INT_MAX - 1)
#endif
#ifndef U16_MAX
#define U16_MAX (65535) // u16 最大值
#endif
// 字符串HASH化,djb2
#ifndef HASH_STRING
#define HASH_STRING(str) ({ \
unsigned int hash = 5381; \
const char *s = str; \
while (*s) { \
hash = ((hash << 5) + hash) + (*s++); \
} \
hash; \
})
#endif
// 计算数组长度
#ifndef ARRAY_LEN
#define ARRAY_LEN(array) (sizeof(array)/sizeof(array[0]))
#endif
#define DUMP_RECT(func, line, name, rect) \
printf("[RECT] %s() %d, %s [%d, %d, %d, %d]\n", func, line, name, (rect)->left, (rect)->top, (rect)->width, (rect)->height)
#define JLUI_RECT_TO_CSS(x, X) (x)//((x) * 10000 / (X)) // 绝对坐标转相对坐标
#define JLUI_CSS_TO_RECT(c, C) ((c) * (C) / 10000) // 相对坐标转绝对坐标
#endif
@@ -0,0 +1,55 @@
#ifndef __UI_SCROLL_VIEW_H__
#define __UI_SCROLL_VIEW_H__
typedef struct ui_scrollview_t {
u16 timer_id; // 定时器ID
u16 interval; // 定时器中断间隔
void *priv; // 私有参数
int pos;
int record;
int cursor;
int target;
int min_pos;
int max_pos;
int bounces;
int velocity;
int distance;
int scroll_mode;
int align_mode;
int align_gap;
int align_dir; // 对齐方向
int (*cb)(struct ui_scrollview_t *s, void *priv, int pos);
} ui_scrollview_t, *pui_scrollview_t;
int ui_scrollview_init(ui_scrollview_t *s, void *priv, int pos, int (*cb)(ui_scrollview_t *s, void *priv, int pos));
int ui_scrollview_free(ui_scrollview_t *s);
int ui_scrollview_stop(ui_scrollview_t *s);
int ui_scrollview_set_bounces(ui_scrollview_t *s, int bounces);
int ui_scrollview_set_scroll_area(ui_scrollview_t *s, int min, int max);
int ui_scrollview_set_align_by_gap(ui_scrollview_t *s, int gap);
int ui_scrollview_set_align_by_tab(ui_scrollview_t *s, int *tab, int size);
int ui_scrollview_auto_align(ui_scrollview_t *s);
int ui_scrollview_move_offset(ui_scrollview_t *s, int offset);
int ui_scrollview_move_accrue(ui_scrollview_t *s, int offset);
int ui_scrollview_move_velocity(ui_scrollview_t *s, int v);
int ui_scrollview_move_distance(ui_scrollview_t *s, int dist);
#endif