237 lines
5.0 KiB
C
237 lines
5.0 KiB
C
#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_ */
|