AWS IoT Over-the-air Update  v2.0.0 (Release Candidate)
Client library for AWS IoT OTA
ota_platform_interface.h
Go to the documentation of this file.
1 /*
2  * AWS IoT Over-the-air Update v2.0.0 (Release Candidate)
3  * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of
6  * this software and associated documentation files (the "Software"), to deal in
7  * the Software without restriction, including without limitation the rights to
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9  * the Software, and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included in all
13  * copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  */
22 
28 #ifndef OTA_PLATFORM_INTERFACE
29 #define OTA_PLATFORM_INTERFACE
30 
31 #include "ota_private.h"
32 
61 typedef uint32_t OtaPalStatus_t;
62 
66 typedef uint32_t OtaPalSubStatus_t;
67 
72 typedef enum OtaPalMainStatus
73 {
91 
105 /* @[define_ota_err_code_helpers] */
106 #define OTA_PAL_ERR_MASK 0xffffffUL
107 #define OTA_PAL_SUB_BITS 24U
108 #define OTA_PAL_MAIN_ERR( err ) ( ( OtaPalMainStatus_t ) ( uint32_t ) ( ( uint32_t ) ( err ) >> ( uint32_t ) OTA_PAL_SUB_BITS ) )
109 #define OTA_PAL_SUB_ERR( err ) ( ( uint32_t ) ( err ) & ( uint32_t ) OTA_PAL_ERR_MASK )
110 #define OTA_PAL_COMBINE_ERR( main, sub ) ( ( uint32_t ) ( main ) << ( uint32_t ) OTA_PAL_SUB_BITS | ( uint32_t ) ( sub ) )
111 /* @[define_ota_err_code_helpers] */
112 
133 typedef OtaPalStatus_t ( * OtaPalAbort_t )( OtaFileContext_t * const pFileContext );
134 
158 typedef OtaPalStatus_t (* OtaPalCreateFileForRx_t)( OtaFileContext_t * const pFileContext );
159 
184 typedef OtaPalStatus_t ( * OtaPalCloseFile_t )( OtaFileContext_t * const pFileContext );
185 
205 typedef int16_t ( * OtaPalWriteBlock_t ) ( OtaFileContext_t * const pFileContext,
206  uint32_t offset,
207  uint8_t * const pData,
208  uint32_t blockSize );
209 
222 typedef OtaPalStatus_t ( * OtaPalActivateNewImage_t )( OtaFileContext_t * const pFileContext );
223 
236 typedef OtaPalStatus_t ( * OtaPalResetDevice_t ) ( OtaFileContext_t * const pFileContext );
237 
260  OtaImageState_t eState );
261 
286 
291 typedef struct OtaPalInterface
292 {
293  /* MISRA rule 21.8 prohibits the use of abort from stdlib.h. However, this is merely one of the
294  * OTA platform abstraction layer interfaces, which is used to abort an OTA update. So it's a
295  * false positive. */
296  /* coverity[misra_c_2012_rule_21_8_violation] */
306 
307 #endif /* ifndef OTA_PLATFORM_INTERFACE */
OtaPalAbortFailed
@ OtaPalAbortFailed
Error trying to abort the OTA.
Definition: ota_platform_interface.h:84
OtaPalStatus_t
uint32_t OtaPalStatus_t
The OTA platform interface return status. Composed of main and sub status.
Definition: ota_platform_interface.h:61
OtaPalInterface_t::setPlatformImageState
OtaPalSetPlatformImageState_t setPlatformImageState
Set the state of the OTA update image.
Definition: ota_platform_interface.h:303
OtaPalInterface_t::getPlatformImageState
OtaPalGetPlatformImageState_t getPlatformImageState
Get the state of the OTA update image.
Definition: ota_platform_interface.h:304
OtaPalCreateFileForRx_t
OtaPalStatus_t(* OtaPalCreateFileForRx_t)(OtaFileContext_t *const pFileContext)
Create a new receive file for the data chunks as they come in.
Definition: ota_platform_interface.h:158
OtaFileContext_t
OTA File Context Information.
Definition: ota_private.h:390
OtaImageState_t
OtaImageState_t
OTA Image states.
Definition: ota_private.h:322
OtaPalUninitialized
@ OtaPalUninitialized
Result is not yet initialized from PAL.
Definition: ota_platform_interface.h:75
OtaPalNullFileContext
@ OtaPalNullFileContext
The PAL is called with a NULL file context.
Definition: ota_platform_interface.h:77
OtaPalInterface_t::activate
OtaPalActivateNewImage_t activate
Activate the file received over-the-air.
Definition: ota_platform_interface.h:301
OtaPalActivateNewImage_t
OtaPalStatus_t(* OtaPalActivateNewImage_t)(OtaFileContext_t *const pFileContext)
Activate the newest MCU image received via OTA.
Definition: ota_platform_interface.h:222
OtaPalInterface_t::writeBlock
OtaPalWriteBlock_t writeBlock
Write a block of data to the specified file at the given offset.
Definition: ota_platform_interface.h:300
OtaPalRxFileTooLarge
@ OtaPalRxFileTooLarge
The OTA receive file is too big for the platform to support.
Definition: ota_platform_interface.h:80
OtaPalInterface_t::closeFile
OtaPalCloseFile_t closeFile
Authenticate and close the receive file.
Definition: ota_platform_interface.h:299
OtaPalAbort_t
OtaPalStatus_t(* OtaPalAbort_t)(OtaFileContext_t *const pFileContext)
Abort an OTA transfer.
Definition: ota_platform_interface.h:133
OtaPalInterface_t::abort
OtaPalAbort_t abort
Abort an OTA transfer.
Definition: ota_platform_interface.h:297
ota_private.h
Macros, enums, variables, and definitions internal to the OTA Agent module and shared by other OTA mo...
OtaPalSubStatus_t
uint32_t OtaPalSubStatus_t
The OTA platform interface sub status.
Definition: ota_platform_interface.h:66
OtaPalFileClose
@ OtaPalFileClose
Error in low level file close.
Definition: ota_platform_interface.h:89
OtaPalSuccess
@ OtaPalSuccess
OTA platform interface success.
Definition: ota_platform_interface.h:74
OtaPalImageState_t
OtaPalImageState_t
OTA Platform Image State.
Definition: ota_private.h:339
OtaPalSignatureCheckFailed
@ OtaPalSignatureCheckFailed
The signature check failed for the specified file.
Definition: ota_platform_interface.h:78
OtaPalRxFileCreateFailed
@ OtaPalRxFileCreateFailed
The PAL failed to create the OTA receive file.
Definition: ota_platform_interface.h:79
OtaPalInterface_t::createFile
OtaPalCreateFileForRx_t createFile
Create a new receive file.
Definition: ota_platform_interface.h:298
OtaPalOutOfMemory
@ OtaPalOutOfMemory
Out of memory.
Definition: ota_platform_interface.h:76
OtaPalGetPlatformImageState_t
OtaPalImageState_t(* OtaPalGetPlatformImageState_t)(OtaFileContext_t *const pFileContext)
Get the state of the OTA update image.
Definition: ota_platform_interface.h:285
OtaPalCommitFailed
@ OtaPalCommitFailed
The acceptance commit of the new OTA image failed.
Definition: ota_platform_interface.h:86
OtaPalMainStatus_t
OtaPalMainStatus_t
The OTA platform interface main status.
Definition: ota_platform_interface.h:73
OtaPalCloseFile_t
OtaPalStatus_t(* OtaPalCloseFile_t)(OtaFileContext_t *const pFileContext)
Authenticate and close the underlying receive file in the specified OTA context.
Definition: ota_platform_interface.h:184
OtaPalBadSignerCert
@ OtaPalBadSignerCert
The signer certificate was not readable or zero length.
Definition: ota_platform_interface.h:82
OtaPalInterface_t
OTA pal Interface structure.
Definition: ota_platform_interface.h:292
OtaPalWriteBlock_t
int16_t(* OtaPalWriteBlock_t)(OtaFileContext_t *const pFileContext, uint32_t offset, uint8_t *const pData, uint32_t blockSize)
Write a block of data to the specified file at the given offset.
Definition: ota_platform_interface.h:205
OtaPalActivateFailed
@ OtaPalActivateFailed
The activation of the new OTA image failed.
Definition: ota_platform_interface.h:87
OtaPalRejectFailed
@ OtaPalRejectFailed
Error trying to reject the OTA image.
Definition: ota_platform_interface.h:85
OtaPalBadImageState
@ OtaPalBadImageState
The specified OTA image state was out of range.
Definition: ota_platform_interface.h:83
OtaPalInterface_t::reset
OtaPalResetDevice_t reset
Reset the device.
Definition: ota_platform_interface.h:302
OtaPalBootInfoCreateFailed
@ OtaPalBootInfoCreateFailed
The PAL failed to create the OTA boot info file.
Definition: ota_platform_interface.h:81
OtaPalFileAbort
@ OtaPalFileAbort
Error in low level file abort.
Definition: ota_platform_interface.h:88
OtaPalSetPlatformImageState_t
OtaPalStatus_t(* OtaPalSetPlatformImageState_t)(OtaFileContext_t *const pFileContext, OtaImageState_t eState)
Attempt to set the state of the OTA update image.
Definition: ota_platform_interface.h:259
OtaPalResetDevice_t
OtaPalStatus_t(* OtaPalResetDevice_t)(OtaFileContext_t *const pFileContext)
Reset the device.
Definition: ota_platform_interface.h:236