Files
banban/ql-bootloader/updater/inc/updater.h
T

120 lines
5.1 KiB
C

#ifdef QUECTEL_FOTA // quectel use file system to storage fotaPackage
#ifndef OTA_UPDATE
#define OTA_UPDATE
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include "libc.h"
#include "2ndboot.h"
#ifndef XZ_BUF_SIZE
#define XZ_BUF_SIZE 2048
#endif
/*+++++++++++++ALI_Log_Priority Start++++++++++++++++++++++++*/
#ifndef ALI_LOG_TAG
#define ALI_LOG_TAG __func__
#endif
#define ALI_LOG_SEVERITY_V 1
#define ALI_LOG_SEVERITY_D 2
#define ALI_LOG_SEVERITY_I 3
#define ALI_LOG_SEVERITY_W 4
#define ALI_LOG_SEVERITY_E 5
#ifndef ALI_LOG_SEVERITY
#define ALI_LOG_SEVERITY ALI_LOG_SEVERITY_V
#endif
#ifndef ALI_LOG_NDEBUG
#ifdef ALI_NDEBUG
#define ALI_LOG_NDEBUG 1
#else
#define ALI_LOG_NDEBUG 0
#endif
#endif
#define ALI_LOG_PRINT_IF uart_printf
#if ALI_LOG_NDEBUG
#define ALI_ALOGV(x,...)
#define ALI_ALOGD(x,...)
#else
#define ALI_ALOGV(x,...) do{if (ALI_LOG_SEVERITY <= ALI_LOG_SEVERITY_V) ALI_LOG_PRINT_IF(" %s [%s]: " x "\r\n","V",ALI_LOG_TAG,##__VA_ARGS__);}while(0)
#define ALI_ALOGD(x,...) do{if (ALI_LOG_SEVERITY <= ALI_LOG_SEVERITY_D) ALI_LOG_PRINT_IF(" %s [%s]: " x "\r\n","D",ALI_LOG_TAG,##__VA_ARGS__);}while(0)
#endif
#define ALI_ALOGI(x,...) do{if (ALI_LOG_SEVERITY <= ALI_LOG_SEVERITY_I) ALI_LOG_PRINT_IF(" %s [%s]: " x "\r\n","I",ALI_LOG_TAG,##__VA_ARGS__);}while(0)
#define ALI_ALOGW(x,...) do{if (ALI_LOG_SEVERITY <= ALI_LOG_SEVERITY_W) ALI_LOG_PRINT_IF(" %s [%s],[Func:%s],[Line:%d]: " x "\r\n","W",ALI_LOG_TAG,__func__,__LINE__,##__VA_ARGS__);}while(0)
#define ALI_ALOGE(x,...) do{if (ALI_LOG_SEVERITY <= ALI_LOG_SEVERITY_E) ALI_LOG_PRINT_IF(" %s [%s],[Func:%s],[Line:%d]: " x "\r\n","E",ALI_LOG_TAG,__func__,__LINE__,##__VA_ARGS__);}while(0)
/*+++++++++++++ALI_Log_Priority End++++++++++++++++++++++++*/
/* OTA update errorno. */
typedef enum {
OTA_UPDATER_OK = 0,
OTA_NB_INVALID_PARAM = -1,
OTA_NB_HEADER_FAIL = -2,
OTA_NB_MEMORY_FAIL = -3,
OTA_NB_READ_CTRL_FAIL = -4,
OTA_NB_READ_DIFF_FAIL = -5,
OTA_NB_READ_OLD_FAIL = -6,
OTA_NB_READ_EXTRA_FAIL = -7,
OTA_NB_WRITE_DATA_FAIL = -8,
OTA_NB_CRC_COMP_FAIL = -9,
OTA_XZ_PARAM_FAIL = -10,
OTA_XZ_CRC_FAIL = -11,
OTA_XZ_UNCOMP_FAIL = -12,
OTA_XZ_VERIFY_FAIL = -13,
OTA_XZ_MEM_FAIL = -14,
} OTA_UPDATER_E;
/* OTA upgrade magic <--> upg_flag */
#define OTA_UPGRADE_ALL 0x9669 /* upgrade all image: kernel+framework+app */
#define OTA_UPGRADE_XZ 0xA55A /* upgrade xz compressed image */
#define OTA_UPGRADE_DIFF 0xB44B /* upgrade diff compressed image */
#define OTA_UPGRADE_KERNEL 0xC33C /* upgrade kernel image only */
#define OTA_UPGRADE_APP 0xD22D /* upgrade app image only */
#define OTA_URL_LEN 256 /*OTA download url max len*/
#define OTA_HASH_LEN 66 /*OTA download file hash len*/
#define OTA_SIGN_LEN 256 /*OTA download file sign len*/
#define OTA_VER_LEN 64 /*OTA version string max len*/
typedef struct {
unsigned int dst_adr; /*Single Bank: Destination Address: APP partition.*/
unsigned int src_adr; /*Single Bank: Copy from Source Address: OTA partition.*/
unsigned int len; /*Single Bank: Download file len */
unsigned short crc; /*Single Bank: Download file CRC */
unsigned short upg_flag; /*Upgrade flag: OTA_UPGRADE_ALL OTA_UPGRADE_XZ OTA_UPGRADE_DIFF*/
unsigned char boot_count; /*Boot count: When >=3 Rollback to old version in BL for dual-banker boot*/
unsigned int upg_status; /*OTA upgrade status*/
unsigned char hash_type; /*OTA download hash type*/
char url[OTA_URL_LEN]; /*OTA download url*/
char sign[OTA_SIGN_LEN]; /*OTA download file sign*/
char hash[OTA_HASH_LEN]; /*OTA download file hash*/
char ver[OTA_VER_LEN]; /*OTA get version*/
unsigned int old_size; /*Diff upgrade: patch old data size*/
unsigned short patch_num; /*Diff upgrade: patch num*/
unsigned short patch_status;/*Diff upgrade: patch status*/
unsigned int patch_off; /*Diff upgrade: patch offset*/
unsigned int new_off; /*Diff upgrade: patch new data offset*/
unsigned int new_size; /*Diff upgrade: patch new data size*/
unsigned char reserve[18];
unsigned short param_crc; /*OTA Parameter crc*/
} ota_boot_param_t;
/* OTA updater component: User APIs. call it to complete FW uprade in your bootloader */
int ota_updater(void); /* ota updater main entry:ota upgrade check */
int ota_nbpatch_main(void); /* ota nbpatch main enrty. */
int ota_xz_main(void); /* ota xz uncompress main enrty */
int ota_image_check(unsigned int addr, unsigned int size, unsigned int crc); /* ota raw image crc check */
int ota_image_copy(unsigned int dst, unsigned int src, unsigned int size); /* ota raw image copy upgrade */
int ota_patch_read_param(ota_boot_param_t *ota_param); /* ota patch read parameter */
int ota_patch_write_param(ota_boot_param_t *ota_param); /* ota patch update parameter */
#endif
#endif