commit
e2a0b1930b
|
@ -30,6 +30,12 @@ void rt_init_thread_entry(void *parameter)
|
||||||
/* initialization RT-Thread Components */
|
/* initialization RT-Thread Components */
|
||||||
rt_components_init();
|
rt_components_init();
|
||||||
|
|
||||||
|
#ifdef RT_USING_RTGUI
|
||||||
|
/* start sdl thread to simulate an LCD. SDL may depend on DFS and should be
|
||||||
|
* called after rt_components_init. */
|
||||||
|
rt_hw_sdl_start();
|
||||||
|
#endif /* RT_USING_RTGUI */
|
||||||
|
|
||||||
#if defined(RT_USING_COMPONENTS_INIT) && defined(__GNUC__) && defined(RT_USING_FINSH)
|
#if defined(RT_USING_COMPONENTS_INIT) && defined(__GNUC__) && defined(RT_USING_FINSH)
|
||||||
finsh_set_device(RT_CONSOLE_DEVICE_NAME);
|
finsh_set_device(RT_CONSOLE_DEVICE_NAME);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -17,11 +17,6 @@ void rt_platform_init(void)
|
||||||
|
|
||||||
#endif /* RT_USING_DFS */
|
#endif /* RT_USING_DFS */
|
||||||
|
|
||||||
#ifdef RT_USING_RTGUI
|
|
||||||
/* start sdl thread to simulate an LCD */
|
|
||||||
rt_hw_sdl_start();
|
|
||||||
#endif /* RT_USING_RTGUI */
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
rt_thread_idle_sethook(rt_hw_win32_low_cpu);
|
rt_thread_idle_sethook(rt_hw_win32_low_cpu);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -152,8 +152,12 @@ static void sdlfb_hw_init(void)
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
static HANDLE sdl_ok_event = NULL;
|
static HANDLE sdl_ok_event = NULL;
|
||||||
|
|
||||||
static DWORD WINAPI sdl_loop(LPVOID lpParam)
|
static DWORD WINAPI sdl_loop(LPVOID lpParam)
|
||||||
#else
|
#else
|
||||||
|
static pthread_mutex_t sdl_ok_mutex;
|
||||||
|
static pthread_cond_t sdl_ok_event;
|
||||||
|
|
||||||
static void *sdl_loop(void *lpParam)
|
static void *sdl_loop(void *lpParam)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
@ -167,14 +171,19 @@ static void *sdl_loop(void *lpParam)
|
||||||
/* set the getchar without buffer */
|
/* set the getchar without buffer */
|
||||||
sigfillset(&sigmask);
|
sigfillset(&sigmask);
|
||||||
pthread_sigmask(SIG_BLOCK, &sigmask, &oldmask);
|
pthread_sigmask(SIG_BLOCK, &sigmask, &oldmask);
|
||||||
|
pthread_mutex_lock(&sdl_ok_mutex);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sdlfb_hw_init();
|
sdlfb_hw_init();
|
||||||
|
|
||||||
device = rt_device_find("sdl");
|
device = rt_device_find("sdl");
|
||||||
|
RT_ASSERT(device);
|
||||||
rtgui_graphic_set_device(device);
|
rtgui_graphic_set_device(device);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
SetEvent(sdl_ok_event);
|
SetEvent(sdl_ok_event);
|
||||||
|
#else
|
||||||
|
pthread_cond_signal(&sdl_ok_event);
|
||||||
|
pthread_mutex_unlock(&sdl_ok_mutex);
|
||||||
#endif
|
#endif
|
||||||
/* handle SDL event */
|
/* handle SDL event */
|
||||||
while (!quit)
|
while (!quit)
|
||||||
|
@ -338,11 +347,20 @@ void rt_hw_sdl_start(void)
|
||||||
/* Linux */
|
/* Linux */
|
||||||
pthread_t pid;
|
pthread_t pid;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
|
pthread_mutex_init(&sdl_ok_mutex, NULL);
|
||||||
|
pthread_cond_init(&sdl_ok_event, NULL);
|
||||||
|
|
||||||
res = pthread_create(&pid, NULL, &sdl_loop, NULL);
|
res = pthread_create(&pid, NULL, &sdl_loop, NULL);
|
||||||
if (res)
|
if (res)
|
||||||
{
|
{
|
||||||
printf("pthread create sdl thread faild, <%d>\n", res);
|
printf("pthread create sdl thread faild, <%d>\n", res);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
pthread_mutex_lock(&sdl_ok_mutex);
|
||||||
|
pthread_cond_wait(&sdl_ok_event, &sdl_ok_mutex);
|
||||||
|
|
||||||
|
pthread_mutex_destroy(&sdl_ok_mutex);
|
||||||
|
pthread_cond_destroy(&sdl_ok_event);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue