The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 172:65be27845400 1 /*!
AnnaBridge 172:65be27845400 2 * Copyright (c) 2015, Freescale Semiconductor, Inc.
AnnaBridge 172:65be27845400 3 * Copyright 2016-2017 NXP
AnnaBridge 172:65be27845400 4 *
AnnaBridge 172:65be27845400 5 * \file
AnnaBridge 172:65be27845400 6 *
AnnaBridge 172:65be27845400 7 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 172:65be27845400 8 * are permitted provided that the following conditions are met:
AnnaBridge 172:65be27845400 9 *
AnnaBridge 172:65be27845400 10 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 172:65be27845400 11 * of conditions and the following disclaimer.
AnnaBridge 172:65be27845400 12 *
AnnaBridge 172:65be27845400 13 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 172:65be27845400 14 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 172:65be27845400 15 * other materials provided with the distribution.
AnnaBridge 172:65be27845400 16 *
AnnaBridge 172:65be27845400 17 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
AnnaBridge 172:65be27845400 18 * contributors may be used to endorse or promote products derived from this
AnnaBridge 172:65be27845400 19 * software without specific prior written permission.
AnnaBridge 172:65be27845400 20 *
AnnaBridge 172:65be27845400 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 172:65be27845400 22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 172:65be27845400 23 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 172:65be27845400 24 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 172:65be27845400 25 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 172:65be27845400 26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 172:65be27845400 27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 172:65be27845400 28 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 172:65be27845400 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 172:65be27845400 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 172:65be27845400 31 */
AnnaBridge 172:65be27845400 32
AnnaBridge 172:65be27845400 33
AnnaBridge 172:65be27845400 34 #ifndef _FSL_OS_ABSTRACTION_H_
AnnaBridge 172:65be27845400 35 #define _FSL_OS_ABSTRACTION_H_
AnnaBridge 172:65be27845400 36
AnnaBridge 172:65be27845400 37 #include "EmbeddedTypes.h"
AnnaBridge 172:65be27845400 38 #include "fsl_os_abstraction_config.h"
AnnaBridge 172:65be27845400 39
AnnaBridge 172:65be27845400 40 #ifdef __cplusplus
AnnaBridge 172:65be27845400 41 extern "C"
AnnaBridge 172:65be27845400 42 {
AnnaBridge 172:65be27845400 43 #endif
AnnaBridge 172:65be27845400 44
AnnaBridge 172:65be27845400 45
AnnaBridge 172:65be27845400 46 /*! *********************************************************************************
AnnaBridge 172:65be27845400 47 *************************************************************************************
AnnaBridge 172:65be27845400 48 * Public type definitions
AnnaBridge 172:65be27845400 49 *************************************************************************************
AnnaBridge 172:65be27845400 50 ********************************************************************************** */
AnnaBridge 172:65be27845400 51 /*! @brief Type for the Task Priority*/
AnnaBridge 172:65be27845400 52 typedef uint16_t osaTaskPriority_t;
AnnaBridge 172:65be27845400 53 /*! @brief Type for the timer definition*/
AnnaBridge 172:65be27845400 54 typedef enum {
AnnaBridge 172:65be27845400 55 osaTimer_Once = 0, /*!< one-shot timer*/
AnnaBridge 172:65be27845400 56 osaTimer_Periodic = 1 /*!< repeating timer*/
AnnaBridge 172:65be27845400 57 } osaTimer_t;
AnnaBridge 172:65be27845400 58 /*! @brief Type for a task handler, returned by the OSA_TaskCreate function. */
AnnaBridge 172:65be27845400 59 typedef void* osaTaskId_t;
AnnaBridge 172:65be27845400 60 /*! @brief Type for the parameter to be passed to the task at its creation */
AnnaBridge 172:65be27845400 61 typedef void* osaTaskParam_t;
AnnaBridge 172:65be27845400 62 /*! @brief Type for task pointer. Task prototype declaration */
AnnaBridge 172:65be27845400 63 typedef void (*osaTaskPtr_t) (osaTaskParam_t task_param);
AnnaBridge 172:65be27845400 64 /*! @brief Type for the semaphore handler, returned by the OSA_SemaphoreCreate function. */
AnnaBridge 172:65be27845400 65 typedef void* osaSemaphoreId_t;
AnnaBridge 172:65be27845400 66 /*! @brief Type for the mutex handler, returned by the OSA_MutexCreate function. */
AnnaBridge 172:65be27845400 67 typedef void* osaMutexId_t;
AnnaBridge 172:65be27845400 68 /*! @brief Type for the event handler, returned by the OSA_EventCreate function. */
AnnaBridge 172:65be27845400 69 typedef void* osaEventId_t;
AnnaBridge 172:65be27845400 70 /*! @brief Type for an event flags group, bit 32 is reserved. */
AnnaBridge 172:65be27845400 71 typedef uint32_t osaEventFlags_t;
AnnaBridge 172:65be27845400 72 /*! @brief Message definition. */
AnnaBridge 172:65be27845400 73 typedef void* osaMsg_t;
AnnaBridge 172:65be27845400 74 /*! @brief Type for the message queue handler, returned by the OSA_MsgQCreate function. */
AnnaBridge 172:65be27845400 75 typedef void* osaMsgQId_t;
AnnaBridge 172:65be27845400 76 /*! @brief Type for the Timer handler, returned by the OSA_TimerCreate function. */
AnnaBridge 172:65be27845400 77 typedef void *osaTimerId_t;
AnnaBridge 172:65be27845400 78 /*! @brief Type for the Timer callback function pointer. */
AnnaBridge 172:65be27845400 79 typedef void (*osaTimerFctPtr_t) (void const *argument);
AnnaBridge 172:65be27845400 80 /*! @brief Thread Definition structure contains startup information of a thread.*/
AnnaBridge 172:65be27845400 81 typedef struct osaThreadDef_tag {
AnnaBridge 172:65be27845400 82 osaTaskPtr_t pthread; /*!< start address of thread function*/
AnnaBridge 172:65be27845400 83 uint32_t tpriority; /*!< initial thread priority*/
AnnaBridge 172:65be27845400 84 uint32_t instances; /*!< maximum number of instances of that thread function*/
AnnaBridge 172:65be27845400 85 uint32_t stacksize; /*!< stack size requirements in bytes; 0 is default stack size*/
AnnaBridge 172:65be27845400 86 uint32_t *tstack;
AnnaBridge 172:65be27845400 87 void *tlink;
AnnaBridge 172:65be27845400 88 uint8_t *tname;
AnnaBridge 172:65be27845400 89 bool_t useFloat;
AnnaBridge 172:65be27845400 90 } osaThreadDef_t;
AnnaBridge 172:65be27845400 91 /*! @brief Thread Link Definition structure .*/
AnnaBridge 172:65be27845400 92 typedef struct osaThreadLink_tag{
AnnaBridge 172:65be27845400 93 uint8_t link[12];
AnnaBridge 172:65be27845400 94 osaTaskId_t osThreadId;
AnnaBridge 172:65be27845400 95 osaThreadDef_t *osThreadDefHandle;
AnnaBridge 172:65be27845400 96 uint32_t *osThreadStackHandle;
AnnaBridge 172:65be27845400 97 }osaThreadLink_t, *osaThreadLinkHandle_t;
AnnaBridge 172:65be27845400 98
AnnaBridge 172:65be27845400 99 /*! @Timer Definition structure contains timer parameters.*/
AnnaBridge 172:65be27845400 100 typedef struct osaTimerDef_tag {
AnnaBridge 172:65be27845400 101 osaTimerFctPtr_t pfCallback; /* < start address of a timer function */
AnnaBridge 172:65be27845400 102 void *argument;
AnnaBridge 172:65be27845400 103 } osaTimerDef_t;
AnnaBridge 172:65be27845400 104 /*! @brief Defines the return status of OSA's functions */
AnnaBridge 172:65be27845400 105 typedef enum osaStatus_tag
AnnaBridge 172:65be27845400 106 {
AnnaBridge 172:65be27845400 107 osaStatus_Success = 0U, /*!< Success */
AnnaBridge 172:65be27845400 108 osaStatus_Error = 1U, /*!< Failed */
AnnaBridge 172:65be27845400 109 osaStatus_Timeout = 2U, /*!< Timeout occurs while waiting */
AnnaBridge 172:65be27845400 110 osaStatus_Idle = 3U /*!< Used for bare metal only, the wait object is not ready
AnnaBridge 172:65be27845400 111 and timeout still not occur */
AnnaBridge 172:65be27845400 112 }osaStatus_t;
AnnaBridge 172:65be27845400 113
AnnaBridge 172:65be27845400 114
AnnaBridge 172:65be27845400 115 /*! *********************************************************************************
AnnaBridge 172:65be27845400 116 *************************************************************************************
AnnaBridge 172:65be27845400 117 * Public macros
AnnaBridge 172:65be27845400 118 *************************************************************************************
AnnaBridge 172:65be27845400 119 ********************************************************************************** */
AnnaBridge 172:65be27845400 120 #if defined (FSL_RTOS_MQX)
AnnaBridge 172:65be27845400 121 #define USE_RTOS 1
AnnaBridge 172:65be27845400 122 #elif defined (FSL_RTOS_FREE_RTOS)
AnnaBridge 172:65be27845400 123 #define USE_RTOS 1
AnnaBridge 172:65be27845400 124 #elif defined (FSL_RTOS_UCOSII)
AnnaBridge 172:65be27845400 125 #define USE_RTOS 1
AnnaBridge 172:65be27845400 126 #elif defined (FSL_RTOS_UCOSIII)
AnnaBridge 172:65be27845400 127 #define USE_RTOS 1
AnnaBridge 172:65be27845400 128 #else
AnnaBridge 172:65be27845400 129 #define USE_RTOS 0
AnnaBridge 172:65be27845400 130 #endif
AnnaBridge 172:65be27845400 131
AnnaBridge 172:65be27845400 132 #define OSA_PRIORITY_IDLE (6)
AnnaBridge 172:65be27845400 133 #define OSA_PRIORITY_LOW (5)
AnnaBridge 172:65be27845400 134 #define OSA_PRIORITY_BELOW_NORMAL (4)
AnnaBridge 172:65be27845400 135 #define OSA_PRIORITY_NORMAL (3)
AnnaBridge 172:65be27845400 136 #define OSA_PRIORITY_ABOVE_NORMAL (2)
AnnaBridge 172:65be27845400 137 #define OSA_PRIORITY_HIGH (1)
AnnaBridge 172:65be27845400 138 #define OSA_PRIORITY_REAL_TIME (0)
AnnaBridge 172:65be27845400 139 #define OSA_TASK_PRIORITY_MAX (0)
AnnaBridge 172:65be27845400 140 #define OSA_TASK_PRIORITY_MIN (15)
AnnaBridge 172:65be27845400 141 #define SIZE_IN_UINT32_UNITS(size) (((size) + sizeof(uint32_t) - 1) / sizeof(uint32_t))
AnnaBridge 172:65be27845400 142
AnnaBridge 172:65be27845400 143 /*! @brief Constant to pass as timeout value in order to wait indefinitely. */
AnnaBridge 172:65be27845400 144 #define osaWaitForever_c ((uint32_t)(-1))
AnnaBridge 172:65be27845400 145 #define osaEventFlagsAll_c ((osaEventFlags_t)(0x00FFFFFF))
AnnaBridge 172:65be27845400 146 #define osThreadStackArray(name) osThread_##name##_stack
AnnaBridge 172:65be27845400 147 #define osThreadStackDef(name, stacksize, instances) \
AnnaBridge 172:65be27845400 148 uint32_t osThreadStackArray(name)[SIZE_IN_UINT32_UNITS(stacksize)*(instances)];
AnnaBridge 172:65be27845400 149
AnnaBridge 172:65be27845400 150 /* ==== Thread Management ==== */
AnnaBridge 172:65be27845400 151
AnnaBridge 172:65be27845400 152 /* Create a Thread Definition with function, priority, and stack requirements.
AnnaBridge 172:65be27845400 153 * \param name name of the thread function.
AnnaBridge 172:65be27845400 154 * \param priority initial priority of the thread function.
AnnaBridge 172:65be27845400 155 * \param instances number of possible thread instances.
AnnaBridge 172:65be27845400 156 * \param stackSz stack size (in bytes) requirements for the thread function.
AnnaBridge 172:65be27845400 157 * \param useFloat
AnnaBridge 172:65be27845400 158 */
AnnaBridge 172:65be27845400 159 #if defined(FSL_RTOS_MQX)
AnnaBridge 172:65be27845400 160 #define OSA_TASK_DEFINE(name, priority, instances, stackSz, useFloat) \
AnnaBridge 172:65be27845400 161 osaThreadLink_t osThreadLink_##name[instances] = {0}; \
AnnaBridge 172:65be27845400 162 osThreadStackDef(name, stackSz, instances) \
AnnaBridge 172:65be27845400 163 osaThreadDef_t os_thread_def_##name = { (name), \
AnnaBridge 172:65be27845400 164 (priority), \
AnnaBridge 172:65be27845400 165 (instances), \
AnnaBridge 172:65be27845400 166 (stackSz), \
AnnaBridge 172:65be27845400 167 osThreadStackArray(name), \
AnnaBridge 172:65be27845400 168 osThreadLink_##name, \
AnnaBridge 172:65be27845400 169 (uint8_t*) #name,\
AnnaBridge 172:65be27845400 170 (useFloat)}
AnnaBridge 172:65be27845400 171 #elif defined (FSL_RTOS_UCOSII)
AnnaBridge 172:65be27845400 172 #if gTaskMultipleInstancesManagement_c
AnnaBridge 172:65be27845400 173 #define OSA_TASK_DEFINE(name, priority, instances, stackSz, useFloat) \
AnnaBridge 172:65be27845400 174 osaThreadLink_t osThreadLink_##name[instances] = {0}; \
AnnaBridge 172:65be27845400 175 osThreadStackDef(name, stackSz, instances) \
AnnaBridge 172:65be27845400 176 osaThreadDef_t os_thread_def_##name = { (name), \
AnnaBridge 172:65be27845400 177 (priority), \
AnnaBridge 172:65be27845400 178 (instances), \
AnnaBridge 172:65be27845400 179 (stackSz), \
AnnaBridge 172:65be27845400 180 osThreadStackArray(name), \
AnnaBridge 172:65be27845400 181 osThreadLink_##name, \
AnnaBridge 172:65be27845400 182 (uint8_t*) #name,\
AnnaBridge 172:65be27845400 183 (useFloat)}
AnnaBridge 172:65be27845400 184 #else
AnnaBridge 172:65be27845400 185 #define OSA_TASK_DEFINE(name, priority, instances, stackSz, useFloat) \
AnnaBridge 172:65be27845400 186 osThreadStackDef(name, stackSz, instances) \
AnnaBridge 172:65be27845400 187 osaThreadDef_t os_thread_def_##name = { (name), \
AnnaBridge 172:65be27845400 188 (priority), \
AnnaBridge 172:65be27845400 189 (instances), \
AnnaBridge 172:65be27845400 190 (stackSz), \
AnnaBridge 172:65be27845400 191 osThreadStackArray(name), \
AnnaBridge 172:65be27845400 192 NULL, \
AnnaBridge 172:65be27845400 193 (uint8_t*) #name,\
AnnaBridge 172:65be27845400 194 (useFloat)}
AnnaBridge 172:65be27845400 195 #endif
AnnaBridge 172:65be27845400 196 #else
AnnaBridge 172:65be27845400 197 #define OSA_TASK_DEFINE(name, priority, instances, stackSz, useFloat) \
AnnaBridge 172:65be27845400 198 osaThreadDef_t os_thread_def_##name = { (name), \
AnnaBridge 172:65be27845400 199 (priority), \
AnnaBridge 172:65be27845400 200 (instances), \
AnnaBridge 172:65be27845400 201 (stackSz), \
AnnaBridge 172:65be27845400 202 NULL, \
AnnaBridge 172:65be27845400 203 NULL, \
AnnaBridge 172:65be27845400 204 (uint8_t*) #name,\
AnnaBridge 172:65be27845400 205 (useFloat)}
AnnaBridge 172:65be27845400 206 #endif
AnnaBridge 172:65be27845400 207 /* Access a Thread defintion.
AnnaBridge 172:65be27845400 208 * \param name name of the thread definition object.
AnnaBridge 172:65be27845400 209 */
AnnaBridge 172:65be27845400 210 #define OSA_TASK(name) \
AnnaBridge 172:65be27845400 211 &os_thread_def_##name
AnnaBridge 172:65be27845400 212
AnnaBridge 172:65be27845400 213 #define OSA_TASK_PROTO(name) \
AnnaBridge 172:65be27845400 214 extern osaThreadDef_t os_thread_def_##name
AnnaBridge 172:65be27845400 215 /* ==== Timer Management ====
AnnaBridge 172:65be27845400 216 * Define a Timer object.
AnnaBridge 172:65be27845400 217 * \param name name of the timer object.
AnnaBridge 172:65be27845400 218 * \param function name of the timer call back function.
AnnaBridge 172:65be27845400 219 */
AnnaBridge 172:65be27845400 220
AnnaBridge 172:65be27845400 221 #define OSA_TIMER_DEF(name, function) \
AnnaBridge 172:65be27845400 222 osaTimerDef_t os_timer_def_##name = \
AnnaBridge 172:65be27845400 223 { (function), NULL }
AnnaBridge 172:65be27845400 224
AnnaBridge 172:65be27845400 225 /* Access a Timer definition.
AnnaBridge 172:65be27845400 226 * \param name name of the timer object.
AnnaBridge 172:65be27845400 227 */
AnnaBridge 172:65be27845400 228 #define OSA_TIMER(name) \
AnnaBridge 172:65be27845400 229 &os_timer_def_##name
AnnaBridge 172:65be27845400 230
AnnaBridge 172:65be27845400 231
AnnaBridge 172:65be27845400 232 /*****************************************************************************
AnnaBridge 172:65be27845400 233 ******************************************************************************
AnnaBridge 172:65be27845400 234 * Public memory declarations
AnnaBridge 172:65be27845400 235 ******************************************************************************
AnnaBridge 172:65be27845400 236 *****************************************************************************/
AnnaBridge 172:65be27845400 237 extern const uint8_t gUseRtos_c;
AnnaBridge 172:65be27845400 238
AnnaBridge 172:65be27845400 239
AnnaBridge 172:65be27845400 240 /*! *********************************************************************************
AnnaBridge 172:65be27845400 241 *************************************************************************************
AnnaBridge 172:65be27845400 242 * Public functions
AnnaBridge 172:65be27845400 243 *************************************************************************************
AnnaBridge 172:65be27845400 244 ********************************************************************************** */
AnnaBridge 172:65be27845400 245 /*!
AnnaBridge 172:65be27845400 246 * @name Task management
AnnaBridge 172:65be27845400 247 * @{
AnnaBridge 172:65be27845400 248 */
AnnaBridge 172:65be27845400 249
AnnaBridge 172:65be27845400 250 /*!
AnnaBridge 172:65be27845400 251 * @brief Creates a task.
AnnaBridge 172:65be27845400 252 *
AnnaBridge 172:65be27845400 253 * This function is used to create task based on the resources defined
AnnaBridge 172:65be27845400 254 * by the macro OSA_TASK_DEFINE.
AnnaBridge 172:65be27845400 255 *
AnnaBridge 172:65be27845400 256 * @param thread_def pointer to the osaThreadDef_t structure which defines the task.
AnnaBridge 172:65be27845400 257 * @param task_param Pointer to be passed to the task when it is created.
AnnaBridge 172:65be27845400 258 *
AnnaBridge 172:65be27845400 259 * @retval taskId The task is successfully created.
AnnaBridge 172:65be27845400 260 * @retval NULL The task can not be created..
AnnaBridge 172:65be27845400 261 *
AnnaBridge 172:65be27845400 262 * Example:
AnnaBridge 172:65be27845400 263 @code
AnnaBridge 172:65be27845400 264 osaTaskId_t taskId;
AnnaBridge 172:65be27845400 265 OSA_TASK_DEFINE( Job1, OSA_PRIORITY_HIGH, 1, 800, 0);;
AnnaBridge 172:65be27845400 266 taskId = OSA__TaskCreate(OSA__TASK(Job1), (osaTaskParam_t)NULL);
AnnaBridge 172:65be27845400 267 @endcode
AnnaBridge 172:65be27845400 268 */
AnnaBridge 172:65be27845400 269 osaTaskId_t OSA_TaskCreate(osaThreadDef_t *thread_def, osaTaskParam_t task_param);
AnnaBridge 172:65be27845400 270
AnnaBridge 172:65be27845400 271 /*!
AnnaBridge 172:65be27845400 272 * @brief Gets the handler of active task.
AnnaBridge 172:65be27845400 273 *
AnnaBridge 172:65be27845400 274 * @return Handler to current active task.
AnnaBridge 172:65be27845400 275 */
AnnaBridge 172:65be27845400 276 osaTaskId_t OSA_TaskGetId(void);
AnnaBridge 172:65be27845400 277
AnnaBridge 172:65be27845400 278 /*!
AnnaBridge 172:65be27845400 279 * @brief Puts the active task to the end of scheduler's queue.
AnnaBridge 172:65be27845400 280 *
AnnaBridge 172:65be27845400 281 * When a task calls this function, it gives up the CPU and puts itself to the
AnnaBridge 172:65be27845400 282 * end of a task ready list.
AnnaBridge 172:65be27845400 283 *
AnnaBridge 172:65be27845400 284 * @retval osaStatus_Success The function is called successfully.
AnnaBridge 172:65be27845400 285 * @retval osaStatus_Error Error occurs with this function.
AnnaBridge 172:65be27845400 286 */
AnnaBridge 172:65be27845400 287 osaStatus_t OSA_TaskYield(void);
AnnaBridge 172:65be27845400 288
AnnaBridge 172:65be27845400 289 /*!
AnnaBridge 172:65be27845400 290 * @brief Gets the priority of a task.
AnnaBridge 172:65be27845400 291 *
AnnaBridge 172:65be27845400 292 * @param taskId The handler of the task whose priority is received.
AnnaBridge 172:65be27845400 293 *
AnnaBridge 172:65be27845400 294 * @return Task's priority.
AnnaBridge 172:65be27845400 295 */
AnnaBridge 172:65be27845400 296 osaTaskPriority_t OSA_TaskGetPriority(osaTaskId_t taskId);
AnnaBridge 172:65be27845400 297
AnnaBridge 172:65be27845400 298 /*!
AnnaBridge 172:65be27845400 299 * @brief Sets the priority of a task.
AnnaBridge 172:65be27845400 300 *
AnnaBridge 172:65be27845400 301 * @param taskId The handler of the task whose priority is set.
AnnaBridge 172:65be27845400 302 * @param taskPriority The priority to set.
AnnaBridge 172:65be27845400 303 *
AnnaBridge 172:65be27845400 304 * @retval osaStatus_Success Task's priority is set successfully.
AnnaBridge 172:65be27845400 305 * @retval osaStatus_Error Task's priority can not be set.
AnnaBridge 172:65be27845400 306 */
AnnaBridge 172:65be27845400 307 osaStatus_t OSA_TaskSetPriority(osaTaskId_t taskId, osaTaskPriority_t taskPriority);
AnnaBridge 172:65be27845400 308 /*!
AnnaBridge 172:65be27845400 309 * @brief Destroys a previously created task.
AnnaBridge 172:65be27845400 310 *
AnnaBridge 172:65be27845400 311 * @param taskId The handler of the task to destroy. Returned by the OSA_TaskCreate function.
AnnaBridge 172:65be27845400 312 *
AnnaBridge 172:65be27845400 313 * @retval osaStatus_Success The task was successfully destroyed.
AnnaBridge 172:65be27845400 314 * @retval osaStatus_Error Task destruction failed or invalid parameter.
AnnaBridge 172:65be27845400 315 */
AnnaBridge 172:65be27845400 316 osaStatus_t OSA_TaskDestroy(osaTaskId_t taskId);
AnnaBridge 172:65be27845400 317
AnnaBridge 172:65be27845400 318 /*!
AnnaBridge 172:65be27845400 319 * @brief Creates a semaphore with a given value.
AnnaBridge 172:65be27845400 320 *
AnnaBridge 172:65be27845400 321 * This function creates a semaphore and sets the value to the parameter
AnnaBridge 172:65be27845400 322 * initValue.
AnnaBridge 172:65be27845400 323 *
AnnaBridge 172:65be27845400 324 * @param initValue Initial value the semaphore will be set to.
AnnaBridge 172:65be27845400 325 *
AnnaBridge 172:65be27845400 326 * @retval handler to the new semaphore if the semaphore is created successfully.
AnnaBridge 172:65be27845400 327 * @retval NULL if the semaphore can not be created.
AnnaBridge 172:65be27845400 328 *
AnnaBridge 172:65be27845400 329 *
AnnaBridge 172:65be27845400 330 */
AnnaBridge 172:65be27845400 331 osaSemaphoreId_t OSA_SemaphoreCreate(uint32_t initValue);
AnnaBridge 172:65be27845400 332
AnnaBridge 172:65be27845400 333 /*!
AnnaBridge 172:65be27845400 334 * @brief Destroys a previously created semaphore.
AnnaBridge 172:65be27845400 335 *
AnnaBridge 172:65be27845400 336 * @param semId Pointer to the semaphore to destroy.
AnnaBridge 172:65be27845400 337 *
AnnaBridge 172:65be27845400 338 * @retval osaStatus_Success The semaphore is successfully destroyed.
AnnaBridge 172:65be27845400 339 * @retval osaStatus_Error The semaphore can not be destroyed.
AnnaBridge 172:65be27845400 340 */
AnnaBridge 172:65be27845400 341 osaStatus_t OSA_SemaphoreDestroy(osaSemaphoreId_t semId);
AnnaBridge 172:65be27845400 342
AnnaBridge 172:65be27845400 343 /*!
AnnaBridge 172:65be27845400 344 * @brief Pending a semaphore with timeout.
AnnaBridge 172:65be27845400 345 *
AnnaBridge 172:65be27845400 346 * This function checks the semaphore's counting value. If it is positive,
AnnaBridge 172:65be27845400 347 * decreases it and returns osaStatus_Success. Otherwise, a timeout is used
AnnaBridge 172:65be27845400 348 * to wait.
AnnaBridge 172:65be27845400 349 *
AnnaBridge 172:65be27845400 350 * @param semId Pointer to the semaphore.
AnnaBridge 172:65be27845400 351 * @param millisec The maximum number of milliseconds to wait if semaphore is not
AnnaBridge 172:65be27845400 352 * positive. Pass osaWaitForever_c to wait indefinitely, pass 0
AnnaBridge 172:65be27845400 353 * will return osaStatus_Timeout immediately.
AnnaBridge 172:65be27845400 354 *
AnnaBridge 172:65be27845400 355 * @retval osaStatus_Success The semaphore is received.
AnnaBridge 172:65be27845400 356 * @retval osaStatus_Timeout The semaphore is not received within the specified 'timeout'.
AnnaBridge 172:65be27845400 357 * @retval osaStatus_Error An incorrect parameter was passed.
AnnaBridge 172:65be27845400 358 */
AnnaBridge 172:65be27845400 359 osaStatus_t OSA_SemaphoreWait(osaSemaphoreId_t semId, uint32_t millisec);
AnnaBridge 172:65be27845400 360
AnnaBridge 172:65be27845400 361 /*!
AnnaBridge 172:65be27845400 362 * @brief Signals for someone waiting on the semaphore to wake up.
AnnaBridge 172:65be27845400 363 *
AnnaBridge 172:65be27845400 364 * Wakes up one task that is waiting on the semaphore. If no task is waiting, increases
AnnaBridge 172:65be27845400 365 * the semaphore's counting value.
AnnaBridge 172:65be27845400 366 *
AnnaBridge 172:65be27845400 367 * @param semId Pointer to the semaphore to signal.
AnnaBridge 172:65be27845400 368 *
AnnaBridge 172:65be27845400 369 * @retval osaStatus_Success The semaphore is successfully signaled.
AnnaBridge 172:65be27845400 370 * @retval osaStatus_Error The object can not be signaled or invalid parameter.
AnnaBridge 172:65be27845400 371 *
AnnaBridge 172:65be27845400 372 */
AnnaBridge 172:65be27845400 373 osaStatus_t OSA_SemaphorePost(osaSemaphoreId_t semId);
AnnaBridge 172:65be27845400 374
AnnaBridge 172:65be27845400 375 /*!
AnnaBridge 172:65be27845400 376 * @brief Create an unlocked mutex.
AnnaBridge 172:65be27845400 377 *
AnnaBridge 172:65be27845400 378 * This function creates a non-recursive mutex and sets it to unlocked status.
AnnaBridge 172:65be27845400 379 *
AnnaBridge 172:65be27845400 380 * @param none.
AnnaBridge 172:65be27845400 381 *
AnnaBridge 172:65be27845400 382 * @retval handler to the new mutex if the mutex is created successfully.
AnnaBridge 172:65be27845400 383 * @retval NULL if the mutex can not be created.
AnnaBridge 172:65be27845400 384 */
AnnaBridge 172:65be27845400 385 osaMutexId_t OSA_MutexCreate(void);
AnnaBridge 172:65be27845400 386
AnnaBridge 172:65be27845400 387 /*!
AnnaBridge 172:65be27845400 388 * @brief Waits for a mutex and locks it.
AnnaBridge 172:65be27845400 389 *
AnnaBridge 172:65be27845400 390 * This function checks the mutex's status. If it is unlocked, locks it and returns the
AnnaBridge 172:65be27845400 391 * osaStatus_Success. Otherwise, waits for a timeout in milliseconds to lock.
AnnaBridge 172:65be27845400 392 *
AnnaBridge 172:65be27845400 393 * @param mutexId Pointer to the Mutex.
AnnaBridge 172:65be27845400 394 * @param millisec The maximum number of milliseconds to wait for the mutex.
AnnaBridge 172:65be27845400 395 * If the mutex is locked, Pass the value osaWaitForever_c will
AnnaBridge 172:65be27845400 396 * wait indefinitely, pass 0 will return osaStatus_Timeout
AnnaBridge 172:65be27845400 397 * immediately.
AnnaBridge 172:65be27845400 398 *
AnnaBridge 172:65be27845400 399 * @retval osaStatus_Success The mutex is locked successfully.
AnnaBridge 172:65be27845400 400 * @retval osaStatus_Timeout Timeout occurred.
AnnaBridge 172:65be27845400 401 * @retval osaStatus_Error Incorrect parameter was passed.
AnnaBridge 172:65be27845400 402 *
AnnaBridge 172:65be27845400 403 * @note This is non-recursive mutex, a task can not try to lock the mutex it has locked.
AnnaBridge 172:65be27845400 404 */
AnnaBridge 172:65be27845400 405 osaStatus_t OSA_MutexLock(osaMutexId_t mutexId, uint32_t millisec);
AnnaBridge 172:65be27845400 406
AnnaBridge 172:65be27845400 407 /*!
AnnaBridge 172:65be27845400 408 * @brief Unlocks a previously locked mutex.
AnnaBridge 172:65be27845400 409 *
AnnaBridge 172:65be27845400 410 * @param mutexId Pointer to the Mutex.
AnnaBridge 172:65be27845400 411 *
AnnaBridge 172:65be27845400 412 * @retval osaStatus_Success The mutex is successfully unlocked.
AnnaBridge 172:65be27845400 413 * @retval osaStatus_Error The mutex can not be unlocked or invalid parameter.
AnnaBridge 172:65be27845400 414 */
AnnaBridge 172:65be27845400 415 osaStatus_t OSA_MutexUnlock(osaMutexId_t mutexId);
AnnaBridge 172:65be27845400 416
AnnaBridge 172:65be27845400 417 /*!
AnnaBridge 172:65be27845400 418 * @brief Destroys a previously created mutex.
AnnaBridge 172:65be27845400 419 *
AnnaBridge 172:65be27845400 420 * @param mutexId Pointer to the Mutex.
AnnaBridge 172:65be27845400 421 *
AnnaBridge 172:65be27845400 422 * @retval osaStatus_Success The mutex is successfully destroyed.
AnnaBridge 172:65be27845400 423 * @retval osaStatus_Error The mutex can not be destroyed.
AnnaBridge 172:65be27845400 424 *
AnnaBridge 172:65be27845400 425 */
AnnaBridge 172:65be27845400 426 osaStatus_t OSA_MutexDestroy(osaMutexId_t mutexId);
AnnaBridge 172:65be27845400 427
AnnaBridge 172:65be27845400 428 /*!
AnnaBridge 172:65be27845400 429 * @brief Initializes an event object with all flags cleared.
AnnaBridge 172:65be27845400 430 *
AnnaBridge 172:65be27845400 431 * This function creates an event object and set its clear mode. If autoClear
AnnaBridge 172:65be27845400 432 * is TRUE, when a task gets the event flags, these flags will be
AnnaBridge 172:65be27845400 433 * cleared automatically. Otherwise these flags must
AnnaBridge 172:65be27845400 434 * be cleared manually.
AnnaBridge 172:65be27845400 435 *
AnnaBridge 172:65be27845400 436 * @param autoClear TRUE The event is auto-clear.
AnnaBridge 172:65be27845400 437 * FALSE The event manual-clear
AnnaBridge 172:65be27845400 438 * @retval handler to the new event if the event is created successfully.
AnnaBridge 172:65be27845400 439 * @retval NULL if the event can not be created.
AnnaBridge 172:65be27845400 440 */
AnnaBridge 172:65be27845400 441 osaEventId_t OSA_EventCreate(bool_t autoClear);
AnnaBridge 172:65be27845400 442
AnnaBridge 172:65be27845400 443 /*!
AnnaBridge 172:65be27845400 444 * @brief Sets one or more event flags.
AnnaBridge 172:65be27845400 445 *
AnnaBridge 172:65be27845400 446 * Sets specified flags of an event object.
AnnaBridge 172:65be27845400 447 *
AnnaBridge 172:65be27845400 448 * @param eventId Pointer to the event.
AnnaBridge 172:65be27845400 449 * @param flagsToSet Flags to be set.
AnnaBridge 172:65be27845400 450 *
AnnaBridge 172:65be27845400 451 * @retval osaStatus_Success The flags were successfully set.
AnnaBridge 172:65be27845400 452 * @retval osaStatus_Error An incorrect parameter was passed.
AnnaBridge 172:65be27845400 453 */
AnnaBridge 172:65be27845400 454 osaStatus_t OSA_EventSet(osaEventId_t eventId, osaEventFlags_t flagsToSet);
AnnaBridge 172:65be27845400 455
AnnaBridge 172:65be27845400 456 /*!
AnnaBridge 172:65be27845400 457 * @brief Clears one or more flags.
AnnaBridge 172:65be27845400 458 *
AnnaBridge 172:65be27845400 459 * Clears specified flags of an event object.
AnnaBridge 172:65be27845400 460 *
AnnaBridge 172:65be27845400 461 * @param eventId Pointer to the event.
AnnaBridge 172:65be27845400 462 * @param flagsToClear Flags to be clear.
AnnaBridge 172:65be27845400 463 *
AnnaBridge 172:65be27845400 464 * @retval osaStatus_Success The flags were successfully cleared.
AnnaBridge 172:65be27845400 465 * @retval osaStatus_Error An incorrect parameter was passed.
AnnaBridge 172:65be27845400 466 */
AnnaBridge 172:65be27845400 467 osaStatus_t OSA_EventClear(osaEventId_t eventId, osaEventFlags_t flagsToClear);
AnnaBridge 172:65be27845400 468
AnnaBridge 172:65be27845400 469 /*!
AnnaBridge 172:65be27845400 470 * @brief Waits for specified event flags to be set.
AnnaBridge 172:65be27845400 471 *
AnnaBridge 172:65be27845400 472 * This function waits for a combination of flags to be set in an event object.
AnnaBridge 172:65be27845400 473 * Applications can wait for any/all bits to be set. Also this function could
AnnaBridge 172:65be27845400 474 * obtain the flags who wakeup the waiting task.
AnnaBridge 172:65be27845400 475 *
AnnaBridge 172:65be27845400 476 * @param eventId Pointer to the event.
AnnaBridge 172:65be27845400 477 * @param flagsToWait Flags that to wait.
AnnaBridge 172:65be27845400 478 * @param waitAll Wait all flags or any flag to be set.
AnnaBridge 172:65be27845400 479 * @param millisec The maximum number of milliseconds to wait for the event.
AnnaBridge 172:65be27845400 480 * If the wait condition is not met, pass osaWaitForever_c will
AnnaBridge 172:65be27845400 481 * wait indefinitely, pass 0 will return osaStatus_Timeout
AnnaBridge 172:65be27845400 482 * immediately.
AnnaBridge 172:65be27845400 483 * @param setFlags Flags that wakeup the waiting task are obtained by this parameter.
AnnaBridge 172:65be27845400 484 *
AnnaBridge 172:65be27845400 485 * @retval osaStatus_Success The wait condition met and function returns successfully.
AnnaBridge 172:65be27845400 486 * @retval osaStatus_Timeout Has not met wait condition within timeout.
AnnaBridge 172:65be27845400 487 * @retval osaStatus_Error An incorrect parameter was passed.
AnnaBridge 172:65be27845400 488
AnnaBridge 172:65be27845400 489 *
AnnaBridge 172:65be27845400 490 * @note Please pay attention to the flags bit width, FreeRTOS uses the most
AnnaBridge 172:65be27845400 491 * significant 8 bis as control bits, so do not wait these bits while using
AnnaBridge 172:65be27845400 492 * FreeRTOS.
AnnaBridge 172:65be27845400 493 *
AnnaBridge 172:65be27845400 494 */
AnnaBridge 172:65be27845400 495 osaStatus_t OSA_EventWait(osaEventId_t eventId, osaEventFlags_t flagsToWait, bool_t waitAll, uint32_t millisec, osaEventFlags_t *pSetFlags);
AnnaBridge 172:65be27845400 496
AnnaBridge 172:65be27845400 497 /*!
AnnaBridge 172:65be27845400 498 * @brief Destroys a previously created event object.
AnnaBridge 172:65be27845400 499 *
AnnaBridge 172:65be27845400 500 * @param eventId Pointer to the event.
AnnaBridge 172:65be27845400 501 *
AnnaBridge 172:65be27845400 502 * @retval osaStatus_Success The event is successfully destroyed.
AnnaBridge 172:65be27845400 503 * @retval osaStatus_Error Event destruction failed.
AnnaBridge 172:65be27845400 504 */
AnnaBridge 172:65be27845400 505 osaStatus_t OSA_EventDestroy(osaEventId_t eventId);
AnnaBridge 172:65be27845400 506
AnnaBridge 172:65be27845400 507 /*!
AnnaBridge 172:65be27845400 508 * @brief Initializes a message queue.
AnnaBridge 172:65be27845400 509 *
AnnaBridge 172:65be27845400 510 * This function allocates memory for and initializes a message queue. Message queue elements are hardcoded as void*.
AnnaBridge 172:65be27845400 511 *
AnnaBridge 172:65be27845400 512 * @param msgNo :number of messages the message queue should accommodate.
AnnaBridge 172:65be27845400 513 * This parameter should not exceed osNumberOfMessages defined in OSAbstractionConfig.h.
AnnaBridge 172:65be27845400 514 *
AnnaBridge 172:65be27845400 515 * @return: Handler to access the queue for put and get operations. If message queue
AnnaBridge 172:65be27845400 516 * creation failed, return NULL.
AnnaBridge 172:65be27845400 517 */
AnnaBridge 172:65be27845400 518 osaMsgQId_t OSA_MsgQCreate(uint32_t msgNo);
AnnaBridge 172:65be27845400 519
AnnaBridge 172:65be27845400 520 /*!
AnnaBridge 172:65be27845400 521 * @brief Puts a message at the end of the queue.
AnnaBridge 172:65be27845400 522 *
AnnaBridge 172:65be27845400 523 * This function puts a message to the end of the message queue. If the queue
AnnaBridge 172:65be27845400 524 * is full, this function returns the osaStatus_Error;
AnnaBridge 172:65be27845400 525 *
AnnaBridge 172:65be27845400 526 * @param msgQId pointer to queue returned by the OSA_MsgQCreate function.
AnnaBridge 172:65be27845400 527 * @param pMessage Pointer to the message to be put into the queue.
AnnaBridge 172:65be27845400 528 *
AnnaBridge 172:65be27845400 529 * @retval osaStatus_Success Message successfully put into the queue.
AnnaBridge 172:65be27845400 530 * @retval osaStatus_Error The queue was full or an invalid parameter was passed.
AnnaBridge 172:65be27845400 531 */
AnnaBridge 172:65be27845400 532 osaStatus_t OSA_MsgQPut(osaMsgQId_t msgQId, osaMsg_t pMessage);
AnnaBridge 172:65be27845400 533
AnnaBridge 172:65be27845400 534 /*!
AnnaBridge 172:65be27845400 535 * @brief Reads and remove a message at the head of the queue.
AnnaBridge 172:65be27845400 536 *
AnnaBridge 172:65be27845400 537 * This function gets a message from the head of the message queue. If the
AnnaBridge 172:65be27845400 538 * queue is empty, timeout is used to wait.
AnnaBridge 172:65be27845400 539 *
AnnaBridge 172:65be27845400 540 * @param msgQId Queue handler returned by the OSA_MsgQCreate function.
AnnaBridge 172:65be27845400 541 * @param pMessage Pointer to a memory to save the message.
AnnaBridge 172:65be27845400 542 * @param millisec The number of milliseconds to wait for a message. If the
AnnaBridge 172:65be27845400 543 * queue is empty, pass osaWaitForever_c will wait indefinitely,
AnnaBridge 172:65be27845400 544 * pass 0 will return osaStatus_Timeout immediately.
AnnaBridge 172:65be27845400 545 *
AnnaBridge 172:65be27845400 546 * @retval osaStatus_Success Message successfully obtained from the queue.
AnnaBridge 172:65be27845400 547 * @retval osaStatus_Timeout The queue remains empty after timeout.
AnnaBridge 172:65be27845400 548 * @retval osaStatus_Error Invalid parameter.
AnnaBridge 172:65be27845400 549 */
AnnaBridge 172:65be27845400 550 osaStatus_t OSA_MsgQGet(osaMsgQId_t msgQId, osaMsg_t pMessage, uint32_t millisec);
AnnaBridge 172:65be27845400 551
AnnaBridge 172:65be27845400 552 /*!
AnnaBridge 172:65be27845400 553 * @brief Destroys a previously created queue.
AnnaBridge 172:65be27845400 554 *
AnnaBridge 172:65be27845400 555 * @param msgQId queue handler returned by the OSA_MsgQCreate function.
AnnaBridge 172:65be27845400 556 *
AnnaBridge 172:65be27845400 557 * @retval osaStatus_Success The queue was successfully destroyed.
AnnaBridge 172:65be27845400 558 * @retval osaStatus_Error Message queue destruction failed.
AnnaBridge 172:65be27845400 559 */
AnnaBridge 172:65be27845400 560 osaStatus_t OSA_MsgQDestroy(osaMsgQId_t msgQId);
AnnaBridge 172:65be27845400 561
AnnaBridge 172:65be27845400 562 /*!
AnnaBridge 172:65be27845400 563 * @brief Enable all interrupts.
AnnaBridge 172:65be27845400 564 */
AnnaBridge 172:65be27845400 565 void OSA_InterruptEnable(void);
AnnaBridge 172:65be27845400 566
AnnaBridge 172:65be27845400 567 /*!
AnnaBridge 172:65be27845400 568 * @brief Disable all interrupts.
AnnaBridge 172:65be27845400 569 */
AnnaBridge 172:65be27845400 570 void OSA_InterruptDisable(void);
AnnaBridge 172:65be27845400 571
AnnaBridge 172:65be27845400 572 /*!
AnnaBridge 172:65be27845400 573 * @brief Enable all interrupts using PRIMASK.
AnnaBridge 172:65be27845400 574 */
AnnaBridge 172:65be27845400 575 void OSA_EnableIRQGlobal(void);
AnnaBridge 172:65be27845400 576
AnnaBridge 172:65be27845400 577 /*!
AnnaBridge 172:65be27845400 578 * @brief Disable all interrupts using PRIMASK.
AnnaBridge 172:65be27845400 579 */
AnnaBridge 172:65be27845400 580 void OSA_DisableIRQGlobal(void);
AnnaBridge 172:65be27845400 581
AnnaBridge 172:65be27845400 582 /*!
AnnaBridge 172:65be27845400 583 * @brief Delays execution for a number of milliseconds.
AnnaBridge 172:65be27845400 584 *
AnnaBridge 172:65be27845400 585 * @param millisec The time in milliseconds to wait.
AnnaBridge 172:65be27845400 586 */
AnnaBridge 172:65be27845400 587 void OSA_TimeDelay(uint32_t millisec);
AnnaBridge 172:65be27845400 588
AnnaBridge 172:65be27845400 589 /*!
AnnaBridge 172:65be27845400 590 * @brief This function gets current time in milliseconds.
AnnaBridge 172:65be27845400 591 *
AnnaBridge 172:65be27845400 592 * @retval current time in milliseconds
AnnaBridge 172:65be27845400 593 */
AnnaBridge 172:65be27845400 594 uint32_t OSA_TimeGetMsec(void);
AnnaBridge 172:65be27845400 595
AnnaBridge 172:65be27845400 596 /*!
AnnaBridge 172:65be27845400 597 * @brief Installs the interrupt handler.
AnnaBridge 172:65be27845400 598 *
AnnaBridge 172:65be27845400 599 * @param IRQNumber IRQ number of the interrupt.
AnnaBridge 172:65be27845400 600 * @param handler The interrupt handler to install.
AnnaBridge 172:65be27845400 601 */
AnnaBridge 172:65be27845400 602 void OSA_InstallIntHandler(uint32_t IRQNumber, void (*handler)(void));
AnnaBridge 172:65be27845400 603
AnnaBridge 172:65be27845400 604 #ifdef __cplusplus
AnnaBridge 172:65be27845400 605 }
AnnaBridge 172:65be27845400 606 #endif
AnnaBridge 172:65be27845400 607
AnnaBridge 172:65be27845400 608 #endif