473 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			473 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /****************************************************************************
 | |
|  *
 | |
|  * Copyright(c) 2019 by Aerospace C.Power-tech Technologies. ALL RIGHTS RESERVED.
 | |
|  *
 | |
|  * This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
 | |
|  * be copied by any method or incorporated into another program without
 | |
|  * the express written consent of Aerospace C.Power. This Information or any portion
 | |
|  * thereof remains the property of Aerospace C.Power. The Information contained herein
 | |
|  * is believed to be accurate and Aerospace C.Power assumes no responsibility or
 | |
|  * liability for its use in any way and conveys no license or title under
 | |
|  * any patent or copyright and makes no representation or warranty that this
 | |
|  * Information is free from patent or copyright infringement.
 | |
|  *
 | |
|  * ****************************************************************************/
 | |
| 
 | |
| #ifndef IOT_IMG_HDR_H
 | |
| #define IOT_IMG_HDR_H
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| /* pack for the structures in the whole file */
 | |
| #pragma pack(push)    /* save the pack status */
 | |
| #pragma pack(1)        /* 1 byte align */
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|     devKunlun   = 0xDC01, /* KL1/KL2 */
 | |
|     devKunlun2  = 0xDC02, /* KL2 */
 | |
|     devKunlun3  = 0xDC03, /* KL3 */
 | |
|     devMAX      = 0xFFFF
 | |
| }dvcType;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|     imgROM      = 0x0000, /* Maybe,ROM doesn't need a imgType */
 | |
|     imgSP       = 0xFC00, /* sp */
 | |
|     imgSBL      = 0xFC01, /* sbl */
 | |
|     imgFRW      = 0xFC02, /* kl1: 1MB fw, uncompressed for sta, run in flash; compressed for cco, run in psram */
 | |
|     imgCFG      = 0xFC03, /* The first pib file. */
 | |
|     imgEFUSE    = 0xFC04, /* efuse */
 | |
|     imgOEM      = 0xFC05, /* oem */
 | |
|     imgFRW2     = 0xFC06, /* The second fw, maybe the backup one. not used. */
 | |
|     imgCFG2     = 0xFC07, /* The second pib file. */
 | |
|     imgCFRW1    = 0xFC08, /* kl1: 2MB fw, compressed for sta or cco, run in flash; kl2: 4M flash fw */
 | |
|     imgCFRW2    = 0xFC09, /* The second fw, maybe the backup one. not used. */
 | |
|     imgCFRW     = 0xFC0A, /* kl1: 2MB fw, compressed for sta or cco, run in psram; kl2: 4M psram fw */
 | |
|     imgREF      = 0xFC0B, /* ref */
 | |
|     imgCUS      = 0xFC0C, /* cus */
 | |
|     imgCFRW4F   = 0xFC0D, /* kl1: 4MB fw, compressed for sta or cco, run in flash */
 | |
|     imgCFRW4P   = 0xFC0E, /* kl1: 4MB fw, compressed for sta or cco, run in psram */
 | |
|     imgMAX      = 0xFFFF, /* invalid */
 | |
| }imgType;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|     devV1Kunlun = 0x01, /* KL1/KL2 */
 | |
|     devV1Kunlun2= 0x02, /* KL2 */
 | |
|     devV1Kunlun3= 0x03, /* KL3 */
 | |
|     devV1MAX    = 0xFF
 | |
| }dvcTypeV1;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|     imgV1ROM      = 0x00, /* Maybe,ROM doesn't need a imgType */
 | |
|     imgV1SBL      = 0x01, /* sbl */
 | |
|     imgV1FRWPLC   = 0x02, /* FW-PLC */
 | |
|     imgV1CFG      = 0x03, /* The first pib file. */
 | |
|     imgV1OEM      = 0x05, /* oem */
 | |
|     imgV1FRWCUS   = 0x06, /* FW-CUS */
 | |
|     imgV1MAX      = 0xFF  /* invalid */
 | |
| }imgTypeV1;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|     encType_none    = 0x00,
 | |
|     encType_aa      = 0xAA,
 | |
|     encType_99      = 0x99,
 | |
| }encType;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|     zipType_none    = 0x00, /* Uncompressed file. */
 | |
|     zipType_defult  = 0x01, /* Compressed with lzma, level-0. */
 | |
|     zipType_max     = 0xFF
 | |
| }zipType;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|     sizeType_0MB    = 0x00,
 | |
|     sizeType_1MB    = 0x01,
 | |
|     sizeType_2MB    = 0x02,
 | |
|     sizeType_4MB    = 0x04,
 | |
|     sizeType_8MB    = 0x08,
 | |
|     sizeType_max    = 0xFF
 | |
| }sizeType;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|     hdrVer_00       = 0x00, /* V0.0, first edition */
 | |
|     hdrVer_01       = 0x01, /* V0.1, be from v0.0, enable 4m flash module, kl1 kl2 used it */
 | |
|     hdrVer_02       = 0x02, /* V0.2, be from V0.1, offset->layout index + resv[3], kl1 kl2 */
 | |
| 
 | |
|     hdrVer_10       = 0x10, /* V1.0, enable kl3, kl3 used it */
 | |
| 
 | |
|     hdrVer_max      = 0xFF
 | |
| }hdrVersion;
 | |
| 
 | |
| #define IOT_MAGIC_NO                    0x5566
 | |
| 
 | |
| #define IOT_XOR_VALUE                   0xAA
 | |
| #define IOT_XOR_VALUE_FLX               0x99
 | |
| #define IOT_XOR_VALUE_QJ                0x66
 | |
| #define IOT_XOR_VALUE_SPE               0xCC
 | |
| #define IOT_XOR_VALUE_GX                0x33
 | |
| #define IOT_XOR_VALUE_DT                0xDD
 | |
| #define IOT_XOR_VALUE_YP                0xA9
 | |
| 
 | |
| #define IOT_FILE_MODE_PLAIN             0x00
 | |
| #define IOT_FILE_MODE_ADD               0x01
 | |
| #define IOT_FILE_MODE_SUB               0x02
 | |
| #define IOT_FILE_MODE_XOR               0x03
 | |
| #define IOT_FILE_MODE_UNKNOWN           0xFF
 | |
| 
 | |
| #define IOT_IMG_FLAG_MASK               0xf
 | |
| #define IOT_IMG_FLAG_OFFSET             0x0
 | |
| #define IOT_IMG_SIZE_MASK               0xf
 | |
| #define IOT_IMG_SIZE_OFFSET             0x4
 | |
| 
 | |
| /* image global flag: bit0-3 */
 | |
| #define IOT_IMG_FLAG_LZMA_EN            0x4
 | |
| #define IOT_IMG_FLAG_FW2_EXT            0x8
 | |
| 
 | |
| /* image size: bit4-7 */
 | |
| #define IOT_IMG_FLAG_SIZE_1M            0x1
 | |
| #define IOT_IMG_FLAG_SIZE_2M            0x2
 | |
| 
 | |
| #define IOT_PKG_HDR_LEN 96
 | |
| 
 | |
| typedef struct iot_pkg_hdr {
 | |
|     /* 0 - plain, 1 - add enc_patern, 2 - dec enc_patern */
 | |
|     uint8_t enctype;
 | |
|     /* encrypt pattern */
 | |
|     uint8_t pattern;
 | |
|     /* 0 for CCo, 1 for STA. other value is reserved. */
 | |
|     uint16_t dev_type;
 | |
|     /* CRC of the whole upgrade file */
 | |
|     uint32_t file_crc;
 | |
|     /* length of the upgrade file */
 | |
|     uint32_t file_len;
 | |
|     /* magic number */
 | |
|     uint32_t magic_no;
 | |
|     /* version info */
 | |
|     uint32_t version;
 | |
|     /* start index of sp section */
 | |
|     uint32_t sp_start;
 | |
|     /* length of sp section */
 | |
|     uint32_t sp_len;
 | |
|     /* start index of sbl section */
 | |
|     uint32_t sbl_start;
 | |
|     /* length of sbl section */
 | |
|     uint32_t sbl_len;
 | |
|     /* start of oem section */
 | |
|     uint32_t oem_start;
 | |
|     /* length of oem section */
 | |
|     uint32_t oem_len;
 | |
|     /* start index of pib section */
 | |
|     uint32_t pib_start;
 | |
|     /* length of pib section */
 | |
|     uint32_t pib_len;
 | |
|     /* start index of fw section */
 | |
|     uint32_t fw_start;
 | |
|     /* length of fw section */
 | |
|     uint32_t fw_len;
 | |
|     /* start index of efuse section */
 | |
|     uint32_t efuse_start;
 | |
|     /* length of efuse section */
 | |
|     uint32_t efuse_len;
 | |
|     /* start index of fw2 section */
 | |
|     uint32_t fw2_start;
 | |
|     /* length of fw2 section */
 | |
|     uint32_t fw2_len;
 | |
|     /* start index of reference section */
 | |
|     uint32_t ref_start;
 | |
|     /* length of reference section */
 | |
|     uint32_t ref_len;
 | |
|     /* start index of custom section */
 | |
|     uint32_t cus_start;
 | |
|     /* length of custom section */
 | |
|     uint32_t cus_len;
 | |
|     /* vendor id*/
 | |
|     uint16_t vendor_id;
 | |
|     /* image type */
 | |
|     uint8_t img_type;
 | |
|     /* image flags */
 | |
|     uint8_t img_flag;
 | |
| }iot_pkg_hdr_t;
 | |
| 
 | |
| /*
 | |
| 
 | |
| Format of image:
 | |
| 
 | |
| 0                         31
 | |
| ____________________________
 | |
| |__________________________|     -->   image header size 64Bytes
 | |
| |                          |
 | |
| |                          |
 | |
| |          PAYLOAD         |
 | |
| |                          |
 | |
| |         _________________|
 | |
| |        |XXXXXXXXXXXXXXXXX|     -->    X is FIXED pad  for 32Byte-aligning, suggested keeping '0'.
 | |
| ----------------------------
 | |
| 0                         31
 | |
| 
 | |
| 
 | |
| Description for image header V0 :
 | |
| 0                                                                                                           64
 | |
| ______________________________________________________________________________________________________________
 | |
| | _dvcType | _imgType | _imgSize | _imgVer | _bltTimeS | _bltTimeB | _imgCRC | _guard  | rev[8] | sha256[32]|
 | |
| --------------------------------------------------------------------------------------------------------------
 | |
| |  2Byte   |  2Byte   |  4Byte   |  2Byte  |  2Byte    |  4Byte    |  4Byte  |  4Byte  |  8Byte|  32Byte    |
 | |
| --------------------------------------------------------------------------------------------------------------
 | |
| 
 | |
| When written into file, PLS use big-endian . eg :
 | |
| 
 | |
|                  _________________________________________________________
 | |
| image-header:     |     _dvcType=0xDEAD     |     _imgType=0xBEEF      |
 | |
|                  ------------------------------------------------------  .......
 | |
| bytes-stream:     | byte0=0xDE | byte1=0xAD |  byte2=0xBE | byte3=0xEF |
 | |
|                  ---------------------------------------------------------
 | |
| 
 | |
| */
 | |
| #define HEADER_REV_SIZE     0
 | |
| #define SHA256_SIZE         32
 | |
|  /* 64Bytes-len */
 | |
| typedef struct
 | |
| {
 | |
|     /* Refrence to enum dvcType. */
 | |
|     uint16_t    devType;
 | |
|     /* Refrence to enum imgType. _dvcType + _imgType -> MagicNum. */
 | |
|     uint16_t    imgType;
 | |
|     /* Size of Payload only.NOT include imgHdr or data for aligning */
 | |
|     uint32_t    imgSize;
 | |
|     /* Version. 0xA1C8 stands for V 10.1.200 (0x F.F.FF).V 15.15.255 is maximum. */
 | |
|     uint16_t    imgVer;
 | |
|     /* Psram size, 0, 1, 2, 4, unit is MB. */
 | |
|     uint8_t     psramSize;
 | |
|     /* Header version. reference for hdrVersion. */
 | |
|     uint8_t     hdrVer;
 | |
|     /* firmware size, non-compressed */
 | |
|     uint32_t    fwSize;
 | |
|     /* CRC32 for 'payload + pad for aligning' */
 | |
|     uint32_t    imgCRC;
 | |
|     /* fixed, 0xa4e49a17 */
 | |
|     uint32_t    guard;
 | |
|     /* flash layout index */
 | |
|     uint8_t     layoutIdx;
 | |
|     /* reserved */
 | |
|     uint8_t     resv[3];
 | |
|     /* reserved */
 | |
|     uint32_t    fwCRC;
 | |
|     /* sha256 for payload */
 | |
|     uint8_t     sha256[SHA256_SIZE];
 | |
| } imgHdrV0;
 | |
| 
 | |
| /* 64 bytes */
 | |
| typedef struct
 | |
| {
 | |
|     /* Refrence to enum dvcType. */
 | |
|     uint8_t     devType;
 | |
|     /* Refrence to enum imgType. _dvcType + _imgType -> MagicNum. */
 | |
|     uint8_t     imgType;
 | |
|     /* Refrence to enum encType. */
 | |
|     uint8_t     encType;
 | |
|     /*
 | |
|      * bit0 : Only for ROM while loading SBL.
 | |
|      *      1b-Quad read enable if supported, 0b-Single byte read mode.
 | |
|      */
 | |
|     uint8_t     cfg;
 | |
|     /* Size of Payload only.NOT include imgHdr or data for aligning */
 | |
|     uint32_t    imgSize;
 | |
|     /* Compress type, reference for zipType. */
 | |
|     uint8_t     zipType;
 | |
|     /* Flash size, reference for sizeType. */
 | |
|     uint8_t     flashSize;
 | |
|     /* Psram/DDR size, reference for sizeType. */
 | |
|     uint8_t     psramSize;
 | |
|     /* Header version. reference for hdrVersion. */
 | |
|     uint8_t     hdrVer;
 | |
|     uint32_t    imgVer;
 | |
|     /* CRC32 for 'payload + pad for aligning' */
 | |
|     uint32_t    imgCRC;
 | |
|     /* fixed, 0xa4e49a17 */
 | |
|     uint32_t    guard;
 | |
|     /* flash layout index */
 | |
|     uint8_t     layoutIdx;
 | |
|     /* reserved */
 | |
|     uint8_t     resv[3];
 | |
|     /* Run address. */
 | |
|     uint32_t    runAddr;
 | |
|     /* sha256 for payload */
 | |
|     uint8_t  sha256[SHA256_SIZE];
 | |
| } imgHdrV1;
 | |
| 
 | |
| #define HEADER_TOLTAL_SIZE      64
 | |
| #define IMAGE_ALIGNED_SIZE      32
 | |
| 
 | |
| #define IMAGE_LEN_FOR_CRC(l)   ((((l)&(IMAGE_ALIGNED_SIZE-1)) ?\
 | |
|     (IMAGE_ALIGNED_SIZE-((l)&(IMAGE_ALIGNED_SIZE-1))) :0) + (l))
 | |
| 
 | |
| #define IMAGE_GUARD             0xa4e49a17
 | |
| 
 | |
| #define UINT8_GET(buf,  n) (buf[n]&0xFF)
 | |
| #define UINT16_GET(buf, n) (((buf[n]<<8)&0xFF00) | (buf[(n)+1]&0x00FF))
 | |
| #define UINT32_GET(buf, n) (((buf[n]<<24)&0xFF000000) | ((buf[n+1]<<16)&0x00FF0000)\
 | |
|                             |((buf[n+2]<<8)&0x0000FF00) | (buf[n+3]&0x000000FF))
 | |
| 
 | |
| #define IMGHDR_GET_DEVTYPE(p)   UINT16_GET(p, 0)
 | |
| #define IMGHDR_GET_IMGTYPE(p)   UINT16_GET(p, 2)
 | |
| #define IMGHDR_GET_IMGSIZE(p)   UINT32_GET(p, 4)
 | |
| #define IMGHDR_GET_IMGVER(p)    UINT16_GET(p, 8)
 | |
| #define IMGHDR_GET_PSRAMSIZE(p) UINT8_GET(p, 10)
 | |
| #define IMGHDR_GET_HDRVER(p)    UINT8_GET(p, 11)
 | |
| #define IMGHDR_GET_FWSIZE(p)    UINT32_GET(p, 12)
 | |
| #define IMGHDR_GET_CRC(p)       UINT32_GET(p, 16)
 | |
| #define IMGHDR_GET_GUARD(p)     UINT32_GET(p, 20)
 | |
| #define IMGHDR_GET_LAYOUTIDX(p) UINT8_GET(p, 24)
 | |
| #define IMGHDR_GET_FWCRC(p)     UINT32_GET(p, 28)
 | |
| 
 | |
| #define IMGHDR_V1_GET_DEVTYPE(p)    UINT8_GET(p, 0)
 | |
| #define IMGHDR_V1_GET_IMGTYPE(p)    UINT8_GET(p, 1)
 | |
| #define IMGHDR_V1_GET_ENCVAL(p)     UINT8_GET(p, 2)
 | |
| #define IMGHDR_V1_GET_CONFIG(p)     UINT8_GET(p, 3)
 | |
| #define IMGHDR_V1_GET_IMGSIZE(p)    UINT32_GET(p, 4)
 | |
| #define IMGHDR_V1_GET_ZIPTYPE(p)    UINT8_GET(p, 8)
 | |
| #define IMGHDR_V1_GET_FLASHSIZE(p)  UINT8_GET(p, 9)
 | |
| #define IMGHDR_V1_GET_PSRAMSIZE(p)  UINT8_GET(p, 10)
 | |
| #define IMGHDR_V1_GET_HDRVER(p)     UINT8_GET(p, 11)
 | |
| #define IMGHDR_V1_GET_IMGVER(p)     UINT32_GET(p, 12)
 | |
| #define IMGHDR_V1_GET_IMGCRC(p)     UINT32_GET(p, 16)
 | |
| #define IMGHDR_V1_GET_GUARD(p)      UINT32_GET(p, 20)
 | |
| #define IMGHDR_V1_GET_LAYOUTIDX(p)  UINT8_GET(p, 24)
 | |
| #define IMGHDR_V1_GET_RUNADDR(p)    UINT32_GET(p, 28)
 | |
| 
 | |
| #pragma pack(pop)    /* restore the pack status */
 | |
| 
 | |
| #ifndef BUILD_BUG_ON
 | |
|     #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - (2 * (!(condition)))]))
 | |
| #endif
 | |
| 
 | |
| typedef union
 | |
| {
 | |
|     imgHdrV0 v0;
 | |
|     imgHdrV1 v1;
 | |
| }imgHdr;
 | |
| 
 | |
| void static inline img_header_construct(imgHdr *pHr, char *pStr)
 | |
| {
 | |
|     uint8_t hdrVersion = IMGHDR_GET_HDRVER(pStr);
 | |
|     uint32_t ui32 = IMGHDR_GET_GUARD(pStr);
 | |
| 
 | |
|     BUILD_BUG_ON (sizeof(imgHdrV0) == sizeof(imgHdrV1));
 | |
| 
 | |
|     if (ui32 != IMAGE_GUARD)
 | |
|     {
 | |
|         pHr->v0.hdrVer      = hdrVer_max;
 | |
|         pHr->v0.guard       = 0;
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     if (hdrVersion == hdrVer_10) {
 | |
|         pHr->v1.devType     = IMGHDR_V1_GET_DEVTYPE(pStr);
 | |
|         pHr->v1.imgType     = IMGHDR_V1_GET_IMGTYPE(pStr);
 | |
|         pHr->v1.encType     = IMGHDR_V1_GET_ENCVAL(pStr);
 | |
|         pHr->v1.cfg         = IMGHDR_V1_GET_CONFIG(pStr);
 | |
|         pHr->v1.imgSize     = IMGHDR_V1_GET_IMGSIZE(pStr);
 | |
|         pHr->v1.zipType     = IMGHDR_V1_GET_ZIPTYPE(pStr);
 | |
|         pHr->v1.flashSize   = IMGHDR_V1_GET_FLASHSIZE(pStr);
 | |
|         pHr->v1.psramSize   = IMGHDR_V1_GET_PSRAMSIZE(pStr);
 | |
|         pHr->v1.hdrVer      = hdrVersion;
 | |
|         pHr->v1.imgVer      = IMGHDR_V1_GET_IMGVER(pStr);
 | |
|         pHr->v1.imgCRC      = IMGHDR_V1_GET_IMGCRC(pStr);
 | |
|         pHr->v1.guard       = IMAGE_GUARD;
 | |
|         pHr->v1.layoutIdx   = IMGHDR_V1_GET_LAYOUTIDX(pStr);
 | |
|         pHr->v1.runAddr     = IMGHDR_V1_GET_RUNADDR(pStr);
 | |
| 
 | |
|         for(ui32 = 0; ui32 < SHA256_SIZE; ui32++)
 | |
|         {
 | |
|             pHr->v1.sha256[ui32] = (uint8_t)pStr[32 + ui32];
 | |
|         }
 | |
|     } else {
 | |
|         pHr->v0.devType     = IMGHDR_GET_DEVTYPE(pStr);
 | |
|         pHr->v0.imgType     = IMGHDR_GET_IMGTYPE(pStr);
 | |
|         pHr->v0.imgSize     = IMGHDR_GET_IMGSIZE(pStr);
 | |
|         pHr->v0.hdrVer      = hdrVersion;
 | |
|         pHr->v0.psramSize   = IMGHDR_GET_PSRAMSIZE(pStr);
 | |
|         pHr->v0.imgVer      = IMGHDR_GET_IMGVER(pStr);
 | |
|         pHr->v0.fwSize      = IMGHDR_GET_FWSIZE(pStr);
 | |
|         pHr->v0.imgCRC      = IMGHDR_GET_CRC(pStr);
 | |
|         pHr->v0.guard       = IMAGE_GUARD;
 | |
|         pHr->v0.layoutIdx   = IMGHDR_GET_LAYOUTIDX(pStr);
 | |
|         pHr->v0.fwCRC       = IMGHDR_GET_FWCRC(pStr);
 | |
| 
 | |
|         for(ui32 = 0; ui32 < SHA256_SIZE; ui32++)
 | |
|         {
 | |
|             pHr->v0.sha256[ui32] = (uint8_t)pStr[32 + ui32];
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     return;
 | |
| }
 | |
| 
 | |
| #define IMGHDR_GET_COMMON_ITERM(pHdr, item) \
 | |
|     (((pHdr)->v0.guard != IMAGE_GUARD) ? \
 | |
|     (uint32_t)(0) : ((pHdr)->v1.hdrVer == hdrVer_10 ?   \
 | |
|     (uint32_t)(pHdr)->v1.item : (uint32_t)(pHdr)->v0.item))
 | |
| 
 | |
| #define iot_imghdr_get_hdrVer(pHdr)     IMGHDR_GET_COMMON_ITERM(pHdr, hdrVer)
 | |
| 
 | |
| #define iot_imghdr_get_devType(pHdr)    IMGHDR_GET_COMMON_ITERM(pHdr, devType)
 | |
| 
 | |
| #define iot_imghdr_get_imgType(pHdr)    IMGHDR_GET_COMMON_ITERM(pHdr, imgType)
 | |
| 
 | |
| #define iot_imghdr_get_imgSize(pHdr)    IMGHDR_GET_COMMON_ITERM(pHdr, imgSize)
 | |
| 
 | |
| #define iot_imghdr_get_psramSize(pHdr)  IMGHDR_GET_COMMON_ITERM(pHdr, psramSize)
 | |
| 
 | |
| #define iot_imghdr_get_imgVer(pHdr)     IMGHDR_GET_COMMON_ITERM(pHdr, imgVer)
 | |
| 
 | |
| #define iot_imghdr_get_imgCRC(pHdr)     IMGHDR_GET_COMMON_ITERM(pHdr, imgCRC)
 | |
| 
 | |
| #define iot_imghdr_get_guard(pHdr)      IMGHDR_GET_COMMON_ITERM(pHdr, guard)
 | |
| 
 | |
| #define iot_imghdr_get_layout_idx(pHdr) IMGHDR_GET_COMMON_ITERM(pHdr, layoutIdx)
 | |
| 
 | |
| #define iot_imghdr_get_sha256(pHdr)     IMGHDR_GET_COMMON_ITERM(pHdr, sha256)
 | |
| 
 | |
| #define iot_imghdr_get_fwSize(pHdr)     \
 | |
|     (((pHdr)->v0.guard != IMAGE_GUARD) || (pHdr)->v1.hdrVer == hdrVer_10 ? \
 | |
|     (uint32_t)(0) : (uint32_t)(pHdr)->v0.fwSize)
 | |
| 
 | |
| #define iot_imghdr_get_fwCRC(pHdr)      \
 | |
|     (((pHdr)->v0.guard != IMAGE_GUARD) || (pHdr)->v1.hdrVer == hdrVer_10 ? \
 | |
|     (uint32_t)(0) : (uint32_t)(pHdr)->v0.fwCRC)
 | |
| 
 | |
| #define iot_imghdr_get_encType(pHdr)    \
 | |
|     (((pHdr)->v1.guard != IMAGE_GUARD) || (pHdr)->v1.hdrVer != hdrVer_10 ? \
 | |
|     (uint32_t)(0) : (uint32_t)(pHdr)->v1.encType)
 | |
| 
 | |
| #define iot_imghdr_get_zipType(pHdr)    \
 | |
|     (((pHdr)->v1.guard != IMAGE_GUARD) || (pHdr)->v1.hdrVer != hdrVer_10 ? \
 | |
|     (uint32_t)(0) : (uint32_t)(pHdr)->v1.zipType)
 | |
| 
 | |
| #define iot_imghdr_get_flashSize(pHdr)  \
 | |
|     (((pHdr)->v1.guard != IMAGE_GUARD) || (pHdr)->v1.hdrVer != hdrVer_10 ? \
 | |
|     (uint32_t)(0) : (uint32_t)(pHdr)->v1.flashSize)
 | |
| 
 | |
| #define iot_imghdr_get_runAddr(pHdr)    \
 | |
|     (((pHdr)->v1.guard != IMAGE_GUARD) || (pHdr)->v1.hdrVer != hdrVer_10 ? \
 | |
|     (uint32_t)(0) : (uint32_t)(pHdr)->v1.runAddr)
 | |
| 
 | |
| #define iot_imghdr_get_quad_rd(pHdr)    \
 | |
|         (((pHdr)->v1.guard != IMAGE_GUARD) || (pHdr)->v1.hdrVer != hdrVer_10 ? \
 | |
|         (uint32_t)(0) : (uint32_t)(((pHdr)->v1.cfg) & 0x1))
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif //IOT_IMG_HDR_H
 |