原始版本

This commit is contained in:
冯佳
2025-06-19 21:56:46 +08:00
parent fe98e5f010
commit a4841450cf
4152 changed files with 1910684 additions and 0 deletions

View File

@ -0,0 +1,236 @@
#ifndef _MENU_PACK_LOAD_H_
#define _MENU_PACK_LOAD_H_
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
typedef enum EMenuItemInfoType
{
MENU_ITEM_NORMAL,
MENU_ITEM_ALIAS,
MENU_ITEM_SUB_MENU,
} EMenuItemInfoType;
struct TMenuDescriptionItem
{
uint16_t menu_index : 8;
uint16_t next_menu_index : 8;
uint16_t prev_menu_index : 8;
uint16_t display_page : 8;
uint16_t max_menu_item : 8;
uint16_t action_index : 8;
uint16_t menu_name_str_offset;
uint16_t description_str_off;
uint16_t display_menu_index : 8;
uint16_t rsv : 8;
};
struct TMenuDescriptionInfo
{
uint32_t item_count;
struct TMenuDescriptionItem items[1];
};
typedef struct TMenuItemInfoTypeCommon
{
uint16_t type : 2;
uint16_t rsv : 14;
uint16_t : 8;
uint16_t action_index : 8;
} TMenuItemInfoTypeCommon;
typedef struct TMenuItemInfoTypeAlias
{
uint16_t type : 2;
uint16_t rsv : 14;
uint16_t alias_index : 8;
uint16_t action_index : 8;
} TMenuItemInfoTypeAlias;
typedef struct TMenuItemInfoTypeNormal
{
uint32_t type : 2;
uint32_t scale_format_index : 8;
uint32_t limit_index : 8;
uint32_t unit_index : 6;
uint32_t action_index : 8;
} TMenuItemInfoTypeNormal;
typedef struct TMenuItemInfoTypeSubMenu
{
uint16_t type : 2;
uint16_t rsv : 14;
uint16_t sub_menu_index : 8;
uint16_t action_index : 8;
} TMenuItemInfoTypeSubMenu;
typedef enum EMenuProperty
{
MENU_PROP_READ_ONLY = 0,
MENU_PROP_USER,
MENU_PROP_ENGINEER,
} EMenuProperty;
//每个菜单项12字节
struct TMenuItemInfo
{
uint16_t comm_str_offset;
uint16_t name_offset;
uint16_t comm_group_index : 8;
uint16_t menu_property : 8; //EMenuProperty
uint16_t remap_addr;
union {
TMenuItemInfoTypeCommon common;
TMenuItemInfoTypeAlias alias;
TMenuItemInfoTypeNormal normal;
TMenuItemInfoTypeSubMenu sub_menu;
} info;
};
struct TMenuPack2
{
uint32_t item_count;
struct TMenuItemInfo items[1];
};
struct TMenuPackItem
{
uint16_t menu_start_index;
uint16_t menu_items;
};
struct TMenuPack
{
uint16_t item_count;
uint16_t top_menu_index;
struct TMenuPackItem items[1];
};
struct TCommItem
{
uint32_t reg_start;
uint16_t reg_count;
uint16_t cycle_time;
uint16_t mqtt_menu_index;
uint16_t rsv[1];
};
struct TCommPack
{
uint32_t item_count;
struct TCommItem items[1];
};
struct TValueLimitItem
{
uint16_t min_string_off;
uint16_t max_string_off;
};
struct TValueLimitTable
{
uint32_t limit_count;
struct TValueLimitItem items[1];
};
struct TAliasTable2Item
{
int16_t value;
uint16_t alias_string_off;
};
struct TAliasPack2
{
uint32_t table_count;
struct TAliasTable2Item items[1];
};
struct TAliasTableItem
{
int16_t start_index;
uint16_t alias_item_nums;
};
struct TAliasPack
{
uint32_t table_count;
struct TAliasTableItem items[1];
};
struct TUnitPack
{
uint32_t unit_count;
uint16_t uint_string_off[1];
};
struct TActionPack
{
uint32_t action_count;
uint16_t action_string_off[1];
};
struct TScaleFormatItem
{
uint16_t scale_string_off;
uint16_t format_string_off;
};
struct TScaleFormatPack
{
uint32_t scale_format_count;
struct TScaleFormatItem items[1];
};
struct TStringPack
{
uint32_t table_string_size;
uint8_t table_string[1];
};
typedef struct
{
char file_version[8];
uint32_t header_size;
uint32_t menu_pack_offset;
uint32_t menu_pack2_offset;
uint32_t menu_description_offset;
uint32_t alias_pack_offset;
uint32_t alias_pack2_offset;
uint32_t scale_format_table_offset;
uint32_t unit_table_offset;
uint32_t limit_table_offset;
uint32_t comm_table_offset;
uint32_t action_table_offset;
uint32_t string_table_offset;
uint32_t rsv[3];
uint32_t data_size;
uint32_t data_crc;
uint32_t header_crc;
} TMenuPackFileHead;
typedef struct
{
const TMenuPackFileHead *pstcPackHeader;
struct TMenuPack *pastcMenuPack;
struct TMenuPack2 *pastMenuPack2;
struct TMenuDescriptionInfo *pastcMenuDescriptionInfo;
struct TAliasPack *pastcAliasPack;
struct TAliasPack2 *pastcAliasPack2;
struct TUnitPack *pastcUnitPack;
struct TScaleFormatPack *pastcFormatPack;
struct TValueLimitTable *pastcLimitPack;
struct TCommPack *pastcCommPack;
struct TActionPack *pastcActionPack;
struct TStringPack *pastcStringPack;
} TMenuPackFileInfo;
extern TMenuPackFileInfo g_stcMenuPack;
uint32_t file_crc32(const uint8_t *data, size_t len);
bool App_LoadMenuPackInfoBuf(const uint8_t *pbuf, int buf_size);
bool App_LoadMenuPackInfo(const char *file_name);
void App_UpdateMenuPackPtr(const TMenuPackFileHead *pstcPackHeader);
#endif /* _MAIN_H_ */