docs: 根据架构.odg重新设计重构手环系统的分层事件驱动APP框架设计文档

This commit is contained in:
2026-07-10 09:17:27 +08:00
parent 52d84dfc97
commit 53b859b1c1
9 changed files with 657 additions and 914 deletions

View File

@@ -1,33 +1,28 @@
# 模块拆分 - AMOLED 显示与无障碍渲染 (Docs/50_module-breakdown/mod-lcd.md)
# 模块拆分 - AMOLED 屏幕渲染驱动 (Docs/50_module-breakdown/mod-lcd.md)
本模块管理 Truly 0.95寸 AMOLED 屏的底层 SPI 通信、窗口控制、以及无障碍A11y超大字体和图标的渲染
本模块描述 Truly AMOLED (RM69310) 屏幕的底层 SPI 通信、物理视窗偏置及文本/大图标像素刷写驱动。本模块为纯输出执行层,由当前活跃的前台 App 调度
## 1. 模块职责说明
* **职责范围**
1. 管理 RM69310 控制器通信,提供单向 SPI 指令/数据写操作
2. 提供 `SGM_CTRL`(引脚 `P3.4`)控制,配合低功耗模块实现屏幕 PMIC 的上电与彻底断电。
3. **物理窗口偏置处理**Truly 120x240 AMOLED 屏的 GRAM X 轴起始位置有 **+4 像素的偏置**,设置显示窗口时必须进行偏移修正:`LCD_SetWindow(x1 + 4, x2 + 4, y1, y2)`
4. **无障碍大字排版A11y渲染**
* 取消任何小于 16x32px 的微缩文本
* 时间显示使用 **32x64px** 超大点阵
* 防区图标使用 **48x48px****64x64px** 超大单色位图
* 在 120 像素宽的屏幕内,应用水平居中公式:`X_start = (120 - len * char_width) / 2`
5. **单页集中展示逻辑**:控制各菜单页面和子修改页面在屏幕中只显示单焦点,避免多行小字杂乱堆叠。
1. **服务应用显示**:不存储系统页面逻辑,仅提供底层画图、画字、清屏接口,供当前前台 App如待机时钟应用、菜单应用`OnStart` 或重绘标志触发时调度写入
2. **局部窗口硬件偏置**
`LCD_SetWindow` 设置 GRAM 窗口时X 轴坐标必须强制加 4 像素(即 `x1 += 4`, `x2 += 4`),以对齐 Truly AMOLED 屏的物理视窗偏置
3. **A11y 无障碍大字模渲染**
* 提供 `16x32px` 标准无障碍英文字符点阵字库
* 提供 `32x64px` 超大数字字符点阵字库(专用于时钟)
* 提供 `48x48px``64x64px` 传感器、锁具、摄像头位图渲染接口
* 实现了水平居中排版公式,防止大字超出 120 像素物理宽度
---
## 2. 接口与函数说明
* `void LCD_Init(void)`:配置 `P1.1~P1.6` 控制线为推挽输出模式,并在拉高 `SGM_CTRL` 稳定后,发送 RM69310 初始化寄存器指令序列。
* `void LCD_WriteCmd(u8 cmd)`:拉低 `LCD_RS` 选择命令寄存器,通过 SPI 发送字节
* `void LCD_WriteData(u8 dat)`:拉高 `LCD_RS` 选择数据寄存器,通过 SPI 发送字节
* `void LCD_SetWindow(u16 x1, u16 y1, u16 x2, u16 y2)`设置局部像素刷写范围,物理 X 坐标必须强制加 4 像素
* `void LCD_Clear(u16 color)`:清屏为指定底色(常态使用全黑以节省功耗)
* `void LCD_ShowChar16x32(u16 x, u16 y, char c, u16 fc, u16 bc)`在指定坐标绘制标准无障碍大字符16x32点阵
* `void LCD_ShowChar32x64(u16 x, u16 y, char c, u16 fc, u16 bc)`在指定坐标绘制超大数字字符32x64点阵
* `void LCD_ShowImage(u16 x, u16 y, u16 w, u16 h, const u8 *img, u16 fc, u16 bc)`:渲染指定单色位图(支持 32x32/48x48/64x64/80x80 图标规格)。
* `void LCD_ShowStringCentered(u16 y, char *str, u16 fc, u16 bc)`16x32 规格字符串居中渲染,单行限制最多 7 个字符。
* `void LCD_ShowString32x64Centered(u16 y, char *str, u16 fc, u16 bc)`32x64 规格超大字符串居中渲染(如时钟显示)。
* `void LCD_Init(void)`:配置 Pin 9 到 Pin 14 的 SPI 通信总线引脚为推挽输出。拉高 `SHUT` 稳定后, RM69310 芯片写入初始化指令序列。
* `void LCD_SetWindow(u16 x1, u16 y1, u16 x2, u16 y2)`:设置局部像素写入视窗,自动执行 `+4` 偏置修正
* `void LCD_Clear(u16 color)`:用指定颜色刷满屏幕 GRAM
* `void LCD_ShowStringCentered(u16 y, char *str, u16 fc, u16 bc)`居中渲染 16x32 大字符
* `void LCD_ShowString32x64Centered(u16 y, char *str, u16 fc, u16 bc)`:居中渲染 32x64 超大字符
* `void LCD_ShowImage(u16 x, u16 y, u16 w, u16 h, const u8 *img, u16 fc, u16 bc)`:将单色大位图写入屏幕指定 GRAM
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V2 -->