Android 下的usb框架及功能點【轉】


本文轉載自:https://blog.csdn.net/tianruxishui/article/details/37902959

有關USB android框架的鏈接

http://blog.sina.com.cn/s/articlelist_1627432177_0_1.html

 

ICS4.0下Framework層的usb框架

 

Android 下的usb主要工作還是在android的framework層。主要有以下幾個文件:

1.1UsbDeviceManager.java/高

主要完成功能切換及狀態的更新,需要向外廣播狀態,接收kernel發送過來的event信息。實質性的工作都在這里邊完成。

重要等級:高

 

1.2 UsbManager.java /usbService.java/中

這兩個主要是接口,因為usb的工作本身就應該在kernel里,framework只是簡單的邏輯流程重組。Android framework中****Manager.java是給用戶提供的接口。

 

 

下面這個體現了manager、service的工作方式,用戶會通過usbManager的調用來完成usb功能的設置。

public int setUsbTethering(boolean enable){

UsbManager usbManager =(UsbManager)mContext.getSystemService(Context.USB_SERVICE);

………………

else {

mUsbTetherRequested = true;

usbManager.setCurrentFunction(UsbManager.USB_FUNCTION_RNDIS,false);

}

1.3UsbSettings.java

packages/apps/Settings/src/com/android/settings/deviceinfo

這個是用戶在setting中,選擇不同的存儲類型時的,進行的界面更新及狀態切換的處理流程。

1.4UsbSettingsManager.java

frameworks/base/services/java/com/android/server/usb

沒有明白具體功能是干什么的,在UsbDeviceManager.java有用到一些。

發送usb device attached

1.5StorageNotification.java/高

frameworks/base/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java

主要用來處理存儲設備相關動作的狀態更新、通知。主要涉及兩個方面:一是插入usbcabel后的狀態欄更新,主要針對ums功能。二是storage狀態發生改變時,會調用這個activity,如mount、unmount等。

所以入口主要有兩個:onUsbMassStorageConnectionChanged和onStorageStateChanged分別處理usb連接狀態的改變和storage狀態的改變。

1.6UsbStorageActivity.java/高

啟動u盤功能后的一些ui的處理,狀態的監控等處理,做的工作不多。

1.7Usbstring.c

kernel/driver/usb/gadget/ 用來進行字符串格式的轉換

1.8UsbDevice.java

/frameworks/base/core/java/android/hardware/usb

主要是usb設備的一些接口,基本上是獲取的設備描述符。

1.9UsbDeviceConnection.java

/frameworks/base/core/java/android/hardware/usb

usb設備的打開,基本傳輸等動作,似乎是native層面的。

1.10UsbDisconnectedReceiver.java

/frameworks/base/core/java/android/hardware/usb

接收斷開的信息,android.hardware.usb.action.USB_DEVICE_DETACHED

 

1.11UsbHostManager.java

處理host情況下的事件流程:

UsbDeviceAdded函數:報告有USB設備插入,通過getCurrentSettings().deviceAttached發送intent消息:UsbManager.ACTION_USB_DEVICE_ATTACHED。

對應的JNI函數com_android_server_UsbHostManager.cpp

 

其中的monitorUsbHostBus會調用usb_host_run函數(system/core/libusbhost/usbhost.c)不停的讀取bus總線,讀取到以后,調用注冊的回調函數usb_device_added--àUsbDeviceAdded(method_usbDeviceAdded)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM