Revision 806b6024 hw/usb-hid.c
b/hw/usb-hid.c | ||
---|---|---|
846 | 846 |
qemu_free(s); |
847 | 847 |
} |
848 | 848 |
|
849 |
USBDevice *usb_tablet_init(void)
|
|
849 |
static int usb_hid_initfn(USBDevice *dev, int kind)
|
|
850 | 850 |
{ |
851 |
USBHIDState *s; |
|
852 |
|
|
853 |
s = qemu_mallocz(sizeof(USBHIDState)); |
|
851 |
USBHIDState *s = DO_UPCAST(USBHIDState, dev, dev); |
|
854 | 852 |
s->dev.speed = USB_SPEED_FULL; |
855 |
s->dev.handle_packet = usb_generic_handle_packet; |
|
856 |
|
|
857 |
s->dev.handle_reset = usb_mouse_handle_reset; |
|
858 |
s->dev.handle_control = usb_hid_handle_control; |
|
859 |
s->dev.handle_data = usb_hid_handle_data; |
|
860 |
s->dev.handle_destroy = usb_hid_handle_destroy; |
|
861 |
s->kind = USB_TABLET; |
|
853 |
s->kind = kind; |
|
862 | 854 |
/* Force poll routine to be run and grab input the first time. */ |
863 | 855 |
s->changed = 1; |
864 |
|
|
865 |
pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Tablet"); |
|
866 |
|
|
867 |
return (USBDevice *)s; |
|
856 |
return 0; |
|
868 | 857 |
} |
869 | 858 |
|
870 |
USBDevice *usb_mouse_init(void)
|
|
859 |
static int usb_tablet_initfn(USBDevice *dev)
|
|
871 | 860 |
{ |
872 |
USBHIDState *s; |
|
861 |
return usb_hid_initfn(dev, USB_TABLET); |
|
862 |
} |
|
873 | 863 |
|
874 |
s = qemu_mallocz(sizeof(USBHIDState)); |
|
875 |
s->dev.speed = USB_SPEED_FULL; |
|
876 |
s->dev.handle_packet = usb_generic_handle_packet; |
|
864 |
static int usb_mouse_initfn(USBDevice *dev) |
|
865 |
{ |
|
866 |
return usb_hid_initfn(dev, USB_MOUSE); |
|
867 |
} |
|
877 | 868 |
|
878 |
s->dev.handle_reset = usb_mouse_handle_reset; |
|
879 |
s->dev.handle_control = usb_hid_handle_control; |
|
880 |
s->dev.handle_data = usb_hid_handle_data; |
|
881 |
s->dev.handle_destroy = usb_hid_handle_destroy; |
|
882 |
s->kind = USB_MOUSE; |
|
883 |
/* Force poll routine to be run and grab input the first time. */ |
|
884 |
s->changed = 1; |
|
869 |
static int usb_keyboard_initfn(USBDevice *dev) |
|
870 |
{ |
|
871 |
return usb_hid_initfn(dev, USB_KEYBOARD); |
|
872 |
} |
|
885 | 873 |
|
886 |
pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Mouse"); |
|
874 |
USBDevice *usb_tablet_init(void) |
|
875 |
{ |
|
876 |
return usb_create_simple(NULL /* FIXME */, "QEMU USB Tablet"); |
|
877 |
} |
|
887 | 878 |
|
888 |
return (USBDevice *)s; |
|
879 |
USBDevice *usb_mouse_init(void) |
|
880 |
{ |
|
881 |
return usb_create_simple(NULL /* FIXME */, "QEMU USB Mouse"); |
|
889 | 882 |
} |
890 | 883 |
|
891 | 884 |
USBDevice *usb_keyboard_init(void) |
892 | 885 |
{ |
893 |
USBHIDState *s; |
|
894 |
|
|
895 |
s = qemu_mallocz(sizeof(USBHIDState)); |
|
896 |
s->dev.speed = USB_SPEED_FULL; |
|
897 |
s->dev.handle_packet = usb_generic_handle_packet; |
|
898 |
|
|
899 |
s->dev.handle_reset = usb_keyboard_handle_reset; |
|
900 |
s->dev.handle_control = usb_hid_handle_control; |
|
901 |
s->dev.handle_data = usb_hid_handle_data; |
|
902 |
s->dev.handle_destroy = usb_hid_handle_destroy; |
|
903 |
s->kind = USB_KEYBOARD; |
|
904 |
|
|
905 |
pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Keyboard"); |
|
906 |
|
|
907 |
return (USBDevice *) s; |
|
886 |
return usb_create_simple(NULL /* FIXME */, "QEMU USB Keyboard"); |
|
908 | 887 |
} |
909 | 888 |
|
910 | 889 |
void usb_hid_datain_cb(USBDevice *dev, void *opaque, void (*datain)(void *)) |
... | ... | |
914 | 893 |
s->datain_opaque = opaque; |
915 | 894 |
s->datain = datain; |
916 | 895 |
} |
896 |
|
|
897 |
static struct USBDeviceInfo hid_info[] = { |
|
898 |
{ |
|
899 |
.qdev.name = "QEMU USB Tablet", |
|
900 |
.qdev.size = sizeof(USBHIDState), |
|
901 |
.init = usb_tablet_initfn, |
|
902 |
.handle_packet = usb_generic_handle_packet, |
|
903 |
.handle_reset = usb_mouse_handle_reset, |
|
904 |
.handle_control = usb_hid_handle_control, |
|
905 |
.handle_data = usb_hid_handle_data, |
|
906 |
.handle_destroy = usb_hid_handle_destroy, |
|
907 |
},{ |
|
908 |
.qdev.name = "QEMU USB Mouse", |
|
909 |
.qdev.size = sizeof(USBHIDState), |
|
910 |
.init = usb_mouse_initfn, |
|
911 |
.handle_packet = usb_generic_handle_packet, |
|
912 |
.handle_reset = usb_mouse_handle_reset, |
|
913 |
.handle_control = usb_hid_handle_control, |
|
914 |
.handle_data = usb_hid_handle_data, |
|
915 |
.handle_destroy = usb_hid_handle_destroy, |
|
916 |
},{ |
|
917 |
.qdev.name = "QEMU USB Keyboard", |
|
918 |
.qdev.size = sizeof(USBHIDState), |
|
919 |
.init = usb_keyboard_initfn, |
|
920 |
.handle_packet = usb_generic_handle_packet, |
|
921 |
.handle_reset = usb_keyboard_handle_reset, |
|
922 |
.handle_control = usb_hid_handle_control, |
|
923 |
.handle_data = usb_hid_handle_data, |
|
924 |
.handle_destroy = usb_hid_handle_destroy, |
|
925 |
},{ |
|
926 |
/* end of list */ |
|
927 |
} |
|
928 |
}; |
|
929 |
|
|
930 |
static void usb_hid_register_devices(void) |
|
931 |
{ |
|
932 |
usb_qdev_register_many(hid_info); |
|
933 |
} |
|
934 |
device_init(usb_hid_register_devices) |
Also available in: Unified diff