#include "language.h" /* 全局变量定义 ---------------------------------------------------------------------------------------------------*/ /** * @brief 当前系统语言 */ static SystemLang_e sg_current_language = SYSTEM_LANG_CHINESE; /** * @brief 中文文本数组 */ static const char *sg_chinese_text[] = { [TEXT_ENTER] = "进入", [TEXT_EXIT] = "退出", [TEXT_RETURN] = "返回", [TEXT_OK] = "确定", [TEXT_CANCEL] = "取消", [TEXT_SAVE] = "保存", [TEXT_LOAD] = "加载", [TEXT_MAIN_MENU] = "主菜单", [TEXT_MAIN_MEASUREMENT] = "测量", [TEXT_MAIN_PROTECTION] = "保护", [TEXT_MAIN_CONTROL] = "控制", [TEXT_MAIN_SETTING] = "设置", [TEXT_MAIN_RECORD] = "记录", [TEXT_MAIN_HELP] = "帮助", [TEXT_MAIN_ABOUT] = "关于", [TEXT_MEASURE_VOLTAGE] = "电压", [TEXT_MEASURE_CURRENT] = "电流", [TEXT_MEASURE_POWER] = "功率", [TEXT_MEASURE_ENERGY] = "能量", [TEXT_MEASURE_FREQUENCY] = "频率", [TEXT_MEASURE_TEMPERATURE] = "温度", [TEXT_PROTECT_OVER_VOLTAGE] = "过电压保护", [TEXT_PROTECT_UNDER_VOLTAGE] = "欠电压保护", [TEXT_PROTECT_OVER_CURRENT] = "过电流保护", [TEXT_PROTECT_SETTING] = "保护设置", [TEXT_CONTROL_ON_OFF] = "开关控制", [TEXT_CONTROL_START_STOP] = "启停控制", [TEXT_CONTROL_AUTO_MANUAL] = "自动/手动", [TEXT_SETTING_LANGUAGE] = "语言设置", [TEXT_RECORD_EVENT] = "事件记录", [TEXT_HELP_GUIDE] = "指南", [TEXT_ABOUT_VERSION] = "版本信息", [TEXT_PERSIST_SAVE_STATE] = "保存菜单状态", [TEXT_PERSIST_RESTORE_STATE] = "恢复菜单状态", [TEXT_PERSIST_SAVE_SUCCESS] = "保存成功", [TEXT_PERSIST_SAVE_FAILED] = "保存失败", [TEXT_PERSIST_RESTORE_SUCCESS] = "恢复成功", [TEXT_PERSIST_RESTORE_FAILED] = "恢复失败", [TEXT_ERROR] = "错误", [TEXT_WARNING] = "警告", [TEXT_SUCCESS] = "成功", [TEXT_INFO] = "信息", [TEXT_TEST] = "测试", [TEXT_SELECT_OPTION] = "选择操作", [TEXT_CURRENT] = "当前", [TEXT_STATUS] = "状态", [TEXT_SUMMARY] = "摘要", [TEXT_EMPTY] = "空", [TEXT_CURRENT_SELECTION] = "当前选择", [TEXT_OPERATIONS] = "操作", [TEXT_SELECT_ITEM] = "选择项", [TEXT_ENTER_SUBMENU] = "进入子菜单", [TEXT_RETURN_PARENT] = "返回父菜单", [TEXT_SELECT_PREVIOUS] = "选择上一项", [TEXT_SELECT_NEXT] = "选择下一项", [TEXT_START_DEFAULT] = "从默认开始", [TEXT_REGISTER_CALLBACK_FAILED] = "注册回调失败", [TEXT_RESTORE_MENU_STATE] = "恢复菜单状态", [TEXT_RESTORE_MENU_STATE_FAILED] = "恢复菜单状态失败", [TEXT_SAVE_MENU_STATE_FAILED] = "保存菜单状态失败", [TEXT_UP_ARROW] = "上箭头", [TEXT_DOWN_ARROW] = "下箭头", [TEXT_LEFT_ARROW] = "左箭头", [TEXT_RIGHT_ARROW] = "右箭头", }; /** * @brief 英文文本数组 */ static const char *sg_english_text[] = { [TEXT_ENTER] = "Enter", [TEXT_EXIT] = "Exit", [TEXT_RETURN] = "Return", [TEXT_OK] = "OK", [TEXT_CANCEL] = "Cancel", [TEXT_SAVE] = "Save", [TEXT_LOAD] = "Load", [TEXT_MAIN_MENU] = "Main Menu", [TEXT_MAIN_MEASUREMENT] = "Measurement", [TEXT_MAIN_PROTECTION] = "Protection", [TEXT_MAIN_CONTROL] = "Control", [TEXT_MAIN_SETTING] = "Setting", [TEXT_MAIN_RECORD] = "Record", [TEXT_MAIN_HELP] = "Help", [TEXT_MAIN_ABOUT] = "About", [TEXT_MEASURE_VOLTAGE] = "Voltage", [TEXT_MEASURE_CURRENT] = "Current", [TEXT_MEASURE_POWER] = "Power", [TEXT_MEASURE_ENERGY] = "Energy", [TEXT_MEASURE_FREQUENCY] = "Frequency", [TEXT_MEASURE_TEMPERATURE] = "Temperature", [TEXT_PROTECT_OVER_VOLTAGE] = "Over Voltage Protection", [TEXT_PROTECT_UNDER_VOLTAGE] = "Under Voltage Protection", [TEXT_PROTECT_OVER_CURRENT] = "Over Current Protection", [TEXT_PROTECT_SETTING] = "Protection Setting", [TEXT_CONTROL_ON_OFF] = "On/Off", [TEXT_CONTROL_START_STOP] = "Start/Stop", [TEXT_CONTROL_AUTO_MANUAL] = "Auto/Manual", [TEXT_SETTING_LANGUAGE] = "Language Setting", [TEXT_RECORD_EVENT] = "Event Record", [TEXT_HELP_GUIDE] = "Guide", [TEXT_ABOUT_VERSION] = "Version Info", [TEXT_PERSIST_SAVE_STATE] = "Save Menu State", [TEXT_PERSIST_RESTORE_STATE] = "Restore Menu State", [TEXT_PERSIST_SAVE_SUCCESS] = "Save Success", [TEXT_PERSIST_SAVE_FAILED] = "Save Failed", [TEXT_PERSIST_RESTORE_SUCCESS] = "Restore Success", [TEXT_PERSIST_RESTORE_FAILED] = "Restore Failed", [TEXT_ERROR] = "Error", [TEXT_WARNING] = "Warning", [TEXT_SUCCESS] = "Success", [TEXT_INFO] = "Info", [TEXT_TEST] = "Test", [TEXT_SELECT_OPTION] = "Select Option", [TEXT_CURRENT] = "Current", [TEXT_STATUS] = "Status", [TEXT_SUMMARY] = "Summary", [TEXT_EMPTY] = "Empty", [TEXT_CURRENT_SELECTION] = "Current Selection", [TEXT_OPERATIONS] = "Operations", [TEXT_SELECT_ITEM] = "Select Item", [TEXT_ENTER_SUBMENU] = "Enter Submenu", [TEXT_RETURN_PARENT] = "Return Parent", [TEXT_SELECT_PREVIOUS] = "Select Previous", [TEXT_SELECT_NEXT] = "Select Next", [TEXT_START_DEFAULT] = "Start Default", [TEXT_REGISTER_CALLBACK_FAILED] = "Register Callback Failed", [TEXT_RESTORE_MENU_STATE] = "Restore Menu State", [TEXT_RESTORE_MENU_STATE_FAILED] = "Restore Menu State Failed", [TEXT_SAVE_MENU_STATE_FAILED] = "Save Menu State Failed", [TEXT_UP_ARROW] = "Up Arrow", [TEXT_DOWN_ARROW] = "Down Arrow", [TEXT_LEFT_ARROW] = "Left Arrow", [TEXT_RIGHT_ARROW] = "Right Arrow", }; /** * @brief 日语文本数组 */ static const char *sg_japanese_text[] = { [TEXT_ENTER] = "入る", [TEXT_EXIT] = "退出", [TEXT_RETURN] = "戻る", [TEXT_OK] = "OK", [TEXT_CANCEL] = "キャンセル", [TEXT_SAVE] = "保存", [TEXT_LOAD] = "読み込む", [TEXT_MAIN_MENU] = "メインメニュー", [TEXT_MAIN_MEASUREMENT] = "計測", [TEXT_MAIN_PROTECTION] = "保護", [TEXT_MAIN_CONTROL] = "制御", [TEXT_MAIN_SETTING] = "設定", [TEXT_MAIN_RECORD] = "記録", [TEXT_MAIN_HELP] = "ヘルプ", [TEXT_MAIN_ABOUT] = "について", [TEXT_MEASURE_VOLTAGE] = "電圧", [TEXT_MEASURE_CURRENT] = "電流", [TEXT_MEASURE_POWER] = "電力", [TEXT_MEASURE_ENERGY] = "エネルギー", [TEXT_MEASURE_FREQUENCY] = "周波数", [TEXT_MEASURE_TEMPERATURE] = "温度", [TEXT_PROTECT_OVER_VOLTAGE] = "過電圧保護", [TEXT_PROTECT_UNDER_VOLTAGE] = "不足電圧保護", [TEXT_PROTECT_OVER_CURRENT] = "過電流保護", [TEXT_PROTECT_SETTING] = "保護設定", [TEXT_CONTROL_ON_OFF] = "オン/オフ", [TEXT_CONTROL_START_STOP] = "スタート/ストップ", [TEXT_CONTROL_AUTO_MANUAL] = "オート/マニュアル", [TEXT_SETTING_LANGUAGE] = "言語設定", [TEXT_RECORD_EVENT] = "イベント記録", [TEXT_HELP_GUIDE] = "ガイド", [TEXT_ABOUT_VERSION] = "バージョン情報", [TEXT_PERSIST_SAVE_STATE] = "メニュー状態を保存", [TEXT_PERSIST_RESTORE_STATE] = "メニュー状態を復元", [TEXT_PERSIST_SAVE_SUCCESS] = "保存成功", [TEXT_PERSIST_SAVE_FAILED] = "保存失敗", [TEXT_PERSIST_RESTORE_SUCCESS] = "復元成功", [TEXT_PERSIST_RESTORE_FAILED] = "復元失敗", [TEXT_ERROR] = "エラー", [TEXT_WARNING] = "警告", [TEXT_SUCCESS] = "成功", [TEXT_INFO] = "情報", [TEXT_TEST] = "テスト", [TEXT_SELECT_OPTION] = "オプションを選択", [TEXT_CURRENT] = "現在", [TEXT_STATUS] = "ステータス", [TEXT_SUMMARY] = "サマリー", [TEXT_EMPTY] = "空", [TEXT_CURRENT_SELECTION] = "現在の選択", [TEXT_OPERATIONS] = "操作", [TEXT_SELECT_ITEM] = "項目を選択", [TEXT_ENTER_SUBMENU] = "サブメニューに入る", [TEXT_RETURN_PARENT] = "親メニューに戻る", [TEXT_SELECT_PREVIOUS] = "前の項目を選択", [TEXT_SELECT_NEXT] = "次の項目を選択", [TEXT_START_DEFAULT] = "デフォルトから開始", [TEXT_REGISTER_CALLBACK_FAILED] = "コールバック登録失敗", [TEXT_RESTORE_MENU_STATE] = "メニュー状態を復元", [TEXT_RESTORE_MENU_STATE_FAILED] = "メニュー状態復元失敗", [TEXT_SAVE_MENU_STATE_FAILED] = "メニュー状態保存失敗", [TEXT_UP_ARROW] = "上矢印", [TEXT_DOWN_ARROW] = "下矢印", [TEXT_LEFT_ARROW] = "左矢印", [TEXT_RIGHT_ARROW] = "右矢印", }; /** * @brief 德语文本数组 */ static const char *sg_german_text[] = { [TEXT_ENTER] = "Eingeben", [TEXT_EXIT] = "Verlassen", [TEXT_RETURN] = "Zurück", [TEXT_OK] = "OK", [TEXT_CANCEL] = "Abbrechen", [TEXT_SAVE] = "Speichern", [TEXT_LOAD] = "Laden", [TEXT_MAIN_MENU] = "Hauptmenü", [TEXT_MAIN_MEASUREMENT] = "Messung", [TEXT_MAIN_PROTECTION] = "Schutz", [TEXT_MAIN_CONTROL] = "Steuerung", [TEXT_MAIN_SETTING] = "Einstellung", [TEXT_MAIN_RECORD] = "Aufzeichnung", [TEXT_MAIN_HELP] = "Hilfe", [TEXT_MAIN_ABOUT] = "Über", [TEXT_MEASURE_VOLTAGE] = "Spannung", [TEXT_MEASURE_CURRENT] = "Strom", [TEXT_MEASURE_POWER] = "Leistung", [TEXT_MEASURE_ENERGY] = "Energie", [TEXT_MEASURE_FREQUENCY] = "Frequenz", [TEXT_MEASURE_TEMPERATURE] = "Temperatur", [TEXT_PROTECT_OVER_VOLTAGE] = "Überspannungsschutz", [TEXT_PROTECT_UNDER_VOLTAGE] = "Unterspannungsschutz", [TEXT_PROTECT_OVER_CURRENT] = "Überstromschutz", [TEXT_PROTECT_SETTING] = "Schutz-Einstellung", [TEXT_CONTROL_ON_OFF] = "Ein/Aus", [TEXT_CONTROL_START_STOP] = "Start/Stopp", [TEXT_CONTROL_AUTO_MANUAL] = "Auto/Manuell", [TEXT_SETTING_LANGUAGE] = "Spracheinstellung", [TEXT_RECORD_EVENT] = "Ereignisaufzeichnung", [TEXT_HELP_GUIDE] = "Anleitung", [TEXT_ABOUT_VERSION] = "Versionsinfo", [TEXT_PERSIST_SAVE_STATE] = "Menüzustand speichern", [TEXT_PERSIST_RESTORE_STATE] = "Menüzustand wiederherstellen", [TEXT_PERSIST_SAVE_SUCCESS] = "Speichern erfolgreich", [TEXT_PERSIST_SAVE_FAILED] = "Speichern fehlgeschlagen", [TEXT_PERSIST_RESTORE_SUCCESS] = "Wiederherstellen erfolgreich", [TEXT_PERSIST_RESTORE_FAILED] = "Wiederherstellen fehlgeschlagen", [TEXT_ERROR] = "Fehler", [TEXT_WARNING] = "Warnung", [TEXT_SUCCESS] = "Erfolg", [TEXT_INFO] = "Info", [TEXT_TEST] = "Test", [TEXT_SELECT_OPTION] = "Option wählen", [TEXT_CURRENT] = "Aktuell", [TEXT_STATUS] = "Status", [TEXT_SUMMARY] = "Zusammenfassung", [TEXT_EMPTY] = "Leer", [TEXT_CURRENT_SELECTION] = "Aktuelle Auswahl", [TEXT_OPERATIONS] = "Operationen", [TEXT_SELECT_ITEM] = "Element auswählen", [TEXT_ENTER_SUBMENU] = "In Untermenü eintreten", [TEXT_RETURN_PARENT] = "Zu übergeordnetem Menü zurückkehren", [TEXT_SELECT_PREVIOUS] = "Vorheriges auswählen", [TEXT_SELECT_NEXT] = "Nächstes auswählen", [TEXT_START_DEFAULT] = "Standard starten", [TEXT_REGISTER_CALLBACK_FAILED] = "Rückrufregistrierung fehlgeschlagen", [TEXT_RESTORE_MENU_STATE] = "Menüzustand wiederherstellen", [TEXT_RESTORE_MENU_STATE_FAILED] = "Wiederherstellung des Menüzustands fehlgeschlagen", [TEXT_SAVE_MENU_STATE_FAILED] = "Speichern des Menüzustands fehlgeschlagen", [TEXT_UP_ARROW] = "Pfeil nach oben", [TEXT_DOWN_ARROW] = "Pfeil nach unten", [TEXT_LEFT_ARROW] = "Pfeil nach links", [TEXT_RIGHT_ARROW] = "Pfeil nach rechts", }; /** * @brief 语言文本映射表 */ static const char **sg_language_text_map[] = { [SYSTEM_LANG_CHINESE] = sg_chinese_text, [SYSTEM_LANG_ENGLISH] = sg_english_text, [SYSTEM_LANG_JAPANESE] = sg_japanese_text, [SYSTEM_LANG_GERMAN] = sg_german_text, }; /** * @brief 全局菜单节点映射表 */ const MenuNodeInfo_t menu_node_map[] = { // 一级菜单 {MENU_NODE_ID_MAIN, MENU_NODE_ID_NONE, TEXT_MAIN_MENU, 1, MENU_NODE_ATTR_HAS_CHILDREN | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_MEASUREMENT, MENU_NODE_ID_MAIN, TEXT_MAIN_MEASUREMENT, 1, MENU_NODE_ATTR_HAS_CHILDREN | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_PROTECTION, MENU_NODE_ID_MAIN, TEXT_MAIN_PROTECTION, 1, MENU_NODE_ATTR_HAS_CHILDREN | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_CONTROL, MENU_NODE_ID_MAIN, TEXT_MAIN_CONTROL, 1, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_SETTING, MENU_NODE_ID_MAIN, TEXT_MAIN_SETTING, 1, MENU_NODE_ATTR_HAS_CHILDREN | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_RECORD, MENU_NODE_ID_MAIN, TEXT_MAIN_RECORD, 1, MENU_NODE_ATTR_HAS_CHILDREN | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_HELP, MENU_NODE_ID_MAIN, TEXT_MAIN_HELP, 1, MENU_NODE_ATTR_HAS_CHILDREN | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_ABOUT, MENU_NODE_ID_MAIN, TEXT_MAIN_ABOUT, 1, MENU_NODE_ATTR_HAS_CHILDREN | MENU_NODE_ATTR_VISIBLE}, // 二级菜单:测量菜单子项 {MENU_NODE_ID_MEASUREMENT_VOLTAGE, MENU_NODE_ID_MEASUREMENT, TEXT_MEASURE_VOLTAGE, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_MEASUREMENT_CURRENT, MENU_NODE_ID_MEASUREMENT, TEXT_MEASURE_CURRENT, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_MEASUREMENT_POWER, MENU_NODE_ID_MEASUREMENT, TEXT_MEASURE_POWER, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_MEASUREMENT_ENERGY, MENU_NODE_ID_MEASUREMENT, TEXT_MEASURE_ENERGY, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_MEASUREMENT_FREQUENCY, MENU_NODE_ID_MEASUREMENT, TEXT_MEASURE_FREQUENCY, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_MEASUREMENT_TEMPERATURE, MENU_NODE_ID_MEASUREMENT, TEXT_MEASURE_TEMPERATURE, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, // 二级菜单:保护菜单子项 {MENU_NODE_ID_PROTECTION_OVER_VOLTAGE, MENU_NODE_ID_PROTECTION, TEXT_PROTECT_OVER_VOLTAGE, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_PROTECTION_UNDER_VOLTAGE, MENU_NODE_ID_PROTECTION, TEXT_PROTECT_UNDER_VOLTAGE, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_PROTECTION_OVER_CURRENT, MENU_NODE_ID_PROTECTION, TEXT_PROTECT_OVER_CURRENT, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_PROTECTION_SETTING, MENU_NODE_ID_PROTECTION, TEXT_PROTECT_SETTING, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, // 二级菜单:控制菜单子项 {MENU_NODE_ID_CONTROL_ON_OFF, MENU_NODE_ID_CONTROL, TEXT_CONTROL_ON_OFF, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_CONTROL_START_STOP, MENU_NODE_ID_CONTROL, TEXT_CONTROL_START_STOP, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_CONTROL_AUTO_MANUAL, MENU_NODE_ID_CONTROL, TEXT_CONTROL_AUTO_MANUAL, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, // 二级菜单:其他子项 {MENU_NODE_ID_SETTING_LANGUAGE, MENU_NODE_ID_SETTING, TEXT_SETTING_LANGUAGE, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_RECORD_EVENT, MENU_NODE_ID_RECORD, TEXT_RECORD_EVENT, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_HELP_GUIDE, MENU_NODE_ID_HELP, TEXT_HELP_GUIDE, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, {MENU_NODE_ID_ABOUT_VERSION, MENU_NODE_ID_ABOUT, TEXT_ABOUT_VERSION, 2, MENU_NODE_ATTR_OPERABLE | MENU_NODE_ATTR_VISIBLE}, }; /** * @brief 菜单节点映射表大小 */ const uint32_t menu_node_map_size = sizeof(menu_node_map) / sizeof(menu_node_map[0]); /* 函数实现 ---------------------------------------------------------------------------------------------------------*/ /** * @brief 初始化语言模块 */ MenuErrCode language_init(void) { // 初始化核心菜单库语言模块 MenuErrCode ret = menu_lang_init(); if (ret != MENU_ERR_OK) { return ret; } // 设置默认语言 return set_language(SYSTEM_LANG_CHINESE); } /** * @brief 根据文本ID获取对应语言的文本字符串 */ const char* get_text(TextId_e text_id) { if (text_id >= TEXT_MAX) { return NULL; } if (sg_current_language >= SYSTEM_LANG_MAX) { return NULL; } return sg_language_text_map[sg_current_language][text_id]; } /** * @brief 设置当前系统语言 */ MenuErrCode set_language(SystemLang_e lang) { if (lang >= SYSTEM_LANG_MAX) { return MENU_ERR_INVALID_PARAM; } sg_current_language = lang; // 同步到核心菜单库 return menu_lang_set_current((LangId)lang); } /** * @brief 获取当前系统语言 */ SystemLang_e get_current_language(void) { return sg_current_language; } /** * @brief 根据菜单节点ID获取对应的文本ID */ TextId_e get_menu_text_id(MenuNodeId_e node_id) { for (uint32_t i = 0; i < menu_node_map_size; i++) { if (menu_node_map[i].node_id == node_id) { return menu_node_map[i].text_id; } } return TEXT_MAX; } /** * @brief 根据菜单节点ID获取对应的父节点ID */ MenuNodeId_e get_menu_parent_id(MenuNodeId_e node_id) { for (uint32_t i = 0; i < menu_node_map_size; i++) { if (menu_node_map[i].node_id == node_id) { return menu_node_map[i].parent_id; } } return MENU_NODE_ID_NONE; } /** * @brief 检查菜单节点是否有子节点 */ uint8_t menu_node_has_children(MenuNodeId_e node_id) { for (uint32_t i = 0; i < menu_node_map_size; i++) { if (menu_node_map[i].node_id == node_id) { return MENU_NODE_HAS_ATTR(menu_node_map[i].attributes, MENU_NODE_ATTR_HAS_CHILDREN); } } return 0; } /** * @brief 检查菜单节点是否可操作 */ uint8_t menu_node_is_operable(MenuNodeId_e node_id) { for (uint32_t i = 0; i < menu_node_map_size; i++) { if (menu_node_map[i].node_id == node_id) { return MENU_NODE_HAS_ATTR(menu_node_map[i].attributes, MENU_NODE_ATTR_OPERABLE); } } return 0; } /** * @brief 获取菜单节点的显示文本 */ const char* get_menu_node_text(MenuNodeId_e node_id) { TextId_e text_id = get_menu_text_id(node_id); if (text_id == TEXT_MAX) { return NULL; } return get_text(text_id); }