android開發中usb串列埠通訊開發主要涉及到以下幾個類及相應的方法:
1 ,usbmanager:負責管理usb裝置的類,你可以在相應**中通過以下方法獲得
//獲取usbmanager例項方法
usbmanager manager =(usbmanager) getsystemservice(context.usb_service);
該類提供的主要方法有:
1) getdevicelist()
獲得裝置列表,返回的是乙個hashmap.;
2) haspermission(usbdevice device)
判斷你的應用程式是否有接入此usb裝置的許可權,如果有則返回真,否則返回false.
3) opendevice(usbdevice device)
開啟usb裝置,以便向此usb裝置傳送和接受資料,返回乙個關於此usb裝置的連線。
4) requestpermission(usbdevice device, pendingintent pi)
向usb裝置請求臨時的接入許可權。
2,usbdevice:乙個usb裝置物件,每個裝置一般包括乙個介面,也可能有多個,每個介面又包含節點用來與此裝置傳輸資料。主要方法有:
1) getdeviceclass()
返回此usb裝置的類別,用乙個整型來表示。
2) getdeviceid()
返回唯一標識此裝置的id號,也用乙個整型來表示。
3) getdevicename()
返回此裝置的名稱,用乙個字串來表示。
4) getdeviceprotocol()
返回此裝置的協議類別,用乙個整型來表示。
5) getdevicesubclass()
返回此裝置的子類別,用乙個整型來表示。
6) getvendorid()
返回生產商id
7) getproductid()
返回產品id
8) getinte***cecount()
返回此裝置的介面數量
9) getinte***ce(int index)
得到此裝置的乙個介面,返回乙個usbinte***ce。
3,usbinte***ce:代表usb裝置的乙個介面(物理介面),usbinte***ce本身是乙個類,此類的主要方法有以下:
1) getid()
得到給介面的id號。
2) getinte***ceclass()
得到該介面的類別。
3) getinte***cesubclass()
得到該介面的子類。
4) getinte***ceprotocol()
得到該介面的協議類別。
5) getendpointcount()
獲得關於此介面的節點數量。
6) getendpoint(int index)
對於指定的index獲得此介面的乙個節點,返回乙個usbendpoint.
4, usbendpoint:代表乙個介面的某個節點的類。該類主要方法:
1) getaddress()
獲得此節點的位址
2) getattributes()
獲得此節點的屬性
3) getdirection()
獲得此節點的資料傳輸方向
5 ,usbdeviceconnection:代表usb連線的乙個類。用此連線可以想usb裝置傳送和接收資料,主要方法有:
1)bulktransfer(usbendpoint endpoint, byte buffer, int length, int timeout)
通過給定的endpoint來進行大量的資料傳輸,傳輸的方向取決於該節點的方向,buffer是要傳送或接收的位元組陣列,length是該位元組陣列的長度。傳輸成功則返回所傳輸的位元組陣列的長度,失敗則返回負數。
2)controltransfer(int requesttype, int request, int value, int index, byte buffer, int length, int timeout)
該方法通過0節點向此裝置傳輸資料,傳輸的方向取決於請求的類別,如果requesttype為usb_dir_out則為寫資料,usb_dir_in, 則為讀資料
以上介紹資料主要來自博文:
—-示例**——
public
class
usbtestactivity
extends
activity
implements
view.onclicklistener
private
void
initusbdata()
// }
}//獲取裝置介面
for (int i = 0; i < musbdevice.getinte***cecount(); )
//用usbdeviceconnection 與 usbinte***ce 進行端點設定和通訊
if (minte***ce.getendpoint(1) != null)
if (minte***ce.getendpoint(0) != null)
if (minte***ce != null)
if (mdeviceconnection.claiminte***ce(minte***ce, true)) else
} else
} else
}private
void
initviews()
@override
public
void
onclick(view view)
}private
void
sendtousb(string content)
private
void
readfromusb() catch (unsupportedencodingexception e) }}
//文字提示方法
private
void
showtmsg(string msg)
}
另外要與usb通訊,在開發專案的配置上還需要注意:
1,新增相應許可權:
android:name="android.permission.hardware_test" />
2,androidmanifest.xml中新增uses-feature過濾所有你裝置不支援的應用:
android:name="android.hardware.usb.host"
android:required="true"/>
3, sdk必須是12以上的,因為從 android3.1開始,才正式支援usb host相應開發。
4,在androidmanifext.xml中對操作usb對應的activity配置做修改,新增usb_device_attached與:
android:name=".usbtestactivity">
android:name="android.hardware.usb.action.usb_device_attached" />
intent-filter>
android:name="android.hardware.usb.action.usb_device_attached"
android:resource="@xml/device_filter" />
activity>
—–@xml/device_filter—–
<?xml version="1.0" encoding="utf-8"?>
MacOSX開發之USB通訊
背景 專案需要在mac上通過usb傳輸資訊,進行互動。實現 1 匯入依賴標頭檔案 include 2 初始化iohidmanager iohidmanagerref managerref iohidmanagercreate kcfallocatordefault,kiohidoptionstype...
MF Porting之USB驅動開發
花費了近三個禮拜的時間,終於完成了ti 開發板的usb 驅動開發,現在回頭想一想,其實也沒有什麼,具體硬體方面的通訊由dm355 實現了,軟體層面的資料互動由mf porting 實現了,所做的也就是熟悉了解usb 通訊協議和dm355 usb 相關的暫存器。在開發驅動的過程中,覺得有這麼幾個難點,...
MF Porting之USB驅動開發
花費了近三個禮拜的時間,終於完成了ti 開發板的usb 驅動開發,現在回頭想一想,其實也沒有什麼,具體硬體方面的通訊由dm355 實現了,軟體層面的資料互動由mf porting 實現了,所做的也就是熟悉了解usb 通訊協議和dm355 usb 相關的暫存器。在開發驅動的過程中,覺得有這麼幾個難點,...