74 lines
3.1 KiB
C
74 lines
3.1 KiB
C
|
#ifndef __AW_BIN_PARSE_H__
|
||
|
#define __AW_BIN_PARSE_H__
|
||
|
|
||
|
#define NULL ((void *)0)
|
||
|
#define GET_32_DATA(w, x, y, z) ((unsigned int)((((uint32_t)w) << 24) | (((uint32_t)x) << 16) | (((uint32_t)y) << 8) | ((uint32_t)z)))
|
||
|
#define BIN_NUM_MAX 100
|
||
|
#define HEADER_LEN 60
|
||
|
/*********************************************************
|
||
|
*
|
||
|
* header information
|
||
|
*
|
||
|
********************************************************/
|
||
|
enum bin_header_version_enum {
|
||
|
HEADER_VERSION_1_0_0 = 0x01000000,
|
||
|
};
|
||
|
|
||
|
enum data_type_enum {
|
||
|
DATA_TYPE_REGISTER = 0x00000000,
|
||
|
DATA_TYPE_DSP_REG = 0x00000010,
|
||
|
DATA_TYPE_DSP_CFG = 0x00000011,
|
||
|
DATA_TYPE_SOC_REG = 0x00000020,
|
||
|
DATA_TYPE_SOC_APP = 0x00000021,
|
||
|
DATA_TYPE_MULTI_BINS = 0x00002000,
|
||
|
};
|
||
|
|
||
|
enum data_version_enum {
|
||
|
DATA_VERSION_V1 = 0X00000001, /*default little edian */
|
||
|
DATA_VERSION_MAX,
|
||
|
};
|
||
|
|
||
|
struct bin_header_info {
|
||
|
unsigned int header_len; /* Frame header length */
|
||
|
unsigned int check_sum; /* Frame header information-Checksum */
|
||
|
unsigned int header_ver; /* Frame header information-Frame header version */
|
||
|
unsigned int bin_data_type; /* Frame header information-Data type */
|
||
|
unsigned int bin_data_ver; /* Frame header information-Data version */
|
||
|
unsigned int bin_data_len; /* Frame header information-Data length */
|
||
|
unsigned int ui_ver; /* Frame header information-ui version */
|
||
|
unsigned char chip_type[8]; /* Frame header information-chip type */
|
||
|
unsigned int reg_byte_len; /* Frame header information-reg byte len */
|
||
|
unsigned int data_byte_len; /* Frame header information-data byte len */
|
||
|
unsigned int device_addr; /* Frame header information-device addr */
|
||
|
unsigned int valid_data_len; /* Length of valid data obtained after parsing */
|
||
|
unsigned int valid_data_addr; /* The offset address of the valid data obtained after parsing relative to info */
|
||
|
|
||
|
unsigned int reg_num; /* The number of registers obtained after parsing */
|
||
|
unsigned int reg_data_byte_len; /* The byte length of the register obtained after parsing */
|
||
|
unsigned int download_addr; /* The starting address or download address obtained after parsing */
|
||
|
unsigned int app_version; /* The software version number obtained after parsing */
|
||
|
};
|
||
|
|
||
|
/************************************************************
|
||
|
*
|
||
|
* function define
|
||
|
*
|
||
|
************************************************************/
|
||
|
struct bin_container {
|
||
|
unsigned int len; /* The size of the bin file obtained from the firmware */
|
||
|
unsigned char data[]; /* Store the bin file obtained from the firmware */
|
||
|
};
|
||
|
|
||
|
struct aw_bin {
|
||
|
unsigned char *p_addr; /* Offset pointer (backward offset pointer to obtain frame header information and important information) */
|
||
|
unsigned int all_bin_parse_num; /* The number of all bin files */
|
||
|
unsigned int multi_bin_parse_num; /* The number of single bin files */
|
||
|
unsigned int single_bin_parse_num; /* The number of multiple bin files */
|
||
|
struct bin_header_info header_info[BIN_NUM_MAX]; /* Frame header information and other important data obtained after parsing */
|
||
|
struct bin_container info; /* Obtained bin file data that needs to be parsed */
|
||
|
};
|
||
|
|
||
|
int aw_parsing_bin_file(struct aw_bin *bin);
|
||
|
int aw_parse_bin_header_1_0_0(struct aw_bin *bin);
|
||
|
#endif
|