283 lines
13 KiB
C
283 lines
13 KiB
C
#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__
|