#include #include #include static struct usb_device *device; static int thumb_probe(struct usb_interface *interface, const struct usb_device_id *id) { struct usb_host_interface *iface_desc; struct usb_endpoint_descriptor *endpoint; int i; iface_desc = interface->cur_altsetting; printk(KERN_INFO "Thumb drive i/f %d now probed: (%04X:%04X)\n", iface_desc->desc.bInterfaceNumber, id->idVendor, id->idProduct); printk(KERN_INFO "ID->bNumEndpoints: %02X\n", iface_desc->desc.bNumEndpoints); printk(KERN_INFO "ID->bInterfaceClass: %02X\n", iface_desc->desc.bInterfaceClass); for (i = 0; i < iface_desc->desc.bNumEndpoints; i++) { endpoint = &iface_desc->endpoint[i].desc; printk(KERN_INFO "ED[%d]->bEndpointAddress: 0x%02X\n", i, endpoint->bEndpointAddress); printk(KERN_INFO "ED[%d]->bmAttributes: 0x%02X\n", i, endpoint->bmAttributes); printk(KERN_INFO "ED[%d]->wMaxPacketSize: 0x%04X (%d)\n", i, endpoint->wMaxPacketSize, endpoint->wMaxPacketSize); } device = interface_to_usbdev(interface); return 0; } static void thumb_disconnect(struct usb_interface *interface) { printk(KERN_INFO "Thumb drive i/f %d now disconnected\n", interface->cur_altsetting->desc.bInterfaceNumber); } static struct usb_device_id thumb_table[] = { { USB_DEVICE(0x0781, 0x5408) }, {} /* Terminating entry */ }; MODULE_DEVICE_TABLE (usb, thumb_table); static struct usb_driver thumb_driver = { .name = "thumb_driver", .id_table = thumb_table, .probe = thumb_probe, .disconnect = thumb_disconnect, }; static int __init thumb_init(void) { return usb_register(&thumb_driver); } static void __exit thumb_exit(void) { usb_deregister(&thumb_driver); } module_init(thumb_init); module_exit(thumb_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Michael Mitchell"); MODULE_DESCRIPTION("USB Thumb Drive Demo");