communication: added protocol for the host keyboard state 40/12240/1
authorGiWoong Kim <giwoong.kim@samsung.com>
Tue, 12 Nov 2013 03:07:59 +0000 (12:07 +0900)
committerGiWoong Kim <giwoong.kim@samsung.com>
Wed, 13 Nov 2013 01:21:20 +0000 (10:21 +0900)
The Qemu-Skin protocol has been extended to share the
host keyboard state between ECP and right-click popup
menu.

Change-Id: I50e239047b5fda6337f8505b84298643c2efb4ed
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java
tizen/src/skin/client/src/org/tizen/emulator/skin/comm/ICommunicator.java
tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java
tizen/src/skin/maruskin_server.c
tizen/src/skin/maruskin_server.h

index 7cee18b9945b05effe168c64f14b87e03ab600b7..f694bfa338ce01ff5cb62f9a80ba7b4254acf4c6 100755 (executable)
@@ -1248,6 +1248,18 @@ public class EmulatorSkin {
                });
        }
 
+       public void updateHostKbdMenu(final boolean on) {
+               isOnKbd = on;
+
+               getShell().getDisplay().asyncExec(new Runnable() {
+                       @Override
+                       public void run() {
+                               getPopupMenu().kbdOnItem.setSelection(isOnKbd);
+                               getPopupMenu().kbdOffItem.setSelection(!isOnKbd);
+                       }
+               });
+       }
+
        protected void displayOn() {
                logger.info("display on");
 
index 9b96120d1ef2b4454f35f560e4c6b22c45fb7579..a69445d43dcd73459b607eef805c4a799c7127fa 100644 (file)
@@ -267,6 +267,7 @@ public interface ICommunicator extends Runnable {
                RECV_BOOTING_PROGRESS((short) 5),
                RECV_BRIGHTNESS_STATE((short) 6),
                RECV_ECP_PORT_DATA((short) 7),
+               RECV_HOST_KBD_STATE((short) 8),
 
                RECV_SENSORD_STARTED((short) 800),
                RECV_SDBD_STARTED((short) 801),
index e79b9656be0d32df82952c00a5af01260035bb8f..2d571058ad8dcad21f39c7930a31800f054bc55d 100755 (executable)
@@ -379,6 +379,32 @@ public class SocketCommunicator implements ICommunicator {
 
                                        break;
                                }
+                               case RECV_HOST_KBD_STATE: {
+                                       logger.info("received HOST_KBD_STATE from QEMU");
+
+                                       resetDataTransfer(miscDataTransfer);
+                                       receiveData(miscDataTransfer, length);
+
+                                       byte[] receivedData = getReceivedData(miscDataTransfer);
+                                       if (null != receivedData) {
+                                               String strValue = new String(receivedData, 0, length - 1);
+
+                                               int value = 1;
+                                               try {
+                                                       value = Integer.parseInt(strValue);
+                                               } catch (NumberFormatException e) {
+                                                       e.printStackTrace();
+                                               }
+
+                                               if (value == 0) {
+                                                       skin.updateHostKbdMenu(false);
+                                               } else {
+                                                       skin.updateHostKbdMenu(true);
+                                               }
+                                       }
+
+                                       break;
+                               }
                                case RECV_SENSORD_STARTED: {
                                        logger.info("received SENSORD_STARTED from QEMU");
 
index 2db5538e72290e7f7193f79468c95ce3f8264042..8025f5d1b26abcd26adad7cb8fb276fa7399565d 100644 (file)
@@ -100,6 +100,7 @@ enum {
     in Skin process */
 
     RECV_SKIN_OPENED = 1,
+
     RECV_MOUSE_EVENT = 10,
     RECV_KEYBOARD_KEY_EVENT = 11,
     RECV_HW_KEY_EVENT = 12,
@@ -111,6 +112,7 @@ enum {
     RECV_RAM_DUMP = 18,
     RECV_GUESTMEMORY_DUMP = 19,
     RECV_ECP_PORT_REQ = 20,
+
     RECV_RESPONSE_HEART_BEAT = 900,
     RECV_RESPONSE_DRAW_FRAME = 901,
     RECV_CLOSE_REQ = 998,
@@ -129,6 +131,7 @@ enum {
     SEND_BRIGHTNESS_STATE = 6,
     SEND_ECP_PORT_DATA = 7,
     SEND_HOST_KBD_STATE = 8,
+
     SEND_SENSORD_STARTED = 800,
     SEND_SDBD_STARTED = 801,
     SEND_ECS_STARTED = 802,
@@ -425,6 +428,31 @@ void notify_brightness_state(bool on)
     }
 }
 
+void notify_host_kbd_state(bool on)
+{
+#define HOSTKBD_DATA_LENGTH 2
+    char kbd_state_data[HOSTKBD_DATA_LENGTH] = { 0, };
+
+    if (on == false) {
+        snprintf(kbd_state_data, HOSTKBD_DATA_LENGTH, "0");
+    } else {
+        snprintf(kbd_state_data, HOSTKBD_DATA_LENGTH, "1");
+    }
+
+    TRACE("notify host kbd state : %s\n", kbd_state_data);
+
+    if (client_sock) {
+        if (0 > send_skin_data(client_sock,
+            SEND_HOST_KBD_STATE,
+            (unsigned char *)kbd_state_data, HOSTKBD_DATA_LENGTH, 0)) {
+
+            ERR("fail to send SEND_HOST_KBD_STATE to skin\n");
+        }
+    } else {
+        INFO("skin client socket is not connected yet\n");
+    }
+}
+
 int is_ready_skin_server(void)
 {
     return ready_server;
index 1b1743a285f3873e68c751ac94b755272f35ccac..3e492a33f6320b98a0ba3cb6ef6f9602e2c619b0 100644 (file)
@@ -41,6 +41,7 @@ void notify_sensor_daemon_start(void);
 void notify_ramdump_completed(void);
 void notify_booting_progress(unsigned int layer, int progress_value);
 void notify_brightness_state(bool on);
+void notify_host_kbd_state(bool on);
 
 int is_ready_skin_server(void);
 int get_skin_server_port(void);