19#ifndef _IMAGE_FORMAT_H
20#define _IMAGE_FORMAT_H
27 #define IMAGE_PACK_BEGIN __pragma(pack(push, 1))
28 #define IMAGE_PACK_END __pragma(pack(pop))
29 #define IMAGE_PACK_ATTR
30#elif defined(__GNUC__) || defined(__clang__) || defined(__ARMCC_VERSION) || \
31 defined(__CC_ARM) || defined(__IAR_SYSTEMS_ICC__) || defined(__TASKING__)
32 #define IMAGE_PACK_BEGIN
33 #define IMAGE_PACK_END
34 #define IMAGE_PACK_ATTR __attribute__((packed))
36 #define IMAGE_PACK_BEGIN
37 #define IMAGE_PACK_END
38 #define IMAGE_PACK_ATTR
42#if defined(__cplusplus) && (__cplusplus >= 201103L)
43 #define IMAGE_FORMAT_STATIC_ASSERT(cond, msg) static_assert(cond, msg)
44#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
45 #define IMAGE_FORMAT_STATIC_ASSERT(cond, msg) _Static_assert(cond, msg)
47 #define IMAGE_FORMAT_STATIC_ASSERT_CAT_(a, b) a ## b
48 #define IMAGE_FORMAT_STATIC_ASSERT_CAT(a, b) IMAGE_FORMAT_STATIC_ASSERT_CAT_(a, b)
49 #define IMAGE_FORMAT_STATIC_ASSERT(cond, msg) \
50 typedef char IMAGE_FORMAT_STATIC_ASSERT_CAT(image_format_static_assert_, __LINE__)[(cond) ? 1 : -1]
98 IMAGE_FORMAT_STATIC_ASSERT(
sizeof(ImageVersion) == 8,
"ImageVersion on-flash layout changed");
99IMAGE_FORMAT_STATIC_ASSERT(offsetof(ImageVersion, major) == 0,
"ImageVersion.major offset changed");
100IMAGE_FORMAT_STATIC_ASSERT(offsetof(ImageVersion, minor) == 1,
"ImageVersion.minor offset changed");
101IMAGE_FORMAT_STATIC_ASSERT(offsetof(ImageVersion, revision) == 2,
"ImageVersion.revision offset changed");
102IMAGE_FORMAT_STATIC_ASSERT(offsetof(ImageVersion, buildNum) == 4,
"ImageVersion.buildNum offset changed");
104IMAGE_FORMAT_STATIC_ASSERT(
sizeof(ImageHeader) == 64,
"ImageHeader on-flash layout changed (must stay 64 bytes)");
105IMAGE_FORMAT_STATIC_ASSERT(offsetof(ImageHeader, headVers) == 0,
"ImageHeader.headVers offset changed");
106IMAGE_FORMAT_STATIC_ASSERT(offsetof(ImageHeader, imgIndex) == 4,
"ImageHeader.imgIndex offset changed");
107IMAGE_FORMAT_STATIC_ASSERT(offsetof(ImageHeader, imgType) == 8,
"ImageHeader.imgType offset changed");
108IMAGE_FORMAT_STATIC_ASSERT(offsetof(ImageHeader, dataPadding) == 9,
"ImageHeader.dataPadding offset changed");
109IMAGE_FORMAT_STATIC_ASSERT(offsetof(ImageHeader, dataSize) == 13,
"ImageHeader.dataSize offset changed");
110IMAGE_FORMAT_STATIC_ASSERT(offsetof(ImageHeader, binarySize) == 17,
"ImageHeader.binarySize offset changed");
111IMAGE_FORMAT_STATIC_ASSERT(offsetof(ImageHeader, dataVers) == 21,
"ImageHeader.dataVers offset changed");
112IMAGE_FORMAT_STATIC_ASSERT(offsetof(ImageHeader, imgTime) == 29,
"ImageHeader.imgTime offset changed");
113IMAGE_FORMAT_STATIC_ASSERT(offsetof(ImageHeader, reserved) == 37,
"ImageHeader.reserved offset changed");
114IMAGE_FORMAT_STATIC_ASSERT(offsetof(ImageHeader, headCrc) == 60,
"ImageHeader.headCrc offset changed");
Image version (8 bytes)
Definition image_format.h:70
uint8_t imgType
Image type.
Definition image_format.h:87
uint32_t imgIndex
Image index.
Definition image_format.h:86
uint32_t headVers
Image header version.
Definition image_format.h:85
uint32_t dataSize
Data size (padding + firmware + optional runtime field)
Definition image_format.h:89
uint64_t imgTime
Image build time.
Definition image_format.h:92
uint32_t dataPadding
VTOR alignment padding between header and firmware.
Definition image_format.h:88
ImageVersion dataVers
Firmware version.
Definition image_format.h:91
uint32_t binarySize
Firmware size.
Definition image_format.h:90