10 #if GFX_USE_OS_CHIBIOS
14 #if CH_KERNEL_MAJOR < 2 || CH_KERNEL_MAJOR > 6
15 #error "GOS: Unsupported version of ChibiOS"
18 #if CH_KERNEL_MAJOR <= 2
20 #error "GOS: CH_USE_MUTEXES must be defined in chconf.h"
22 #if !CH_USE_SEMAPHORES
23 #error "GOS: CH_USE_SEMAPHORES must be defined in chconf.h"
26 #if !CH_CFG_USE_MUTEXES
27 #error "GOS: CH_CFG_USE_MUTEXES must be defined in chconf.h"
29 #if !CH_CFG_USE_SEMAPHORES
30 #error "GOS: CH_CFG_USE_SEMAPHORES must be defined in chconf.h"
38 #if CH_KERNEL_MAJOR <= 2
44 if (!chThdGetSelfX()) {
49 #elif !GFX_OS_INIT_NO_WARNING
50 #if GFX_COMPILER_WARNING_TYPE == GFX_COMPILER_WARNING_DIRECT
51 #warning "GOS: Operating System initialization has been turned off. Make sure you call halInit() and chSysInit() before gfxInit() in your application!"
52 #elif GFX_COMPILER_WARNING_TYPE == GFX_COMPILER_WARNING_MACRO
53 COMPILER_WARNING(
"GOS: Operating System initialization has been turned off. Make sure you call halInit() and chSysInit() before gfxInit() in your application!")
58 void _gosPostInit(
void)
67 void *
gfxRealloc(
void *ptr, gMemSize oldsz, gMemSize newsz)
79 memcpy(np, ptr, oldsz);
87 case gDelayNone: chThdYield();
return;
88 case gDelayForever: chThdSleep(TIME_INFINITE);
return;
89 default: chThdSleepMilliseconds(ms);
return;
96 case gDelayNone:
return;
97 case gDelayForever: chThdSleep(TIME_INFINITE);
return;
98 default: chThdSleepMicroseconds(ms);
return;
109 #if CH_KERNEL_MAJOR <= 2
110 chSemInit(&psem->sem, val);
112 chSemObjectInit(&psem->sem, val);
118 chSemReset(&psem->sem, 1);
123 #if CH_KERNEL_MAJOR <= 2
125 case gDelayNone:
return chSemWaitTimeout(&psem->sem, TIME_IMMEDIATE) != RDY_TIMEOUT;
126 case gDelayForever: chSemWait(&psem->sem);
return gTrue;
131 case gDelayNone:
return chSemWaitTimeout(&psem->sem, TIME_IMMEDIATE) != MSG_TIMEOUT;
132 case gDelayForever: chSemWait(&psem->sem);
return gTrue;
140 #if CH_KERNEL_MAJOR <= 3
141 if (psem->sem.s_cnt <= 0)
144 if (psem->sem.cnt <= 0)
147 chSemFastWaitI(&psem->sem);
155 #if CH_KERNEL_MAJOR <= 3
156 if (psem->sem.s_cnt < psem->limit)
157 chSemSignalI(&psem->sem);
159 if (psem->sem.cnt < psem->limit)
160 chSemSignalI(&psem->sem);
169 #if CH_KERNEL_MAJOR <= 3
170 if (psem->sem.s_cnt < psem->limit)
171 chSemSignalI(&psem->sem);
173 if (psem->sem.cnt < psem->limit)
174 chSemSignalI(&psem->sem);
181 if (!stacksz) stacksz = 256;
182 #if CH_KERNEL_MAJOR <= 3
183 return chThdCreateFromHeap(0, stacksz, prio, (tfunc_t)fn, param);
185 return chThdCreateFromHeap(0, stacksz,
"ugfx", prio, (tfunc_t)fn, param);
192 return chThdCreateStatic(stackarea, stacksz, prio, (tfunc_t)fn, param);
void gfxSemSignal(gSem *psem)
Signal a semaphore.
void * gThread
A thread handle.
#define GFX_THREAD_FUNCTION(fnName, param)
Declare a thread function.
gTicks gfxMillisecondsToTicks(gDelay ms)
Convert a given number of millseconds to a number of operating system ticks.
gBool gfxSemWait(gSem *psem, gDelay ms)
Wait on a semaphore.
void gfxSleepMicroseconds(gDelay us)
Put the current thread to sleep for the specified period in microseconds.
void * gfxAlloc(gMemSize sz)
Allocate memory.
gThread gfxThreadCreate(void *stackarea, gMemSize stacksz, gThreadpriority prio, GFX_THREAD_FUNCTION((*fn), p), void *param)
Start a new thread.
gBool gfxSemWaitI(gSem *psem)
Test if a wait on a semaphore can be satisfied immediately.
void gfxSemDestroy(gSem *psem)
Destroy a Counted Semaphore.
void gfxSemInit(gSem *psem, gSemcount val, gSemcount limit)
Initialise a Counted Semaphore.
void * gfxRealloc(void *ptr, gMemSize oldsz, gMemSize newsz)
Re-allocate memory.
void gfxSemSignalI(gSem *psem)
Signal a semaphore.
void gfxSleepMilliseconds(gDelay ms)
Put the current thread to sleep for the specified period in milliseconds.