2015-10-19 20:22:13 +00:00
/*
* This file is subject to the terms of the GFX License . If a copy of
* the license was not distributed with this file , you can obtain one at :
*
2018-10-01 15:32:39 +00:00
* http : //ugfx.io/license.html
2015-10-19 20:22:13 +00:00
*/
2015-11-21 09:27:08 +00:00
# include "../../gfx.h"
2015-10-19 20:22:13 +00:00
# include <string.h>
# if GFX_USE_OS_CMSIS
void _gosHeapInit ( void ) ;
void _gosInit ( void )
{
# if !GFX_OS_NO_INIT
osKernelInitialize ( ) ;
if ( ! osKernelRunning ( ) )
osKernelStart ( ) ;
# elif !GFX_OS_INIT_NO_WARNING
2017-06-30 09:43:51 +00:00
# if GFX_COMPILER_WARNING_TYPE == GFX_COMPILER_WARNING_DIRECT
# warning "GOS: Operating System initialization has been turned off. Make sure you call osKernelInitialize() and osKernelStart() before gfxInit() in your application!"
# elif GFX_COMPILER_WARNING_TYPE == GFX_COMPILER_WARNING_MACRO
COMPILER_WARNING ( " GOS: Operating System initialization has been turned off. Make sure you call osKernelInitialize() and osKernelStart() before gfxInit() in your application! " )
# endif
2015-10-19 20:22:13 +00:00
# endif
// Set up the heap allocator
_gosHeapInit ( ) ;
}
2017-03-04 05:02:55 +00:00
void _gosPostInit ( void )
{
}
2015-10-19 20:22:13 +00:00
void _gosDeinit ( void )
{
}
2018-11-03 02:29:30 +00:00
void gfxMutexInit ( gMutex * pmutex )
2015-10-19 20:22:13 +00:00
{
2015-10-25 21:10:00 +00:00
osMutexDef_t def ;
def . mutex = pmutex - > mutex ;
pmutex - > id = osMutexCreate ( & def ) ;
2015-10-19 20:22:13 +00:00
}
2018-11-03 02:29:30 +00:00
void gfxSemInit ( gSem * psem , gSemcount val , gSemcount limit )
2015-10-19 20:22:13 +00:00
{
2015-10-25 21:10:00 +00:00
osSemaphoreDef_t def ;
def . semaphore = psem - > semaphore ;
2015-10-26 13:04:51 +00:00
if ( val > limit ) val = limit ;
psem - > available = limit - val ;
psem - > id = osSemaphoreCreate ( & def , val ) ;
2015-10-19 20:22:13 +00:00
}
2018-11-03 02:29:30 +00:00
void gfxSemDestroy ( gSem * psem )
2015-10-19 20:22:13 +00:00
{
osSemaphoreDelete ( psem - > id ) ;
}
2018-11-03 02:29:30 +00:00
gBool gfxSemWait ( gSem * psem , gDelay ms )
2015-10-19 20:22:13 +00:00
{
2015-10-26 13:08:38 +00:00
if ( osSemaphoreWait ( psem - > id , ms ) > 0 ) {
2015-10-26 13:04:51 +00:00
psem - > available + + ;
2018-06-23 03:02:07 +00:00
return gTrue ;
2015-10-26 13:04:51 +00:00
}
2018-06-23 03:02:07 +00:00
return gFalse ;
2015-10-19 20:22:13 +00:00
}
2018-11-03 02:29:30 +00:00
gBool gfxSemWaitI ( gSem * psem )
2015-10-19 20:22:13 +00:00
{
2015-10-26 13:04:51 +00:00
return gfxSemWait ( psem , 0 ) ;
2015-10-19 20:22:13 +00:00
}
2018-11-03 02:29:30 +00:00
void gfxSemSignal ( gSem * psem )
2015-10-19 20:22:13 +00:00
{
2015-10-26 13:04:51 +00:00
gfxSemSignalI ( psem ) ;
2015-10-19 20:22:13 +00:00
}
2018-11-03 02:29:30 +00:00
void gfxSemSignalI ( gSem * psem )
2015-10-19 20:22:13 +00:00
{
2015-10-26 13:04:51 +00:00
if ( psem - > available ) {
psem - > available - - ;
osSemaphoreRelease ( psem - > id ) ;
}
2015-10-19 20:22:13 +00:00
}
2018-11-03 02:29:30 +00:00
gThread gfxThreadCreate ( void * stackarea , gMemSize stacksz , gThreadpriority prio , GFX_THREAD_FUNCTION ( ( * fn ) , p ) , void * param )
2015-10-19 20:22:13 +00:00
{
osThreadDef_t def ;
( void ) stackarea ;
def . pthread = ( os_pthread ) fn ;
def . tpriority = prio ;
def . instances = 1 ;
def . stacksize = stacksz ;
return osThreadCreate ( & def , param ) ;
}
2018-07-08 05:40:27 +00:00
gThreadreturn gfxThreadWait ( gThread thread ) {
2015-10-19 20:22:13 +00:00
while ( osThreadGetPriority ( thread ) = = osPriorityError )
gfxYield ( ) ;
}
# endif /* GFX_USE_OS_CMSIS */