#include "maru_shm.h"
#endif
-
MULTI_DEBUG_CHANNEL(tizen, display);
MaruScreenshot* maru_screenshot = NULL;
{
INFO("init qemu display\n");
+#ifndef CONFIG_USE_SHM
+ maru_sdl_pre_init();
+#else
+ /* do nothing */
+#endif
+
/* graphics context information */
DisplayChangeListener *dcl;
g_free(maru_screenshot);
#ifndef CONFIG_USE_SHM
- maruskin_sdl_quit();
+ maru_sdl_quit();
+#else
+ maru_shm_quit();
+#endif
+}
+
+void maru_display_resize(void)
+{
+#ifndef CONFIG_USE_SHM
+ maru_sdl_resize();
#else
- maruskin_shm_quit();
+ maru_shm_resize();
#endif
}
void maru_display_update(void)
{
#ifndef CONFIG_USE_SHM
- maruskin_sdl_update();
+ maru_sdl_update();
#else
/* do nothing */
#endif
void maru_display_invalidate(bool on)
{
#ifndef CONFIG_USE_SHM
- maruskin_sdl_invalidate(on);
+ maru_sdl_invalidate(on);
#else
/* do nothing */
#endif
void maru_display_interpolation(bool on)
{
#ifndef CONFIG_USE_SHM
- maruskin_sdl_interpolation(on);
+ maru_sdl_interpolation(on);
#else
/* do nothing */
#endif
}
-void maruskin_init(uint64 swt_handle,
+void maru_ds_surface_init(uint64 swt_handle,
unsigned int display_width, unsigned int display_height,
bool blank_guide)
{
#ifndef CONFIG_USE_SHM
- maruskin_sdl_init(swt_handle,
+ maru_sdl_init(swt_handle,
display_width, display_height, blank_guide);
#else
- maruskin_shm_init(swt_handle,
+ maru_shm_init(swt_handle,
display_width, display_height, blank_guide);
#endif
}
void maru_display_init(DisplayState *ds);
void maru_display_fini(void);
+void maru_display_resize(void);
void maru_display_update(void);
void maru_display_invalidate(bool on);
void maru_display_interpolation(bool on);
-void maruskin_init(uint64 swt_handle,
+void maru_ds_surface_init(uint64 swt_handle,
unsigned int display_width, unsigned int display_height,
bool blank_guide);
*/
-#include <pthread.h>
#include <png.h>
#include "qemu/main-loop.h"
#include "emulator.h"
#define BLANK_GUIDE_IMAGE_NAME "blank-guide.png"
#ifdef SDL_THREAD
-pthread_mutex_t sdl_mutex = PTHREAD_MUTEX_INITIALIZER;
-pthread_cond_t sdl_cond = PTHREAD_COND_INITIALIZER;
+QemuMutex sdl_mutex;
+QemuCond sdl_cond;
static int sdl_thread_initialized;
#endif
#define SDL_FLAGS (SDL_SWSURFACE | SDL_ASYNCBLIT | SDL_NOFRAME)
#define SDL_BPP 32
+static void qemu_update(void);
+
+
static void qemu_ds_sdl_update(DisplayChangeListener *dcl,
int x, int y, int w, int h)
{
/* call sdl update */
#ifdef SDL_THREAD
- pthread_mutex_lock(&sdl_mutex);
+ qemu_mutex_lock(&sdl_mutex);
- pthread_cond_signal(&sdl_cond);
+ qemu_cond_signal(&sdl_cond);
- pthread_mutex_unlock(&sdl_mutex);
+ qemu_mutex_unlock(&sdl_mutex);
#else
qemu_update();
#endif
#ifdef TARGET_ARM
#ifdef SDL_THREAD
- pthread_mutex_lock(&sdl_mutex);
+ qemu_mutex_lock(&sdl_mutex);
#endif
/*
SDL_UpdateRect(surface_screen, 0, 0, 0, 0);
#ifdef SDL_THREAD
- pthread_mutex_unlock(&sdl_mutex);
+ qemu_mutex_unlock(&sdl_mutex);
#endif
#endif
}
.dpy_refresh = qemu_ds_sdl_refresh,
};
-void maruskin_sdl_interpolation(bool on)
+void maru_sdl_interpolation(bool on)
{
if (on == true) {
INFO("set PIXMAN_FILTER_BEST filter for image processing\n");
static void *run_qemu_update(void *arg)
{
while(1) {
- pthread_mutex_lock(&sdl_mutex);
+ qemu_mutex_lock(&sdl_mutex);
- pthread_cond_wait(&sdl_cond, &sdl_mutex);
+ qemu_cond_wait(&sdl_cond, &sdl_mutex);
qemu_update();
- pthread_mutex_unlock(&sdl_mutex);
+ qemu_mutex_unlock(&sdl_mutex);
}
return NULL;
sdl_skip_update = 0;
#ifdef SDL_THREAD
- pthread_mutex_lock(&sdl_mutex);
+ qemu_mutex_lock(&sdl_mutex);
#endif
/* get current setting information and calculate screen size */
get_emul_sdl_bpp(), SDL_GetError());
#ifdef SDL_THREAD
- pthread_mutex_unlock(&sdl_mutex);
+ qemu_mutex_unlock(&sdl_mutex);
#endif
return;
}
#ifdef SDL_THREAD
- pthread_mutex_unlock(&sdl_mutex);
+ qemu_mutex_unlock(&sdl_mutex);
#endif
graphic_hw_invalidate(NULL);
INFO("sdl update thread create\n");
- pthread_t thread_id;
- if (pthread_create(&thread_id, NULL, run_qemu_update, NULL) != 0) {
- ERR("pthread_create fail\n");
- return;
- }
+ QemuThread sdl_thread;
+ qemu_thread_create(&sdl_thread, "sdl-workthread", run_qemu_update,
+ NULL, QEMU_THREAD_JOINABLE);
}
#endif
}
-void maruskin_sdl_init(uint64 swt_handle,
+void maru_sdl_pre_init(void) {
+ sdl_init_bh = qemu_bh_new(maru_sdl_init_bh, NULL);
+ sdl_resize_bh = qemu_bh_new(maru_sdl_resize_bh, NULL);
+ sdl_update_bh = qemu_bh_new(maru_sdl_update_bh, NULL);
+
+#ifdef SDL_THREAD
+ qemu_mutex_init(&sdl_mutex);
+ qemu_cond_init(&sdl_cond);
+#endif
+}
+
+void maru_sdl_init(uint64 swt_handle,
unsigned int display_width, unsigned int display_height,
bool blank_guide)
{
INFO("maru sdl init\n");
- sdl_init_bh = qemu_bh_new(maru_sdl_init_bh, NULL);
- sdl_resize_bh = qemu_bh_new(maru_sdl_resize_bh, NULL);
- sdl_update_bh = qemu_bh_new(maru_sdl_update_bh, NULL);
-
sprintf(SDL_windowhack, "%ld", window_id);
g_setenv("SDL_WINDOWID", SDL_windowhack, 1);
set_emul_resolution(display_width, display_height);
set_emul_sdl_bpp(SDL_BPP);
- maruskin_sdl_interpolation(false);
+ maru_sdl_interpolation(false);
init_multi_touch_state();
if (blank_guide_enable == true) {
qemu_bh_schedule(sdl_init_bh);
}
-void maruskin_sdl_quit(void)
+void maru_sdl_quit(void)
{
INFO("maru sdl quit\n");
sdl_alteration = -1;
#ifdef SDL_THREAD
- pthread_mutex_lock(&sdl_mutex);
+ qemu_mutex_lock(&sdl_mutex);
#endif
SDL_Quit();
#ifdef SDL_THREAD
- pthread_mutex_unlock(&sdl_mutex);
- pthread_cond_destroy(&sdl_cond);
-#endif
+ qemu_mutex_unlock(&sdl_mutex);
+ qemu_cond_destroy(&sdl_cond);
- pthread_mutex_destroy(&sdl_mutex);
+ qemu_mutex_destroy(&sdl_mutex);
+#endif
}
-void maruskin_sdl_resize(void)
+void maru_sdl_resize(void)
{
INFO("maru sdl resize\n");
qemu_bh_schedule(sdl_resize_bh);
}
-void maruskin_sdl_update(void)
+void maru_sdl_update(void)
{
qemu_bh_schedule(sdl_update_bh);
}
-void maruskin_sdl_invalidate(bool on)
+void maru_sdl_invalidate(bool on)
{
sdl_invalidate = on;
}
extern DisplayChangeListenerOps maru_dcl_ops;
-void maruskin_sdl_init(uint64 swt_handle,
+void maru_sdl_pre_init(void);
+void maru_sdl_init(uint64 swt_handle,
unsigned int display_width, unsigned int display_height,
bool blank_guide);
-void maruskin_sdl_resize(void);
-void maruskin_sdl_update(void);
-void maruskin_sdl_invalidate(bool on);
-void maruskin_sdl_interpolation(bool on);
-void maruskin_sdl_quit(void);
+void maru_sdl_resize(void);
+void maru_sdl_update(void);
+void maru_sdl_invalidate(bool on);
+void maru_sdl_interpolation(bool on);
+void maru_sdl_quit(void);
#endif /* MARU_SDL_H_ */
.dpy_gfx_switch = qemu_ds_shm_switch,
};
-void maruskin_shm_init(uint64 swt_handle,
+void maru_shm_init(uint64 swt_handle,
unsigned int display_width, unsigned int display_height,
bool blank_guide)
{
INFO("Memory attached at 0x%X\n", (int)shared_memory);
}
-void maruskin_shm_quit(void)
+void maru_shm_quit(void)
{
struct shmid_ds shm_info;
}
}
-void maruskin_shm_resize(void)
+void maru_shm_resize(void)
{
shm_skip_update = 0;
}
extern DisplayChangeListenerOps maru_dcl_ops;
-void maruskin_shm_init(uint64 swt_handle,
+void maru_shm_init(uint64 swt_handle,
unsigned int display_width, unsigned int display_height,
bool blank_guide);
-void maruskin_shm_resize(void);
-void maruskin_shm_quit(void);
+void maru_shm_resize(void);
+void maru_shm_quit(void);
#endif /* MARU_SHM_H_ */
scale_factor, rotation_type, blank_guide);
set_emul_win_scale(scale_factor);
- maruskin_init(handle_id,
+ maru_ds_surface_init(handle_id,
display_width, display_height, blank_guide);
}
*/
-#include "maru_common.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/time.h>
#include <pthread.h>
+#include "maru_common.h"
#include "maruskin_server.h"
#include "maruskin_operation.h"
-#include "qemu/thread.h"
-#include "emul_state.h"
-#include "maruskin_client.h"
-#include "emulator.h"
+#include "maru_display.h"
#include "maru_err_table.h"
#include "ecs/ecs.h"
-#ifndef CONFIG_USE_SHM
-#include "maru_sdl.h"
-#else
-#include "maru_shm.h"
-#endif
-
#ifdef CONFIG_WIN32
#include <windows.h>
#include <winsock2.h>
#define SLEEP(x) Sleep(x)
#define SOCKET_CLOSE(sock) closesocket(sock)
-#define SOCKET_ERROR() WSAGetLastError()
+#define SOCKET_ERR() WSAGetLastError()
#else
#include <arpa/inet.h>
#include <netinet/in.h>
#define SLEEP(x) usleep(x * 1000)
#define SOCKET_CLOSE(sock) close(sock)
-#define SOCKET_ERROR() errno
+#define SOCKET_ERR() errno
#endif
#include "debug_ch.h"
is_force_close_client = 0;
} else {
ERR("skin_server read error (%d): %d\n",
- SOCKET_ERROR(), read_cnt);
+ SOCKET_ERR(), read_cnt);
perror("skin_server read error : ");
}
is_rotate = true;
}
-#ifndef CONFIG_USE_SHM
- maruskin_sdl_resize();
-#else
- maruskin_shm_resize();
-#endif
+ maru_display_resize();
/* after display resizing */
if (is_rotate == true && is_sensord_initialized == 1) {
#include "trace.h"
#ifdef SDL_THREAD
-#include <pthread.h>
-extern pthread_mutex_t sdl_mutex;
+extern QemuMutex sdl_mutex;
#endif
#define DEFAULT_BACKSCROLL 512
}
if (dcl->ops->dpy_gfx_switch) {
#ifdef SDL_THREAD
- pthread_mutex_lock(&sdl_mutex);
+ qemu_mutex_lock(&sdl_mutex);
#endif
if (con) {
}
#ifdef SDL_THREAD
- pthread_mutex_unlock(&sdl_mutex);
+ qemu_mutex_unlock(&sdl_mutex);
#endif
}
}
DisplayChangeListener *dcl;
#ifdef SDL_THREAD
- pthread_mutex_lock(&sdl_mutex);
+ qemu_mutex_lock(&sdl_mutex);
#endif
con->surface = surface;
}
#ifdef SDL_THREAD
- pthread_mutex_unlock(&sdl_mutex);
+ qemu_mutex_unlock(&sdl_mutex);
#endif
qemu_free_displaysurface(old_surface);