/* | |
* AWS IoT Shadow V2.1.0 | |
* Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. | |
* | |
* Permission is hereby granted, free of charge, to any person obtaining a copy of | |
* this software and associated documentation files (the "Software"), to deal in | |
* the Software without restriction, including without limitation the rights to | |
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of | |
* the Software, and to permit persons to whom the Software is furnished to do so, | |
* subject to the following conditions: | |
* | |
* The above copyright notice and this permission notice shall be included in all | |
* copies or substantial portions of the Software. | |
* | |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS | |
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR | |
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER | |
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
*/ | |
/** | |
* @file aws_iot_shadow_types.h | |
* @brief Types of the Thing Shadow library. | |
*/ | |
#ifndef AWS_IOT_SHADOW_TYPES_H_ | |
#define AWS_IOT_SHADOW_TYPES_H_ | |
/* The config header is always included first. */ | |
#include "iot_config.h" | |
/* MQTT types include. */ | |
#include "types/iot_mqtt_types.h" | |
/*--------------------------- Shadow handle types ---------------------------*/ | |
/** | |
* @handles{shadow,Shadow library} | |
*/ | |
/** | |
* @ingroup shadow_datatypes_handles | |
* @brief Opaque handle that references an in-progress Shadow operation. | |
* | |
* Set as an output parameter of @ref shadow_function_deleteasync, @ref shadow_function_getasync, | |
* and @ref shadow_function_updateasync. These functions send a message to the Shadow | |
* service requesting a Shadow operation; the result of this operation is unknown | |
* until the Shadow service sends a response. Therefore, this handle serves as a | |
* reference to Shadow operations awaiting a response from the Shadow service. | |
* | |
* This reference will be valid from the successful return of @ref shadow_function_deleteasync, | |
* @ref shadow_function_getasync, or @ref shadow_function_updateasync. The reference becomes | |
* invalid once the [completion callback](@ref AwsIotShadowCallbackInfo_t) is invoked, | |
* or @ref shadow_function_wait returns. | |
* | |
* @initializer{AwsIotShadowOperation_t,AWS_IOT_SHADOW_OPERATION_INITIALIZER} | |
* | |
* @see @ref shadow_function_wait and #AWS_IOT_SHADOW_FLAG_WAITABLE for waiting on | |
* a reference; or #AwsIotShadowCallbackInfo_t and #AwsIotShadowCallbackParam_t for an | |
* asynchronous notification of completion. | |
*/ | |
typedef struct _shadowOperation * AwsIotShadowOperation_t; | |
/*------------------------- Shadow enumerated types -------------------------*/ | |
/** | |
* @enums{shadow,Shadow library} | |
*/ | |
/** | |
* @ingroup shadow_datatypes_enums | |
* @brief Return codes of [Shadow functions](@ref shadow_functions). | |
* | |
* The function @ref shadow_function_strerror can be used to get a return code's | |
* description. | |
* | |
* The values between 400 (#AWS_IOT_SHADOW_BAD_REQUEST) and 500 | |
* (#AWS_IOT_SHADOW_SERVER_ERROR) may be returned by the Shadow service when it | |
* rejects a Shadow operation. See [this page] | |
* (https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-error-messages.html) | |
* for more information. | |
*/ | |
typedef enum AwsIotShadowError | |
{ | |
/** | |
* @brief Shadow operation completed successfully. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_init | |
* - @ref shadow_function_wait | |
* - @ref shadow_function_deletesync | |
* - @ref shadow_function_getsync | |
* - @ref shadow_function_updatesync | |
* - @ref shadow_function_setdeltacallback | |
* - @ref shadow_function_setupdatedcallback | |
* - @ref shadow_function_removepersistentsubscriptions | |
* | |
* Will also be the value of a Shadow operation completion callback's<br> | |
* [AwsIotShadowCallbackParam_t.operation.result](@ref AwsIotShadowCallbackParam_t.result) | |
* when successful. | |
*/ | |
AWS_IOT_SHADOW_SUCCESS = 0, | |
/** | |
* @brief Shadow operation queued, awaiting result. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deleteasync | |
* - @ref shadow_function_getasync | |
* - @ref shadow_function_updateasync | |
*/ | |
AWS_IOT_SHADOW_STATUS_PENDING = 1, | |
/** | |
* @brief Initialization failed. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_init | |
*/ | |
AWS_IOT_SHADOW_INIT_FAILED = 2, | |
/** | |
* @brief At least one parameter is invalid. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deleteasync and @ref shadow_function_deletesync | |
* - @ref shadow_function_getasync and @ref shadow_function_getsync | |
* - @ref shadow_function_updateasync and @ref shadow_function_updatesync | |
* - @ref shadow_function_wait | |
* - @ref shadow_function_setdeltacallback | |
* - @ref shadow_function_setupdatedcallback | |
*/ | |
AWS_IOT_SHADOW_BAD_PARAMETER = 3, | |
/** | |
* @brief Shadow operation failed because of memory allocation failure. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deleteasync and @ref shadow_function_deletesync | |
* - @ref shadow_function_getasync and @ref shadow_function_getsync | |
* - @ref shadow_function_updateasync and @ref shadow_function_updatesync | |
* - @ref shadow_function_setdeltacallback | |
* - @ref shadow_function_setupdatedcallback | |
*/ | |
AWS_IOT_SHADOW_NO_MEMORY = 4, | |
/** | |
* @brief Shadow operation failed because of failure in MQTT library. | |
* | |
* Check the Shadow library logs for the error code returned by the MQTT | |
* library. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deleteasync and @ref shadow_function_deletesync | |
* - @ref shadow_function_getasync and @ref shadow_function_getsync | |
* - @ref shadow_function_updateasync and @ref shadow_function_updatesync | |
* - @ref shadow_function_setdeltacallback | |
* - @ref shadow_function_setupdatedcallback | |
* - @ref shadow_function_removepersistentsubscriptions | |
*/ | |
AWS_IOT_SHADOW_MQTT_ERROR = 5, | |
/** | |
* @brief Response received from Shadow service not understood. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deletesync | |
* - @ref shadow_function_getsync | |
* - @ref shadow_function_updatesync | |
* - @ref shadow_function_wait | |
* | |
* May also be the value of a Shadow operation completion callback's<br> | |
* [AwsIotShadowCallbackParam_t.operation.result](@ref AwsIotShadowCallbackParam_t.result) | |
*/ | |
AWS_IOT_SHADOW_BAD_RESPONSE = 7, | |
/** | |
* @brief A blocking Shadow operation timed out. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deletesync | |
* - @ref shadow_function_getsync | |
* - @ref shadow_function_updatesync | |
* - @ref shadow_function_wait | |
* - @ref shadow_function_setdeltacallback | |
* - @ref shadow_function_setupdatedcallback | |
*/ | |
AWS_IOT_SHADOW_TIMEOUT = 8, | |
/** | |
* @brief An API function was called before @ref shadow_function_init. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deleteasync and @ref shadow_function_deletesync | |
* - @ref shadow_function_getasync and @ref shadow_function_getsync | |
* - @ref shadow_function_updateasync and @ref shadow_function_updatesync | |
* - @ref shadow_function_wait | |
* - @ref shadow_function_setdeltacallback | |
* - @ref shadow_function_setupdatedcallback | |
*/ | |
AWS_IOT_SHADOW_NOT_INITIALIZED = 11, | |
/** | |
* @brief Shadow operation rejected: Bad request. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deletesync | |
* - @ref shadow_function_getsync | |
* - @ref shadow_function_updatesync | |
* - @ref shadow_function_wait | |
* | |
* May also be the value of a Shadow operation completion callback's<br> | |
* [AwsIotShadowCallbackParam_t.operation.result](@ref AwsIotShadowCallbackParam_t.result) | |
*/ | |
AWS_IOT_SHADOW_BAD_REQUEST = 400, | |
/** | |
* @brief Shadow operation rejected: Unauthorized. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deletesync | |
* - @ref shadow_function_getsync | |
* - @ref shadow_function_updatesync | |
* - @ref shadow_function_wait | |
* | |
* May also be the value of a Shadow operation completion callback's<br> | |
* [AwsIotShadowCallbackParam_t.operation.result](@ref AwsIotShadowCallbackParam_t.result) | |
*/ | |
AWS_IOT_SHADOW_UNAUTHORIZED = 401, | |
/** | |
* @brief Shadow operation rejected: Forbidden. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deletesync | |
* - @ref shadow_function_getsync | |
* - @ref shadow_function_updatesync | |
* - @ref shadow_function_wait | |
* | |
* May also be the value of a Shadow operation completion callback's<br> | |
* [AwsIotShadowCallbackParam_t.operation.result](@ref AwsIotShadowCallbackParam_t.result) | |
*/ | |
AWS_IOT_SHADOW_FORBIDDEN = 403, | |
/** | |
* @brief Shadow operation rejected: Thing not found. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deletesync | |
* - @ref shadow_function_getsync | |
* - @ref shadow_function_updatesync | |
* - @ref shadow_function_wait | |
* | |
* May also be the value of a Shadow operation completion callback's<br> | |
* [AwsIotShadowCallbackParam_t.operation.result](@ref AwsIotShadowCallbackParam_t.result) | |
*/ | |
AWS_IOT_SHADOW_NOT_FOUND = 404, | |
/** | |
* @brief Shadow operation rejected: Version conflict. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deletesync | |
* - @ref shadow_function_getsync | |
* - @ref shadow_function_updatesync | |
* - @ref shadow_function_wait | |
* | |
* May also be the value of a Shadow operation completion callback's<br> | |
* [AwsIotShadowCallbackParam_t.operation.result](@ref AwsIotShadowCallbackParam_t.result) | |
*/ | |
AWS_IOT_SHADOW_CONFLICT = 409, | |
/** | |
* @brief Shadow operation rejected: The payload exceeds the maximum size | |
* allowed. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deletesync | |
* - @ref shadow_function_getsync | |
* - @ref shadow_function_updatesync | |
* - @ref shadow_function_wait | |
* | |
* May also be the value of a Shadow operation completion callback's<br> | |
* [AwsIotShadowCallbackParam_t.operation.result](@ref AwsIotShadowCallbackParam_t.result) | |
*/ | |
AWS_IOT_SHADOW_TOO_LARGE = 413, | |
/** | |
* @brief Shadow operation rejected: Unsupported document encoding; supported | |
* encoding is UTF-8. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deletesync | |
* - @ref shadow_function_getsync | |
* - @ref shadow_function_updatesync | |
* - @ref shadow_function_wait | |
* | |
* May also be the value of a Shadow operation completion callback's<br> | |
* [AwsIotShadowCallbackParam_t.operation.result](@ref AwsIotShadowCallbackParam_t.result) | |
*/ | |
AWS_IOT_SHADOW_UNSUPPORTED = 415, | |
/** | |
* @brief Shadow operation rejected: The Device Shadow service will generate | |
* this error message when there are more than 10 in-flight requests. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deletesync | |
* - @ref shadow_function_getsync | |
* - @ref shadow_function_updatesync | |
* - @ref shadow_function_wait | |
* | |
* May also be the value of a Shadow operation completion callback's<br> | |
* [AwsIotShadowCallbackParam_t.operation.result](@ref AwsIotShadowCallbackParam_t.result) | |
*/ | |
AWS_IOT_SHADOW_TOO_MANY_REQUESTS = 429, | |
/** | |
* @brief Shadow operation rejected: Internal service failure. | |
* | |
* Functions that may return this value: | |
* - @ref shadow_function_deletesync | |
* - @ref shadow_function_getsync | |
* - @ref shadow_function_updatesync | |
* - @ref shadow_function_wait | |
* | |
* May also be the value of a Shadow operation completion callback's<br> | |
* [AwsIotShadowCallbackParam_t.operation.result](@ref AwsIotShadowCallbackParam_t.result) | |
*/ | |
AWS_IOT_SHADOW_SERVER_ERROR = 500, | |
} AwsIotShadowError_t; | |
/** | |
* @ingroup shadow_datatypes_enums | |
* @brief Types of Shadow library callbacks. | |
* | |
* One of these values will be placed in #AwsIotShadowCallbackParam_t.callbackType | |
* to identify the reason for invoking a callback function. | |
*/ | |
typedef enum AwsIotShadowCallbackType | |
{ | |
AWS_IOT_SHADOW_DELETE_COMPLETE, /**< Callback invoked because a [Shadow delete](@ref shadow_function_deleteasync) completed. */ | |
AWS_IOT_SHADOW_GET_COMPLETE, /**< Callback invoked because a [Shadow get](@ref shadow_function_getasync) completed. */ | |
AWS_IOT_SHADOW_UPDATE_COMPLETE, /**< Callback invoked because a [Shadow update](@ref shadow_function_updateasync) completed. */ | |
AWS_IOT_SHADOW_DELTA_CALLBACK, /**< Callback invoked for an incoming message on a [Shadow delta](@ref shadow_function_setdeltacallback) topic. */ | |
AWS_IOT_SHADOW_UPDATED_CALLBACK /**< Callback invoked for an incoming message on a [Shadow updated](@ref shadow_function_setupdatedcallback) topic. */ | |
} AwsIotShadowCallbackType_t; | |
/*------------------------- Shadow parameter structs ------------------------*/ | |
/** | |
* @paramstructs{shadow,Shadow} | |
*/ | |
/** | |
* @ingroup shadow_datatypes_paramstructs | |
* @brief Parameter to a Shadow callback function. | |
* | |
* @paramfor Shadow callback functions | |
* | |
* The Shadow library passes this struct to a callback function whenever a | |
* Shadow operation completes or a message is received on a Shadow delta or | |
* updated topic. | |
* | |
* The valid members of this struct are different based on | |
* #AwsIotShadowCallbackParam_t.callbackType. If the callback type is | |
* #AWS_IOT_SHADOW_DELETE_COMPLETE, #AWS_IOT_SHADOW_GET_COMPLETE, or | |
* #AWS_IOT_SHADOW_UPDATE_COMPLETE, then #AwsIotShadowCallbackParam_t.operation | |
* is valid. Otherwise, if the callback type is #AWS_IOT_SHADOW_DELTA_CALLBACK | |
* or #AWS_IOT_SHADOW_UPDATED_CALLBACK, then #AwsIotShadowCallbackParam_t.callback | |
* is valid. | |
* | |
* @attention Any pointers in this callback parameter may be freed as soon as the | |
* [callback function](@ref AwsIotShadowCallbackInfo_t.function) returns. Therefore, | |
* data must be copied if it is needed after the callback function returns. | |
* @attention The Shadow library may set strings that are not NULL-terminated. | |
* | |
* @see #AwsIotShadowCallbackInfo_t for the signature of a callback function. | |
*/ | |
typedef struct AwsIotShadowCallbackParam | |
{ | |
AwsIotShadowCallbackType_t callbackType; /**< @brief Reason for invoking the Shadow callback function to provide context. */ | |
const char * pThingName; /**< @brief The Thing Name associated with this Shadow callback. */ | |
size_t thingNameLength; /**< @brief Length of #AwsIotShadowCallbackParam_t.pThingName. */ | |
IotMqttConnection_t mqttConnection; /**< @brief The MQTT connection associated with the Shadow callback. */ | |
union | |
{ | |
/* Valid for completed Shadow operations. */ | |
struct | |
{ | |
/* Valid for a completed Shadow GET operation. */ | |
struct | |
{ | |
const char * pDocument; /**< @brief Retrieved Shadow document. */ | |
size_t documentLength; /**< @brief Length of retrieved Shadow document. */ | |
} get; /**< @brief Retrieved Shadow document, valid only for a completed [Shadow Get](@ref shadow_function_getasync). */ | |
AwsIotShadowError_t result; /**< @brief Result of Shadow operation, e.g. succeeded or failed. */ | |
AwsIotShadowOperation_t reference; /**< @brief Reference to the Shadow operation that completed. */ | |
} operation; /**< @brief Information on a completed Shadow operation. */ | |
/* Valid for a message on a Shadow delta or updated topic. */ | |
struct | |
{ | |
const char * pDocument; /**< @brief Shadow delta or updated document. */ | |
size_t documentLength; /**< @brief Length of Shadow delta or updated document. */ | |
} callback; /**< @brief Shadow document from an incoming delta or updated topic. */ | |
} u; /**< @brief Valid member depends on callback type. */ | |
} AwsIotShadowCallbackParam_t; | |
/** | |
* @ingroup shadow_datatypes_paramstructs | |
* @brief Information on a user-provided Shadow callback function. | |
* | |
* @paramfor @ref shadow_function_deleteasync, @ref shadow_function_getasync, @ref | |
* shadow_function_updateasync, @ref shadow_function_setdeltacallback, @ref | |
* shadow_function_setupdatedcallback | |
* | |
* Provides a function to be invoked when a Shadow operation completes or when a | |
* Shadow document is received on a callback topic (delta or updated). | |
* | |
* @initializer{AwsIotShadowCallbackInfo_t,AWS_IOT_SHADOW_CALLBACK_INFO_INITIALIZER} | |
*/ | |
typedef struct AwsIotShadowCallbackInfo | |
{ | |
void * pCallbackContext; /**< @brief The first parameter to pass to the callback function. */ | |
/** | |
* @brief User-provided callback function signature. | |
* | |
* @param[in] pCallbackContext #AwsIotShadowCallbackInfo_t.pCallbackContext | |
* @param[in] pCallbackParam Details on the outcome of the Shadow | |
* operation or an incoming Shadow document. | |
* | |
* @see #AwsIotShadowCallbackParam_t for more information on the second parameter. | |
*/ | |
void ( * function )( void * pCallbackContext, | |
AwsIotShadowCallbackParam_t * pCallbackParam ); | |
} AwsIotShadowCallbackInfo_t; | |
/** | |
* @ingroup shadow_datatypes_paramstructs | |
* @brief Information on a Shadow document for @ref shadow_function_getasync or @ref | |
* shadow_function_updateasync. | |
* | |
* @paramfor @ref shadow_function_getasync, @ref shadow_function_updateasync | |
* | |
* The valid members of this struct are different based on whether this struct | |
* is passed to @ref shadow_function_getasync or @ref shadow_function_updateasync. When | |
* passed to @ref shadow_function_getasync, the `get` member is valid. When passed to | |
* @ref shadow_function_updateasync, the `update` member is valid. All other members | |
* must always be set. | |
* | |
* @initializer{AwsIotShadowDocumentInfo_t,AWS_IOT_SHADOW_DOCUMENT_INFO_INITIALIZER} | |
*/ | |
typedef struct AwsIotShadowDocumentInfo | |
{ | |
const char * pThingName; /**< @brief The Thing Name associated with this Shadow document. */ | |
size_t thingNameLength; /**< @brief Length of #AwsIotShadowDocumentInfo_t.pThingName. */ | |
IotMqttQos_t qos; /**< @brief QoS when sending a Shadow get or update message. See #IotMqttPublishInfo_t.qos. */ | |
uint32_t retryLimit; /**< @brief Maximum number of retries for a Shadow get or update message. See #IotMqttPublishInfo_t.retryLimit. */ | |
uint32_t retryMs; /**< @brief First retry time for a Shadow get or update message. See IotMqttPublishInfo_t.retryMs. */ | |
union | |
{ | |
/* Valid for Shadow get. */ | |
struct | |
{ | |
/** | |
* @brief Function to allocate memory for an incoming Shadow document. | |
* | |
* @param[in] documentLength Length of the document that needs to | |
* be allocated. | |
* This only needs to be set if #AWS_IOT_SHADOW_FLAG_WAITABLE is passed to | |
* @ref shadow_function_getasync. | |
*/ | |
void *( *mallocDocument )( size_t documentLength ); | |
} get; /**< @brief Valid members for @ref shadow_function_getasync. */ | |
/* Valid for Shadow update. */ | |
struct | |
{ | |
const char * pUpdateDocument; /**< @brief The Shadow document to send in the update. */ | |
size_t updateDocumentLength; /**< @brief Length of Shadow update document. */ | |
} update; /**< @brief Valid members for @ref shadow_function_updateasync. */ | |
} u; /**< @brief Valid member depends on operation type. */ | |
} AwsIotShadowDocumentInfo_t; | |
/*------------------------ Shadow defined constants -------------------------*/ | |
/** | |
* @constantspage{shadow,Shadow library} | |
* | |
* @section shadow_constants_initializers Shadow Initializers | |
* @brief Provides default values for the data types of the Shadow library. | |
* | |
* @snippet this define_shadow_initializers | |
* | |
* All user-facing data types of the Shadow library should be initialized | |
* using one of the following. | |
* | |
* @warning Failing to initialize a Shadow data type with the appropriate | |
* initializer may result in undefined behavior! | |
* @note The initializers may change at any time in future versions, but their | |
* names will remain the same. | |
* | |
* <b>Example</b> | |
* @code{c} | |
* AwsIotShadowCallbackInfo_t callbackInfo = AWS_IOT_SHADOW_CALLBACK_INFO_INITIALIZER; | |
* AwsIotShadowDocumentInfo_t documentInfo = AWS_IOT_SHADOW_DOCUMENT_INFO_INITIALIZER; | |
* AwsIotShadowOperation_t operation = AWS_IOT_SHADOW_OPERATION_INITIALIZER; | |
* @endcode | |
* | |
* @section shadow_constants_flags Shadow Function Flags | |
* @brief Flags that modify the behavior of Shadow library functions. | |
* | |
* Flags should be bitwise-ORed with each other to change the behavior of | |
* Shadow library functions. | |
* | |
* The following flags are valid for the Shadow operation functions: | |
* @ref shadow_function_deleteasync, @ref shadow_function_getasync, @ref shadow_function_updateasync, | |
* and their blocking versions. | |
* - #AWS_IOT_SHADOW_FLAG_WAITABLE <br> | |
* @copybrief AWS_IOT_SHADOW_FLAG_WAITABLE | |
* - #AWS_IOT_SHADOW_FLAG_KEEP_SUBSCRIPTIONS <br> | |
* @copybrief AWS_IOT_SHADOW_FLAG_KEEP_SUBSCRIPTIONS | |
* | |
* The following flags are valid for @ref shadow_function_removepersistentsubscriptions. | |
* These flags are not valid for the Shadow operation functions. | |
* - #AWS_IOT_SHADOW_FLAG_REMOVE_DELETE_SUBSCRIPTIONS <br> | |
* @copybrief AWS_IOT_SHADOW_FLAG_REMOVE_DELETE_SUBSCRIPTIONS | |
* - #AWS_IOT_SHADOW_FLAG_REMOVE_GET_SUBSCRIPTIONS <br> | |
* @copybrief AWS_IOT_SHADOW_FLAG_REMOVE_GET_SUBSCRIPTIONS | |
* - #AWS_IOT_SHADOW_FLAG_REMOVE_UPDATE_SUBSCRIPTIONS <br> | |
* @copybrief AWS_IOT_SHADOW_FLAG_REMOVE_UPDATE_SUBSCRIPTIONS | |
* | |
* @note The values of the flags may change at any time in future versions, but | |
* their names will remain the same. Additionally, flags which may be used at | |
* the same time will be bitwise-exclusive of each other. | |
*/ | |
/* @[define_shadow_initializers] */ | |
#define AWS_IOT_SHADOW_CALLBACK_INFO_INITIALIZER { 0 } /**< @brief Initializer for #AwsIotShadowCallbackInfo_t. */ | |
#define AWS_IOT_SHADOW_DOCUMENT_INFO_INITIALIZER { 0 } /**< @brief Initializer for #AwsIotShadowDocumentInfo_t. */ | |
#define AWS_IOT_SHADOW_OPERATION_INITIALIZER NULL /**< @brief Initializer for #AwsIotShadowOperation_t. */ | |
/* @[define_shadow_initializers] */ | |
/** | |
* @brief Allows the use of @ref shadow_function_wait for blocking until completion. | |
* | |
* This flag is only valid if passed to the functions @ref shadow_function_deleteasync, | |
* @ref shadow_function_getasync, or @ref shadow_function_updateasync. | |
* | |
* An #AwsIotShadowOperation_t <b>MUST</b> be provided if this flag is set. | |
* Additionally, an #AwsIotShadowCallbackInfo_t <b>MUST NOT</b> be provided. | |
* | |
* @note If this flag is set, @ref shadow_function_wait <b>MUST</b> be called to | |
* clean up resources. | |
*/ | |
#define AWS_IOT_SHADOW_FLAG_WAITABLE ( 0x00000001 ) | |
/** | |
* @brief Maintain the subscriptions for the Shadow operation topics, even after | |
* this function returns. | |
* | |
* This flag is only valid if passed to the functions @ref shadow_function_deleteasync, | |
* @ref shadow_function_getasync, @ref shadow_function_updateasync, or their blocking versions. | |
* | |
* The Shadow service reports results of Shadow operations by publishing | |
* messages to MQTT topics. By default, the functions @ref shadow_function_deleteasync, | |
* @ref shadow_function_getasync, and @ref shadow_function_updateasync subscribe to the | |
* necessary topics, wait for the Shadow service to publish the result of the | |
* Shadow operation, then unsubscribe from those topics. This workflow is suitable | |
* for infrequent Shadow operations, but is inefficient for frequent, periodic | |
* Shadow operations (where subscriptions for the Shadow operation topics would be | |
* constantly added and removed). | |
* | |
* This flag causes @ref shadow_function_deleteasync, @ref shadow_function_getasync, or | |
* @ref shadow_function_updateasync to maintain Shadow operation topic subscriptions, | |
* even after the function returns. These subscriptions may then be used by a | |
* future call to the same function. | |
* | |
* This flags only needs to be set once, after which subscriptions are maintained | |
* and reused for a specific Thing Name and Shadow function. The function @ref | |
* shadow_function_removepersistentsubscriptions may be used to remove | |
* subscriptions maintained by this flag. | |
*/ | |
#define AWS_IOT_SHADOW_FLAG_KEEP_SUBSCRIPTIONS ( 0x00000002 ) | |
/** | |
* @brief Remove the persistent subscriptions from a Shadow delete operation. | |
* | |
* This flag is only valid if passed to the function @ref | |
* shadow_function_removepersistentsubscriptions. | |
* | |
* This flag may be passed to @ref shadow_function_removepersistentsubscriptions | |
* to remove any subscriptions for a specific Thing Name maintained by a previous | |
* call to @ref shadow_function_deleteasync or @ref shadow_function_deletesync. | |
* | |
* @warning Do not call @ref shadow_function_removepersistentsubscriptions with | |
* this flag for Thing Names with any in-progress Shadow delete operations. | |
*/ | |
#define AWS_IOT_SHADOW_FLAG_REMOVE_DELETE_SUBSCRIPTIONS ( 0x00000001 ) | |
/** | |
* @brief Remove the persistent subscriptions from a Shadow get operation. | |
* | |
* This flag is only valid if passed to the function @ref | |
* shadow_function_removepersistentsubscriptions. | |
* | |
* This flag may be passed to @ref shadow_function_removepersistentsubscriptions | |
* to remove any subscriptions for a specific Thing Name maintained by a previous | |
* call to @ref shadow_function_getasync or @ref shadow_function_getsync. | |
* | |
* @warning Do not call @ref shadow_function_removepersistentsubscriptions with | |
* this flag for Thing Names with any in-progress Shadow get operations. | |
*/ | |
#define AWS_IOT_SHADOW_FLAG_REMOVE_GET_SUBSCRIPTIONS ( 0x00000002 ) | |
/** | |
* @brief Remove the persistent subscriptions from a Shadow update operation. | |
* | |
* This flag is only valid if passed to the function @ref | |
* shadow_function_removepersistentsubscriptions. | |
* | |
* This flag may be passed to @ref shadow_function_removepersistentsubscriptions | |
* to remove any subscriptions for a specific Thing Name maintained by a previous | |
* call to @ref shadow_function_updateasync or @ref shadow_function_updatesync. | |
* | |
* @warning Do not call @ref shadow_function_removepersistentsubscriptions with | |
* this flag for Thing Names with any in-progress Shadow update operations. | |
*/ | |
#define AWS_IOT_SHADOW_FLAG_REMOVE_UPDATE_SUBSCRIPTIONS ( 0x00000004 ) | |
#endif /* ifndef AWS_IOT_SHADOW_TYPES_H_ */ |