2012-02-16 163 views
0

我有第三方USB設備,插入Windows機器時,被識別爲串行設備並分配給COM 4端口。我可以像使用通過串口連接的設備一樣與設備進行通信。例如,我可以通過USB連接將「abc」串行寫入設備。Android 3.1+ USB作爲虛擬COM端口

我一直在尋找一種方式在Android中做類似的事情。如果我嘗試Usb主機方法,並使用UsbManager打開UsbDevice,我可以得到一個接口,帶有2個端點。我嘗試使用UsbDeviceConnection中的方法發送控制消息,但該方法對於所有內容都返回-1(儘管我不知道應該使用該方法的參數)。

有沒有辦法讓我可以寫的OutputStream將發送字節到USB設備?現在我正在考慮重新編譯內核以包含虛擬COM端口驅動程序,並編寫一些本地代碼以便能夠執行此操作。

謝謝!

編輯:我正在使用FTDI串行至USB轉換器電路。這與Android兼容嗎?

+0

請你解釋一下或者給我一個約你處理如何與設備通信鏈路。我需要處理一個場景,就像你的場景一樣,但我不知道如何通過FTDI串口向USB轉換器發送android設備的數據到串口。 – 2015-03-26 19:03:01

回答

1

如果您的設備中的Linux內核支持FTDI,則可以將該設備作爲正常的COM端口訪問。它將被命名爲/dev/ttyUSB0

如果您的內核不支持這種類型的設備,您可以使用UsbHost接口編寫自己的驅動程序。檢查內核的FTDI驅動程序源代碼以獲取指導。

+1

謝謝!我已經做了一些進一步的研究,如果你想從Android應用程序中像com端口那樣訪問它,你需要root權限。一種不同的方式是在你的Android應用程序中寫一個「軟驅動器」。如果你希望它能夠「直接脫離市場」,這可以說是最好的辦法。您可以通過Android USB API發出控制傳輸命令來設置波特率,停止位等,然後使用帶有1個字節bulkTransfer()的for循環。我相信這是[this](http://slickdevlabs.com/slick-usb-2-serial-library/)的工作原理。 – ZachM 2012-02-22 11:12:15

0

如果你不介意生根您的手機和寫一些C,您可以使用FTDI在這裏的Android使用Android驅動程序通信:

http://www.ftdichip.com/Drivers/D2XX.htm

有一個libftd2xx-jni.so那裏你可以鏈接你的C代碼 - 我已經測試過它,它的工作原理。

0

在常見情況下,強烈建議不要使用生硬設備,因爲我可以爲我的設備執行此操作,但是我無法在安卓市場上發佈的公共應用程序執行此操作。在這種情況下,我認爲controlTransfer()是處理它的唯一方法。

相關問題