diff --git a/src/ial/Makefile.am b/src/ial/Makefile.am
index 9f16a82f..fb150b8a 100644
--- a/src/ial/Makefile.am
+++ b/src/ial/Makefile.am
@@ -48,6 +48,8 @@ CISCO_TOUCHPAD_SRCS = cisco_touchpad.h cisco_touchpad.c
MSTAR_SRCS = mstarial.h mstarial.c
DFB_SRCS = dfb.h dfb.c
+USVFB_SRCS = usvfbinput.c usvfbinput.h
+
if MGIAL_CONSOLE
native_libial_la_LIBADD = native/libnative.la
endif
@@ -73,4 +75,4 @@ libial_la_SOURCES = $(COMMON_SRCS) $(DUMMY_SRCS) $(JZ4740_SRCS) \
$(COMMINPUT_SRCS) $(QVFB_SRCS) $(WVFB_SRCS) \
$(QEMU_SRCS) $(IPAQ_H3600_SRCS) $(IPAQ_H5400_SRCS) \
$(TSLIB_SRCS) $(SHANDONG_LIDE_SRCS) $(CISCO_TOUCHPAD_SRCS) \
- $(MSTAR_SRCS) $(DFB_SRCS)
+ $(MSTAR_SRCS) $(DFB_SRCS) $(USVFB_SRCS)
diff --git a/src/ial/ial.c b/src/ial/ial.c
index 1355cc5b..b64b3c93 100644
--- a/src/ial/ial.c
+++ b/src/ial/ial.c
@@ -114,6 +114,9 @@
#ifdef _MGIAL_DFB
#include "dfb.h"
#endif
+#ifdef _MGIAL_USVFB
+ #include "usvfbinput.h"
+#endif
#define LEN_ENGINE_NAME 16
#define LEN_MTYPE_NAME 16
@@ -190,6 +193,9 @@ static INPUT inputs [] =
#ifdef _MGIAL_DFB
{"dfb", InitDFBInput, TermDFBInput},
#endif
+#ifdef _MGIAL_USVFB
+ {"usvfb", InitUSVFBInput, TermUSVFBInput},
+#endif
/* ... end of general IAL engines */
};
diff --git a/src/ial/usvfbinput.c b/src/ial/usvfbinput.c
new file mode 100644
index 00000000..d57cd156
--- /dev/null
+++ b/src/ial/usvfbinput.c
@@ -0,0 +1,181 @@
+/*
+ * This file is part of MiniGUI, a mature cross-platform windowing
+ * and Graphics User Interface (GUI) support system for embedded systems
+ * and smart IoT devices.
+ *
+ * Copyright (C) 2002~2018, Beijing FMSoft Technologies Co., Ltd.
+ * Copyright (C) 1998~2002, WEI Yongming
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ * Or,
+ *
+ * As this program is a library, any link to this program must follow
+ * GNU General Public License version 3 (GPLv3). If you cannot accept
+ * GPLv3, you need to be licensed from FMSoft.
+ *
+ * If you have got a commercial license of this program, please use it
+ * under the terms and conditions of the commercial license.
+ *
+ * For more information about the commercial license, please refer to
+ * .
+ */
+/*
+** usvfbinput.c: Input Engine for UnixSocket Virtual Frame Buffer
+**
+** Created by Vincent Wei, 2018/07/29
+*/
+
+#include
+#include
+
+#include "common.h"
+
+#ifdef _MGIAL_USVFB
+
+#include "minigui.h"
+#include "misc.h"
+#include "ial.h"
+
+#include "usvfbinput.h"
+
+#define USVFB_MOUSEINPUT 0x01
+#define USVFB_KBINPUT 0x02
+
+#define USVFB_MOUSELBUTTON 0x01
+#define USVFB_MOUSERBUTTON 0x04
+
+/* ----------------------------------------------------------------------- */
+// OS input driver or application must implement these input functions
+// hardware must be initialized before this engine can be used.
+
+extern int __comminput_init (void);
+extern int __comminput_ts_getdata (short *x, short *y, short *button);
+extern int __comminput_kb_getdata (short *key, short *status);
+extern int __comminput_wait_for_input (struct timeval *timeout);
+extern void __comminput_deinit (void);
+
+/* ----------------------------------------------------------------------- */
+
+static short MOUSEX = 0, MOUSEY = 0, MOUSEBUTTON = 0;
+static short KEYCODE = 0, KEYSTATUS = 0;
+
+/************************ Low Level Input Operations **********************/
+static int mouse_update (void)
+{
+ return 1;
+}
+
+static void mouse_getxy (int *x, int* y)
+{
+ *x = MOUSEX;
+ *y = MOUSEY;
+}
+
+static int mouse_getbutton (void)
+{
+ int button = 0;
+ if (MOUSEBUTTON == USVFB_MOUSELBUTTON)
+ button |= IAL_MOUSE_LEFTBUTTON;
+ else if (MOUSEBUTTON == USVFB_MOUSERBUTTON)
+ button |= IAL_MOUSE_RIGHTBUTTON;
+
+ MOUSEBUTTON = 0;
+ return button;
+}
+
+static unsigned char kbd_state [NR_KEYS];
+
+static int keyboard_update (void)
+{
+ if (KEYCODE == 0)
+ return 0;
+
+ return KEYCODE + 1;
+}
+
+static const char* keyboard_getstate (void)
+{
+ return (const char*)kbd_state;
+}
+
+static int wait_event (int which, int maxfd, fd_set *in, fd_set *out, fd_set *except,
+ struct timeval *timeout)
+{
+ int retvalue;
+
+ retvalue = __comminput_wait_for_input (timeout);
+
+ if (retvalue > 0) {
+ if (retvalue & USVFB_MOUSEINPUT) {
+ if (__comminput_ts_getdata (&MOUSEX, &MOUSEY, &MOUSEBUTTON) == 0)
+ retvalue = IAL_MOUSEEVENT;
+ else
+ retvalue = -1;
+ }
+ else if (retvalue & USVFB_KBINPUT) {
+ if (__comminput_kb_getdata (&KEYCODE, &KEYSTATUS) == 0) {
+ if (kbd_state[KEYCODE] == KEYSTATUS) {
+ retvalue = -1;
+ }
+
+ kbd_state[KEYCODE] = KEYSTATUS;
+ retvalue = IAL_KEYEVENT;
+ }
+ else
+ retvalue = -1;
+ }
+ else
+ retvalue = -1;
+ }
+ else if (retvalue < 0) {
+ retvalue = -1;
+ }
+
+ return retvalue;
+}
+
+BOOL InitUSVFBInput (INPUT* input, const char* mdev, const char* mtype)
+{
+ /* input hardware should be initialized before this function is called */
+
+ if (__comminput_init ())
+ return FALSE;
+
+ input->update_mouse = mouse_update;
+ input->get_mouse_xy = mouse_getxy;
+ input->set_mouse_xy = NULL;
+ input->get_mouse_button = mouse_getbutton;
+ input->set_mouse_range = NULL;
+ input->suspend_mouse= NULL;
+ input->resume_mouse = NULL;
+
+ input->update_keyboard = keyboard_update;
+ input->get_keyboard_state = keyboard_getstate;
+ input->suspend_keyboard = NULL;
+ input->resume_keyboard = NULL;
+ input->set_leds = NULL;
+
+ input->wait_event = wait_event;
+
+ return TRUE;
+}
+
+void TermUSVFBInput (void)
+{
+ __comminput_deinit ();
+}
+
+#endif /* _MGIAL_USVFB */
+
diff --git a/src/ial/usvfbinput.h b/src/ial/usvfbinput.h
new file mode 100644
index 00000000..05d6fe84
--- /dev/null
+++ b/src/ial/usvfbinput.h
@@ -0,0 +1,55 @@
+/*
+ * This file is part of MiniGUI, a mature cross-platform windowing
+ * and Graphics User Interface (GUI) support system for embedded systems
+ * and smart IoT devices.
+ *
+ * Copyright (C) 2002~2018, Beijing FMSoft Technologies Co., Ltd.
+ * Copyright (C) 1998~2002, WEI Yongming
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ * Or,
+ *
+ * As this program is a library, any link to this program must follow
+ * GNU General Public License version 3 (GPLv3). If you cannot accept
+ * GPLv3, you need to be licensed from FMSoft.
+ *
+ * If you have got a commercial license of this program, please use it
+ * under the terms and conditions of the commercial license.
+ *
+ * For more information about the commercial license, please refer to
+ * .
+ */
+/*
+** usvfbinput.h: head file for USVFB IAL Engine
+**
+** Created by Vincent Wei, 2018/07/29
+*/
+
+#ifndef _IAL_USVFB_H
+#define _IAL_USVFB_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+BOOL InitUSVFBInput (INPUT* input, const char* mdev, const char* mtype);
+void TermUSVFBInput (void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _IAL_USVFB_H */
+