whitespaces
parent
e257074511
commit
395a4bda31
|
@ -97,3 +97,4 @@ gfxThreadHandle gfxThreadCreate(void *stackarea, size_t stacksz, threadpriority_
|
||||||
|
|
||||||
#endif /* GFX_USE_OS_CHIBIOS */
|
#endif /* GFX_USE_OS_CHIBIOS */
|
||||||
#endif /* _GOS_CHIBIOS_H */
|
#endif /* _GOS_CHIBIOS_H */
|
||||||
|
|
||||||
|
|
|
@ -101,8 +101,6 @@ threadreturn_t gfxThreadWait(gfxThreadHandle thread);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* GFX_USE_OS_WIN32 */
|
#endif /* GFX_USE_OS_WIN32 */
|
||||||
|
|
||||||
#endif /* _GOS_WIN32_H */
|
#endif /* _GOS_WIN32_H */
|
||||||
|
|
||||||
|
|
|
@ -62,26 +62,34 @@ void gfxSleepMicroseconds(delaytime_t ms) {
|
||||||
default: chThdSleepMicroseconds(ms); return;
|
default: chThdSleepMicroseconds(ms); return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void gfxSemInit(gfxSem *psem, semcount_t val, semcount_t limit) {
|
void gfxSemInit(gfxSem *psem, semcount_t val, semcount_t limit) {
|
||||||
if (val > limit) val = limit;
|
if (val > limit)
|
||||||
|
val = limit;
|
||||||
|
|
||||||
psem->limit = limit;
|
psem->limit = limit;
|
||||||
chSemInit(&psem->sem, val);
|
chSemInit(&psem->sem, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gfxSemDestroy(gfxSem *psem) {
|
void gfxSemDestroy(gfxSem *psem) {
|
||||||
chSemReset(&psem->sem, 1);
|
chSemReset(&psem->sem, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool_t gfxSemWait(gfxSem *psem, delaytime_t ms) {
|
bool_t gfxSemWait(gfxSem *psem, delaytime_t ms) {
|
||||||
if (ms == TIME_INFINITE) {
|
if (ms == TIME_INFINITE) {
|
||||||
chSemWait(&psem->sem);
|
chSemWait(&psem->sem);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return chSemWaitTimeout(&psem->sem, MS2ST(ms)) != RDY_TIMEOUT;
|
return chSemWaitTimeout(&psem->sem, MS2ST(ms)) != RDY_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gfxSemSignal(gfxSem *psem) {
|
void gfxSemSignal(gfxSem *psem) {
|
||||||
chSysLock();
|
chSysLock();
|
||||||
|
|
||||||
if (gfxSemCounterI(psem) < psem->limit)
|
if (gfxSemCounterI(psem) < psem->limit)
|
||||||
chSemSignalI(&psem->sem);
|
chSemSignalI(&psem->sem);
|
||||||
|
|
||||||
chSchRescheduleS();
|
chSchRescheduleS();
|
||||||
chSysUnlock();
|
chSysUnlock();
|
||||||
}
|
}
|
||||||
|
@ -97,9 +105,12 @@ gfxThreadHandle gfxThreadCreate(void *stackarea, size_t stacksz, threadpriority_
|
||||||
return chThdCreateFromHeap(0, stacksz, prio, fn, param);
|
return chThdCreateFromHeap(0, stacksz, prio, fn, param);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!stacksz) return NULL;
|
if (!stacksz)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
return chThdCreateStatic(stackarea, stacksz, prio, fn, param);
|
return chThdCreateStatic(stackarea, stacksz, prio, fn, param);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* GFX_USE_OS_CHIBIOS */
|
#endif /* GFX_USE_OS_CHIBIOS */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
|
@ -42,8 +42,15 @@ void gfxSleepMilliseconds(delaytime_t ms) {
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
|
|
||||||
switch(ms) {
|
switch(ms) {
|
||||||
case TIME_IMMEDIATE: pthread_yield(); return;
|
case TIME_IMMEDIATE:
|
||||||
case TIME_INFINITE: while(1) sleep(60); return;
|
pthread_yield();
|
||||||
|
return;
|
||||||
|
|
||||||
|
case TIME_INFINITE:
|
||||||
|
while(1)
|
||||||
|
sleep(60);
|
||||||
|
return;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ts.tv_sec = ms / 1000;
|
ts.tv_sec = ms / 1000;
|
||||||
ts.tv_nsec = (ms % 1000) * 1000;
|
ts.tv_nsec = (ms % 1000) * 1000;
|
||||||
|
@ -56,8 +63,15 @@ void gfxSleepMicroseconds(delaytime_t ms) {
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
|
|
||||||
switch(ms) {
|
switch(ms) {
|
||||||
case TIME_IMMEDIATE: pthread_yield(); return;
|
case TIME_IMMEDIATE:
|
||||||
case TIME_INFINITE: while(1) sleep(60); return;
|
pthread_yield();
|
||||||
|
return;
|
||||||
|
|
||||||
|
case TIME_INFINITE:
|
||||||
|
while(1)
|
||||||
|
sleep(60);
|
||||||
|
return;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ts.tv_sec = ms / 1000000;
|
ts.tv_sec = ms / 1000000;
|
||||||
ts.tv_nsec = ms % 1000000;
|
ts.tv_nsec = ms % 1000000;
|
||||||
|
@ -70,6 +84,7 @@ systemticks_t gfxSystemTicks(void) {
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
|
|
||||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
|
|
||||||
return ts.tv_sec * 1000UL + ts.tv_nsec / 1000UL;
|
return ts.tv_sec * 1000UL + ts.tv_nsec / 1000UL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,6 +100,7 @@ gfxThreadHandle gfxThreadCreate(void *stackarea, size_t stacksz, threadpriority_
|
||||||
|
|
||||||
if (pthread_create(&th, 0, fn, param))
|
if (pthread_create(&th, 0, fn, param))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return th;
|
return th;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,6 +109,7 @@ threadreturn_t gfxThreadWait(gfxThreadHandle thread) {
|
||||||
|
|
||||||
if (pthread_join(thread, &retval))
|
if (pthread_join(thread, &retval))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,17 +129,20 @@ void gfxSemDestroy(gfxSem *pSem) {
|
||||||
|
|
||||||
bool_t gfxSemWait(gfxSem *pSem, delaytime_t ms) {
|
bool_t gfxSemWait(gfxSem *pSem, delaytime_t ms) {
|
||||||
pthread_mutex_lock(&pSem->mtx);
|
pthread_mutex_lock(&pSem->mtx);
|
||||||
|
|
||||||
switch (ms) {
|
switch (ms) {
|
||||||
case TIME_INFINITE:
|
case TIME_INFINITE:
|
||||||
while (!pSem->cnt)
|
while (!pSem->cnt)
|
||||||
pthread_cond_wait(&pSem->cond, &pSem->mtx);
|
pthread_cond_wait(&pSem->cond, &pSem->mtx);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TIME_IMMEDIATE:
|
case TIME_IMMEDIATE:
|
||||||
if (!pSem->cnt) {
|
if (!pSem->cnt) {
|
||||||
pthread_mutex_unlock(&pSem->mtx);
|
pthread_mutex_unlock(&pSem->mtx);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
struct timeval now;
|
struct timeval now;
|
||||||
|
@ -140,17 +160,21 @@ bool_t gfxSemWait(gfxSem *pSem, delaytime_t ms) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
pSem->cnt--;
|
pSem->cnt--;
|
||||||
pthread_mutex_unlock(&pSem->mtx);
|
pthread_mutex_unlock(&pSem->mtx);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gfxSemSignal(gfxSem *pSem) {
|
void gfxSemSignal(gfxSem *pSem) {
|
||||||
pthread_mutex_lock(&pSem->mtx);
|
pthread_mutex_lock(&pSem->mtx);
|
||||||
|
|
||||||
if (pSem->cnt < pSem->max) {
|
if (pSem->cnt < pSem->max) {
|
||||||
pSem->cnt++;
|
pSem->cnt++;
|
||||||
pthread_cond_signal(&pSem->cond);
|
pthread_cond_signal(&pSem->cond);
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_unlock(&pSem->mtx);
|
pthread_mutex_unlock(&pSem->mtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,6 +186,7 @@ semcount_t gfxSemCounter(gfxSem *pSem) {
|
||||||
pthread_mutex_lock(&pSem->mtx);
|
pthread_mutex_lock(&pSem->mtx);
|
||||||
res = pSem->cnt;
|
res = pSem->cnt;
|
||||||
pthread_mutex_unlock(&pSem->mtx);
|
pthread_mutex_unlock(&pSem->mtx);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,11 +18,13 @@
|
||||||
static HANDLE SystemMutex;
|
static HANDLE SystemMutex;
|
||||||
|
|
||||||
void _gosInit(void) {
|
void _gosInit(void) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void gfxHalt(const char *msg) {
|
void gfxHalt(const char *msg) {
|
||||||
if (msg)
|
if (msg)
|
||||||
fprintf(stderr, "%s\n", msg);
|
fprintf(stderr, "%s\n", msg);
|
||||||
|
|
||||||
ExitProcess(1);
|
ExitProcess(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,8 +34,13 @@ void gfxSleepMicroseconds(delaytime_t ms) {
|
||||||
LARGE_INTEGER t1, t2, tdiff;
|
LARGE_INTEGER t1, t2, tdiff;
|
||||||
|
|
||||||
switch(ms) {
|
switch(ms) {
|
||||||
case TIME_IMMEDIATE: return;
|
case TIME_IMMEDIATE:
|
||||||
case TIME_INFINITE: while(1) Sleep(1000); return;
|
return;
|
||||||
|
|
||||||
|
case TIME_INFINITE:
|
||||||
|
while(1)
|
||||||
|
Sleep(1000);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!initflag) {
|
if (!initflag) {
|
||||||
|
@ -81,6 +88,7 @@ semcount_t gfxSemCounter(gfxSem *pSem) {
|
||||||
NtQuerySemaphore = (_NtQuerySemaphore)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQuerySemaphore");
|
NtQuerySemaphore = (_NtQuerySemaphore)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQuerySemaphore");
|
||||||
|
|
||||||
NtQuerySemaphore(*pSem, 0, &BasicInfo, sizeof(BasicInfo), NULL);
|
NtQuerySemaphore(*pSem, 0, &BasicInfo, sizeof(BasicInfo), NULL);
|
||||||
|
|
||||||
return BasicInfo.CurrentCount;
|
return BasicInfo.CurrentCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,8 +98,10 @@ gfxThreadHandle gfxThreadCreate(void *stackarea, size_t stacksz, threadpriority_
|
||||||
|
|
||||||
if (!(thd = CreateThread(NULL, stacksz, fn, param, CREATE_SUSPENDED, NULL)))
|
if (!(thd = CreateThread(NULL, stacksz, fn, param, CREATE_SUSPENDED, NULL)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
SetThreadPriority(thd, prio);
|
SetThreadPriority(thd, prio);
|
||||||
ResumeThread(thd);
|
ResumeThread(thd);
|
||||||
|
|
||||||
return thd;
|
return thd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,8 +111,10 @@ threadreturn_t gfxThreadWait(gfxThreadHandle thread) {
|
||||||
WaitForSingleObject(thread, INFINITE);
|
WaitForSingleObject(thread, INFINITE);
|
||||||
GetExitCodeThread(thread, &ret);
|
GetExitCodeThread(thread, &ret);
|
||||||
CloseHandle(thread);
|
CloseHandle(thread);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* GFX_USE_OS_WIN32 */
|
#endif /* GFX_USE_OS_WIN32 */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue