2017-09-08 231 views
1

我正在開發基於Am3352的主板上的應用程序,需要通過USB與Android設備(平板電腦/手機)進行通信。我需要通過USB來交換一些自定義數據字節(只有我的應用程序和運行在android設備上的應用程序才能理解)。通過USB與Android設備通信

當我將android平板電腦連接到我的AM3352主板時,我在VID PID等控制檯上獲取打印,表明設備正在檢測到。我需要知道的是,如何讓內核爲設備分配一個開發文件。例如,當我們將USB連接到串行轉換器時,我們將得到/ dev/ttyUSBx文件,以便我們可以打開它並寫入/讀取到該文件。類似的,可以直接連接USB嗎?

我期待生成一個/ dev/ttyACMx設備文件,以便我可以寫入和讀取它。內核中啓用了CDC/Modem支持。 (我不知道這是否會有所幫助,但無論如何只是試了一下)。

請讓我知道如何獲得與設備關聯的設備文件名,以便我可以讀取和寫入設備。

回答

1

首先你必須知道你的android設備是什麼樣的USB類型。如何在Linux機器上識別此設備?作爲大容量存儲還是CDC或其他?然後你可以嘗試與它溝通。而且您不必在/ dev /中通過USB創建任何設備來與android進行通信。看看libusb庫。

在你的例子中 -/dev/ttyUSBx被創建是因爲內核知道這是通信設備類。所以你也需要知道這個Android設備是什麼樣的USB設備。

+0

我的理解是,Android設備可以在不同的模式下運行,對吧?當連接USB時,平板電腦上會顯示一個彈出窗口,詢問要使用哪種模式。選擇相機(PTP)時,我可以將設備檢測爲LIB_CLASS_PTP(0x06),當選擇Buit-In CD選項它被檢測爲LIB_CLASS_MASS_STORAGE(0x08)。 –

+0

我需要知道是否有任何機制使其作爲通信類設備(0x02)或數據類設備(0x0A)。如果是這樣,我認爲,當設備連接到/ dev/ttyUSBx或/ dev/ttyACMx文件時,會自動生成哪些可用於fopen,讀寫功能的通信。這可能嗎 ? –

+0

如果我正確理解你 - 你想通過你自己的協議通過USB進行通信。首先 - 您需要將平板電腦用作通訊設備,並且可以在內核的Android中完成。要做到這一點,你可以看看Android內核的gadget驅動程序,如果有任何(可能是G_SERIAL),可以用作這種類型的設備。然後,您需要編寫Android程序來維護此類設備。 – user2699113