This repository has been archived on 2025-02-28. You can view files and clone it, but cannot push or open issues or pull requests.
controller-hd/User/application/menus/menus.h

283 lines
13 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __MENUS_H__
#define __MENUS_H__
#include "sys.h"
#include "lib.h"
#include "menu.h"
#include "board.h"
#include "fal_execution.h"
#include "flow.h"
#include "menus_main.h"
#include "menus_setting.h"
#include "menus_test.h"
#include "menus_templete.h"
#define KEY_NONE BIT0 // 无按键
#define KEY_ESC BIT1 // 返回
#define KEY_UP BIT2 // 上
#define KEY_DOWN BIT3 // 下
#define KEY_ENT BIT4 // 确认
#define KEY_LEFT BIT5 // 左
#define KEY_RIGHT BIT6 // 右
#define KEY_AUTO BIT7 // 自动
#define WM_CREATE BIT8 // 创建
#define WM_DRAW BIT9 // 绘图
#define WM_LONG BIT11 // 长按
#define MENU_TICKS 100 // 菜单刷新时间 单位毫秒
#define SHOW_ACTUALS_NUM 60 // 图表用于显示的实际值个数
#define BUF_LEN 64 // 缓冲区长度
#define SHOW_MENU_ITEM_LINE 6 // 显示行数
#define SHOW_MENU_PAGE_LINE 8 // 显示页面行数
#define SHOW_CARD_PAGE_LINE 14 // 显示卡片页面行数
#define ICON_INIT_FLAG 0xFFFFFFFFFFFFFFFF
#define PASSWORD_TIME 60 * 30 // 密码访问时间 单位秒 30分钟
#define KEY_IS_LONG(st) (st & WM_LONG) // 判断是否长按
typedef enum
{
SET_CUSTOM_RESET, // 重置
SET_CUSTOM_SELF_TEST, // 自检
SET_CUSTOM_SELF_END_TEST, // 自检结束
SET_CUSTOM_SAVE_OK, // 保存完成
SET_CUSTOM_SAVE_FAIL, // 保存失败
SET_CUSTOM_LOADING, // 加载中
SET_CUSTOM_SET_OK, // 设置成功
SET_CUSTOM_SET_FAIL, // 设置失败
SET_CUSTOM_CANCEL, // 已取消
SET_CUSTOM_INPUT_ERROR, // 输入错误
SET_CUSTOM_RETURN_HOME, // 返回首页
SET_CUSTOM_RESET_DEVICE, // 重置参数,设备复位
SET_CUSTOM_RESET_PARAMS, // 重置参数
SET_CUSTOM_MAX,
} set_custom_e;
typedef enum
{
TIPS_TXT_MAIN_MENU, // 主菜单
TIPS_TXT_CHART_PAGE, // 首页:图表页面
TIPS_TXT_EDIT, // 编辑
TIPS_TXT_RESTORE, // 恢复
TIPS_TXT_CALIBRATION, // 校准
TIPS_TXT_PASSWORD, // 密码
TIPS_TXT_CURRENT_TOO_SMALL, // 电流太小
TIPS_TXT_ADJUST_RESULT_OK, // 调整结果成功
TIPS_TXT_ADJUST_RESULT_FAIL, // 调整结果失败
TIPS_TXT_UNKNOWN_ERROR, // 未知错误
TIPS_TXT_SELECT_DIAGNOSTIC_ITEMS, // 选择诊断项目
TIPS_TXT_FAULT_QUANTITY, // 故障数量
TIPS_TXT_RESTORE_ALL_PARAMETERS, // 恢复所有参数
TIPS_TXT_RESTORE_CALI_PARAMETERS, // 恢复校准参数
TIPS_TXT_RESTORE_DEV_PARAMETERS, // 恢复设备参数
TIPS_TXT_RESTORE_RT_DATA, // 恢复实时数据
TIPS_TXT_RESTORE_HART_DATA, // 恢复HART数据
TIPS_TXT_RESTORE_HART_PARAMETERS, // 恢复HART参数
TIPS_TXT_CONTROL_SIGNAL_GENERATOR, // 控制信号发生器
TIPS_TXT_CONTROL_PWM_CURRENT, // 控制PWM电流
TIPS_TXT_LIMIT_POSITION_0, // 限位位置0
TIPS_TXT_LIMIT_POSITION_100, // 限位位置100
TIPS_TXT_CURRENT, // 当前电流
TIPS_TXT_PRESSURE, // 当前压力
TIPS_TXT_MAX,
} tips_txt_e;
typedef enum
{
KEY_TXT_SELECT_OPT, // 选择操作
KEY_TXT_SHORT_PRESS, // 短按
KEY_TXT_LONG_PRESS, // 长按
KEY_TXT_BACK, // 返回
KEY_TXT_ENTER, // 进入
KEY_TXT_NEXT, // 下一个
KEY_TXT_PREVIOUS, // 上一个
KEY_TXT_CANCEL, // 取消
KEY_TXT_CONFIRM, // 确认
KEY_TXT_NEXT_PAGE, // 下一页
KEY_TXT_PREVIOUS_PAGE, // 上一页
KEY_TXT_CALIBRATION_OPTIONS, // 校准选项
KEY_TXT_CONFIRM_CALIBRATION, // 确认校准
KEY_TXT_CALIBRATION_SET, // 校准设置
KEY_TXT_RUN, // 开启
KEY_TXT_INCREASE, // 增加
KEY_TXT_DECREASE, // 减少
} key_txt_e;
typedef enum
{
KEY_MODLE_MAIN, // 主菜单
KEY_MODLE_SUB, // 子菜单
KEY_MODLE_PAGE, // 菜单页
KEY_MODLE_EDIT_PAGE, // 编辑页
KEY_MODLE_CALIBRATION_PAGE, // 校准页
KEY_MODLE_CALIBRATION_PAGE_2, // 校准页2
KEY_MODLE_CONFIRM_PAGE, // 确认页
KEY_MODLE_RUN_PAGE, // 运行页
KEY_MODLE_READ_PAGE, // 只读页
KEY_MODLE_CARD_PAGE, // 卡片页
} key_modle_e;
typedef enum
{
WORK_MENU_TEMPLETE_START,
WORK_MENU_TEMPLETE_1,
WORK_MENU_TEMPLETE_2,
WORK_MENU_TEMPLETE_3,
WORK_MENU_TEMPLETE_END,
} work_menu_templete_e; // 工作界面模版
typedef enum
{
MENUS_NONE = 0, // 无菜单
MENUS_LOADING, // 首页 引导页
MENUS_WORK, // 平时工作页面
MENUS_DESIGN, // 设计页面
MENUS_PASSWORD, // 密码页面
MENUS_MAIN, // 主菜单
MENUS_DEVICE_INFO, // 设备信息
MENUS_SELFTUNE, // 一键整定
MENUS_VALVE_DIAGNOSIS, // 设备诊断
MENUS_STROKE_DIAGNOSIS, // 特性测试
MENUS_SETTING, // 出厂设置
// 二级菜单:特性测试
MENUS_RAMP_TEST, // 斜坡测试
MENUS_STEP_TEST, // 阶跃测试
MENUS_STROKE_LIMIT_POSITION_TEST, // 行程限位测试
MENUS_DRIVER_TEST, // 驱动测试
MENUS_PWM_TEST, // PWM测试
MENUS_IO_TEST, // IO测试
// 二级菜单:出厂设置
MENUS_SET_PARAMETERS, // 参数设置
MENUS_RESET_PARAMETERS, // 恢复参数
MENUS_SET_PID, // PID设置
// 其他类型的菜单
MENUS_PAGE_NONE, // 无页面
MENUS_PAGE, // 页面菜单
MENUS_EDIT_PAGE, // 编辑页面
MENUS_RESTORE_PAGE, // 恢复页面
MENUS_SET_PAGE, // 设置页面
MENUS_CALIBRATION_PAGE, // 校准页面
MENUS_MAX, // 菜单最大值
} menus_e; // 菜单索引
typedef struct
{
char *psz_desc; /*!< 当前选项的字符串描述*/
char *psz_items_desc[MENU_MAX_NUM]; /*!< 当前选项中所有选项的字符串描述 */
menusize_t items_num; /*!< 当前菜单选项总数目 */
menusize_t show_base_item; /*!< 当前菜单首个显示的选项 */
menusize_t select_item; /*!< 当前菜单选中的选项 */
} parent_menu_info_t;
typedef struct
{
BOOL accelerate; // 加速显示
BOOL forced_acceleration; // 强制加速显示
menus_e current_menu; // 当前菜单功能用于menus_task
uint8_t dir; // 按键方向 0正常 1:180度
BOOL is_init; // 是否初始化
struct flow_sem jump_work_sem;
BOOL run_enable; // 运行使能
struct flow_sem refush_sem;
BOOL looding; // 加载中
uint8_t language; // 语言 0中文 1:英文
uint16_t last_window_no; // 上一个窗口号
uint16_t last_item_no; // 上一个菜单项号
uint8_t last_base_no; // 上一个基础菜单项,在小于最大菜单项时,用于记录第一个菜单项
uint8_t last_page_no; // 上一个页面
uint64_t wm_msg; // 窗体消息
uint32_t key_long_ticks; // 长按时间
int8_t key_accelerate_ticks; // 加速显示时间
// 内部用的变量
parent_menu_info_t parent_menu; // 父菜单控制
uint8_t valve_diagnosis_index; // 阀门诊断索引
uint8_t input_password[PASSWORD_LEN]; // 输入密码
uint8_t input_password_index; // 输入密码索引
uint32_t pass_access_time; // 密码访问时间
int16_t menus_task_wait_ticks; // 菜单任务等待时间
uint16_t menu_ticks; // 菜单刷新时间
uint16_t menu_ticks_count; // 菜单刷新时间计数
uint32_t used_time_start; // 绘图开始时间
uint32_t used_time; // 绘图使用时间
uint32_t last_update_time; // 上次更新时间
uint64_t icon_laster; // 图标上次
uint8_t work_templete_index; // 工作模板索引
uint8_t work_templete_page_index; // 工作模板页面索引(内容页)
uint8_t work_templete_page_total; // 工作模板页面总数(内容页)
uint8_t device_info_index; // 设备信息索引
menu_list_t *edit_items; // 编辑项
uint8_t initial_item; // 初始项
uint32_t edit_cache[4]; // 编辑缓存
BOOL(*set_cb)
(void); // 保存回调函数
BOOL(*done_cb)
(void); // 执行回调函数
// 内部回调函数
void (*menus_task_wait_cb)(void *p);
void *menus_task_wait_cb_parm;
void (*page_lable_info_draw)(menu_show_t *info);
} menus_t;
INTERNAL_EXTERN const menu_txt_t custom_txt_table[SET_CUSTOM_MAX]; // 自定义文本表
INTERNAL_EXTERN const menu_txt_t tips_txt_table[TIPS_TXT_MAX]; // 提示文本表
INTERNAL_EXTERN const menu_txt_t device_info_txt_table[DEVICE_INFO_TXT_MAX]; // 设备信息文本表
INTERNAL_EXTERN const device_info_index_e device_info_index[DEVICE_INFO_INDEX_MAX]; // 设备信息索引表
INTERNAL_EXTERN const device_info_index_e device_info_index_edit[]; // 设备信息编辑索引表
extern void menus_init(uint8_t language); // 初始化菜单
extern menus_t *get_menus(void); // 获取菜单
extern void menus_key_register(uint64_t key); // 注册按键
extern void menus_key_long_start(void); // 按键长按计时开始
extern void menus_key_long_stop(void); // 按键长按计时停止
extern void menus_jump(menus_e page, BOOL delay); // 跳转到指定菜单
extern void menus_jump_refush(void); // 跳转到刷新界面
extern void menus_jump_asynchronous(menus_e page, BOOL loading); // 跳转到工作界面
extern void menus_rebuild(void); // 重建菜单
extern void menus_set_scandir(uint8_t dir); // 设置菜单扫描方向
extern void menus_set_language(uint8_t language); // 设置菜单语言
extern void menus_set_work_index(uint8_t index); // 设置工作模板索引
extern void menus_set_font_size(font_type_e font); // 设置字体大小
INTERNAL_EXTERN void menus_first_items_show(menu_show_t *info); // 显示一级菜单项
INTERNAL_EXTERN void menus_second_items_show(menu_show_t *info); // 显示二级菜单项
INTERNAL_EXTERN void menus_process(void); // 菜单处理进程
INTERNAL_EXTERN void menus_task(void); // 菜单任务
INTERNAL_EXTERN void menus_update(void); // 更新菜单
INTERNAL_EXTERN void menus_show_custom_window(uint8_t index); // 设置自定义弹窗
INTERNAL_EXTERN void menus_show_confirm_window(void); // 显示确认窗口
INTERNAL_EXTERN void menus_show_edit_window(menu_show_t *info); // 显示编辑窗口
INTERNAL_EXTERN void menus_edit_task(void); // 编辑任务
INTERNAL_EXTERN BOOL menus_items_is_change(uint16_t current_item); // 判断菜单项是否改变
INTERNAL_EXTERN uint16_t get_menus_current_window_no(void); // 获取当前窗口号
INTERNAL_EXTERN BOOL menus_key_structure(uint64_t done_msg); // 页面任务
INTERNAL_EXTERN void menus_page_lable_show(menu_show_t *info); // 显示页面标签
INTERNAL_EXTERN void menus_page_draw_title(font_type_e font, char *prefix); // 画标题
INTERNAL_EXTERN void menus_layout_print_top(void); // 画界面
INTERNAL_EXTERN void menus_layout_print_arrow(key_modle_e modle); // 画箭头说明
INTERNAL_EXTERN BOOL menus_layout_print_icon(void); // 画图标
INTERNAL_EXTERN BOOL menus_storage_save(fal_key_e key); // 保存
INTERNAL_EXTERN BOOL menus_task_delay_check(void); // 菜单任务延时检查
INTERNAL_EXTERN void menus_accelerate(void); // 加速
INTERNAL_EXTERN void menus_accelerate_restore(void); // 加速恢复
// 加载界面
INTERNAL_EXTERN void menus_low_battery_draw(float32 voltage, BOOL voltage_right, float32 current, BOOL current_right); // 低电量
INTERNAL_EXTERN void menus_loading_draw(BOOL only_logo);
// 输入密码界面
INTERNAL_EXTERN void menus_password_window(BOOL init);
// 主菜单
INTERNAL_EXTERN void menus_enter(void);
INTERNAL_EXTERN void menus_exit(void);
INTERNAL_EXTERN void main_menu_load(void);
INTERNAL_EXTERN void main_menu_task(void);
extern BOOL is_selftune_menu(void);
#endif // __MENUS_H__