日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式Linux下USB驅(qū)動程序的設計

          嵌入式Linux下USB驅(qū)動程序的設計

          作者: 時間:2013-10-08 來源:網(wǎng)絡 收藏

            else

            { handle_scancode(0xe0,1);

            handle_scancode(0x4d,1);

            handle_scancode(0xe0,0);

            handle_scancode(0x4d,0);

            }

            }

            printk("new=%x %x %x %x %x %x %x %x", kbd->new[0],kbd->new[1],kbd->new[2],kbd->new[3],

            kbd->new[4],kbd->new[5],kbd->new[6],kbd->new[7]);

            }

            static void *usb_kbd_probe(struct usb_device *dev, unsigned int ifnum, const struct usb_device_id *id)

            {

            struct usb_interface *iface;

            struct usb_interface_descriptor *interface;

            struct usb_endpoint_descriptor *endpoint;

            struct usb_kbd *kbd;

            int pipe, maxp;

            iface = dev->actconfig->interface[ifnum];

            interface = iface->altsetting[iface->act_altsetting];

            if ((dev->descriptor.idVendor != _HOTKEY_VENDOR_ID) || (dev->descriptor.idProduct != _HOTKEY_PRODUCT_ID) || (ifnum != 1))

            {

            return NULL;

            }

            if (dev->actconfig->bNumInterfaces != 2)

            {

            return NULL;

            }

            if (interface->bNumEndpoints != 1) return NULL;

            endpoint = interface->endpoint + 0;

            pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);

            maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe));

            usb_set_protocol(dev, interface->bInterfaceNumber, 0);

            usb_set_idle(dev, interface->bInterfaceNumber, 0, 0);

            printk(KERN_INFO "GUO: Vid = %.4x, Pid = %.4x, Device = %.2x, ifnum = %.2x, bufCount = %.8x", dev->descriptor.idVendor,dev->descriptor.idProduct,dev->descriptor.bcdDevice, ifnum, maxp);

            if (!(kbd = kmalloc(sizeof(struct usb_kbd), GFP_KERNEL))) return NULL;

            memset(kbd, 0, sizeof(struct usb_kbd));

            kbd->usbdev = dev;

            FILL_INT_URB(kbd->irq, dev, pipe, kbd->new, maxp > 8 ? 8 : maxp, usb_kbd_irq,kbd, endpoint->bInterval); kbd->irq.dev = kbd->usbdev;

            if (dev->descriptor.iManufacturer) usb_string(dev, dev->descriptor.iManufacturer, kbd->name, 63);

            if (usb_submit_urb(kbd->irq)) {

            kfree(kbd); return NULL; }

            printk(KERN_INFO "input%d: %s on usb%d:%d.%d", kbd->dev.number, kbd->name, dev->bus->busnum, dev->devnum, ifnum);

            return kbd; }

            static void usb_kbd_disconnect(struct usb_device *dev, void *ptr)

            {

            struct usb_kbd *kbd = ptr;

            usb_unlink_urb(kbd->irq);

            kfree(kbd);

            }

            static struct usb_device_id usb_kbd_id_table [] = {

            { _DEVICE(USB_HOTKEY_VENDOR_ID, USB_HOTKEY_PRODUCT_ID) },

            { } /* Terminating entry */

            };

            MODULE_DEVICE_TABLE (usb, usb_kbd_id_table);

            static struct usb_driver usb_kbd_driver = {

            name: "Hotkey",

            probe: usb_kbd_probe,

            disconnect: usb_kbd_disconnect,

            id_table: usb_kbd_id_table,

            NULL,

            };

            static int __init usb_kbd_init(void)

            {

            usb_register(usb_kbd_driver);

            info(DRIVER_VERSION ":" DRIVER_DESC);

            return 0;

            }

            static void __exit usb_kbd_exit(void)

            {

            usb_deregister(usb_kbd_driver);

            }

            module_init(usb_kbd_init);

            module_exit(usb_kbd_exit);

            三、結(jié)語

            USB規(guī)范是一門比較新的技術,接口使用方便,但是的設計較復雜。上面介紹了USB設備的設計,主要分析了主機端的設計,并且給出了一個編寫USB驅(qū)動程序的實例。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          linux相關文章:linux教程



          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉