1 /* 2 * Copyright (c) 2013-2017 ARM Limited. All rights reserved. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Licensed under the Apache License, Version 2.0 (the License); you may 7 * not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an AS IS BASIS, WITHOUT 14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 * ---------------------------------------------------------------------- 19 * 20 * $Date: 30. October 2017 21 * $Revision: V2.1.2 22 * 23 * Project: CMSIS-RTOS2 API 24 * Title: cmsis_os2.h header file 25 * 26 * Version 2.1.2 27 * Additional functions allowed to be called from Interrupt Service Routines: 28 * - osKernelGetInfo, osKernelGetState 29 * Version 2.1.1 30 * Additional functions allowed to be called from Interrupt Service Routines: 31 * - osKernelGetTickCount, osKernelGetTickFreq 32 * Changed Kernel Tick type to uint32_t: 33 * - updated: osKernelGetTickCount, osDelayUntil 34 * Version 2.1.0 35 * Support for critical and uncritical sections (nesting safe): 36 * - updated: osKernelLock, osKernelUnlock 37 * - added: osKernelRestoreLock 38 * Updated Thread and Event Flags: 39 * - changed flags parameter and return type from int32_t to uint32_t 40 * Version 2.0.0 41 * Initial Release 42 *---------------------------------------------------------------------------*/ 43 44 #ifndef CMSIS_OS2_H_ 45 #define CMSIS_OS2_H_ 46 47 #ifndef __NO_RETURN 48 #if defined(__CC_ARM) 49 #define __NO_RETURN __declspec(noreturn) 50 #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) 51 #define __NO_RETURN __attribute__((__noreturn__)) 52 #elif defined(__GNUC__) 53 #define __NO_RETURN __attribute__((__noreturn__)) 54 #elif defined(__ICCARM__) 55 #define __NO_RETURN __noreturn 56 #else 57 #define __NO_RETURN 58 #endif 59 #endif 60 61 #include <stdint.h> 62 #include <stddef.h> 63 64 #ifdef __cplusplus 65 extern "C" 66 { 67 #endif 68 69 70 /* ==== Enumerations, structures, defines ==== */ 71 72 /* / Version information. */ 73 typedef struct { 74 uint32_t api; /* /< API version (major.minor.rev: mmnnnrrrr dec). */ 75 uint32_t kernel; /* /< Kernel version (major.minor.rev: mmnnnrrrr dec). */ 76 } osVersion_t; 77 78 /* / Kernel state. */ 79 typedef enum { 80 osKernelInactive = 0, /* /< Inactive. */ 81 osKernelReady = 1, /* /< Ready. */ 82 osKernelRunning = 2, /* /< Running. */ 83 osKernelLocked = 3, /* /< Locked. */ 84 osKernelSuspended = 4, /* /< Suspended. */ 85 osKernelError = -1, /* /< Error. */ 86 osKernelReserved = 0x7FFFFFFFU /* /< Prevents enum down-size compiler optimization. */ 87 } osKernelState_t; 88 89 /* / Thread state. */ 90 typedef enum { 91 osThreadInactive = 0, /* /< Inactive. */ 92 osThreadReady = 1, /* /< Ready. */ 93 osThreadRunning = 2, /* /< Running. */ 94 osThreadBlocked = 3, /* /< Blocked. */ 95 osThreadTerminated = 4, /* /< Terminated. */ 96 osThreadError = -1, /* /< Error. */ 97 osThreadReserved = 0x7FFFFFFF /* /< Prevents enum down-size compiler optimization. */ 98 } osThreadState_t; 99 100 /* / Priority values. */ 101 typedef enum { 102 osPriorityNone = 0, /* /< No priority (not initialized). */ 103 osPriorityIdle = 1, /* /< Reserved for Idle thread. */ 104 osPriorityLow = 8, /* /< Priority: low */ 105 osPriorityLow1 = 8+1, /* /< Priority: low + 1 */ 106 osPriorityLow2 = 8+2, /* /< Priority: low + 2 */ 107 osPriorityLow3 = 8+3, /* /< Priority: low + 3 */ 108 osPriorityLow4 = 8+4, /* /< Priority: low + 4 */ 109 osPriorityLow5 = 8+5, /* /< Priority: low + 5 */ 110 osPriorityLow6 = 8+6, /* /< Priority: low + 6 */ 111 osPriorityLow7 = 8+7, /* /< Priority: low + 7 */ 112 osPriorityBelowNormal = 16, /* /< Priority: below normal */ 113 osPriorityBelowNormal1 = 16+1, /* /< Priority: below normal + 1 */ 114 osPriorityBelowNormal2 = 16+2, /* /< Priority: below normal + 2 */ 115 osPriorityBelowNormal3 = 16+3, /* /< Priority: below normal + 3 */ 116 osPriorityBelowNormal4 = 16+4, /* /< Priority: below normal + 4 */ 117 osPriorityBelowNormal5 = 16+5, /* /< Priority: below normal + 5 */ 118 osPriorityBelowNormal6 = 16+6, /* /< Priority: below normal + 6 */ 119 osPriorityBelowNormal7 = 16+7, /* /< Priority: below normal + 7 */ 120 osPriorityNormal = 24, /* /< Priority: normal */ 121 osPriorityNormal1 = 24+1, /* /< Priority: normal + 1 */ 122 osPriorityNormal2 = 24+2, /* /< Priority: normal + 2 */ 123 osPriorityNormal3 = 24+3, /* /< Priority: normal + 3 */ 124 osPriorityNormal4 = 24+4, /* /< Priority: normal + 4 */ 125 osPriorityNormal5 = 24+5, /* /< Priority: normal + 5 */ 126 osPriorityNormal6 = 24+6, /* /< Priority: normal + 6 */ 127 osPriorityNormal7 = 24+7, /* /< Priority: normal + 7 */ 128 osPriorityAboveNormal = 32, /* /< Priority: above normal */ 129 osPriorityAboveNormal1 = 32+1, /* /< Priority: above normal + 1 */ 130 osPriorityAboveNormal2 = 32+2, /* /< Priority: above normal + 2 */ 131 osPriorityAboveNormal3 = 32+3, /* /< Priority: above normal + 3 */ 132 osPriorityAboveNormal4 = 32+4, /* /< Priority: above normal + 4 */ 133 osPriorityAboveNormal5 = 32+5, /* /< Priority: above normal + 5 */ 134 osPriorityAboveNormal6 = 32+6, /* /< Priority: above normal + 6 */ 135 osPriorityAboveNormal7 = 32+7, /* /< Priority: above normal + 7 */ 136 osPriorityHigh = 40, /* /< Priority: high */ 137 osPriorityHigh1 = 40+1, /* /< Priority: high + 1 */ 138 osPriorityHigh2 = 40+2, /* /< Priority: high + 2 */ 139 osPriorityHigh3 = 40+3, /* /< Priority: high + 3 */ 140 osPriorityHigh4 = 40+4, /* /< Priority: high + 4 */ 141 osPriorityHigh5 = 40+5, /* /< Priority: high + 5 */ 142 osPriorityHigh6 = 40+6, /* /< Priority: high + 6 */ 143 osPriorityHigh7 = 40+7, /* /< Priority: high + 7 */ 144 osPriorityRealtime = 48, /* /< Priority: realtime */ 145 osPriorityRealtime1 = 48+1, /* /< Priority: realtime + 1 */ 146 osPriorityRealtime2 = 48+2, /* /< Priority: realtime + 2 */ 147 osPriorityRealtime3 = 48+3, /* /< Priority: realtime + 3 */ 148 osPriorityRealtime4 = 48+4, /* /< Priority: realtime + 4 */ 149 osPriorityRealtime5 = 48+5, /* /< Priority: realtime + 5 */ 150 osPriorityRealtime6 = 48+6, /* /< Priority: realtime + 6 */ 151 osPriorityRealtime7 = 48+7, /* /< Priority: realtime + 7 */ 152 osPriorityISR = 56, /* /< Reserved for ISR deferred thread. */ 153 osPriorityError = -1, /* /< System cannot determine priority or illegal priority. */ 154 osPriorityReserved = 0x7FFFFFFF /* /< Prevents enum down-size compiler optimization. */ 155 } osPriority_t; 156 157 /* / Entry point of a thread. */ 158 typedef void (*osThreadFunc_t) (void *argument); 159 160 /* / Timer callback function. */ 161 typedef void (*osTimerFunc_t) (void *argument); 162 163 /* / Timer type. */ 164 typedef enum { 165 osTimerOnce = 0, /* /< One-shot timer. */ 166 osTimerPeriodic = 1 /* /< Repeating timer. */ 167 } osTimerType_t; 168 169 /* Timeout value. */ 170 #define osWaitForever 0xFFFFFFFFU /* /< Wait forever timeout value. */ 171 172 /* Flags options (\ref osThreadFlagsWait and \ref osEventFlagsWait). */ 173 #define osFlagsWaitAny 0x00000000U /* /< Wait for any flag (default). */ 174 #define osFlagsWaitAll 0x00000001U /* /< Wait for all flags. */ 175 #define osFlagsNoClear 0x00000002U /* /< Do not clear flags which have been specified to wait for. */ 176 177 /* Flags errors (returned by osThreadFlagsXxxx and osEventFlagsXxxx). */ 178 #define osFlagsError 0x80000000U /* /< Error indicator. */ 179 #define osFlagsErrorUnknown 0xFFFFFFFFU /* /< osError (-1). */ 180 #define osFlagsErrorTimeout 0xFFFFFFFEU /* /< osErrorTimeout (-2). */ 181 #define osFlagsErrorResource 0xFFFFFFFDU /* /< osErrorResource (-3). */ 182 #define osFlagsErrorParameter 0xFFFFFFFCU /* /< osErrorParameter (-4). */ 183 #define osFlagsErrorISR 0xFFFFFFFAU /* /< osErrorISR (-6). */ 184 185 /* Thread attributes (attr_bits in \ref osThreadAttr_t). */ 186 #define osThreadDetached 0x00000000U /* /< Thread created in detached mode (default) */ 187 #define osThreadJoinable 0x00000001U /* /< Thread created in joinable mode */ 188 189 /* Mutex attributes (attr_bits in \ref osMutexAttr_t). */ 190 #define osMutexRecursive 0x00000001U /* /< Recursive mutex. */ 191 #define osMutexPrioInherit 0x00000002U /* /< Priority inherit protocol. */ 192 #define osMutexRobust 0x00000008U /* /< Robust mutex. */ 193 194 /* / Status code values returned by CMSIS-RTOS functions. */ 195 typedef enum { 196 osOK = 0, /* /< Operation completed successfully. */ 197 osError = -1, /* /< Unspecified RTOS error: run-time error but no other error message fits. */ 198 osErrorTimeout = -2, /* /< Operation not completed within the timeout period. */ 199 osErrorResource = -3, /* /< Resource not available. */ 200 osErrorParameter = -4, /* /< Parameter error. */ 201 osErrorNoMemory = -5, /* /< System is out of memory: it was impossible to allocate or reserve memory for the operation. */ 202 osErrorISR = -6, /* /< Not allowed in ISR context: the function cannot be called from interrupt service routines. */ 203 osStatusReserved = 0x7FFFFFFF /* /< Prevents enum down-size compiler optimization. */ 204 } osStatus_t; 205 206 207 /* / \details Thread ID identifies the thread. */ 208 typedef void *osThreadId_t; 209 210 /* / \details Timer ID identifies the timer. */ 211 typedef void *osTimerId_t; 212 213 /* / \details Event Flags ID identifies the event flags. */ 214 typedef void *osEventFlagsId_t; 215 216 /* / \details Mutex ID identifies the mutex. */ 217 typedef void *osMutexId_t; 218 219 /* / \details Semaphore ID identifies the semaphore. */ 220 typedef void *osSemaphoreId_t; 221 222 /* / \details Memory Pool ID identifies the memory pool. */ 223 typedef void *osMemoryPoolId_t; 224 225 /* / \details Message Queue ID identifies the message queue. */ 226 typedef void *osMessageQueueId_t; 227 228 229 #ifndef TZ_MODULEID_T 230 #define TZ_MODULEID_T 231 /* / \details Data type that identifies secure software modules called by a process. */ 232 typedef uint32_t TZ_ModuleId_t; 233 #endif 234 235 236 /* / Attributes structure for thread. */ 237 typedef struct { 238 const char *name; /* /< name of the thread */ 239 uint32_t attr_bits; /* /< attribute bits */ 240 void *cb_mem; /* /< memory for control block */ 241 uint32_t cb_size; /* /< size of provided memory for control block */ 242 void *stack_mem; /* /< memory for stack */ 243 uint32_t stack_size; /* /< size of stack */ 244 osPriority_t priority; /* /< initial thread priority (default: osPriorityNormal) */ 245 TZ_ModuleId_t tz_module; /* /< TrustZone module identifier */ 246 uint32_t reserved; /* /< reserved (must be 0) */ 247 } osThreadAttr_t; 248 249 /* / Attributes structure for timer. */ 250 typedef struct { 251 const char *name; /* /< name of the timer */ 252 uint32_t attr_bits; /* /< attribute bits */ 253 void *cb_mem; /* /< memory for control block */ 254 uint32_t cb_size; /* /< size of provided memory for control block */ 255 } osTimerAttr_t; 256 257 /* / Attributes structure for event flags. */ 258 typedef struct { 259 const char *name; /* /< name of the event flags */ 260 uint32_t attr_bits; /* /< attribute bits */ 261 void *cb_mem; /* /< memory for control block */ 262 uint32_t cb_size; /* /< size of provided memory for control block */ 263 } osEventFlagsAttr_t; 264 265 /* / Attributes structure for mutex. */ 266 typedef struct { 267 const char *name; /* /< name of the mutex */ 268 uint32_t attr_bits; /* /< attribute bits */ 269 void *cb_mem; /* /< memory for control block */ 270 uint32_t cb_size; /* /< size of provided memory for control block */ 271 } osMutexAttr_t; 272 273 /* / Attributes structure for semaphore. */ 274 typedef struct { 275 const char *name; /* /< name of the semaphore */ 276 uint32_t attr_bits; /* /< attribute bits */ 277 void *cb_mem; /* /< memory for control block */ 278 uint32_t cb_size; /* /< size of provided memory for control block */ 279 } osSemaphoreAttr_t; 280 281 /* / Attributes structure for memory pool. */ 282 typedef struct { 283 const char *name; /* /< name of the memory pool */ 284 uint32_t attr_bits; /* /< attribute bits */ 285 void *cb_mem; /* /< memory for control block */ 286 uint32_t cb_size; /* /< size of provided memory for control block */ 287 void *mp_mem; /* /< memory for data storage */ 288 uint32_t mp_size; /* /< size of provided memory for data storage */ 289 } osMemoryPoolAttr_t; 290 291 /* / Attributes structure for message queue. */ 292 typedef struct { 293 const char *name; /* /< name of the message queue */ 294 uint32_t attr_bits; /* /< attribute bits */ 295 void *cb_mem; /* /< memory for control block */ 296 uint32_t cb_size; /* /< size of provided memory for control block */ 297 void *mq_mem; /* /< memory for data storage */ 298 uint32_t mq_size; /* /< size of provided memory for data storage */ 299 } osMessageQueueAttr_t; 300 301 302 /* ==== Kernel Management Functions ==== */ 303 304 /* / Initialize the RTOS Kernel. */ 305 /* / \return status code that indicates the execution status of the function. */ 306 osStatus_t osKernelInitialize(void); 307 308 /* / Get RTOS Kernel Information. */ 309 /* / \param[out] version pointer to buffer for retrieving version information. */ 310 /* / \param[out] id_buf pointer to buffer for retrieving kernel identification string. */ 311 /* / \param[in] id_size size of buffer for kernel identification string. */ 312 /* / \return status code that indicates the execution status of the function. */ 313 osStatus_t osKernelGetInfo(osVersion_t *version, char *id_buf, uint32_t id_size); 314 315 /* / Get the current RTOS Kernel state. */ 316 /* / \return current RTOS Kernel state. */ 317 osKernelState_t osKernelGetState(void); 318 319 /* / Start the RTOS Kernel scheduler. */ 320 /* / \return status code that indicates the execution status of the function. */ 321 osStatus_t osKernelStart(void); 322 323 /* / Lock the RTOS Kernel scheduler. */ 324 /* / \return previous lock state (1 - locked, 0 - not locked, error code if negative). */ 325 int32_t osKernelLock(void); 326 327 /* / Unlock the RTOS Kernel scheduler. */ 328 /* / \return previous lock state (1 - locked, 0 - not locked, error code if negative). */ 329 int32_t osKernelUnlock(void); 330 331 /* / Restore the RTOS Kernel scheduler lock state. */ 332 /* / \param[in] lock lock state obtained by \ref osKernelLock or \ref osKernelUnlock. */ 333 /* / \return new lock state (1 - locked, 0 - not locked, error code if negative). */ 334 int32_t osKernelRestoreLock(int32_t lock); 335 336 /* / Suspend the RTOS Kernel scheduler. */ 337 /* / \return time in ticks, for how long the system can sleep or power-down. */ 338 uint32_t osKernelSuspend(void); 339 340 /* / Resume the RTOS Kernel scheduler. */ 341 /* / \param[in] sleep_ticks time in ticks for how long the system was in sleep or power-down mode. */ 342 void osKernelResume(uint32_t sleep_ticks); 343 344 /* / Get the RTOS kernel tick count. */ 345 /* / \return RTOS kernel current tick count. */ 346 uint32_t osKernelGetTickCount(void); 347 348 /* / Get the RTOS kernel tick frequency. */ 349 /* / \return frequency of the kernel tick in hertz, i.e. kernel ticks per second. */ 350 uint32_t osKernelGetTickFreq(void); 351 352 /* / Get the RTOS kernel system timer count. */ 353 /* / \return RTOS kernel current system timer count as 32-bit value. */ 354 uint32_t osKernelGetSysTimerCount(void); 355 356 /* / Get the RTOS kernel system timer frequency. */ 357 /* / \return frequency of the system timer in hertz, i.e. timer ticks per second. */ 358 uint32_t osKernelGetSysTimerFreq(void); 359 360 361 /* ==== Thread Management Functions ==== */ 362 363 /* / Create a thread and add it to Active Threads. */ 364 /* / \param[in] func thread function. */ 365 /* / \param[in] argument pointer that is passed to the thread function as start argument. */ 366 /* / \param[in] attr thread attributes; NULL: default values. */ 367 /* / \return thread ID for reference by other functions or NULL in case of error. */ 368 osThreadId_t osThreadNew(osThreadFunc_t func, void *argument, const osThreadAttr_t *attr); 369 370 /* / Get name of a thread. */ 371 /* / \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId. */ 372 /* / \return name as NULL terminated string. */ 373 const char *osThreadGetName(osThreadId_t thread_id); 374 375 /* / Return the thread ID of the current running thread. */ 376 /* / \return thread ID for reference by other functions or NULL in case of error. */ 377 osThreadId_t osThreadGetId(void); 378 379 /* / Get current thread state of a thread. */ 380 /* / \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId. */ 381 /* / \return current thread state of the specified thread. */ 382 osThreadState_t osThreadGetState(osThreadId_t thread_id); 383 384 /* / Get stack size of a thread. */ 385 /* / \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId. */ 386 /* / \return stack size in bytes. */ 387 uint32_t osThreadGetStackSize(osThreadId_t thread_id); 388 389 /* / Get available stack space of a thread based on stack watermark recording during execution. */ 390 /* / \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId. */ 391 /* / \return remaining stack space in bytes. */ 392 uint32_t osThreadGetStackSpace(osThreadId_t thread_id); 393 394 /* / Change priority of a thread. */ 395 /* / \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId. */ 396 /* / \param[in] priority new priority value for the thread function. */ 397 /* / \return status code that indicates the execution status of the function. */ 398 osStatus_t osThreadSetPriority(osThreadId_t thread_id, osPriority_t priority); 399 400 /* / Get current priority of a thread. */ 401 /* / \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId. */ 402 /* / \return current priority value of the specified thread. */ 403 osPriority_t osThreadGetPriority(osThreadId_t thread_id); 404 405 /* / Pass control to next thread that is in state \b READY. */ 406 /* / \return status code that indicates the execution status of the function. */ 407 osStatus_t osThreadYield(void); 408 409 /* / Suspend execution of a thread. */ 410 /* / \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId. */ 411 /* / \return status code that indicates the execution status of the function. */ 412 osStatus_t osThreadSuspend(osThreadId_t thread_id); 413 414 /* / Resume execution of a thread. */ 415 /* / \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId. */ 416 /* / \return status code that indicates the execution status of the function. */ 417 osStatus_t osThreadResume(osThreadId_t thread_id); 418 419 /* / Detach a thread (thread storage can be reclaimed when thread terminates). */ 420 /* / \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId. */ 421 /* / \return status code that indicates the execution status of the function. */ 422 osStatus_t osThreadDetach(osThreadId_t thread_id); 423 424 /* / Wait for specified thread to terminate. */ 425 /* / \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId. */ 426 /* / \return status code that indicates the execution status of the function. */ 427 osStatus_t osThreadJoin(osThreadId_t thread_id); 428 429 /* / Terminate execution of current running thread. */ 430 __NO_RETURN void osThreadExit(void); 431 432 /* / Terminate execution of a thread. */ 433 /* / \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId. */ 434 /* / \return status code that indicates the execution status of the function. */ 435 osStatus_t osThreadTerminate(osThreadId_t thread_id); 436 437 /* / Get number of active threads. */ 438 /* / \return number of active threads. */ 439 uint32_t osThreadGetCount(void); 440 441 /* / Enumerate active threads. */ 442 /* / \param[out] thread_array pointer to array for retrieving thread IDs. */ 443 /* / \param[in] array_items maximum number of items in array for retrieving thread IDs. */ 444 /* / \return number of enumerated threads. */ 445 uint32_t osThreadEnumerate(osThreadId_t *thread_array, uint32_t array_items); 446 447 448 /* ==== Thread Flags Functions ==== */ 449 450 /* / Set the specified Thread Flags of a thread. */ 451 /* / \param[in] thread_id thread ID obtained by \ref osThreadNew or \ref osThreadGetId. */ 452 /* / \param[in] flags specifies the flags of the thread that shall be set. */ 453 /* / \return thread flags after setting or error code if highest bit set. */ 454 uint32_t osThreadFlagsSet(osThreadId_t thread_id, uint32_t flags); 455 456 /* / Clear the specified Thread Flags of current running thread. */ 457 /* / \param[in] flags specifies the flags of the thread that shall be cleared. */ 458 /* / \return thread flags before clearing or error code if highest bit set. */ 459 uint32_t osThreadFlagsClear(uint32_t flags); 460 461 /* / Get the current Thread Flags of current running thread. */ 462 /* / \return current thread flags. */ 463 uint32_t osThreadFlagsGet(void); 464 465 /* / Wait for one or more Thread Flags of the current running thread to become signaled. */ 466 /* / \param[in] flags specifies the flags to wait for. */ 467 /* / \param[in] options specifies flags options (osFlagsXxxx). */ 468 /* / \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. */ 469 /* / \return thread flags before clearing or error code if highest bit set. */ 470 uint32_t osThreadFlagsWait(uint32_t flags, uint32_t options, uint32_t timeout); 471 472 473 /* ==== Generic Wait Functions ==== */ 474 475 /* / Wait for Timeout (Time Delay). */ 476 /* / \param[in] ticks \ref CMSIS_RTOS_TimeOutValue "time ticks" value */ 477 /* / \return status code that indicates the execution status of the function. */ 478 osStatus_t osDelay(uint32_t ticks); 479 480 /* / Wait until specified time. */ 481 /* / \param[in] ticks absolute time in ticks */ 482 /* / \return status code that indicates the execution status of the function. */ 483 osStatus_t osDelayUntil(uint32_t ticks); 484 485 486 /* ==== Timer Management Functions ==== */ 487 488 /* / Create and Initialize a timer. */ 489 /* / \param[in] func function pointer to callback function. */ 490 /* / \param[in] type \ref osTimerOnce for one-shot or \ref osTimerPeriodic for periodic behavior. */ 491 /* / \param[in] argument argument to the timer callback function. */ 492 /* / \param[in] attr timer attributes; NULL: default values. */ 493 /* / \return timer ID for reference by other functions or NULL in case of error. */ 494 osTimerId_t osTimerNew(osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr); 495 496 /* / Get name of a timer. */ 497 /* / \param[in] timer_id timer ID obtained by \ref osTimerNew. */ 498 /* / \return name as NULL terminated string. */ 499 const char *osTimerGetName(osTimerId_t timer_id); 500 501 /* / Start or restart a timer. */ 502 /* / \param[in] timer_id timer ID obtained by \ref osTimerNew. */ 503 /* / \param[in] ticks \ref CMSIS_RTOS_TimeOutValue "time ticks" value of the timer. */ 504 /* / \return status code that indicates the execution status of the function. */ 505 osStatus_t osTimerStart(osTimerId_t timer_id, uint32_t ticks); 506 507 /* / Stop a timer. */ 508 /* / \param[in] timer_id timer ID obtained by \ref osTimerNew. */ 509 /* / \return status code that indicates the execution status of the function. */ 510 osStatus_t osTimerStop(osTimerId_t timer_id); 511 512 /* / Check if a timer is running. */ 513 /* / \param[in] timer_id timer ID obtained by \ref osTimerNew. */ 514 /* / \return 0 not running, 1 running. */ 515 uint32_t osTimerIsRunning(osTimerId_t timer_id); 516 517 /* / Delete a timer. */ 518 /* / \param[in] timer_id timer ID obtained by \ref osTimerNew. */ 519 /* / \return status code that indicates the execution status of the function. */ 520 osStatus_t osTimerDelete(osTimerId_t timer_id); 521 522 523 /* ==== Event Flags Management Functions ==== */ 524 525 /* / Create and Initialize an Event Flags object. */ 526 /* / \param[in] attr event flags attributes; NULL: default values. */ 527 /* / \return event flags ID for reference by other functions or NULL in case of error. */ 528 osEventFlagsId_t osEventFlagsNew(const osEventFlagsAttr_t *attr); 529 530 /* / Get name of an Event Flags object. */ 531 /* / \param[in] ef_id event flags ID obtained by \ref osEventFlagsNew. */ 532 /* / \return name as NULL terminated string. */ 533 const char *osEventFlagsGetName(osEventFlagsId_t ef_id); 534 535 /* / Set the specified Event Flags. */ 536 /* / \param[in] ef_id event flags ID obtained by \ref osEventFlagsNew. */ 537 /* / \param[in] flags specifies the flags that shall be set. */ 538 /* / \return event flags after setting or error code if highest bit set. */ 539 uint32_t osEventFlagsSet(osEventFlagsId_t ef_id, uint32_t flags); 540 541 /* / Clear the specified Event Flags. */ 542 /* / \param[in] ef_id event flags ID obtained by \ref osEventFlagsNew. */ 543 /* / \param[in] flags specifies the flags that shall be cleared. */ 544 /* / \return event flags before clearing or error code if highest bit set. */ 545 uint32_t osEventFlagsClear(osEventFlagsId_t ef_id, uint32_t flags); 546 547 /* / Get the current Event Flags. */ 548 /* / \param[in] ef_id event flags ID obtained by \ref osEventFlagsNew. */ 549 /* / \return current event flags. */ 550 uint32_t osEventFlagsGet(osEventFlagsId_t ef_id); 551 552 /* / Wait for one or more Event Flags to become signaled. */ 553 /* / \param[in] ef_id event flags ID obtained by \ref osEventFlagsNew. */ 554 /* / \param[in] flags specifies the flags to wait for. */ 555 /* / \param[in] options specifies flags options (osFlagsXxxx). */ 556 /* / \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. */ 557 /* / \return event flags before clearing or error code if highest bit set. */ 558 uint32_t osEventFlagsWait(osEventFlagsId_t ef_id, uint32_t flags, uint32_t options, uint32_t timeout); 559 560 /* / Delete an Event Flags object. */ 561 /* / \param[in] ef_id event flags ID obtained by \ref osEventFlagsNew. */ 562 /* / \return status code that indicates the execution status of the function. */ 563 osStatus_t osEventFlagsDelete(osEventFlagsId_t ef_id); 564 565 566 /* ==== Mutex Management Functions ==== */ 567 568 /* / Create and Initialize a Mutex object. */ 569 /* / \param[in] attr mutex attributes; NULL: default values. */ 570 /* / \return mutex ID for reference by other functions or NULL in case of error. */ 571 osMutexId_t osMutexNew(const osMutexAttr_t *attr); 572 573 /* / Get name of a Mutex object. */ 574 /* / \param[in] mutex_id mutex ID obtained by \ref osMutexNew. */ 575 /* / \return name as NULL terminated string. */ 576 const char *osMutexGetName(osMutexId_t mutex_id); 577 578 /* / Acquire a Mutex or timeout if it is locked. */ 579 /* / \param[in] mutex_id mutex ID obtained by \ref osMutexNew. */ 580 /* / \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. */ 581 /* / \return status code that indicates the execution status of the function. */ 582 osStatus_t osMutexAcquire(osMutexId_t mutex_id, uint32_t timeout); 583 584 /* / Release a Mutex that was acquired by \ref osMutexAcquire. */ 585 /* / \param[in] mutex_id mutex ID obtained by \ref osMutexNew. */ 586 /* / \return status code that indicates the execution status of the function. */ 587 osStatus_t osMutexRelease(osMutexId_t mutex_id); 588 589 /* / Get Thread which owns a Mutex object. */ 590 /* / \param[in] mutex_id mutex ID obtained by \ref osMutexNew. */ 591 /* / \return thread ID of owner thread or NULL when mutex was not acquired. */ 592 osThreadId_t osMutexGetOwner(osMutexId_t mutex_id); 593 594 /* / Delete a Mutex object. */ 595 /* / \param[in] mutex_id mutex ID obtained by \ref osMutexNew. */ 596 /* / \return status code that indicates the execution status of the function. */ 597 osStatus_t osMutexDelete(osMutexId_t mutex_id); 598 599 600 /* ==== Semaphore Management Functions ==== */ 601 602 /* / Create and Initialize a Semaphore object. */ 603 /* / \param[in] max_count maximum number of available tokens. */ 604 /* / \param[in] initial_count initial number of available tokens. */ 605 /* / \param[in] attr semaphore attributes; NULL: default values. */ 606 /* / \return semaphore ID for reference by other functions or NULL in case of error. */ 607 osSemaphoreId_t osSemaphoreNew(uint32_t max_count, uint32_t initial_count, const osSemaphoreAttr_t *attr); 608 609 /* / Get name of a Semaphore object. */ 610 /* / \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew. */ 611 /* / \return name as NULL terminated string. */ 612 const char *osSemaphoreGetName(osSemaphoreId_t semaphore_id); 613 614 /* / Acquire a Semaphore token or timeout if no tokens are available. */ 615 /* / \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew. */ 616 /* / \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. */ 617 /* / \return status code that indicates the execution status of the function. */ 618 osStatus_t osSemaphoreAcquire(osSemaphoreId_t semaphore_id, uint32_t timeout); 619 620 /* / Release a Semaphore token up to the initial maximum count. */ 621 /* / \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew. */ 622 /* / \return status code that indicates the execution status of the function. */ 623 osStatus_t osSemaphoreRelease(osSemaphoreId_t semaphore_id); 624 625 /* / Get current Semaphore token count. */ 626 /* / \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew. */ 627 /* / \return number of tokens available. */ 628 uint32_t osSemaphoreGetCount(osSemaphoreId_t semaphore_id); 629 630 /* / Delete a Semaphore object. */ 631 /* / \param[in] semaphore_id semaphore ID obtained by \ref osSemaphoreNew. */ 632 /* / \return status code that indicates the execution status of the function. */ 633 osStatus_t osSemaphoreDelete(osSemaphoreId_t semaphore_id); 634 635 636 /* ==== Memory Pool Management Functions ==== */ 637 638 /* / Create and Initialize a Memory Pool object. */ 639 /* / \param[in] block_count maximum number of memory blocks in memory pool. */ 640 /* / \param[in] block_size memory block size in bytes. */ 641 /* / \param[in] attr memory pool attributes; NULL: default values. */ 642 /* / \return memory pool ID for reference by other functions or NULL in case of error. */ 643 osMemoryPoolId_t osMemoryPoolNew(uint32_t block_count, uint32_t block_size, const osMemoryPoolAttr_t *attr); 644 645 /* / Get name of a Memory Pool object. */ 646 /* / \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew. */ 647 /* / \return name as NULL terminated string. */ 648 const char *osMemoryPoolGetName(osMemoryPoolId_t mp_id); 649 650 /* / Allocate a memory block from a Memory Pool. */ 651 /* / \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew. */ 652 /* / \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. */ 653 /* / \return address of the allocated memory block or NULL in case of no memory is available. */ 654 void *osMemoryPoolAlloc(osMemoryPoolId_t mp_id, uint32_t timeout); 655 656 /* / Return an allocated memory block back to a Memory Pool. */ 657 /* / \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew. */ 658 /* / \param[in] block address of the allocated memory block to be returned to the memory pool. */ 659 /* / \return status code that indicates the execution status of the function. */ 660 osStatus_t osMemoryPoolFree(osMemoryPoolId_t mp_id, void *block); 661 662 /* / Get maximum number of memory blocks in a Memory Pool. */ 663 /* / \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew. */ 664 /* / \return maximum number of memory blocks. */ 665 uint32_t osMemoryPoolGetCapacity(osMemoryPoolId_t mp_id); 666 667 /* / Get memory block size in a Memory Pool. */ 668 /* / \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew. */ 669 /* / \return memory block size in bytes. */ 670 uint32_t osMemoryPoolGetBlockSize(osMemoryPoolId_t mp_id); 671 672 /* / Get number of memory blocks used in a Memory Pool. */ 673 /* / \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew. */ 674 /* / \return number of memory blocks used. */ 675 uint32_t osMemoryPoolGetCount(osMemoryPoolId_t mp_id); 676 677 /* / Get number of memory blocks available in a Memory Pool. */ 678 /* / \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew. */ 679 /* / \return number of memory blocks available. */ 680 uint32_t osMemoryPoolGetSpace(osMemoryPoolId_t mp_id); 681 682 /* / Delete a Memory Pool object. */ 683 /* / \param[in] mp_id memory pool ID obtained by \ref osMemoryPoolNew. */ 684 /* / \return status code that indicates the execution status of the function. */ 685 osStatus_t osMemoryPoolDelete(osMemoryPoolId_t mp_id); 686 687 688 /* ==== Message Queue Management Functions ==== */ 689 690 /* / Create and Initialize a Message Queue object. */ 691 /* / \param[in] msg_count maximum number of messages in queue. */ 692 /* / \param[in] msg_size maximum message size in bytes. */ 693 /* / \param[in] attr message queue attributes; NULL: default values. */ 694 /* / \return message queue ID for reference by other functions or NULL in case of error. */ 695 osMessageQueueId_t osMessageQueueNew(uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr); 696 697 /* / Get name of a Message Queue object. */ 698 /* / \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew. */ 699 /* / \return name as NULL terminated string. */ 700 const char *osMessageQueueGetName(osMessageQueueId_t mq_id); 701 702 /* / Put a Message into a Queue or timeout if Queue is full. */ 703 /* / \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew. */ 704 /* / \param[in] msg_ptr pointer to buffer with message to put into a queue. */ 705 /* / \param[in] msg_prio message priority. */ 706 /* / \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. */ 707 /* / \return status code that indicates the execution status of the function. */ 708 osStatus_t osMessageQueuePut(osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout); 709 710 /* / Get a Message from a Queue or timeout if Queue is empty. */ 711 /* / \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew. */ 712 /* / \param[out] msg_ptr pointer to buffer for message to get from a queue. */ 713 /* / \param[out] msg_prio pointer to buffer for message priority or NULL. */ 714 /* / \param[in] timeout \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. */ 715 /* / \return status code that indicates the execution status of the function. */ 716 osStatus_t osMessageQueueGet(osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout); 717 718 /* / Get maximum number of messages in a Message Queue. */ 719 /* / \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew. */ 720 /* / \return maximum number of messages. */ 721 uint32_t osMessageQueueGetCapacity(osMessageQueueId_t mq_id); 722 723 /* / Get maximum message size in a Memory Pool. */ 724 /* / \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew. */ 725 /* / \return maximum message size in bytes. */ 726 uint32_t osMessageQueueGetMsgSize(osMessageQueueId_t mq_id); 727 728 /* / Get number of queued messages in a Message Queue. */ 729 /* / \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew. */ 730 /* / \return number of queued messages. */ 731 uint32_t osMessageQueueGetCount(osMessageQueueId_t mq_id); 732 733 /* / Get number of available slots for messages in a Message Queue. */ 734 /* / \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew. */ 735 /* / \return number of available slots for messages. */ 736 uint32_t osMessageQueueGetSpace(osMessageQueueId_t mq_id); 737 738 /* / Reset a Message Queue to initial empty state. */ 739 /* / \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew. */ 740 /* / \return status code that indicates the execution status of the function. */ 741 osStatus_t osMessageQueueReset(osMessageQueueId_t mq_id); 742 743 /* / Delete a Message Queue object. */ 744 /* / \param[in] mq_id message queue ID obtained by \ref osMessageQueueNew. */ 745 /* / \return status code that indicates the execution status of the function. */ 746 osStatus_t osMessageQueueDelete(osMessageQueueId_t mq_id); 747 748 749 #ifdef __cplusplus 750 } 751 #endif 752 753 #endif /* CMSIS_OS2_H_ */ 754