久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区

以文本方式查看主題

-  曙海教育集團(tuán)論壇  (http://m.rfoamep.cn/bbs/index.asp)
--  Linux驅(qū)動開發(fā)  (http://m.rfoamep.cn/bbs/list.asp?boardid=33)
----  寫Linux下的USB鍵盤驅(qū)動  (http://m.rfoamep.cn/bbs/dispbbs.asp?boardid=33&id=1720)

--  作者:wangxinxin
--  發(fā)布時間:2010-11-24 10:36:29
--  寫Linux下的USB鍵盤驅(qū)動
1.   指定USB鍵盤驅(qū)動所需的頭文件: % x/ M8 {9 G4 Y, G/ O6 o

+ m( H! q+ I2 d8 V. @, D0 Y8 l

#include <linux/kernel.h>/*內(nèi)核頭文件,含有內(nèi)核一些常用函數(shù)的原型定義*/

6 i\' B1 I7 @3 ]1 _

#include <linux/slab.h>/*定義內(nèi)存分配的一些函數(shù)*/


9 |/ l3 Q/ F! }0 D% E# h\' B3 W

#include <linux/module.h>/*模塊編譯必須的頭文件*/

( {6 G2 G: U4 L8 b( J

#include <linux/input.h>/*輸入設(shè)備相關(guān)函數(shù)的頭文件*/


$ Z! t- D* ^% J2 H; W+ b# c

#include <linux/init.h>/*linux初始化模塊函數(shù)定義*/

1 f8 B0 ?( i4 l. z

#include <linux/usb.h> /*USB設(shè)備相關(guān)函數(shù)定義*/


/ L  {, X, t" U* ?2.   定義鍵盤碼表數(shù)組: 7 ]" F0 a( V) p" Z; s

/*使用第一套鍵盤掃描碼表:A-1E;B-30;C-2E*/


- j- S, z% `, s( Y( O

static unsigned char usb_kbd_keycode[256] = {


1 V+ g# X4 S" n

    0, 0, 0, 0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38,


7 t9 d- b- _9 v; t3 r2 K; Z+ _: o

    50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 2, 3,


& S! S% t* A7 w- P7 d4 c! h7 S

    4, 5, 6, 7, 8, 9, 10, 11, 28, 1, 14, 15, 57, 12, 13, 26,


/ Q+ b. r( D, k" }0 f\' {; z

    27, 43, 43, 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64,


8 P- y6 M* g; a* w4 M$ [

    65, 66, 67, 68, 87, 88, 99, 70,119,110,102,104,111,107,109,106,

- B0 m) ?7 J- P

    105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71,

6 R2 v- Q2 i: p4 N- Y

    72, 73, 82, 83, 86,127,116,117,183,184,185,186,187,188,189,190,

\' L; [8 t0 ^8 U8 |8 ?4 F

    191,192,193,194,134,138,130,132,128,129,131,137,133,135,136,113,

2 o/ p0 u- @/ h- I7 z

    115,114, 0, 0, 0,121, 0, 89, 93,124, 92, 94, 95, 0, 0, 0,

* D+ N% W" M5 W- t

    122,123, 90, 91, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

7 {* N: s  j* u3 t6 w* s4 ^+ c

    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

) l, D# \\8 V; o5 l4 W0 c9 `2 e

    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

# w# I+ y* j$ b# ]* }4 g7 ]$ h

    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

! q) k  I3 ^4 v3 e

    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,


6 ?! P4 F  m- g+ W- `

    29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113,

( k, J2 d" i3 h

    150,158,159,128,136,177,178,176,142,152,173,140

, u. ]) |9 R5 v5 e
}; 3 Q5 Z0 m! L% y$ V4 r1 G6 A# R
3.   編寫設(shè)備ID表: ( u" @, F2 t0 N) ~

static struct usb_device_id usb_kbd_id_table [] = {

+ h% l/ [8 V; g7 Y4 ]\' ~) K

    { USB_INTERFACE_INFO(3, 1, 1) },/*3,1,1分別表示接口類,接口子類,接口協(xié)議;3,1,1為鍵盤接口類;鼠標(biāo)為3,1,2*/


, K( l5 ^& Q8 W" A: a

    { }           /* Terminating entry */


& P3 ^8 E* }* W+ b\' u& \\

};


4 Z4 ~( {/ _  K1 ]MODULE_DEVICE_TABLE (usb, usb_kbd_id_table);/*指定設(shè)備ID表*/ ( Y7 a; y* h\' n
4.   定義USB鍵盤結(jié)構(gòu)體: " T5 s( ^. V) K. `. e1 f0 v+ c! U

struct usb_kbd {


& D) _/ ]4 c+ H5 |! P+ ]

    struct input_dev *dev; /*定義一個輸入設(shè)備*/


0 `8 \\  w* R, ]2 Z3 f" u& V

    struct usb_device *usbdev;/*定義一個usb設(shè)備*/

* i/ d" y, \\; u" D& E; D/ i# V. E

    unsigned char old[8]; /*按鍵離開時所用之數(shù)據(jù)緩沖區(qū)*/


+ m% u( P! T& d& B

    struct urb *irq/*usb鍵盤之中斷請求塊*/, *led/*usb鍵盤之指示燈請求塊*/;


# b, O; c. u* a( `\' F6 v

    unsigned char newleds;/*目標(biāo)指定燈狀態(tài)*/


\' A6 Q8 [, E9 J: w2 n# N

    char name[128];/*存放廠商名字及產(chǎn)品名字*/


2 f2 z$ m3 m& D% Z, B& Z

    char phys[64];/*設(shè)備之節(jié)點(diǎn)*/


6 w/ ?9 ?# E8 Y6 }6 v  O7 Q
, j, ?. y8 g% k/ N& A

    unsigned char *new;/*按鍵按下時所用之?dāng)?shù)據(jù)緩沖區(qū)*/


; `4 |+ B8 i2 s. E$ L

    struct usb_ctrlrequest *cr;/*控制請求結(jié)構(gòu)*/

4 q1 N6 R3 ~4 d0 U, O% ?

    unsigned char *leds;/*當(dāng)前指示燈狀態(tài)*/


* U7 i% `* G4 a/ E4 H) A) ?4 `. Z

    dma_addr_t cr_dma; /*控制請求DMA緩沖地址*/

$ ?; S* u% Q! S8 F* {- `

    dma_addr_t new_dma; /*中斷urb會使用該DMA緩沖區(qū)*/


8 o9 ?$ K1 B9 T6 z4 F& t

    dma_addr_t leds_dma; /*指示燈DAM緩沖地址*/


( a0 C! {/ a# G\' Z) S6 o" c% v}; " `# T6 H$ d# x5 a- B3 ^
5.   編寫USB鍵盤驅(qū)動結(jié)構(gòu)(任何一個LINUX下的驅(qū)動都有個類似的驅(qū)動結(jié)構(gòu)) ( u; \\" u" V2 d2 Y

/*USB鍵盤驅(qū)動結(jié)構(gòu)體*/

0 P7 V1 G4 I# o# s# N9 n

static struct usb_driver usb_kbd_driver = {


; F) L9 Q/ s$ F# h

    .name =   "usbkbd",/*驅(qū)動名字*/

( Z5 |/ Q* X4 Y! \\# f9 C

    .probe = usb_kbd_probe,/*驅(qū)動探測函數(shù),加載時用到*/


# {" n5 \\1 t6 K  j1 v

    .disconnect = usb_kbd_disconnect,/*驅(qū)動斷開函數(shù),在卸載時用到*/


2 S) |0 K, a  o/ f, `; F

    .id_table =   usb_kbd_id_table,/*驅(qū)動設(shè)備ID表,用來指定設(shè)備或接口*/

- |" s( J; g! Z; n7 i

};

. K9 [0 h. ?4 a, B( O
6.   編寫模塊加載函數(shù)(每個驅(qū)動都會有一個加載函數(shù),由module_init調(diào)用) 9 H1 \\  a( y" t+ t3 [  ^

/*驅(qū)動程序生命周期的開始點(diǎn),向 USB core 注冊這個鍵盤驅(qū)動程序。*/


9 K: P) y8 ?- d

static int __init usb_kbd_init(void)


4 O7 @  r. r9 ^$ q. G

{

$ y9 m8 w0 V2 r# h; |6 f  N: G

    int result = usb_register(&usb_kbd_driver);/*注冊USB鍵盤驅(qū)動*/


7 w/ S: x. p+ N\' g1 R) k9 ]1 H

    if (result == 0) /*注冊失敗*/



久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
国产精品色婷婷| 99精品视频在线播放观看| 欧美精品一区二区高清在线观看| 亚洲第一在线综合在线| 久久综合精品一区| 国产一区二区视频在线免费观看| 99久久久精品免费观看国产蜜| 九九视频精品免费| 日韩福利电影在线| 精品亚洲porn| 国产成都精品91一区二区三| 久久av资源网| 国产美女在线观看一区| 99久久精品免费看| 国产91免费视频| 欧美日韩在线播放一区二区| 日韩中文一区二区三区| 一本到高清视频免费精品| 欧美日韩在线播| 国产亚洲1区2区3区| 亚洲精品网站在线观看| 免费精品视频最新在线| a在线欧美一区| 亚洲免费不卡| 制服丝袜亚洲网站| 亚洲激情网站免费观看| 国产一区二区福利视频| 久久精品国产综合精品| 欧美专区亚洲专区| 国产精品国产三级国产a| 日韩精品五月天| 成人情视频高清免费观看电影| 色呦呦一区二区三区| 国产精品私人影院| 日韩黄色免费电影| 国产美女精品久久久| 欧美日韩一级视频| 亚洲精品免费看| 91色在线porny| 欧美浪妇xxxx高跟鞋交| 亚洲精品久久久蜜桃| 97久久人人超碰| 欧美日韩国产一二三| 亚洲一区二区欧美| 久久久www成人免费毛片麻豆| 免费在线观看一区二区三区| 久久久影院一区二区三区| 91精品国产综合久久精品图片| 亚洲福中文字幕伊人影院| 高清国产在线一区| 久久色.com| 成年人午夜久久久| 日韩欧美视频一区| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 久久国产精品露脸对白| 涩涩涩999| 亚洲乱码国产乱码精品精的特点 | 国产又黄又大久久| 欧美性做爰猛烈叫床潮| 一区二区三区国产豹纹内裤在线| 国产精品xxx在线观看www| 久久五月婷婷丁香社区| 91情侣在线视频| 日本一二三不卡| 久精品国产欧美| 亚洲欧美自拍偷拍色图| 国产一区再线| 一区二区三区在线视频播放| 久久久久久久久久久久久久一区 | 国产亚洲欧美色| 1区1区3区4区产品乱码芒果精品| 久久先锋影音av| 久久精品国产美女| 喷白浆一区二区| 日韩精品在线一区二区| 99c视频在线| 亚洲最色的网站| 欧美日韩一二三| 精品久久久久久一区二区里番| 亚洲另类一区二区| 欧美精品丝袜中出| 999精品在线观看| 天使萌一区二区三区免费观看| 色婷婷亚洲一区二区三区| aaa亚洲精品| 午夜不卡av在线| 国产欧美一区二区精品性色| 视频一区视频二区视频三区高| 激情欧美一区二区| 中文字幕一区二区三区在线播放 | 国语精品中文字幕| 久久精品999| 亚洲自拍另类综合| 精品国产髙清在线看国产毛片| 日韩资源av在线| www.亚洲精品| 国产一区福利在线| 亚洲国产美国国产综合一区二区| 欧美成人乱码一区二区三区| 性欧美大战久久久久久久免费观看| 99久久婷婷国产综合精品| 日韩成人dvd| 日本欧美一区二区三区| 亚洲视频在线观看三级| 久久久久久电影| 日韩午夜激情免费电影| 欧美性生活久久| 亚洲一区精品视频| 一区二区91美女张开腿让人桶| 91日韩在线专区| 99re6这里只有精品视频在线观看| 首页国产欧美久久| 午夜激情一区二区| 五月天久久比比资源色| 亚洲国产你懂的| 亚洲乱码中文字幕| 亚洲日本成人在线观看| 中文字幕中文乱码欧美一区二区| 国产日韩v精品一区二区| 国产欧美中文在线| 国产精品日日摸夜夜摸av| 一区在线播放视频| 亚洲精品水蜜桃| 麻豆免费看一区二区三区| 免费一级片91| 99久久精品国产网站| 国产欧美在线一区二区| 日本一区免费在线观看| 宅男一区二区三区| 欧美日韩视频在线观看一区二区三区| 欧美日韩电影一区| 久久一日本道色综合| 亚洲精品一二三| 免费在线欧美视频| 91丝袜呻吟高潮美腿白嫩在线观看| 成人片在线免费看| 色国产综合视频| 精品91自产拍在线观看一区| 亚洲精品国产无天堂网2021| 亚洲国产aⅴ成人精品无吗| 国产在线观看一区二区| 精品高清视频| 欧美疯狂性受xxxxx喷水图片| 欧美激情一区二区三区全黄| 日韩av电影免费观看高清完整版| 不卡视频在线看| 欧美综合一区二区| 亚洲欧洲制服丝袜| 成人性生交大片免费看中文网站| 奇米精品在线| 亚洲国产精品传媒在线观看| 人人狠狠综合久久亚洲| 精品在线观看一区二区| 欧美一区二区三区免费| 亚洲电影激情视频网站| wwwxx欧美| 欧美精品三级日韩久久| 亚洲mv大片欧洲mv大片精品| 成人动漫在线观看视频| 51精品秘密在线观看| 天天av天天翘天天综合网| 精品婷婷色一区二区三区蜜桃| 7777精品伊人久久久大香线蕉的| 午夜视黄欧洲亚洲| 免费试看一区| 亚洲男同1069视频| 国产一级二级三级精品| 久久久精品综合| 成人h动漫精品一区二| 欧美一二三四区在线| 精品亚洲成av人在线观看| 91久久精品一区二区二区| 亚洲成精国产精品女| 日韩欧美精品一区二区三区经典| 亚洲国产精品黑人久久久| 国产精品青青草| 国产精品欧美久久久久无广告| 国产精品一区视频| 成人欧美一区二区三区黑人麻豆 | 久久久另类综合| 99久久精品一区二区| 日本一区二区综合亚洲| 粉嫩av四季av绯色av第一区| 国产精品动漫网站| 热舞福利精品大尺度视频| 亚洲一区二区黄色| 欧美区在线观看| 高清在线成人网| 久久久久久亚洲综合影院红桃| 国产成人精品福利一区二区三区 | 91麻豆视频网站| 亚洲欧美日韩一区| 色网站国产精品| 91老师国产黑色丝袜在线| 亚洲综合色婷婷| 精品国产91久久久久久久妲己| 激情五月综合色婷婷一区二区| 亚洲v中文字幕| 日韩一区二区三区三四区视频在线观看| 51蜜桃传媒精品一区二区|