#ifndef __UPDATE_MAIN_H__ #define __UPDATE_MAIN_H__ #include "typedef.h" #include "tff.h" extern u32 UPDATE_BEG; extern u32 UPDATA_SIZE; #define UART_UPDATE_FLAG_ADDR (u32)(&UPDATE_BEG) #define UPDATE_FLAG_ADDR ((u32)(&UPDATE_BEG) + 0x8) #define UPDATE_PRIV_PARAM_LEN 32 #define UPDATA_MAGIC (0x5A00) //防止CRC == 0 的情况 // #define SEEK_SET 0 #<{(| Seek from beginning of file. |)}># // #define SEEK_CUR 1 #<{(| Seek from current position. |)}># // #define SEEK_END 2 #<{(| Seek from end of file. |)}># //给SDK的升级结果 typedef enum { UPDATA_NON = UPDATA_MAGIC, UPDATA_READY, UPDATA_SUCCESSFULLY, UPDATA_PARM_ERR, UPDATA_DEV_ERR, UPDATA_KEY_ERR, } UPDATA_RESULT_TO_SDK; //区分是否跳转还是断电重新上电进入loader typedef enum { UPDATE_JUMP = 0, UPDATE_POWERON, } UPDATE_MODE; typedef enum { UPDATE_PARM, UPDATE_START, UPDATE_END, } UPDATE_STEP; typedef enum { UPDATE_READ_TOUT_PARM = UPDATE_END + 1, // 根据远端ini文件的配合更新读超时时间 UPDATE_SDK_BEGIN_PARM, // 开始升级 } UPDATE_INI; typedef enum { USB_UPDATA = UPDATA_MAGIC, //0x5A00 SD0_UPDATA, //0x5A01 SD1_UPDATA, PC_UPDATA, UART_UPDATA, BT_UPDATA, BLE_APP_UPDATA, SPP_APP_UPDATA, DUAL_BANK_UPDATA, BLE_TEST_UPDATA, NORFLASH_UPDATA, // BLE_UPDATA, USER_NORFLASH_UFW_UPDATA, USER_LC_FLASH_UFW_UPDATA, USB_HID_UPDATA, DEV_NORFLASH_UFW_UPDATA, NET_UFW_UPDATA, USER_NANDFLASH_UFW_UPDATA, TESTBOX_UART_UPDATA, UPDIFF_FLASH_UPDATA, COMBAK_FLASH_UPDATA, DEV_UPDATA_MAX, DEV_UPDATE = 0xFFFE, NON_DEV_UPDATA = 0xFFFF, } UPDATA_TYPE; enum EXT_ARG_TYPE { EXT_LDO_TRIM_RES = 0, EXT_JUMP_FLAG, EXT_BT_MAC_ADDR, EXT_RF_PA_INFO, EXT_RESERVED_UPDATE, // 用于sdk传入参数控制是否升级预留区域 EXT_RESET_TIME_WITHOUT_CONN, // 用于sdk传入未连接状态保持多久就重启的超时时间 EXT_SD_IO_INFO, EXT_BT_WLA_INFO, EXT_MUTIL_UPDATE_NAME = 0x8, EXT_USER_API_BIN_INFO, EXT_NEW_SDK_UPD_AGAIN, EXT_NEW_FILENAME, EXT_KEEP_ROMIO_INFO = 0x10, EXT_NAND_PARAM = 0x11, EXT_SYS_CLK_PARAM = 0x12, EXT_TYPE_MAX = 0xff, }; typedef enum _UPDATA_RESULT { UPDATA_RESULT_SUCC = 1, UPDATA_RESULT_FAIL, UPDATA_RESULT_KEY_ERR, } UPDATA_RESULT; //回报给测试盒的? enum { BT_UPDATE_OVER = 0, BT_UPDATE_KEY_ERR, BT_UPDATE_CONNECT_ERR, }; enum { UPDATE_ERR_NONE = 0, UPDATE_ERR_UFW_HEAD_CRC_ERR, UPDATE_ERR_NOT_FIND_LOADER_FILE, UPDATE_ERR_NOT_FIND_TARGET_LOADER, UPDATE_ERR_LOADER_HEAD_CRC_ERR = 4, UPDATE_ERR_MALLOC_ERR, UPDATE_ERR_LOADER_WRITE_ERR, UPDATE_ERR_FILE_HANDLE_ERR, UPDATE_ERR_LOADER_VERIFY_ERR = 8, UPDATE_ERR_NOT_FIND_FLASH_BIN, UPDATE_ERR_FLASH_HEAD_CRC_ERR, UPDATE_ERR_NOT_FIND_TARGET_FILE, UPDATE_ERR_KEY_ERR = 12, UPDATE_ERR_UBOOT_NOT_MATCH, UPDATE_ERR_READ_REMOTE_FILE_ERR, UPDATE_ERR_REMOTE_RES_FILE_CRC_ERR, UPDATE_ERR_CODE_VERIFY_ERR = 16, UPDATE_ERR_RES0_VERIFY_ERR, UPDATE_ERR_NOT_FIND_RESERVE_DIR_FILE, UPDATE_ERR_LOCAL_FILE_HEAD_CRC_ERR, UPDATE_ERR_LOCAL_FILE_DATA_CRC_ERR = 20, UPDATE_ERR_PARAM_ERR, UPDATE_ERR_BT_CFG_UPDATE_ERR, UPDATE_ERR_TONE_UPDATE_ERR, UPDATE_ERR_RESERVED_CONFIG_UPDATE_ERR = 24, UPDATE_ERR_PRODUCT_ID_NOT_MATCH, UPDATE_ERR_EX_DSP_UPDATE_ERR, UPDATE_ERR_CONN_ERR, UPDATE_ERR_ERASE_FAIL = 28, UPDATE_ERR_UPDATE_FILE_SIZE_ERR, UPDATE_ERR_ANC_CFG_UPDATE_ERR, UPDATE_ERR_ANC_COEF_UPDATE_ERR, UPDATE_ERR_RESERVED_ZONE_UPDATE_ERR = 32, // 可以把错误更加具体化 UPDATE_ERR_FLASH_ID_ERR, UPDATE_ERR_CHIP_ID_ERR, UPDATE_ERR_EFUSE_OVERWRITE_ERR, UPDATE_ERR_EFUSE_BT_NAME_ERR, UPDATE_ERR_EFUSE_CHANNEL_ERR, UPDATE_ERR_ISD_CONFIG_ERR, UPDATE_ERR_LOCAL_EFUSE_CRC_ERR, UPDATE_ERR_LOCAL_EFUSE_WRITE_ERR, UPDATE_ERR_WRITE_P11_CODE_ERR, UPDATE_ERR_EFUSE_MASKROM_USE2_WRITE_ERR, }; //for rcsp update enum { DEV_CONN_STATE_DISCONNECTED = 0, DEV_CONN_STATE_CONNECTED, DEV_CONN_STATE_READY_UPDATE, DEV_CONN_STATE_START_UPDATE, }; typedef struct _UPDATA_PARM { u16 parm_crc; u16 parm_type; //UPDATA_TYPE:sdk pass parm to uboot u16 parm_result; //UPDATA_TYPE:uboot return result to sdk u16 magic; u8 file_patch[32]; u8 parm_priv[32]; u32 ota_addr; u16 ext_arg_len; u16 ext_arg_crc; } UPDATA_PARM; typedef struct _update_op_api_t { int (*ch_init)(void (*resume_hdl)(void *priv), int (*sleep_hdl)(void *priv)); u16(*f_open)(void); u16(*f_read)(void *fp, u8 *buff, u32 len); int (*f_seek)(void *fp, u8 type, u32 offset); u16(*f_stop)(u8 err); int (*notify_update_content_size)(u32 size); void (*ch_exit)(void *priv); void *priv; } update_op_api_t; typedef struct _update_mode_info_t { s32 type; void (*state_cbk)(u32 status, void *priv); const update_op_api_t *file_op; u8 task_en; } update_mode_info_t; void update_main(); void set_updata_result(u16 type, u16 result); u8 fs_update_result_transition(u8 err); extern u32 fs_dev_mount(u16 dev_type); void update_reset(void); u8 *update_param_ext_get(UPDATA_PARM *p, u8 ext_type); void *dev_update_handle_get(void); void mutil_cpu_set_offset(u32 offset); #endif