docs: optimize SOS button behavior, add 2-step pairing wizard, and IPC exit action

This commit is contained in:
2026-07-09 17:42:55 +08:00
parent 1168e747e6
commit 32c07c0466
16 changed files with 821 additions and 478 deletions

View File

@@ -1,36 +1,38 @@
# 模块拆分 - LCD 显示与字模驱动 (Docs/50_module-breakdown/mod-lcd.md)
# 模块拆分 - AMOLED 显示与字模驱动 (Docs/50_module-breakdown/mod-lcd.md)
本模块管理 1.14寸 TFT LCD 屏幕引脚、电平控制、SPI 传输和界面图文渲染(分辨率为 135x240 像素)。
本模块管理 0.95寸 Truly AMOLED 屏幕引脚、电平控制、SPI 传输和界面图文渲染(分辨率为 120x240 像素)。
## 1. 模块职责说明
* **职责范围**
1. 提供底层的 SPI 单向命令/数据通道。
2. 控制 LCD_PWR_CTRL 供电管脚。
2. 控制 `SGM_CTRL` 供电管脚以使能 SGM3833 PMIC
3. 支持屏幕窗口配置,实现底层清屏与局部像素写入。
4. 读取 `lcd_font.h` 库,在指定坐标绘制 8x16 字符与自定义大小位图。
5. 实现各业务状态屏幕135x240 分辨率)画面绘制与文字对齐。
5. 实现各业务状态屏幕120x240 分辨率)及主选择菜单画面绘制与文字对齐。
## 2. 底层显示接口
* `void LCD_Init(void)`:初始化 LCD 引脚,置 `LCD_PWR_CTRL = 1` 使能背光与供电,并发送 **ST7789V** 屏幕控制器的初始化寄存器配置序列。
* `void LCD_Init(void)`:初始化 LCD 引脚,置 `SGM_CTRL = 1` 使能 SGM3833 供电,并发送 **RM69310** AMOLED 控制器的初始化寄存器配置序列。
* `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)`:设置局部像素绘制范围,以适配 135x240 竖屏在 240x320 GRAM 上的对齐(强制处理 **X 轴偏移量 +52Y 轴偏移量 +40**)。
* `void LCD_SetWindow(u16 x1, u16 y1, u16 x2, u16 y2)`:设置局部像素绘制范围,以适配 Truly 120x240 竖屏的对齐(强制处理 **X 轴偏移量 +4**)。
* `void LCD_Clear(u16 color)`:将整块屏幕刷写为特定背景色。
## 3. 图文绘制与 UI 渲染
* `void LCD_ShowChar(u16 x, u16 y, char c, u16 fc, u16 bc)`:在 (x, y) 坐标处绘制 ASCII 字符 `c`
* `void LCD_ShowString(u16 x, u16 y, char *s, u16 fc, u16 bc)`:循环打印字符串。
* `void LCD_ShowStringCentered(u16 y, char *str, u16 fc, u16 bc)`:在 135 像素宽屏幕上水平居中绘制 8 像素宽的字符串,水平起始坐标算法为 `(135 - len * 8) / 2`
* `void LCD_ShowString16x32Centered(u16 y, char *str, u16 fc, u16 bc)`:在 135 像素宽屏幕上水平居中绘制双倍大小 (16x32px) 的字符,水平起始坐标算法为 `(135 - len * 16) / 2`
* `void LCD_ShowStringCentered(u16 y, char *str, u16 fc, u16 bc)`:在 120 像素宽屏幕上水平居中绘制 8 像素宽的字符串,水平起始坐标算法为 `(120 - len * 8) / 2`
* `void LCD_ShowString16x32Centered(u16 y, char *str, u16 fc, u16 bc)`:在 120 像素宽屏幕上水平居中绘制双倍大小 (16x32px) 的时钟字符,水平起始坐标算法为 `(120 - len * 16) / 2`
* `void LCD_ShowImage(u16 x, u16 y, u16 w, u16 h, const u8 *img, u16 fc, u16 bc)`:在指定区域绘制单色位图。
* `void UI_ShowClockPage(SystemState state, u8 hour, u8 min)`渲染时钟待机页面135 宽布局),并根据布撤防状态在状态栏绘制相应锁状态图标。
* `void UI_ShowClockPage(SystemState state, u8 hour, u8 min)`渲染时钟待机页面120 宽布局),并根据布撤防状态在状态栏绘制相应锁状态图标。
* `void UI_ShowMenuPage(u8 selected_item)`渲染主选择菜单4个条目`DATE/HEURE``APPAIRAGE``ARM/DISARM``LIAISON IPC`),高亮当前选中项。
* `void UI_ShowSetTimePage(u8 edit_field, u8 hour, u8 min, u16 year, u8 month, u8 day)`:渲染日期时间微调设定界面。
* `void UI_ShowArmDisarmSelectPage(u8 current_selection)`:渲染布撤防手动切换界面。
* `void UI_ShowAlarmPage(char *sensor_name, u8 zone)`:渲染防区告警页面,显示对应的传感器位图和法语名称。
* `void UI_ShowPairMenuPage(u8 selected_index)`:渲染对码选择菜单
* `void UI_ShowPairConfirmPage(u8 type, u8 selected_suffix)`:渲染对码确认页,显示捕获的类型图标、名字前缀及带选框的 `[ selected_suffix ]` 数字序号(支持按键调整)
* `void UI_ShowPairSearchPage(void)`:渲染对码等待搜索状态
* `void UI_ShowPairConfirmPage(u8 edit_focus, u8 type, u8 selected_suffix)`:渲染对码二步微调页。当 `edit_focus == 0` 时,类型字样显示为高亮选框形式;当 `edit_focus == 1` 时,后缀数字 `[ selected_suffix ]` 显示为高亮选框形式
* `void UI_ShowBindingPage(void)`:渲染与 IPC 绑定对码界面,并在屏幕底部居中显示手环自身的唯一 `Factory ID`
<!-- Checked and verified with always-on screen and sleep removal changes -->
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V2 -->