#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
{
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);
}
static int usb_keyboard_initfn(USBDevice *dev)
{
+#ifdef CONFIG_MARU
+ mloop_evcmd_set_usbkbd(dev);
+#endif
return usb_hid_initfn(dev, HID_KEYBOARD);
}
#include "sysemu.h"
#include "blockdev.h"
+#ifdef CONFIG_MARU
+#include "../tizen/src/mloop_event.h"
+#endif
+
//#define DEBUG_MSD
#ifdef DEBUG_MSD
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;
if (qdev_init(&dev->qdev) < 0)
return NULL;
+#ifdef CONFIG_MARU
+ mloop_evcmd_set_usbdisk(dev);
+#endif
+
return dev;
}
.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[]) {
#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
}\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
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
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
}\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
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