AWS IoT Over-the-air Update  v3.0.0
Client library for AWS IoT OTA
ota_private.h
Go to the documentation of this file.
1 /*
2  * AWS IoT Over-the-air Update v3.0.0
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 
29 #ifndef OTA_PRIVATE_H
30 #define OTA_PRIVATE_H
31 
32 /* Standard includes. */
33 /* For FILE type in OtaFileContext_t.*/
34 #include <stdio.h>
35 #include <stdint.h>
36 #include <stdbool.h>
37 
38 /* OTA_DO_NOT_USE_CUSTOM_CONFIG allows building the OTA library
39  * without a custom config. If a custom config is provided, the
40  * OTA_DO_NOT_USE_CUSTOM_CONFIG macro should not be defined. */
41 #ifndef OTA_DO_NOT_USE_CUSTOM_CONFIG
42  #include "ota_config.h"
43 #endif
44 
45 /* Include config defaults header to get default values of configs not defined
46  * in ota_config.h file. */
47 #include "ota_config_defaults.h"
48 
53 /* General constants. */
54 #define LOG2_BITS_PER_BYTE 3U
55 #define BITS_PER_BYTE ( ( uint32_t ) 1U << LOG2_BITS_PER_BYTE )
56 #define OTA_FILE_BLOCK_SIZE ( ( uint32_t ) 1U << otaconfigLOG2_FILE_BLOCK_SIZE )
57 #define OTA_MAX_FILES 1U
58 #define OTA_MAX_BLOCK_BITMAP_SIZE 128U
59 #define OTA_REQUEST_MSG_MAX_SIZE ( 3U * OTA_MAX_BLOCK_BITMAP_SIZE )
60 #define OTA_REQUEST_URL_MAX_SIZE ( 1500 )
61 #define OTA_ERASED_BLOCKS_VAL 0xffU
62 #ifdef configOTA_NUM_MSG_Q_ENTRIES
63  #define OTA_NUM_MSG_Q_ENTRIES configOTA_NUM_MSG_Q_ENTRIES
64 #else
65  #define OTA_NUM_MSG_Q_ENTRIES 20U
66 #endif
67 
73 /* Job document parser constants. */
74 #define OTA_MAX_JSON_TOKENS 64U
75 #define OTA_MAX_JSON_STR_LEN 256U
76 #define OTA_DOC_MODEL_MAX_PARAMS 32U
77 #define OTA_JOB_PARAM_REQUIRED ( bool ) true
78 #define OTA_JOB_PARAM_OPTIONAL ( bool ) false
79 #define OTA_DONT_STORE_PARAM 0xffff
80 #define OTA_STORE_NESTED_JSON 0x1fffU
81 #define OTA_DATA_BLOCK_SIZE ( ( 1U << otaconfigLOG2_FILE_BLOCK_SIZE ) + OTA_REQUEST_URL_MAX_SIZE + 30 )
88 /* OTA Agent task event flags. */
89 #define OTA_EVT_MASK_JOB_MSG_READY 0x00000001UL
90 #define OTA_EVT_MASK_DATA_MSG_READY 0x00000002UL
91 #define OTA_EVT_MASK_SHUTDOWN 0x00000004UL
92 #define OTA_EVT_MASK_REQ_TIMEOUT 0x00000008UL
93 #define OTA_EVT_MASK_USER_ABORT 0x000000016UL
94 #define OTA_EVT_MASK_ALL_EVENTS ( OTA_EVT_MASK_JOB_MSG_READY | OTA_EVT_MASK_DATA_MSG_READY | OTA_EVT_MASK_SHUTDOWN | OTA_EVT_MASK_REQ_TIMEOUT | OTA_EVT_MASK_USER_ABORT )
101 #define OTA_NUM_JOB_PARAMS ( 21 )
102 
107 #define OTA_JOB_ID_MAX_SIZE ( 72UL + 1UL )
108 
113 #define OTA_PROTOCOL_BUFFER_SIZE 20U
114 
120 #define kOTA_MaxSignatureSize 256 /* Max bytes supported for a file signature (2048 bit RSA is 256 bytes). */
121 
133 #define OTA_JSON_SEPARATOR "."
134 #define OTA_JSON_CLIENT_TOKEN_KEY "clientToken"
135 #define OTA_JSON_TIMESTAMP_KEY "timestamp"
136 #define OTA_JSON_EXECUTION_KEY "execution"
137 #define OTA_JSON_JOB_ID_KEY OTA_JSON_EXECUTION_KEY OTA_JSON_SEPARATOR "jobId"
138 #define OTA_JSON_STATUS_DETAILS_KEY OTA_JSON_EXECUTION_KEY OTA_JSON_SEPARATOR "statusDetails"
139 #define OTA_JSON_SELF_TEST_KEY OTA_JSON_STATUS_DETAILS_KEY OTA_JSON_SEPARATOR "self_test"
140 #define OTA_JSON_UPDATED_BY_KEY OTA_JSON_STATUS_DETAILS_KEY OTA_JSON_SEPARATOR "updatedBy"
141 #define OTA_JSON_UPDATED_BY_KEY_ONLY "updatedBy"
142 #define OTA_JSON_SELF_TEST_KEY_ONLY "self_test"
143 #define OTA_JSON_JOB_DOC_KEY OTA_JSON_EXECUTION_KEY OTA_JSON_SEPARATOR "jobDocument"
144 #define OTA_JSON_OTA_UNIT_KEY OTA_JSON_JOB_DOC_KEY OTA_JSON_SEPARATOR "afr_ota"
145 #define OTA_JSON_PROTOCOLS_KEY OTA_JSON_OTA_UNIT_KEY OTA_JSON_SEPARATOR "protocols"
146 #define OTA_JSON_FILE_GROUP_KEY OTA_JSON_OTA_UNIT_KEY OTA_JSON_SEPARATOR "files"
147 #define OTA_JSON_STREAM_NAME_KEY OTA_JSON_OTA_UNIT_KEY OTA_JSON_SEPARATOR "streamname"
148 #define OTA_JSON_FILE_PATH_KEY "filepath"
149 #define OTA_JSON_FILE_SIZE_KEY "filesize"
150 #define OTA_JSON_FILE_ID_KEY "fileid"
151 #define OTA_JSON_FILE_ATTRIBUTE_KEY "attr"
152 #define OTA_JSON_FILE_CERT_NAME_KEY "certfile"
153 #define OTA_JSON_UPDATE_DATA_URL_KEY "update_data_url"
154 #define OTA_JSON_AUTH_SCHEME_KEY "auth_scheme"
155 #define OTA_JSON_FILETYPE_KEY "fileType"
165 typedef enum
166 {
181 
187 typedef enum
188 {
207 
213 typedef enum
214 {
215  ModelParamTypeStringCopy,
216  ModelParamTypeStringInDoc, /* Only use this type if you can process before freeing the document memory. */
217  ModelParamTypeObject,
218  ModelParamTypeArray,
219  ModelParamTypeUInt32,
220  ModelParamTypeSigBase64,
221  ModelParamTypeIdent,
222  ModelParamTypeArrayCopy
224 
230 typedef enum
231 {
232  JobReasonReceiving = 0, /* Update progress status. */
233  JobReasonSigCheckPassed, /* Set status details to Self Test Ready. */
234  JobReasonSelfTestActive, /* Set status details to Self Test Active. */
235  JobReasonAccepted, /* Set job state to Succeeded. */
236  JobReasonRejected, /* Set job state to Failed. */
237  JobReasonAborted, /* Set job state to Failed. */
238  NumJobReasons
240 
252 typedef struct
253 {
254  const char * pSrcKey;
255  const bool required;
256  uint16_t pDestOffset;
257  uint16_t pDestSizeOffset;
260 
274 typedef struct
275 {
276  void * contextBase;
277  uint32_t contextSize;
279  uint16_t numModelParams;
283 
288 typedef struct OtaAgentStatistics
289 {
291  uint32_t otaPacketsQueued;
293  uint32_t otaPacketsDropped;
295 
311 typedef enum OtaImageState
312 {
319  OtaLastImageState = OtaImageStateAborted
321 
328 typedef enum OtaPalImageState
329 {
335 
342 typedef enum OtaEvent
343 {
359 
366 typedef struct
367 {
368  uint16_t size;
369  uint8_t data[ kOTA_MaxSignatureSize ];
370 } Sig256_t;
371 
379 typedef struct OtaFileContext
380 {
381  uint8_t * pFilePath;
382  uint16_t filePathMaxSize;
383  #if defined( WIN32 ) || defined( __linux__ )
384  FILE * pFile;
385  #else
386  uint8_t * pFile;
387  #endif
388  uint32_t fileSize;
389  uint32_t blocksRemaining;
390  uint32_t fileAttributes;
391  uint32_t serverFileID;
392  uint8_t * pJobName;
393  uint16_t jobNameMaxSize;
394  uint8_t * pStreamName;
395  uint16_t streamNameMaxSize;
396  uint8_t * pRxBlockBitmap;
398  uint8_t * pCertFilepath;
400  uint8_t * pUpdateUrlPath;
401  uint16_t updateUrlMaxSize;
402  uint8_t * pAuthScheme;
403  uint16_t authSchemeMaxSize;
404  uint32_t updaterVersion;
406  uint8_t * pProtocols;
407  uint16_t protocolMaxSize;
408  uint8_t * pDecodeMem;
409  uint32_t decodeMemMaxSize;
410  uint32_t fileType;
413 
419 typedef struct OtaEventData
420 {
421  uint8_t data[ OTA_DATA_BLOCK_SIZE ];
422  uint32_t dataLength;
423  bool bufferUsed;
425 
431 typedef struct OtaEventMsg
432 {
435 } OtaEventMsg_t;
436 
437 #endif /* ifndef OTA_PRIVATE_H */
IngestResultFileCloseFail
@ IngestResultFileCloseFail
Definition: ota_private.h:169
JsonDocModel_t::contextSize
uint32_t contextSize
Definition: ota_private.h:277
OtaAgentEventCreateFile
@ OtaAgentEventCreateFile
Event to create a file.
Definition: ota_private.h:348
ota_config_defaults.h
This represents the default values for the configuration macros for the OTA library.
OtaFileContext_t::pJobName
uint8_t * pJobName
The job name associated with this file from the job service.
Definition: ota_private.h:392
JsonDocParam_t
JSON document parameter to store the details of keys and where to store them.
Definition: ota_private.h:253
JsonDocModel_t
JSON document model to store the details of parameters expected in the job document.
Definition: ota_private.h:275
JsonDocModel_t::paramsReceivedBitmap
uint32_t paramsReceivedBitmap
Definition: ota_private.h:280
DocParseErrNullModelPointer
@ DocParseErrNullModelPointer
Definition: ota_private.h:199
OtaFileContext_t::jobNameMaxSize
uint16_t jobNameMaxSize
Maximum size of the job name.
Definition: ota_private.h:393
OtaFileContext_t
OTA File Context Information.
Definition: ota_private.h:380
JsonDocModel_t::paramsRequiredBitmap
uint32_t paramsRequiredBitmap
Definition: ota_private.h:281
OtaImageState_t
OtaImageState_t
OTA Image states.
Definition: ota_private.h:312
OtaAgentEventSuspend
@ OtaAgentEventSuspend
Event to suspend ota task.
Definition: ota_private.h:353
OtaFileContext_t::pUpdateUrlPath
uint8_t * pUpdateUrlPath
Url for the file.
Definition: ota_private.h:400
OtaFileContext_t::decodeMemMaxSize
uint32_t decodeMemMaxSize
Maximum size of the decode memory.
Definition: ota_private.h:409
DocParseErrTooManyParams
@ DocParseErrTooManyParams
Definition: ota_private.h:202
IngestResultSigCheckFail
@ IngestResultSigCheckFail
Definition: ota_private.h:168
OtaFileContext_t::pCertFilepath
uint8_t * pCertFilepath
Pathname of the certificate file used to validate the receive file.
Definition: ota_private.h:398
OtaJobReason_t
OtaJobReason_t
Gives the reason to set for job parsing operation.
Definition: ota_private.h:231
OtaPalImageStatePendingCommit
@ OtaPalImageStatePendingCommit
OTA PAL Image awaiting update.
Definition: ota_private.h:331
OtaFileContext_t::fileSize
uint32_t fileSize
The size of the file in bytes.
Definition: ota_private.h:388
OTA_DATA_BLOCK_SIZE
#define OTA_DATA_BLOCK_SIZE
Header is 19 bytes.
Definition: ota_private.h:81
OtaEventData_t::dataLength
uint32_t dataLength
Definition: ota_private.h:422
OtaFileContext_t::pSignature
Sig256_t * pSignature
Pointer to the file's signature structure.
Definition: ota_private.h:411
DocParseErrUserBufferInsuffcient
@ DocParseErrUserBufferInsuffcient
Definition: ota_private.h:192
JsonDocParam_t::pDestSizeOffset
uint16_t pDestSizeOffset
Definition: ota_private.h:257
OtaAgentStatistics_t
This is the OTA statistics structure to hold useful info.
Definition: ota_private.h:289
DocParseErrOutOfMemory
@ DocParseErrOutOfMemory
Definition: ota_private.h:191
DocParseErrInvalidNumChar
@ DocParseErrInvalidNumChar
Definition: ota_private.h:195
OtaAgentEventStart
@ OtaAgentEventStart
Start the OTA state machine.
Definition: ota_private.h:344
DocParseErr_InvalidJSONBuffer
@ DocParseErr_InvalidJSONBuffer
Definition: ota_private.h:198
OtaFileContext_t::pDecodeMem
uint8_t * pDecodeMem
Decode memory.
Definition: ota_private.h:408
IngestResultWriteBlockFailed
@ IngestResultWriteBlockFailed
Definition: ota_private.h:175
OtaAgentEventRequestFileBlock
@ OtaAgentEventRequestFileBlock
Event to request file blocks.
Definition: ota_private.h:349
IngestResultAccepted_Continue
@ IngestResultAccepted_Continue
Definition: ota_private.h:178
OtaImageStateAccepted
@ OtaImageStateAccepted
The state of the OTA MCU Image post successful download and successful self_test.
Definition: ota_private.h:315
OtaFileContext_t::pAuthScheme
uint8_t * pAuthScheme
Authorization scheme.
Definition: ota_private.h:402
OtaAgentStatistics_t::otaPacketsDropped
uint32_t otaPacketsDropped
Definition: ota_private.h:293
JsonDocModel_t::contextBase
void * contextBase
Definition: ota_private.h:276
DocParseErrUnknown
@ DocParseErrUnknown
Definition: ota_private.h:189
IngestResultFileComplete
@ IngestResultFileComplete
Definition: ota_private.h:167
OtaFileContext_t::pProtocols
uint8_t * pProtocols
Authorization scheme.
Definition: ota_private.h:406
DocParseErrBase64Decode
@ DocParseErrBase64Decode
Definition: ota_private.h:194
OtaAgentEventRequestJobDocument
@ OtaAgentEventRequestJobDocument
Event for requesting job document.
Definition: ota_private.h:346
OtaFileContext_t::pFilePath
uint8_t * pFilePath
Update file pathname.
Definition: ota_private.h:381
OtaAgentEventShutdown
@ OtaAgentEventShutdown
Event to trigger ota shutdown.
Definition: ota_private.h:356
OtaAgentStatistics_t::otaPacketsReceived
uint32_t otaPacketsReceived
Definition: ota_private.h:290
OtaEventData_t
The OTA Agent event and data structures.
Definition: ota_private.h:420
DocParseErrNone
@ DocParseErrNone
Definition: ota_private.h:190
OtaFileContext_t::streamNameMaxSize
uint16_t streamNameMaxSize
Maximum size of the stream name.
Definition: ota_private.h:395
OtaFileContext_t::certFilePathMaxSize
uint16_t certFilePathMaxSize
Maximum certificate path size.
Definition: ota_private.h:399
OtaFileContext_t::fileType
uint32_t fileType
The file type id set when creating the OTA job.
Definition: ota_private.h:410
IngestResultBadData
@ IngestResultBadData
Definition: ota_private.h:174
OtaAgentStatistics_t::otaPacketsQueued
uint32_t otaPacketsQueued
Definition: ota_private.h:291
OtaAgentEventReceivedFileBlock
@ OtaAgentEventReceivedFileBlock
Event to trigger when file block is received.
Definition: ota_private.h:350
OtaAgentEventResume
@ OtaAgentEventResume
Event to resume suspended task.
Definition: ota_private.h:354
DocParseErrDuplicatesNotAllowed
@ DocParseErrDuplicatesNotAllowed
Definition: ota_private.h:196
OtaEventMsg_t::eventId
OtaEvent_t eventId
Definition: ota_private.h:434
OtaFileContext_t::updateUrlMaxSize
uint16_t updateUrlMaxSize
Maximum size of the url.
Definition: ota_private.h:401
OtaAgentStatistics_t::otaPacketsProcessed
uint32_t otaPacketsProcessed
Definition: ota_private.h:292
JsonDocModel_t::pBodyDef
const JsonDocParam_t * pBodyDef
Definition: ota_private.h:278
OtaPalImageStateUnknown
@ OtaPalImageStateUnknown
The initial state of the OTA PAL Image.
Definition: ota_private.h:330
DocParseErrFieldTypeMismatch
@ DocParseErrFieldTypeMismatch
Definition: ota_private.h:193
JsonDocParam_t::required
const bool required
Definition: ota_private.h:255
OtaImageStateUnknown
@ OtaImageStateUnknown
The initial state of the OTA MCU Image.
Definition: ota_private.h:313
OtaEventMsg_t
Stores information about the event message.
Definition: ota_private.h:432
OtaFileContext_t::protocolMaxSize
uint16_t protocolMaxSize
Maximum size of the supported protocols string.
Definition: ota_private.h:407
IngestResultNullInput
@ IngestResultNullInput
Definition: ota_private.h:170
OtaPalImageState_t
OtaPalImageState_t
OTA Platform Image State.
Definition: ota_private.h:329
IngestResultUninitialized
@ IngestResultUninitialized
Definition: ota_private.h:177
JsonDocParam_t::modelParamType
const ModelParamType_t modelParamType
Definition: ota_private.h:258
OtaAgentEventCloseFile
@ OtaAgentEventCloseFile
Event to trigger closing file.
Definition: ota_private.h:352
IngestResult_t
IngestResult_t
Data ingest results.
Definition: ota_private.h:166
OtaFileContext_t::fileAttributes
uint32_t fileAttributes
Flags specific to the file being received (e.g. secure, bundle, archive).
Definition: ota_private.h:390
OtaFileContext_t::isInSelfTest
bool isInSelfTest
True if the job is in self test mode.
Definition: ota_private.h:405
OtaEvent_t
OtaEvent_t
OTA Agent Events.
Definition: ota_private.h:343
DocParseErrParamKeyNotInModel
@ DocParseErrParamKeyNotInModel
Definition: ota_private.h:203
DocParseErr_t
DocParseErr_t
Generic JSON document parser errors.
Definition: ota_private.h:188
OtaImageStateAborted
@ OtaImageStateAborted
The state of the OTA MCU Image after a timeout publish to the stream request fails....
Definition: ota_private.h:317
OtaFileContext_t::filePathMaxSize
uint16_t filePathMaxSize
Maximum size of the update file path.
Definition: ota_private.h:382
OtaAgentEventRequestTimer
@ OtaAgentEventRequestTimer
Event to request event timer.
Definition: ota_private.h:351
kOTA_MaxSignatureSize
#define kOTA_MaxSignatureSize
A composite cryptographic signature structure able to hold our largest supported signature.
Definition: ota_private.h:120
OtaAgentEventReceivedJobDocument
@ OtaAgentEventReceivedJobDocument
Event when job document is received.
Definition: ota_private.h:347
OtaImageStateTesting
@ OtaImageStateTesting
The state of the OTA MCU Image post successful download and reboot.
Definition: ota_private.h:314
JsonDocParam_t::pDestOffset
uint16_t pDestOffset
Definition: ota_private.h:256
IngestResultBadFileHandle
@ IngestResultBadFileHandle
Definition: ota_private.h:171
ModelParamType_t
ModelParamType_t
Document model parameter types used by the JSON document parser.
Definition: ota_private.h:214
OtaEventData_t::bufferUsed
bool bufferUsed
Definition: ota_private.h:423
DocParseErrNullDocPointer
@ DocParseErrNullDocPointer
Definition: ota_private.h:201
JsonDocModel_t::numModelParams
uint16_t numModelParams
Definition: ota_private.h:279
Sig256_t
OTA File Signature info.
Definition: ota_private.h:367
OtaFileContext_t::serverFileID
uint32_t serverFileID
The file is referenced by this numeric ID in the OTA job.
Definition: ota_private.h:391
OtaEventMsg_t::pEventData
OtaEventData_t * pEventData
Definition: ota_private.h:433
OtaAgentEventMax
@ OtaAgentEventMax
Last event specifier.
Definition: ota_private.h:357
OtaFileContext_t::blockBitmapMaxSize
uint16_t blockBitmapMaxSize
Maximum size of the block bitmap.
Definition: ota_private.h:397
IngestResultDuplicate_Continue
@ IngestResultDuplicate_Continue
Definition: ota_private.h:179
DocParseErrMalformedDoc
@ DocParseErrMalformedDoc
Definition: ota_private.h:197
JsonDocParam_t::pSrcKey
const char * pSrcKey
Definition: ota_private.h:254
OtaAgentEventStartSelfTest
@ OtaAgentEventStartSelfTest
Event to trigger self test.
Definition: ota_private.h:345
OtaPalImageStateInvalid
@ OtaPalImageStateInvalid
OTA PAL Image is invalid.
Definition: ota_private.h:333
IngestResultUnexpectedBlock
@ IngestResultUnexpectedBlock
Definition: ota_private.h:172
OtaFileContext_t::updaterVersion
uint32_t updaterVersion
Used by OTA self-test detection, the version of Firmware that did the update.
Definition: ota_private.h:404
DocParseErrNullBodyPointer
@ DocParseErrNullBodyPointer
Definition: ota_private.h:200
OtaFileContext_t::pRxBlockBitmap
uint8_t * pRxBlockBitmap
Bitmap of blocks received (for deduplicating and missing block request).
Definition: ota_private.h:396
IngestResultBlockOutOfRange
@ IngestResultBlockOutOfRange
Definition: ota_private.h:173
OtaPalImageStateValid
@ OtaPalImageStateValid
OTA PAL Image is valid.
Definition: ota_private.h:332
OtaFileContext_t::blocksRemaining
uint32_t blocksRemaining
How many blocks remain to be received (a code optimization).
Definition: ota_private.h:389
OtaAgentEventUserAbort
@ OtaAgentEventUserAbort
Event triggered by user to stop agent.
Definition: ota_private.h:355
OtaImageStateRejected
@ OtaImageStateRejected
The state of the OTA MCU Image when the job has been rejected.
Definition: ota_private.h:316
OtaFileContext_t::pFile
uint8_t * pFile
File type is RAM/Flash image pointer after file is open for write.
Definition: ota_private.h:386
DocParseErrInvalidToken
@ DocParseErrInvalidToken
Definition: ota_private.h:205
IngestResultNoDecodeMemory
@ IngestResultNoDecodeMemory
Definition: ota_private.h:176
OtaFileContext_t::authSchemeMaxSize
uint16_t authSchemeMaxSize
Maximum size of the auth scheme.
Definition: ota_private.h:403
Sig256_t::size
uint16_t size
Size, in bytes, of the signature.
Definition: ota_private.h:368
DocParseErrInvalidModelParamType
@ DocParseErrInvalidModelParamType
Definition: ota_private.h:204
OtaFileContext_t::pStreamName
uint8_t * pStreamName
The stream associated with this file from the OTA service.
Definition: ota_private.h:394