#include <linux/usb.h>

#define DEV_NAME    	   "HID-I/O"

#define PRODUCT_ID_0       0x05df
#define VENDOR_ID_0        0x16c0

#define PRODUCT_ID_1       0x21fe
#define VENDOR_ID_1        0x03eb

static struct usb_device_id hid_io_table [] = {
{ USB_DEVICE(VENDOR_ID_0, PRODUCT_ID_1) },
{ USB_DEVICE(VENDOR_ID_1, PRODUCT_ID_0) }	
{ }          // терминирующий элемент списка
};

struct usb_device *_usb_dev_; /* the usb device */
struct usb_interface *_interface_; /* interface of this device */

static int hid_io_probe(struct usb_interface *interface, const struct usb_device_id *id) 
{
    printk(KERN_INFO "hid.io.probe\n");

    // assign global parameters
    _usb_dev_ = usb_get_dev(interface_to_usbdev(interface));
    _interface_ = interface;

    /* save our data pointer in this interface device */
    usb_set_intfdata(_interface_, _usb_dev_);



    return 0;
}

static void hid_io_disconnect(struct usb_interface *interface) 
{
	printk(KERN_INFO "hid.io.disconnect\n");

	usb_set_intfdata(_interface_, NULL);
	usb_put_dev(_usb_dev_);
}

static struct usb_driver hid_io_driver = {
.name =   DEV_NAME,
.probe =  hid_io_probe,
.disconnect = hid_io_disconnect,
.id_table =  hid_io_table,
};

static int __init hid_io_init(void)
{

	return usb_register(&hid_io_driver);	// регистрируем драйвер
}

static void __exit hid_io_exit(void)
{
	usb_deregister(&hid_io_driver);			// выгружаем драйвер
}

module_init (hid_io_init);
module_exit (hid_io_exit);

MODULE_DESCRIPTION("HID-I/O");
MODULE_LICENSE("GPL");
