Files
banban/ql-bootloader/common/inc/updater_table.h
T

269 lines
7.9 KiB
C

#ifndef _UPDATER_TABLE_H_
#define _UPDATER_TABLE_H_
/**********************CONFIG PARAMETER *******************************
* CONFIG_ADD_UPDATER_TABLE_TEST_CASE: 1 --- add updater test case
* 0 --- remove updater test case
*
* CONFIG_STARTUP_OR_CP: 0 --- STARTUP
* 1 --- CP
**********************************************************************/
#define CONFIG_ADD_UPDATER_TABLE_TEST_CASE (0)
#define BUILD_IN_STARTUP (0)
#define BUILD_IN_CP (1)
#define CONFIG_STARTUP_OR_CP BUILD_IN_STARTUP
#if (CONFIG_STARTUP_OR_CP == BUILD_IN_STARTUP)
#include "common.h"
#else if(CONFIG_STARTUP_OR_CP == BUILD_IN_CP)
#include "gbl_types.h"
#endif
#include "updater_table_scatter.h"
// - UPDATER VALID MAGIC
#define UPDATER_VALID_MAGIC ( 0x1A1A1A1A )
// - UPDATER FUNCTION MAGIC
// - aa_bb_cc_dd
// UPDATER_FUNCTION_MAGIC_1 --- place important info in ther updater header
// UPDATER_FUNCTION_MAGIC_2 --- append dsp_adc.bin after updater.bin
#define UPDATER_FUNCTION_MAGIC_1 ( 0xBABC5A5A )
#define UPDATER_FUNCTION_MAGIC_2 ( 0x11111122 )
/************************************** FOTA_INFO ********************************************/
#define FOTA_ADUPS_NAME "FOTA_"##"ADUPS"
#define FOTA_REDSTONE_NAME "FOTA_"##"REDSTONE"
#define FOTA_RED_ALI_NAME "FOTA_"##"RED_ALI"
#define FOTA_ASRSD_NAME "FOTA_"##"ASRSD"
#define FOTA_ASRSPI_NAME "FOTA_"##"ASRSPI"
#define FOTA_ASRDM_NAME "FOTA_"##"ASRDM"
#define FOTA_DEFAULT_NAME "FOTA_"##"NO_FOTA"
#define UPDTAER_INVALID_VALUE 0x4c4c554E //NULL
/************************************** TABLE SIZE INFO ********************************************/
// Note: The following MACRO can not MODIFY
/*------------------ 1. Header info size union ------------------*/
//#define UPDATER_HEADER_TABLE_MAX_SIZE ( 256 ) // max size define in updater_table_scatter.h
// 1.1 updater loadtable info
#define UPDATER_LOADTABLE_SIZE ( 16 )
// 1.2 ext*.bin and component bin info
#define LOADTABLE_UPDATER_SYMBOL_SIZE ( 256 )
// 1.3 updater fota solution info
#define FOTA_SOLUTION_MAX_SIZE ( 48 )
// 1.4 updater version info
#define UPDATER_VERSION_INFO_MAX_SIZE ( 48 )
// 1.5 lcd info
#define UPDATER_LCD_INFO_MAX_SIZE ( 48 )
#define UPDATER_LCD_TYPE_INFO_MAX_SIZE ( UPDATER_LCD_INFO_MAX_SIZE )
// 1.6 updater header reserved size
#define UPDATER_HEADER_TABLE_RESERVED_SIZE ( UPDATER_HEADER_TABLE_MAX_SIZE - UPDATER_LOADTABLE_SIZE \
- LOADTABLE_UPDATER_SYMBOL_SIZE - FOTA_SOLUTION_MAX_SIZE \
- UPDATER_VERSION_INFO_MAX_SIZE - UPDATER_LCD_INFO_MAX_SIZE )
/*---------------------------------------------------------------------------------------------*/
#define PROMPT_MAX_SIZE (16)
/************************************** TABLE STRUCT ********************************************/
// 1. Header Info Table
// 1.1 updater loadtable
// 1.2 ext*.bin and component bin info
// 1.3 updater ota solution
// 1.4 updater version info
// 1.5 lcd info
// 1.6 reserved
/* 1.1 updater loadtable */
typedef union{
struct _loadtable_block{
UINT32 b2init;
UINT32 init;
UINT32 load_addr;
UINT32 magic;
}loadtable_block;
UINT8 filer[UPDATER_LOADTABLE_SIZE];
}UpdaterLoadTableUnion;
/* 1.2 ext*.bin and component bin info */
typedef struct{
char name[12];
unsigned int value;
}updater_symbol_item;
typedef struct {
// updater function magic
updater_symbol_item updater_function_magic;
//combine ext.bin
updater_symbol_item ext_combine_bin_size; // ext_partition size wihtout crc append
updater_symbol_item ext_combine_crc_size; // ext_partition size + crc append
//updater.bin
updater_symbol_item ext_updater_size;
//dsp_adc.bin
updater_symbol_item ext_dsp_adc_exec_addr;
updater_symbol_item ext_dsp_adc_size;
//updater header table size
updater_symbol_item ext_header_table_size;
}loadtable_updater_symbol_info;
typedef union{
loadtable_updater_symbol_info updater_symbol_info;
unsigned char filer[LOADTABLE_UPDATER_SYMBOL_SIZE]; /* max size*/
}LOADTABLE_AREA_UPDATER_SYMBOL;
/* 1.3 updater ota solution */
#define FOTA_SOLUTION_STRING_MAX_SIZE ( FOTA_SOLUTION_MAX_SIZE - PROMPT_MAX_SIZE )
#define FOTA_SOLUTION_PROMPT ( "fota_solution:" )
typedef union{
struct _fota_solution_block{
char prompt[PROMPT_MAX_SIZE];
char string[FOTA_SOLUTION_STRING_MAX_SIZE];
}fota_solution_block;
UINT8 filer[FOTA_SOLUTION_MAX_SIZE];
}UpdaterFotaSolutionUnion;
/* 1.4 updater version info */
#define UPDATER_VERSION_INFO_STRING_MAX_SIZE ( UPDATER_VERSION_INFO_MAX_SIZE - PROMPT_MAX_SIZE )
#define UPDATER_VERSION_INFO_PROMPT ( "updater_version:" )
typedef union{
struct _version_info_block{
char prompt[PROMPT_MAX_SIZE];
char string[UPDATER_VERSION_INFO_STRING_MAX_SIZE];
}version_info_block;
UINT8 filer[UPDATER_VERSION_INFO_MAX_SIZE];
}UpdaterVersionInfo;
/* 1.5 lcd type info */
typedef union{
struct _UpdaterLcdTypeInfo{
char oem_lcd_type[UPDATER_LCD_INFO_MAX_SIZE];
}UpdaterLcdTypeInfoStruct;
UINT8 filer[UPDATER_LCD_INFO_MAX_SIZE];
}UpdaterLcdTypeInfoUnion;
typedef struct
{
UpdaterLoadTableUnion loadtable_union;
LOADTABLE_AREA_UPDATER_SYMBOL symbol_info_uinon;
UpdaterFotaSolutionUnion fota_solution_union;
UpdaterVersionInfo version_union;
UpdaterLcdTypeInfoUnion lcd_info_union;
UINT8 reserved[UPDATER_HEADER_TABLE_RESERVED_SIZE];
}UpdaterHeaderInfo;
typedef enum{
fota_no_solution = 0,
fota_adups,
fota_redstone,
asrsd,
fota_asrspi,
fota_asrdm,
}FotaSolution_Enum;
typedef enum{
updater_no_magic = 0,
updater_magic1_support_query_info,
updater_magic2_support_query_info_and_append_dsp_adc,
}UpdaterMagicType_Enum;
typedef enum{
get_info_is_ok = 0, // choose download server according fota solution in updater.bin
get_info_error, // occur error when get info from updater.bin
get_no_info, // get no info in updater.bin
}GetUpdaterInfoRes_enum;
typedef struct{
char updater_version_info[UPDATER_VERSION_INFO_STRING_MAX_SIZE];
FotaSolution_Enum updater_fota_type_info;
UpdaterMagicType_Enum updater_function_magic_type;
}UpdaterHighPrioInfo_struct;
typedef struct{
UpdaterHighPrioInfo_struct updater_high_prio_info;
GetUpdaterInfoRes_enum updater_info_res;
}updater_fota_info_struct;
/**************************** EXTERNAL FUNCTION STATEMENT **************************/
// 1 User use
void updater_header_table_init(void);
UpdaterMagicType_Enum get_updater_function_magic_type(void);
BOOL IsUpdaterSupportQueryFotaInfo(void);
BOOL IsUpdaterSupportQueryExtImgInfo(void);
BOOL IsUpdaterAppendDspAdc(void);
// 1.1 - support query fota info
void get_updater_fota_info(updater_fota_info_struct *p_UpdaterFotaInfoStruct);
void dump_updater_fota_info(updater_fota_info_struct *p_UpdaterFotaInfo);
// 1.2 - support updater.bin append dsp_adc.bin
unsigned int updater_get_ext_combine_bin_size(void);
unsigned int updater_get_ext_combine_crc_size(void);
unsigned int updater_get_ext_updater_size(void);
unsigned int updater_get_ext_dsp_exec_addr(void);
unsigned int updater_get_ext_dsp_adc_size(void);
unsigned int updater_get_ext_dsp_adc_flash_start_addr(void);
// 2. internal debug
char *updater_get_fota_solution(void);
char *updater_get_version_info(void);
char *updater_get_lcd_info(void);
#if (CONFIG_ADD_UPDATER_TABLE_TEST_CASE == 1)
void test_get_fota_info_from_updater_header_table(void);
void test_get_fota_info_from_updater_header_table(void);
BOOL IsDspAdcValid(void);
#endif
#endif