有關Android Usb Host開發

2021-06-21 17:00:55 字數 2051 閱讀 3783



最近有個專案是關於android應用與hid通過使用usb host模式通訊。由於以前沒做過usb方面的開發,而且看見網上在這方面的資料也很少,所以就發一篇博文和大家共享經驗。

回歸正題,在android usb host 開發中,對於發現裝置、如何連線裝置等等的都在官方api中說的清清楚楚了,我也不再詳述了,反而在與hid通訊傳輸資料就重點說一下,想要正確的與hid進行通訊並且傳輸資料,就必須要了解usb協議

,弄清楚裝置的相關引數,比如usb描述符,這個是必須的,不然就無法做任何事情了,這也是我血一般的教訓。

在官方api中,它分別提供了有關資料傳輸的方法如下:

bulktransfer(usbendpoint endpoint, byte buffer, int length, int timeout)

controltransfer(int requesttype, int request, int value, int index, byte buffer, int length, int timeout)

除了以上兩個方法可以進行資料傳輸以外,它還提供了乙個usbrequest類。

在與hid進行資料傳輸的時候,就要用到控制傳輸或中斷傳輸了。對於controltransfer這個方法,我想它裡面的引數就難倒了很多人,在這裡我就簡略的說一下,我是以我自己的demo為例子(注意:我所說的例子是與hid通訊的,如果不是hid裝置的話,就要注意了),希望能給各位乙個參考。

int requesttype:確定資料流的方向、請求型別以及接收端;由於是與hid通訊,所以它只能是00100001和100100001,再把它轉為16進製制(別告訴我不會16進製制)填上去就可以了。對於這個引數,位元位7是指資料傳輸的方向:從主機到裝置(out)為0,從裝置到主機(in)為1;位元位6到5是指請求型別:usb標準請求為00,usb類請求為01,廠商的自定義請求為10;位元位4到0是指接收端:指向裝置(00000)、專屬介面(00001)、端點(00010)、裝置中的其它元件(00011)。

int request:這個引數是對應的請求號。在我的demo中,使用到的請求是set report(因為在我的demo中需要傳送報表命令請求資料,所以才用set report;不同情況要不同請求),其對應的值就是0x09(查一下就知道了)了。

int value:可將請求專屬星系傳遞給裝置,有兩個位元組。對應於set preport,高位元組是報告型別(02為輸出,03為特徵),低位元組是報告id(預設為0)。

int index:可將請求專屬星系傳遞給裝置,有兩個位元組。典型的應用是傳遞索引或者諸如介面或端點號的偏移量(這些需要查詢自己的裝置資訊了,我這裡的hid的介面索引值為0)。

主要最難搞的前四個引數都說了,我想後面的那些引數不用了吧,一看就知道它們是什麼意思了。好了,現在說說我的情況吧,在我的demo中,我是使用了控制傳輸(controltransfer)傳送資料的,而接收資料則使用了中斷傳輸(因為裝置中有乙個in中斷端點),主要**如下:

//傳送資料命令

sendcommand(connection, 0xf1);

int maxpacketsize = endpoint.getmaxpacketsize();

bytebuffer bbuffer = bytebuffer.allocate(maxpacketsize);

//使用中斷傳輸接收資料

usbrequest request = new usbrequest();

//初始化請求,endpoint為in中斷端點

request.initialize(connection, endpoint);

//請求佇列接收資料

request.queue(bbuffer, maxpacketsize);

if (connection.requestwait() == request)

加一些小備註:

我的是外接資訊採集一類的usb裝置,滑鼠是沒問題的。。。使用官方的方法,你要注意在手機配置一些東西也就是許可權! 將android.hardware.usb.host.xml檔案放到/system/etc/permissions下; 第二處是在同目錄下的handheld_core_hardware.xml裡面新增一句 

有關Server Mappath解釋

先看圖 1,首先在本機e盤下面建立red資料夾,夾子內繼續建立conn.asp檔案,檔案內容如下 主要除錯三種路徑最後顯示的結果。2,在red資料夾下面建立資料夾database,該夾子內部存放cnbruce.mdb檔案。所以現在可以很肯定的知道資料庫檔案的絕對路徑是 e red database ...

有關於快取

我們使用快取的目的主要有如下幾點 1 減少資料庫查詢次數,降低資料庫負載。2 縮短php執行路徑,降低web前端負載。3 減少webserver的請求數量,降低web前端負載。第一項 比較接近底層,主要做細粒度資料快取,比如快取乙個資料物件,一行記錄等。只有當物件中的屬性或記錄中的字段值發生變化後使...

有關sql注入

大家存在5點誤區 1 sql注入比較難防,需要替換select,delete等一打字元 其實對於字元型替換再多都沒有替換單引號為兩個單引號來的好!對於數字型替換再多都沒有用,一定要型別轉換。2 忽略dropdownlist傳來的東西 其實是不對的,一切客戶端的東西都是不可信任的,select下拉框也...