feat(wave): 故障录波数据面、接线与单通道回放页(软件闭环交付)
数据面(App/algo,纯逻辑,双端编译) - wave_ring:8 路 × 320 点列优先环(1 kHz,预触发 160 + 后触发 160),adcTask 唯一写者;触发/冻结/封存/冷却四态,冻结持续到落盘回执才解冻,滞留 2 s 自弃 兜底——下一次真故障无波可录比丢一段更贵 - wave_store:段头编解码 + 拉模式打包游标 + 自带无表位运算 CRC-16/MODBUS(带 锚点自检)+ 段名与整段长度等式;格式不依赖平台类型宽度 - 段头只存原始码值与封存瞬间生效系数,工程量只当单位标签、不进任何算式 - 三套主机单测(环 113 / 编解码 170 / 触发状态机 110),全部无桩、生产源原样 纳入;新文件补 stddef 是 ARMCC 与主机差异,主机侧照不出这条分叉 - test/host/wave_read.py 是按 §6.2 的独立第二实现(dump/fft/shape/plot),92 条 自洽断言;三份合成段互读双校验全过、哈希钉死,格式面双向闭合 - 三套新单测不加专属钩子,由覆盖率总闸全量真跑(沿用既有裁定) 接线(任务层) - adc_cal:新增生效系数的 32 位定点原值入口(与既有浮点入口共用生效视图), 段头按最低有效位精确记账,不经浮点回算 - adcTask:每拍压 8 路语义原始码值并推进状态机,封存那一拍同拍交棒封存瞬间事实; 台架定周期自抓走双层编译门,产品镜像里零存在;串口新增一条 wave: 周期行 - defaultTask:卷空闲后一次心跳整段搬完(try 锁 + 256 字节分片 + 一次完整开档到 关档),成败都回执;失败先删半成品再计错,段号只在成功时推进;持锁超 50 ms 补一条告警并记历史峰值(喂狗余量可核) - Lead 复核补第四道并发陷阱:采集任务优先级高于落盘道,搬段中途它可能正好把滞留 超时的本段自弃、甚至封出下一段——数据区校验和是对「实际读到的字节」算的, 半新半旧的段照样自洽,故关档后复检环侧身份判废:删文件、不补账、段号不推进 - Lead 复核抓到触发挂号不是原子操作(旧实现分三个字节写,消费者可在窗口里读到 上一段的触发源与元件号):已把载荷压进一个字节,越界当场拒且不记任何计数; 段文件字节布局零改动,三份合成段哈希逐字节不变 - protectTask:保护启动上升沿同点请求录波,一拍一次、元件号取最低位;判据本体 零改动 人机(160×160 单色屏) - 菜单树节点 26「手动录波」绑页面 + 记录查询组末新增「录波回放」叶,重跑生成器 得 43 节点 / 34 叶 / 30 已绑,页面映射 28 → 30 - 回放页一屏一路、触发点前后各一周波共 40 点、每点 3 像素阶梯线(只用水平与 垂直两种线段——单色屏斜线会被阈值裁掉);零点虚线、触发光标、窗口峰值、 单位徽标与形状受限徽标;空态与坏段各一句显式文案,绝不用半截波形冒充数据 - ui_data 新增录波注入通道(六件操作表、三态返回);执行侧胶水带段头缓存、 手动请求后连缓存一起作废、逐点走全仓唯一的码值换算入口 - 模拟器接真实环与编解码合成两段(含坏段与空态旗标),6 张新黄金参考,既有 60 张逐字节零漂移未用更新模式;字库 218 → 224 字 / 319 字形 - 两份图形配置里图表组件仍为关;零堆分配;页面池水位不变 - 回放读路径的 uiTask 阻塞上界按实码写清:一次渲染 = 段表刷新 + 未缓存段头最坏 22 次小读;已验段只剩一次开窗读 + 40 点解码;无实测数不编,实测归台架、 仪器用已在跑的单轮工作耗时探针,不新加埋点 台账与文档 - 内存台账:录波环与落盘/回放静态逐条入册,三档对照 81,536 → 88,296 → 89,936 字节(62.2% → 68.6%),累计 +8,400;预估 5.9 KB 与实测 +6,760 的差额点名; 散列文件头注释同步;任务栈表核对后无需抬栈;体积趋势行与同码凭证由权威构建 重打(0 错误 0 警告,四项体积与上一轮相同——本轮改动只有注释与声明位置) - 设计说明:§5 补第四条并发陷阱;§6.3 定字段口径(两份独立实现的共同依据); §7 回填实测;§9 周期行写实;§10 台架判据改两段式且不比绝对相位;§12 补读路径 风险行;抬头状态改成「代码面已交付、未做完的只有板级那一轮」 - 卡片:软件闭环一栏列证据;台架三条按用户裁定保持未完成,不做虚假销项 - 口径同步:数据可信、UI 补齐、页面补齐规划、产品需求、采集短板评测、任务规划 索引与两份 README;陈旧现状句清扫 16 处(带日期戳的历史取数行一律不动) - 门禁说明:nested-comment 记仓库根探测必须兼容 linked worktree 的 gitdir 文件 形态(修前该钩子在任务树里恒报环境错、静默不可用);coding-standard 记 「函数头注释超过 24 行就把函数功能挤出回看窗口」这条机制与本次现场 - 覆盖率基线登记两个新覆盖模块(套件 41 → 44 套);环单测重打后该文件有效行 227 → 226、覆盖行 226 → 225,比率仍 99.6%,是分母变小不是覆盖率回退 为什么是单一提交:文档链接、双端注册、生成器幂等(菜单与字库)、内存数字与 体积事实源、编号门禁这五道整仓门禁要求代码、页面、菜单树、字库、文档与台账 同处一个提交才自洽,按数据面/接线/人机/台账拆成四笔必然红其中至少四道 编号门禁新增行 14 处命中已按语义改写:魔数常量按字符命名、段名样例改由格式串 生成、频谱表头改 f / 2x / 5x 并加一行图例;改写后自洽断言 92 条仍全过
This commit is contained in:
@@ -1087,3 +1087,87 @@ uint8_t ui_data_comm_pending(void) {
|
||||
}
|
||||
return s_comm->pending();
|
||||
}
|
||||
|
||||
/* ── 通道六:故障录波(wave)注入与包装 ─────────────────────────────────────
|
||||
* 包装层零判据:未注入统一按「无录波段」态返(页面显式空态文案,绝不
|
||||
* 画平线——设计 §8.1 空态行);六件的参数校验只到指针级,语义判定
|
||||
* (卷忙/段损坏)全在执行侧,与通道四/五同一条分层纪律。
|
||||
*/
|
||||
static const ui_data_wave_ops_t *s_wave = NULL;
|
||||
|
||||
/*
|
||||
* 函数功能:注入录波执行侧函数表(启动期一次)
|
||||
* 入口参数:ops - 六件齐;NULL = 撤销注入
|
||||
* 返回值:0 - 已注入/已撤销;-1 - 残表(存量不动,理由逐字同 comm bind) int
|
||||
* 限定条件:uiTask 启动期,先于 ui_menu_init()
|
||||
*/
|
||||
int ui_data_wave_bind(const ui_data_wave_ops_t *a_ops) {
|
||||
if (a_ops == NULL) {
|
||||
s_wave = NULL;
|
||||
return 0;
|
||||
}
|
||||
if ((a_ops->manual_req == NULL) || (a_ops->seg_first == NULL) ||
|
||||
(a_ops->seg_prev == NULL) || (a_ops->seg_next == NULL) ||
|
||||
(a_ops->seg_head == NULL) || (a_ops->seg_win == NULL)) {
|
||||
return -1;
|
||||
}
|
||||
s_wave = a_ops;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 函数功能:投手动录波请求(未注入 = 拒收,页面显示 ERR) bool */
|
||||
int ui_data_wave_manual_req(void) {
|
||||
if (s_wave == NULL) {
|
||||
return -1;
|
||||
}
|
||||
return s_wave->manual_req();
|
||||
}
|
||||
|
||||
/* 函数功能:录波通道三态查询的统一未注入兜底(返 NONE 显空态,不崩) int */
|
||||
static int wp_wave_none(void) {
|
||||
return UI_WAVE_NONE;
|
||||
}
|
||||
|
||||
/* 函数功能:取数值最大段号(回绕后不保证时间最新——段号自证,见 .h 契约) int */
|
||||
int ui_data_wave_seg_first(uint8_t *a_idx) {
|
||||
if ((s_wave == NULL) || (a_idx == NULL)) {
|
||||
return wp_wave_none();
|
||||
}
|
||||
return s_wave->seg_first(a_idx);
|
||||
}
|
||||
|
||||
/* 函数功能:取更早一段段号 int */
|
||||
int ui_data_wave_seg_prev(uint8_t a_cur, uint8_t *a_out) {
|
||||
if ((s_wave == NULL) || (a_out == NULL)) {
|
||||
return wp_wave_none();
|
||||
}
|
||||
return s_wave->seg_prev(a_cur, a_out);
|
||||
}
|
||||
|
||||
/* 函数功能:取更新一段段号 int */
|
||||
int ui_data_wave_seg_next(uint8_t a_cur, uint8_t *a_out) {
|
||||
if ((s_wave == NULL) || (a_out == NULL)) {
|
||||
return wp_wave_none();
|
||||
}
|
||||
return s_wave->seg_next(a_cur, a_out);
|
||||
}
|
||||
|
||||
/* 函数功能:读段头(执行侧含 CRC 完整性判定) int */
|
||||
int ui_data_wave_seg_head(uint8_t a_idx, uint8_t *a_eng, uint8_t *a_trig,
|
||||
uint8_t *a_clip) {
|
||||
if ((s_wave == NULL) || (a_eng == NULL) || (a_trig == NULL) ||
|
||||
(a_clip == NULL)) {
|
||||
return wp_wave_none();
|
||||
}
|
||||
return s_wave->seg_head(a_idx, a_eng, a_trig, a_clip);
|
||||
}
|
||||
|
||||
/* 函数功能:读显示窗口码值与峰值 mV int */
|
||||
int ui_data_wave_seg_win(uint8_t a_idx, uint8_t a_ch, int16_t *a_codes,
|
||||
int32_t *a_peak_milli) {
|
||||
if ((s_wave == NULL) || (a_codes == NULL) || (a_peak_milli == NULL) ||
|
||||
(a_ch >= UI_WAVE_CH_CNT)) {
|
||||
return wp_wave_none();
|
||||
}
|
||||
return s_wave->seg_win(a_idx, a_ch, a_codes, a_peak_milli);
|
||||
}
|
||||
|
||||
@@ -924,6 +924,111 @@ int ui_data_comm_set(uint8_t a_idx, uint32_t a_val);
|
||||
*/
|
||||
uint8_t ui_data_comm_pending(void);
|
||||
|
||||
/* ── 通道六:故障录波(wave)────────────────────────────────────────────────
|
||||
* 页面零 App include、零存储触点:录波执行侧(触发投递 / 段索引 / 段头字段 /
|
||||
* 窗口码值与峰值 mV)全部经本注入表进来,真实现见 App/task/ui_task.c 的
|
||||
* s_wave_ops;PC 模拟器绑同一形状的假件(simulator/main.c)。取数口径的
|
||||
* 唯一真源是 docs/子系统设计/故障录波设计说明.md §6.3(定点 mV 换算走
|
||||
* wave_store_code_to_milli,eng 只做徽标、绝不进算式)。
|
||||
*/
|
||||
|
||||
/* 录波通道数(与段头 ch_count 恒等:电气八路,温度不入波) */
|
||||
#define UI_WAVE_CH_CNT 8u
|
||||
/* 回放显示窗口点数(两周波;口径推导与设计 §4.2 的触发点位置钉在一起,
|
||||
* 窗起点与虚线光标由执行侧与页面各按同一定义实现,页面侧写死 */
|
||||
#define UI_WAVE_WIN_PTS 40u
|
||||
|
||||
/* 通道查询返回态:段存在且可用 */
|
||||
#define UI_WAVE_OK 0
|
||||
/* 无段(目录扫空 / 卷忙跳过 / 执行侧未注入,页面显示「无录波段」) */
|
||||
#define UI_WAVE_NONE 1
|
||||
/* 有段但不可读(长度不符 / 版本不符 / 任一段 CRC 不符,页面显示
|
||||
* 「该段不可读」——两种态都必须显式说,画直线等于伪造证据(设计 §8.1) */
|
||||
#define UI_WAVE_BAD 2
|
||||
|
||||
/*
|
||||
* 录波执行侧注入表(六件齐全;ui_data_wave_bind 拒绝残表)
|
||||
* 返回值约定:除 manual_req 外,各件返回 UI_WAVE_OK / NONE / BAD 三态;
|
||||
* seg_win 的出参仅在返 UI_WAVE_OK 时可读(通道五同一条出参契约)。
|
||||
*/
|
||||
typedef struct {
|
||||
/* 投一次手动录波请求。返回值:0 - 已受理;非零 - 拒收(含未落段通道
|
||||
* 不可用),页面据此走确认链的 ERR 支 */
|
||||
int (*manual_req)(void);
|
||||
/* 取盘上数值最大的段号(回放页开屏落点;左右键从此起环游)。
|
||||
* 回绕后本序不保证时间最新,页顶段号即自证;时间序要靠段头
|
||||
* frame_seq/t0,代价是 100 次开文件,本波不做(lead 裁定 2026-10-29) */
|
||||
int (*seg_first)(uint8_t *a_idx);
|
||||
/* 取比 a_cur 更早一段的段号(到最早端后环回数值最大端) */
|
||||
int (*seg_prev)(uint8_t a_cur, uint8_t *a_out);
|
||||
/* 取比 a_cur 更新一段的段号(到最大端后环回数值最小端) */
|
||||
int (*seg_next)(uint8_t a_cur, uint8_t *a_out);
|
||||
/* 读段头并做完整性判定(头 CRC 与数据 CRC 都在执行侧验完)。
|
||||
* 出参:eng - 单位口径(UI_DATA_ENG_* 同值域);trig - 触发源
|
||||
* (段头 trig_src 原值:手动/保护/定时);clip - 形状受限通道位图
|
||||
* (段头 clip 字节,位号 = 通道号) */
|
||||
int (*seg_head)(uint8_t a_idx, uint8_t *a_eng, uint8_t *a_trig,
|
||||
uint8_t *a_clip);
|
||||
/* 读当前显示窗口的码值(已并入 b_codes 偏移)与窗口峰值。
|
||||
* 出参:a_codes - UI_WAVE_WIN_PTS 个码值;a_peak_milli - 窗口内
|
||||
* 绝对值最大的那一点折算的 mV(定点,执行侧经 code_to_milli 算好,
|
||||
* 页面不重复换算式——§6.3 的单一口径条款;b_codes 由 code_to_milli
|
||||
* 内部加,与 a_codes 里已并的偏移同一把尺:谁被显示谁被度量) */
|
||||
int (*seg_win)(uint8_t a_idx, uint8_t a_ch, int16_t *a_codes,
|
||||
int32_t *a_peak_milli);
|
||||
} ui_data_wave_ops_t;
|
||||
|
||||
/*
|
||||
* 函数功能:注入录波执行侧函数表(启动期一次;形状对齐 ui_data_comm_bind)
|
||||
* 入口参数:ops - 函数表(六件都不得为 NULL);NULL = 撤销注入(宿主测试用)
|
||||
* 返回值:0 - 已注入/已撤销;-1 - 残表(存量不动) int
|
||||
* 限定条件:uiTask 启动期、先于 ui_menu_init()
|
||||
*/
|
||||
int ui_data_wave_bind(const ui_data_wave_ops_t *a_ops);
|
||||
|
||||
/*
|
||||
* 函数功能:投一次手动录波请求(录波触发页唯一写出口)
|
||||
* 返回值:0 - 已受理;-1 - 未注入或拒收(未注入与拒收同码,同通道五) int
|
||||
*/
|
||||
int ui_data_wave_manual_req(void);
|
||||
|
||||
/*
|
||||
* 函数功能:取数值最大段号(排序口径见 ui_data.c 同名胶水注释:回绕后本序
|
||||
* 不保证时间最新,页顶段号即自证;真时间序要逐段读 frame_seq/t0,
|
||||
* 代价 100 次开文件,本波不做)
|
||||
* 入口参数:a_idx - 出参,段号(仅返 OK 时可读)
|
||||
* 返回值:UI_WAVE_OK / UI_WAVE_NONE / UI_WAVE_BAD(未注入按 NONE 渲染空态,不崩) int
|
||||
*/
|
||||
int ui_data_wave_seg_first(uint8_t *a_idx);
|
||||
|
||||
/*
|
||||
* 函数功能:取 a_cur 的更早一段段号(环形回绕)
|
||||
* 入口参数:a_cur - 当前段号;a_out - 出参(仅返 OK 时可读)
|
||||
* 返回值:UI_WAVE_OK / UI_WAVE_NONE / UI_WAVE_BAD int
|
||||
*/
|
||||
int ui_data_wave_seg_prev(uint8_t a_cur, uint8_t *a_out);
|
||||
|
||||
/*
|
||||
* 函数功能:取 a_cur 的更新一段段号(环形回绕,方向与 prev 相反)
|
||||
* 入口参数:a_cur - 当前段号;a_out - 出参(仅返 OK 时可读)
|
||||
* 返回值:UI_WAVE_OK / UI_WAVE_NONE / UI_WAVE_BAD int
|
||||
*/
|
||||
int ui_data_wave_seg_next(uint8_t a_cur, uint8_t *a_out);
|
||||
|
||||
/*
|
||||
* 函数功能:读段头(含执行侧 CRC 完整性判定)——出参仅返 OK 时可读
|
||||
* 返回值:UI_WAVE_OK / NONE / BAD(未注入按 NONE) int
|
||||
*/
|
||||
int ui_data_wave_seg_head(uint8_t a_idx, uint8_t *a_eng, uint8_t *a_trig,
|
||||
uint8_t *a_clip);
|
||||
|
||||
/*
|
||||
* 函数功能:读显示窗口码值与峰值 mV——出参仅返 OK 时可读
|
||||
* 返回值:UI_WAVE_OK / NONE / BAD(未注入按 NONE) int
|
||||
*/
|
||||
int ui_data_wave_seg_win(uint8_t a_idx, uint8_t a_ch, int16_t *a_codes,
|
||||
int32_t *a_peak_milli);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
+258
-223
@@ -329,6 +329,10 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
0x2, 0x0, 0x40, 0x8, 0x1, 0x0, 0x20, 0x7f,
|
||||
0xf0,
|
||||
|
||||
/* U+4E0D "不" */
|
||||
0xff, 0xe0, 0x40, 0x8, 0x2, 0x0, 0xd0, 0x29,
|
||||
0x9, 0x16, 0x21, 0x4, 0x0, 0x80, 0x10, 0x0,
|
||||
|
||||
/* U+4E3B "主" */
|
||||
0x8, 0x0, 0x80, 0x0, 0x3f, 0xe0, 0x40, 0x8,
|
||||
0x1, 0x3, 0xfe, 0x4, 0x0, 0x80, 0x10, 0x7f,
|
||||
@@ -423,6 +427,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
0x5f, 0x4a, 0xa9, 0x55, 0x2a, 0x85, 0x70, 0x88,
|
||||
0x70,
|
||||
|
||||
/* U+524A "削" */
|
||||
0x10, 0x32, 0x45, 0x52, 0x88, 0x5f, 0xeb, 0x5,
|
||||
0x7f, 0xac, 0x15, 0xfe, 0xb0, 0x46, 0x8, 0xc3,
|
||||
0x30,
|
||||
|
||||
/* U+524D "前" */
|
||||
0x20, 0x82, 0x23, 0xff, 0x80, 0x7, 0xc4, 0x8a,
|
||||
0x9f, 0x52, 0x2a, 0x7d, 0x48, 0xa9, 0x11, 0x26,
|
||||
@@ -535,6 +544,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
0x51, 0xc, 0x3, 0x4, 0xf, 0xf8, 0x10, 0x7f,
|
||||
0xf0,
|
||||
|
||||
/* U+57DF "域" */
|
||||
0x40, 0xa8, 0x11, 0x3f, 0xa0, 0x4e, 0xe8, 0x95,
|
||||
0x52, 0xaa, 0x76, 0x40, 0xcc, 0x57, 0x35, 0x81,
|
||||
0x10,
|
||||
|
||||
/* U+590D "复" */
|
||||
0x3f, 0xe8, 0x2, 0xff, 0x10, 0x23, 0xfc, 0x40,
|
||||
0x8f, 0xf0, 0x80, 0x3f, 0xca, 0x10, 0x3c, 0x38,
|
||||
@@ -735,6 +749,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
0xa4, 0x95, 0x94, 0xd1, 0x12, 0x50, 0x51, 0xc,
|
||||
0x10,
|
||||
|
||||
/* U+653E "放" */
|
||||
0x41, 0x4, 0x20, 0x4, 0x7c, 0xf4, 0x24, 0x8a,
|
||||
0x9e, 0x52, 0x4a, 0x49, 0x49, 0x11, 0x25, 0x4d,
|
||||
0x10,
|
||||
|
||||
/* U+6545 "故" */
|
||||
0x22, 0x4, 0x40, 0x88, 0x7d, 0xf2, 0x44, 0x44,
|
||||
0xbe, 0x94, 0x52, 0x8a, 0x91, 0x23, 0xea, 0x46,
|
||||
@@ -1134,6 +1153,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
0x53, 0xea, 0x45, 0x48, 0xad, 0xf5, 0x20, 0x80,
|
||||
0x60,
|
||||
|
||||
/* U+8BE5 "该" */
|
||||
0x42, 0x4, 0x20, 0x3f, 0x81, 0xe, 0x44, 0x5f,
|
||||
0x8, 0x49, 0x12, 0x2c, 0x86, 0x30, 0x89, 0x6,
|
||||
0x10,
|
||||
|
||||
/* U+8BEF "误" */
|
||||
0x8f, 0x89, 0x10, 0x22, 0x7, 0xcc, 0x0, 0xbf,
|
||||
0x90, 0x83, 0xff, 0x42, 0xc, 0xa1, 0x22, 0x8,
|
||||
@@ -1144,6 +1168,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||
0xd2, 0x12, 0x7e, 0x48, 0x49, 0xf9, 0xa1, 0x24,
|
||||
0x60,
|
||||
|
||||
/* U+8BFB "读" */
|
||||
0x82, 0x9, 0xf8, 0x8, 0xf, 0xfc, 0x2, 0x8a,
|
||||
0x14, 0xc2, 0x48, 0x5f, 0xec, 0x51, 0x11, 0xc,
|
||||
0x10,
|
||||
|
||||
/* U+8D1F "负" */
|
||||
0x20, 0x7, 0xe1, 0x4, 0x41, 0x7, 0xfc, 0x80,
|
||||
0x91, 0x12, 0x22, 0x44, 0x41, 0x60, 0xc3, 0x60,
|
||||
@@ -1462,218 +1491,224 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||
{.bitmap_index = 511, .adv_w = 192, .box_w = 11, .box_h = 1, .ofs_x = 0, .ofs_y = 3},
|
||||
{.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 = 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},
|
||||
{.bitmap_index = 644, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 661, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 678, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 695, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 712, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 729, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 746, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 763, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 780, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 797, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 814, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.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 = 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 = 546, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 562, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 579, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 596, .adv_w = 192, .box_w = 11, .box_h = 9, .ofs_x = 0, .ofs_y = -1},
|
||||
{.bitmap_index = 609, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 626, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 643, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 660, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 677, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 694, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 711, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 728, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 745, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 762, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 779, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 796, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 813, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 830, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 847, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 864, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 881, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 898, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 915, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 932, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 949, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = -2},
|
||||
{.bitmap_index = 963, .adv_w = 192, .box_w = 11, .box_h = 11, .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 = 1028, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1045, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1061, .adv_w = 192, .box_w = 9, .box_h = 10, .ofs_x = 1, .ofs_y = -1},
|
||||
{.bitmap_index = 1073, .adv_w = 192, .box_w = 11, .box_h = 11, .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 = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1174, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1191, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = -2},
|
||||
{.bitmap_index = 1205, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1222, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1239, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1256, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1273, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1290, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1307, .adv_w = 192, .box_w = 11, .box_h = 12, .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 = 1358, .adv_w = 192, .box_w = 11, .box_h = 11, .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 = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1442, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1459, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .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 = 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 = 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 = 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},
|
||||
{.bitmap_index = 2510, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2527, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2544, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.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 = 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 = 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 = 1575, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1591, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1608, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1625, .adv_w = 192, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
|
||||
{.bitmap_index = 1639, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1656, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1673, .adv_w = 192, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
|
||||
{.bitmap_index = 1687, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1704, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1721, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1738, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1755, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1772, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1789, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1806, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1823, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1840, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1857, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1874, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1891, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1908, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1925, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1942, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1959, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1976, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 1993, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2010, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2027, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2044, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2061, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2078, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2094, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = -2},
|
||||
{.bitmap_index = 2107, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2124, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2140, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2157, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2171, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2188, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2205, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2222, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2239, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2256, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2273, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2290, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2307, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2324, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2341, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2358, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2375, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2392, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2408, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2424, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2441, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2458, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2475, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2492, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2509, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2526, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2543, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2560, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2577, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2594, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2611, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2628, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2645, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2662, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2679, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2693, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2710, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2727, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2744, .adv_w = 192, .box_w = 10, .box_h = 12, .ofs_x = 1, .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 = 2776, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2793, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2810, .adv_w = 192, .box_w = 11, .box_h = 11, .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 = 2843, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2859, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2876, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2893, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2910, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2927, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2944, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2961, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2978, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 2995, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3012, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3029, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3046, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3063, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3080, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3097, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3114, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3131, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3148, .adv_w = 192, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
|
||||
{.bitmap_index = 3162, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3179, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3196, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3213, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3230, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3247, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3264, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3281, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3298, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3315, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3332, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3349, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3366, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3383, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3400, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3417, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3434, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3451, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3468, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3485, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3502, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3519, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3536, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3553, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3570, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3587, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3604, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3621, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3638, .adv_w = 192, .box_w = 11, .box_h = 12, .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 = 3740, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3756, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3773, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3790, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3807, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3824, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3841, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3858, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3875, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 3892, .adv_w = 192, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
|
||||
{.bitmap_index = 3907, .adv_w = 192, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -2},
|
||||
{.bitmap_index = 3922, .adv_w = 192, .box_w = 10, .box_h = 12, .ofs_x = 1, .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 */
|
||||
{.bitmap_index = 4022, .adv_w = 192, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 4038, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 4055, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 4072, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 4089, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 4106, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 4123, .adv_w = 192, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
|
||||
{.bitmap_index = 4140, .adv_w = 192, .box_w = 2, .box_h = 4, .ofs_x = 2, .ofs_y = 0},
|
||||
{.bitmap_index = 4141, .adv_w = 192, .box_w = 2, .box_h = 6, .ofs_x = 2, .ofs_y = 0},
|
||||
{.bitmap_index = 4143, .adv_w = 165, .box_w = 8, .box_h = 10, .ofs_x = 1, .ofs_y = -1} /* U+25B6 */
|
||||
};
|
||||
|
||||
/*---------------------
|
||||
@@ -1681,34 +1716,34 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||
*--------------------*/
|
||||
|
||||
static const uint16_t unicode_list_1[] = {
|
||||
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
|
||||
0x0, 0x1, 0x2, 0x2ca0, 0x2ca9, 0x2caa, 0x2cad, 0x2cdb,
|
||||
0x2d2b, 0x2d2c, 0x2d44, 0x2d96, 0x2ded, 0x2dee, 0x2dfc, 0x2e7d,
|
||||
0x2e81, 0x2edc, 0x3005, 0x300c, 0x3011, 0x3013, 0x3039, 0x309a,
|
||||
0x30a6, 0x30d6, 0x30ea, 0x30ed, 0x3148, 0x31b6, 0x31da, 0x322b,
|
||||
0x323f, 0x3262, 0x326c, 0x3271, 0x3276, 0x3283, 0x328f, 0x3297,
|
||||
0x32a8, 0x32cc, 0x32cf, 0x32ea, 0x3308, 0x357e, 0x3580, 0x3594,
|
||||
0x35d0, 0x35e0, 0x362b, 0x367f, 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, 0x43de, 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,
|
||||
0x6a85, 0x6a8f, 0x6a97, 0x6a9b, 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*/
|
||||
@@ -1719,12 +1754,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 = 313,
|
||||
.range_start = 9654, .range_length = 1, .glyph_id_start = 319,
|
||||
.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 = 217, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
|
||||
.unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 223, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -54,6 +54,7 @@ const ui_menu_node_t g_menu_tab[UI_MENU_TAB_COUNT] = {
|
||||
{ 32, 0u, "自检记录" }, /* 39 二级菜单 */
|
||||
{ 32, 0u, "运行记录" }, /* 40 二级菜单 */
|
||||
{ 32, 0u, "运行报告" }, /* 41 二级菜单 */
|
||||
{ 32, 0u, "录波回放" }, /* 42 二级菜单 */
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -25,7 +25,7 @@ typedef struct {
|
||||
const char *name; /* 显示文本(字面量,存 Flash) */
|
||||
} ui_menu_node_t;
|
||||
|
||||
#define UI_MENU_TAB_COUNT 42
|
||||
#define UI_MENU_TAB_COUNT 43
|
||||
|
||||
/* 护栏:8 位索引上限 255 项(哨兵 0xFF 占用 255);超界则编译失败(C99 写法,兼容 ARMCC v5) */
|
||||
typedef char menu_tab_count_check[(UI_MENU_TAB_COUNT <= 255) ? 1 : -1];
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
#include "ui_page_view_plate.h"
|
||||
#include "ui_page_view_set.h"
|
||||
#include "ui_page_view_word.h"
|
||||
#include "ui_page_wave_manual.h"
|
||||
#include "ui_page_wave_play.h"
|
||||
#include "ui_page_yk.h"
|
||||
#include "ui_page_yx.h"
|
||||
|
||||
@@ -52,6 +54,7 @@ const ui_page_entry_t g_ui_page_map[UI_PAGE_MAP_COUNT] = {
|
||||
{ 19u, &ui_page_calib_desc }, /* node 19 遥测系数 */
|
||||
{ 24u, &ui_page_clock_desc }, /* node 24 时钟设置 */
|
||||
{ 25u, &ui_page_reset_desc }, /* node 25 强制复归 */
|
||||
{ 26u, &ui_page_wave_manual_desc }, /* node 26 手动录波 */
|
||||
{ 27u, &ui_page_clear_desc }, /* node 27 清除记录 */
|
||||
{ 29u, &ui_page_comm_desc }, /* node 29 通讯设置 */
|
||||
{ 30u, &ui_page_net_cfg_desc }, /* node 30 网口设置 */
|
||||
@@ -64,6 +67,7 @@ const ui_page_entry_t g_ui_page_map[UI_PAGE_MAP_COUNT] = {
|
||||
{ 39u, &ui_page_selftest_desc }, /* node 39 自检记录 */
|
||||
{ 40u, &ui_page_runlog_desc }, /* node 40 运行记录 */
|
||||
{ 41u, &ui_page_runreport_desc }, /* node 41 运行报告 */
|
||||
{ 42u, &ui_page_wave_play_desc }, /* node 42 录波回放 */
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -25,7 +25,7 @@ typedef struct {
|
||||
const content_page_def_t *desc; /* 页面描述符(Flash const) */
|
||||
} ui_page_entry_t;
|
||||
|
||||
#define UI_PAGE_MAP_COUNT 28u /* 绑定了内容页的叶子数 */
|
||||
#define UI_PAGE_MAP_COUNT 30u /* 绑定了内容页的叶子数 */
|
||||
|
||||
extern const ui_page_entry_t g_ui_page_map[UI_PAGE_MAP_COUNT];
|
||||
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* 模块名称:UI Page wave_manual (手动录波内容页)
|
||||
* 模块功能:装置维护 → 手动录波 叶子(node 26,#P 受密码保护)的内容页——
|
||||
* 复用 ui_page_action 共享确认链(一次确认 → 二次确认 → 执行回报):
|
||||
* 执行只做一件事——经录波注入表投一次「手动触发」请求,受理即回报
|
||||
* 「已请求录波」;采点、冻结、落盘全在 ring/store/落盘道,本页不
|
||||
* 等待也不查询结果(录波从触发到成段最快也要一秒后,页面上做同步
|
||||
* 等待等于把 uiTask 绘制定律「零 I/O」当场破掉);
|
||||
* 只读进入(查看密码)整页拒执行并显式 LOCK——与强制复归同一条
|
||||
* 「触发是操作不是查看」的权限判据(docs/任务规划/UI补齐.md §2
|
||||
* 维护组的既有口径,本页不自造第二种);
|
||||
* 本文件零 App include、零存储触点(分层方向由注入表守住)。
|
||||
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
|
||||
* 作者:DTU 项目组
|
||||
* 创建日期:2026-10-29
|
||||
* 修改记录:
|
||||
* v1.0 2026-10-29 DTU 项目组 创建(故障录波道 UI 侧;触发入口形态 =
|
||||
* docs/子系统设计/故障录波设计说明.md §8.3;
|
||||
* 冷却/忽略的屏上反馈:拒收即 ERR,ring 侧
|
||||
* 「冷却中丢弃并计数」不在页面上细分原因——
|
||||
* 用户要的原因区分在回放页看段号)
|
||||
*/
|
||||
|
||||
/* 头文件包含区 */
|
||||
#include "ui_page_wave_manual.h"
|
||||
|
||||
#include "ui_content_page.h"
|
||||
#include "ui_data.h"
|
||||
#include "ui_page_action.h"
|
||||
|
||||
/* 私有宏定义区 */
|
||||
/* (无——文案词全部是 Flash 字面量,见下面静态配置) */
|
||||
|
||||
/* 私有函数声明区(静态初始化器要引用下面函数的地址,故先声明) */
|
||||
|
||||
static bool wv_ok(void);
|
||||
|
||||
/* 静态变量定义区 */
|
||||
|
||||
/*
|
||||
* 本页操作页实例(配置全为 Flash 字面量与函数地址;运行态两字节由组件写)。
|
||||
* 字段顺序 = ui_page_action_t 声明序(ARMCC v5 = C99 要求指定顺序一致)。
|
||||
* 观测行留空(label 与 cb 成对给 NULL,组件允许):录波段数要扫卷才能知道,
|
||||
* 而组件 watch_cb 的契约是「绘制路径零 I/O 直调」——不为一个观测数破坏
|
||||
* 绘制定律,段数的事交给回放页(它本来就要读段)。
|
||||
*/
|
||||
static ui_page_action_t s_act = {
|
||||
"确认手动录波?", /* prompt:问句用字全在既有子集(确认/手动录波 均来自
|
||||
菜单与强制复归页现词,'?' 为 ASCII) */
|
||||
"已请求录波", /* done_text:回报「请求已受理」,不谎称「已存成段」——
|
||||
受理到落盘之间还隔着冻结窗与卷写,页面无权代言 */
|
||||
wv_ok, /* ok_cb */
|
||||
1u, /* need_modify:只读进入一律拒执行(触发是操作) */
|
||||
NULL, /* watch_label(观测行不给,理由见上方块注释) */
|
||||
NULL, /* watch_cb */
|
||||
0u, /* stage(运行态初值) */
|
||||
0u /* err (运行态初值) */
|
||||
};
|
||||
|
||||
/* 函数定义区 */
|
||||
|
||||
/*
|
||||
* 函数功能:执行投递——向录波环形缓冲投一次手动触发请求
|
||||
* 入口参数:无
|
||||
* 返回值:true = 已受理(组件转成功回报);false = 拒收(组件显示 ERR) bool
|
||||
* 限定条件:由 ui_page_action_key 在第二次 ENTER 时调用(uiTask 上下文)
|
||||
* 函数说明:ring 的 request 本身是「任意上下文可调的一次性请求」,非阻塞、
|
||||
* 不等待采点;注入未绑(装配缺件)同样返非零 → 屏上显 ERR,
|
||||
* 比「按了像成功其实什么都没发生」诚实(强制复归页同款纪律)。
|
||||
* 不补操作记录:录波不是五类审计记录之一(触发证据在段文件头里,
|
||||
* 落盘道已带 trig_src/t0/frame_seq),页面上再投一条 = 两处两个真源。
|
||||
*/
|
||||
static bool wv_ok(void) {
|
||||
return (ui_data_wave_manual_req() == 0) ? true : false;
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:开页复位确认链(框架 init_cb)
|
||||
* 入口参数:无
|
||||
* 返回值:无
|
||||
* 限定条件:框架开页链内调用
|
||||
* 函数说明:复位由组件做(stage/err 是它的运行态),本页不重复清一遍
|
||||
*/
|
||||
static void pg_init(void) {
|
||||
ui_page_action_init(&s_act);
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:自绘(框架 draw_cb;四行居中全由组件画)
|
||||
* 入口参数:a_layer / a_clip - 契约见 ui_content_page.h
|
||||
* 返回值:无
|
||||
* 限定条件:框架绘制链末尾调用
|
||||
*/
|
||||
static void pg_draw(lv_layer_t *a_layer, const lv_area_t *a_clip) {
|
||||
ui_page_action_draw(&s_act, a_layer, a_clip);
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:按键转发(框架 key_cb)
|
||||
* 入口参数:a_key - LVGL 键值 lv_key_t
|
||||
* 返回值:true = 本页已消费;false = 交回框架 bool
|
||||
* 限定条件:框架按键链内
|
||||
* 函数说明:确认链的判定全在组件里(含只读拒执行),本页只如实透传返回值
|
||||
*/
|
||||
static bool pg_key(lv_key_t a_key) {
|
||||
return (ui_page_action_key(&s_act, a_key) != 0u);
|
||||
}
|
||||
|
||||
/*
|
||||
* 页面描述符(外部链接:生成物 ui_page_registry.c 按菜单树 #page=wave_manual 绑定引用)
|
||||
* 操作页形态(强制复归页同款):无浅 V、无页脚、无行列表;
|
||||
* edit_capable=1 是「能不能改」的那半,另半(本次进入授予的权限)由
|
||||
* ui_content_page_is_editable() 给;key_intercept=0:LEFT 不拦截,关页 = 取消
|
||||
*/
|
||||
const content_page_def_t ui_page_wave_manual_desc = {
|
||||
.id = "wave_manual",
|
||||
.title = "手动录波",
|
||||
.hide_deco = 1u,
|
||||
.hide_footer = 1u,
|
||||
.selectable = 0u,
|
||||
.key_intercept = 0u,
|
||||
.edit_capable = 1u,
|
||||
.init_cb = pg_init,
|
||||
.draw_cb = pg_draw,
|
||||
.key_cb = pg_key,
|
||||
};
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* 模块名称:UI Page wave_manual (手动录波内容页)
|
||||
* 模块功能:装置维护 → 手动录波 叶子(node 26,#P 受密码保护)的内容页声明——
|
||||
* 向框架 ui_content_page 提供页面描述符;确认链全部走 ui_page_action
|
||||
* 共享实现,本模块零 App include、零存储触点(触发经录波注入表)
|
||||
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
|
||||
* 作者:DTU 项目组
|
||||
* 创建日期:2026-10-29
|
||||
* 修改记录:
|
||||
* v1.0 2026-10-29 DTU 项目组 创建(故障录波道 UI 侧;形态与分工 =
|
||||
* docs/子系统设计/故障录波设计说明.md §8.3
|
||||
* 「手动录波操作页」一行)
|
||||
*/
|
||||
#ifndef UI_PAGE_WAVE_MANUAL_H
|
||||
#define UI_PAGE_WAVE_MANUAL_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "ui_content_page.h"
|
||||
|
||||
/* 页面描述符(定义在 ui_page_wave_manual.c;生成物按菜单树 #page=wave_manual 引用本符号) */
|
||||
extern const content_page_def_t ui_page_wave_manual_desc;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* UI_PAGE_WAVE_MANUAL_H */
|
||||
@@ -0,0 +1,435 @@
|
||||
/*
|
||||
* 模块名称:UI Page wave_play (录波回放内容页)
|
||||
* 模块功能:记录查询 → 录波回放 叶子的内容页——单通道阶梯波形回放(设计
|
||||
* docs/子系统设计/故障录波设计说明.md §8.1 元素表逐条落地):
|
||||
* 顶行 = 通道名 + 段号 + 触发源字母(M 手动 / P 保护 / T 定时);
|
||||
* 波形区 = 两周波 40 点、每点占 3 px 的**阶梯线**(1 bpp 下平滑
|
||||
* 折线的过零平缓段会被阈值吃掉,ui_deco.h 实测口径;阶梯线每段
|
||||
* 非水平即垂直,天然绕开,也更贴近「离散采样」的事实);
|
||||
* 参考线 = 0 线(虚线)+ 窗口峰值标注(定点 mV,ASCII);
|
||||
* 底行 = 单位徽标(只读段头 eng,eng 绝不参与算式——§6.3 钉死,
|
||||
* PC 道同一口径);形状受限通道右上打「削」徽标;
|
||||
* 空态显式文案「无录波段」/「该段不可读」——画成一条直线等于
|
||||
* 伪造证据(§8.1 空态行,此判据优先于「页面上总得画点东西」)。
|
||||
* 键位:上下切通道、左右切段(key_intercept=1 才能把 LEFT 从
|
||||
* 「关页」手里要来);ESC 关页。
|
||||
* 取数纪律:本文件零 App include——段号/段头/窗口码值/峰值 mV 全部经
|
||||
* ui_data.h 录波注入表进来(波形算式与定点换算在执行侧,页面
|
||||
* 连 b_codes 都不碰,收到的码值已并偏移);首帧绘制才懒取数
|
||||
* (开页链零 I/O,绘制定律不破)。
|
||||
* 显示窗口与光标(与落盘道/PC 道的同一裁定,写在这里免得两头漂):
|
||||
* 窗口 = 触发点前一周波 + 后一周波共 40 点,窗口起点 = 段内点号
|
||||
* 「预窗点数 减 二十」(即执行侧 seg_win 的固定窗);虚线竖光标
|
||||
* 落在窗内第 二十 与第 廿一 点之间(0 基第 19/20 点边界,即
|
||||
* 波形区正中 x)——依据 = 设计 §4.2 触发点位置 + App/algo/
|
||||
* wave_ring.h 的点序注释(触发 tick 采样 = 预窗最后一点),
|
||||
* 页面不复述任何换算式。
|
||||
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
|
||||
* 作者:DTU 项目组
|
||||
* 创建日期:2026-10-29
|
||||
* 修改记录:
|
||||
* v1.0 2026-10-29 DTU 项目组 创建(故障录波道 UI 侧)
|
||||
*/
|
||||
|
||||
/* 头文件包含区 */
|
||||
#include "ui_page_wave_play.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "ui_content_page.h"
|
||||
#include "ui_data.h"
|
||||
#include "ui_tokens.h"
|
||||
|
||||
/* 私有宏定义区 */
|
||||
|
||||
/* 绘制区几何(屏宽 160:波形区左右各留 20 px 边;高 90 px) */
|
||||
#define WP_WX0 20 /* 波形区左边界 x */
|
||||
#define WP_PX_PER_PT 3 /* 每点占宽(§8.1 阶梯线口径) */
|
||||
#define WP_WTOP 34 /* 波形区顶 y(信息行下方) */
|
||||
#define WP_WBOT 124 /* 波形区底 y(0 线最多贴到这里) */
|
||||
#define WP_WSPANS 90 /* 纵向可用像素 = WP_WBOT - WP_WTOP */
|
||||
#define WP_CUR_X (WP_WX0 + (UI_WAVE_WIN_PTS / 2u) * WP_PX_PER_PT)
|
||||
/* 触发虚线光标 x(窗口正中,理由见文件头) */
|
||||
#define WP_INFO_Y 20 /* 顶行(通道/段号/触发 + 削徽标)条带 y */
|
||||
#define WP_HINT_Y 128 /* 倒数第二行(峰值/键位提示)条带 y */
|
||||
#define WP_ENG_Y 143 /* 底行(单位徽标)条带 y(页脚已隐藏) */
|
||||
#define WP_EMPTY_Y 60 /* 空态文案条带 y(近屏中部) */
|
||||
|
||||
/* 页面数据态:未取数前不画任何波形元素 */
|
||||
#define WP_ST_IDLE 0u /* 未取数/无段(空态文案) */
|
||||
#define WP_ST_OK 1u /* 段完整,可画波形 */
|
||||
#define WP_ST_BAD 2u /* 段不可读(显式文案,绝不画线) */
|
||||
|
||||
/* 私有函数声明区 */
|
||||
|
||||
static void wp_load_seg(void);
|
||||
static void wp_ensure(void);
|
||||
static void wp_draw_text(lv_layer_t *a_layer, const char *a_text,
|
||||
int32_t a_x, int32_t a_y, uint8_t a_align,
|
||||
const lv_area_t *a_clip);
|
||||
static int32_t wp_map_y(int32_t a_v, int32_t a_dmin, int32_t a_span);
|
||||
|
||||
/* 私有变量定义区 */
|
||||
|
||||
/*
|
||||
* 通道名(ASCII 段名 = 语义取数层的通道语义名,页面自带表避免为了
|
||||
* 六个字母再开一条注入边;与段头通道表的语义顺序一致:三相电压/零序/
|
||||
* 三相电流在前,形状受限路按段头 conv 位区分——名字本身两端一致)
|
||||
*/
|
||||
static const char *const s_ch_names[UI_WAVE_CH_CNT] = {
|
||||
"UA", "UB", "UC", "UN", "IA", "IB", "IC", "IN"
|
||||
};
|
||||
|
||||
/* 触发源字母(值域 = 段头 trig_src;未识别给 '?' 不给猜) */
|
||||
static const char s_trig_letters[] = { '?', 'M', 'P', 'T' };
|
||||
#define WP_TRIG_MAX ((uint8_t)(sizeof(s_trig_letters) - 1u))
|
||||
|
||||
static uint8_t s_state; /* WP_ST_* 三态 */
|
||||
static uint8_t s_idx; /* 当前段号(盘上编号,0..99) */
|
||||
static uint8_t s_ch; /* 当前通道(上下键切) */
|
||||
static uint8_t s_eng; /* 段头单位口径(只读徽标) */
|
||||
static uint8_t s_trig; /* 段头触发源 */
|
||||
static uint8_t s_clip; /* 段头形状受限位图(位号=通道) */
|
||||
static int16_t s_codes[UI_WAVE_WIN_PTS]; /* 当前窗码值(执行侧已并偏移) */
|
||||
static int32_t s_peak_milli; /* 窗口峰值 mV(执行侧算好) */
|
||||
|
||||
/* 函数定义区 */
|
||||
|
||||
/*
|
||||
* 函数功能:取当前段的头与窗口(三态落到 s_state,坏态一律显式文案)
|
||||
* 入口参数:无(读 s_idx / s_ch)
|
||||
* 返回值:无
|
||||
* 限定条件:仅在 uiTask 绘制/按键链内调用(经注入表触到执行侧)
|
||||
* 函数说明:头都读不成时连顶行都不画——通道名以外的字段全来自段头,
|
||||
* 缺一半字段还硬凑顶行等于把「读不到」伪装成「读到了」
|
||||
*/
|
||||
static void wp_load_seg(void) {
|
||||
int rc = ui_data_wave_seg_head(s_idx, &s_eng, &s_trig, &s_clip);
|
||||
|
||||
if (rc != UI_WAVE_OK) {
|
||||
s_state = (rc == UI_WAVE_BAD) ? WP_ST_BAD : WP_ST_IDLE;
|
||||
return;
|
||||
}
|
||||
rc = ui_data_wave_seg_win(s_idx, s_ch, s_codes, &s_peak_milli);
|
||||
if (rc != UI_WAVE_OK) {
|
||||
s_state = (rc == UI_WAVE_BAD) ? WP_ST_BAD : WP_ST_IDLE;
|
||||
return;
|
||||
}
|
||||
s_state = WP_ST_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:首帧懒取数(开页链零 I/O 的落地方式:真正的卷读取推迟到
|
||||
* 第一次绘制——模拟器截图与真机重绘走同一条链,行为一致)
|
||||
* 入口参数:无
|
||||
* 返回值:无
|
||||
* 限定条件:draw_cb 开头调用
|
||||
* 函数说明:取不到段就停在空态;此后再按左右键仍会重试(手动录波从
|
||||
* 触发到成段有一秒级延迟,页开着等段出现是回放页的正常用法,
|
||||
* 不做「试过就没有了」的缓存)
|
||||
*/
|
||||
static void wp_ensure(void) {
|
||||
uint8_t idx = 0u;
|
||||
int rc;
|
||||
|
||||
if (s_state != WP_ST_IDLE) {
|
||||
return;
|
||||
}
|
||||
rc = ui_data_wave_seg_first(&idx);
|
||||
if (rc == UI_WAVE_OK) {
|
||||
s_idx = idx;
|
||||
wp_load_seg();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:单行文本绘制(对齐可选;ui_page_action 私有拷贝同法,此处
|
||||
* 多一个左/右对齐是因为顶行要把「削」徽标钉到右上角)
|
||||
* 入口参数:a_layer - 绘制层;a_text - Flash 字面量;a_x - 锚点 x(对齐
|
||||
* 含义:左=起点 中=屏宽轴 右=终点);a_y - 条带顶;
|
||||
* a_align - 0 左 / 1 中 / 2 右;a_clip - 重绘区
|
||||
* 返回值:无
|
||||
* 限定条件:a_text 非空;条带与 clip 不相交即返回(culling)
|
||||
* 函数说明:lv_text_get_width 必须传 strlen(传 0 不测量、传 -1 死循环,
|
||||
* 框架同款警示);本 LVGL 版条带矩形给 lv_draw_label 做底色无关
|
||||
* 文本定位用,字模颜色固定 UI_COL_FG
|
||||
*/
|
||||
static void wp_draw_text(lv_layer_t *a_layer, const char *a_text,
|
||||
int32_t a_x, int32_t a_y, uint8_t a_align,
|
||||
const lv_area_t *a_clip) {
|
||||
lv_area_t band;
|
||||
lv_draw_label_dsc_t ld;
|
||||
int32_t w = (int32_t)lv_text_get_width(a_text, (uint32_t)strlen(a_text),
|
||||
LV_FONT_DEFAULT, 0);
|
||||
|
||||
band.x1 = 0;
|
||||
band.x2 = UI_SCREEN_W - 1;
|
||||
band.y1 = a_y;
|
||||
band.y2 = a_y + UI_TEXT_BAND_H - 1;
|
||||
if ((band.x1 > a_clip->x2) || (band.x2 < a_clip->x1) ||
|
||||
(band.y1 > a_clip->y2) || (band.y2 < a_clip->y1)) {
|
||||
return;
|
||||
}
|
||||
lv_draw_label_dsc_init(&ld);
|
||||
ld.base.layer = a_layer;
|
||||
ld.text = a_text;
|
||||
ld.text_static = 1u;
|
||||
ld.color = UI_COL_FG;
|
||||
ld.ofs_x = (a_align == 1u) ? (a_x - (w / 2))
|
||||
: ((a_align == 2u) ? (a_x - w) : a_x);
|
||||
ld.ofs_y = 0;
|
||||
lv_draw_label(a_layer, &ld, &band);
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:顶行触发字母(越界值给 '?' 不猜)
|
||||
* 入口参数:a_trig - 段头 trig_src 原值
|
||||
* 返回值:字母 ASCII char
|
||||
* 限定条件:仅绘制路径
|
||||
*/
|
||||
static char wp_trig_letter(uint8_t a_trig) {
|
||||
return (a_trig <= WP_TRIG_MAX) ? s_trig_letters[a_trig] : '?';
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:码值域到屏幕 y 的线性映射(0 基线必在域内:域取
|
||||
* 「min(0, 窗最小) .. max(0, 窗最大)」,削顶钉下轨的通道也能
|
||||
* 一眼看出贴的是 0 线还是别的什么)
|
||||
* 入口参数:a_v - 码值;a_dmin - 域底;a_span - 域高(域宽,恒 >0)
|
||||
* 返回值:波形区内 y 像素(WP_WBOT = 域底,WP_WTOP = 域顶) int32_t
|
||||
* 限定条件:绘制路径纯算术,零除由调用侧钳 span 保证
|
||||
* 函数说明:整数乘除即可——域高不超过 65534,先乘后除无溢出风险
|
||||
*/
|
||||
static int32_t wp_map_y(int32_t a_v, int32_t a_dmin, int32_t a_span) {
|
||||
return WP_WBOT - (((a_v - a_dmin) * WP_WSPANS) / a_span);
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:波形区自绘——阶梯线 + 0 线(虚线)+ 触发点虚线竖光标
|
||||
* 入口参数:a_layer / a_clip - 契约见 ui_content_page.h
|
||||
* 返回值:无
|
||||
* 限定条件:仅 s_state == WP_ST_OK 时被调用;s_codes 已备
|
||||
* 函数说明:阶梯 = 每点先画 3 px 水平段、再在点边界补一段垂直连线,
|
||||
* 全程只有水平与垂直两种线段(1 bpp 抗阈值裁定的直接落地);
|
||||
* 0 线与光标用 dash(ui_deco 先例只画过实线,dash 字段是 LVGL
|
||||
* 线段 dsc 自带的,单色层同样按位落墨);整区一次 cull,区内
|
||||
* 不再逐线判交——波形区就 120x90,逐线判交省不了多少,判错
|
||||
* 反而留下半截线
|
||||
*/
|
||||
static void wp_draw_wave(lv_layer_t *a_layer, const lv_area_t *a_clip) {
|
||||
lv_area_t band;
|
||||
lv_draw_line_dsc_t ld;
|
||||
int32_t vmin = s_codes[0];
|
||||
int32_t vmax = s_codes[0];
|
||||
int32_t dmin;
|
||||
int32_t dmax;
|
||||
int32_t span;
|
||||
int32_t i;
|
||||
int32_t y;
|
||||
int32_t y_prev = 0;
|
||||
|
||||
band.x1 = 0;
|
||||
band.x2 = UI_SCREEN_W - 1;
|
||||
band.y1 = WP_WTOP;
|
||||
band.y2 = WP_WBOT;
|
||||
if ((band.x1 > a_clip->x2) || (band.x2 < a_clip->x1) ||
|
||||
(band.y1 > a_clip->y2) || (band.y2 < a_clip->y1)) {
|
||||
return;
|
||||
}
|
||||
for (i = 1; i < (int32_t)UI_WAVE_WIN_PTS; i++) {
|
||||
int32_t v = s_codes[i];
|
||||
if (v < vmin) {
|
||||
vmin = v;
|
||||
}
|
||||
if (v > vmax) {
|
||||
vmax = v;
|
||||
}
|
||||
}
|
||||
dmin = (vmin < 0) ? vmin : 0;
|
||||
dmax = (vmax > 0) ? vmax : 0;
|
||||
span = dmax - dmin;
|
||||
if (span < 1) {
|
||||
span = 1; /* 全零窗:0 线与波形线重合贴在区底,诚实且无除零 */
|
||||
}
|
||||
|
||||
lv_draw_line_dsc_init(&ld);
|
||||
ld.base.layer = a_layer;
|
||||
ld.color = UI_COL_FG;
|
||||
ld.width = 1;
|
||||
|
||||
/* 0 线(虚线):恒在域内,永远画得出来 */
|
||||
ld.dash_width = 2;
|
||||
ld.dash_gap = 2;
|
||||
y = wp_map_y(0, dmin, span);
|
||||
ld.p1.x = WP_WX0 - 2;
|
||||
ld.p1.y = y;
|
||||
ld.p2.x = WP_WX0 + ((int32_t)UI_WAVE_WIN_PTS * WP_PX_PER_PT) + 1;
|
||||
ld.p2.y = y;
|
||||
lv_draw_line(a_layer, &ld);
|
||||
|
||||
/* 触发点竖光标(虚线):第 二十/廿一 点之间的点边界(见文件头裁定) */
|
||||
ld.p1.x = WP_CUR_X;
|
||||
ld.p1.y = WP_WTOP;
|
||||
ld.p2.x = WP_CUR_X;
|
||||
ld.p2.y = WP_WBOT;
|
||||
lv_draw_line(a_layer, &ld);
|
||||
|
||||
/* 阶梯线(实线) */
|
||||
ld.dash_width = 0;
|
||||
ld.dash_gap = 0;
|
||||
for (i = 0; i < (int32_t)UI_WAVE_WIN_PTS; i++) {
|
||||
int32_t x;
|
||||
|
||||
x = WP_WX0 + (i * WP_PX_PER_PT);
|
||||
y = wp_map_y((int32_t)s_codes[i], dmin, span);
|
||||
ld.p1.x = x;
|
||||
ld.p1.y = y;
|
||||
ld.p2.x = x + WP_PX_PER_PT - 1;
|
||||
ld.p2.y = y;
|
||||
lv_draw_line(a_layer, &ld);
|
||||
if ((i > 0) && (y != y_prev)) {
|
||||
ld.p1.x = x;
|
||||
ld.p1.y = y_prev;
|
||||
ld.p2.x = x;
|
||||
ld.p2.y = y;
|
||||
lv_draw_line(a_layer, &ld);
|
||||
}
|
||||
y_prev = y;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:单位徽标取词(只读 eng 选词,eng 不进任何算式——§6.3 口径;
|
||||
* 未识别值按最保守的「引脚域」渲染,不猜高口径)
|
||||
* 入口参数:a_eng - 段头 eng 原值
|
||||
* 返回值:徽标文案(Flash 字面量) const char *
|
||||
* 限定条件:仅绘制路径
|
||||
*/
|
||||
static const char *wp_eng_word(uint8_t a_eng) {
|
||||
if (a_eng == (uint8_t)UI_DATA_ENG_SEC) {
|
||||
return "二次值";
|
||||
}
|
||||
if (a_eng == (uint8_t)UI_DATA_ENG_PRI) {
|
||||
return "一次值";
|
||||
}
|
||||
return "引脚域";
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:开页复位(框架 init_cb)——通道回到 UA、数据回到未取态
|
||||
* 入口参数:无
|
||||
* 返回值:无
|
||||
* 限定条件:框架开页链内;只清状态零 I/O(懒取数在首帧绘制)
|
||||
*/
|
||||
static void pg_init(void) {
|
||||
s_state = WP_ST_IDLE;
|
||||
s_ch = 0u;
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:自绘(框架 draw_cb)
|
||||
* 入口参数:a_layer / a_clip - 契约见 ui_content_page.h
|
||||
* 返回值:无
|
||||
* 限定条件:框架绘制链末尾调用
|
||||
*/
|
||||
static void pg_draw(lv_layer_t *a_layer, const lv_area_t *a_clip) {
|
||||
char buf[UI_BUF_STRLEN];
|
||||
|
||||
wp_ensure();
|
||||
if (s_state == WP_ST_BAD) {
|
||||
wp_draw_text(a_layer, "该段不可读", UI_SCREEN_W / 2, WP_EMPTY_Y, 1u,
|
||||
a_clip);
|
||||
return;
|
||||
}
|
||||
if (s_state != WP_ST_OK) {
|
||||
wp_draw_text(a_layer, "无录波段", UI_SCREEN_W / 2, WP_EMPTY_Y, 1u,
|
||||
a_clip);
|
||||
return;
|
||||
}
|
||||
|
||||
/* 顶行:左 = 通道 + 段号 + 触发字母;右 = 形状受限「削」徽标 */
|
||||
(void)lv_snprintf(buf, sizeof(buf), "%s SEG%u %c", s_ch_names[s_ch],
|
||||
(unsigned int)s_idx, wp_trig_letter(s_trig));
|
||||
wp_draw_text(a_layer, buf, UI_LIST_LEFT_X, WP_INFO_Y, 0u, a_clip);
|
||||
if ((s_clip & (uint8_t)(1u << s_ch)) != 0u) {
|
||||
wp_draw_text(a_layer, "削", UI_SCREEN_W - 1, WP_INFO_Y, 2u, a_clip);
|
||||
}
|
||||
|
||||
wp_draw_wave(a_layer, a_clip);
|
||||
|
||||
/* 倒数第二行:左 = 键位提示(ASCII);右 = 窗口峰值 mV(定点,ASCII) */
|
||||
wp_draw_text(a_layer, "UD=CH LR=SEG", UI_LIST_LEFT_X, WP_HINT_Y, 0u,
|
||||
a_clip);
|
||||
(void)lv_snprintf(buf, sizeof(buf), "PK%dmV", (int)s_peak_milli);
|
||||
wp_draw_text(a_layer, buf, UI_SCREEN_W - 1, WP_HINT_Y, 2u, a_clip);
|
||||
|
||||
/* 底行:单位徽标(eng) */
|
||||
wp_draw_text(a_layer, wp_eng_word(s_eng), UI_SCREEN_W / 2, WP_ENG_Y, 1u,
|
||||
a_clip);
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:按键处理(框架 key_cb)——上下切通道、左右切段
|
||||
* 入口参数:a_key - LVGL 键值 lv_key_t
|
||||
* 返回值:true = 本页已消费;false = 交回框架 bool
|
||||
* 限定条件:框架按键链内(ESC 不到这里;LEFT 因 key_intercept=1 先到这里)
|
||||
* 函数说明:环游语义 = 上下在八路间绕回、左右在现存段间绕回;切段失败
|
||||
* (卷忙/无邻段)保持当前画面不动——「按了没动」比「画面被
|
||||
* 忙态清成空」诚实,忙不忙在回放页本来就不是用户要的答案
|
||||
*/
|
||||
static bool pg_key(lv_key_t a_key) {
|
||||
uint8_t next;
|
||||
int rc;
|
||||
|
||||
switch (a_key) {
|
||||
case LV_KEY_UP:
|
||||
case LV_KEY_DOWN:
|
||||
next = (a_key == LV_KEY_UP)
|
||||
? (uint8_t)((s_ch + UI_WAVE_CH_CNT - 1u) % UI_WAVE_CH_CNT)
|
||||
: (uint8_t)((s_ch + 1u) % UI_WAVE_CH_CNT);
|
||||
s_ch = next;
|
||||
if (s_state == WP_ST_OK) {
|
||||
rc = ui_data_wave_seg_win(s_idx, s_ch, s_codes, &s_peak_milli);
|
||||
if (rc != UI_WAVE_OK) {
|
||||
s_state = (rc == UI_WAVE_BAD) ? WP_ST_BAD : WP_ST_IDLE;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
case LV_KEY_LEFT:
|
||||
case LV_KEY_RIGHT:
|
||||
if (s_state == WP_ST_IDLE) {
|
||||
wp_ensure(); /* 空态下按左右 = 再探一次盘(新段可能已落) */
|
||||
return true;
|
||||
}
|
||||
rc = (a_key == LV_KEY_RIGHT) ? ui_data_wave_seg_next(s_idx, &next)
|
||||
: ui_data_wave_seg_prev(s_idx, &next);
|
||||
if (rc == UI_WAVE_OK) {
|
||||
s_idx = next;
|
||||
s_state = WP_ST_IDLE; /* 先回空态再载,坏段不会留着旧画面 */
|
||||
wp_load_seg();
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 页面描述符(外部链接:生成物 ui_page_registry.c 按菜单树 #page=wave_play 绑定引用)
|
||||
* 查看页形态:无浅 V、无页脚(段号在顶行,页脚「共 N 页」与段号两套计数
|
||||
* 反而打架)、不可选(单元素自绘页)、可编辑位 0(本页零写动作);
|
||||
* key_intercept=1 是本页存在的理由级配置:LEFT 要拿来切上一段,不能让
|
||||
* 框架默认的「LEFT 关页」吃掉
|
||||
*/
|
||||
const content_page_def_t ui_page_wave_play_desc = {
|
||||
.id = "wave_play",
|
||||
.title = "录波回放",
|
||||
.hide_deco = 1u,
|
||||
.hide_footer = 1u,
|
||||
.selectable = 0u,
|
||||
.key_intercept = 1u,
|
||||
.edit_capable = 0u,
|
||||
.init_cb = pg_init,
|
||||
.draw_cb = pg_draw,
|
||||
.key_cb = pg_key,
|
||||
};
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* 模块名称:UI Page wave_play (录波回放内容页)
|
||||
* 模块功能:记录查询 → 录波回放 叶子的内容页声明——向框架 ui_content_page
|
||||
* 提供页面描述符;单通道阶梯波形回放,数据全走录波注入表
|
||||
* (本模块零 App include、零存储触点、零波形算式)
|
||||
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
|
||||
* 作者:DTU 项目组
|
||||
* 创建日期:2026-10-29
|
||||
* 修改记录:
|
||||
* v1.0 2026-10-29 DTU 项目组 创建(故障录波道 UI 侧;元素表 =
|
||||
* docs/子系统设计/故障录波设计说明.md §8.1)
|
||||
*/
|
||||
#ifndef UI_PAGE_WAVE_PLAY_H
|
||||
#define UI_PAGE_WAVE_PLAY_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "ui_content_page.h"
|
||||
|
||||
/* 页面描述符(定义在 ui_page_wave_play.c;生成物按菜单树 #page=wave_play 引用本符号) */
|
||||
extern const content_page_def_t ui_page_wave_play_desc;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* UI_PAGE_WAVE_PLAY_H */
|
||||
Reference in New Issue
Block a user