KT24-1110_65E-HA-651B/include_lib/update/update.h
2024-11-10 18:44:17 +08:00

146 lines
3.5 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _UPDATE_H_
#define _UPDATE_H_
#include "typedef.h"
extern u32 UPDATA_BEG;
#define UPDATA_FLAG_ADDR ((void *)((u32)&UPDATA_BEG + 0x08))
#define BOOT_STATUS_ADDR ((void *)((u32)&UPDATA_BEG)) //预留8个bytes
#define UPDATA_MAGIC (0x5A00) //防止CRC == 0 的情况
typedef enum {
UPDATA_NON = UPDATA_MAGIC,
UPDATA_READY,
UPDATA_SUCC,
UPDATA_PARM_ERR,
UPDATA_DEV_ERR,
UPDATA_KEY_ERR,
} UPDATA_RESULT;
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,
//NOTE:以上的定义不要调整,新升级方式在此下面定义;
USER_NORFLASH_UFW_UPDATA,
NON_DEV = 0xFFFF,
} UPDATA_TYPE;
// sd
enum {
SD_CONTROLLER_0 = 1,
SD_CONTROLLER_1,
};
enum {
SD0_IO_A = 1,
SD0_IO_B,
SD1_IO_A,
SD1_IO_B,
SD0_IO_C,
SD0_IO_D,
SD0_IO_E,
SD0_IO_F,
};
typedef struct _UPDATA_SD {
u8 control_type;
u8 control_io;
u8 online_check_way;
u8 max_data_baud;
u16 wDevTimeOutMax;
u8 per_online_status;
u8 hc_mode;
u8(*io_det_func)(void);
u8 power;
} UPDATA_SD;
// uart
typedef struct _UPDATA_UART {
u32 control_io_tx; //<IO口对接
u32 control_io_rx; //<IO口对接
u32 control_baud; //<波特率
u32 control_timeout; //<超时单位10ms
} UPDATA_UART; /*共12个bytes*/
#define UPDATE_PARAM_MAGIC 0x5441
#if (USE_SDFILE_NEW == 1)
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; //0x5441
//8byte
union {
struct {
u8 file_path[32]; //updata file path
};
struct {
u8 file_patch[32]; //updata file path
};
};
u8 parm_priv[32]; //sd updata
//64byte
u32 ota_addr;
u16 ext_arg_len;
u16 ext_arg_crc;
//8 byte
} UPDATA_PARM;
//8+64+8+32 =112;
#else
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
u8 file_patch[32]; //updata file patch
u8 parm_priv[32]; //sd updata
} UPDATA_PARM;
#endif
#define UPDATE_PRIV_PARAM_LEN 32
void update_mode_api(UPDATA_TYPE type, ...);
void update_mode_api_v2(UPDATA_TYPE type, void (*priv_param_fill_hdl)(UPDATA_PARM *p), void (*priv_update_jump_handle)(int type));
u16 update_result_get(void);
bool device_is_first_start();
int update_result_deal();
void update_result_set(u16 result);
bool update_success_boot_check(void);
typedef u8(*update_handler_t)(void);
typedef enum _UPDATE_STATE_T {
UPDATE_TASK_INIT,
UPDATE_CH_INIT,
UPDATE_CH_SUCESS_REPORT,
UPDATE_CH_EXIT,
UPDATE_CH_SAME,
} UPDATE_STATE_T;
struct update_target {
char *name;
update_handler_t driver_close;
};
//void update_param_private_fill_handle_register(void (*handle)(UPDATA_PARM *p));
#define REGISTER_UPDATE_TARGET(target) \
const struct update_target target sec(.update_target)
extern const struct update_target update_target_begin[];
extern const struct update_target update_target_end[];
#define list_for_each_update_target(p) \
for (p = update_target_begin; p < update_target_end; p++)
#endif