烧录进度条
ArtInChip 平台支持 SDCard / Udisk 烧录时显示进度条和数字百分比。进度条和数字百分比通过 CPU 进行绘制。 进度条默认居中,显示蓝绿两种颜色。数字百分比通过 fb console 实现,fb console 默认支持 32x32 点阵字体,ASCII 32 - 127。
-
在 Luban-Lite 根目录下执行 scons --menuconfig, 进入 BootLoader 工程配置界面。
-
使能 SDCard/ Udisk 烧录功能。
Bootloader options ---> Upgrading ---> [*] Upgrading by SD Card [*] Upgrading by UDISK
-
使能 Display Engine 并配置相关参数。
Board options ---> [*] Using Display Engine (DE) Display Parameter --->
配置显示子系统参数,详情参考 Display 配置 ,屏幕参数需要与项目工程保持一致(背光除外)。注:-
BootLoader 工程需要 GPIO 控制背光,不支持 PWM 调节亮度,其余屏幕参数需要与项目工程保持一致
-
framebuffer format 支持 argb8888 和 rgb565,配置项 select framebuffer format(rgb565) --->, 推荐 rgb565 格式,内存占用小
-
-
使能烧录进度条命令
Bootloader options ---> Commands ---> [*] boot progress bar [*] fb console support (NEW) [ ] only fb console (NEW)
烧录进度条支持三种场景-
同时显示进度条和 fb console
-
只显示进度条
-
只显示 fb console
-
- 如需,可添加自定义配置,否则可略过。
自定义配置支持修改进度条颜色、进度条宽高、进度条位置、fb console 字体颜色、fb console 字体大小。
自定义配置
自定义配置支持修改进度条颜色、进度条宽高、进度条位置、fb console 字体颜色、fb console 字体大小。
-
进度条颜色修改宏定义:
#define BAR_BACKGROUND_COLOR 0x00, 0xA2, 0xE9 // r, g, b #define BAR_FILL_COLOR 0x18, 0xD4, 0x0A
-
进度条宽高
-
进度条高度宏定义,以 pixel 为单位:
#define BAR_HEIGHT 35
-
进度条宽度宏定义,进度条宽度自适应 LCD 分辨率,默认为 LCD 宽度的 5/6,配置不同的比例调整进度条宽度:
#define WIDTH_SPLIT_NUMERATOR 5 #define WIDTH_SPLIT_DENOMINATOR 6
-
-
进度条位置修改进度条绘制逻辑,默认居中显示:
void aicfb_draw_bar(unsigned int value) { ... bar_x = (info.width - width) / 2; // 居中显示 bar_y = (info.height - height) / 2; ... }
-
fb console 字体颜色fb console 支持 16 种颜色,通过宏定义指定:
enum color_idx { CONSOLE_BLACK = 0, CONSOLE_RED, CONSOLE_GREEN, CONSOLE_BROWN, CONSOLE_BLUE, CONSOLE_MAGENTA, CONSOLE_CYAN, CONSOLE_LIGHT_GRAY, CONSOLE_GRAY, CONSOLE_LIGHT_RED, CONSOLE_LIGTH_GREEN, CONSOLE_YELLOW, CONSOLE_LIGHT_BLUE, CONSOLE_LIGHT_MAGENTA, CONSOLE_LIGHT_CYAN, CONSOLE_WHITE, CONSOLE_COLOR_COUNT };
字体颜色宏定义#define CONSOLE_COLOR_FG CONSOLE_LIGHT_GRAY #define CONSOLE_COLOR_BG CONSOLE_BLACK
-
fb console 显示位置
修改 fb console 逻辑,默认居中显示
void aicfb_draw_bar(unsigned int value) { ... console_x = info.width / 2; // 居中显示 console_y = bar_y + BAR_HEIGHT + 5; ... }
-
fb console 字体大小如需修改 fb console 字体大小:
-
提供新的字体数据源。
数据源保存路径 application/baremetal/bootloader/include/video_font_data.h。
可通过点阵字库工具导出点阵数据,推荐第三方开源工具 点阵字库生成工具
-
将数据源复制到数组中,并修改数据类型,默认数据类型为
uint32_t
。static uint32_t video_fontdata[VIDEO_FONT_SIZE] = { ... ... };
-
修改字体属性
#define VIDEO_FONT_CHARS 96 // 支持的字符个数 #define VIDEO_FONT_WIDTH 32 // 字体宽度,以 pixel 为单位 #define VIDEO_FONT_HEIGHT 32 // 字体高度,以 pixel 为单位
-
修改 fb console 逻辑
节选部分代码,需要重新指定数据索引,数据类型和掩码:static void aicfb_console_putc(struct aicfb_screeninfo *info, unsigned int x, unsigned int y, char ch) { int pbytes = info->bits_per_pixel / 8; int i, row; void *line; line = (unsigned char *)(info->framebuffer + y * info->stride + x * pbytes); for (row = 0; row < VIDEO_FONT_HEIGHT; row++) { unsigned int idx = (ch - 32) * VIDEO_FONT_HEIGHT + row; // 根据新数据源重新索引 uint32_t bits = video_fontdata[idx]; // 修改数据类型 switch (info->format) { case MPP_FMT_RGB_565: { uint16_t *dst = line; for (i = 0; i < VIDEO_FONT_WIDTH; i++) { *dst++ = (bits & 0x80000000) ? colour_fg : colour_bg; // 根据数据类型修改掩码 0x80000000 bits <<= 1; } break; } case MPP_FMT_ARGB_8888: { uint32_t *dst = line; for (i = 0; i < VIDEO_FONT_WIDTH; i++) { *dst++ = (bits & 0x80000000) ? colour_fg : colour_bg; // 根据数据类型修改掩码 0x80000000 bits <<= 1; } break; } } }
-