本文轉載自: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)
