/*
 * Copyright (c) 2013-2021 Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the License); you may
 * not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * -----------------------------------------------------------------------------
 *
 * $Revision:   V5.5.2
 *
 * Project:     CMSIS-RTOS RTX
 * Title:       RTX Configuration definitions
 *
 * -----------------------------------------------------------------------------
 */
 
#ifndef RTX_CONFIG_H_
#define RTX_CONFIG_H_
 
#ifdef   _RTE_
#include "RTE_Components.h"
#ifdef    RTE_RTX_CONFIG_H
#include  RTE_RTX_CONFIG_H
#endif
#endif
 
//-------- <<< Use Configuration Wizard in Context Menu >>> --------------------
 
// System Configuration
// =======================
 
//   Global Dynamic Memory size [bytes] <0-1073741824:8>
//    Defines the combined global dynamic memory size.
//    Default: 32768
#ifndef OS_DYNAMIC_MEM_SIZE
#define OS_DYNAMIC_MEM_SIZE         32768
#endif
 
//   Kernel Tick Frequency [Hz] <1-1000000>
//    Defines base time unit for delays and timeouts.
//    Default: 1000 (1ms tick)
#ifndef OS_TICK_FREQ
#define OS_TICK_FREQ                1000
#endif
 
//   Round-Robin Thread switching
//    Enables Round-Robin Thread switching.
#ifndef OS_ROBIN_ENABLE
#define OS_ROBIN_ENABLE             1
#endif
 
//     Round-Robin Timeout <1-1000>
//      Defines how many ticks a thread will execute before a thread switch.
//      Default: 5
#ifndef OS_ROBIN_TIMEOUT
#define OS_ROBIN_TIMEOUT            5
#endif
 
//   
 
//   ISR FIFO Queue
//      <4=>  4 entries    <8=>   8 entries   <12=>  12 entries   <16=>  16 entries
//     <24=> 24 entries   <32=>  32 entries   <48=>  48 entries   <64=>  64 entries
//     <96=> 96 entries  <128=> 128 entries  <196=> 196 entries  <256=> 256 entries
//    RTOS Functions called from ISR store requests to this buffer.
//    Default: 16 entries
#ifndef OS_ISR_FIFO_QUEUE
#define OS_ISR_FIFO_QUEUE           16
#endif
 
//   Object Memory usage counters
//    Enables object memory usage counters (requires RTX source variant).
#ifndef OS_OBJ_MEM_USAGE
#define OS_OBJ_MEM_USAGE            0
#endif
 
// 
 
// Thread Configuration
// =======================
 
//   Object specific Memory allocation
//    Enables object specific memory allocation.
#ifndef OS_THREAD_OBJ_MEM
#define OS_THREAD_OBJ_MEM           0
#endif
 
//     Number of user Threads <1-1000>
//      Defines maximum number of user threads that can be active at the same time.
//      Applies to user threads with system provided memory for control blocks.
#ifndef OS_THREAD_NUM
#define OS_THREAD_NUM               1
#endif
 
//     Number of user Threads with default Stack size <0-1000>
//      Defines maximum number of user threads with default stack size.
//      Applies to user threads with zero stack size specified.
#ifndef OS_THREAD_DEF_STACK_NUM
#define OS_THREAD_DEF_STACK_NUM     0
#endif
 
//     Total Stack size [bytes] for user Threads with user-provided Stack size <0-1073741824:8>
//      Defines the combined stack size for user threads with user-provided stack size.
//      Applies to user threads with user-provided stack size and system provided memory for stack.
//      Default: 0
#ifndef OS_THREAD_USER_STACK_SIZE
#define OS_THREAD_USER_STACK_SIZE   0
#endif
 
//   
 
//   Default Thread Stack size [bytes] <96-1073741824:8>
//    Defines stack size for threads with zero stack size specified.
//    Default: 3072
#ifndef OS_STACK_SIZE
#define OS_STACK_SIZE               3072
#endif
 
//   Idle Thread Stack size [bytes] <72-1073741824:8>
//    Defines stack size for Idle thread.
//    Default: 512
#ifndef OS_IDLE_THREAD_STACK_SIZE
#define OS_IDLE_THREAD_STACK_SIZE   512
#endif
 
//   Idle Thread TrustZone Module Identifier
//    Defines TrustZone Thread Context Management Identifier.
//    Applies only to cores with TrustZone technology.
//    Default: 0 (not used)
#ifndef OS_IDLE_THREAD_TZ_MOD_ID
#define OS_IDLE_THREAD_TZ_MOD_ID    0
#endif
 
//   Stack overrun checking
//    Enables stack overrun check at thread switch (requires RTX source variant).
//    Enabling this option increases slightly the execution time of a thread switch.
#ifndef OS_STACK_CHECK
#define OS_STACK_CHECK              0
#endif
 
//   Stack usage watermark
//    Initializes thread stack with watermark pattern for analyzing stack usage.
//    Enabling this option increases significantly the execution time of thread creation.
#ifndef OS_STACK_WATERMARK
#define OS_STACK_WATERMARK          0
#endif
 
//   Processor mode for Thread execution
//     <0=> Unprivileged mode
//     <1=> Privileged mode
//    Default: Privileged mode
#ifndef OS_PRIVILEGE_MODE
#define OS_PRIVILEGE_MODE           1
#endif
 
// 
 
// Timer Configuration
// ======================
 
//   Object specific Memory allocation
//    Enables object specific memory allocation.
#ifndef OS_TIMER_OBJ_MEM
#define OS_TIMER_OBJ_MEM            0
#endif
 
//     Number of Timer objects <1-1000>
//      Defines maximum number of objects that can be active at the same time.
//      Applies to objects with system provided memory for control blocks.
#ifndef OS_TIMER_NUM
#define OS_TIMER_NUM                1
#endif
 
//   
 
//   Timer Thread Priority
//      <8=> Low
//     <16=> Below Normal  <24=> Normal  <32=> Above Normal
//     <40=> High
//     <48=> Realtime
//    Defines priority for timer thread
//    Default: High
#ifndef OS_TIMER_THREAD_PRIO
#define OS_TIMER_THREAD_PRIO        40
#endif
 
//   Timer Thread Stack size [bytes] <0-1073741824:8>
//    Defines stack size for Timer thread.
//    May be set to 0 when timers are not used.
//    Default: 512
#ifndef OS_TIMER_THREAD_STACK_SIZE
#define OS_TIMER_THREAD_STACK_SIZE  512
#endif
 
//   Timer Thread TrustZone Module Identifier
//    Defines TrustZone Thread Context Management Identifier.
//    Applies only to cores with TrustZone technology.
//    Default: 0 (not used)
#ifndef OS_TIMER_THREAD_TZ_MOD_ID
#define OS_TIMER_THREAD_TZ_MOD_ID   0
#endif
 
//   Timer Callback Queue entries <0-256>
//    Number of concurrent active timer callback functions.
//    May be set to 0 when timers are not used.
//    Default: 4
#ifndef OS_TIMER_CB_QUEUE
#define OS_TIMER_CB_QUEUE           4
#endif
 
// 
 
// Event Flags Configuration
// ============================
 
//   Object specific Memory allocation
//    Enables object specific memory allocation.
#ifndef OS_EVFLAGS_OBJ_MEM
#define OS_EVFLAGS_OBJ_MEM          0
#endif
 
//     Number of Event Flags objects <1-1000>
//      Defines maximum number of objects that can be active at the same time.
//      Applies to objects with system provided memory for control blocks.
#ifndef OS_EVFLAGS_NUM
#define OS_EVFLAGS_NUM              1
#endif
 
//   
 
// 
 
// Mutex Configuration
// ======================
 
//   Object specific Memory allocation
//    Enables object specific memory allocation.
#ifndef OS_MUTEX_OBJ_MEM
#define OS_MUTEX_OBJ_MEM            0
#endif
 
//     Number of Mutex objects <1-1000>
//      Defines maximum number of objects that can be active at the same time.
//      Applies to objects with system provided memory for control blocks.
#ifndef OS_MUTEX_NUM
#define OS_MUTEX_NUM                1
#endif
 
//   
 
// 
 
// Semaphore Configuration
// ==========================
 
//   Object specific Memory allocation
//    Enables object specific memory allocation.
#ifndef OS_SEMAPHORE_OBJ_MEM
#define OS_SEMAPHORE_OBJ_MEM        0
#endif
 
//     Number of Semaphore objects <1-1000>
//      Defines maximum number of objects that can be active at the same time.
//      Applies to objects with system provided memory for control blocks.
#ifndef OS_SEMAPHORE_NUM
#define OS_SEMAPHORE_NUM            1
#endif
 
//   
 
// 
 
// Memory Pool Configuration
// ============================
 
//   Object specific Memory allocation
//    Enables object specific memory allocation.
#ifndef OS_MEMPOOL_OBJ_MEM
#define OS_MEMPOOL_OBJ_MEM          0
#endif
 
//     Number of Memory Pool objects <1-1000>
//      Defines maximum number of objects that can be active at the same time.
//      Applies to objects with system provided memory for control blocks.
#ifndef OS_MEMPOOL_NUM
#define OS_MEMPOOL_NUM              1
#endif
 
//     Data Storage Memory size [bytes] <0-1073741824:8>
//      Defines the combined data storage memory size.
//      Applies to objects with system provided memory for data storage.
//      Default: 0
#ifndef OS_MEMPOOL_DATA_SIZE
#define OS_MEMPOOL_DATA_SIZE        0
#endif
 
//   
 
// 
 
// Message Queue Configuration
// ==============================
 
//   Object specific Memory allocation
//    Enables object specific memory allocation.
#ifndef OS_MSGQUEUE_OBJ_MEM
#define OS_MSGQUEUE_OBJ_MEM         0
#endif
 
//     Number of Message Queue objects <1-1000>
//      Defines maximum number of objects that can be active at the same time.
//      Applies to objects with system provided memory for control blocks.
#ifndef OS_MSGQUEUE_NUM
#define OS_MSGQUEUE_NUM             1
#endif
 
//     Data Storage Memory size [bytes] <0-1073741824:8>
//      Defines the combined data storage memory size.
//      Applies to objects with system provided memory for data storage.
//      Default: 0
#ifndef OS_MSGQUEUE_DATA_SIZE
#define OS_MSGQUEUE_DATA_SIZE       0
#endif
 
//   
 
// 
 
// Event Recorder Configuration
// ===============================
 
//   Global Initialization
//    Initialize Event Recorder during 'osKernelInitialize'.
#ifndef OS_EVR_INIT
#define OS_EVR_INIT                 0
#endif
 
//     Start recording
//      Start event recording after initialization.
#ifndef OS_EVR_START
#define OS_EVR_START                1
#endif
 
//     Global Event Filter Setup
//      Initial recording level applied to all components.
//       Error events
//       API function call events
//       Operation events
//       Detailed operation events
//     
#ifndef OS_EVR_LEVEL
#define OS_EVR_LEVEL                0x00U
#endif
 
//     RTOS Event Filter Setup
//      Recording levels for RTX components.
//      Only applicable if events for the respective component are generated.
 
//       Memory Management
//        Recording level for Memory Management events.
//         Error events
//         API function call events
//         Operation events
//         Detailed operation events
//       
#ifndef OS_EVR_MEMORY_LEVEL
#define OS_EVR_MEMORY_LEVEL         0x81U
#endif
 
//       Kernel
//        Recording level for Kernel events.
//         Error events
//         API function call events
//         Operation events
//         Detailed operation events
//       
#ifndef OS_EVR_KERNEL_LEVEL
#define OS_EVR_KERNEL_LEVEL         0x81U
#endif
 
//       Thread
//        Recording level for Thread events.
//         Error events
//         API function call events
//         Operation events
//         Detailed operation events
//       
#ifndef OS_EVR_THREAD_LEVEL
#define OS_EVR_THREAD_LEVEL         0x85U
#endif
 
//       Generic Wait
//        Recording level for Generic Wait events.
//         Error events
//         API function call events
//         Operation events
//         Detailed operation events
//       
#ifndef OS_EVR_WAIT_LEVEL
#define OS_EVR_WAIT_LEVEL           0x81U
#endif
 
//       Thread Flags
//        Recording level for Thread Flags events.
//         Error events
//         API function call events
//         Operation events
//         Detailed operation events
//       
#ifndef OS_EVR_THFLAGS_LEVEL
#define OS_EVR_THFLAGS_LEVEL        0x81U
#endif
 
//       Event Flags
//        Recording level for Event Flags events.
//         Error events
//         API function call events
//         Operation events
//         Detailed operation events
//       
#ifndef OS_EVR_EVFLAGS_LEVEL
#define OS_EVR_EVFLAGS_LEVEL        0x81U
#endif
 
//       Timer
//        Recording level for Timer events.
//         Error events
//         API function call events
//         Operation events
//         Detailed operation events
//       
#ifndef OS_EVR_TIMER_LEVEL
#define OS_EVR_TIMER_LEVEL          0x81U
#endif
 
//       Mutex
//        Recording level for Mutex events.
//         Error events
//         API function call events
//         Operation events
//         Detailed operation events
//       
#ifndef OS_EVR_MUTEX_LEVEL
#define OS_EVR_MUTEX_LEVEL          0x81U
#endif
 
//       Semaphore
//        Recording level for Semaphore events.
//         Error events
//         API function call events
//         Operation events
//         Detailed operation events
//       
#ifndef OS_EVR_SEMAPHORE_LEVEL
#define OS_EVR_SEMAPHORE_LEVEL      0x81U
#endif
 
//       Memory Pool
//        Recording level for Memory Pool events.
//         Error events
//         API function call events
//         Operation events
//         Detailed operation events
//       
#ifndef OS_EVR_MEMPOOL_LEVEL
#define OS_EVR_MEMPOOL_LEVEL        0x81U
#endif
 
//       Message Queue
//        Recording level for Message Queue events.
//         Error events
//         API function call events
//         Operation events
//         Detailed operation events
//       
#ifndef OS_EVR_MSGQUEUE_LEVEL
#define OS_EVR_MSGQUEUE_LEVEL       0x81U
#endif
 
//     
 
//   
 
//   RTOS Event Generation
//    Enables event generation for RTX components (requires RTX source variant).
 
//     Memory Management
//      Enables Memory Management event generation.
#ifndef OS_EVR_MEMORY
#define OS_EVR_MEMORY               1
#endif
 
//     Kernel
//      Enables Kernel event generation.
#ifndef OS_EVR_KERNEL
#define OS_EVR_KERNEL               1
#endif
 
//     Thread
//      Enables Thread event generation.
#ifndef OS_EVR_THREAD
#define OS_EVR_THREAD               1
#endif
 
//     Generic Wait
//      Enables Generic Wait event generation.
#ifndef OS_EVR_WAIT
#define OS_EVR_WAIT                 1
#endif
 
//     Thread Flags
//      Enables Thread Flags event generation.
#ifndef OS_EVR_THFLAGS
#define OS_EVR_THFLAGS              1
#endif
 
//     Event Flags
//      Enables Event Flags event generation.
#ifndef OS_EVR_EVFLAGS
#define OS_EVR_EVFLAGS              1
#endif
 
//     Timer
//      Enables Timer event generation.
#ifndef OS_EVR_TIMER
#define OS_EVR_TIMER                1
#endif
 
//     Mutex
//      Enables Mutex event generation.
#ifndef OS_EVR_MUTEX
#define OS_EVR_MUTEX                1
#endif
 
//     Semaphore
//      Enables Semaphore event generation.
#ifndef OS_EVR_SEMAPHORE
#define OS_EVR_SEMAPHORE            1
#endif
 
//     Memory Pool
//      Enables Memory Pool event generation.
#ifndef OS_EVR_MEMPOOL
#define OS_EVR_MEMPOOL              1
#endif
 
//     Message Queue
//      Enables Message Queue event generation.
#ifndef OS_EVR_MSGQUEUE
#define OS_EVR_MSGQUEUE             1
#endif
 
//   
 
// 
 
// Number of Threads which use standard C/C++ library libspace
// (when thread specific memory allocation is not used).
#if (OS_THREAD_OBJ_MEM == 0)
#ifndef OS_THREAD_LIBSPACE_NUM
#define OS_THREAD_LIBSPACE_NUM      4
#endif
#else
#define OS_THREAD_LIBSPACE_NUM      OS_THREAD_NUM
#endif
 
//------------- <<< end of configuration section >>> ---------------------------
 
#endif  // RTX_CONFIG_H_