#ifndef __MENUS_H__ #define __MENUS_H__ #include "sys.h" #include "lib.h" #include "menu.h" #include "board.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 250 // 菜单刷新一个周期时间 单位毫秒 #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_SET_PID, // PID设置 MENUS_RESET_PARAMETERS, // 重置参数 // 其他类型的菜单 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 refush_sem; BOOL jump_work_sem; BOOL accelerate; // 加速显示 BOOL forced_acceleration; // 强制加速显示 menus_e current_menu; // 当前菜单功能,用于menus_task uint8_t dir; // 按键方向 0:正常, 1:180度 BOOL is_init; // 是否初始化 BOOL run_enable; // 运行使能 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 file_storage_t nvm1_file_storage; // 保存报警日志 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_set_wait_ms(uint16_t ms); // 设置等待时间 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(params_crc_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__