00001
00143 #ifndef _IX_OSSL_H
00144 #ifndef __doxygen_hide
00145 #define _IX_OSSL_H
00146 #endif
00147
00148 #ifdef __cplusplus
00149 extern "C"{
00150 #endif
00151
00152
00153 #ifdef __vxworks
00154 #include <private/timerLibP.h>
00155 #endif
00156
00157 #include "ix_os_type.h"
00158 #include "ix_types.h"
00159 #include "ix_error.h"
00160 #include "ix_symbols.h"
00161 #include "os_datatypes.h"
00162
00163
00164
00165
00193
00194
00201 typedef os_thread_t ix_ossl_thread_t;
00202
00209 typedef os_sem_t ix_ossl_sem_t;
00210
00217 typedef os_mutex_t ix_ossl_mutex_t;
00218
00226 typedef struct
00227 {
00228 unsigned long tv_sec;
00229 unsigned long tv_nsec;
00230 } ix_ossl_time_t;
00231
00232
00233
00234
00235
00236
00249 typedef ix_error (*ix_ossl_thread_entry_point_t)(
00250 void* arg,
00251 void** ptrRetObj
00252 );
00253
00264 typedef struct
00265 {
00266 ix_ossl_thread_entry_point_t threadMain;
00267 void* threadArg;
00268 } ix_ossl_thread_main_info_t;
00269
00270
00271
00272
00279 typedef enum
00280 {
00281 IX_OSSL_ERROR_SUCCESS = 0,
00282 IX_OSSL_ERROR_INVALID_ARGUMENTS = OS_INVALID_ATTR,
00283 IX_OSSL_ERROR_INVALID_OPERATION,
00284 IX_OSSL_ERROR_THREAD_CALL_FAILURE,
00285 IX_OSSL_ERROR_INVALID_PID,
00286 IX_OSSL_ERROR_INVALID_TID,
00287 IX_OSSL_ERROR_OS_CALL_FAILURE = OS_FAILURE,
00288 IX_OSSL_ERROR_TIMEOUT = OS_TIMEDOUT,
00289 IX_OSSL_ERROR_NOMEM = OS_NOMEM,
00290 IX_OSSL_ERROR_NOSYS = OS_NOSYS
00291 } ix_ossl_error_code;
00292
00293
00300 typedef enum
00301 {
00302 IX_OSSL_SEM_UNAVAILABLE = OS_SEM_UNVAILABLE,
00303 IX_OSSL_SEM_AVAILABLE = OS_SEM_AVAILABLE
00304 } ix_ossl_sem_state;
00305
00306
00307
00314 typedef enum
00315 {
00316 IX_OSSL_MUTEX_UNLOCK = OS_MUTEX_UNLOCK,
00317 IX_OSSL_MUTEX_LOCK = OS_MUTEX_LOCK
00318 } ix_ossl_mutex_state;
00319
00320
00327 typedef enum
00328 {
00329 IX_OSSL_THREAD_PRI_HIGH = OS_THREAD_PRI_HIGH,
00330 IX_OSSL_THREAD_PRI_MEDIUM = OS_THREAD_PRI_MEDIUM,
00331 IX_OSSL_THREAD_PRI_LOW = OS_THREAD_PRI_LOW
00332 } ix_ossl_thread_priority;
00333
00334
00335
00336
00344 #define IX_OSSL_ERROR_SUCCESS (ix_error)0UL
00345
00353 #if defined __linux
00354 #define IX_OSSL_ERROR_FAILURE (ix_error)1
00355 #endif
00356
00357
00365 #define IX_OSSL_WAIT_FOREVER OS_WAIT_FOREVER
00366
00374 #define IX_OSSL_WAIT_NONE OS_WAIT_NONE
00375
00398 #define BILLION 1000000000
00399
00400
00406 #ifdef __linux
00407 #define TICKS_PER_NSEC (BILLION/HZ)
00408 #endif
00409
00410
00422 #define IX_OSSL_TIME_EQ(a,b) \
00423 ((a).tv_sec == (b).tv_sec && (a).tv_nsec == (b).tv_nsec)
00424
00437 #define IX_OSSL_TIME_GT(a,b) \
00438 ((a).tv_sec > (b).tv_sec || \
00439 ((a).tv_sec == (b).tv_sec && (a).tv_nsec > (b).tv_nsec))
00440
00452 #define IX_OSSL_TIME_LT(a,b) \
00453 ((a).tv_sec < (b).tv_sec || \
00454 ((a).tv_sec == (b).tv_sec && (a).tv_nsec < (b).tv_nsec))
00455
00467 #define IX_OSSL_TIME_ISZERO(a) \
00468 ((a).tv_sec == 0 && (a).tv_nsec == 0)
00469
00479 #define IX_OSSL_TIME_SET(a,b) \
00480 (a).tv_sec = (b).tv_sec; (a).tv_nsec = (b).tv_nsec
00481
00491 #define IX_OSSL_TIME_ADD(a,b) \
00492 (a).tv_sec += (b).tv_sec; \
00493 (a).tv_nsec += (b).tv_nsec; \
00494 if ((a).tv_nsec >= BILLION) \
00495 { \
00496 (a).tv_sec++; \
00497 (a).tv_nsec -= BILLION; }
00498
00508 #define IX_OSSL_TIME_SUB(a,b) \
00509 if ((a).tv_nsec >= (b).tv_nsec) \
00510 { \
00511 (a).tv_sec -= (b).tv_sec; \
00512 (a).tv_nsec -= (b).tv_nsec; \
00513 } \
00514 else \
00515 { \
00516 (a).tv_sec -= ((b).tv_sec + 1); \
00517 (a).tv_nsec += BILLION - (b).tv_nsec; \
00518 }
00519
00529 #define IX_OSSL_TIME_NORMALIZE(a) \
00530 if ((a).tv_nsec >= BILLION) \
00531 { (a).tv_sec++; (a).tv_nsec -= BILLION; } \
00532 else if ((a).tv_nsec < 0) \
00533 { (a).tv_sec--; (a).tv_nsec += BILLION; }
00534
00547 #define IX_OSSL_TIME_VALID(a) \
00548 ((a).tv_nsec >= 0 && (a).tv_nsec < BILLION)
00549
00550
00559 #define IX_OSSL_TIME_ZERO(a) \
00560 (a).tv_sec = 0; (a).tv_nsec = 0
00561
00572 #ifdef __linux
00573 #define IX_OSSL_TIME_CONVERT_TO_TICK(a,b) \
00574 (a) = (b).tv_sec * HZ + \
00575 (b).tv_nsec / TICKS_PER_NSEC + \
00576 (((b).tv_nsec % TICKS_PER_NSEC > (TICKS_PER_NSEC/2)) ? 1 : 0)
00577 #else
00578 #define IX_OSSL_TIME_CONVERT_TO_TICK(a,b) \
00579 TV_CONVERT_TO_TICK(a,b)
00580 #endif
00581
00582
00583
00584
00585
00605 IX_EXPORT_FUNCTION
00606 ix_error ix_ossl_thread_create(
00607 ix_ossl_thread_entry_point_t entryPoint,
00608 void* arg,
00609 ix_ossl_thread_t* ptrTid
00610 );
00611
00622 IX_EXPORT_FUNCTION
00623 ix_error ix_ossl_thread_get_id(ix_ossl_thread_t* ptrTid);
00624
00625
00643 IX_EXPORT_FUNCTION
00644 void* ix_ossl_thread_main_wrapper(void* ptrThreadInfo);
00645
00646
00665 IX_EXPORT_FUNCTION
00666 void ix_ossl_thread_exit(ix_error retError, void* retObj);
00667
00686 IX_EXPORT_FUNCTION
00687 ix_error ix_ossl_thread_kill(ix_ossl_thread_t tid);
00688
00689
00690
00706 IX_EXPORT_FUNCTION
00707 ix_error ix_ossl_thread_set_priority(
00708 ix_ossl_thread_t tid,
00709 ix_ossl_thread_priority priority
00710 );
00711
00712
00725 IX_EXPORT_FUNCTION
00726 ix_error ix_ossl_thread_delay(
00727 int ticks
00728 );
00729
00730
00751 IX_EXPORT_FUNCTION
00752 int os_thread_create(
00753 void * (*start_routine)(void *),
00754 ix_ossl_thread_main_info_t *ptrThreadInfo,
00755 ix_ossl_thread_t* ptrTid,
00756 os_error* osError
00757 );
00758
00759
00769 IX_EXPORT_FUNCTION
00770 int os_thread_get_id(ix_ossl_thread_t* ptrTid);
00771
00772
00785 IX_EXPORT_FUNCTION
00786 int os_thread_exit(void* ptrRetObj);
00787
00788
00799 IX_EXPORT_FUNCTION
00800 int os_thread_kill(ix_ossl_thread_t tid, os_error* osError);
00801
00802
00817 IX_EXPORT_FUNCTION
00818 ix_error os_thread_set_priority(
00819 ix_ossl_thread_t* tid,
00820 ix_ossl_thread_priority priority,
00821 os_error* osError
00822 );
00823
00824
00834 IX_EXPORT_FUNCTION
00835 ix_error ix_ossl_tick_get(
00836 int *pticks
00837 );
00838
00839
00850 IX_EXPORT_FUNCTION
00851 int os_sleep(ix_uint32 sleeptime_ms, os_error* osError);
00852
00853
00865 IX_EXPORT_FUNCTION
00866 int os_sleep_tick(ix_uint32 sleeptime_ticks, os_error *osError);
00867
00868
00882 IX_EXPORT_FUNCTION
00883 int os_time_get(ix_ossl_time_t *ptime, os_error *osError);
00884
00885
00902 IX_EXPORT_FUNCTION
00903 ix_error ix_ossl_sem_init(int start_value, ix_ossl_sem_t* sid);
00904
00923 IX_EXPORT_FUNCTION
00924 ix_error ix_ossl_sem_take(
00925 ix_ossl_sem_t sid,
00926 ix_uint32 timeout
00927 );
00928
00940 IX_EXPORT_FUNCTION
00941 ix_error ix_ossl_sem_give(ix_ossl_sem_t sid);
00942
00943
00959 IX_EXPORT_FUNCTION
00960 ix_error ix_ossl_sem_flush(ix_ossl_sem_t sid, int* result);
00961
00962
00975 IX_EXPORT_FUNCTION
00976 ix_error ix_ossl_sem_fini(ix_ossl_sem_t sid);
00977
00978
00990 IX_EXPORT_FUNCTION
00991 int os_thread_sema_create(
00992 int value,
00993 ix_ossl_sem_t* sid,
00994 os_error* osError
00995 );
00996
00997
01009 IX_EXPORT_FUNCTION
01010 int os_thread_sema_P(
01011 ix_ossl_sem_t* sid,
01012 ix_uint32 timeout,
01013 os_error* osError
01014 );
01015
01016
01027 IX_EXPORT_FUNCTION
01028 int os_thread_sema_V(ix_ossl_sem_t* sid, os_error* osError);
01029
01030
01040 IX_EXPORT_FUNCTION
01041 int os_thread_sema_destroy(ix_ossl_sem_t* sid, os_error* osError);
01042
01043
01063 IX_EXPORT_FUNCTION
01064 ix_error ix_ossl_mutex_init(ix_ossl_mutex_state start_state, ix_ossl_mutex_t* mid);
01065
01066
01084 IX_EXPORT_FUNCTION
01085 ix_error ix_ossl_mutex_lock(
01086 ix_ossl_mutex_t mid,
01087 ix_uint32 timeout
01088 );
01089
01090
01103 IX_EXPORT_FUNCTION
01104 ix_error ix_ossl_mutex_unlock(ix_ossl_mutex_t mid);
01105
01106
01118 IX_EXPORT_FUNCTION
01119 ix_error ix_ossl_mutex_fini(ix_ossl_mutex_t mid);
01120
01121
01137 IX_EXPORT_FUNCTION
01138 int os_thread_mutex_create(
01139 ix_ossl_mutex_state start_state,
01140 ix_ossl_mutex_t* mid,
01141 os_error* osError
01142 );
01143
01144
01161 IX_EXPORT_FUNCTION
01162 int os_thread_mutex_lock(
01163 ix_ossl_mutex_t* mutex,
01164 ix_uint32 timeout,
01165 os_error* osError
01166 );
01167
01168
01183 IX_EXPORT_FUNCTION
01184 int os_thread_mutex_unlock(ix_ossl_mutex_t* mutex, os_error* osError);
01185
01186
01198 IX_EXPORT_FUNCTION
01199 int os_thread_mutex_destroy(ix_ossl_mutex_t* mutex, os_error* osError);
01200
01201
01217 ix_error ix_ossl_sleep(ix_uint32 sleeptime_ms);
01218
01219
01230 IX_EXPORT_FUNCTION
01231 ix_error ix_ossl_sleep_tick(ix_uint32 sleeptime_ticks);
01232
01233
01248 IX_EXPORT_FUNCTION
01249 ix_error ix_ossl_time_get(ix_ossl_time_t* ptime);
01250
01251
01252
01264 typedef unsigned int ix_ossl_size_t;
01265
01266
01267
01286 IX_EXPORT_FUNCTION
01287 void* ix_ossl_malloc(
01288 ix_ossl_size_t arg_Size
01289 );
01290
01291
01292
01293
01308 IX_EXPORT_FUNCTION
01309 void ix_ossl_free(
01310 void* arg_pMemory
01311 );
01312
01313
01314
01315
01330 IX_EXPORT_FUNCTION
01331 void* ix_ossl_memcpy(
01332 void* arg_pDest,
01333 const void* arg_pSrc,
01334 ix_ossl_size_t arg_Count
01335 );
01336
01337
01338
01352 IX_EXPORT_FUNCTION
01353 void* ix_ossl_memset(
01354 void* arg_pDest,
01355 int arg_pChar,
01356 ix_ossl_size_t arg_Count
01357 );
01358
01359
01360
01377 IX_EXPORT_FUNCTION
01378 ix_error ix_ossl_message_log_init(void);
01379
01380
01395 IX_EXPORT_FUNCTION
01396 ix_error ix_ossl_message_log(
01397 char* arg_pFmtString,
01398 ...
01399 );
01400
01401
01402 #ifdef __cplusplus
01403 }
01404 #endif
01405
01406 #endif
01407