TI BLE5-Stack API Documentation  2.00.02.00
oad_image_header.h
Go to the documentation of this file.
1 /******************************************************************************
2 
3  @file oad_image_header.h
4 
5  @brief This file contains the image header definition and structures.
6 
7  Group: WCS, BTS
8  $Target Device: DEVICES $
9 
10  ******************************************************************************
11  $License: BSD3 2017 $
12  ******************************************************************************
13  $Release Name: PACKAGE NAME $
14  $Release Date: PACKAGE RELEASE DATE $
15  ******************************************************************************/
16 
92 #ifndef OAD_IMAGE_HEADER_H
93 #define OAD_IMAGE_HEADER_H
94 
95 #ifdef __cplusplus
96 extern "C"
97 {
98 #endif
99 
100 /*******************************************************************************
101  * INCLUDES
102  ******************************************************************************/
103 #include <stddef.h>
104 #include <stdint.h>
105 #include "hal_types.h"
106 
107 
108 /*******************************************************************************
109  * CONSTANTS
110  ******************************************************************************/
111 
112 
113 #ifdef OAD_ONCHIP
114 
129  #define BIM_VAR_ADDR 0x20000400
130 
136  extern uint32_t _bim_var;
137 #endif // OAD_ONCHIP
138 
139 #define SIGN_FN_PTR 0x57fa0
140 extern uint32_t _sign_fnPtr;
141 
153 #define OAD_IMG_TYPE_PERSISTENT_APP 0
154 
160 #define OAD_IMG_TYPE_APP 1
161 
167 #define OAD_IMG_TYPE_STACK 2
168 
175 #define OAD_IMG_TYPE_APP_STACK 3
176 
183 #define OAD_IMG_TYPE_NP 4
184 
191 #define OAD_IMG_TYPE_FACTORY 5
192 
199 #define OAD_IMG_TYPE_BIM 6
200 
209 #define OAD_IMG_TYPE_APPSTACKLIB 7
210 
217 #define OAD_IMG_TYPE_USR_BEGIN 16
218 
225 #define OAD_IMG_TYPE_USR_END 31
226 
232 #define OAD_IMG_TYPE_HOST_BEGIN 32
233 
239 #define OAD_IMG_TYPE_HOST_END 63
240 
246 #define OAD_IMG_TYPE_RSVD_BEGIN 64
247 
253 #define OAD_IMG_TYPE_RSVD_END 255
254 
265 #define OAD_WIRELESS_TECH_BLE 0xFFFE
266 
270 #define OAD_WIRELESS_TECH_TIMAC_SUBG 0xFFFD
271 
275 #define OAD_WIRELESS_TECH_TIMAC_2_4G 0xFFFB
276 
280 #define OAD_WIRELESS_TECH_ZIGBEE 0xFFF7
281 
285 #define OAD_WIRELESS_TECH_RF4CE 0xFFEF
286 
290 #define OAD_WIRELESS_TECH_THREAD 0xFFDF
291 
295 #define OAD_WIRELESS_TECH_EASYLINK 0xFFBF
296 
299 #ifdef DeviceFamily_CC26X2
300  #define OAD_IMG_ID_VAL {'C', 'C', '2', '6', 'x', '2', 'R', '1'}
301 #elif defined (DeviceFamily_CC13X2) || \
302  defined (DeviceFamily_CC13X2_V1) || \
303  defined (DeviceFamily_CC13X2_V2)
304  #define OAD_IMG_ID_VAL {'C', 'C', '1', '3', 'x', '2', 'R', '1'}
305 #elif defined (DeviceFamily_CC26X0R2)
306  #define OAD_IMG_ID_VAL {'O', 'A', 'D', ' ', 'I', 'M', 'G', ' '}
307 #elif defined (DOXYGEN)
308 
318  #define OAD_IMG_ID_VAL
319 #else
320  #error "Unknown Device Family"
321 #endif //DeviceFamily_CC26X2
322 
331 #define OAD_EXTFL_ID_VAL {'O', 'A', 'D', ' ', 'N', 'V', 'M', '1'}
332 
333 
342 #define CRC_OFFSET offsetof(imgHdr_t, fixedHdr.crc32)
343 
347 #define BIM_VER_OFFSET offsetof(imgHdr_t, fixedHdr.bimVer)
348 
353 #define IMG_DATA_OFFSET BIM_VER_OFFSET
354 
358 #define IMG_INFO_OFFSET offsetof(imgHdr_t, fixedHdr.imgCpStat)
359 
363 #define IMG_COPY_STAT_OFFSET IMG_INFO_OFFSET
364 
368 #define CRC_STAT_OFFSET offsetof(imgHdr_t, fixedHdr.crcStat)
369 
373 #define IMG_TYPE_OFFSET offsetof(imgHdr_t, fixedHdr.imgType)
374 
378 #define BOUNDARY_SEG_OFFSET offsetof(imgHdr_t, fixedHdr.segTypeBd)
379 
380 
384 #define SEG_LEN_OFFSET 4
385 
391 #define SEG_SIGERINFO_OFFSET offsetof(imgHdr_t, secInfoSeg.secSignerInfo)
392 
396 #define SEG_SIGNR_OFFSET offsetof(imgHdr_t, secInfoSeg.eccSign.sign_r)
397 
401 #define SEG_SIGNS_OFFSET offsetof(imgHdr_t, secInfoSeg.eccSign.sign_s)
402 
406 #define SEC_VERIF_STAT_OFFSET offsetof(imgHdr_t, secInfoSeg.verifStat)
407 
411 #define HDR_LEN_WITH_SECURITY_INFO offsetof(imgHdr_t, secInfoSeg.segTypeSecure) + sizeof(securityInfoSeg_t)
412 
416 #define IMG_START_ADDR_OFFSET offsetof(imgHdr_t, imgPayload.startAddr)
417 
428 #define SEG_HDR_LEN 12
429 
434 #define OAD_IMG_ID_LEN 8
435 
439 #define OAD_SW_VER_LEN 4
440 
444 #define OAD_IMG_HDR_LEN sizeof(imgFixedHdr_t)
445 
457 #define IMG_BOUNDARY_SEG_ID 0x00
458 
462 #define IMG_PAYLOAD_SEG_ID 0x01
463 
464 
468 #define IMG_NONCOUNT_SEG_ID 0x02
469 
473 #define IMG_SECURITY_SEG_ID 0x03
474 
478 #define OAD_IMG_FULL_HDR_LEN sizeof(imgHdr_t) /* The length of the OAD Header + Segments */
479 #define OAD_IMG_ID_LEN 8 /* OAD image identification bytes length */
480 #define OAD_SW_VER_LEN 4 /* OAD software version length in bytes */
481 
482 #ifndef STACK_LIBRARY
483  #define BOUNDARY_SEG_LEN 0x18
484 #endif
485 #define SECURITY_SEG_LEN 0x55
486 
487 #define IMG_COPY_STAT_OFFSET IMG_INFO_OFFSET /* Image copy status */
488 
489 #define SEG_LEN_OFFSET 4 /* Offset from seg header to seg len */
490 #define SIG_OFFSET offsetof(imgHdr_t, secInfoSeg.eccSign.sign_r) /* Offset from the start of security seg to sig */
491 
492 #define ECDSA_KEY_LEN 32
493 
494 #define ECDSA_SHA_TEMPWORKZONE_LEN ECDSA_KEY_LEN*6 /* space for six buffers finalHash, reverseHash, pubkeyX, pubKeyY, sign1, sign2 */
495 
501 #define BIM_VER 0x3
502 
508 #define META_VER 0x1
509 
515 #define SECURITY_VER 0x1
516 
520 #define DEFAULT_STATE 0xFF
521 
526 #define CRC_VALID 0xFE
527 
532 #define CRC_INVALID 0xFC
533 
537 #define NEED_COPY 0xFE
538 
542 #define COPY_DONE 0xFC
543 
547 #define VERIFY_PASS 0xFE
548 
552 #define VERIFY_FAIL 0xFC
553 
557 #define EFL_MATADATA_HDR_LEN OAD_IMG_HDR_LEN + 8
558 
562 #define INVALID_ADDR 0xFFFFFFFF
563 
567 #define INVALID_LEN INVALID_ADDR
568 
572 #define DEFAULT_CRC 0xFFFFFFFF
573 
574 
578 #define SIGNER_INFO_SIZE 8
579 
583 #define SIGNATURE_SIZE 64
584 
585 
586 
587 /*******************************************************************************
588  * Typedefs
589  */
590 
592 #if defined (__IAR_SYSTEMS_ICC__)
593  #define TYPEDEF_STRUCT_PACKED __packed typedef struct
594 #elif defined __TI_COMPILER_VERSION || defined __TI_COMPILER_VERSION__
595  #define TYPEDEF_STRUCT_PACKED typedef struct __attribute__((packed))
596 #elif defined (__GNUC__)
597  #define TYPEDEF_STRUCT_PACKED typedef struct __attribute__((__packed__))
598 #endif
599 
601 
605 PACKED_TYPEDEF_STRUCT
606 {
607  uint8_t signerInfo[SIGNER_INFO_SIZE];
608  uint8_t signature[SIGNATURE_SIZE];
610 
611 
612 
618 {
619  uint8_t imgID[8];
620  uint32_t crc32;
621  uint8_t bimVer;
622  uint8_t metaVer;
623  uint16_t techType;
624  uint8_t imgCpStat;
625  uint8_t crcStat;
626  uint8_t imgType;
627  uint8_t imgNo;
628  uint32_t imgVld;
629  uint32_t len;
630  uint32_t prgEntry;
631  uint8_t softVer[4];
632  uint32_t imgEndAddr;
633  uint16_t hdrLen;
634  uint16_t rfu;
635 }imgFixedHdr_t;
636 
644 {
645  uint8_t segTypeImg;
646  uint16_t wirelessTech;
647  uint8_t rfu;
648  uint32_t imgSegLen;
649  uint32_t startAddr;
650 }imgPayloadSeg_t;
651 
662 {
663  uint8_t segTypeBd;
664  uint16_t wirelessTech;
665  uint8_t rfu;
666  uint32_t boundarySegLen;
667  uint32_t stackStartAddr;
668  uint32_t stackEntryAddr;
669  uint32_t ram0StartAddr;
670  uint32_t ram0EndAddr;
671 }boundarySeg_t;
672 
673 
675 typedef struct {
676  uint8_t sign_r[32];
677  uint8_t sign_s[32];
679 
687 {
688  uint8_t segTypeSecure;
689  uint16_t wirelessTech;
690  uint8_t verifStat;
691  uint32_t secSegLen;
692  uint8_t secVer;
693  uint32_t secTimestamp;
694  uint8_t secSignerInfo[8];
696 }securityInfoSeg_t;
697 
707 {
708  imgFixedHdr_t fixedHdr;
709 #if (defined(SECURITY))
710  securityInfoSeg_t secInfoSeg;
711 #endif
712 #if (!defined(STACK_LIBRARY) && (defined(SPLIT_APP_STACK_IMAGE)))
713  boundarySeg_t boundarySeg;
714 #endif
715  imgPayloadSeg_t imgPayload;
716 } imgHdr_t;
717 
719 {
720  uint32_t *eccWorkzone;
721  uint8_t *SHAWorkzone;
722  uint8_t *tempWorkzone;
723  uint8_t *SHADataBuf;
724  uint8_t SHADataBufLen;
725 } ecdsaSigVerifyBuf_t;
726 
731 /*******************************************************************************
732  * Typedefs
733  */
734 
735 /* Function typdef for bim_payloadVerify() fxn defined in bim_main.c */
736 typedef uint8_t (*bimSignFnPtr_t)(uint8_t, uint32_t, uint32_t, uint8_t *,
737  uint8_t *, ecdsaSigVerifyBuf_t *);
738 
739 #ifdef __cplusplus
740 }
741 #endif
742 
743 #endif /* OAD_IMAGE_HEADER_H */
uint16_t wirelessTech
Wireless technology type.
Definition: oad_image_header.h:646
uint16_t hdrLen
Total length of the image header.
Definition: oad_image_header.h:633
uint8_t crcStat
CRC status.
Definition: oad_image_header.h:625
uint32_t secTimestamp
Security timestamp */.
Definition: oad_image_header.h:693
uint32_t ram0EndAddr
RAM entry end address.
Definition: oad_image_header.h:670
uint8_t * tempWorkzone
Should be size 6*ECDSA_KEY_LEN bytes.
Definition: oad_image_header.h:722
uint8_t metaVer
Metadata version.
Definition: oad_image_header.h:622
uint8_t imgCpStat
Image copy status.
Definition: oad_image_header.h:624
uint8_t secSignerInfo[8]
Security signer info */.
Definition: oad_image_header.h:694
uint8_t verifStat
Verification status.
Definition: oad_image_header.h:690
uint32_t startAddr
Start address of image on internal flash.
Definition: oad_image_header.h:649
uint16_t techType
Wireless protocol type BLE/TI-MAC/ZIGBEE etc.
Definition: oad_image_header.h:623
Definition: oad_image_header.h:605
#define SIGNATURE_SIZE
Definition: oad_image_header.h:583
uint8_t imgType
Image Type.
Definition: oad_image_header.h:626
uint32_t imgEndAddr
Address of the last byte of a contiguous image.
Definition: oad_image_header.h:632
uint8_t * SHADataBuf
this buff is used for reading data for calculating SHA2 hash, length depends on available RAM of call...
Definition: oad_image_header.h:723
TYPEDEF_STRUCT_PACKED
User-defined Image Identification bytes.
Definition: oad_image_header.h:618
eccSignature_t eccSign
Security signature */.
Definition: oad_image_header.h:695
uint32_t secSegLen
Payload segment length.
Definition: oad_image_header.h:691
uint8_t softVer[4]
Software version of the image.
Definition: oad_image_header.h:631
uint32_t ram0StartAddr
RAM entry start address.
Definition: oad_image_header.h:669
uint8_t * SHAWorkzone
SHA workzone buffer should be of size(SHA256_memory_t) bytes.
Definition: oad_image_header.h:721
uint8_t bimVer
BIM version.
Definition: oad_image_header.h:621
uint32_t imgVld
This field is RFU.
Definition: oad_image_header.h:628
uint8_t SHADataBufLen
length of allocate SHA data buffer
Definition: oad_image_header.h:724
uint16_t rfu
Reserved bytes.
Definition: oad_image_header.h:634
uint32_t len
Image length in bytes.
Definition: oad_image_header.h:629
uint32_t boundarySegLen
Boundary segment length.
Definition: oad_image_header.h:666
uint32_t stackStartAddr
Start address of stack image on internal flash.
Definition: oad_image_header.h:667
Definition: oad_image_header.h:675
uint32_t stackEntryAddr
Stack start address.
Definition: oad_image_header.h:668
uint32_t imgSegLen
Payload segment length.
Definition: oad_image_header.h:648
#define SIGNER_INFO_SIZE
Definition: oad_image_header.h:578
uint8_t secVer
Security version */.
Definition: oad_image_header.h:692
uint32_t crc32
Image&#39;s 32-bit CRC value.
Definition: oad_image_header.h:620
imgPayloadSeg_t imgPayload
Required contiguous image segment.
Definition: oad_image_header.h:715
uint32_t prgEntry
Program entry address.
Definition: oad_image_header.h:630
uint8_t imgNo
Image number of &#39;image type&#39;.
Definition: oad_image_header.h:627
© Copyright 1995-2019, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale