TI BLE-Stack for Bluetooth API Documentation  3.03.02.00
oad_image_header.h
Go to the documentation of this file.
1 
76 #ifndef OAD_IMAGE_HEADER_H
77 #define OAD_IMAGE_HEADER_H
78 
79 #ifdef __cplusplus
80 extern "C"
81 {
82 #endif
83 
84 /*******************************************************************************
85  * INCLUDES
86  ******************************************************************************/
87 #include <stddef.h>
88 #include "hal_types.h"
89 
90 /*******************************************************************************
91  * CONSTANTS
92  ******************************************************************************/
93 
94 
95 #ifdef OAD_ONCHIP
96 
111  #define BIM_VAR_ADDR 0x20000400
112 
118  extern uint32_t _bim_var;
119 #endif // OAD_ONCHIP
120 
127 #define OAD_NUM_NV_PGS 1
128 
129 #ifdef OSAL_SNV
130  #if OSAL_SNV != OAD_NUM_NV_PGS
131  #error "Incompatible NV settings detected. OAD supports 1 NV page"
132  #endif //OSAL_SNV != OAD_NUM_NV_PGS
133 #endif //OSAL_SNV
134 
146 #define OAD_IMG_TYPE_PERSISTENT_APP 0
147 
152 #define OAD_IMG_TYPE_APP 1
153 
159 #define OAD_IMG_TYPE_STACK 2
160 
167 #define OAD_IMG_TYPE_APP_STACK 3
168 
175 #define OAD_IMG_TYPE_NP 4
176 
183 #define OAD_IMG_TYPE_FACTORY 5
184 
190 #define OAD_IMG_TYPE_BIM 6
191 
200 #define OAD_IMG_TYPE_APPSTACKLIB 7
201 
207 #define OAD_IMG_TYPE_USR_BEGIN 16
208 
215 #define OAD_IMG_TYPE_USR_END 31
216 
222 #define OAD_IMG_TYPE_HOST_BEGIN 32
223 
229 #define OAD_IMG_TYPE_HOST_END 63
230 
236 #define OAD_IMG_TYPE_RSVD_BEGIN 64
237 
243 #define OAD_IMG_TYPE_RSVD_END 255
244 
255 #define OAD_SEG_BOUNDARY 0x00
256 
260 #define OAD_SEG_CONTIGUOUS 0x01
261 
265 #define OAD_SEG_NON_CONTIGUOUS 0x02
266 
270 #define OAD_SEG_RSVD 0xFF
271 
282 #define OAD_WIRELESS_TECH_BLE 0xFFFE
283 
287 #define OAD_WIRELESS_TECH_TIMAC_SUBG 0xFFFD
288 
292 #define OAD_WIRELESS_TECH_TIMAC_2_4G 0xFFFB
293 
297 #define OAD_WIRELESS_TECH_ZIGBEE 0xFFF7
298 
302 #define OAD_WIRELESS_TECH_RF4CE 0xFFEF
303 
308 #define OAD_WIRELESS_TECH_THREAD 0xFFDF
309 
313 #define OAD_WIRELESS_TECH_EASYLINK 0xFFBF
314 
329 #ifdef DeviceFamily_CC26X2
330  #define OAD_IMG_ID_VAL {'C', 'C', '2', '6', 'x', '2', 'R', '1'}
331 #elif defined (DeviceFamily_CC13X2) || \
332  defined (DeviceFamily_CC13X2_V1) || \
333  defined (DeviceFamily_CC13X2_V2)
334  #define OAD_IMG_ID_VAL {'C', 'C', '1', '3', 'x', '2', 'R', '1'}
335 #elif defined (DeviceFamily_CC26X0R2)
336  #define OAD_IMG_ID_VAL {'O', 'A', 'D', ' ', 'I', 'M', 'G', ' '}
337 #elif defined (DOXYGEN)
338  #define OAD_IMG_ID_VAL
339 #else
340  #error "Unknown Device Family"
341 #endif //DeviceFamily_CC26X2
342 
351 #define OAD_EXTFL_ID_VAL {'O', 'A', 'D', ' ', 'N', 'V', 'M', '1'}
352 
361 #define CRC_OFFSET offsetof(imgHdr_t, fixedHdr.crc32)
362 
366 #define BIM_VER_OFFSET offsetof(imgHdr_t, fixedHdr.bimVer)
367 
372 #define IMG_DATA_OFFSET BIM_VER_OFFSET
373 
377 #define IMG_INFO_OFFSET offsetof(imgHdr_t, fixedHdr.imgCpStat)
378 
382 #define IMG_COPY_STAT_OFFSET IMG_INFO_OFFSET
383 
387 #define CRC_STAT_OFFSET offsetof(imgHdr_t, fixedHdr.crcStat)
388 
392 #define IMG_TYPE_OFFSET offsetof(imgHdr_t, fixedHdr.imgType)
393 
397 #define BOUNDARY_SEG_OFFSET offsetof(imgHdr_t, fixedHdr.segTypeBd)
398 
399 
403 #define SEG_LEN_OFFSET 4
404 
410 #define SEG_SIGERINFO_OFFSET offsetof(imgHdr_t, secInfoSeg.secSignerInfo)
411 
415 #define SEG_SIGNR_OFFSET offsetof(imgHdr_t, secInfoSeg.eccSign.sign_r)
416 
420 #define SEG_SIGNS_OFFSET offsetof(imgHdr_t, secInfoSeg.eccSign.sign_s)
421 
425 #define SEC_VERIF_STAT_OFFSET offsetof(imgHdr_t, secInfoSeg.verifStat)
426 
430 #define HDR_LEN_WITH_SECURITY_INFO offsetof(imgHdr_t, secInfoSeg.segTypeSecure) + sizeof(securityInfoSeg_t)
431 
435 #define IMG_START_ADDR_OFFSET offsetof(imgHdr_t, imgPayload.startAddr)
436 
447 #define SEG_HDR_LEN 12
448 
453 #define OAD_IMG_ID_LEN 8
454 
458 #define OAD_SW_VER_LEN 4
459 
463 #define OAD_IMG_HDR_LEN sizeof(imgFixedHdr_t)
464 
476 #define IMG_BOUNDARY_SEG_ID 0x00
477 
481 #define IMG_PAYLOAD_SEG_ID 0x01
482 
483 
487 #define IMG_NONCOUNT_SEG_ID 0x02
488 
492 #define IMG_SECURITY_SEG_ID 0x03
493 
500 #define SOFTWARE_VER {'0', '0', '0', '1'}
501 
505 #define OAD_IMG_FULL_HDR_LEN sizeof(imgHdr_t)
506 
510 #define OAD_IMG_ID_LEN 8
511 
515 #define OAD_SW_VER_LEN 4
516 
517 #ifndef STACK_LIBRARY
518 
521  #define BOUNDARY_SEG_LEN 0x18
522 #endif
523 
527 #define SECURITY_SEG_LEN 0x55
528 
532 #define IMG_COPY_STAT_OFFSET IMG_INFO_OFFSET
533 
537 #define SEG_LEN_OFFSET 4
538 
542 #define SIG_OFFSET offsetof(imgHdr_t, secInfoSeg.eccSign.sign_r)
543 
547 #define ECDSA_KEY_LEN 32
548 
552 #define ECDSA_SHA_TEMPWORKZONE_LEN ECDSA_KEY_LEN*6
553 
559 #define BIM_VER 0x1
560 
566 #define META_VER 0x1
567 
573 #define SECURITY_VER 0x1
574 
578 #define DEFAULT_STATE 0xFF
579 
584 #define CRC_VALID 0xFE
585 
590 #define CRC_INVALID 0xFC
591 
595 #define NEED_COPY 0xFE
596 
600 #define COPY_DONE 0xFC
601 
605 #define VERIFY_PASS 0xFE
606 
610 #define VERIFY_FAIL 0xFC
611 
615 #define EFL_MATADATA_HDR_LEN OAD_IMG_HDR_LEN + 8
616 
620 #define INVALID_ADDR 0xFFFFFFFF
621 
625 #define INVALID_LEN INVALID_ADDR
626 
630 #define DEFAULT_CRC 0xFFFFFFFF
631 
632 /*******************************************************************************
633  * Typedefs
634  */
635 
637 #if defined (__IAR_SYSTEMS_ICC__)
638  #define TYPEDEF_STRUCT_PACKED __packed typedef struct
639 #elif defined __TI_COMPILER_VERSION || defined __TI_COMPILER_VERSION__
640  #define TYPEDEF_STRUCT_PACKED typedef struct __attribute__((packed))
641 #elif defined (__GNUC__)
642  #define TYPEDEF_STRUCT_PACKED typedef struct __attribute__((__packed__))
643 #endif
644 
651 {
652  uint8_t imgID[8];
653  uint32_t crc32;
654  uint8_t bimVer;
655  uint8_t metaVer;
656  uint16_t techType;
657  uint8_t imgCpStat;
658  uint8_t crcStat;
659  uint8_t imgType;
660  uint8_t imgNo;
661  uint32_t imgVld;
662  uint32_t len;
663  uint32_t prgEntry;
664  uint8_t softVer[4];
665  uint32_t imgEndAddr;
666  uint16_t hdrLen;
667  uint16_t rfu;
668 }imgFixedHdr_t;
669 
677 {
678  uint8_t segTypeImg;
679  uint16_t wirelessTech;
680  uint8_t rfu;
681  uint32_t imgSegLen;
682  uint32_t startAddr;
683 }imgPayloadSeg_t;
684 
695 {
696  uint8_t segTypeBd;
697  uint16_t wirelessTech;
698  uint8_t rfu;
699  uint32_t boundarySegLen;
700  uint32_t stackStartAddr;
701  uint32_t stackEntryAddr;
702  uint32_t ram0StartAddr;
703  uint32_t ram0EndAddr;
704 }boundarySeg_t;
705 
706 
708 typedef struct {
709  uint8_t sign_r[32];
710  uint8_t sign_s[32];
712 
720 {
721  uint8_t segTypeSecure;
722  uint16_t wirelessTech;
723  uint8_t verifStat;
724  uint32_t secSegLen;
725  uint8_t secVer;
726  uint32_t secTimestamp;
727  uint8_t secSignerInfo[8];
729 }securityInfoSeg_t;
730 
740 {
741  imgFixedHdr_t fixedHdr;
742 #if (defined(SECURITY))
743  securityInfoSeg_t secInfoSeg;
744 #endif
745 #if (!defined(STACK_LIBRARY) && (defined(SPLIT_APP_STACK_IMAGE)))
746  boundarySeg_t boundarySeg;
747 #endif
748  imgPayloadSeg_t imgPayload;
749 } imgHdr_t;
750 
757 {
758  uint32_t *eccWorkzone;
759  uint8_t *SHAWorkzone;
760  uint8_t *tempWorkzone;
761 } ecdsaSigVerifyBuf_t;
762 
765 #ifdef __cplusplus
766 }
767 #endif
768 
769 #endif /* OAD_IMAGE_HEADER_H */
uint16_t wirelessTech
Wireless technology type.
Definition: oad_image_header.h:679
uint16_t hdrLen
Total length of the image header.
Definition: oad_image_header.h:666
uint8_t crcStat
CRC status.
Definition: oad_image_header.h:658
uint32_t secTimestamp
Security timestamp */.
Definition: oad_image_header.h:726
uint32_t ram0EndAddr
Definition: oad_image_header.h:703
uint8_t * tempWorkzone
Should be size 6*ECDSA_KEY_LEN bytes.
Definition: oad_image_header.h:760
uint8_t metaVer
Metadata version.
Definition: oad_image_header.h:655
uint8_t imgCpStat
Image copy status.
Definition: oad_image_header.h:657
uint8_t secSignerInfo[8]
Security signer info */.
Definition: oad_image_header.h:727
uint8_t verifStat
Verification status.
Definition: oad_image_header.h:723
uint32_t startAddr
Start address of image on internal flash.
Definition: oad_image_header.h:682
uint16_t techType
Wireless protocol type BLE/TI-MAC/ZIGBEE etc.
Definition: oad_image_header.h:656
uint8_t imgType
Image Type.
Definition: oad_image_header.h:659
uint32_t imgEndAddr
Address of the last byte of a contiguous image.
Definition: oad_image_header.h:665
TYPEDEF_STRUCT_PACKED
OAD Core image header structure definition
Definition: oad_image_header.h:651
eccSignature_t eccSign
Security signature */.
Definition: oad_image_header.h:728
uint32_t secSegLen
Payload segment length.
Definition: oad_image_header.h:724
uint8_t softVer[4]
Software version of the image.
Definition: oad_image_header.h:664
uint32_t ram0StartAddr
Definition: oad_image_header.h:702
uint8_t * SHAWorkzone
SHA workzone buffer should be of size(SHA256_memory_t) bytes.
Definition: oad_image_header.h:759
uint8_t bimVer
BIM version.
Definition: oad_image_header.h:654
uint32_t imgVld
This field is RFU.
Definition: oad_image_header.h:661
uint16_t rfu
Reserved bytes.
Definition: oad_image_header.h:667
uint32_t len
Image length in bytes.
Definition: oad_image_header.h:662
uint32_t boundarySegLen
Definition: oad_image_header.h:699
uint32_t stackStartAddr
Definition: oad_image_header.h:700
ECC signature pair.
Definition: oad_image_header.h:708
uint32_t stackEntryAddr
Definition: oad_image_header.h:701
uint32_t imgSegLen
Payload segment length.
Definition: oad_image_header.h:681
uint8_t secVer
Security version */.
Definition: oad_image_header.h:725
uint32_t crc32
Image&#39;s 32-bit CRC value.
Definition: oad_image_header.h:653
imgPayloadSeg_t imgPayload
Required contiguous image segment.
Definition: oad_image_header.h:748
uint32_t prgEntry
Program entry address.
Definition: oad_image_header.h:663
uint8_t imgNo
Image number of &#39;image type&#39;.
Definition: oad_image_header.h:660
© Copyright 1995-2020, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale