暂存
This commit is contained in:
102
App/ui.c
102
App/ui.c
@@ -1,9 +1,11 @@
|
||||
#include "ui.h"
|
||||
#include "database.h"
|
||||
#include "language.h"
|
||||
#include "../Drivers/lcd.h"
|
||||
#include "../Drivers/adc.h"
|
||||
|
||||
// 引入外部主菜单对码项名称定义 (例如 "DETEC. PORTE" 等,法语表达防区类型名称)
|
||||
extern char *code menu_items[5];
|
||||
// 引入外部主菜单对码项名称的字符串 ID 表 (例如门磁/PIR/烟感等防区类型)
|
||||
extern const StringID device_menu_ids[5];
|
||||
|
||||
/**
|
||||
* @brief 渲染并显示系统待机时钟主页面
|
||||
@@ -70,10 +72,10 @@ void UI_ShowClockPage(SystemState state, u8 hour, u8 min)
|
||||
LCD_ShowString16x32Centered(100, time_str, COLOR_WHITE, COLOR_BLACK); // 使用 16x32 特大字体居中绘制时间
|
||||
|
||||
// ====== 绘制 AM/PM 状态 ======
|
||||
LCD_ShowStringCentered(150, "AM", COLOR_WHITE, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(150, Lang_Get(STR_CLOCK_AMPM), COLOR_WHITE, COLOR_BLACK);
|
||||
|
||||
// ====== 绘制日期星期栏 ======
|
||||
LCD_ShowStringCentered(195, "VEN 10-07", COLOR_GRAY, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(195, Lang_Get(STR_CLOCK_DATE), COLOR_GRAY, COLOR_BLACK);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -87,21 +89,21 @@ void UI_ShowPairMenuPage(u8 selected_index)
|
||||
{
|
||||
LCD_Clear(COLOR_BLACK);
|
||||
|
||||
// 绘制标题 "MENU APPAI." (法语: 配对/对码设置菜单)
|
||||
LCD_ShowStringCentered(30, "MENU APPAI.", COLOR_AMBER, COLOR_BLACK);
|
||||
|
||||
// 绘制标题 "MENU APPAI." (配对/对码设置菜单)
|
||||
LCD_ShowStringCentered(30, Lang_Get(STR_PAIR_MENU_TITLE), COLOR_AMBER, COLOR_BLACK);
|
||||
|
||||
// 渲染上方相邻项 (如果当前选择的不是第一行)
|
||||
if (selected_index > 0) {
|
||||
LCD_ShowStringCentered(78, menu_items[selected_index - 1], COLOR_GRAY, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(78, Lang_Get(device_menu_ids[selected_index - 1]), COLOR_GRAY, COLOR_BLACK);
|
||||
}
|
||||
|
||||
|
||||
// 渲染当前选中的高亮中间项
|
||||
LCD_DrawRectBorder(15, 110, 104, 28, COLOR_CYAN); // 青色对齐外框 (在 135px 宽度下居中)
|
||||
LCD_ShowStringCentered(118, menu_items[selected_index], COLOR_CYAN, COLOR_BLACK);
|
||||
|
||||
LCD_ShowStringCentered(118, Lang_Get(device_menu_ids[selected_index]), COLOR_CYAN, COLOR_BLACK);
|
||||
|
||||
// 渲染下方相邻项 (如果当前选择的不是最后一行)
|
||||
if (selected_index < 4) {
|
||||
LCD_ShowStringCentered(158, menu_items[selected_index + 1], COLOR_GRAY, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(158, Lang_Get(device_menu_ids[selected_index + 1]), COLOR_GRAY, COLOR_BLACK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,7 +117,7 @@ void UI_ShowPairWaitPage(u8 frame_index)
|
||||
LCD_Clear(COLOR_BLACK);
|
||||
|
||||
// 绘制头部 "APPAIRAGE" (对码中)
|
||||
LCD_ShowStringCentered(35, "APPAIRAGE", COLOR_GRAY, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(35, Lang_Get(STR_PAIRING_TITLE), COLOR_GRAY, COLOR_BLACK);
|
||||
|
||||
// 根据 Timer1 节拍算得的帧号,切换渲染雷达的 3 种点阵图形,形成扩散动态视觉 (在 135px 下居中 X = 51)
|
||||
if (frame_index == 0)
|
||||
@@ -126,8 +128,8 @@ void UI_ShowPairWaitPage(u8 frame_index)
|
||||
LCD_DrawMonoBitmap(51, 75, 32, 32, bmp_radar_32x32_f3, COLOR_CYAN, COLOR_BLACK);
|
||||
|
||||
// 绘制状态描述
|
||||
LCD_ShowStringCentered(165, "RECHERCHE", COLOR_WHITE, COLOR_BLACK); // 法语: 搜寻中
|
||||
LCD_ShowStringCentered(200, "DECLENCH. CAPT", COLOR_CYAN, COLOR_BLACK); // 法语: 请触发传感器以发射射频信号
|
||||
LCD_ShowStringCentered(165, Lang_Get(STR_PAIR_SEARCHING), COLOR_WHITE, COLOR_BLACK); // 搜寻中
|
||||
LCD_ShowStringCentered(200, Lang_Get(STR_PAIR_TRIGGER), COLOR_CYAN, COLOR_BLACK); // 请触发传感器以发射射频信号
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -140,8 +142,8 @@ void UI_ShowPairConfirmPage(u8 type, u8 zone_index)
|
||||
char zone_str[3];
|
||||
LCD_Clear(COLOR_BLACK);
|
||||
|
||||
// 顶部显示捕获回馈标志 "v RECU" (法语: 信号已接收)
|
||||
LCD_ShowStringCentered(32, "v RECU", COLOR_GREEN, COLOR_BLACK);
|
||||
// 顶部显示捕获回馈标志 "v RECU" (信号已接收)
|
||||
LCD_ShowStringCentered(32, Lang_Get(STR_PAIR_RECEIVED), COLOR_GREEN, COLOR_BLACK);
|
||||
|
||||
// 在上部居中绘制设备类别所对应的图形 (135px 下居中 X = 51)
|
||||
if (type == 0) {
|
||||
@@ -153,7 +155,7 @@ void UI_ShowPairConfirmPage(u8 type, u8 zone_index)
|
||||
}
|
||||
|
||||
// 渲染传感器类型的文字
|
||||
LCD_ShowStringCentered(105, sensor_names_fr[type], COLOR_WHITE, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(105, Lang_Get(sensor_type_name_ids[type]), COLOR_WHITE, COLOR_BLACK);
|
||||
|
||||
// 绘制一个青色边框,在中间以 16x32 大号字体展示当前防区号 (在 135px 下居中 X=22, 宽度 90)
|
||||
LCD_DrawRectBorder(22, 140, 90, 44, COLOR_CYAN);
|
||||
@@ -163,7 +165,7 @@ void UI_ShowPairConfirmPage(u8 type, u8 zone_index)
|
||||
LCD_ShowString16x32(51, 146, zone_str, COLOR_CYAN, COLOR_BLACK); // 渲染两位防区编号 (135px 下居中 X = 51)
|
||||
|
||||
// 底部提示按键动作
|
||||
LCD_ShowStringCentered(215, "CONFIRMER", COLOR_GRAY, COLOR_BLACK); // 法语: 短按以确认保存
|
||||
LCD_ShowStringCentered(215, Lang_Get(STR_PAIR_CONFIRM), COLOR_GRAY, COLOR_BLACK); // 短按以确认保存
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -174,8 +176,8 @@ void UI_ShowPairSuccessPage(void)
|
||||
LCD_Clear(COLOR_BLACK);
|
||||
// 渲染 32x32 对勾图标 (135px 下居中 X = 51)
|
||||
LCD_DrawMonoBitmap(51, 75, 32, 32, bmp_checkmark_32x32, COLOR_GREEN, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(145, "SUCCES", COLOR_GREEN, COLOR_BLACK); // 法语: 成功
|
||||
LCD_ShowStringCentered(180, "ENREGISTRE", COLOR_GRAY, COLOR_BLACK); // 法语: 配置已保存
|
||||
LCD_ShowStringCentered(145, Lang_Get(STR_PAIR_SUCCESS), COLOR_GREEN, COLOR_BLACK); // 成功
|
||||
LCD_ShowStringCentered(180, Lang_Get(STR_PAIR_SAVED), COLOR_GRAY, COLOR_BLACK); // 配置已保存
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -187,11 +189,11 @@ void UI_ShowPairFailPage(u8 is_timeout)
|
||||
LCD_Clear(COLOR_BLACK);
|
||||
// 渲染 32x32 红色叉号图标 (135px 下居中 X = 51)
|
||||
LCD_DrawMonoBitmap(51, 75, 32, 32, bmp_cross_32x32, COLOR_RED, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(145, "ECHEC", COLOR_RED, COLOR_BLACK); // 法语: 失败
|
||||
LCD_ShowStringCentered(145, Lang_Get(STR_PAIR_FAILED), COLOR_RED, COLOR_BLACK); // 失败
|
||||
if (is_timeout) {
|
||||
LCD_ShowStringCentered(180, "DELAI DEPASSE", COLOR_GRAY, COLOR_BLACK); // 法语: 对码超时
|
||||
LCD_ShowStringCentered(180, Lang_Get(STR_PAIR_TIMEOUT), COLOR_GRAY, COLOR_BLACK); // 对码超时
|
||||
} else {
|
||||
LCD_ShowStringCentered(180, "TYPE INCORRECT", COLOR_GRAY, COLOR_BLACK); // 法语: 传感器类型不符
|
||||
LCD_ShowStringCentered(180, Lang_Get(STR_PAIR_WRONG_TYPE), COLOR_GRAY, COLOR_BLACK); // 传感器类型不符
|
||||
}
|
||||
}
|
||||
|
||||
@@ -224,7 +226,7 @@ void UI_ShowAlarmPage(u8 type, u8 zone_index)
|
||||
// 拼接字符串: "设备类型名 两位防区号"
|
||||
{
|
||||
u8 len = 0;
|
||||
char *p = sensor_names_fr[type];
|
||||
char *p = Lang_Get(sensor_type_name_ids[type]);
|
||||
while(*p) {
|
||||
zone_info[len++] = *p++;
|
||||
}
|
||||
@@ -234,7 +236,7 @@ void UI_ShowAlarmPage(u8 type, u8 zone_index)
|
||||
zone_info[len] = '\0';
|
||||
}
|
||||
LCD_ShowStringCentered(135, zone_info, COLOR_RED, COLOR_BLACK); // 红字绘制设备防区
|
||||
LCD_ShowStringCentered(175, "INTRUSION!", COLOR_WHITE, COLOR_BLACK); // 白字入侵提示
|
||||
LCD_ShowStringCentered(175, Lang_Get(STR_ALARM_INTRUSION), COLOR_WHITE, COLOR_BLACK); // 白字入侵提示
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -260,10 +262,10 @@ void UI_ShowSosPage(void)
|
||||
LCD_FillRect(53, 38, 4, 4, COLOR_RED); // 左侧散射闪光
|
||||
LCD_FillRect(77, 38, 4, 4, COLOR_RED); // 右侧散射闪光
|
||||
|
||||
// 绘制求救中法文字样
|
||||
LCD_ShowStringCentered(120, "SOS", COLOR_RED, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(150, "ENVOI", COLOR_RED, COLOR_BLACK); // 法语: 求救中
|
||||
LCD_ShowStringCentered(195, "APPEL...", COLOR_WHITE, COLOR_BLACK); // 法语: 紧急呼叫中
|
||||
// 绘制求救中文字样
|
||||
LCD_ShowStringCentered(120, Lang_Get(STR_SOS_TITLE), COLOR_RED, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(150, Lang_Get(STR_SOS_SENDING), COLOR_RED, COLOR_BLACK); // 求救中
|
||||
LCD_ShowStringCentered(195, Lang_Get(STR_SOS_CALLING), COLOR_WHITE, COLOR_BLACK); // 紧急呼叫中
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -282,8 +284,8 @@ void UI_ShowBindingPage(u32 addr)
|
||||
LCD_FillRect(77, 50, 2, 18, COLOR_CYAN); // 镜头固定翼 1 (135px 下居中等比右移 X = 77)
|
||||
LCD_FillRect(79, 52, 2, 14, COLOR_CYAN); // 镜头固定翼 2 (135px 下居中等比右移 X = 79)
|
||||
|
||||
LCD_ShowStringCentered(120, "LIAISON", COLOR_WHITE, COLOR_BLACK); // 法语: 连接/绑定
|
||||
LCD_ShowStringCentered(155, "ENVOI EN COURS", COLOR_CYAN, COLOR_BLACK); // 法语: 发送对码帧中
|
||||
LCD_ShowStringCentered(120, Lang_Get(STR_LINK_TITLE), COLOR_WHITE, COLOR_BLACK); // 连接/绑定
|
||||
LCD_ShowStringCentered(155, Lang_Get(STR_BIND_SENDING), COLOR_CYAN, COLOR_BLACK); // 发送对码帧中
|
||||
|
||||
// 拼接要对外广播的手环 24 位克隆物理 ID 十六进制字符串并显示在最下方
|
||||
id_str[0] = 'I'; id_str[1] = 'D'; id_str[2] = ':'; id_str[3] = ' ';
|
||||
@@ -311,14 +313,14 @@ void UI_ShowBindingPage(u32 addr)
|
||||
|
||||
/**
|
||||
* @brief 渲染显示设置主菜单界面
|
||||
* @param selected_index 当前菜单高亮行索引 (0:时钟修改, 1:对码匹配, 2:摄像机绑定)
|
||||
* @param selected_index 当前菜单高亮行索引 (0:语言切换, 1:时钟修改, 2:对码匹配, 3:摄像机绑定)
|
||||
* @details 在顶部和底部绘制向上/向下箭头提示滑轮,中部绘制选中项的大几何图形,
|
||||
* 并在下方打印对应的法文字串描述。
|
||||
* 并在下方打印对应当前语言的文字描述。
|
||||
*/
|
||||
void UI_ShowMainMenu(u8 selected_index)
|
||||
{
|
||||
LCD_Clear(COLOR_BLACK);
|
||||
|
||||
|
||||
// ====== 绘制顶部的向上箭头三角标记 (在 135px 宽度下居中) ======
|
||||
LCD_FillRect(65, 20, 4, 2, COLOR_GRAY);
|
||||
LCD_FillRect(63, 22, 8, 2, COLOR_GRAY);
|
||||
@@ -326,27 +328,33 @@ void UI_ShowMainMenu(u8 selected_index)
|
||||
|
||||
if (selected_index == 0)
|
||||
{
|
||||
// 菜单 0:时间修改设置。中部绘制一个青色闹钟样式 (135px 下居中 X = 51)
|
||||
LCD_DrawRectBorder(51, 70, 32, 32, COLOR_CYAN); // 闹钟外圈
|
||||
LCD_FillRect(66, 76, 2, 10, COLOR_CYAN); // 闹钟时针
|
||||
LCD_FillRect(66, 85, 8, 2, COLOR_CYAN); // 闹钟分针
|
||||
LCD_ShowStringCentered(150, "1. HORLOGE", COLOR_WHITE, COLOR_BLACK); // 法语: 时钟/时间修改
|
||||
// 菜单 0:语言切换。用当前语言的两字母缩写代替图标,直接展示切换后的效果
|
||||
LCD_ShowString16x32Centered(75, (Lang_Current() == LANG_FR) ? "FR" : "EN", COLOR_CYAN, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(150, Lang_Get(STR_MENU_LANGUAGE), COLOR_WHITE, COLOR_BLACK);
|
||||
}
|
||||
else if (selected_index == 1)
|
||||
{
|
||||
// 菜单 1:无线对码匹配。中部绘制一个青色同心圆雷达波纹图形 (135px 下居中 X = 51)
|
||||
LCD_DrawMonoBitmap(51, 70, 32, 32, bmp_radar_32x32_f3, COLOR_CYAN, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(150, "2. APPAIRAGE", COLOR_WHITE, COLOR_BLACK); // 法语: 配对
|
||||
// 菜单 1:时间修改设置。中部绘制一个青色闹钟样式 (135px 下居中 X = 51)
|
||||
LCD_DrawRectBorder(51, 70, 32, 32, COLOR_CYAN); // 闹钟外圈
|
||||
LCD_FillRect(66, 76, 2, 10, COLOR_CYAN); // 闹钟时针
|
||||
LCD_FillRect(66, 85, 8, 2, COLOR_CYAN); // 闹钟分针
|
||||
LCD_ShowStringCentered(150, Lang_Get(STR_MENU_HORLOGE), COLOR_WHITE, COLOR_BLACK); // 时钟/时间修改
|
||||
}
|
||||
else if (selected_index == 2)
|
||||
{
|
||||
// 菜单 2:网络摄像机绑定。中部绘制一个相机/联通关系图 (135px 下居中等比右移 X = 57)
|
||||
// 菜单 2:无线对码匹配。中部绘制一个青色同心圆雷达波纹图形 (135px 下居中 X = 51)
|
||||
LCD_DrawMonoBitmap(51, 70, 32, 32, bmp_radar_32x32_f3, COLOR_CYAN, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(150, Lang_Get(STR_MENU_APPAIRAGE), COLOR_WHITE, COLOR_BLACK); // 配对
|
||||
}
|
||||
else if (selected_index == 3)
|
||||
{
|
||||
// 菜单 3:网络摄像机绑定。中部绘制一个相机/联通关系图 (135px 下居中等比右移 X = 57)
|
||||
LCD_DrawRectBorder(57, 74, 20, 16, COLOR_CYAN);
|
||||
LCD_FillRect(65, 80, 4, 4, COLOR_CYAN);
|
||||
LCD_FillRect(77, 76, 2, 12, COLOR_CYAN);
|
||||
LCD_FillRect(79, 78, 2, 8, COLOR_CYAN);
|
||||
LCD_FillRect(81, 80, 2, 4, COLOR_CYAN);
|
||||
LCD_ShowStringCentered(150, "3. LIAISON", COLOR_WHITE, COLOR_BLACK); // 法语: 摄像机绑定
|
||||
LCD_ShowStringCentered(150, Lang_Get(STR_MENU_LIAISON), COLOR_WHITE, COLOR_BLACK); // 摄像机绑定
|
||||
}
|
||||
|
||||
// ====== 绘制底部的向下箭头三角标记 (在 135px 宽度下居中) ======
|
||||
@@ -411,6 +419,6 @@ void UI_ShowSetTimePage(u8 hour, u8 min, u8 selection, u8 blink_on)
|
||||
LCD_ShowString16x32(75, 100, time_str, COLOR_CYAN, COLOR_BLACK); // 采用青色特大字描绘分钟 (在 135px 下整体居中 X = 75)
|
||||
|
||||
// 补齐底部的固定辅助元素
|
||||
LCD_ShowStringCentered(150, "AM", COLOR_WHITE, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(195, "VEN 10-07", COLOR_GRAY, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(150, Lang_Get(STR_CLOCK_AMPM), COLOR_WHITE, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(195, Lang_Get(STR_CLOCK_DATE), COLOR_GRAY, COLOR_BLACK);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user