Xin Zhang / azure-iot-c-sdk-f767zi

Dependents:   samplemqtt

Committer:
XinZhangMS
Date:
Thu Aug 23 06:52:14 2018 +0000
Revision:
0:f7f1f0d76dd6
azure-c-sdk for mbed os supporting NUCLEO_F767ZI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
XinZhangMS 0:f7f1f0d76dd6 1 // Copyright (c) Microsoft. All rights reserved.
XinZhangMS 0:f7f1f0d76dd6 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
XinZhangMS 0:f7f1f0d76dd6 3
XinZhangMS 0:f7f1f0d76dd6 4 // This file is under development and it is subject to change
XinZhangMS 0:f7f1f0d76dd6 5
XinZhangMS 0:f7f1f0d76dd6 6 #ifndef IOTHUB_MESSAGING_LL_H
XinZhangMS 0:f7f1f0d76dd6 7 #define IOTHUB_MESSAGING_LL_H
XinZhangMS 0:f7f1f0d76dd6 8
XinZhangMS 0:f7f1f0d76dd6 9 #include "azure_c_shared_utility/crt_abstractions.h"
XinZhangMS 0:f7f1f0d76dd6 10 #include "azure_c_shared_utility/singlylinkedlist.h"
XinZhangMS 0:f7f1f0d76dd6 11 #include "azure_c_shared_utility/map.h"
XinZhangMS 0:f7f1f0d76dd6 12 #include "iothub_message.h"
XinZhangMS 0:f7f1f0d76dd6 13 #include "iothub_service_client_auth.h"
XinZhangMS 0:f7f1f0d76dd6 14 #include "azure_c_shared_utility/umock_c_prod.h"
XinZhangMS 0:f7f1f0d76dd6 15
XinZhangMS 0:f7f1f0d76dd6 16 #ifdef __cplusplus
XinZhangMS 0:f7f1f0d76dd6 17 extern "C"
XinZhangMS 0:f7f1f0d76dd6 18 {
XinZhangMS 0:f7f1f0d76dd6 19 #else
XinZhangMS 0:f7f1f0d76dd6 20 #endif
XinZhangMS 0:f7f1f0d76dd6 21
XinZhangMS 0:f7f1f0d76dd6 22
XinZhangMS 0:f7f1f0d76dd6 23 #define IOTHUB_FEEDBACK_STATUS_CODE_VALUES \
XinZhangMS 0:f7f1f0d76dd6 24 IOTHUB_FEEDBACK_STATUS_CODE_SUCCESS, \
XinZhangMS 0:f7f1f0d76dd6 25 IOTHUB_FEEDBACK_STATUS_CODE_EXPIRED, \
XinZhangMS 0:f7f1f0d76dd6 26 IOTHUB_FEEDBACK_STATUS_CODE_DELIVER_COUNT_EXCEEDED, \
XinZhangMS 0:f7f1f0d76dd6 27 IOTHUB_FEEDBACK_STATUS_CODE_REJECTED, \
XinZhangMS 0:f7f1f0d76dd6 28 IOTHUB_FEEDBACK_STATUS_CODE_UNKNOWN \
XinZhangMS 0:f7f1f0d76dd6 29
XinZhangMS 0:f7f1f0d76dd6 30 DEFINE_ENUM(IOTHUB_FEEDBACK_STATUS_CODE, IOTHUB_FEEDBACK_STATUS_CODE_VALUES);
XinZhangMS 0:f7f1f0d76dd6 31
XinZhangMS 0:f7f1f0d76dd6 32 #define IOTHUB_MESSAGE_SEND_STATE_VALUES \
XinZhangMS 0:f7f1f0d76dd6 33 IOTHUB_MESSAGE_SEND_STATE_NOT_SENT, \
XinZhangMS 0:f7f1f0d76dd6 34 IOTHUB_MESSAGE_SEND_STATE_SEND_IN_PROGRESS, \
XinZhangMS 0:f7f1f0d76dd6 35 IOTHUB_MESSAGE_SEND_STATE_SENT_OK, \
XinZhangMS 0:f7f1f0d76dd6 36 IOTHUB_MESSAGE_SEND_STATE_SEND_FAILED \
XinZhangMS 0:f7f1f0d76dd6 37
XinZhangMS 0:f7f1f0d76dd6 38 DEFINE_ENUM(IOTHUB_MESSAGE_SEND_STATE, IOTHUB_MESSAGE_SEND_STATE_VALUES);
XinZhangMS 0:f7f1f0d76dd6 39
XinZhangMS 0:f7f1f0d76dd6 40 #define IOTHUB_MESSAGING_RESULT_VALUES \
XinZhangMS 0:f7f1f0d76dd6 41 IOTHUB_MESSAGING_OK, \
XinZhangMS 0:f7f1f0d76dd6 42 IOTHUB_MESSAGING_INVALID_ARG, \
XinZhangMS 0:f7f1f0d76dd6 43 IOTHUB_MESSAGING_ERROR, \
XinZhangMS 0:f7f1f0d76dd6 44 IOTHUB_MESSAGING_INVALID_JSON, \
XinZhangMS 0:f7f1f0d76dd6 45 IOTHUB_MESSAGING_DEVICE_EXIST, \
XinZhangMS 0:f7f1f0d76dd6 46 IOTHUB_MESSAGING_CALLBACK_NOT_SET \
XinZhangMS 0:f7f1f0d76dd6 47
XinZhangMS 0:f7f1f0d76dd6 48 DEFINE_ENUM(IOTHUB_MESSAGING_RESULT, IOTHUB_MESSAGING_RESULT_VALUES);
XinZhangMS 0:f7f1f0d76dd6 49
XinZhangMS 0:f7f1f0d76dd6 50 typedef struct IOTHUB_SERVICE_FEEDBACK_RECORD_TAG
XinZhangMS 0:f7f1f0d76dd6 51 {
XinZhangMS 0:f7f1f0d76dd6 52 char* description;
XinZhangMS 0:f7f1f0d76dd6 53 const char* deviceId;
XinZhangMS 0:f7f1f0d76dd6 54 const char* correlationId;
XinZhangMS 0:f7f1f0d76dd6 55 const char* generationId;
XinZhangMS 0:f7f1f0d76dd6 56 const char* enqueuedTimeUtc;
XinZhangMS 0:f7f1f0d76dd6 57 IOTHUB_FEEDBACK_STATUS_CODE statusCode;
XinZhangMS 0:f7f1f0d76dd6 58 const char* originalMessageId;
XinZhangMS 0:f7f1f0d76dd6 59 } IOTHUB_SERVICE_FEEDBACK_RECORD;
XinZhangMS 0:f7f1f0d76dd6 60
XinZhangMS 0:f7f1f0d76dd6 61 typedef struct IOTHUB_SERVICE_FEEDBACK_BATCH_TAG
XinZhangMS 0:f7f1f0d76dd6 62 {
XinZhangMS 0:f7f1f0d76dd6 63 const char* userId;
XinZhangMS 0:f7f1f0d76dd6 64 const char* lockToken;
XinZhangMS 0:f7f1f0d76dd6 65 SINGLYLINKEDLIST_HANDLE feedbackRecordList;
XinZhangMS 0:f7f1f0d76dd6 66 } IOTHUB_SERVICE_FEEDBACK_BATCH;
XinZhangMS 0:f7f1f0d76dd6 67
XinZhangMS 0:f7f1f0d76dd6 68 typedef struct IOTHUB_MESSAGING_TAG* IOTHUB_MESSAGING_HANDLE;
XinZhangMS 0:f7f1f0d76dd6 69
XinZhangMS 0:f7f1f0d76dd6 70 typedef void(*IOTHUB_OPEN_COMPLETE_CALLBACK)(void* context);
XinZhangMS 0:f7f1f0d76dd6 71 typedef void(*IOTHUB_SEND_COMPLETE_CALLBACK)(void* context, IOTHUB_MESSAGING_RESULT messagingResult);
XinZhangMS 0:f7f1f0d76dd6 72 typedef void(*IOTHUB_FEEDBACK_MESSAGE_RECEIVED_CALLBACK)(void* context, IOTHUB_SERVICE_FEEDBACK_BATCH* feedbackBatch);
XinZhangMS 0:f7f1f0d76dd6 73
XinZhangMS 0:f7f1f0d76dd6 74 /** @brief Creates a IoT Hub Service Client Messaging handle for use it in consequent APIs.
XinZhangMS 0:f7f1f0d76dd6 75 *
XinZhangMS 0:f7f1f0d76dd6 76 * @param iotHubMessagingServiceClientHandle Service client handle.
XinZhangMS 0:f7f1f0d76dd6 77 *
XinZhangMS 0:f7f1f0d76dd6 78 * @return A non-NULL @c IOTHUB_MESSAGING_CLIENT_HANDLE value that is used when
XinZhangMS 0:f7f1f0d76dd6 79 * invoking other functions for IoT Hub DeviceMethod and @c NULL on failure.
XinZhangMS 0:f7f1f0d76dd6 80 */
XinZhangMS 0:f7f1f0d76dd6 81 MOCKABLE_FUNCTION(, IOTHUB_MESSAGING_HANDLE, IoTHubMessaging_LL_Create, IOTHUB_SERVICE_CLIENT_AUTH_HANDLE, iotHubMessagingServiceClientHandle);
XinZhangMS 0:f7f1f0d76dd6 82
XinZhangMS 0:f7f1f0d76dd6 83 /** @brief Disposes of resources allocated by the IoT Hub Service Client Messaging.
XinZhangMS 0:f7f1f0d76dd6 84 *
XinZhangMS 0:f7f1f0d76dd6 85 * @param messagingClientHandle The handle created by a call to the create function.
XinZhangMS 0:f7f1f0d76dd6 86 */
XinZhangMS 0:f7f1f0d76dd6 87 MOCKABLE_FUNCTION(, void, IoTHubMessaging_LL_Destroy, IOTHUB_MESSAGING_HANDLE, messagingHandle);
XinZhangMS 0:f7f1f0d76dd6 88
XinZhangMS 0:f7f1f0d76dd6 89 /** @brief Opens connection to IoTHub.
XinZhangMS 0:f7f1f0d76dd6 90 *
XinZhangMS 0:f7f1f0d76dd6 91 * @param messagingClientHandle The handle created by a call to the create function.
XinZhangMS 0:f7f1f0d76dd6 92 * @param openCompleteCallback The callback specified by the user for receiving
XinZhangMS 0:f7f1f0d76dd6 93 * confirmation of the connection opened.
XinZhangMS 0:f7f1f0d76dd6 94 * The user can specify a @c NULL value here to
XinZhangMS 0:f7f1f0d76dd6 95 * indicate that no callback is required.
XinZhangMS 0:f7f1f0d76dd6 96 * @param userContextCallback User specified context that will be provided to the
XinZhangMS 0:f7f1f0d76dd6 97 * callback. This can be @c NULL.
XinZhangMS 0:f7f1f0d76dd6 98 *
XinZhangMS 0:f7f1f0d76dd6 99 * @return IOTHUB_MESSAGING_OK upon success or an error code upon failure.
XinZhangMS 0:f7f1f0d76dd6 100 */
XinZhangMS 0:f7f1f0d76dd6 101 MOCKABLE_FUNCTION(, IOTHUB_MESSAGING_RESULT, IoTHubMessaging_LL_Open, IOTHUB_MESSAGING_HANDLE, messagingHandle, IOTHUB_OPEN_COMPLETE_CALLBACK, openCompleteCallback, void*, userContextCallback);
XinZhangMS 0:f7f1f0d76dd6 102
XinZhangMS 0:f7f1f0d76dd6 103 /** @brief Closes connection to IoTHub.
XinZhangMS 0:f7f1f0d76dd6 104 *
XinZhangMS 0:f7f1f0d76dd6 105 * @param messagingClientHandle The handle created by a call to the create function.
XinZhangMS 0:f7f1f0d76dd6 106 */
XinZhangMS 0:f7f1f0d76dd6 107 MOCKABLE_FUNCTION(, void, IoTHubMessaging_LL_Close, IOTHUB_MESSAGING_HANDLE, messagingHandle);
XinZhangMS 0:f7f1f0d76dd6 108
XinZhangMS 0:f7f1f0d76dd6 109 /**
XinZhangMS 0:f7f1f0d76dd6 110 * @brief Synchronous call to send the message to a specified device.
XinZhangMS 0:f7f1f0d76dd6 111 *
XinZhangMS 0:f7f1f0d76dd6 112 * @param messagingClientHandle The handle created by a call to the create function.
XinZhangMS 0:f7f1f0d76dd6 113 * @param deviceId The name (Id) of the device to send the message to.
XinZhangMS 0:f7f1f0d76dd6 114 * @param message The message to send.
XinZhangMS 0:f7f1f0d76dd6 115 * @param sendCompleteCallback The callback specified by the user for receiving
XinZhangMS 0:f7f1f0d76dd6 116 * confirmation of the delivery of the message.
XinZhangMS 0:f7f1f0d76dd6 117 * The user can specify a @c NULL value here to
XinZhangMS 0:f7f1f0d76dd6 118 * indicate that no callback is required.
XinZhangMS 0:f7f1f0d76dd6 119 * @param userContextCallback User specified context that will be provided to the
XinZhangMS 0:f7f1f0d76dd6 120 * callback. This can be @c NULL.
XinZhangMS 0:f7f1f0d76dd6 121 *
XinZhangMS 0:f7f1f0d76dd6 122 * @b NOTE: The application behavior is undefined if the user calls
XinZhangMS 0:f7f1f0d76dd6 123 * the ::IoTHubMessaging_Destroy or IoTHubMessaging_Close function from within any callback.
XinZhangMS 0:f7f1f0d76dd6 124 *
XinZhangMS 0:f7f1f0d76dd6 125 * @return IOTHUB_MESSAGING_OK upon success or an error code upon failure.
XinZhangMS 0:f7f1f0d76dd6 126 */
XinZhangMS 0:f7f1f0d76dd6 127 MOCKABLE_FUNCTION(, IOTHUB_MESSAGING_RESULT, IoTHubMessaging_LL_Send, IOTHUB_MESSAGING_HANDLE, messagingHandle, const char*, deviceId, IOTHUB_MESSAGE_HANDLE, message, IOTHUB_SEND_COMPLETE_CALLBACK, sendCompleteCallback, void*, userContextCallback);
XinZhangMS 0:f7f1f0d76dd6 128
XinZhangMS 0:f7f1f0d76dd6 129 /**
XinZhangMS 0:f7f1f0d76dd6 130 * @brief This API specifies a callback to be used when the device receives the message.
XinZhangMS 0:f7f1f0d76dd6 131 *
XinZhangMS 0:f7f1f0d76dd6 132 * @param messagingClientHandle The handle created by a call to the create function.
XinZhangMS 0:f7f1f0d76dd6 133 * @param feedbackMessageReceivedCallback The callback specified by the user to be used for receiveng
XinZhangMS 0:f7f1f0d76dd6 134 * confirmation feedback from the deice about the recevied message.
XinZhangMS 0:f7f1f0d76dd6 135 *
XinZhangMS 0:f7f1f0d76dd6 136 * @param userContextCallback User specified context that will be provided to the
XinZhangMS 0:f7f1f0d76dd6 137 * callback. This can be @c NULL.
XinZhangMS 0:f7f1f0d76dd6 138 *
XinZhangMS 0:f7f1f0d76dd6 139 * @b NOTE: The application behavior is undefined if the user calls
XinZhangMS 0:f7f1f0d76dd6 140 * the ::IoTHubMessaging_Destroy or IoTHubMessaging_Close function from within any callback.
XinZhangMS 0:f7f1f0d76dd6 141 *
XinZhangMS 0:f7f1f0d76dd6 142 * @return IOTHUB_CLIENT_OK upon success or an error code upon failure.
XinZhangMS 0:f7f1f0d76dd6 143 */
XinZhangMS 0:f7f1f0d76dd6 144 MOCKABLE_FUNCTION(, IOTHUB_MESSAGING_RESULT, IoTHubMessaging_LL_SetFeedbackMessageCallback, IOTHUB_MESSAGING_HANDLE, messagingHandle, IOTHUB_FEEDBACK_MESSAGE_RECEIVED_CALLBACK, feedbackMessageReceivedCallback, void*, userContextCallback);
XinZhangMS 0:f7f1f0d76dd6 145
XinZhangMS 0:f7f1f0d76dd6 146 /**
XinZhangMS 0:f7f1f0d76dd6 147 * @brief This function is meant to be called by the user when work
XinZhangMS 0:f7f1f0d76dd6 148 * (sending/receiving) can be done by the IoTHubServiceClient.
XinZhangMS 0:f7f1f0d76dd6 149 *
XinZhangMS 0:f7f1f0d76dd6 150 * @param messagingHandle The handle created by a call to the create function.
XinZhangMS 0:f7f1f0d76dd6 151 *
XinZhangMS 0:f7f1f0d76dd6 152 * All IoTHubServiceClient interactions (in regards to network traffic
XinZhangMS 0:f7f1f0d76dd6 153 * and/or user level callbacks) are the effect of calling this
XinZhangMS 0:f7f1f0d76dd6 154 * function and they take place synchronously inside _DoWork.
XinZhangMS 0:f7f1f0d76dd6 155 */
XinZhangMS 0:f7f1f0d76dd6 156 MOCKABLE_FUNCTION(, void, IoTHubMessaging_LL_DoWork, IOTHUB_MESSAGING_HANDLE, messagingHandle);
XinZhangMS 0:f7f1f0d76dd6 157
XinZhangMS 0:f7f1f0d76dd6 158 #ifdef __cplusplus
XinZhangMS 0:f7f1f0d76dd6 159 }
XinZhangMS 0:f7f1f0d76dd6 160 #endif
XinZhangMS 0:f7f1f0d76dd6 161
XinZhangMS 0:f7f1f0d76dd6 162 #endif // IOTHUB_MESSAGING_LL_H