Linux libusb USB開發(三)—— libusb函數庫及接口函數介紹

一 libusb 介紹

libusb 設計了一系列的外部API 爲應用程序所調用,通過這些API應用程序可以操作硬件,從libusb的源代碼可以看出,這些API 調用了內核的底層接口,和kernel driver中所用到的函數所實現的功能差不多,只是libusb更加接近USB 規範。使得libusb的使用也比開發內核驅動相對容易的多。

二 libusb 的外部接口

2.1 核心初始化函數

1) usb_init

函數定義: void usb_init(void);

函數功能:libusb 初始化,這一步必須首先執行。

2) usb_find_busses

函數定義: int usb_find_busses(void);

尋找系統上的usb總線,任何usb設備都通過usb總線和計算機總線通信。此函數返回總線數,失敗返回負值。

3) usb_find_devices

函數定義: int usb_find_devices(void);

尋找總線上的usb設備,這個函數必要在調用usb_find_busses()後使用。此函數成功返回設備數目,失敗返回負值。

4) usb_get_busses

函數定義: struct usb_bus *usb_get_busses(void);

函數功能:返回全局變量 usb_busses,用於遍歷總線鏈表,查找總線 usb 設備。失敗返回 NULL。

2.2 設備操作函數

5)usb_open

函數定義: usb_dev_handle *usb_open(struct *usb_device dev);

函數功能:打開 usb 設備,引用的 usb_dev_handle 以及 usb_device 結構體分別爲usb設備操作句柄和usb設備描述符,具體定義可見頭文件。函數返回 usb 設備的操作句柄,之後的對該 usb 設備的操作都通過該句柄進行。

6) usb_close

函數定義: int usb_close(usb_dev_handle *dev);

函數功能:與usb_open相對應,關閉設備,是必須調用的, 返回0成功,<0 失敗。

7) usb_set_configuration

函數定義: int usb_set_configuration(usb_dev_handle *dev, int configuration);

函數功能:設置當前設備使用的configuration(配置模式),參數configuration 是你要使用的configurtation descriptoes中bConfigurationValue, 函數返回0成功,<0失敗( 一個設備可能包含多個configuration,比如同時支持高速和低速的設備就有對應的兩個configuration,詳細可查看usb標準和具體的usb設備)

8) usb_claim_interface

函數定義: int usb_claim_interface(usb_dev_handle *dev, int interface);

函數功能:註冊與操作系統通信的接口,這個函數必須被調用,因爲只有註冊接口,才能做相應的操作(比如收發數據)。

Interface 指 bInterfaceNumber. (下面介紹的usb_release_interface 與之相對應,也是必須調用的函數)

9) usb_release_interface

函數定義: int usb_release_interface(usb_dev_handle *dev, int interface);

函數功能:註銷被usb_claim_interface函數調用後的接口,釋放資源,和usb_claim_interface對應使用。程序結束時記得一定要註銷接口,否則,下次註冊接口時可能會報錯。

10) usb_set_altinterface

函數定義: int usb_set_altinterface(usb_dev_handle *dev, int alternate);

函數功能:設定當前接口中的活躍(起作用的)設置,即激活當前接口,alternate 爲接口描述符中 bAlternateSetting 字段。成功返回0,失敗返回負值。

11) usb_clear_halt

函數定義: int usb_clear_halt (usb_dev_handle *dev, unsigned int ep);

函數功能:復位指定的endpoint,參數ep 是指bEndpointAddress。這個函數用來替代usb_resetep函數。

注:libusb四種傳輸方式詳細介紹可見http://blog.chinaunix.net/uid-25314474-id-3040231.html

2.3 數據通訊

12) usb_bulk_write

函數定義:int usb_bulk_write(usb_dev_handle *dev, int ep, const char *bytes, int size, int timeout);

函數功能:向usb設備批量寫數據,*dev爲設備操作句柄,ep爲傳入指定的端點號,*bytes爲發送的數據地址,size爲發送的數據長度,timeout 爲超時時間(ms)。成功返回實際寫入設備的字節數,失敗返回負值。

13) usb_bulk_read

函數定義:int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);

函數功能:批量讀usb設備傳過來的數據,*dev爲設備操作句柄,ep爲傳入指定的端點號,*bytes爲接收的數據地址,size爲預計接收的數據長度,timeout 爲超時時間(ms)。成功返回實際寫入設備的字節數,失敗返回負值。

14) usb_interrupt_write

函數定義:int usb_interrupt_write(usb_dev_handle *dev, int ep, const char *bytes, int size, int timeout);

函數功能:以中斷的方式向usb設備寫數據,*dev爲設備操作句柄,ep爲傳入指定的端點號,*bytes爲發送的數據地址,size爲發送的數據長度,timeout 爲超時時間(ms)。成功返回實際寫入設備的字節數,失敗返回負值。

15) usb_interrupt_read

函數定義:int usb_interrupt_write(usb_dev_handle *dev, int ep, const char *bytes, int size, int timeout);

函數功能:以中斷的方式usb設備傳過來的數據,*dev爲設備操作句柄,ep爲傳入指定的端點號,*bytes爲接收的數據地址,size爲預計接收的數據長度,timeout 爲超時時間(ms)。成功返回實際寫入設備的字節數,失敗返回負值。

16) usb_control_msg

函數定義:int usb_control_msg(usb_dev_handle *dev, int requesttype, int request, int value, int index, char *bytes, int size, int timeout);

函數功能:以控制請求的方式讀寫數據,從默認的管道發送和接受控制數據傳入參數與 usb 協議保持一致。成功返回實際讀寫的字節數,失敗返回負值。

17) usb_get_string

函數定義:int usb_get_string(usb_dev_handle *dev, int index, int langid, char *buf, size_t buflen);

函數功能:獲取設備的字符串描述,通過index和langid索引。返回Unicode字符串到buf中。返回實際寫入buf的字節數,負數失敗。

18) usb_get_string_simple

函數定義:int usb_get_string_simple(usb_dev_handle *dev, int index, char *buf, size_t buflen);

函數功能:包裝了 usb_get_string() 函數,返回指定index索引的字符串描述,並轉換到C風格的ASCII。返回寫入buf字節數,負數失敗。

19) usb_get_descriptor

函數定義:int usb_get_descriptor(usb_dev_handle *dev, unsigned char type, unsigned char index, void *buf, int size);

函數功能:獲取設備缺省控制管道的描述符,通過type和index索引。返回實際寫入buf的字節數,負數失敗。

20) usb_get_descriptor_by_endpoint

函數定義:int usb_get_descriptor(usb_dev_handle *dev, unsigned char type, unsigned char index, void *buf, int size);

函數功能:從設備獲取描述符,以type和index索引,以ep標誌的控制管道。返回讀取字節數,負數失敗。

2.3 輔助函數

21) usb_strerror

函數定義:char *usb_strerror(void);

函數功能:根據錯誤返回值 errno,返回錯誤碼碼對應的字符串。

22) usb_set_debug

函數定義:void usb_set_debug(int level);

函數功能:設置 libusb 的調試級別,libusb 支持打印調試信息,level 值爲指定的調試級別。

23) usb_device

函數定義struct usb_device *usb_device(usb_dev_handle *dev);

函數功能:根據操作句柄返回對應的 usb_device。

三 libusb 的接口函數相關參數設置

libusb 的接口函數相關參數是依據usb設備本身的硬件參數(如配置模式、接口地址等)所決定的,而查詢這些參數的方式有很多,如調用libusb本身的查詢函數,但我推薦一個更好的方法,用“USB查看器usbtreeviewV3.1.0軟件”可以清晰的獲取usb本身的硬件設備。

本文第二部分所列舉的函數只是libusb的一部分常用函數,想查看更多的函數,可上

http://libusb.sourceforge.net/api-1.0/api.html

 


轉載於:https://blog.csdn.net/jiguangfan/article/details/86546958

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章