feat(ui)+chore(docs): UI 补齐清单清空;数据可信销项与「卡」号清退

本笔含两组收尾工作(同一工作区内交错在 6 个共享文档/门禁配置里,
拆开会产生"文档声称的页数与树里黄金数不一致"的中间提交,故合为一笔):

一、UI 补齐(清单清空)
- 新建 6 个内容页模块:ui_page_accident / oper / alarm / start / yk
  复用 ui_w_records 共享组件(分页、空态"无记录"、按实例读盘缓存),
  记录层与五个写入点已由道F task-10 / 道G task-12 落地,本批只补页面;
  ui_page_runreport 为 13 行 2 页只读统计,四个数逐个挂范围标签
  (自电池周期 / 本次开机),boot_ready=0 显 "--" 不显 0。
- 数据面:ui_data_info_t 尾部追加 9 字段,ui_data_feed 用
  boot_stats_get() + iec104_serv_get_stats() 纯搬运;模拟器填确定值假数据
  (差异登记 docs/测试说明/模拟器差距清单.md §2.3 两行)。
- 接线:菜单树 6 叶绑 #page=,绑定叶 22→28、UI_PAGE_MAP_COUNT=28;
  字库 185→218 字 / 280→313 字形;双端注册 uvprojx +30、CMakeLists +6。
- 回归:内容页黄金 53→60(含 runreport_p2 真拍第 2 页),文本断言
  425 正向 / 36 反向;存量 53 张逐字节零漂移;记录 5 页各用独立空目录
  (模拟器把操作留痕写进 cwd 的 sim_oper.log,共用 tmp 会让空态拍不到)。

二、数据可信销项 + 「数据可信」任务卡号整族清退
- 删除已闭环的"已知电压注入验证"行与闭环结论块(证据在
  docs/硬件平台/ADC通道映射说明.md §8.1 与
  docs/测试说明/ADC前端注入验证流程.md §5~§7),§5 标识列改语义短语。
- 卡 0/0b/1~12 共 14 个号全仓 288 站点 / 56 文件清退成语义短语,
  代码注释、测试、门禁配置与文档一并改;换算表入 docs/编号规范.md §9.3。
  这一族是中文前缀,不进 check_ids 语料,刻意不入 id_aliases.json。

验证(实测)
- @build 0 错 0 警:Code=236456 RO=28124 RW=1876 ZI=137084;
  RAM +464 B(RW +304 / ZI +160),RW_IRAM1 62.2% / RW_CCM 87.9%,
  体积同码凭证与 RAM 台账已回填。
- check_menu_rows 8 状态 rc=0(池 5368/5448 常量未动);
  check_content_pages 60 页 rc=0;check_font_charset / registration /
  coding-standard / bom-drift / mojibake / doc-links --all / layer-deps /
  nested-comment 全 rc=0;check_ids --strict 无错误;主机单测
  ui_data 295 / boot_stats 21 / sys_log_mcu 141 / soe 32 / soe_store 27。

未做(不是遗漏)
- 六页真机判据(真记录翻页、掉电保持、清除后归零、boot_count 自增、
  拔 RTC 电池落 RESTARTED、IWDG 复位落 rst_cause、主站连一次 conn_up+1)
  已登记 docs/任务规划/登记簿.md §7;模拟器结构上照不到。
- docs/产品需求/产品需求设计文档.md 属另一条在飞改动,本笔不含;
  其中我已同步 6 处现状数字(28 叶 / 60 页 / 218 字),随该笔入库。
This commit is contained in:
2026-10-28 07:23:16 +08:00
parent 8f7c141a0b
commit 94b0d79026
113 changed files with 1934 additions and 615 deletions
+15 -1
View File
@@ -88,7 +88,7 @@ extern "C" {
* 真值语义(现场口径 = docs/任务规划/数据可信.md §2.6 的承诺边界 + §4.2 三态
* 可用性;契约文档原先写的"0 = 原始码值(未标定)"是标定落地前的旧口径,
* 已按本表更正,勿再照抄旧表述):
* ENG_PIN 引脚电压 V —— 现状:adc_cal 的 ROM 默认系数是「数据可信」卡 1 定死
* ENG_PIN 引脚电压 V —— 现状:adc_cal 的 ROM 默认系数是「数据可信」量程口径冻结定死
* 的引脚侧 LSB(TPAFE 152.59 uV/码、STM32 805.66 uV/码),采样环
* 折算出来的就是 ADC 引脚电压,不是端子二次值
* ENG_SEC 二次值 —— 电气 8 路 adc_cal_flags() 的 VALID 全置位(拿到端子变比
@@ -210,6 +210,20 @@ typedef struct {
char build_date[UI_DATA_DATE_LEN]; /* 程序日期(编译期) */
char sw_sum[UI_DATA_SUM_LEN]; /* 软件校验;无构建期 CRC 步骤 = "--" */
char ftp_user[UI_DATA_FUSER_LEN]; /* FTP 登录用户名(只显名,不显口令) */
/* ── 运行报告四数(2026-10-28 UI 补齐「运行报告」;BSP 侧只搬运、不算第二份,
* 口径唯一出处 = App/util/boot_stats.h 的四数台账与 App/task/iec104_serv.h
* 的观测计数注;屏上文案(含"禁写终身次数"这类口径)归 UI 页面侧
* <Drivers/BSP/UI/ui_page_runreport.c>,分层方向由 layer-deps 门禁守护 ── */
uint32_t boot_count; /* 上电次数(掉电保持,自 RTC 电池周期起);
boot_seq_state == 0(UNKNOWN)时不可信 */
uint8_t boot_seq_state; /* 0 未知 / 1 首次启用 / 2 延续 / 3 电池域掉过重开 */
uint8_t boot_write_failed; /* 1 = 本次自增没写回 RTC SRAM(账本只会少不会重) */
uint8_t rst_cause; /* 本次开机复位原因编码(BOOT_STATS_CAUSE_*) */
uint8_t boot_ready; /* 0 = 开机账本未初始化 → 整组按占位显示,不得读成 0 */
uint32_t iec104_conn_up; /* 主站接入次数(本次开机以来,跨重连不清零) */
uint32_t iec104_apdu_tx; /* 成功发出的 APDU 帧数(短写不算,落在 tx_fail) */
uint32_t iec104_tx_fail; /* 发送短写/失败次数 */
uint32_t iec104_rx_bytes; /* 收到的**字节**数(帧边界在 link 层,serv 看不见帧) */
} ui_data_info_t;
/* ── 初始化 ───────────────────────────────────────────────────────────────── */
+370 -173
View File
@@ -324,6 +324,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f,
0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x80,
/* U+4E0A "上" */
0x8, 0x1, 0x0, 0x20, 0x4, 0x0, 0xfc, 0x10,
0x2, 0x0, 0x40, 0x8, 0x1, 0x0, 0x20, 0x7f,
0xf0,
/* U+4E3B "主" */
0x8, 0x0, 0x80, 0x0, 0x3f, 0xe0, 0x40, 0x8,
0x1, 0x3, 0xfe, 0x4, 0x0, 0x80, 0x10, 0x7f,
@@ -398,6 +403,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x3f, 0xf8, 0x20, 0xa, 0x2, 0x20, 0x82, 0x60,
0x30,
/* U+5199 "写" */
0xff, 0xf4, 0x4, 0x80, 0x1f, 0xe2, 0x0, 0x80,
0x1f, 0xf0, 0x2, 0x0, 0x5f, 0xe8, 0x1, 0x1,
0xc0,
/* U+51FA "出" */
0x4, 0x8, 0x89, 0x11, 0x22, 0x27, 0xfc, 0x8,
0x1, 0x4, 0x21, 0x84, 0x30, 0x87, 0xff, 0x80,
@@ -436,6 +446,10 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x7f, 0xe8, 0x1, 0x8, 0x21, 0x4, 0x20, 0xbf,
0x90, 0x82, 0x14, 0x42, 0x48, 0x42, 0xff, 0x80,
/* U+539F "原" */
0x7f, 0xe8, 0x81, 0x7f, 0x28, 0x25, 0xfc, 0xa0,
0x97, 0xf2, 0x10, 0x4a, 0x8a, 0x4a, 0x98, 0x80,
/* U+53C2 "参" */
0x10, 0x4, 0x11, 0xff, 0x4, 0xf, 0xfe, 0x45,
0x13, 0x15, 0x89, 0x6, 0xf, 0x8, 0xe, 0x3e,
@@ -445,6 +459,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xfb, 0xe1, 0x44, 0x28, 0xc5, 0x15, 0x14, 0xa2,
0x88, 0x21, 0x4, 0x51, 0x4a, 0x4a, 0x10, 0x80,
/* U+53D1 "发" */
0x9, 0x11, 0x12, 0x20, 0x7f, 0xf1, 0x0, 0x20,
0x7, 0xe1, 0x44, 0x25, 0x8, 0x42, 0x36, 0x18,
0x30,
/* U+53D6 "取" */
0xfc, 0x9, 0x79, 0x25, 0x3c, 0xa4, 0x94, 0xf2,
0x92, 0x52, 0x64, 0xf8, 0x81, 0x28, 0x28, 0x80,
@@ -453,6 +472,10 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xff, 0xc0, 0x60, 0x30, 0x18, 0xc, 0x6, 0x3,
0x1, 0xff, 0xc0, 0x40,
/* U+53EF "可" */
0xff, 0xe0, 0x8, 0x1, 0x3f, 0x24, 0x24, 0x84,
0x90, 0x93, 0xf2, 0x40, 0x40, 0x8, 0x7, 0x0,
/* U+53F7 "号" */
0x3f, 0x84, 0x10, 0x82, 0x1f, 0xc0, 0x1, 0xff,
0xc4, 0x1, 0x0, 0x3f, 0xc0, 0x8, 0x1, 0x0,
@@ -478,10 +501,25 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xc0, 0x3, 0xfe, 0x40, 0x48, 0x9, 0xff, 0x20,
0x20,
/* U+5468 "周" */
0x3f, 0xe4, 0x4, 0x88, 0x97, 0xd2, 0x22, 0x7f,
0xc8, 0x9, 0x7d, 0x28, 0xa5, 0xf5, 0x0, 0xc0,
0x70,
/* U+56DE "回" */
0xff, 0xe0, 0x18, 0x6, 0x79, 0x92, 0x64, 0x99,
0xe6, 0x1, 0x80, 0x7f, 0xf8, 0x4,
/* U+56E0 "因" */
0xff, 0xf0, 0x6, 0x10, 0xc2, 0x1b, 0xfb, 0x8,
0x62, 0x8c, 0x89, 0xa0, 0xb0, 0x7, 0xff, 0xc0,
0x10,
/* U+56F4 "围" */
0xff, 0xf0, 0x6, 0x10, 0xdf, 0xd8, 0x43, 0x3e,
0x61, 0xd, 0xfd, 0x84, 0xb0, 0xb6, 0x10, 0xff,
0xf0,
/* U+5730 "地" */
0x21, 0x4, 0x20, 0x95, 0x92, 0xdf, 0x72, 0x5a,
0x49, 0x49, 0x2b, 0x25, 0x6, 0x87, 0x10, 0x81,
@@ -507,6 +545,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xaa, 0x48, 0x89, 0x11, 0x4, 0x21, 0x4, 0x40,
0x80,
/* U+5931 "失" */
0x4, 0x4, 0x80, 0x90, 0x1f, 0xc4, 0x41, 0x8,
0x1, 0x7, 0xff, 0xa, 0x2, 0x20, 0x82, 0x60,
0x30,
/* U+5B50 "子" */
0x3f, 0x80, 0x20, 0x8, 0x2, 0x0, 0x41, 0xff,
0xc1, 0x0, 0x20, 0x4, 0x0, 0x80, 0x70, 0x0,
@@ -540,6 +583,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xff, 0x80, 0x20, 0xa, 0x2, 0x80, 0xbf, 0xe8,
0x2, 0x0, 0x80, 0x60, 0x17, 0xfc,
/* U+5E27 "帧" */
0x20, 0x84, 0x13, 0xe3, 0xd4, 0x4a, 0xbf, 0x54,
0x6a, 0xad, 0x55, 0xba, 0xa4, 0x54, 0x85, 0x11,
0x10,
/* U+5E38 "常" */
0x24, 0x82, 0xa3, 0xff, 0xc0, 0x13, 0xf8, 0x41,
0xf, 0xe0, 0x20, 0x7f, 0xc8, 0x89, 0x13, 0x2,
@@ -565,6 +613,10 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xc5, 0x20, 0xa4, 0x54, 0x84, 0xfd, 0x40, 0x47,
0xf0,
/* U+5F00 "开" */
0x7f, 0xc2, 0x20, 0x44, 0x8, 0x81, 0x11, 0xff,
0xc4, 0x40, 0x88, 0x21, 0x4, 0x21, 0x4, 0x0,
/* U+5F02 "异" */
0x7f, 0xc8, 0x9, 0xff, 0x20, 0x4, 0x2, 0x7f,
0xc4, 0x20, 0x84, 0xff, 0xe2, 0x10, 0x82, 0x20,
@@ -575,6 +627,10 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x1f, 0x40, 0x88, 0x10, 0x82, 0x14, 0x79, 0xf0,
0x10,
/* U+5F15 "引" */
0x0, 0xfc, 0x42, 0x21, 0x1f, 0x8c, 0x6, 0x3,
0xf1, 0x8, 0x84, 0x42, 0x2e, 0x10,
/* U+5F3A "强" */
0x7, 0xdc, 0x88, 0x91, 0x13, 0xee, 0x11, 0x1f,
0xe2, 0x4f, 0x49, 0x2f, 0xe4, 0x20, 0x85, 0x67,
@@ -649,6 +705,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xcd, 0x27, 0x3f, 0x26, 0x25, 0x44, 0xaf, 0xb9,
0x10,
/* U+6389 "掉" */
0x21, 0x4, 0x3f, 0xc4, 0x17, 0xf2, 0x82, 0x5f,
0xce, 0xf, 0x7f, 0x21, 0x5, 0xfc, 0x84, 0x30,
0x80,
/* U+63A5 "接" */
0x22, 0x4, 0x20, 0xbf, 0xfa, 0x22, 0x28, 0x5f,
0xcc, 0x47, 0x7f, 0x22, 0x44, 0xc8, 0x86, 0x37,
@@ -669,6 +730,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x4f, 0xbf, 0x8, 0x2f, 0xe4, 0x70, 0x95, 0x34,
0x90,
/* U+6536 "收" */
0x12, 0x12, 0x42, 0x48, 0x49, 0xf9, 0x45, 0x34,
0xa4, 0x95, 0x94, 0xd1, 0x12, 0x50, 0x51, 0xc,
0x10,
/* U+6545 "故" */
0x22, 0x4, 0x40, 0x88, 0x7d, 0xf2, 0x44, 0x44,
0xbe, 0x94, 0x52, 0x8a, 0x91, 0x23, 0xea, 0x46,
@@ -730,6 +796,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x5, 0x41, 0x24, 0x44, 0x57, 0xf4, 0x10, 0x2,
0x0,
/* U+673A "机" */
0x20, 0x4, 0xf0, 0x92, 0x7a, 0x42, 0x48, 0xe9,
0x1b, 0x25, 0x24, 0x24, 0x84, 0x94, 0xa2, 0x98,
0x30,
/* U+677F "板" */
0x20, 0x64, 0xf0, 0x90, 0x7a, 0x2, 0x7e, 0xea,
0x5b, 0x4d, 0x2a, 0x25, 0x44, 0x90, 0xa5, 0x19,
@@ -775,6 +846,10 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x0, 0x81, 0x28, 0x45, 0x11, 0x10, 0x41, 0x10,
0x10,
/* U+6B63 "正" */
0x7f, 0xc0, 0x80, 0x10, 0x2, 0x2, 0x40, 0x4f,
0x89, 0x1, 0x20, 0x24, 0x4, 0x83, 0xff, 0x80,
/* U+6B7B "死" */
0xff, 0xe4, 0x40, 0x88, 0x1d, 0x14, 0xa5, 0x55,
0x4, 0xc0, 0x90, 0x22, 0x28, 0x46, 0x7, 0x80,
@@ -789,6 +864,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x3, 0x40, 0xa8, 0x24, 0x98, 0x88, 0x10, 0x86,
0x0,
/* U+6C60 "池" */
0x2, 0x10, 0x41, 0x4b, 0x9, 0xa1, 0x65, 0x34,
0x9c, 0x90, 0x92, 0x12, 0xca, 0x42, 0x40, 0x87,
0xf0,
/* U+6CE2 "波" */
0x1, 0x10, 0x21, 0x7f, 0x88, 0x91, 0x11, 0x3f,
0x95, 0x10, 0xa2, 0x12, 0x8a, 0x22, 0x4a, 0x16,
@@ -839,6 +919,16 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x8, 0xa3, 0x14, 0xa2, 0x84, 0x88, 0x91, 0x14,
0x10,
/* U+72D7 "狗" */
0x12, 0xa, 0x40, 0x8f, 0xaa, 0x19, 0x82, 0x2f,
0x4d, 0x2a, 0xa5, 0x97, 0xa2, 0x84, 0x40, 0xb0,
0x60,
/* U+72EC "独" */
0x21, 0x14, 0x21, 0x4, 0x57, 0xf2, 0x92, 0x52,
0x5a, 0x4d, 0x7f, 0x21, 0x4, 0x24, 0x87, 0xe7,
0x90,
/* U+7528 "用" */
0x7f, 0xd1, 0x14, 0x45, 0xff, 0x44, 0x51, 0x17,
0xfd, 0x11, 0x44, 0x51, 0x18, 0x1c,
@@ -867,6 +957,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xc8, 0x13, 0xfe, 0xa0, 0x47, 0xf8, 0x81, 0x1f,
0xe0,
/* U+77E5 "知" */
0x20, 0x4, 0x0, 0xf7, 0xa8, 0x99, 0x12, 0x22,
0x7f, 0xc8, 0x89, 0x29, 0x24, 0xbd, 0x14, 0xc0,
0x0,
/* U+7801 "码" */
0xf, 0xde, 0x8, 0x91, 0x12, 0x24, 0x44, 0xef,
0xf4, 0xa, 0x81, 0x5f, 0xae, 0x5, 0x40, 0x80,
@@ -895,6 +990,21 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x9c, 0x43, 0x48, 0xa7, 0xc4, 0x20, 0x84, 0x17,
0xf0,
/* U+7A97 "窗" */
0x4, 0x1f, 0xfe, 0x44, 0x92, 0x40, 0x80, 0xff,
0x92, 0x12, 0xfa, 0x72, 0x49, 0x89, 0x49, 0x3f,
0xe0,
/* U+7ACB "立" */
0x8, 0x0, 0x80, 0x0, 0x3f, 0xe0, 0x0, 0x1,
0x8, 0x20, 0x84, 0x11, 0x2, 0x20, 0x8, 0x7f,
0xf0,
/* U+7AD9 "站" */
0x41, 0x4, 0x20, 0x4, 0x7c, 0xf0, 0x11, 0x22,
0x15, 0xfa, 0xa1, 0x24, 0x26, 0x87, 0x1f, 0x82,
0x10,
/* U+7AEF "端" */
0x81, 0x9, 0x24, 0x24, 0xf7, 0xf0, 0x1, 0x5f,
0xe8, 0x45, 0x7f, 0x4a, 0xa5, 0x57, 0x2a, 0x84,
@@ -925,6 +1035,16 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x13, 0x1f, 0x18, 0x0, 0x86, 0xc3, 0x6, 0x0,
0x20,
/* U+7EDF "统" */
0x21, 0x4, 0x11, 0x1f, 0xc8, 0x8e, 0x24, 0x48,
0x51, 0xff, 0x95, 0x2, 0x86, 0x53, 0x12, 0x84,
0x30,
/* U+7EED "续" */
0x21, 0x4, 0xf9, 0x4, 0x4b, 0xfe, 0x2, 0x45,
0x11, 0x67, 0x94, 0xf, 0xe6, 0x23, 0x9, 0x6,
0x10,
/* U+7EF4 "维" */
0x22, 0x84, 0x49, 0x1f, 0xca, 0x4e, 0xc8, 0x4f,
0xd1, 0x27, 0xa4, 0x7, 0xe6, 0x93, 0x12, 0x3,
@@ -940,15 +1060,30 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xf, 0xe1, 0x4, 0x20, 0x84, 0x90, 0x92, 0x7f,
0xf0,
/* U+811A "脚" */
0x4, 0x1c, 0x9e, 0xba, 0xd2, 0x5e, 0x4b, 0x5d,
0x69, 0x2f, 0x45, 0xaa, 0xb5, 0xde, 0x82, 0x30,
0x40,
/* U+81EA "自" */
0x8, 0x8, 0x3f, 0xf0, 0x18, 0xf, 0xfe, 0x3,
0x1, 0xff, 0xc0, 0x60, 0x3f, 0xf0,
/* U+8282 "节" */
0x11, 0x2, 0x23, 0xff, 0x88, 0x80, 0x1, 0xff,
0x82, 0x10, 0x42, 0x8, 0x41, 0x18, 0x20, 0x4,
0x0,
/* U+82AF "芯" */
0x11, 0x2, 0x23, 0xff, 0x88, 0x80, 0x0, 0x8,
0x4, 0x82, 0x92, 0x50, 0x2a, 0x16, 0x42, 0x87,
0xc0,
/* U+8303 "范" */
0x11, 0x1f, 0xfc, 0x44, 0x20, 0x2, 0xfc, 0x10,
0xa2, 0x12, 0x42, 0x9, 0x85, 0x5, 0x20, 0xc3,
0xf0,
/* U+8377 "荷" */
0x11, 0x1f, 0xfc, 0x44, 0x17, 0xf2, 0x4, 0x9e,
0xb2, 0x52, 0x4a, 0x4f, 0x49, 0x9, 0x1, 0x20,
@@ -969,6 +1104,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x82, 0x8f, 0xff, 0x0, 0xf, 0xf8, 0x82, 0x1f,
0xc0,
/* U+8BA1 "计" */
0x41, 0x4, 0x20, 0x4, 0x0, 0x8e, 0x10, 0x5f,
0xc8, 0x41, 0x8, 0x29, 0x6, 0x20, 0x84, 0x0,
0x80,
/* U+8BA4 "认" */
0x41, 0x4, 0x20, 0x4, 0x0, 0x8e, 0x10, 0x42,
0x8, 0xa1, 0x14, 0x2a, 0x86, 0x88, 0x91, 0x4,
@@ -1009,6 +1149,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x91, 0x12, 0x22, 0x44, 0x41, 0x60, 0xc3, 0x60,
0x10,
/* U+8D25 "败" */
0x1, 0x1f, 0x22, 0x28, 0x55, 0xfa, 0xc5, 0x54,
0xaa, 0x95, 0x52, 0xaa, 0x84, 0x21, 0x4a, 0x46,
0x30,
/* U+8D8A "越" */
0x20, 0xa4, 0x13, 0xdf, 0x92, 0x42, 0x4b, 0xeb,
0x49, 0xb5, 0x25, 0xb1, 0x74, 0x47, 0x80, 0x5f,
@@ -1059,6 +1204,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x4a, 0x51, 0x54, 0x2c, 0x45, 0x9, 0x40, 0x47,
0xf0,
/* U+9001 "送" */
0x88, 0x88, 0xa0, 0x0, 0xf, 0xec, 0x20, 0x84,
0x1f, 0xfa, 0x10, 0x45, 0x9, 0x11, 0x41, 0x5f,
0xf0,
/* U+901A "通" */
0x9f, 0x88, 0x90, 0xc, 0xf, 0xed, 0x24, 0xbf,
0x94, 0x92, 0xfe, 0x52, 0x4a, 0x59, 0x0, 0x5f,
@@ -1123,6 +1273,10 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xc4, 0x80, 0x90, 0x11, 0x2, 0x90, 0x61, 0x88,
0x0,
/* U+95E8 "门" */
0x9f, 0xd0, 0x10, 0x6, 0x1, 0x80, 0x60, 0x18,
0x6, 0x1, 0x80, 0x60, 0x18, 0x6, 0x7,
/* U+95ED "闭" */
0x80, 0x13, 0xf0, 0x6, 0x11, 0x84, 0x6f, 0xd8,
0x46, 0x31, 0x94, 0x69, 0x18, 0xc6, 0x7,
@@ -1175,6 +1329,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xd0, 0x2, 0x7f, 0x49, 0x29, 0x25, 0x8b, 0x26,
0x10,
/* U+9996 "首" */
0x20, 0x82, 0x23, 0xff, 0x82, 0x7, 0xfc, 0x80,
0x9f, 0xf2, 0x2, 0x7f, 0xc8, 0x9, 0xff, 0x20,
0x20,
/* U+9A8C "验" */
0x1, 0x1c, 0x20, 0x8a, 0x52, 0x2a, 0x83, 0x4f,
0xbc, 0x0, 0x92, 0x39, 0x5a, 0xa8, 0x52, 0x37,
@@ -1304,8 +1463,8 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 513, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 529, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 546, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 563, .adv_w = 192, .box_w = 11, .box_h = 9, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 576, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 563, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 580, .adv_w = 192, .box_w = 11, .box_h = 9, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 593, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 610, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 627, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
@@ -1323,101 +1482,101 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 831, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 848, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 865, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 882, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 896, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 912, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 929, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 945, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 961, .adv_w = 192, .box_w = 9, .box_h = 10, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 973, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 990, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1007, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1024, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1041, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1058, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 1072, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1089, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1106, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1123, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1140, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1157, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1173, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1190, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1207, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1224, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1241, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1258, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 1272, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1289, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1306, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1323, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1340, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1357, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1374, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1391, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1408, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1425, .adv_w = 192, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 1439, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1456, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1473, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1490, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1507, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1524, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 882, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 899, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 916, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 930, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 946, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 962, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 979, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 995, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1012, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1028, .adv_w = 192, .box_w = 9, .box_h = 10, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 1040, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1056, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1073, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1090, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1107, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1124, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1141, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1158, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 1172, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1189, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1206, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1223, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1240, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1257, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1274, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1291, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1308, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1324, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1341, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1358, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1375, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1392, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1409, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 1423, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1440, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1457, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1474, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1491, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1508, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1525, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1541, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1558, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1575, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1592, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1609, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1626, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1643, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1660, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1677, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1694, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1711, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1728, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1745, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1762, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1779, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1795, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 1808, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1825, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1575, .adv_w = 192, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 1589, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1606, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1623, .adv_w = 192, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 1637, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1654, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1671, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1688, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1705, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1722, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1739, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1756, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1773, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1790, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1807, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1824, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1841, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1858, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1872, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1889, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1906, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1923, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1940, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1957, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1974, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1991, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2008, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2025, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2042, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2059, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2076, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2092, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2109, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2126, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2143, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2160, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2177, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2194, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2211, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2228, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2245, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2262, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2279, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2296, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2310, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2327, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2344, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2361, .adv_w = 192, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 2376, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2393, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2410, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2426, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2443, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1858, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1875, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1892, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1909, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1926, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1943, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1960, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1977, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1994, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2011, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2027, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 2040, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2057, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2073, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2090, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2104, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2121, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2138, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2155, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2172, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2189, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2206, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2223, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2240, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2257, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2274, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2291, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2308, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2325, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2341, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2357, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2374, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2391, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2408, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2425, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2442, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2459, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2476, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2493, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
@@ -1427,61 +1586,94 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 2561, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2578, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2595, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2612, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2629, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2646, .adv_w = 192, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 2612, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2626, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2643, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2660, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2677, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2694, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2711, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2728, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2745, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2762, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2779, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2796, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2813, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2830, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2847, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2864, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2881, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2898, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2915, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2932, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2949, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2966, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2983, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3000, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3017, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3034, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3051, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3068, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3085, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3102, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3119, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3135, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3152, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3169, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3186, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3203, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3220, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3237, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3254, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3271, .adv_w = 192, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 3286, .adv_w = 192, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 3301, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3318, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3335, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3352, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3369, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3386, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3402, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3419, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3436, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3453, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3470, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3487, .adv_w = 192, .box_w = 2, .box_h = 4, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 3488, .adv_w = 192, .box_w = 2, .box_h = 6, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 3490, .adv_w = 165, .box_w = 8, .box_h = 10, .ofs_x = 1, .ofs_y = -1} /* U+25B6 */
{.bitmap_index = 2677, .adv_w = 192, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 2692, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2709, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2726, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2743, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2759, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2776, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2792, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2809, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2826, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2843, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2860, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2877, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2894, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2911, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2928, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2945, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2962, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2979, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2996, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3013, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3030, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3047, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3064, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3081, .adv_w = 192, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 3095, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3112, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3129, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3146, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3163, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3180, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3197, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3214, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3231, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3248, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3265, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3282, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3299, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3316, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3333, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3350, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3367, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3384, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3401, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3418, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3435, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3452, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3469, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3486, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3503, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3520, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3537, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3554, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3571, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3588, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3605, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3622, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3639, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3655, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3672, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3689, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3706, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3723, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3740, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3757, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3774, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3791, .adv_w = 192, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 3806, .adv_w = 192, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 3821, .adv_w = 192, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 3836, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3853, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3870, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3887, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3904, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3921, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3937, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3954, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3971, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3988, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 4005, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 4022, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 4039, .adv_w = 192, .box_w = 2, .box_h = 4, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 4040, .adv_w = 192, .box_w = 2, .box_h = 6, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 4042, .adv_w = 165, .box_w = 8, .box_h = 10, .ofs_x = 1, .ofs_y = -1} /* U+25B6 */
};
/*---------------------
@@ -1489,29 +1681,34 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
*--------------------*/
static const uint16_t unicode_list_1[] = {
0x0, 0x1, 0x2, 0x2ca0, 0x2ca9, 0x2cdb, 0x2d2b, 0x2d2c,
0x2d44, 0x2d96, 0x2ded, 0x2dee, 0x2dfc, 0x2e7d, 0x2e81, 0x2edc,
0x3005, 0x300c, 0x3011, 0x3013, 0x309a, 0x30a6, 0x30d6, 0x30ed,
0x3148, 0x31b6, 0x31da, 0x322b, 0x3262, 0x326c, 0x3276, 0x3283,
0x3297, 0x32a8, 0x32cc, 0x32cf, 0x32ea, 0x357e, 0x35d0, 0x35e0,
0x362b, 0x37ad, 0x37b6, 0x39f0, 0x39f7, 0x39f8, 0x3a3a, 0x3a3e,
0x3a66, 0x3c92, 0x3cd8, 0x3d14, 0x3d2f, 0x3d46, 0x3d96, 0x3da2,
0x3daf, 0x3dda, 0x3df2, 0x3df3, 0x3df5, 0x3ea1, 0x3edb, 0x3f02,
0x3f0f, 0x40d7, 0x40eb, 0x4135, 0x4136, 0x4144, 0x4145, 0x420e,
0x4245, 0x4247, 0x4249, 0x436d, 0x43e5, 0x43e8, 0x4410, 0x4414,
0x4480, 0x4485, 0x4496, 0x44de, 0x45a0, 0x45a8, 0x45bf, 0x45ca,
0x45cc, 0x461f, 0x4685, 0x46a7, 0x46c1, 0x46d7, 0x4760, 0x48c1,
0x49c0, 0x49c1, 0x4a1b, 0x4a55, 0x4ae2, 0x4b82, 0x4be1, 0x4beb,
0x4c28, 0x4ca5, 0x4cc9, 0x4f59, 0x50e7, 0x50e8, 0x5156, 0x53c8,
0x53d5, 0x53ec, 0x5571, 0x5594, 0x55ab, 0x56a1, 0x570c, 0x570e,
0x57da, 0x5872, 0x58ab, 0x598f, 0x59cc, 0x5b1b, 0x5b9b, 0x5d5f,
0x5d68, 0x5d94, 0x5df1, 0x5e0e, 0x608a, 0x614f, 0x6217, 0x66ec,
0x6765, 0x6a06, 0x6a44, 0x6a4f, 0x6a50, 0x6a5e, 0x6a82, 0x6a8f,
0x6a97, 0x6bbf, 0x6c2a, 0x6c93, 0x6e0f, 0x6e1d, 0x6e33, 0x6e67,
0x6e70, 0x6e71, 0x6e74, 0x6ea0, 0x6eba, 0x6ef3, 0x6f05, 0x6f88,
0x6fed, 0x7067, 0x706d, 0x706f, 0x733f, 0x7345, 0x73a1, 0x73b9,
0x741f, 0x748d, 0x7494, 0x7498, 0x74d2, 0x7504, 0x753c, 0x7596,
0x7602, 0x7715, 0x7731, 0x7828, 0x792c, 0x7d78, 0xddac, 0xddba
0x0, 0x1, 0x2, 0x2ca0, 0x2ca9, 0x2caa, 0x2cdb, 0x2d2b,
0x2d2c, 0x2d44, 0x2d96, 0x2ded, 0x2dee, 0x2dfc, 0x2e7d, 0x2e81,
0x2edc, 0x3005, 0x300c, 0x3011, 0x3013, 0x3039, 0x309a, 0x30a6,
0x30d6, 0x30ed, 0x3148, 0x31b6, 0x31da, 0x322b, 0x323f, 0x3262,
0x326c, 0x3271, 0x3276, 0x3283, 0x328f, 0x3297, 0x32a8, 0x32cc,
0x32cf, 0x32ea, 0x3308, 0x357e, 0x3580, 0x3594, 0x35d0, 0x35e0,
0x362b, 0x37ad, 0x37b6, 0x37d1, 0x39f0, 0x39f7, 0x39f8, 0x3a3a,
0x3a3e, 0x3a66, 0x3c92, 0x3cc7, 0x3cd8, 0x3d14, 0x3d2f, 0x3d46,
0x3d96, 0x3da0, 0x3da2, 0x3daf, 0x3db5, 0x3dda, 0x3df2, 0x3df3,
0x3df5, 0x3ea1, 0x3edb, 0x3f02, 0x3f0f, 0x40d7, 0x40eb, 0x4135,
0x4136, 0x4144, 0x4145, 0x420e, 0x4229, 0x4245, 0x4247, 0x4249,
0x436d, 0x43d6, 0x43e5, 0x43e8, 0x4410, 0x4414, 0x4480, 0x4485,
0x4496, 0x44de, 0x45a0, 0x45a8, 0x45bf, 0x45ca, 0x45cc, 0x45da,
0x461f, 0x4685, 0x46a7, 0x46c1, 0x46d7, 0x4760, 0x48c1, 0x49c0,
0x49c1, 0x4a03, 0x4a1b, 0x4a55, 0x4ae2, 0x4b00, 0x4b82, 0x4be1,
0x4beb, 0x4c28, 0x4ca5, 0x4cc9, 0x4f59, 0x50e7, 0x50e8, 0x5156,
0x5177, 0x518c, 0x53c8, 0x53d5, 0x53ec, 0x5571, 0x5594, 0x55ab,
0x5685, 0x56a1, 0x570c, 0x570e, 0x57da, 0x5872, 0x58ab, 0x5937,
0x596b, 0x5979, 0x598f, 0x59cc, 0x5b1b, 0x5b9b, 0x5d5f, 0x5d68,
0x5d7f, 0x5d8d, 0x5d94, 0x5df1, 0x5e0e, 0x5fba, 0x608a, 0x6122,
0x614f, 0x61a3, 0x6217, 0x66ec, 0x6765, 0x6a06, 0x6a41, 0x6a44,
0x6a4f, 0x6a50, 0x6a5e, 0x6a82, 0x6a8f, 0x6a97, 0x6bbf, 0x6bc5,
0x6c2a, 0x6c93, 0x6e0f, 0x6e1d, 0x6e33, 0x6e67, 0x6e70, 0x6e71,
0x6e74, 0x6ea0, 0x6ea1, 0x6eba, 0x6ef3, 0x6f05, 0x6f88, 0x6fed,
0x7067, 0x706d, 0x706f, 0x733f, 0x7345, 0x73a1, 0x73b9, 0x741f,
0x7488, 0x748d, 0x7494, 0x7498, 0x74d2, 0x7504, 0x753c, 0x7596,
0x7602, 0x7715, 0x7731, 0x7828, 0x7836, 0x792c, 0x7d78, 0xddac,
0xddba
};
/*Collect the unicode lists and glyph_id offsets*/
@@ -1522,12 +1719,12 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 9654, .range_length = 1, .glyph_id_start = 280,
.range_start = 9654, .range_length = 1, .glyph_id_start = 313,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 8544, .range_length = 56763, .glyph_id_start = 96,
.unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 184, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
.unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 217, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
}
};
+79
View File
@@ -0,0 +1,79 @@
/*
* 模块名称:UI Page 事故记录(事故记录内容页)
* 模块功能:事故记录叶子节点(node 34,父节点「记录查询」)的内容页数据——动态列表,
* 每条记录 2 行(偶数行 = 时间戳、奇数行 = 描述),可移选分页;数据经 ui_w_records
* 注入 reader 取自 sys_log(/log/accid.log,容量上限 512 条,满时删除重建);
* 空日志显示单条伪行"无记录";向框架 ui_content_page 提供页面描述符(零 LVGL 对象)
* 记录口径(本文件只读显示、不实现写入方;权威表 App/log/README.md §五类记录):
* 触发判据 = 元件 asserted 上升沿**且**该元件跳闸投退项 = 1(跳闸型动作);
* 写入点 = App/task/protect_task.c 的 s_log_active_edge();
* "记录类型 = 日志 ID 本身"(一类记录一个文件,记录体内没有类型字段位,
* Lead 裁定 2026-10-26)——本页只读 accid.log 一个文件,不做跨文件混排。
* 台架待补(不在本批,已登记 docs/任务规划/登记簿.md):真 NAND 上真实记录的翻页读取、
* 掉电后记录保持、清除记录后本页归零这三件事都要上板复核;模拟器侧该文件
* 没有写入方,像素黄金只能验空态"无记录"。
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
* 作者:DTU 项目组
* 创建日期:2026-10-28
* 修改记录:
* v1.0 2026-10-28 DTU 项目组 创建(UI 补齐「记录 5 页」:照 ui_page_runlog.c 同构,
* 分页 / 空态 / 按实例读盘缓存全部复用 ui_w_records,
* 本文件不重复实现,也不改共享组件)
*/
/* 头文件包含区 */
#include "ui_page_accident.h"
#include "ui_w_records.h"
#include "ui_tokens.h"
/* 静态变量定义区 */
/*
* 记录页薄跳板:内容全部走 ui_w_records 共享组件(W6 合并先例)。
* 实例 s_rec 携带记录源编号与**本实例自己的**读盘缓存——多页共用组件代码,
* 但缓存不得共享,否则切页会命中上一记录号而显示另一页的陈旧行(静默错数据)。
*/
static ui_w_records_t s_rec = { UI_W_REC_LOG_ACCIDENT };
/*
* 函数功能:总行数(动态;每条记录 2 行,空日志 = 单条伪行"无记录")
* 入口参数:无
* 返 回 值:总行数 uint16_t
* 限定条件:uiTask 绘制上下文(经框架回调)
*/
static uint16_t pg_count(void) {
return ui_w_records_count(&s_rec);
}
/*
* 函数功能:逐行取数(转调共享组件;偶数行 = 时间戳、奇数行 = 描述)
* 入口参数:row - 全局行下标 uint16_t
* name - 名输出缓冲 char *
* value - 值输出缓冲(本组件恒写空串) char *
* 返 回 值:无 void
* 限定条件:uiTask 绘制上下文(经框架回调)
*/
static void pg_refresh(uint16_t row, char *name, char *value) {
ui_w_records_refresh(&s_rec, row, name, value);
}
/*
* 页面描述符(外部链接:生成物 ui_page_registry.c 按菜单树 #page=accident 绑定引用):
* 动态列表页——每记录 2 行、UI_LIST_ROWS 行/页;band_h=UI_ROW_BAND_H(同 AC/DC 约定:
* selectable 页选中行黑字必须配白带,band_h=0 会致选中行不可见)
*/
const content_page_def_t ui_page_accident_desc = {
.id = "accident",
.title = "事故记录",
.selectable = 1u,
.top_y = UI_LIST_TOP,
.pitch = UI_ROW_PITCH,
.band_h = UI_ROW_BAND_H,
.text_dy = 0,
.left_x = UI_LIST_LEFT_X,
.right_x = UI_LIST_RIGHT_X,
.rows_per_page = UI_LIST_ROWS,
.count_cb = pg_count,
.refresh = pg_refresh,
};
+26
View File
@@ -0,0 +1,26 @@
/*
* 模块名称:UI Page 事故记录(事故记录内容页)
* 模块功能:事故记录叶子节点(node 34,父节点「记录查询」)的内容页数据——动态列表,
* 每条记录 2 行(偶数行 = 时间戳、奇数行 = 描述),可移选分页;数据经
* ui_w_records 注入 reader 取自 sys_log(/log/accid.log;本文件不 include
* sys_log.h——task-6 分层收紧);空日志显示单条伪行"无记录";
* 向框架 ui_content_page 提供页面描述符(零 LVGL 对象)
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
* 作者:DTU 项目组
* 创建日期:2026-10-28
* 修改记录:
* v1.0 2026-10-28 DTU 项目组 创建(UI 补齐「记录 5 页」;记录层与写入点已由
* 道F task-10 / 道G task-12 落地,本批只补页面)
*/
#ifndef UI_PAGE_ACCIDENT_H
#define UI_PAGE_ACCIDENT_H
#include "ui_content_page.h"
/*
* 页面描述符(Flash const):事故记录页(描述符 .id = "accident");
* 由生成物 ui_page_registry.c 按菜单树 #page=accident 注记绑定引用(定义于 ui_page_accident.c)
*/
extern const content_page_def_t ui_page_accident_desc;
#endif /* UI_PAGE_ACCIDENT_H */
+79
View File
@@ -0,0 +1,79 @@
/*
* 模块名称:UI Page 保护告警(保护告警内容页)
* 模块功能:保护告警叶子节点(node 36,父节点「记录查询」)的内容页数据——动态列表,
* 每条记录 2 行(偶数行 = 时间戳、奇数行 = 描述),可移选分页;数据经 ui_w_records
* 注入 reader 取自 sys_log(/log/alarm.log,容量上限 1024 条,满时删除重建);
* 空日志显示单条伪行"无记录";向框架 ui_content_page 提供页面描述符(零 LVGL 对象)
* 记录口径(本文件只读显示、不实现写入方;权威表 App/log/README.md §五类记录):
* 触发判据 = 元件 asserted 上升沿**且**跳闸投退项 = 0 或该元件无此项(告警型动作);
* 写入点 = App/task/protect_task.c 的 s_log_active_edge();
* "记录类型 = 日志 ID 本身"(一类记录一个文件,记录体内没有类型字段位,
* Lead 裁定 2026-10-26)——本页只读 alarm.log 一个文件,不做跨文件混排。
* 台架待补(不在本批,已登记 docs/任务规划/登记簿.md):真 NAND 上真实记录的翻页读取、
* 掉电后记录保持、清除记录后本页归零这三件事都要上板复核;模拟器侧该文件
* 没有写入方,像素黄金只能验空态"无记录"。
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
* 作者:DTU 项目组
* 创建日期:2026-10-28
* 修改记录:
* v1.0 2026-10-28 DTU 项目组 创建(UI 补齐「记录 5 页」:照 ui_page_runlog.c 同构,
* 分页 / 空态 / 按实例读盘缓存全部复用 ui_w_records,
* 本文件不重复实现,也不改共享组件)
*/
/* 头文件包含区 */
#include "ui_page_alarm.h"
#include "ui_w_records.h"
#include "ui_tokens.h"
/* 静态变量定义区 */
/*
* 记录页薄跳板:内容全部走 ui_w_records 共享组件(W6 合并先例)。
* 实例 s_rec 携带记录源编号与**本实例自己的**读盘缓存——多页共用组件代码,
* 但缓存不得共享,否则切页会命中上一记录号而显示另一页的陈旧行(静默错数据)。
*/
static ui_w_records_t s_rec = { UI_W_REC_LOG_ALARM };
/*
* 函数功能:总行数(动态;每条记录 2 行,空日志 = 单条伪行"无记录")
* 入口参数:无
* 返 回 值:总行数 uint16_t
* 限定条件:uiTask 绘制上下文(经框架回调)
*/
static uint16_t pg_count(void) {
return ui_w_records_count(&s_rec);
}
/*
* 函数功能:逐行取数(转调共享组件;偶数行 = 时间戳、奇数行 = 描述)
* 入口参数:row - 全局行下标 uint16_t
* name - 名输出缓冲 char *
* value - 值输出缓冲(本组件恒写空串) char *
* 返 回 值:无 void
* 限定条件:uiTask 绘制上下文(经框架回调)
*/
static void pg_refresh(uint16_t row, char *name, char *value) {
ui_w_records_refresh(&s_rec, row, name, value);
}
/*
* 页面描述符(外部链接:生成物 ui_page_registry.c 按菜单树 #page=alarm 绑定引用):
* 动态列表页——每记录 2 行、UI_LIST_ROWS 行/页;band_h=UI_ROW_BAND_H(同 AC/DC 约定:
* selectable 页选中行黑字必须配白带,band_h=0 会致选中行不可见)
*/
const content_page_def_t ui_page_alarm_desc = {
.id = "alarm",
.title = "保护告警",
.selectable = 1u,
.top_y = UI_LIST_TOP,
.pitch = UI_ROW_PITCH,
.band_h = UI_ROW_BAND_H,
.text_dy = 0,
.left_x = UI_LIST_LEFT_X,
.right_x = UI_LIST_RIGHT_X,
.rows_per_page = UI_LIST_ROWS,
.count_cb = pg_count,
.refresh = pg_refresh,
};
+26
View File
@@ -0,0 +1,26 @@
/*
* 模块名称:UI Page 保护告警(保护告警内容页)
* 模块功能:保护告警叶子节点(node 36,父节点「记录查询」)的内容页数据——动态列表,
* 每条记录 2 行(偶数行 = 时间戳、奇数行 = 描述),可移选分页;数据经
* ui_w_records 注入 reader 取自 sys_log(/log/alarm.log;本文件不 include
* sys_log.h——task-6 分层收紧);空日志显示单条伪行"无记录";
* 向框架 ui_content_page 提供页面描述符(零 LVGL 对象)
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
* 作者:DTU 项目组
* 创建日期:2026-10-28
* 修改记录:
* v1.0 2026-10-28 DTU 项目组 创建(UI 补齐「记录 5 页」;记录层与写入点已由
* 道F task-10 / 道G task-12 落地,本批只补页面)
*/
#ifndef UI_PAGE_ALARM_H
#define UI_PAGE_ALARM_H
#include "ui_content_page.h"
/*
* 页面描述符(Flash const):保护告警页(描述符 .id = "alarm");
* 由生成物 ui_page_registry.c 按菜单树 #page=alarm 注记绑定引用(定义于 ui_page_alarm.c)
*/
extern const content_page_def_t ui_page_alarm_desc;
#endif /* UI_PAGE_ALARM_H */
+79
View File
@@ -0,0 +1,79 @@
/*
* 模块名称:UI Page 操作记录(操作记录内容页)
* 模块功能:操作记录叶子节点(node 35,父节点「记录查询」)的内容页数据——动态列表,
* 每条记录 2 行(偶数行 = 时间戳、奇数行 = 描述),可移选分页;数据经 ui_w_records
* 注入 reader 取自 sys_log(/log/oper.log,容量上限 512 条,满时删除重建);
* 空日志显示单条伪行"无记录";向框架 ui_content_page 提供页面描述符(零 LVGL 对象)
* 记录口径(本文件只读显示、不实现写入方;权威表 App/log/README.md §五类记录):
* 触发判据 = 人工/远端操作留痕:定值保存、强制复归、对时(8888 与 104)、清除记录;
* 写入点 = App/task/default_task.c(定值保存)、App/protocol/iec104/iec104_pts.c(复归与整定写入)、App/task/iec104_serv.c 与 App/sync/time_sync.c(对时)、App/log/sys_log_mcu.c(清除记录留痕,OPER 自身除外);
* "记录类型 = 日志 ID 本身"(一类记录一个文件,记录体内没有类型字段位,
* Lead 裁定 2026-10-26)——本页只读 oper.log 一个文件,不做跨文件混排。
* 台架待补(不在本批,已登记 docs/任务规划/登记簿.md):真 NAND 上真实记录的翻页读取、
* 掉电后记录保持、清除记录后本页归零这三件事都要上板复核;模拟器侧该文件
* 没有写入方,像素黄金只能验空态"无记录"。
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
* 作者:DTU 项目组
* 创建日期:2026-10-28
* 修改记录:
* v1.0 2026-10-28 DTU 项目组 创建(UI 补齐「记录 5 页」:照 ui_page_runlog.c 同构,
* 分页 / 空态 / 按实例读盘缓存全部复用 ui_w_records,
* 本文件不重复实现,也不改共享组件)
*/
/* 头文件包含区 */
#include "ui_page_oper.h"
#include "ui_w_records.h"
#include "ui_tokens.h"
/* 静态变量定义区 */
/*
* 记录页薄跳板:内容全部走 ui_w_records 共享组件(W6 合并先例)。
* 实例 s_rec 携带记录源编号与**本实例自己的**读盘缓存——多页共用组件代码,
* 但缓存不得共享,否则切页会命中上一记录号而显示另一页的陈旧行(静默错数据)。
*/
static ui_w_records_t s_rec = { UI_W_REC_LOG_OPER };
/*
* 函数功能:总行数(动态;每条记录 2 行,空日志 = 单条伪行"无记录")
* 入口参数:无
* 返 回 值:总行数 uint16_t
* 限定条件:uiTask 绘制上下文(经框架回调)
*/
static uint16_t pg_count(void) {
return ui_w_records_count(&s_rec);
}
/*
* 函数功能:逐行取数(转调共享组件;偶数行 = 时间戳、奇数行 = 描述)
* 入口参数:row - 全局行下标 uint16_t
* name - 名输出缓冲 char *
* value - 值输出缓冲(本组件恒写空串) char *
* 返 回 值:无 void
* 限定条件:uiTask 绘制上下文(经框架回调)
*/
static void pg_refresh(uint16_t row, char *name, char *value) {
ui_w_records_refresh(&s_rec, row, name, value);
}
/*
* 页面描述符(外部链接:生成物 ui_page_registry.c 按菜单树 #page=oper 绑定引用):
* 动态列表页——每记录 2 行、UI_LIST_ROWS 行/页;band_h=UI_ROW_BAND_H(同 AC/DC 约定:
* selectable 页选中行黑字必须配白带,band_h=0 会致选中行不可见)
*/
const content_page_def_t ui_page_oper_desc = {
.id = "oper",
.title = "操作记录",
.selectable = 1u,
.top_y = UI_LIST_TOP,
.pitch = UI_ROW_PITCH,
.band_h = UI_ROW_BAND_H,
.text_dy = 0,
.left_x = UI_LIST_LEFT_X,
.right_x = UI_LIST_RIGHT_X,
.rows_per_page = UI_LIST_ROWS,
.count_cb = pg_count,
.refresh = pg_refresh,
};
+26
View File
@@ -0,0 +1,26 @@
/*
* 模块名称:UI Page 操作记录(操作记录内容页)
* 模块功能:操作记录叶子节点(node 35,父节点「记录查询」)的内容页数据——动态列表,
* 每条记录 2 行(偶数行 = 时间戳、奇数行 = 描述),可移选分页;数据经
* ui_w_records 注入 reader 取自 sys_log(/log/oper.log;本文件不 include
* sys_log.h——task-6 分层收紧);空日志显示单条伪行"无记录";
* 向框架 ui_content_page 提供页面描述符(零 LVGL 对象)
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
* 作者:DTU 项目组
* 创建日期:2026-10-28
* 修改记录:
* v1.0 2026-10-28 DTU 项目组 创建(UI 补齐「记录 5 页」;记录层与写入点已由
* 道F task-10 / 道G task-12 落地,本批只补页面)
*/
#ifndef UI_PAGE_OPER_H
#define UI_PAGE_OPER_H
#include "ui_content_page.h"
/*
* 页面描述符(Flash const):操作记录页(描述符 .id = "oper");
* 由生成物 ui_page_registry.c 按菜单树 #page=oper 注记绑定引用(定义于 ui_page_oper.c)
*/
extern const content_page_def_t ui_page_oper_desc;
#endif /* UI_PAGE_OPER_H */
+12
View File
@@ -10,6 +10,8 @@
#include "ui_page_registry.h"
#include "ui_page_ac.h"
#include "ui_page_accident.h"
#include "ui_page_alarm.h"
#include "ui_page_calib.h"
#include "ui_page_clear.h"
#include "ui_page_clock.h"
@@ -18,15 +20,19 @@
#include "ui_page_deadband.h"
#include "ui_page_device_info.h"
#include "ui_page_net_cfg.h"
#include "ui_page_oper.h"
#include "ui_page_password.h"
#include "ui_page_reset.h"
#include "ui_page_runlog.h"
#include "ui_page_runreport.h"
#include "ui_page_selftest.h"
#include "ui_page_soe.h"
#include "ui_page_start.h"
#include "ui_page_view_param.h"
#include "ui_page_view_plate.h"
#include "ui_page_view_set.h"
#include "ui_page_view_word.h"
#include "ui_page_yk.h"
#include "ui_page_yx.h"
const ui_page_entry_t g_ui_page_map[UI_PAGE_MAP_COUNT] = {
@@ -50,8 +56,14 @@ const ui_page_entry_t g_ui_page_map[UI_PAGE_MAP_COUNT] = {
{ 29u, &ui_page_comm_desc }, /* node 29 通讯设置 */
{ 30u, &ui_page_net_cfg_desc }, /* node 30 网口设置 */
{ 33u, &ui_page_soe_desc }, /* node 33 SOE记录 */
{ 34u, &ui_page_accident_desc }, /* node 34 事故记录 */
{ 35u, &ui_page_oper_desc }, /* node 35 操作记录 */
{ 36u, &ui_page_alarm_desc }, /* node 36 保护告警 */
{ 37u, &ui_page_start_desc }, /* node 37 保护启动 */
{ 38u, &ui_page_yk_desc }, /* node 38 遥控记录 */
{ 39u, &ui_page_selftest_desc }, /* node 39 自检记录 */
{ 40u, &ui_page_runlog_desc }, /* node 40 运行记录 */
{ 41u, &ui_page_runreport_desc }, /* node 41 运行报告 */
};
/*
+1 -1
View File
@@ -25,7 +25,7 @@ typedef struct {
const content_page_def_t *desc; /* 页面描述符(Flash const) */
} ui_page_entry_t;
#define UI_PAGE_MAP_COUNT 22u /* 绑定了内容页的叶子数 */
#define UI_PAGE_MAP_COUNT 28u /* 绑定了内容页的叶子数 */
extern const ui_page_entry_t g_ui_page_map[UI_PAGE_MAP_COUNT];
+276
View File
@@ -0,0 +1,276 @@
/*
* 模块名称:UI Page RunReport(运行报告内容页)
* 模块功能:运行报告叶子节点(node 41,父节点「记录查询」)的内容页数据——13 行只读统计,
* 分 2 页(UI_LIST_ROWS=8 行/页 → 8 + 5);数据全部经 ui_data 装置信息帧下发
* (写侧 App/app/ui_data_feed.c 搬 boot_stats_get() 与 iec104_serv_get_stats(),
* 本文件零 App include,分层方向由 layer-deps 门禁守护)
* 口径纪律(判据 docs/任务规划/UI补齐.md §2「运行报告」行 + App/util/boot_stats.h 四数台账):
* ① **四个数逐个挂范围标签**,不许含糊——上电次数=自 RTC 电池周期(换电池即清零,
* **禁写终身次数**,固件里压根没有跨开机计数器)、复位原因/运行时长/104 统计
* =本次开机以来(104 四枚跨重连不清零,但**断电即归零**);
* ② boot_ready==0(账本未初始化)或 seq_state==0(UNKNOWN)时上电次数显示 "--"
* 而不是 0——把"没有数"洗成"0 次"是最坏的一种误导;
* ③ write_failed==1 单独占一行("未写回"):后果是账本**少计**,绝不会重复计数
* (掉电保持数 +1 后先写 SRAM 再发布,写失败仍按内存值显示);
* ④ 运行时长是 tick 回绕口径(32 位 ms ≈ 49.7 天、uptime_s ≈ 136 年),
* 显示按"天 + 时时:分分"退化(与装置信息页同一 ASCII 记法,见 di_fmt_uptime),
* **不做跨开机累计**(用户裁定 2026-10-27)
* 几何余量(2026-10-28 黄金目检):「自电池周期」5 字 x12px 从 x=101 起、右缘 161,**余量 0**——
* 值列再加字或换字号必切边;要扩文案必须先减字或改标签列宽度,别直接加字。
* 台架待补(不在本批,已登记 docs/任务规划/登记簿.md):真机上电一次看 boot_count +1、
* 拔电换电池后 seq_state 落 RESTARTED、IWDG 复位后 rst_cause 落 IWDG、
* 主站连一次看 conn_up +1 —— 模拟器无 boot_stats(依赖 SD2506 I2C 与 RCC_CSR)
* 与 104 协议栈,黄金参考拍的是固定假数据
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
* 作者:DTU 项目组
* 创建日期:2026-10-28
* 修改记录:
* v1.0 2026-10-28 DTU 项目组 创建(形态照 ui_page_device_info.c 的行表 + 值格式化,
* 分页与选中带照 ui_page_deadband.c 的列表页几何)
*/
/* 头文件包含区 */
#include <string.h>
#include "ui_page_runreport.h"
#include "ui_data.h"
#include "ui_tokens.h"
/* 私有宏定义区 */
#define RR_ROW_N 13u /* 行数(2 页:8 + 5) */
#define RR_INVALID "--"
#define RR_SEC_PER_DAY 86400u
/* 复位原因编码(与 App/util/boot_stats.h 的 BOOT_STATS_CAUSE_* 一一对应;
* 这里刻意写成数字常量并在注释里钉死映射——BSP 不得 include App 头,
* 编码变更由 test/host/ui_data 的搬运断言与 App/log/README 口径联动发现 */
#define RR_CAUSE_UNKNOWN 0u
#define RR_CAUSE_IWDG 1u
#define RR_CAUSE_WWDG 2u
#define RR_CAUSE_SFT 3u
#define RR_CAUSE_POR 4u
#define RR_CAUSE_PIN 5u
#define RR_CAUSE_BOR 6u
/* 上电次数可信度编码(BOOT_STATS_SEQ_*) */
#define RR_SEQ_UNKNOWN 0u
#define RR_SEQ_FRESH 1u
#define RR_SEQ_CONTINUED 2u
#define RR_SEQ_RESTARTED 3u
/* 静态变量定义区 */
/* 行名表(Flash;四数各自挂范围行,口径不许含糊) */
static const char *const s_names[RR_ROW_N] = {
"上电次数", "计数范围", "计数可信", "计数写回", "复位原因",
"复位范围", "运行时长", "时长范围", "主站接入",
"发送帧数", "发送失败", "接收字节", "统计范围",
};
/* 帧缓存:发布序号变化才整帧拷一次(同装置信息页口径) */
static ui_data_info_t s_info;
static uint32_t s_seq;
/* 函数定义区 */
/*
* 函数功能:取用最新装置信息帧(只在发布序号变化时整帧拷)
* 入口参数:无
* 返 回 值:1 - 有可用帧;0 - 首帧未到或本帧无效 uint8_t
* 限定条件:uiTask 绘制上下文
*/
static uint8_t rr_frame_ready(void) {
uint32_t now = ui_data_info_seq();
if (now != s_seq) {
s_seq = now;
if (ui_data_info(&s_info) != 0) {
(void)memset(&s_info, 0, sizeof(s_info));
return 0u;
}
}
return (s_info.valid != 0u) ? 1u : 0u;
}
/*
* 函数功能:开页复位缓存(强制下一次绘制重取最新帧,避免停在上一帧的计数上)
* 入口参数:无
* 返 回 值:无 void
* 限定条件:开页时由框架调用
*/
static void rr_init(void) {
s_seq = 0u;
(void)memset(&s_info, 0, sizeof(s_info));
}
/*
* 函数功能:复位原因编码 → 屏上中文(5 字以内,避免挤压值列)
* 入口参数:cause - 复位原因编码(RR_CAUSE_*) uint8_t
* 返 回 值:中文标签(Flash 字面量,恒非 NULL) const char *
* 限定条件:编码越界(含 SD2506 诊断混进来的位)一律落"未知",不猜
*/
static const char *rr_cause_str(uint8_t cause) {
const char *p;
switch (cause) {
case RR_CAUSE_IWDG: p = "独立看门狗"; break;
case RR_CAUSE_WWDG: p = "窗口看门狗"; break;
case RR_CAUSE_SFT: p = "软件复位"; break;
case RR_CAUSE_POR: p = "上电复位"; break;
case RR_CAUSE_PIN: p = "引脚复位"; break;
case RR_CAUSE_BOR: p = "掉电复位"; break;
default: p = "未知"; break;
}
return p;
}
/*
* 函数功能:上电次数可信度编码 → 屏上中文
* 入口参数:state - 可信度编码(RR_SEQ_*) uint8_t
* 返 回 值:中文标签(Flash 字面量,恒非 NULL) const char *
* 限定条件:编码越界一律"未知"
* 函数说明:RESTARTED 的屏上话是"掉电重开"——它指的是 RTC 电池域掉过电
* (计数值本身还在,但跨不掉电那段已经不可信),不是"整机重启过"
*/
static const char *rr_seq_str(uint8_t state) {
const char *p;
switch (state) {
case RR_SEQ_FRESH: p = "首次启用"; break;
case RR_SEQ_CONTINUED: p = "延续"; break;
case RR_SEQ_RESTARTED: p = "掉电重开"; break;
default: p = "未知"; break;
}
return p;
}
/*
* 函数功能:格式化运行时长(本次开机以来,秒)
* 入口参数:sec - 秒数 uint32_t
* a_buf - 输出缓冲 char *
* a_cap - 缓冲容量 uint32_t
* 返 回 值:无 void
* 限定条件:a_buf/a_cap 有效
* 函数说明:>= 1 天走 "%ud%02u:%02u"(ASCII 小写 d,避免为"天"字扩字模);
* < 1 天走 "%02u:%02u:%02u"。与装置信息页同一记法,两页不许各写一套
*/
static void rr_fmt_uptime(uint32_t sec, char *a_buf, uint32_t a_cap) {
uint32_t day = sec / RR_SEC_PER_DAY;
uint32_t rem = sec % RR_SEC_PER_DAY;
if (day > 0u) {
(void)lv_snprintf(a_buf, a_cap, "%luud%02lu:%02lu",
(unsigned long)day, (unsigned long)(rem / 3600u),
(unsigned long)((rem % 3600u) / 60u));
} else {
(void)lv_snprintf(a_buf, a_cap, "%02lu:%02lu:%02lu",
(unsigned long)(rem / 3600u),
(unsigned long)((rem % 3600u) / 60u),
(unsigned long)(rem % 60u));
}
}
/*
* 函数功能:总行数(固定 12 行,分 2 页)
* 入口参数:无
* 返 回 值:行数 uint16_t
* 限定条件:uiTask 绘制上下文(经框架回调)
*/
static uint16_t rr_count(void) {
return RR_ROW_N;
}
/*
* 函数功能:逐行取名/值(13 行,见 s_names 表)
* 入口参数:row - 行下标 uint16_t
* name - 名输出缓冲 char *
* value - 值输出缓冲 char *
* 返 回 值:无 void
* 限定条件:uiTask 绘制上下文;首帧未到时数值行一律 "--"(不显示 0 冒充有数)
*/
static void rr_refresh(uint16_t row, char *name, char *value) {
const uint32_t cap = (uint32_t)UI_BUF_STRLEN;
uint8_t ready;
if (row >= RR_ROW_N) {
value[0] = (char)0;
return;
}
(void)lv_snprintf(name, cap, "%s", s_names[row]);
ready = rr_frame_ready();
if (ready == 0u) {
(void)lv_snprintf(value, cap, "%s", RR_INVALID);
return;
}
switch (row) {
case 0u: /* 上电次数 */
if ((s_info.boot_ready == 0u) || (s_info.boot_seq_state == RR_SEQ_UNKNOWN)) {
(void)lv_snprintf(value, cap, "%s", RR_INVALID);
} else {
(void)lv_snprintf(value, cap, "%lu", (unsigned long)s_info.boot_count);
}
break;
case 1u: /* 计数范围 */
(void)lv_snprintf(value, cap, "%s", (s_info.boot_ready == 0u) ? "未知" : "自电池周期");
break;
case 2u: /* 计数可信(四态;未初始化落"未知") */
(void)lv_snprintf(value, cap, "%s", rr_seq_str(s_info.boot_seq_state));
break;
case 3u: /* 计数写回 */
(void)lv_snprintf(value, cap, "%s",
(s_info.boot_write_failed != 0u) ? "未写回" : "正常");
break;
case 4u: /* 复位原因 */
(void)lv_snprintf(value, cap, "%s", rr_cause_str(s_info.rst_cause));
break;
case 5u: /* 复位范围 */
(void)lv_snprintf(value, cap, "%s", "本次开机");
break;
case 6u: /* 运行时长 */
rr_fmt_uptime(s_info.uptime_s, value, cap);
break;
case 7u: /* 时长范围 */
(void)lv_snprintf(value, cap, "%s", "本次开机");
break;
case 8u:
(void)lv_snprintf(value, cap, "%lu", (unsigned long)s_info.iec104_conn_up);
break;
case 9u:
(void)lv_snprintf(value, cap, "%lu", (unsigned long)s_info.iec104_apdu_tx);
break;
case 10u:
(void)lv_snprintf(value, cap, "%lu", (unsigned long)s_info.iec104_tx_fail);
break;
case 11u:
(void)lv_snprintf(value, cap, "%lu", (unsigned long)s_info.iec104_rx_bytes);
break;
default: /* 统计范围 */
(void)lv_snprintf(value, cap, "%s", "本次开机");
break;
}
}
/*
* 页面描述符(外部链接:生成物 ui_page_registry.c 按菜单树 #page=runreport 绑定引用):
* 只读列表页——selectable=1 走真分页(13 行 / UI_LIST_ROWS 行 = 2 页,页脚真实页码);
* band_h=UI_ROW_BAND_H(选中行黑字须配白带);无写入口,故无保存态/无三态
*/
const content_page_def_t ui_page_runreport_desc = {
.id = "runreport",
.title = "运行报告",
.selectable = 1u,
.top_y = UI_LIST_TOP,
.pitch = UI_ROW_PITCH,
.band_h = UI_ROW_BAND_H,
.text_dy = 0,
.left_x = UI_LIST_LEFT_X,
.right_x = UI_LIST_RIGHT_X,
.rows_per_page = UI_LIST_ROWS,
.count_cb = rr_count,
.init_cb = rr_init,
.refresh = rr_refresh,
};
+27
View File
@@ -0,0 +1,27 @@
/*
* 模块名称:UI Page RunReport(运行报告内容页)
* 模块功能:运行报告叶子节点(node 41,父节点「记录查询」)的内容页数据——12 行只读
* 统计(上电次数/计数范围/计数写回/复位原因/复位范围/运行时长/时长范围/
* 主站接入/发送帧数/发送失败/接收字节/统计范围),数据全部取自 ui_data 装置
* 信息帧(App 层装配,本文件零 App include);向框架 ui_content_page 提供
* 页面描述符(零 LVGL 对象)
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
* 作者:DTU 项目组
* 创建日期:2026-10-28
* 修改记录:
* v1.0 2026-10-28 DTU 项目组 创建(UI 补齐「运行报告」;数据面 = 道G task-12 的
* boot_stats 开机账本 + iec104_serv 观测计数 + 现成
* uptime_s,本批只做搬运与屏上文案)
*/
#ifndef UI_PAGE_RUNREPORT_H
#define UI_PAGE_RUNREPORT_H
#include "ui_content_page.h"
/*
* 页面描述符(Flash const):运行报告页(描述符 .id = "runreport");
* 由生成物 ui_page_registry.c 按菜单树 #page=runreport 注记绑定引用(定义于 ui_page_runreport.c)
*/
extern const content_page_def_t ui_page_runreport_desc;
#endif /* UI_PAGE_RUNREPORT_H */
+79
View File
@@ -0,0 +1,79 @@
/*
* 模块名称:UI Page 保护启动(保护启动内容页)
* 模块功能:保护启动叶子节点(node 37,父节点「记录查询」)的内容页数据——动态列表,
* 每条记录 2 行(偶数行 = 时间戳、奇数行 = 描述),可移选分页;数据经 ui_w_records
* 注入 reader 取自 sys_log(/log/start.log,容量上限 1024 条,满时删除重建);
* 空日志显示单条伪行"无记录";向框架 ui_content_page 提供页面描述符(零 LVGL 对象)
* 记录口径(本文件只读显示、不实现写入方;权威表 App/log/README.md §五类记录):
* 触发判据 = 元件 picked 上升沿(越限电平,早于或等于动作);
* 写入点 = App/task/protect_task.c 的 s_log_active_edge();
* "记录类型 = 日志 ID 本身"(一类记录一个文件,记录体内没有类型字段位,
* Lead 裁定 2026-10-26)——本页只读 start.log 一个文件,不做跨文件混排。
* 台架待补(不在本批,已登记 docs/任务规划/登记簿.md):真 NAND 上真实记录的翻页读取、
* 掉电后记录保持、清除记录后本页归零这三件事都要上板复核;模拟器侧该文件
* 没有写入方,像素黄金只能验空态"无记录"。
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
* 作者:DTU 项目组
* 创建日期:2026-10-28
* 修改记录:
* v1.0 2026-10-28 DTU 项目组 创建(UI 补齐「记录 5 页」:照 ui_page_runlog.c 同构,
* 分页 / 空态 / 按实例读盘缓存全部复用 ui_w_records,
* 本文件不重复实现,也不改共享组件)
*/
/* 头文件包含区 */
#include "ui_page_start.h"
#include "ui_w_records.h"
#include "ui_tokens.h"
/* 静态变量定义区 */
/*
* 记录页薄跳板:内容全部走 ui_w_records 共享组件(W6 合并先例)。
* 实例 s_rec 携带记录源编号与**本实例自己的**读盘缓存——多页共用组件代码,
* 但缓存不得共享,否则切页会命中上一记录号而显示另一页的陈旧行(静默错数据)。
*/
static ui_w_records_t s_rec = { UI_W_REC_LOG_START };
/*
* 函数功能:总行数(动态;每条记录 2 行,空日志 = 单条伪行"无记录")
* 入口参数:无
* 返 回 值:总行数 uint16_t
* 限定条件:uiTask 绘制上下文(经框架回调)
*/
static uint16_t pg_count(void) {
return ui_w_records_count(&s_rec);
}
/*
* 函数功能:逐行取数(转调共享组件;偶数行 = 时间戳、奇数行 = 描述)
* 入口参数:row - 全局行下标 uint16_t
* name - 名输出缓冲 char *
* value - 值输出缓冲(本组件恒写空串) char *
* 返 回 值:无 void
* 限定条件:uiTask 绘制上下文(经框架回调)
*/
static void pg_refresh(uint16_t row, char *name, char *value) {
ui_w_records_refresh(&s_rec, row, name, value);
}
/*
* 页面描述符(外部链接:生成物 ui_page_registry.c 按菜单树 #page=start 绑定引用):
* 动态列表页——每记录 2 行、UI_LIST_ROWS 行/页;band_h=UI_ROW_BAND_H(同 AC/DC 约定:
* selectable 页选中行黑字必须配白带,band_h=0 会致选中行不可见)
*/
const content_page_def_t ui_page_start_desc = {
.id = "start",
.title = "保护启动",
.selectable = 1u,
.top_y = UI_LIST_TOP,
.pitch = UI_ROW_PITCH,
.band_h = UI_ROW_BAND_H,
.text_dy = 0,
.left_x = UI_LIST_LEFT_X,
.right_x = UI_LIST_RIGHT_X,
.rows_per_page = UI_LIST_ROWS,
.count_cb = pg_count,
.refresh = pg_refresh,
};
+26
View File
@@ -0,0 +1,26 @@
/*
* 模块名称:UI Page 保护启动(保护启动内容页)
* 模块功能:保护启动叶子节点(node 37,父节点「记录查询」)的内容页数据——动态列表,
* 每条记录 2 行(偶数行 = 时间戳、奇数行 = 描述),可移选分页;数据经
* ui_w_records 注入 reader 取自 sys_log(/log/start.log;本文件不 include
* sys_log.h——task-6 分层收紧);空日志显示单条伪行"无记录";
* 向框架 ui_content_page 提供页面描述符(零 LVGL 对象)
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
* 作者:DTU 项目组
* 创建日期:2026-10-28
* 修改记录:
* v1.0 2026-10-28 DTU 项目组 创建(UI 补齐「记录 5 页」;记录层与写入点已由
* 道F task-10 / 道G task-12 落地,本批只补页面)
*/
#ifndef UI_PAGE_START_H
#define UI_PAGE_START_H
#include "ui_content_page.h"
/*
* 页面描述符(Flash const):保护启动页(描述符 .id = "start");
* 由生成物 ui_page_registry.c 按菜单树 #page=start 注记绑定引用(定义于 ui_page_start.c)
*/
extern const content_page_def_t ui_page_start_desc;
#endif /* UI_PAGE_START_H */
+79
View File
@@ -0,0 +1,79 @@
/*
* 模块名称:UI Page 遥控记录(遥控记录内容页)
* 模块功能:遥控记录叶子节点(node 38,父节点「记录查询」)的内容页数据——动态列表,
* 每条记录 2 行(偶数行 = 时间戳、奇数行 = 描述),可移选分页;数据经 ui_w_records
* 注入 reader 取自 sys_log(/log/yk.log,容量上限 256 条,满时删除重建);
* 空日志显示单条伪行"无记录";向框架 ui_content_page 提供页面描述符(零 LVGL 对象)
* 记录口径(本文件只读显示、不实现写入方;权威表 App/log/README.md §五类记录):
* 触发判据 = 104 遥控的选择 / 执行 / 拒绝(含未知类型与参数越界);
* 写入点 = App/protocol/iec104/iec104_pts.c 的遥控段;
* "记录类型 = 日志 ID 本身"(一类记录一个文件,记录体内没有类型字段位,
* Lead 裁定 2026-10-26)——本页只读 yk.log 一个文件,不做跨文件混排。
* 台架待补(不在本批,已登记 docs/任务规划/登记簿.md):真 NAND 上真实记录的翻页读取、
* 掉电后记录保持、清除记录后本页归零这三件事都要上板复核;模拟器侧该文件
* 没有写入方,像素黄金只能验空态"无记录"。
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
* 作者:DTU 项目组
* 创建日期:2026-10-28
* 修改记录:
* v1.0 2026-10-28 DTU 项目组 创建(UI 补齐「记录 5 页」:照 ui_page_runlog.c 同构,
* 分页 / 空态 / 按实例读盘缓存全部复用 ui_w_records,
* 本文件不重复实现,也不改共享组件)
*/
/* 头文件包含区 */
#include "ui_page_yk.h"
#include "ui_w_records.h"
#include "ui_tokens.h"
/* 静态变量定义区 */
/*
* 记录页薄跳板:内容全部走 ui_w_records 共享组件(W6 合并先例)。
* 实例 s_rec 携带记录源编号与**本实例自己的**读盘缓存——多页共用组件代码,
* 但缓存不得共享,否则切页会命中上一记录号而显示另一页的陈旧行(静默错数据)。
*/
static ui_w_records_t s_rec = { UI_W_REC_LOG_YK };
/*
* 函数功能:总行数(动态;每条记录 2 行,空日志 = 单条伪行"无记录")
* 入口参数:无
* 返 回 值:总行数 uint16_t
* 限定条件:uiTask 绘制上下文(经框架回调)
*/
static uint16_t pg_count(void) {
return ui_w_records_count(&s_rec);
}
/*
* 函数功能:逐行取数(转调共享组件;偶数行 = 时间戳、奇数行 = 描述)
* 入口参数:row - 全局行下标 uint16_t
* name - 名输出缓冲 char *
* value - 值输出缓冲(本组件恒写空串) char *
* 返 回 值:无 void
* 限定条件:uiTask 绘制上下文(经框架回调)
*/
static void pg_refresh(uint16_t row, char *name, char *value) {
ui_w_records_refresh(&s_rec, row, name, value);
}
/*
* 页面描述符(外部链接:生成物 ui_page_registry.c 按菜单树 #page=yk 绑定引用):
* 动态列表页——每记录 2 行、UI_LIST_ROWS 行/页;band_h=UI_ROW_BAND_H(同 AC/DC 约定:
* selectable 页选中行黑字必须配白带,band_h=0 会致选中行不可见)
*/
const content_page_def_t ui_page_yk_desc = {
.id = "yk",
.title = "遥控记录",
.selectable = 1u,
.top_y = UI_LIST_TOP,
.pitch = UI_ROW_PITCH,
.band_h = UI_ROW_BAND_H,
.text_dy = 0,
.left_x = UI_LIST_LEFT_X,
.right_x = UI_LIST_RIGHT_X,
.rows_per_page = UI_LIST_ROWS,
.count_cb = pg_count,
.refresh = pg_refresh,
};
+26
View File
@@ -0,0 +1,26 @@
/*
* 模块名称:UI Page 遥控记录(遥控记录内容页)
* 模块功能:遥控记录叶子节点(node 38,父节点「记录查询」)的内容页数据——动态列表,
* 每条记录 2 行(偶数行 = 时间戳、奇数行 = 描述),可移选分页;数据经
* ui_w_records 注入 reader 取自 sys_log(/log/yk.log;本文件不 include
* sys_log.h——task-6 分层收紧);空日志显示单条伪行"无记录";
* 向框架 ui_content_page 提供页面描述符(零 LVGL 对象)
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
* 作者:DTU 项目组
* 创建日期:2026-10-28
* 修改记录:
* v1.0 2026-10-28 DTU 项目组 创建(UI 补齐「记录 5 页」;记录层与写入点已由
* 道F task-10 / 道G task-12 落地,本批只补页面)
*/
#ifndef UI_PAGE_YK_H
#define UI_PAGE_YK_H
#include "ui_content_page.h"
/*
* 页面描述符(Flash const):遥控记录页(描述符 .id = "yk");
* 由生成物 ui_page_registry.c 按菜单树 #page=yk 注记绑定引用(定义于 ui_page_yk.c)
*/
extern const content_page_def_t ui_page_yk_desc;
#endif /* UI_PAGE_YK_H */
+1 -1
View File
@@ -52,7 +52,7 @@ static const char *const s_type_name[UI_W_SOE_T_COUNT] = {
"压板投入", /* 4 软压板投入 */
"采样闭锁", /* 5 采样故障闭锁 */
"采样恢复", /* 6 采样故障恢复 */
"未标定闭锁", /* 7 未标定闭锁(照 App/log/soe_rec.h 与 数据可信 卡5 的原词,
"未标定闭锁", /* 7 未标定闭锁(照 App/log/soe_rec.h 与「数据可信」未标定即闭锁的原词,
* 不缩成"标定闭锁"——那个写法可以读成"把标定闭锁了",
* 而这一行要说的是"因未标定而闭锁",一字之差含义相反) */
"标定复归", /* 8 标定复归 */