diff options
author | inmarket <andrewh@inmarket.com.au> | 2013-07-21 17:27:54 +1000 |
---|---|---|
committer | inmarket <andrewh@inmarket.com.au> | 2013-07-21 17:27:54 +1000 |
commit | c29950c7670397d60b32e92fa4aadb29fea227a4 (patch) | |
tree | a2584eb07e16e06ca0997713d1b86724ad46fe3d /include/gos | |
parent | 45c8e9052def490299522b57ae7d8d5c59b0341d (diff) | |
download | uGFX-c29950c7670397d60b32e92fa4aadb29fea227a4.tar.gz uGFX-c29950c7670397d60b32e92fa4aadb29fea227a4.tar.bz2 uGFX-c29950c7670397d60b32e92fa4aadb29fea227a4.zip |
Initial GOS port for POSIX (Linux). Untested.
Diffstat (limited to 'include/gos')
-rw-r--r-- | include/gos/posix.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/include/gos/posix.h b/include/gos/posix.h index f81fb26b..732a7de3 100644 --- a/include/gos/posix.h +++ b/include/gos/posix.h @@ -14,6 +14,83 @@ #define _GOS_POSIX_H #if GFX_USE_OS_POSIX + +#include <sys/types.h> +#include <stdint.h> +#include <pthread.h> + +/* Already defined int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, size_t */ + +typedef int8_t bool_t; +typedef unsigned long systemticks_t; +typedef void * threadreturn_t; +typedef unsigned long delaytime_t; +typedef pthread_t gfxThreadHandle; +typedef int threadpriority_t; +typedef uint32_t semcount_t; +typedef pthread_mutex_t gfxMutex; + +#define DECLARE_THREAD_FUNCTION(fnName, param) threadreturn_t fnName(void *param) +#define DECLARE_THREAD_STACK(name, sz) uint8_t name[0]; + +#define gfxExit() exit(0) +#define gfxAlloc(sz) malloc(sz) +#define gfxRealloc(p,osz,nsz) realloc(p, nsz) +#define gfxFree(ptr) free(ptr) +#define gfxMillisecondsToTicks(ms) (ms) +#define gfxYield() pthread_yield() +#define gfxThreadMe() pthread_self() +#define gfxThreadClose(th) {} +#define gfxMutexInit(pmtx) pthread_mutex_init(pmtx, 0) +#define gfxMutexDestroy(pmtx) pthread_mutex_destroy(pmtx) +#define gfxMutexEnter(pmtx) pthread_mutex_lock(pmtx) +#define gfxMutexExit(pmtx) pthread_mutex_unlock(pmtx) +#define gfxSemSignalI(psem) gfxSemSignal(psem) +#define gfxSemCounterI(pSem) ((pSem)->cnt) + + +#define FALSE 0 +#define TRUE 1 +#define TIME_IMMEDIATE 0 +#define TIME_INFINITE ((delaytime_t)-1) +#define MAX_SEMAPHORE_COUNT ((semcount_t)-1) +#define LOW_PRIORITY 10 +#define NORMAL_PRIORITY 0 +#define HIGH_PRIORITY -10 + +typedef struct gfxSem { + pthread_mutex_t mtx; + pthread_cond_t cond; + semcount_t cnt; + semcount_t max; + } gfxSem; + +/*===========================================================================*/ +/* Function declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + +void gfxHalt(const char *msg); +void gfxSleepMilliseconds(delaytime_t ms); +void gfxSleepMicroseconds(delaytime_t ms); +systemticks_t gfxSystemTicks(void); +void gfxSystemLock(void); +void gfxSystemUnlock(void); +void gfxSemInit(gfxSem *psem, semcount_t val, semcount_t limit); +void gfxSemDestroy(gfxSem *psem); +bool_t gfxSemWait(gfxSem *psem, delaytime_t ms); +void gfxSemSignal(gfxSem *psem); +semcount_t gfxSemCounter(gfxSem *pSem); +gfxThreadHandle gfxThreadCreate(void *stackarea, size_t stacksz, threadpriority_t prio, DECLARE_THREAD_FUNCTION((*fn),p), void *param); +threadreturn_t gfxThreadWait(gfxThreadHandle thread); + +#ifdef __cplusplus +} +#endif + #endif /* GFX_USE_OS_POSIX */ #endif /* _GOS_POSIX_H */ |