Alessandro Angelino / target-freescale-ksdk

Fork of target-freescale-ksdk by Morpheus

Committer:
screamer
Date:
Wed Mar 23 21:26:50 2016 +0000
Revision:
0:e4d670b91a9a
Initial revision

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 0:e4d670b91a9a 1 /*
screamer 0:e4d670b91a9a 2 * Copyright (c) 2013 - 2014, Freescale Semiconductor, Inc.
screamer 0:e4d670b91a9a 3 * All rights reserved.
screamer 0:e4d670b91a9a 4 *
screamer 0:e4d670b91a9a 5 * Redistribution and use in source and binary forms, with or without modification,
screamer 0:e4d670b91a9a 6 * are permitted provided that the following conditions are met:
screamer 0:e4d670b91a9a 7 *
screamer 0:e4d670b91a9a 8 * o Redistributions of source code must retain the above copyright notice, this list
screamer 0:e4d670b91a9a 9 * of conditions and the following disclaimer.
screamer 0:e4d670b91a9a 10 *
screamer 0:e4d670b91a9a 11 * o Redistributions in binary form must reproduce the above copyright notice, this
screamer 0:e4d670b91a9a 12 * list of conditions and the following disclaimer in the documentation and/or
screamer 0:e4d670b91a9a 13 * other materials provided with the distribution.
screamer 0:e4d670b91a9a 14 *
screamer 0:e4d670b91a9a 15 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
screamer 0:e4d670b91a9a 16 * contributors may be used to endorse or promote products derived from this
screamer 0:e4d670b91a9a 17 * software without specific prior written permission.
screamer 0:e4d670b91a9a 18 *
screamer 0:e4d670b91a9a 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
screamer 0:e4d670b91a9a 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
screamer 0:e4d670b91a9a 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
screamer 0:e4d670b91a9a 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
screamer 0:e4d670b91a9a 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
screamer 0:e4d670b91a9a 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
screamer 0:e4d670b91a9a 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
screamer 0:e4d670b91a9a 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
screamer 0:e4d670b91a9a 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
screamer 0:e4d670b91a9a 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
screamer 0:e4d670b91a9a 29 */
screamer 0:e4d670b91a9a 30 #if !defined(__FSL_OS_ABSTRACTION_H__)
screamer 0:e4d670b91a9a 31 #define __FSL_OS_ABSTRACTION_H__
screamer 0:e4d670b91a9a 32
screamer 0:e4d670b91a9a 33 #include <stdint.h>
screamer 0:e4d670b91a9a 34 #include <stdbool.h>
screamer 0:e4d670b91a9a 35 #include <stdlib.h>
screamer 0:e4d670b91a9a 36
screamer 0:e4d670b91a9a 37 #if defined __CC_ARM
screamer 0:e4d670b91a9a 38 #define inline __inline
screamer 0:e4d670b91a9a 39 #endif
screamer 0:e4d670b91a9a 40
screamer 0:e4d670b91a9a 41 /*!
screamer 0:e4d670b91a9a 42 * @addtogroup os_abstraction
screamer 0:e4d670b91a9a 43 * @{
screamer 0:e4d670b91a9a 44 */
screamer 0:e4d670b91a9a 45
screamer 0:e4d670b91a9a 46 /*! @brief Status values to be returned by functions. */
screamer 0:e4d670b91a9a 47 typedef enum
screamer 0:e4d670b91a9a 48 {
screamer 0:e4d670b91a9a 49 kSuccess = 0, /*!< Functions work correctly. */
screamer 0:e4d670b91a9a 50 kError, /*!< Functions work failed. */
screamer 0:e4d670b91a9a 51 kTimeout, /*!< Timeout occurs while waiting for an object. */
screamer 0:e4d670b91a9a 52 kIdle /*!< Can not get the object in non-blocking mode.*/
screamer 0:e4d670b91a9a 53 }fsl_rtos_status;
screamer 0:e4d670b91a9a 54
screamer 0:e4d670b91a9a 55 /*! @brief The event flags are set or not.*/
screamer 0:e4d670b91a9a 56 typedef enum
screamer 0:e4d670b91a9a 57 {
screamer 0:e4d670b91a9a 58 kFlagNotSet = 0, /*!< The flags checked are set. */
screamer 0:e4d670b91a9a 59 kFlagSet /*!< The flags checked are not set. */
screamer 0:e4d670b91a9a 60 }event_status;
screamer 0:e4d670b91a9a 61
screamer 0:e4d670b91a9a 62 /*! @brief The event flags are cleared automatically or manually.*/
screamer 0:e4d670b91a9a 63 typedef enum
screamer 0:e4d670b91a9a 64 {
screamer 0:e4d670b91a9a 65 kEventAutoClr = 0, /*!< The flags of the event will be cleared automatically. */
screamer 0:e4d670b91a9a 66 kEventManualClr /*!< The flags of the event will be cleared manually. */
screamer 0:e4d670b91a9a 67 }event_clear_type;
screamer 0:e4d670b91a9a 68
screamer 0:e4d670b91a9a 69 // Temporary "fix", until the proper macros are integrated in the on-line build system
screamer 0:e4d670b91a9a 70 #define FSL_RTOS_MBED
screamer 0:e4d670b91a9a 71
screamer 0:e4d670b91a9a 72 /* Include required header file based on RTOS selection */
screamer 0:e4d670b91a9a 73 #if defined (FSL_RTOS_MQX)
screamer 0:e4d670b91a9a 74 /*! @brief Macro to set message queue copy messages to internal memory or not. */
screamer 0:e4d670b91a9a 75 #define __FSL_RTOS_MSGQ_COPY_MSG__ 1
screamer 0:e4d670b91a9a 76 #include "fsl_os_abstraction_mqx.h"
screamer 0:e4d670b91a9a 77
screamer 0:e4d670b91a9a 78 #elif defined (FSL_RTOS_FREE_RTOS)
screamer 0:e4d670b91a9a 79 #define __FSL_RTOS_MSGQ_COPY_MSG__ 1
screamer 0:e4d670b91a9a 80 #include "fsl_os_abstraction_free_rtos.h"
screamer 0:e4d670b91a9a 81
screamer 0:e4d670b91a9a 82 #elif defined (FSL_RTOS_UCOSII)
screamer 0:e4d670b91a9a 83 #define __FSL_RTOS_MSGQ_COPY_MSG__ 1
screamer 0:e4d670b91a9a 84 #include "fsl_os_abstraction_ucosii.h"
screamer 0:e4d670b91a9a 85
screamer 0:e4d670b91a9a 86 #elif defined (FSL_RTOS_UCOSIII)
screamer 0:e4d670b91a9a 87 #define __FSL_RTOS_MSGQ_COPY_MSG__ 1
screamer 0:e4d670b91a9a 88 #include "fsl_os_abstraction_ucosiii.h"
screamer 0:e4d670b91a9a 89
screamer 0:e4d670b91a9a 90 #elif defined (FSL_RTOS_CMSIS)
screamer 0:e4d670b91a9a 91 #define __FSL_RTOS_MSGQ_COPY_MSG__ 0
screamer 0:e4d670b91a9a 92 #include "fsl_os_abstraction_cmsis.h"
screamer 0:e4d670b91a9a 93
screamer 0:e4d670b91a9a 94 #elif defined (FSL_RTOS_MBED)
screamer 0:e4d670b91a9a 95 #define __FSL_RTOS_MSGQ_COPY_MSG__ 1
screamer 0:e4d670b91a9a 96 #include "fsl_os_abstraction_mbed.h"
screamer 0:e4d670b91a9a 97
screamer 0:e4d670b91a9a 98 #else
screamer 0:e4d670b91a9a 99 #define __FSL_RTOS_MSGQ_COPY_MSG__ 1
screamer 0:e4d670b91a9a 100 #include "fsl_os_abstraction_bm.h"
screamer 0:e4d670b91a9a 101 #endif
screamer 0:e4d670b91a9a 102
screamer 0:e4d670b91a9a 103 /*******************************************************************************
screamer 0:e4d670b91a9a 104 * API
screamer 0:e4d670b91a9a 105 ******************************************************************************/
screamer 0:e4d670b91a9a 106
screamer 0:e4d670b91a9a 107 #if defined(__cplusplus)
screamer 0:e4d670b91a9a 108 extern "C" {
screamer 0:e4d670b91a9a 109 #endif
screamer 0:e4d670b91a9a 110
screamer 0:e4d670b91a9a 111 /*!
screamer 0:e4d670b91a9a 112 * @name Synchronization
screamer 0:e4d670b91a9a 113 * @{
screamer 0:e4d670b91a9a 114 */
screamer 0:e4d670b91a9a 115
screamer 0:e4d670b91a9a 116 /*!
screamer 0:e4d670b91a9a 117 * @brief Initialize a synchronization object to a given state.
screamer 0:e4d670b91a9a 118 *
screamer 0:e4d670b91a9a 119 * @param obj The sync object to initialize.
screamer 0:e4d670b91a9a 120 * @param initValue The initial value the object will be set to.
screamer 0:e4d670b91a9a 121 *
screamer 0:e4d670b91a9a 122 * @retval kSuccess The object was successfully created.
screamer 0:e4d670b91a9a 123 * @retval kError Invalid parameter or no more objects can be created.
screamer 0:e4d670b91a9a 124 */
screamer 0:e4d670b91a9a 125 fsl_rtos_status sync_create(sync_object_t *obj, uint8_t initValue);
screamer 0:e4d670b91a9a 126
screamer 0:e4d670b91a9a 127 /*!
screamer 0:e4d670b91a9a 128 * @brief Wait for the synchronization object.
screamer 0:e4d670b91a9a 129 *
screamer 0:e4d670b91a9a 130 * This function checks the sync object's counting value, if it is
screamer 0:e4d670b91a9a 131 * positive, decreases it and returns kSuccess, otherwise, timeout will be
screamer 0:e4d670b91a9a 132 * used for wait.
screamer 0:e4d670b91a9a 133 *
screamer 0:e4d670b91a9a 134 * @param obj Pointer to the synchronization object.
screamer 0:e4d670b91a9a 135 * @param timeout The maximum number of milliseconds to wait for the object to be signalled.
screamer 0:e4d670b91a9a 136 * Pass the #kSyncWaitForever constant to wait indefinitely for someone to signal the object.
screamer 0:e4d670b91a9a 137 * A value of 0 should not be passed to this function. Instead, use sync_poll for
screamer 0:e4d670b91a9a 138 * a non blocking check.
screamer 0:e4d670b91a9a 139 *
screamer 0:e4d670b91a9a 140 * @retval kSuccess The object was signalled.
screamer 0:e4d670b91a9a 141 * @retval kTimeout A timeout occurred.
screamer 0:e4d670b91a9a 142 * @retval kError An incorrect parameter was passed.
screamer 0:e4d670b91a9a 143 * @retval kIdle The object has not been signalled.
screamer 0:e4d670b91a9a 144 *
screamer 0:e4d670b91a9a 145 * @note There could be only one process waiting for the object at the same time.
screamer 0:e4d670b91a9a 146 */
screamer 0:e4d670b91a9a 147 fsl_rtos_status sync_wait(sync_object_t *obj, uint32_t timeout);
screamer 0:e4d670b91a9a 148
screamer 0:e4d670b91a9a 149 /*!
screamer 0:e4d670b91a9a 150 * @brief Checks a synchronization object's status.
screamer 0:e4d670b91a9a 151 *
screamer 0:e4d670b91a9a 152 * This function is used to poll a sync object's status.
screamer 0:e4d670b91a9a 153 * If the sync object's counting value is positive, decrease it and return
screamer 0:e4d670b91a9a 154 * kSuccess. If the object's counting value is 0, the function will
screamer 0:e4d670b91a9a 155 * return kIdle immediately
screamer 0:e4d670b91a9a 156 *
screamer 0:e4d670b91a9a 157 * @param obj The synchronization object.
screamer 0:e4d670b91a9a 158 *
screamer 0:e4d670b91a9a 159 * @retval kSuccess The object was signalled.
screamer 0:e4d670b91a9a 160 * @retval kIdle The object was not signalled.
screamer 0:e4d670b91a9a 161 * @retval kError An incorrect parameter was passed.
screamer 0:e4d670b91a9a 162 */
screamer 0:e4d670b91a9a 163 fsl_rtos_status sync_poll(sync_object_t *obj);
screamer 0:e4d670b91a9a 164
screamer 0:e4d670b91a9a 165 /*!
screamer 0:e4d670b91a9a 166 * @brief Signal for someone waiting on the synchronization object to wake up.
screamer 0:e4d670b91a9a 167 *
screamer 0:e4d670b91a9a 168 * This function should not be called from an ISR.
screamer 0:e4d670b91a9a 169 *
screamer 0:e4d670b91a9a 170 * @param obj The synchronization object to signal.
screamer 0:e4d670b91a9a 171 *
screamer 0:e4d670b91a9a 172 * @retval kSuccess The object was successfully signaled.
screamer 0:e4d670b91a9a 173 * @retval kError The object can not be signaled or invalid parameter.
screamer 0:e4d670b91a9a 174 */
screamer 0:e4d670b91a9a 175 fsl_rtos_status sync_signal(sync_object_t *obj);
screamer 0:e4d670b91a9a 176
screamer 0:e4d670b91a9a 177 /*!
screamer 0:e4d670b91a9a 178 * @brief Signal for someone waiting on the synchronization object to wake up.
screamer 0:e4d670b91a9a 179 *
screamer 0:e4d670b91a9a 180 * This function should only be called from an ISR.
screamer 0:e4d670b91a9a 181 *
screamer 0:e4d670b91a9a 182 * @param obj The synchronization object to signal.
screamer 0:e4d670b91a9a 183 *
screamer 0:e4d670b91a9a 184 * @retval kSuccess The object was successfully signaled.
screamer 0:e4d670b91a9a 185 * @retval kError The object can not be signaled or invalid parameter.
screamer 0:e4d670b91a9a 186 */
screamer 0:e4d670b91a9a 187 fsl_rtos_status sync_signal_from_isr(sync_object_t *obj);
screamer 0:e4d670b91a9a 188
screamer 0:e4d670b91a9a 189 /*!
screamer 0:e4d670b91a9a 190 * @brief Destroy a previously created synchronization object.
screamer 0:e4d670b91a9a 191 *
screamer 0:e4d670b91a9a 192 * @param obj The synchronization object to destroy.
screamer 0:e4d670b91a9a 193 *
screamer 0:e4d670b91a9a 194 * @retval kSuccess The object was successfully destroyed.
screamer 0:e4d670b91a9a 195 * @retval kError Object destruction failed.
screamer 0:e4d670b91a9a 196 */
screamer 0:e4d670b91a9a 197 fsl_rtos_status sync_destroy(sync_object_t *obj);
screamer 0:e4d670b91a9a 198
screamer 0:e4d670b91a9a 199 /* @} */
screamer 0:e4d670b91a9a 200
screamer 0:e4d670b91a9a 201 /*!
screamer 0:e4d670b91a9a 202 * @name Resource locking
screamer 0:e4d670b91a9a 203 * @{
screamer 0:e4d670b91a9a 204 */
screamer 0:e4d670b91a9a 205
screamer 0:e4d670b91a9a 206 /*!
screamer 0:e4d670b91a9a 207 * @brief Initialize a locking object.
screamer 0:e4d670b91a9a 208 *
screamer 0:e4d670b91a9a 209 * @param obj The lock object to initialize.
screamer 0:e4d670b91a9a 210 *
screamer 0:e4d670b91a9a 211 * @retval kSuccess The lock is created successfully.
screamer 0:e4d670b91a9a 212 * @retval kError Tke lock creation failed.
screamer 0:e4d670b91a9a 213 */
screamer 0:e4d670b91a9a 214 fsl_rtos_status lock_create(lock_object_t *obj);
screamer 0:e4d670b91a9a 215
screamer 0:e4d670b91a9a 216 /*!
screamer 0:e4d670b91a9a 217 * @brief Wait for the object to be unlocked and lock it.
screamer 0:e4d670b91a9a 218 *
screamer 0:e4d670b91a9a 219 * This function will wait for some time or wait forever if could not get the lock.
screamer 0:e4d670b91a9a 220 *
screamer 0:e4d670b91a9a 221 * @param obj The locking object.
screamer 0:e4d670b91a9a 222 * @param timeout The maximum number of milliseconds to wait for the mutex.
screamer 0:e4d670b91a9a 223 * Pass the #kSyncWaitForever constant to wait indefinitely for someone to unlock the object.
screamer 0:e4d670b91a9a 224 * A value of 0 should not be passed to this function. Instead, use lock_poll for a non
screamer 0:e4d670b91a9a 225 * blocking check.
screamer 0:e4d670b91a9a 226 *
screamer 0:e4d670b91a9a 227 * @retval kSuccess The lock was obtained.
screamer 0:e4d670b91a9a 228 * @retval kTimeout A timeout occurred.
screamer 0:e4d670b91a9a 229 * @retval kError An incorrect parameter was passed.
screamer 0:e4d670b91a9a 230 */
screamer 0:e4d670b91a9a 231 fsl_rtos_status lock_wait(lock_object_t *obj, uint32_t timeout);
screamer 0:e4d670b91a9a 232
screamer 0:e4d670b91a9a 233 /*!
screamer 0:e4d670b91a9a 234 * @brief Checks if a locking object can be locked and locks it if possible.
screamer 0:e4d670b91a9a 235 *
screamer 0:e4d670b91a9a 236 * This function returns instantly if could not get the lock.
screamer 0:e4d670b91a9a 237 *
screamer 0:e4d670b91a9a 238 * @param obj The locking object.
screamer 0:e4d670b91a9a 239 *
screamer 0:e4d670b91a9a 240 * @retval kSuccess The lock was obtained.
screamer 0:e4d670b91a9a 241 * @retval kIdle The lock could not be obtained.
screamer 0:e4d670b91a9a 242 * @retval kError An incorrect parameter was passed.
screamer 0:e4d670b91a9a 243 *
screamer 0:e4d670b91a9a 244 * @note There could be only one process waiting for the object at the same time.
screamer 0:e4d670b91a9a 245 * For RTOSes, wait for a lock recursively by one task is not supported.
screamer 0:e4d670b91a9a 246 *
screamer 0:e4d670b91a9a 247 */
screamer 0:e4d670b91a9a 248 fsl_rtos_status lock_poll(lock_object_t *obj);
screamer 0:e4d670b91a9a 249
screamer 0:e4d670b91a9a 250 /*!
screamer 0:e4d670b91a9a 251 * @brief Unlock a previously locked object.
screamer 0:e4d670b91a9a 252 *
screamer 0:e4d670b91a9a 253 * @param obj The locking object to unlock.
screamer 0:e4d670b91a9a 254 *
screamer 0:e4d670b91a9a 255 * @retval kSuccess The object was successfully unlocked.
screamer 0:e4d670b91a9a 256 * @retval kError The object can not be unlocked or invalid parameter.
screamer 0:e4d670b91a9a 257 */
screamer 0:e4d670b91a9a 258 fsl_rtos_status lock_release(lock_object_t *obj);
screamer 0:e4d670b91a9a 259
screamer 0:e4d670b91a9a 260 /*!
screamer 0:e4d670b91a9a 261 * @brief Destroy a previously created locking object.
screamer 0:e4d670b91a9a 262 *
screamer 0:e4d670b91a9a 263 * @param obj The locking object to destroy.
screamer 0:e4d670b91a9a 264 *
screamer 0:e4d670b91a9a 265 * @retval kSuccess The object was successfully destroyed.
screamer 0:e4d670b91a9a 266 * @retval kError Object destruction failed.
screamer 0:e4d670b91a9a 267 */
screamer 0:e4d670b91a9a 268 fsl_rtos_status lock_destroy(lock_object_t *obj);
screamer 0:e4d670b91a9a 269
screamer 0:e4d670b91a9a 270 /* @} */
screamer 0:e4d670b91a9a 271
screamer 0:e4d670b91a9a 272 /*!
screamer 0:e4d670b91a9a 273 * @name Event signaling
screamer 0:e4d670b91a9a 274 * @{
screamer 0:e4d670b91a9a 275 */
screamer 0:e4d670b91a9a 276
screamer 0:e4d670b91a9a 277 /*!
screamer 0:e4d670b91a9a 278 * @brief Initializes the event object.
screamer 0:e4d670b91a9a 279 *
screamer 0:e4d670b91a9a 280 * When the object is created, the flags is 0.
screamer 0:e4d670b91a9a 281 *
screamer 0:e4d670b91a9a 282 * @param obj Pointer to the event object to initialize.
screamer 0:e4d670b91a9a 283 * @param clearType The event is auto-clear or manual-clear.
screamer 0:e4d670b91a9a 284 *
screamer 0:e4d670b91a9a 285 * @retval kSuccess The object was successfully created.
screamer 0:e4d670b91a9a 286 * @retval kError Incorrect parameter or no more objects can be created.
screamer 0:e4d670b91a9a 287 */
screamer 0:e4d670b91a9a 288 fsl_rtos_status event_create(event_object_t *obj, event_clear_type clearType);
screamer 0:e4d670b91a9a 289
screamer 0:e4d670b91a9a 290 /*!
screamer 0:e4d670b91a9a 291 * @brief Wait for any event flags to be set.
screamer 0:e4d670b91a9a 292 *
screamer 0:e4d670b91a9a 293 * This function will wait for some time or wait forever if no flags are set. Any flags set
screamer 0:e4d670b91a9a 294 * will wake up the function.
screamer 0:e4d670b91a9a 295 *
screamer 0:e4d670b91a9a 296 * @param obj The event object.
screamer 0:e4d670b91a9a 297 * @param timeout The maximum number of milliseconds to wait for the event.
screamer 0:e4d670b91a9a 298 * Pass the #kSyncWaitForever constant to wait indefinitely. A value of 0 should not be passed
screamer 0:e4d670b91a9a 299 * to this function.
screamer 0:e4d670b91a9a 300 * @param setFlags Pointer to receive the flags that were set.
screamer 0:e4d670b91a9a 301 *
screamer 0:e4d670b91a9a 302 * @retval kSuccess An event was set.
screamer 0:e4d670b91a9a 303 * @retval kTimeout A timeout occurred.
screamer 0:e4d670b91a9a 304 * @retval kError An incorrect parameter was passed.
screamer 0:e4d670b91a9a 305 */
screamer 0:e4d670b91a9a 306 fsl_rtos_status event_wait(event_object_t *obj, uint32_t timeout, event_group_t *setFlags);
screamer 0:e4d670b91a9a 307
screamer 0:e4d670b91a9a 308 /*!
screamer 0:e4d670b91a9a 309 * @brief Set one or more event flags of an event object.
screamer 0:e4d670b91a9a 310 *
screamer 0:e4d670b91a9a 311 * This function should not be called from an ISR.
screamer 0:e4d670b91a9a 312 *
screamer 0:e4d670b91a9a 313 * @param obj The event object.
screamer 0:e4d670b91a9a 314 * @param flags Event flags to be set.
screamer 0:e4d670b91a9a 315 *
screamer 0:e4d670b91a9a 316 * @retval kSuccess The flags were successfully set.
screamer 0:e4d670b91a9a 317 * @retval kError An incorrect parameter was passed.
screamer 0:e4d670b91a9a 318 *
screamer 0:e4d670b91a9a 319 * @note There could be only one process waiting for the event.
screamer 0:e4d670b91a9a 320 *
screamer 0:e4d670b91a9a 321 */
screamer 0:e4d670b91a9a 322 fsl_rtos_status event_set(event_object_t *obj, event_group_t flags);
screamer 0:e4d670b91a9a 323
screamer 0:e4d670b91a9a 324 /*!
screamer 0:e4d670b91a9a 325 * @brief Set one or more event flags of an event object.
screamer 0:e4d670b91a9a 326 *
screamer 0:e4d670b91a9a 327 * This function should only be called from an ISR.
screamer 0:e4d670b91a9a 328 *
screamer 0:e4d670b91a9a 329 * @param obj The event object.
screamer 0:e4d670b91a9a 330 * @param flags Event flags to be set.
screamer 0:e4d670b91a9a 331 *
screamer 0:e4d670b91a9a 332 * @retval kSuccess The flags were successfully set.
screamer 0:e4d670b91a9a 333 * @retval kError An incorrect parameter was passed.
screamer 0:e4d670b91a9a 334 */
screamer 0:e4d670b91a9a 335 fsl_rtos_status event_set_from_isr(event_object_t *obj, event_group_t flags);
screamer 0:e4d670b91a9a 336
screamer 0:e4d670b91a9a 337 /*!
screamer 0:e4d670b91a9a 338 * @brief Clear one or more events of an event object.
screamer 0:e4d670b91a9a 339 *
screamer 0:e4d670b91a9a 340 * This function should not be called from an ISR.
screamer 0:e4d670b91a9a 341 *
screamer 0:e4d670b91a9a 342 * @param obj The event object.
screamer 0:e4d670b91a9a 343 * @param flags Event flags to be clear.
screamer 0:e4d670b91a9a 344 *
screamer 0:e4d670b91a9a 345 * @retval kSuccess The flags were successfully cleared.
screamer 0:e4d670b91a9a 346 * @retval kError An incorrect parameter was passed.
screamer 0:e4d670b91a9a 347 */
screamer 0:e4d670b91a9a 348 fsl_rtos_status event_clear(event_object_t *obj, event_group_t flags);
screamer 0:e4d670b91a9a 349
screamer 0:e4d670b91a9a 350 /*!
screamer 0:e4d670b91a9a 351 * @brief Check the flags are set or not.
screamer 0:e4d670b91a9a 352 *
screamer 0:e4d670b91a9a 353 * @param obj The event object.
screamer 0:e4d670b91a9a 354 * @param flag The flag to check.
screamer 0:e4d670b91a9a 355 *
screamer 0:e4d670b91a9a 356 * @retval kFlagsSet The flags checked are set.
screamer 0:e4d670b91a9a 357 * @retval kFlagsNotSet The flags checked are not set or got an error.
screamer 0:e4d670b91a9a 358 */
screamer 0:e4d670b91a9a 359 event_status event_check_flags(event_object_t *obj, event_group_t flag);
screamer 0:e4d670b91a9a 360
screamer 0:e4d670b91a9a 361 /*!
screamer 0:e4d670b91a9a 362 * @brief Destroy a previously created event object.
screamer 0:e4d670b91a9a 363 *
screamer 0:e4d670b91a9a 364 * @param obj The event object to destroy.
screamer 0:e4d670b91a9a 365 *
screamer 0:e4d670b91a9a 366 * @retval kSuccess The object was successfully destroyed.
screamer 0:e4d670b91a9a 367 * @retval kError Event destruction failed.
screamer 0:e4d670b91a9a 368 */
screamer 0:e4d670b91a9a 369 fsl_rtos_status event_destroy(event_object_t *obj);
screamer 0:e4d670b91a9a 370 /* @} */
screamer 0:e4d670b91a9a 371
screamer 0:e4d670b91a9a 372 /*!
screamer 0:e4d670b91a9a 373 * @name Thread management
screamer 0:e4d670b91a9a 374 * @{
screamer 0:e4d670b91a9a 375 */
screamer 0:e4d670b91a9a 376
screamer 0:e4d670b91a9a 377 /*!
screamer 0:e4d670b91a9a 378 * @brief Create a task.
screamer 0:e4d670b91a9a 379 *
screamer 0:e4d670b91a9a 380 * This function is wrapped by the macro task_create. Generally, this function is for
screamer 0:e4d670b91a9a 381 * internal use only, applications must use FSL_RTOS_TASK_DEFINE to define resources for
screamer 0:e4d670b91a9a 382 * task statically then use task_create to create task. If applications have prepare
screamer 0:e4d670b91a9a 383 * the resouces for task dynamically, they can use this function to create the task.
screamer 0:e4d670b91a9a 384 *
screamer 0:e4d670b91a9a 385 * @param task The task function.
screamer 0:e4d670b91a9a 386 * @param name The name of this task.
screamer 0:e4d670b91a9a 387 * @param stackSize The stack size in byte.
screamer 0:e4d670b91a9a 388 * @param stackMem Pointer to the stack. For bare metal, MQX and FreeRTOS, this could be NULL.
screamer 0:e4d670b91a9a 389 * @param priority Initial priority of the task.
screamer 0:e4d670b91a9a 390 * @param param Pointer to be passed to the task when it is created.
screamer 0:e4d670b91a9a 391 * @param usesFloat This task will use float register or not.
screamer 0:e4d670b91a9a 392 * @param handler Pointer to the task handler.
screamer 0:e4d670b91a9a 393 *
screamer 0:e4d670b91a9a 394 * @retval kSuccess The task was successfully created.
screamer 0:e4d670b91a9a 395 * @retval kError The task could not be created.
screamer 0:e4d670b91a9a 396 *
screamer 0:e4d670b91a9a 397 * @note Different tasks can not use the same task function.
screamer 0:e4d670b91a9a 398 */
screamer 0:e4d670b91a9a 399 fsl_rtos_status __task_create(task_t task, uint8_t *name, uint16_t stackSize,
screamer 0:e4d670b91a9a 400 task_stack_t *stackMem, uint16_t priority,
screamer 0:e4d670b91a9a 401 void *param, bool usesFloat, task_handler_t *handler);
screamer 0:e4d670b91a9a 402
screamer 0:e4d670b91a9a 403 /*!
screamer 0:e4d670b91a9a 404 * @brief Destroy a previously created task.
screamer 0:e4d670b91a9a 405 * @note Depending on the RTOS, task resources may or may not be automatically freed,
screamer 0:e4d670b91a9a 406 * and this function may not return if the current task is destroyed.
screamer 0:e4d670b91a9a 407 *
screamer 0:e4d670b91a9a 408 * @param handler The handler of the task to destroy. Returned by the task_create function.
screamer 0:e4d670b91a9a 409 *
screamer 0:e4d670b91a9a 410 * @retval kSuccess The task was successfully destroyed.
screamer 0:e4d670b91a9a 411 * @retval kError Task destruction failed or invalid parameter.
screamer 0:e4d670b91a9a 412 */
screamer 0:e4d670b91a9a 413 fsl_rtos_status task_destroy(task_handler_t handler);
screamer 0:e4d670b91a9a 414 /* @} */
screamer 0:e4d670b91a9a 415
screamer 0:e4d670b91a9a 416 /*!
screamer 0:e4d670b91a9a 417 * @name Message queues
screamer 0:e4d670b91a9a 418 * @{
screamer 0:e4d670b91a9a 419 */
screamer 0:e4d670b91a9a 420
screamer 0:e4d670b91a9a 421 /*!
screamer 0:e4d670b91a9a 422 * @brief Initialize the message queue.
screamer 0:e4d670b91a9a 423 *
screamer 0:e4d670b91a9a 424 * This function will initialize the message queue that declared previously.
screamer 0:e4d670b91a9a 425 * Here is an example demonstrating how to use:
screamer 0:e4d670b91a9a 426 @code
screamer 0:e4d670b91a9a 427 msg_queue_handler_t handler;
screamer 0:e4d670b91a9a 428 MSG_QUEUE_DECLARE(my_message, msg_num, msg_size);
screamer 0:e4d670b91a9a 429 handler = msg_queue_create(&my_message, msg_num, msg_size);
screamer 0:e4d670b91a9a 430 @endcode
screamer 0:e4d670b91a9a 431 *
screamer 0:e4d670b91a9a 432 * @param queue The queue declared through the MSG_QUEUE_DECLARE macro.
screamer 0:e4d670b91a9a 433 * @param number The number of elements in the queue.
screamer 0:e4d670b91a9a 434 * @param size Size of every elements in words.
screamer 0:e4d670b91a9a 435 *
screamer 0:e4d670b91a9a 436 * @retval Handler to access the queue for put and get operations. If message queue
screamer 0:e4d670b91a9a 437 * created failed, return 0.
screamer 0:e4d670b91a9a 438 */
screamer 0:e4d670b91a9a 439 msg_queue_handler_t msg_queue_create(msg_queue_t *queue, uint16_t number, uint16_t size);
screamer 0:e4d670b91a9a 440
screamer 0:e4d670b91a9a 441 /*!
screamer 0:e4d670b91a9a 442 * @brief Introduce an element at the tail of the queue.
screamer 0:e4d670b91a9a 443 *
screamer 0:e4d670b91a9a 444 * @param handler Queue handler returned by the msg_queue_create function.
screamer 0:e4d670b91a9a 445 * @param item Pointer to the element to be introduced in the queue.
screamer 0:e4d670b91a9a 446 *
screamer 0:e4d670b91a9a 447 * @retval kSuccess Element successfully introduced in the queue.
screamer 0:e4d670b91a9a 448 * @retval kError The queue was full or an invalid parameter was passed.
screamer 0:e4d670b91a9a 449 */
screamer 0:e4d670b91a9a 450 fsl_rtos_status msg_queue_put(msg_queue_handler_t handler, msg_queue_item_t item);
screamer 0:e4d670b91a9a 451
screamer 0:e4d670b91a9a 452 /*!
screamer 0:e4d670b91a9a 453 * @brief Read and remove an element at the head of the queue.
screamer 0:e4d670b91a9a 454 *
screamer 0:e4d670b91a9a 455 * @param handler Queue handler returned by the msg_queue_create function.
screamer 0:e4d670b91a9a 456 * @param item Pointer to store a pointer to the element of the queue.
screamer 0:e4d670b91a9a 457 * @param timeout In case the queue is empty, the number of milliseconds to
screamer 0:e4d670b91a9a 458 * wait for an element to be introduced into the queue. Use 0 to return
screamer 0:e4d670b91a9a 459 * immediately or #kSyncWaitForever to wait indefinitely.
screamer 0:e4d670b91a9a 460 *
screamer 0:e4d670b91a9a 461 * @retval kSuccess Element successfully obtained from the queue.
screamer 0:e4d670b91a9a 462 * @retval kTimeout If a timeout was specified, the queue remained empty after timeout.
screamer 0:e4d670b91a9a 463 * @retval kError The queue was empty or the handler was invalid.
screamer 0:e4d670b91a9a 464 * @retval kIdle The queue was empty and the timeout has not expired.
screamer 0:e4d670b91a9a 465 *
screamer 0:e4d670b91a9a 466 * @note There should be only one process waiting on the queue.
screamer 0:e4d670b91a9a 467 */
screamer 0:e4d670b91a9a 468 fsl_rtos_status msg_queue_get(msg_queue_handler_t handler,
screamer 0:e4d670b91a9a 469 msg_queue_item_t *item,
screamer 0:e4d670b91a9a 470 uint32_t timeout);
screamer 0:e4d670b91a9a 471
screamer 0:e4d670b91a9a 472 /*!
screamer 0:e4d670b91a9a 473 * @brief Discards all elements in the queue and leaves the queue empty.
screamer 0:e4d670b91a9a 474 *
screamer 0:e4d670b91a9a 475 * @param handler Queue handler returned by the msg_queue_create function.
screamer 0:e4d670b91a9a 476 *
screamer 0:e4d670b91a9a 477 * @retval kSuccess Queue successfully emptied.
screamer 0:e4d670b91a9a 478 * @retval kError Emptying queue failed.
screamer 0:e4d670b91a9a 479 */
screamer 0:e4d670b91a9a 480 fsl_rtos_status msg_queue_flush(msg_queue_handler_t handler);
screamer 0:e4d670b91a9a 481
screamer 0:e4d670b91a9a 482 /*!
screamer 0:e4d670b91a9a 483 * @brief Destroy a previously created queue.
screamer 0:e4d670b91a9a 484 *
screamer 0:e4d670b91a9a 485 * @param handler Queue handler returned by the msg_queue_create function.
screamer 0:e4d670b91a9a 486 *
screamer 0:e4d670b91a9a 487 * @retval kSuccess The queue was successfully destroyed.
screamer 0:e4d670b91a9a 488 * @retval kError Message queue destruction failed.
screamer 0:e4d670b91a9a 489 */
screamer 0:e4d670b91a9a 490 fsl_rtos_status msg_queue_destroy(msg_queue_handler_t handler);
screamer 0:e4d670b91a9a 491
screamer 0:e4d670b91a9a 492 /* @} */
screamer 0:e4d670b91a9a 493
screamer 0:e4d670b91a9a 494 #ifndef FSL_RTOS_MBED
screamer 0:e4d670b91a9a 495 /*!
screamer 0:e4d670b91a9a 496 * @name Memory Management
screamer 0:e4d670b91a9a 497 * @{
screamer 0:e4d670b91a9a 498 */
screamer 0:e4d670b91a9a 499
screamer 0:e4d670b91a9a 500 /*!
screamer 0:e4d670b91a9a 501 * @brief Reserves the requested amount of memory in bytes.
screamer 0:e4d670b91a9a 502 *
screamer 0:e4d670b91a9a 503 * @param size Amount of bytes to reserve.
screamer 0:e4d670b91a9a 504 *
screamer 0:e4d670b91a9a 505 * @retval Pointer to the reserved memory. NULL if memory could not be allocated.
screamer 0:e4d670b91a9a 506 */
screamer 0:e4d670b91a9a 507 void * mem_allocate(size_t size);
screamer 0:e4d670b91a9a 508
screamer 0:e4d670b91a9a 509 /*!
screamer 0:e4d670b91a9a 510 * @brief Reserves the requested amount of memory in bytes and initializes it to 0.
screamer 0:e4d670b91a9a 511 *
screamer 0:e4d670b91a9a 512 * @param size Amount of bytes to reserve.
screamer 0:e4d670b91a9a 513 *
screamer 0:e4d670b91a9a 514 * @retval Pointer to the reserved memory. NULL if memory could not be allocated.
screamer 0:e4d670b91a9a 515 */
screamer 0:e4d670b91a9a 516 void * mem_allocate_zero(size_t size);
screamer 0:e4d670b91a9a 517
screamer 0:e4d670b91a9a 518 /*!
screamer 0:e4d670b91a9a 519 * @brief Releases the memory previously reserved.
screamer 0:e4d670b91a9a 520 *
screamer 0:e4d670b91a9a 521 * @param ptr Pointer to the start of the memory block previously reserved.
screamer 0:e4d670b91a9a 522 *
screamer 0:e4d670b91a9a 523 * @retval kSuccess Memory correctly released.
screamer 0:e4d670b91a9a 524 */
screamer 0:e4d670b91a9a 525 fsl_rtos_status mem_free(void *ptr);
screamer 0:e4d670b91a9a 526 #endif
screamer 0:e4d670b91a9a 527
screamer 0:e4d670b91a9a 528 /* @} */
screamer 0:e4d670b91a9a 529
screamer 0:e4d670b91a9a 530 /*!
screamer 0:e4d670b91a9a 531 * @name Time management
screamer 0:e4d670b91a9a 532 * @{
screamer 0:e4d670b91a9a 533 */
screamer 0:e4d670b91a9a 534
screamer 0:e4d670b91a9a 535 /*!
screamer 0:e4d670b91a9a 536 * @brief Delays execution for a number of milliseconds.
screamer 0:e4d670b91a9a 537 *
screamer 0:e4d670b91a9a 538 * @param delay The time in milliseconds to wait.
screamer 0:e4d670b91a9a 539 */
screamer 0:e4d670b91a9a 540 void time_delay(uint32_t delay);
screamer 0:e4d670b91a9a 541
screamer 0:e4d670b91a9a 542 /* @} */
screamer 0:e4d670b91a9a 543
screamer 0:e4d670b91a9a 544 /*!
screamer 0:e4d670b91a9a 545 * @name Interrupt management
screamer 0:e4d670b91a9a 546 * @{
screamer 0:e4d670b91a9a 547 */
screamer 0:e4d670b91a9a 548
screamer 0:e4d670b91a9a 549 /*!
screamer 0:e4d670b91a9a 550 * @brief Install interrupt handler.
screamer 0:e4d670b91a9a 551 *
screamer 0:e4d670b91a9a 552 * @param irqNumber IRQ number of the interrupt.
screamer 0:e4d670b91a9a 553 * @param handler The interrupt handler to install.
screamer 0:e4d670b91a9a 554 *
screamer 0:e4d670b91a9a 555 * @retval kSuccess Handler is installed successfully.
screamer 0:e4d670b91a9a 556 * @retval kSuccess Handler could not be installed.
screamer 0:e4d670b91a9a 557 */
screamer 0:e4d670b91a9a 558 fsl_rtos_status interrupt_handler_register(int32_t irqNumber, void (*handler)(void));
screamer 0:e4d670b91a9a 559
screamer 0:e4d670b91a9a 560 /* @} */
screamer 0:e4d670b91a9a 561
screamer 0:e4d670b91a9a 562 #if defined(__cplusplus)
screamer 0:e4d670b91a9a 563 }
screamer 0:e4d670b91a9a 564 #endif
screamer 0:e4d670b91a9a 565
screamer 0:e4d670b91a9a 566 /*! @}*/
screamer 0:e4d670b91a9a 567
screamer 0:e4d670b91a9a 568 #endif /* __FSL_OS_ABSTRACTION_H__ */
screamer 0:e4d670b91a9a 569 /*******************************************************************************
screamer 0:e4d670b91a9a 570 * EOF
screamer 0:e4d670b91a9a 571 ******************************************************************************/
screamer 0:e4d670b91a9a 572