首先我們來看usb裝置描述符的結構:
在usb匯流排識別裝置階段就將usb描述符傳送給了usb匯流排驅動程式,裝置的資料傳輸物件是端點,端點0是特殊端點,在usb匯流排驅動程式識別階段,
本次通過usb滑鼠點選事件編寫乙個input子系統,從上一章主要實現了如何識別到有個usb裝置的驅動程式,本次,主要目的是在probe函式內編寫滑鼠
作為按鍵輸入字元的驅動程式:遵循以下步驟
a. 分配乙個input_dev
b. 設定
c. 註冊
d. 硬體相關操作
a. 分配乙個input_dev
static struct input_dev *uk_dev;
uk_dev = input_allocate_device();
b. 設定
/* b.1 能產生哪類事件 :按鍵事件、重複事件*/
set_bit(ev_key, uk_dev->evbit);
set_bit(ev_rep, uk_dev->evbit);
/* b.2 能產生哪些事件 :l、s、enter*/
set_bit(key_l, uk_dev->keybit);
set_bit(key_s, uk_dev->keybit);
set_bit(key_enter, uk_dev->keybit);
c. 註冊
input_register_device(uk_dev);
d. 硬體相關操作
/* 資料傳輸3要素: 源,目的,長度 */
/* 源: usb裝置的某個端點 */
pipe = usb_rcvintpipe(dev, endpoint->bendpointaddress);
/* 長度: */
len = endpoint->wmaxpacketsize;
/* 目的: */
usb_buf = usb_buffer_alloc(dev, len, gfp_atomic, &usb_buf_phys);
/* 使用"3要素" :通過urb來進行資料的傳輸操作 */
/* urb操作:1、分配 2、設定 3、提交 * /
/* 分配usb request block */
uk_urb = usb_alloc_urb(0, gfp_kernel);
/* 使用"3要素設定urb" */
usb_fill_int_urb(uk_urb, dev, pipe, usb_buf, len, usbmouse_as_key_irq, null, endpoint->binterval);
uk_urb->transfer_dma = usb_buf_phys;
uk_urb->transfer_flags |= urb_no_transfer_dma_map;
/* 使用urb :資料傳輸過程的實現*/
usb_submit_urb(uk_urb, gfp_kernel);
如何確定滑鼠按左鍵就是輸入l字母,右鍵為s字母,中建為enter呢?
答:是由usbmouse_as_key_irq中斷函式決定的
staticvoid usbmouse_as_key_irq(struct urb *urb)
printk("\n
");#endif
/*usb滑鼠資料含義
* data[0]: bit0-左鍵, 1-按下, 0-鬆開
* bit1-右鍵, 1-按下, 0-鬆開
* bit2-中鍵, 1-按下, 0-鬆開
**/if ((pre_val & (1
<<0)) != (usb_buf[0] & (1
<<0
)))
if ((pre_val & (1
<<1)) != (usb_buf[0] & (1
<<1
)))
if ((pre_val & (1
<<2)) != (usb_buf[0] & (1
<<2
)))
pre_val = usb_buf[0
];
/*重新提交urb
*/usb_submit_urb(uk_urb, gfp_kernel);
}
USB裝置驅動程式
一.usb載入式流介面驅動要點分析 為了支援不同型別的外圍裝置,wince平台提供了具有定製介面的流介面驅動程式模型。因為大部分usb外圍裝置由於功能性更適合流介面驅動的結構,所以一般都採用載入式流介面驅動程式模型來開發usb裝置驅動程式。1 usb系統結構分析 wince下usb系統軟體由兩層組成...
USB裝置驅動程式導讀
隨著 usb裝置的不斷增加,我們這些開發人員也就多了對 usb裝置進行驅動程式開發的工作。但是對於很多初學者來說,存在以下三個困難 一是對wince 的驅動程式結構了解得太少,沒辦法得心應手的專注於驅動程式的開發工作 二是對wince 自帶的usb 驅動程式的例子沒有弄懂,看到一大堆資料夾結構和源程...
USB裝置驅動程式導讀 2
接下來,我們就來分析一下ce中的樣例程式,我用的是4.2版本的,所以下面的內容是4.2版本中的程式。這裡的程式是通過資料夾的形式組織在一起的,所以我們還是像以前學習ce的時候那樣,先來了解與此相關的資料夾結構,如下圖。在usb資料夾下,分成了class,clients,common,hcd,inc,...