/****************************************************************************** *(C) Copyright 2018 EIGENCOMM International Ltd. * All Rights Reserved ****************************************************************************** * Filename: fota_pub.h * * Description: * * History: 2021/10/24 created by xuwang * * Notes: * ******************************************************************************/ #ifndef FOTA_PUB_H #define FOTA_PUB_H /*----------------------------------------------------------------------------* * INCLUDES * *----------------------------------------------------------------------------*/ #include #include #include /*----------------------------------------------------------------------------* * MACROS * *----------------------------------------------------------------------------*/ #define FOTA_EOK 0 #define FOTA_EUNDEF -1 /* undefined error */ #define FOTA_EARGS -2 /* arguments invalid */ #define FOTA_EBATT -3 /* battery low */ #define FOTA_EPAR -4 /* parchive invalid */ #define FOTA_EPARSZ -5 /* parchive size err */ #define FOTA_EFLQUERY -6 /* flash query fail */ #define FOTA_EFLERASE -7 /* flash erase fail */ #define FOTA_EFLWRITE -8 /* flash write fail */ #define FOTA_EFLREAD -9 /* flash read fail */ #define FOTA_EMINIT -10 /* memory init fail */ #define FOTA_EMALLOC -11 /* memory alloc fail */ #define FOTA_EMFREE -12 /* memory free fail */ #define FOTA_EPVER -13 /* parver uncompatible */ #define FOTA_EPMETH -14 /* pmethod unsupported */ #define FOTA_EFWNIDENT -15 /* fw non-identical */ #define FOTA_EPATCH -16 /* fw patch fail */ #define FOTA_EUNFOUND -17 /* item not found */ #define FOTA_EOVERFLOW -18 /* resource ran out */ #define FOTA_EPERM -19 /* scenario not permitted */ #define FOTA_ECHKSUM -20 /* checksum calc fail*/ #define FOTA_EDCONV -21 /* data convertion fail*/ #define FOTA_EVERIFY -22 /* verify signature fail*/ #define FOTA_EAUTH -23 /* no auth header*/ #define FOTA_TICK_RATE_MS (1) #define FOTA_SIGNED_ECDSA_LEN 64 #define FOTA_SHA256_HASH_LEN 32 #define FOTA_ALIGN_UP(x,sz) (((x) + ((sz) - 1)) & (~((sz) - 1))) #define FOTA_ALIGN_DOWN(x,sz) ((x) & (~((sz) - 1))) #if (FOTA_PRESET_RAM_ENABLE == 1) #include "common.h" #define FOTA_LOGI(tag,fmt,args...) EC_Printf(fmt, ##args) #define FOTA_TRACE(tag,fmt,args...) BL_TRACE(fmt, ##args) #define FOTA_SPRINTF(buf,args...) BL_SPRINTF(buf, ##args) #define FOTA_RAND() (0) #else #define FOTA_LOGI(tag,fmt,args...) printf(fmt, ##args) #define FOTA_TRACE(tag,fmt,args...) printf(fmt, ##args) #define FOTA_SPRINTF(buf,args...) sprintf(buf, ##args) #define FOTA_RAND() rand() #endif /*----------------------------------------------------------------------------* * DATA TYPE DEFINITION * *----------------------------------------------------------------------------*/ /*-definition of 'fwAttr:3' */ typedef enum { FOTA_FA_UNDEF = 0, FOTA_FA_BL, FOTA_FA_AP, FOTA_FA_CP, FOTA_FA_APP, FOTA_FA_APP2, FOTA_FA_XOBJ, FOTA_FA_SYSH, FOTA_FA_MAXNUM }FotaFwAttr_e; typedef enum { FOTA_NVM_ZONE_REMAP = 0, /* remap zone, enabled when *.par is stored in FS zone */ FOTA_NVM_ZONE_DELTA, /* delta zone for downloading & patching */ FOTA_NVM_ZONE_BKUP, FOTA_NVM_ZONE_BLU, /* bl updater */ FOTA_NVM_ZONE_AP, FOTA_NVM_ZONE_CP, FOTA_NVM_ZONE_APP, FOTA_NVM_ZONE_APP2, FOTA_NVM_ZONE_XOBJ, FOTA_NVM_ZONE_SYSH, FOTA_NVM_ZONE_MAXNUM, FOTA_NVM_ZONE_UNDEF = 0xff, FOTA_NVM_ZONE_ANY = FOTA_NVM_ZONE_UNDEF }FotaNvmZoneId_e; typedef uint32_t FotaNvmZoneId_bm; #define FOTA_NVM_BM_ZONE_NONE (0) #define FOTA_NVM_BM_ZONE_REMAP (1 << FOTA_NVM_ZONE_REMAP) #define FOTA_NVM_BM_ZONE_DELTA (1 << FOTA_NVM_ZONE_DELTA) #define FOTA_NVM_BM_ZONE_BKUP (1 << FOTA_NVM_ZONE_BKUP) #define FOTA_NVM_BM_ZONE_BLU (1 << FOTA_NVM_ZONE_BLU) #define FOTA_NVM_BM_ZONE_AP (1 << FOTA_NVM_ZONE_AP) #define FOTA_NVM_BM_ZONE_CP (1 << FOTA_NVM_ZONE_CP) #define FOTA_NVM_BM_ZONE_APP (1 << FOTA_NVM_ZONE_APP) #define FOTA_NVM_BM_ZONE_APP2 (1 << FOTA_NVM_ZONE_APP2) #define FOTA_NVM_BM_ZONE_XOBJ (1 << FOTA_NVM_ZONE_XOBJ) #define FOTA_NVM_BM_ZONE_SYSH (1 << FOTA_NVM_ZONE_SYSH) typedef enum { FOTA_CA_SHA256SUM = 0, FOTA_CA_SHA224SUM, FOTA_CA_ALGO_MAXNUM }FotaChksumAlgo_e; /* FOTA_CA_SHA256SUM */ typedef struct { uint8_t *input; uint8_t *output; size_t inLen; uint32_t isLast; }FotaCaSha256Sum_t; /* for fotaNvmDoExtension() */ typedef enum { FOTA_DEF_US_DELAY = 0, FOTA_DEF_WDT_KICK, FOTA_DEF_WDT_START, FOTA_DEF_WDT_STOP, FOTA_DEF_GET_RAM_SIZE, FOTA_DEF_CHK_BATTERY, FOTA_DEF_CHK_DYN_MEM, FOTA_DEF_CHK_REMAP_ZONE, FOTA_DEF_CHK_DELTA_STATE, FOTA_DEF_CHK_BASE_IMAGE, /* not used any more, call 'fotaNvmVerifyDelta()' instead, just for compatibility here! */ FOTA_DEF_CHK_TOTAL_PROGRESS, FOTA_DEF_IS_IMAGE_IDENTICAL, FOTA_DEF_SET_DOWNLOAD_OVER, FOTA_DEF_RPT_DFU_PROGRESS, FOTA_DEF_GET_DFU_PROGRESS, FOTA_DEF_RPT_DFU_RESULT, FOTA_DEF_SET_DFU_RESULT, FOTA_DEF_GET_DFU_RESULT, /* not used any more, call 'fotaNvmGetOtaResult()' instead, just for compatibility here! */ FOTA_DEF_PREPARE_DFU, FOTA_DEF_CLOSING_DFU, FOTA_DEF_ADJ_ZONE_SIZE, FOTA_DEF_SET_XOBJ_ZONE, FOTA_DEF_CHK_HLS_STATE, FOTA_DEF_CHK_BOOT_STATE, FOTA_DEF_CHK_BOOT_HDSEC, FOTA_DEF_CHK_SIGN_STATE /* is delta signed? */ }FotaDoExtensionFlags_e; /* FOTA_DEF_US_DELAY */ typedef struct { uint32_t usec; }FotaDefUsDelay_t; /* FOTA_DEF_GET_RAM_SIZE */ typedef struct { uint32_t avlbSize; }FotaDefGetRamSize_t; /* FOTA_DEF_CHK_BATTERY */ typedef struct { uint8_t isBattLow; /* 0/1 */ uint8_t rsvd[3]; }FotaDefChkBattery_t; /* FOTA_DEF_CHK_DYN_MEM */ typedef struct { uint8_t isEnable; /* 0/1 */ uint8_t rsvd[3]; }FotaDefChkDynMem_t; /* FOTA_DEF_CHK_REMAP_ZONE */ typedef struct { uint8_t isEnable; /* 0/1 */ uint8_t rsvd[3]; }FotaDefChkRemapZone_t; /* FOTA_DEF_CHK_DELTA_STATE */ typedef struct { uint8_t isValid; /* 0/1 */ uint8_t state; /* FotaDeltaChkState_e */ uint8_t rsvd[2]; }FotaDefChkDeltaState_t; /* FOTA_DEF_CHK_BASE_IMAGE */ typedef struct { uint8_t isMatched; /* 0/1 */ uint8_t rsvd[3]; }FotaDefChkBaseImage_t; /* FOTA_DEF_IS_IMAGE_IDENTICAL */ typedef struct { uint32_t zid; /* FotaNvmZoneId_e */ uint32_t size; uint8_t *hash; }FotaDefIsImageIdentical_t; typedef enum { FOTA_DPR_FREQ_HIGH = 1, FOTA_DPR_FREQ_MEDIUM, FOTA_DPR_FREQ_LOW }FotaDfuProgRptFreq_e; /* FOTA_DEF_CHK_TOTAL_PROGRESS * FOTA_DEF_RPT_DFU_PROGRESS * FOTA_DEF_GET_DFU_PROGRESS */ typedef struct { uint8_t pkgNum; uint8_t pkgId; uint16_t isTotal :1; uint16_t rptFreq :2; /* FotaDfuProgRptFreq_e */ uint16_t percent :13; }FotaDefDfuProgress_t; typedef enum { FOTA_DCS_DELTA_CHECKOK = 0, /* no error */ FOTA_DCS_DELTA_UNFOUND, FOTA_DCS_DELTA_PARTIAL, FOTA_DCS_DELTA_INVALID, FOTA_DCS_DELTA_UNMATCHB, /* unmatched base image */ FOTA_DCS_DELTA_UNMATCHN, /* unmatched new image */ FOTA_DCS_DELTA_PATCHFAIL, /* patching failure */ FOTA_DCS_DELTA_SIGNFAIL, FOTA_DCS_DELTA_UNDEF }FotaDeltaChkState_e; typedef enum { FOTA_DRC_DFU_UNDEF = 0, FOTA_DRC_DFU_SUCC = 1, FOTA_DRC_DFU_FAIL = 99 }FotaDfuResultCode_e; /* FOTA_DEF_SET_DFU_RESULT * FOTA_DEF_GET_DFU_RESULT */ typedef struct { uint8_t dfuResult; /* FotaDfuResultCode_e */ uint8_t deltaState; /* FotaDeltaChkState_e */ uint8_t rsvd[2]; }FotaDefDfuResult_t; /* FOTA_DEF_PREPARE_DFU */ typedef struct { uint8_t rsvd[4]; }FotaDefPrepareDfu_t; /* FOTA_DEF_CLOSING_DFU */ typedef struct { uint8_t rsvd[4]; }FotaDefClosingDfu_t; /* FOTA_DEF_ADJ_ZONE_SIZE */ typedef struct { uint32_t zid; /* FotaNvmZoneId_e */ uint32_t size; }FotaDefAdjZoneSize_t; /* FOTA_DEF_SET_XOBJ_ZONE */ typedef struct { uint32_t handle; uint32_t size; uint32_t ovhd; uint32_t extras; }FotaDefSetXobjZone_t; /* FOTA_DEF_CHK_HLS_STATE */ typedef struct { uint8_t isEnable; uint8_t rsvd[3]; }FotaDefChkHlsState_t; /* FOTA_DEF_CHK_BOOT_STATE */ typedef struct { uint8_t isSigned; /* 0/1: security boot or not? */ uint8_t rsvd[3]; }FotaDefChkBootState_t; /* FOTA_DEF_CHK_BOOT_HDSEC */ typedef struct { uint8_t fwAttr; /* FotaFwAttr_e */ uint8_t shaAlgo; /* FotaChksumAlgo_e */ uint8_t rsvd[2]; uint8_t hash[FOTA_SHA256_HASH_LEN]; uint8_t ecdsa[FOTA_SIGNED_ECDSA_LEN]; }FotaDefChkBootHdSec_t; /* FOTA_DEF_CHK_SIGN_STATE */ typedef struct { uint8_t isEnable; /* 0/1 */ uint8_t rsvd[3]; }FotaDefChkSignState_t; #define FOTA_AUTH_MAGIC_0 0xEC #define FOTA_AUTH_MAGIC_1 0xAE #define FOTA_CHECK_AUTH_MAGIC(magic) \ (((FOTA_AUTH_MAGIC_0 == ((uint8_t*)(magic))[0]) && \ (FOTA_AUTH_MAGIC_1 == ((uint8_t*)(magic))[1])) ? 1 : 0) typedef struct { uint8_t magic[2]; /* 0xEC,0xAE */ uint8_t rsvdb; uint8_t curveType :2; /* 0: 256; 1: 224*/ uint8_t rsvdBits :6; uint32_t rsvdw[2]; uint8_t sign[FOTA_SIGNED_ECDSA_LEN]; }CustFotaAuthHdr_t; /* * definition of 'pmagic': ec-delta/diff-fw */ #define FOTA_PARCHIVE_MAGIC_0 0xEC #define FOTA_PARCHIVE_MAGIC_1 0xDF #define FOTA_CHECK_PAR_MAGIC(magic) \ (((FOTA_PARCHIVE_MAGIC_0 == ((uint8_t*)(magic))[0]) && \ (FOTA_PARCHIVE_MAGIC_1 == ((uint8_t*)(magic))[1])) ? 1 : 0) #define FOTA_PAR_RETEN_SIZE_4M 40 #define FOTA_PAR_RETEN_SIZE_16M 136 typedef struct { uint8_t pmagic[2]; /* 0xEC,0xDF */ uint8_t rsvd0; uint8_t rsvdBit0:7; uint8_t psigned :1; /* 0/1: is system signed bin included or not? */ uint16_t fotaCap :3; /* fota capacity(total size of images) in every single patching, 2^pcap(MB) */ uint16_t rsvdBit1:13; uint16_t rsvd1; uint32_t parLen; /* including hdr len */ uint8_t parHash[FOTA_SHA256_HASH_LEN]; #if !defined(__CC_ARM) uint8_t retention[0]; #endif }CustFotaParHdr_t; typedef struct { uint32_t rsvd0 :5; uint32_t fwAttr :3; /* FotaFwAttr_e */ uint32_t rsvd1 :24; uint32_t pkgLen; /* including hdr len */ uint32_t rsvd2[3]; uint32_t baseFwSize; uint8_t baseFwHash[FOTA_SHA256_HASH_LEN]; }CustFotaPkgHdr_t; /*----------------------------------------------------------------------------* * GLOBAL FUNCTIONS DECLEARATION * *----------------------------------------------------------------------------*/ #ifdef __cplusplus } #endif #endif