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];
 | 
						|
    /* 这个可能会用来存放压缩前img的crc */
 | 
						|
    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; // imgheader版本,V1和V0位置相同
 | 
						|
    uint32_t    imgVer;
 | 
						|
    /* CRC32 for 'payload + pad for aligning' */
 | 
						|
    uint32_t    imgCRC;
 | 
						|
    /* fixed, 0xa4e49a17 */
 | 
						|
    uint32_t    guard; // 通过这个值来确定是不是imgheader,V1和V0位置相同
 | 
						|
    /* 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
 | 
						|
// 如果没有32字节对齐 把大小扩展至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
 |