00001
00025 #ifndef __OSAL_H__
00026 #define __OSAL_H__
00027
00028 #ifdef __cplusplus
00029 extern "C" {
00030 #endif
00031
00032 #include "typedefs.h"
00033
00034
00035 typedef void OSAL_TASK_ARGS;
00036 typedef U32 OSAL_PRIO;
00037 typedef U32 OSAL_STACK_SIZE;
00038 typedef const S8 OSAL_NAME;
00039 typedef U32 OSAL_TICK;
00040 typedef void OSAL_MESSAGE;
00041 typedef U32 OSAL_COUNT;
00042 typedef U32 OSAL_SIZE;
00043 typedef U32 OSAL_MESSAGE_SIZE;
00044 typedef U32 OSAL_TIMEOUT;
00045 typedef void* PHANDLE;
00046 typedef PHANDLE OSAL_TASK;
00047 typedef PHANDLE OSAL_SEMAPHORE;
00048 typedef PHANDLE OSAL_QUEUE;
00049 typedef PHANDLE OSAL_MUTEX;
00050 typedef U32 OSAL_FLAG;
00051 typedef S32 OSAL_ARG;
00052
00062 typedef enum
00063 {
00064 OSAL_QUEUE_FRONT,
00065 OSAL_QUEUE_BACK
00066 } OSAL_QUEUE_LOCATION;
00067
00068 typedef void (*OSAL_TASK_FUNCTION)(void *pArgs);
00069
00070 #ifndef OSAL_FALSE
00071 #define OSAL_FALSE (0)
00072 #endif
00073
00074 #ifndef OSAL_TRUE
00075 #define OSAL_TRUE (~OSAL_FALSE)
00076 #endif
00077
00078 #define OSAL_CALL_DEFAULT OSAL_FALSE
00079 #define OSAL_CALL_FROM_ISR OSAL_TRUE
00080
00081 #define OSAL_IDLE_TASK_PRIORITY 0
00082
00083
00091 typedef enum
00092 {
00093 OSAL_ERROR_NONE,
00094 OSAL_ERROR_INVALID_HANDLE,
00095 OSAL_ERROR_OUT_OF_HANDLES,
00096 OSAL_ERROR_TIMEOUT,
00097 OSAL_ERROR_OUT_OF_MEMORY,
00098 OSAL_ERROR_NOT_ENOUGH_DATA,
00099 OSAL_ERROR_OUT_OF_RANGE,
00100 OSAL_ERROR_NOT_SUPPORTED,
00101 OSAL_ERROR_ILLEGAL_OPERATION,
00102 OSAL_ERROR_NOT_FOUND,
00103 OSAL_ERROR_NOT_AVAILABLE,
00104 OSAL_ERROR_INTERNAL_ERROR,
00105 OSAL_ERROR_NAK,
00106 OSAL_ERROR_NOT_READY,
00107 OSAL_ERROR_INVALID_PARAMETER,
00108 OSAL_ERROR_ALREADY_EXISTS,
00109 OSAL_ERROR_READ_WRITE_ERROR,
00110 OSAL_ERROR_PROTECTED,
00111 OSAL_ERROR_NOT_ACTIVE,
00112 OSAL_ERROR_CANCELLED,
00113 OSAL_ERROR_OVERFLOW,
00114 OSAL_ERROR_STALL,
00115 OSAL_ERROR_BAD_CHECKSUM,
00116 OSAL_ERROR_INVALID,
00117 OSAL_ERROR_QUEUE_EMPTY,
00118 OSAL_ERROR_QUEUE_FULL,
00119 OSAL_ERROR_STACK_OUT_OF_SPACE = 1000,
00120 OSAL_ERROR_TOO_MANY_TASKS,
00121 OSAL_ERROR_DEVICE_NOT_FOUND = 2000,
00122 OSAL_ERROR_UNKNOWN_DEVICE_CMD,
00123 OSAL_ERROR_ILLEGAL_PARAMETER,
00124 OSAL_ERROR_UNKNOWN = 0xFFFFFFFF
00125 } OSAL_ERROR;
00126
00127 #endif
00128
00129
00130
00131
00132
00133
00134 #ifdef OSAL_GLOBALS
00135 #define __EXTERN__
00136 #else
00137 #define __EXTERN__ extern
00138 #endif
00139
00140 __EXTERN__ OSAL_ERROR OSALStart();
00141 __EXTERN__ OSAL_ERROR OSALTaskCreate(OSAL_NAME *pName, OSAL_TASK_FUNCTION func, OSAL_STACK_SIZE stackSize, OSAL_TASK_ARGS *pArgs, OSAL_PRIO prio, OSAL_TASK *pHandle);
00142 __EXTERN__ OSAL_ERROR OSALTaskDelete(OSAL_TASK handle);
00143 __EXTERN__ OSAL_ERROR OSALTaskSuspend(OSAL_TASK handle);
00144 __EXTERN__ OSAL_ERROR OSALTaskResume(OSAL_TASK handle);
00145 __EXTERN__ OSAL_ERROR OSALTaskPrioSet(OSAL_TASK handle, OSAL_PRIO prio);
00146 __EXTERN__ OSAL_ERROR OSALTaskPrioGet(OSAL_TASK handle, OSAL_PRIO *prio);
00147 __EXTERN__ OSAL_ERROR OSALTaskDelay(OSAL_TASK handle, OSAL_TICK *pStartTime, OSAL_TICK ticks);
00148 __EXTERN__ OSAL_ERROR OSALQueueCreate(OSAL_NAME *pName, OSAL_COUNT queueSize, OSAL_MESSAGE_SIZE intemSize, OSAL_QUEUE *pHandle );
00149 __EXTERN__ OSAL_ERROR OSALQueueDelete(OSAL_QUEUE handle);
00150 __EXTERN__ OSAL_ERROR OSALQueueSend(OSAL_QUEUE handle, OSAL_MESSAGE *pMsg, OSAL_QUEUE_LOCATION location, OSAL_TIMEOUT timeout, OSAL_ARG *pHighPrioTaskSwitch, OSAL_FLAG callFromISR);
00151 __EXTERN__ OSAL_ERROR OSALQueueReceive(OSAL_QUEUE handle, OSAL_MESSAGE *pMsg, OSAL_TIMEOUT timeout, OSAL_ARG *pHighPrioTaskSwitch, OSAL_FLAG callFromISR);
00152 __EXTERN__ OSAL_ERROR OSALQueuePeek(OSAL_QUEUE handle, OSAL_MESSAGE *pMsg, OSAL_TIMEOUT timeout);
00153 __EXTERN__ OSAL_ERROR OSALQueueCount(OSAL_QUEUE handle, OSAL_COUNT *pCount);
00154 __EXTERN__ OSAL_ERROR OSALSemaphoreCreate(OSAL_NAME *pName, OSAL_COUNT maxCount, OSAL_COUNT initCount, OSAL_SEMAPHORE *pHandle);
00155 __EXTERN__ OSAL_ERROR OSALSemaphoreDelete(OSAL_SEMAPHORE handle);
00156 __EXTERN__ OSAL_ERROR OSALSemaphoreAcquire(OSAL_SEMAPHORE handle, OSAL_TIMEOUT timeout, OSAL_FLAG callFromISR);
00157 __EXTERN__ OSAL_ERROR OSALSemaphoreRelease(OSAL_SEMAPHORE handle, OSAL_ARG *HighPrioTaskSwitch, OSAL_FLAG callFromISR);
00158 __EXTERN__ OSAL_ERROR OSALMutexCreate(OSAL_NAME *pName, OSAL_MUTEX *pHandle);
00159 __EXTERN__ OSAL_ERROR OSALMutexDelete(OSAL_MUTEX handle);
00160
00161
00162 __EXTERN__ OSAL_TICK OSALGetTickCount();
00163 __EXTERN__ void OSAL_ENTER_CRITICAL();
00164 __EXTERN__ void OSAL_EXIT_CRITICAL();
00165 __EXTERN__ void OSAL_ENTER_ISR(OSAL_ARG *pHighPrioTaskSwitch);
00166 __EXTERN__ void OSAL_EXIT_ISR(OSAL_ARG *pHighPrioTaskSwitch);
00167 __EXTERN__ void OSAL_DISABLE_INTERRUPTS();
00168 __EXTERN__ void OSAL_ENABLE_INTERRUPTS();
00169 __EXTERN__ void OSALIdleHook();
00170 __EXTERN__ void OSALStackOverflowHook(OSAL_TASK *pHandle, OSAL_NAME *pTaskName);
00171 __EXTERN__ void OSALSysTickHook();
00172
00173 #ifdef __cplusplus
00174 }
00175 #endif
00176