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 /** @file lock.h
XinZhangMS 0:f7f1f0d76dd6 5 * @brief A minimalistic platform agnostic lock abstraction for thread
XinZhangMS 0:f7f1f0d76dd6 6 * synchronization.
XinZhangMS 0:f7f1f0d76dd6 7 * @details The Lock component is implemented in order to achieve thread
XinZhangMS 0:f7f1f0d76dd6 8 * synchronization, as we may have a requirement to consume locks
XinZhangMS 0:f7f1f0d76dd6 9 * across different platforms. This component exposes some generic
XinZhangMS 0:f7f1f0d76dd6 10 * APIs so that it can be extended for platform specific
XinZhangMS 0:f7f1f0d76dd6 11 * implementations.
XinZhangMS 0:f7f1f0d76dd6 12 */
XinZhangMS 0:f7f1f0d76dd6 13
XinZhangMS 0:f7f1f0d76dd6 14 #ifndef LOCK_H
XinZhangMS 0:f7f1f0d76dd6 15 #define LOCK_H
XinZhangMS 0:f7f1f0d76dd6 16
XinZhangMS 0:f7f1f0d76dd6 17 #include "azure_c_shared_utility/macro_utils.h"
XinZhangMS 0:f7f1f0d76dd6 18 #include "azure_c_shared_utility/umock_c_prod.h"
XinZhangMS 0:f7f1f0d76dd6 19
XinZhangMS 0:f7f1f0d76dd6 20 #ifdef __cplusplus
XinZhangMS 0:f7f1f0d76dd6 21 extern "C" {
XinZhangMS 0:f7f1f0d76dd6 22 #endif
XinZhangMS 0:f7f1f0d76dd6 23
XinZhangMS 0:f7f1f0d76dd6 24 typedef void* LOCK_HANDLE;
XinZhangMS 0:f7f1f0d76dd6 25
XinZhangMS 0:f7f1f0d76dd6 26 #define LOCK_RESULT_VALUES \
XinZhangMS 0:f7f1f0d76dd6 27 LOCK_OK, \
XinZhangMS 0:f7f1f0d76dd6 28 LOCK_ERROR \
XinZhangMS 0:f7f1f0d76dd6 29
XinZhangMS 0:f7f1f0d76dd6 30 /** @brief Enumeration specifying the lock status.
XinZhangMS 0:f7f1f0d76dd6 31 */
XinZhangMS 0:f7f1f0d76dd6 32 DEFINE_ENUM(LOCK_RESULT, LOCK_RESULT_VALUES);
XinZhangMS 0:f7f1f0d76dd6 33
XinZhangMS 0:f7f1f0d76dd6 34 /**
XinZhangMS 0:f7f1f0d76dd6 35 * @brief This API creates and returns a valid lock handle.
XinZhangMS 0:f7f1f0d76dd6 36 *
XinZhangMS 0:f7f1f0d76dd6 37 * @return A valid @c LOCK_HANDLE when successful or @c NULL otherwise.
XinZhangMS 0:f7f1f0d76dd6 38 */
XinZhangMS 0:f7f1f0d76dd6 39 MOCKABLE_FUNCTION(, LOCK_HANDLE, Lock_Init);
XinZhangMS 0:f7f1f0d76dd6 40
XinZhangMS 0:f7f1f0d76dd6 41 /**
XinZhangMS 0:f7f1f0d76dd6 42 * @brief Acquires a lock on the given lock handle. Uses platform
XinZhangMS 0:f7f1f0d76dd6 43 * specific mutex primitives in its implementation.
XinZhangMS 0:f7f1f0d76dd6 44 *
XinZhangMS 0:f7f1f0d76dd6 45 * @param handle A valid handle to the lock.
XinZhangMS 0:f7f1f0d76dd6 46 *
XinZhangMS 0:f7f1f0d76dd6 47 * @return Returns @c LOCK_OK when a lock has been acquired and
XinZhangMS 0:f7f1f0d76dd6 48 * @c LOCK_ERROR when an error occurs.
XinZhangMS 0:f7f1f0d76dd6 49 */
XinZhangMS 0:f7f1f0d76dd6 50 MOCKABLE_FUNCTION(, LOCK_RESULT, Lock, LOCK_HANDLE, handle);
XinZhangMS 0:f7f1f0d76dd6 51
XinZhangMS 0:f7f1f0d76dd6 52 /**
XinZhangMS 0:f7f1f0d76dd6 53 * @brief Releases the lock on the given lock handle. Uses platform
XinZhangMS 0:f7f1f0d76dd6 54 * specific mutex primitives in its implementation.
XinZhangMS 0:f7f1f0d76dd6 55 *
XinZhangMS 0:f7f1f0d76dd6 56 * @param handle A valid handle to the lock.
XinZhangMS 0:f7f1f0d76dd6 57 *
XinZhangMS 0:f7f1f0d76dd6 58 * @return Returns @c LOCK_OK when the lock has been released and
XinZhangMS 0:f7f1f0d76dd6 59 * @c LOCK_ERROR when an error occurs.
XinZhangMS 0:f7f1f0d76dd6 60 */
XinZhangMS 0:f7f1f0d76dd6 61 MOCKABLE_FUNCTION(, LOCK_RESULT, Unlock, LOCK_HANDLE, handle);
XinZhangMS 0:f7f1f0d76dd6 62
XinZhangMS 0:f7f1f0d76dd6 63 /**
XinZhangMS 0:f7f1f0d76dd6 64 * @brief The lock instance is destroyed.
XinZhangMS 0:f7f1f0d76dd6 65 *
XinZhangMS 0:f7f1f0d76dd6 66 * @param handle A valid handle to the lock.
XinZhangMS 0:f7f1f0d76dd6 67 *
XinZhangMS 0:f7f1f0d76dd6 68 * @return Returns @c LOCK_OK when the lock object has been
XinZhangMS 0:f7f1f0d76dd6 69 * destroyed and @c LOCK_ERROR when an error occurs.
XinZhangMS 0:f7f1f0d76dd6 70 */
XinZhangMS 0:f7f1f0d76dd6 71 MOCKABLE_FUNCTION(, LOCK_RESULT, Lock_Deinit, LOCK_HANDLE, handle);
XinZhangMS 0:f7f1f0d76dd6 72
XinZhangMS 0:f7f1f0d76dd6 73 #ifdef __cplusplus
XinZhangMS 0:f7f1f0d76dd6 74 }
XinZhangMS 0:f7f1f0d76dd6 75 #endif
XinZhangMS 0:f7f1f0d76dd6 76
XinZhangMS 0:f7f1f0d76dd6 77 #endif /* LOCK_H */