android USB host程式設計

crazy_baoli發表於2019-01-07

測試手機:華為p8

測試系統:android

-------------------------------------------

 

android的native層usbhost供java層android usb api呼叫。

使用native層的usb host需要libusbhost.so和usbhost.h兩個檔案。libusbhost.so和usbhost.h均可以在aos ndk裡找到,usbhost.c在android原始碼目錄下:/system/core/libusbhost/

 

1. 初始化

usbHostContext = usb_host_init();

 

2. 建立一個執行緒執行usb_host_run(),進行USB device的插入和拔出監聽

while(1)

{

usb_host_run(usbHostContext, usb_device_added, usb_device_removed, NULL, client_dat);

printf("\n err:usb_host_run() return. \n\n");

pthread_exit("usb_run exit");

}

 

3. 實現裝置插入和拔出回撥

插入回撥:static int usb_device_added(const char *devname, void* client_data)

拔出回撥:static int usb_device_removed(const char *devname, void* client_data)

在插入回撥裡可以利用devname開啟一個USB裝置:

struct usb_device * usbdevice = usb_device_open(devname);

利用獲取到的PID和VID判斷是否是使用者需要的USB device

int usb_vid = usb_device_get_vendor_id(usbdevice);

int usb_pid = usb_device_get_product_id(usbdevice);

在拔出回撥中處理USB裝置關閉及資源釋放的工作。

 

4. 開啟裝置後掛接用到的usb 介面:

ret = usb_device_claim_interface(usbdevice, 0);

 

5. 進行資料傳輸:

length = usb_device_bulk_transfer(udevice, BULK_OUT, bulk_send_buf, 4, 100);

 

注:usbhost只提供了bulk和控制傳輸,但bulk傳輸函式也能使用中斷端點。

 

相關文章