USB裝置驅動程式(二)

2022-07-13 03:51:12 字數 2236 閱讀 5894

首先我們來看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中斷函式決定的

static

void 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,...