emulator: modified touchscreen option 28/19928/1
authorGiWoong Kim <giwoong.kim@samsung.com>
Wed, 16 Apr 2014 11:58:01 +0000 (20:58 +0900)
committerGiWoong Kim <giwoong.kim@samsung.com>
Wed, 23 Apr 2014 06:04:14 +0000 (15:04 +0900)
added max_point deivce option for virtio touchscreen
remove -max-touch-point option

Change-Id: I32ff1b18d39c6c05364a5723ab68a0b9887fa047
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
hw/virtio/virtio-pci.c
qemu-options.hx
tizen/src/emulator.c
tizen/src/hw/maru_virtio_touchscreen.c
tizen/src/hw/maru_virtio_touchscreen.h
tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorShmSkin.java
vl.c

index eec210426dc41b6c39f2f05b0a74feb281130993..e6ae77effb5ececfa1006c7c342bf17e4ba9d114 100644 (file)
@@ -1547,6 +1547,12 @@ static TypeInfo virtio_gl_pci_info = {
 
 /* virtio-touchscreen-pci */
 
+static Property virtio_touchscreen_pci_properties[] = {
+    DEFINE_PROP_UINT32(TOUCHSCREEN_OPTION_NAME,
+        VirtIOTouchscreenPCI,vdev.max_finger, DEFAULT_MAX_FINGER),
+    DEFINE_PROP_END_OF_LIST(),
+};
+
 static int virtio_touchscreen_pci_init(VirtIOPCIProxy *vpci_dev)
 {
     VirtIOTouchscreenPCI *dev = VIRTIO_TOUCHSCREEN_PCI(vpci_dev);
@@ -1561,10 +1567,11 @@ static int virtio_touchscreen_pci_init(VirtIOPCIProxy *vpci_dev)
 
 static void virtio_touchscreen_pci_class_init(ObjectClass *klass, void *data)
 {
-//    DeviceClass *dc = DEVICE_CLASS(klass);
+    DeviceClass *dc = DEVICE_CLASS(klass);
     VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
     PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
 
+    dc->props = virtio_touchscreen_pci_properties;
     k->init = virtio_touchscreen_pci_init;
     pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
     pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_TOUCHSCREEN;
@@ -1577,13 +1584,15 @@ static void virtio_touchscreen_pci_instance_init(Object *obj)
     VirtIOTouchscreenPCI *dev = VIRTIO_TOUCHSCREEN_PCI(obj);
     object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_TOUCHSCREEN);
     object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
+
+    dev->vdev.max_finger = DEFAULT_MAX_FINGER;
 }
 
 static TypeInfo virtio_touchscreen_pci_info = {
     .name          = TYPE_VIRTIO_TOUCHSCREEN_PCI,
     .parent        = TYPE_VIRTIO_PCI,
     .instance_size = sizeof(VirtIOTouchscreenPCI),
-       .instance_init = virtio_touchscreen_pci_instance_init,
+    .instance_init = virtio_touchscreen_pci_instance_init,
     .class_init    = virtio_touchscreen_pci_class_init,
 };
 
index 60b646a57253d9f95fb270007667234410903225..c0148280ef456e84612413dd1413aab92dddebc2 100644 (file)
@@ -3110,16 +3110,6 @@ the @var{simple} tracing backend.
 @end table
 ETEXI
 
-DEF("max-touch-point", HAS_ARG, QEMU_OPTION_max_touch_point, \
-    "-max-touch-point [count]\n"
-    "                define maximum number of touch point\n",
-    QEMU_ARCH_ALL)
-STEXI
-@item -max-touch-point @var{max_count}
-@findex -max-touch-point
-Use @var{max_count} as Integer
-ETEXI
-
 DEF("disable-skin", 0, QEMU_OPTION_disable_skin, \
     "-disable-skin\n"
     "                do not start with java skin process\n",
index 0bd636caa3e7865cf155e984ab7ed9ee036ccfd5..f44147a57c4bb910c08e257231aeb7c9956ff5d1 100644 (file)
@@ -42,6 +42,7 @@
 #include "guest_debug.h"
 #include "guest_server.h"
 #include "hw/maru_camera_common.h"
+#include "hw/maru_virtio_touchscreen.h"
 #include "hw/gloffscreen_test.h"
 #include "maru_common.h"
 #include "maru_err_table.h"
@@ -135,6 +136,9 @@ static void construct_main_window(int skin_argc, char *skin_argv[],
 
     start_skin_server(skin_argc, skin_argv, qemu_argc, qemu_argv);
 
+    set_emul_caps_lock_state(0);
+    set_emul_num_lock_state(0);
+
     /* the next line checks for debugging and etc.. */
     if (get_emul_skin_enable() == 1) {
         if (0 > start_skin_client(skin_argc, skin_argv)) {
@@ -142,9 +146,6 @@ static void construct_main_window(int skin_argc, char *skin_argv[],
             exit(-1);
         }
     }
-
-    set_emul_caps_lock_state(0);
-    set_emul_num_lock_state(0);
 }
 
 static void parse_options(int argc, char *argv[], int *skin_argc,
@@ -271,11 +272,21 @@ static void extract_qemu_info(int qemu_argc, char **qemu_argv)
         if (strstr(qemu_argv[i], IMAGE_PATH_PREFIX) != NULL) {
             set_image_and_log_path(qemu_argv[i]);
         } else if (strstr(qemu_argv[i], INPUT_TOUCH_PARAMETER) != NULL) {
+            /* touchscreen */
             set_emul_input_touch_enable(true);
+
+            char *option = strstr(qemu_argv[i] + strlen(INPUT_TOUCH_PARAMETER), TOUCHSCREEN_OPTION_NAME);
+            if (option != NULL) {
+                option += strlen(TOUCHSCREEN_OPTION_NAME) + 1;
+
+                set_emul_max_touch_point(atoi(option));
+            }
         }
     }
-    if (is_emul_input_touch_enable() != true)
+
+    if (is_emul_input_touch_enable() != true) {
         set_emul_input_mouse_enable(true);
+    }
 }
 
 static void extract_skin_info(int skin_argc, char **skin_argv)
index b68991ffbb89c08f59e0e022e7597a3fcde8d6c9..f157a67ceb87a6c00c2c5c067069297393f451b9 100644 (file)
@@ -311,7 +311,7 @@ static int virtio_touchscreen_device_init(VirtIODevice *vdev)
     DeviceState *qdev = DEVICE(vdev);
     ts = VIRTIO_TOUCHSCREEN(vdev);
 
-    INFO("initialize the touchscreen device\n");
+    INFO("initialize touchscreen device : %d\n", ts->max_finger);
 
     virtio_init(vdev, DEVICE_NAME, VIRTIO_ID_TOUCHSCREEN, 4);
     /*if (ts == NULL) {
index 777d3ef7a0db75319338c4d6377436a37c829f65..530125d1400a83fd41eb2650e421bc965bb115e8 100644 (file)
 #include "ui/console.h"
 #include "hw/virtio/virtio.h"
 
-#define TYPE_VIRTIO_TOUCHSCREEN "virtio-touschreen-device"
+#define TYPE_VIRTIO_TOUCHSCREEN "virtio-touchscreen-device"
 #define VIRTIO_TOUCHSCREEN(obj) \
         OBJECT_CHECK(VirtIOTouchscreen, (obj), TYPE_VIRTIO_TOUCHSCREEN)
 
+#define TOUCHSCREEN_OPTION_NAME "max_point"
+#define DEFAULT_MAX_FINGER (1)
+
 typedef struct VirtIOTouchscreen {
     VirtIODevice vdev;
     /* simply a queue into which buffers are posted
@@ -47,6 +50,8 @@ typedef struct VirtIOTouchscreen {
     QEMUBH *bh;
     DeviceState *qdev;
     QEMUPutMouseEntry *eh_entry;
+
+    unsigned int max_finger;
 } VirtIOTouchscreen;
 
 /* This structure must match the kernel definitions */
@@ -58,7 +63,6 @@ typedef struct EmulTouchEvent {
 VirtIODevice *maru_virtio_touchscreen_init(DeviceState *dev);
 void maru_virtio_touchscreen_exit(VirtIODevice *vdev);
 
-
 void virtio_touchscreen_event(void *opaque, int x, int y, int z, int buttons_state);
 void maru_virtio_touchscreen_notify(void);
 
index 800f2004e7478c5d904fdf6411673cbe5543453f..72a9786da01c5e39b9c9ec6cf1c130f420ae870e 100644 (file)
@@ -572,19 +572,21 @@ public class EmulatorShmSkin extends EmulatorSkin {
        @Override
        protected void keyReleasedDelivery(int keyCode,
                        int stateMask, int keyLocation, boolean remove) {
-               /* check multi-touch */
-               if (keyCode == multiTouchKeySub || keyCode == multiTouchKey) {
-                       int tempStateMask = stateMask & ~SWT.BUTTON1;
+               if (finger.getMaxTouchPoint() > 1) {
+                       /* check multi-touch */
+                       if (keyCode == multiTouchKeySub || keyCode == multiTouchKey) {
+                               int tempStateMask = stateMask & ~SWT.BUTTON1;
 
-                       if (tempStateMask == (multiTouchKeySub | multiTouchKey)) {
-                               finger.setMultiTouchEnable(1);
+                               if (tempStateMask == (multiTouchKeySub | multiTouchKey)) {
+                                       finger.setMultiTouchEnable(1);
 
-                               logger.info("enable multi-touch = mode 1");
-                       } else {
-                               finger.clearFingerSlot(false);
-                               updateDisplay();
+                                       logger.info("enable multi-touch = mode 1");
+                               } else {
+                                       finger.clearFingerSlot(false);
+                                       updateDisplay();
 
-                               logger.info("disable multi-touch");
+                                       logger.info("disable multi-touch");
+                               }
                        }
                }
 
@@ -601,42 +603,43 @@ public class EmulatorShmSkin extends EmulatorSkin {
        @Override
        protected void keyPressedDelivery(int keyCode,
                        int stateMask, int keyLocation, boolean add) {
-               /* TODO: (finger.getMaxTouchPoint() > 1) */
-
-               int tempStateMask = stateMask & ~SWT.BUTTON1;
-
-               if ((keyCode == multiTouchKeySub && (tempStateMask & multiTouchKey) != 0) ||
-                               (keyCode == multiTouchKey && (tempStateMask & multiTouchKeySub) != 0))
-               {
-                       finger.setMultiTouchEnable(2);
-
-                       /* add a finger before start the multi-touch processing
-                       if already exist the pressed touch in display */
-                       if (pressingX != -1 && pressingY != -1 &&
-                                       pressingOriginX != -1 && pressingOriginY != -1) {
-                               finger.addFingerPoint(
-                                               pressingOriginX, pressingOriginY,
-                                               pressingX, pressingY);
-                               pressingX = pressingY = -1;
-                               pressingOriginX = pressingOriginY = -1;
-                       }
+               if (finger.getMaxTouchPoint() > 1) {
+                   /* multi-touch checking */
+                       int tempStateMask = stateMask & ~SWT.BUTTON1;
 
-                       logger.info("enable multi-touch = mode 2");
-               } else if (keyCode == multiTouchKeySub || keyCode == multiTouchKey) {
-                       finger.setMultiTouchEnable(1);
-
-                       /* add a finger before start the multi-touch processing
-                       if already exist the pressed touch in display */
-                       if (pressingX != -1 && pressingY != -1 &&
-                                       pressingOriginX != -1 && pressingOriginY != -1) {
-                               finger.addFingerPoint(
-                                               pressingOriginX, pressingOriginY,
-                                               pressingX, pressingY);
-                               pressingX = pressingY = -1;
-                               pressingOriginX = pressingOriginY = -1;
-                       }
+                       if ((keyCode == multiTouchKeySub && (tempStateMask & multiTouchKey) != 0) ||
+                                       (keyCode == multiTouchKey && (tempStateMask & multiTouchKeySub) != 0))
+                       {
+                               finger.setMultiTouchEnable(2);
+
+                               /* add a finger before start the multi-touch processing
+                               if already exist the pressed touch in display */
+                               if (pressingX != -1 && pressingY != -1 &&
+                                               pressingOriginX != -1 && pressingOriginY != -1) {
+                                       finger.addFingerPoint(
+                                                       pressingOriginX, pressingOriginY,
+                                                       pressingX, pressingY);
+                                       pressingX = pressingY = -1;
+                                       pressingOriginX = pressingOriginY = -1;
+                               }
+
+                               logger.info("enable multi-touch = mode 2");
+                       } else if (keyCode == multiTouchKeySub || keyCode == multiTouchKey) {
+                               finger.setMultiTouchEnable(1);
 
-                       logger.info("enable multi-touch = mode 1");
+                               /* add a finger before start the multi-touch processing
+                               if already exist the pressed touch in display */
+                               if (pressingX != -1 && pressingY != -1 &&
+                                               pressingOriginX != -1 && pressingOriginY != -1) {
+                                       finger.addFingerPoint(
+                                                       pressingOriginX, pressingOriginY,
+                                                       pressingX, pressingY);
+                                       pressingX = pressingY = -1;
+                                       pressingOriginX = pressingOriginY = -1;
+                               }
+
+                               logger.info("enable multi-touch = mode 1");
+                       }
                }
 
                KeyEventData keyEventData = new KeyEventData(
diff --git a/vl.c b/vl.c
index 6cf5fe352474b4b49c13411f1912a496c4a72614..5f991d480ba704b21bc8078dcfa9cf3b532d1e7b 100644 (file)
--- a/vl.c
+++ b/vl.c
@@ -3905,17 +3905,6 @@ int main(int argc, char **argv, char **envp)
                         "HAX support is disabled, ignoring -enable-hax\n");
 #endif
                 break;
-#ifdef CONFIG_MARU
-            case QEMU_OPTION_max_touch_point:
-                {
-                    int cnt = atoi(optarg);
-                    set_emul_max_touch_point(cnt);
-                    break;
-                }
-            case QEMU_OPTION_disable_skin:
-                skin_disabled = 1;
-                break;
-#endif
             case QEMU_OPTION_add_fd:
 #ifndef _WIN32
                 opts = qemu_opts_parse(qemu_find_opts("add-fd"), optarg, 0);
@@ -3929,6 +3918,9 @@ int main(int argc, char **argv, char **envp)
 #endif
                 break;
 #ifdef CONFIG_MARU
+            case QEMU_OPTION_disable_skin:
+                skin_disabled = 1;
+                break;
             case QEMU_OPTION_enable_suspend:
                 ecs_set_suspend_state(SUSPEND_UNLOCK);
                 break;