Android開發之USB資料通訊

2021-07-14 05:52:04 字數 3943 閱讀 2995

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 相關的暫存器。在開發驅動的過程中,覺得有這麼幾個難點,...