arch: fix sim_x11events calls but sim_x11initialize() hasn't ready

Signed-off-by: ligd <liguiding1@xiaomi.com>
This commit is contained in:
ligd 2022-12-21 17:55:48 +08:00 committed by Alan Carvalho de Assis
parent e02a5a70eb
commit 9e39600c83
4 changed files with 67 additions and 50 deletions

View File

@ -68,8 +68,9 @@ static int b_useshm;
* Name: sim_x11createframe
****************************************************************************/
static inline int sim_x11createframe(void)
static inline Display *sim_x11createframe(void)
{
Display *display;
XGCValues gcval;
char *argv[2] =
{
@ -82,18 +83,18 @@ static inline int sim_x11createframe(void)
XTextProperty iconprop;
XSizeHints hints;
g_display = XOpenDisplay(NULL);
if (g_display == NULL)
display = XOpenDisplay(NULL);
if (display == NULL)
{
syslog(LOG_ERR, "Unable to open display.\n");
return -1;
return NULL;
}
g_screen = DefaultScreen(g_display);
g_window = XCreateSimpleWindow(g_display, DefaultRootWindow(g_display),
g_screen = DefaultScreen(display);
g_window = XCreateSimpleWindow(display, DefaultRootWindow(display),
0, 0, g_fbpixelwidth, g_fbpixelheight, 2,
BlackPixel(g_display, g_screen),
BlackPixel(g_display, g_screen));
BlackPixel(display, g_screen),
BlackPixel(display, g_screen));
XStringListToTextProperty(&winname, 1, &winprop);
XStringListToTextProperty(&iconname, 1, &iconprop);
@ -102,18 +103,18 @@ static inline int sim_x11createframe(void)
hints.width = hints.min_width = hints.max_width = g_fbpixelwidth;
hints.height = hints.min_height = hints.max_height = g_fbpixelheight;
XSetWMProperties(g_display, g_window, &winprop, &iconprop, argv, 1,
XSetWMProperties(display, g_window, &winprop, &iconprop, argv, 1,
&hints, NULL, NULL);
XMapWindow(g_display, g_window);
XMapWindow(display, g_window);
/* Select window input events */
#if defined(CONFIG_SIM_AJOYSTICK)
XSelectInput(g_display, g_window,
XSelectInput(display, g_window,
ButtonPressMask | ButtonReleaseMask | PointerMotionMask);
#else
XSelectInput(g_display, g_window,
XSelectInput(display, g_window,
ButtonPressMask | ButtonReleaseMask | PointerMotionMask |
KeyPressMask | KeyReleaseMask);
#endif
@ -122,19 +123,19 @@ static inline int sim_x11createframe(void)
#if defined(CONFIG_SIM_TOUCHSCREEN) || defined(CONFIG_SIM_AJOYSTICK) || \
defined(CONFIG_SIM_BUTTONS)
XAllowEvents(g_display, AsyncBoth, CurrentTime);
XAllowEvents(display, AsyncBoth, CurrentTime);
/* Grab mouse button 1, enabling mouse-related events */
XGrabButton(g_display, Button1, AnyModifier, g_window, 1,
XGrabButton(display, Button1, AnyModifier, g_window, 1,
ButtonPressMask | ButtonReleaseMask | ButtonMotionMask,
GrabModeAsync, GrabModeAsync, None, None);
#endif
gcval.graphics_exposures = 0;
g_gc = XCreateGC(g_display, g_window, GCGraphicsExposures, &gcval);
g_gc = XCreateGC(display, g_window, GCGraphicsExposures, &gcval);
return 0;
return display;
}
/****************************************************************************
@ -166,9 +167,9 @@ static void sim_x11traperrors(void)
****************************************************************************/
#ifndef CONFIG_SIM_X11NOSHM
static int sim_x11untraperrors(void)
static int sim_x11untraperrors(Display *display)
{
XSync(g_display, 0);
XSync(display, 0);
XSetErrorHandler(NULL);
return g_xerror;
}
@ -180,6 +181,11 @@ static int sim_x11untraperrors(void)
static void sim_x11uninit(void)
{
if (g_display == NULL)
{
return;
}
#ifndef CONFIG_SIM_X11NOSHM
if (g_shmcheckpoint > 4)
{
@ -239,7 +245,8 @@ static void sim_x11uninitialize(void)
* Name: sim_x11mapsharedmem
****************************************************************************/
static inline int sim_x11mapsharedmem(int depth, unsigned int fblen)
static inline int sim_x11mapsharedmem(Display *display,
int depth, unsigned int fblen)
{
#ifndef CONFIG_SIM_X11NOSHM
Status result;
@ -250,16 +257,16 @@ static inline int sim_x11mapsharedmem(int depth, unsigned int fblen)
b_useshm = 0;
#ifndef CONFIG_SIM_X11NOSHM
if (XShmQueryExtension(g_display))
if (XShmQueryExtension(display))
{
b_useshm = 1;
sim_x11traperrors();
g_image = XShmCreateImage(g_display,
DefaultVisual(g_display, g_screen),
g_image = XShmCreateImage(display,
DefaultVisual(display, g_screen),
depth, ZPixmap, NULL, &g_xshminfo,
g_fbpixelwidth, g_fbpixelheight);
if (sim_x11untraperrors())
if (sim_x11untraperrors(display))
{
sim_x11uninitialize();
goto shmerror;
@ -297,8 +304,8 @@ static inline int sim_x11mapsharedmem(int depth, unsigned int fblen)
g_xshminfo.readOnly = 0;
sim_x11traperrors();
result = XShmAttach(g_display, &g_xshminfo);
if (sim_x11untraperrors() || !result)
result = XShmAttach(display, &g_xshminfo);
if (sim_x11untraperrors(display) || !result)
{
sim_x11uninitialize();
goto shmerror;
@ -318,7 +325,7 @@ shmerror:
g_framebuffer = (unsigned char *)malloc(fblen);
g_image = XCreateImage(g_display, DefaultVisual(g_display, g_screen),
g_image = XCreateImage(display, DefaultVisual(display, g_screen),
depth, ZPixmap, 0, (char *)g_framebuffer,
g_fbpixelwidth, g_fbpixelheight,
8, 0);
@ -352,8 +359,8 @@ int sim_x11initialize(unsigned short width, unsigned short height,
unsigned short *stride)
{
XWindowAttributes windowattributes;
Display *display;
int depth;
int ret;
/* Save inputs */
@ -362,15 +369,15 @@ int sim_x11initialize(unsigned short width, unsigned short height,
/* Create the X11 window */
ret = sim_x11createframe();
if (ret < 0)
display = sim_x11createframe();
if (display == NULL)
{
return ret;
return -1;
}
/* Determine the supported pixel bpp of the current window */
XGetWindowAttributes(g_display, DefaultRootWindow(g_display),
XGetWindowAttributes(display, DefaultRootWindow(display),
&windowattributes);
/* Get the pixel depth. If the depth is 24-bits, use 32 because X expects
@ -389,9 +396,10 @@ int sim_x11initialize(unsigned short width, unsigned short height,
/* Map the window to shared memory */
sim_x11mapsharedmem(windowattributes.depth, *fblen);
sim_x11mapsharedmem(display, windowattributes.depth, *fblen);
*fbmem = (void *)g_framebuffer;
g_display = display;
return 0;
}
@ -406,6 +414,11 @@ int sim_x11cmap(unsigned short first, unsigned short len,
Colormap cmap;
int ndx;
if (g_display == NULL)
{
return -1;
}
/* Convert each color to X11 scaling */
cmap = DefaultColormap(g_display, g_screen);
@ -438,8 +451,13 @@ int sim_x11cmap(unsigned short first, unsigned short len,
* Name: sim_x11update
****************************************************************************/
void sim_x11update(void)
int sim_x11update(void)
{
if (g_display == NULL)
{
return -1;
}
#ifndef CONFIG_SIM_X11NOSHM
if (b_useshm)
{
@ -454,4 +472,6 @@ void sim_x11update(void)
}
XSync(g_display, 0);
return 0;
}

View File

@ -343,17 +343,17 @@ static int sim_setcursor(struct fb_vtable_s *vtable,
void sim_x11loop(void)
{
#ifdef CONFIG_SIM_X11FB
if (g_planeinfo.fbmem != NULL)
{
static clock_t last;
clock_t now = clock_systime_ticks();
static clock_t last;
clock_t now = clock_systime_ticks();
if (now - last >= MSEC2TICK(16))
if (now - last >= MSEC2TICK(16))
{
if (sim_x11update() > 0)
{
sim_x11update();
fb_pollnotify(&g_fbobject);
last = now;
}
last = now;
}
#endif
}

View File

@ -232,7 +232,7 @@ void sim_registerblockdevice(void);
int sim_x11initialize(unsigned short width, unsigned short height,
void **fbmem, size_t *fblen, unsigned char *bpp,
unsigned short *stride);
void sim_x11update(void);
int sim_x11update(void);
#ifdef CONFIG_FB_CMAP
int sim_x11cmap(unsigned short first, unsigned short len,
unsigned char *red, unsigned char *green,

View File

@ -433,16 +433,13 @@ static int sim_setcontrast(struct lcd_dev_s *dev, unsigned int contrast)
void sim_x11loop(void)
{
#ifdef CONFIG_SIM_X11FB
if (g_planeinfo.buffer != NULL)
{
static clock_t last;
clock_t now = clock_systime_ticks();
static clock_t last;
clock_t now = clock_systime_ticks();
if (now - last >= MSEC2TICK(16))
{
sim_x11update();
last = now;
}
if (now - last >= MSEC2TICK(16))
{
sim_x11update();
last = now;
}
#endif
}