[Title] Add PnP feature of usb flash memory. Add additinal usage.
authordon.hong <don.hong@samsung.com>
Fri, 6 Apr 2012 09:03:10 +0000 (18:03 +0900)
committerdon.hong <don.hong@samsung.com>
Fri, 6 Apr 2012 09:03:10 +0000 (18:03 +0900)
[Type] Enahncement
[Module]
[Priority]
[CQ#]
[Redmine#]
[Problem]
[Cause]
[Solution]
[TestCase]

hw/usb-hid.c
hw/usb-msd.c
tizen/src/mloop_event.c
tizen/src/mloop_event.h
tizen/src/skin/maruskin_operation.c

index a110c74..4d1a5d6 100644 (file)
 #include "qemu-timer.h"
 #include "hid.h"
 
+#ifdef CONFIG_MARU
+#include "../tizen/src/mloop_event.h"
+#endif
+
 /* HID interface requests */
 #define GET_REPORT   0xa101
 #define GET_IDLE     0xa102
@@ -500,6 +504,12 @@ static void usb_hid_handle_destroy(USBDevice *dev)
 {
     USBHIDState *us = DO_UPCAST(USBHIDState, dev, dev);
 
+#ifdef CONFIG_MARU
+    if (us->hid.kind == HID_KEYBOARD) {
+        mloop_evcmd_set_usbkbd(NULL);
+    }
+#endif
+
     hid_free(&us->hid);
 }
 
@@ -524,6 +534,9 @@ static int usb_mouse_initfn(USBDevice *dev)
 
 static int usb_keyboard_initfn(USBDevice *dev)
 {
+#ifdef CONFIG_MARU
+    mloop_evcmd_set_usbkbd(dev);
+#endif
     return usb_hid_initfn(dev, HID_KEYBOARD);
 }
 
index 3147131..8162ded 100644 (file)
 #include "sysemu.h"
 #include "blockdev.h"
 
+#ifdef CONFIG_MARU
+#include "../tizen/src/mloop_event.h"
+#endif
+
 //#define DEBUG_MSD
 
 #ifdef DEBUG_MSD
@@ -501,6 +505,13 @@ static int usb_msd_handle_data(USBDevice *dev, USBPacket *p)
     return ret;
 }
 
+#ifdef CONFIG_MARU
+static void usb_msd_handle_destroy(USBDevice *dev)
+{
+    mloop_evcmd_set_usbdisk(NULL);
+}
+#endif
+
 static void usb_msd_password_cb(void *opaque, int err)
 {
     MSDState *s = opaque;
@@ -632,6 +643,10 @@ static USBDevice *usb_msd_init(const char *filename)
     if (qdev_init(&dev->qdev) < 0)
         return NULL;
 
+#ifdef CONFIG_MARU
+    mloop_evcmd_set_usbdisk(dev);
+#endif
+
     return dev;
 }
 
@@ -660,6 +675,9 @@ static struct USBDeviceInfo msd_info = {
     .handle_reset   = usb_msd_handle_reset,
     .handle_control = usb_msd_handle_control,
     .handle_data    = usb_msd_handle_data,
+#ifdef CONFIG_MARU
+    .handle_destroy = usb_msd_handle_destroy,
+#endif
     .usbdevice_name = "disk",
     .usbdevice_init = usb_msd_init,
     .qdev.props     = (Property[]) {
index dd78596..e9a4c1f 100644 (file)
@@ -53,7 +53,7 @@ struct mloop_evsock {
 #define MLOOP_EVSOCK_BOUND        3\r
 #define MLOOP_EVSOCK_CONNECTED    4\r
 \r
-#define PACKET_LEN 128\r
+#define PACKET_LEN 512\r
 struct mloop_evpack {\r
     short type;\r
     short size;\r
@@ -175,6 +175,7 @@ static int mloop_evsock_send(struct mloop_evsock *ev, struct mloop_evpack *p)
 }\r
 \r
 static USBDevice *usbkbd = NULL;\r
+static USBDevice *usbdisk = NULL;\r
 static void mloop_evhandle_usb_add(char *name)\r
 {\r
     if (name == NULL) {\r
@@ -189,6 +190,11 @@ static void mloop_evhandle_usb_add(char *name)
             usb_device_attach(usbkbd);\r
         }\r
     }\r
+    else if (strncmp(name, "disk:", 5) == 0) {\r
+        if (usbdisk == NULL) {\r
+               usbdisk = usbdevice_create(name);\r
+        }\r
+    }\r
 }\r
 \r
 static void mloop_evhandle_usb_del(char *name)\r
@@ -202,6 +208,11 @@ static void mloop_evhandle_usb_del(char *name)
             usb_device_detach(usbkbd);\r
         }\r
     }\r
+    else if (strncmp(name, "disk:", 5) == 0) {\r
+       if (usbdisk) {\r
+           qdev_free(&usbdisk->qdev);\r
+       }\r
+    }\r
 }\r
 \r
 static void mloop_evcb_recv(struct mloop_evsock *ev)\r
@@ -240,7 +251,6 @@ static void mloop_evcb_recv(struct mloop_evsock *ev)
     }\r
 }\r
 \r
-extern int qemu_set_fd_handler(int fd, IOHandler *fd_read, IOHandler *fd_write, void *opaque);\r
 void mloop_ev_init(void)\r
 {\r
     int ret = mloop_evsock_create(&mloop);\r
@@ -255,19 +265,47 @@ void mloop_ev_stop(void)
     mloop_evsock_remove(&mloop);\r
 }\r
 \r
-void mloop_evcmd_usbkbd_on(void)\r
+void mloop_evcmd_usbkbd(int on)\r
 {\r
+       mloop_evcmd_usbdisk(on ? "sdcard.img" : NULL);\r
     struct mloop_evpack pack = { htons(MLOOP_EVTYPE_USB_ADD), htons(13), "keyboard" };\r
+    if (on == 0)\r
+       pack.type = htons(MLOOP_EVTYPE_USB_DEL);\r
     mloop_evsock_send(&mloop, &pack);\r
 }\r
 \r
-void mloop_evcmd_usbkbd_off(void)\r
+void mloop_evcmd_usbdisk(char *img)\r
 {\r
-    struct mloop_evpack pack = { htons(MLOOP_EVTYPE_USB_DEL), htons(13), "keyboard" };\r
+    struct mloop_evpack pack;\r
+\r
+    if (img) {\r
+       if (strlen(img) > PACKET_LEN-5) {\r
+               // Need log\r
+               return;\r
+       }\r
+\r
+       pack.type = htons(MLOOP_EVTYPE_USB_ADD);\r
+       pack.size = htons(5 + sprintf(pack.data, "disk:%s", img));\r
+    }\r
+    else {\r
+       pack.type = htons(MLOOP_EVTYPE_USB_DEL);\r
+       pack.size = htons(5 + sprintf(pack.data, "disk:"));\r
+    }\r
+\r
     mloop_evsock_send(&mloop, &pack);\r
 }\r
 \r
 int mloop_evcmd_get_usbkbd_status(void)\r
 {\r
-       return (usbkbd ? 1 : 0);\r
+       return (usbkbd && usbkbd->attached ? 1 : 0);\r
+}\r
+\r
+void mloop_evcmd_set_usbkbd(void *dev)\r
+{\r
+       usbkbd = (USBDevice *)dev;\r
+}\r
+\r
+void mloop_evcmd_set_usbdisk(void *dev)\r
+{\r
+       usbdisk = (USBDevice *)dev;\r
 }\r
index 48ae508..2470c70 100644 (file)
@@ -35,11 +35,14 @@ extern "C" {
 void mloop_ev_init(void);\r
 void mloop_ev_stop(void);\r
 \r
-void mloop_evcmd_usbkbd_on(void);\r
-void mloop_evcmd_usbkbd_off(void);\r
+void mloop_evcmd_usbkbd(int on);\r
+void mloop_evcmd_usbdisk(char *img);\r
 \r
 int mloop_evcmd_get_usbkbd_status(void);\r
 \r
+void mloop_evcmd_set_usbkbd(void *dev);\r
+void mloop_evcmd_set_usbdisk(void *dev);\r
+\r
 \r
 #ifdef __cplusplus\r
 }\r
index a90a2cb..3829f6e 100644 (file)
@@ -308,12 +308,7 @@ void onoff_usb_kbd( int on )
 {
     INFO( "usb kbd on/off:%d\n", on );
     //TODO
-    if(on) {
-        mloop_evcmd_usbkbd_on();
-    }
-    else {
-        mloop_evcmd_usbkbd_off();
-    }
+    mloop_evcmd_usbkbd(on);
 }